From f258556f091f8d38d439741e09f20b746b82a1d4 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 28 Aug 2019 23:53:26 +0200 Subject: [PATCH 001/266] Initial commit From b1f3ca8cb7799139ecf03c7e511eb2385470b83b Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 5 Sep 2019 21:14:48 +0200 Subject: [PATCH 002/266] Prepare project --- .editorconfig | 15 + .eslintignore | 4 + .eslintrc.js | 130 ++ .gitignore | 7 + .travis.yml | 26 + .vscode/extensions.json | 17 + .vscode/launch.json | 15 + .vscode/settings.json | 22 + .vscode/tasks.json | 23 + LICENSE | 21 + README.adoc | 73 + jest.config.js | 188 ++ package.json | 53 + src/index.ts | 1 + test/main.test.ts | 4 + test/tsconfig.json | 5 + tsconfig.json | 76 + yarn.lock | 4348 +++++++++++++++++++++++++++++++++++++++ 18 files changed, 5028 insertions(+) create mode 100644 .editorconfig create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json create mode 100644 LICENSE create mode 100644 README.adoc create mode 100644 jest.config.js create mode 100644 package.json create mode 100644 src/index.ts create mode 100644 test/main.test.ts create mode 100644 test/tsconfig.json create mode 100644 tsconfig.json create mode 100644 yarn.lock diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..1a6a0ee --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +; http://editorconfig.org +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[patches/*.patch] +end_of_line = +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..fdcca26 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +/.tmp/ +/dist/ +/lib/ +/types/ diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..9c7bf88 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,130 @@ +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + project: './tsconfig.json', + }, + env: { + es6: true, + node: true, + }, + settings: { + 'import/resolver': { + // Use eslint-import-resolver-typescript to obey "paths" in tsconfig.json. + typescript: {}, + }, + }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/eslint-recommended', + 'plugin:@typescript-eslint/recommended', + 'standard-with-typescript', + 'plugin:import/recommended', + 'plugin:import/typescript', + ], + rules: { + 'comma-dangle': ['error', 'always-multiline'], + // Disable in favour of TypeScript rule. + 'func-call-spacing': 'off', + 'linebreak-style': ['error', 'unix'], + 'lines-between-class-members': 'off', + // Disable in favour of TypeScript rule. + 'no-extra-semi': 'off', + 'no-multi-spaces': ['warn', { + ignoreEOLComments: true, + }], + 'no-multiple-empty-lines': ['warn', { + max: 2, + maxEOF: 1, + maxBOF: 1, + }], + 'no-template-curly-in-string': 'off', + 'operator-linebreak': ['error', 'before'], + 'padded-blocks': ['warn', { + switches: 'never', + }], + 'quote-props': ['error', 'consistent-as-needed'], + // Disable in favour of TypeScript rule. + 'semi': 'off', + + // Import + 'import/newline-after-import': 'warn', + 'import/order': ['warn', { + 'groups': [['builtin', 'external']], + 'newlines-between': 'always-and-inside-groups', + }], + + // TypeScript + '@typescript-eslint/await-thenable': 'error', + '@typescript-eslint/consistent-type-definitions': ['warn', 'type'], + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-member-accessibility': ['warn', { + accessibility: 'no-public', + overrides: { + parameterProperties: 'off', + }, + }], + '@typescript-eslint/func-call-spacing': ['error', 'never'], + '@typescript-eslint/indent': ['error', 2, { + SwitchCase: 1, + VariableDeclarator: 1, + outerIIFEBody: 1, + MemberExpression: 1, + // Changed parameters from 1 to off. + FunctionDeclaration: { parameters: 'off', body: 1 }, + // Changed parameters from 1 to off. + FunctionExpression: { parameters: 'off', body: 1 }, + // Changed arguments from 1 to off. + CallExpression: { arguments: 'off' }, + ArrayExpression: 1, + ObjectExpression: 1, + ImportDeclaration: 1, + // Changed from false to true. + flatTernaryExpressions: true, + ignoreComments: false, + }], + '@typescript-eslint/member-delimiter-style': ['error', { + multiline: { delimiter: 'comma', requireLast: true }, + singleline: { delimiter: 'comma', requireLast: false }, + }], + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-floating-promises': 'error', + '@typescript-eslint/no-namespace': 'warn', + '@typescript-eslint/no-object-literal-type-assertion': 'off', + '@typescript-eslint/no-parameter-properties': 'off', + '@typescript-eslint/no-require-imports': 'error', + '@typescript-eslint/no-unused-vars': ['error', { + argsIgnorePattern: '^_', + }], + '@typescript-eslint/no-use-before-define': ['error', { + classes: true, + functions: false, + typedefs: false, + variables: true, + }], + '@typescript-eslint/prefer-for-of': 'warn', + '@typescript-eslint/prefer-includes': 'warn', + '@typescript-eslint/prefer-interface': 'off', + '@typescript-eslint/prefer-string-starts-ends-with': 'warn', + '@typescript-eslint/promise-function-async': ['error', { + allowAny: true, + }], + '@typescript-eslint/semi': ['error', 'never'], + }, + overrides: [ + { + files: ['*.test.ts'], + rules: { + // Allow to format arrays for parametrized tests as tables. + 'array-bracket-spacing': 'off', + 'comma-spacing': 'off', + 'no-multi-spaces': 'off', + 'standard/array-bracket-even-spacing': 'off', + // Allow spaces inside expect( foo ). + 'space-in-parens': 'off', + // jest.mock() must be above imports. + 'import/first': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + }, + }, + ], +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..52437b0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +/coverage/ +/dist/ +/lib/ +/.*cache/ +/.tmp/ +node_modules/ +*.log diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..c968c67 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,26 @@ +dist: bionic +language: node_js +node_js: + - '10' + - '12' + - node + +cache: yarn + +install: + - yarn install + +script: + - yarn run build + - yarn run test + - yarn run lint + +deploy: + provider: npm + email: jakub@jirutka.cz + api_key: + secure: TODO + skip_cleanup: true + on: + tags: true + node_js: '10' diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..0c484aa --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,17 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations. + // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp + + // List of extensions which should be recommended for users of this workspace. + "recommendations": [ + "dbaeumer.vscode-eslint", + "EditorConfig.EditorConfig", + "gamunu.vscode-yarn", + "Orta.vscode-jest", + "shtian.jest-snippets-standard" + ], + // List of extensions recommended by VS Code that should not be recommended for users of this workspace. + "unwantedRecommendations": [ + "ms-vscode.vscode-typescript-tslint-plugin" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..384ecce --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible Node.js debug attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "attach", + "name": "Attach by Process ID", + "processId": "${command:PickProcess}", + "protocol": "inspector" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..8f05d5c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,22 @@ +{ + "editor.insertSpaces": true, + "editor.tabSize": 2, + + "eslint.packageManager": "yarn", + "eslint.validate": [ + "javascript", + "typescript" + ], + + "files.encoding": "utf8", + "files.eol": "\n", + "files.insertFinalNewline": true, + "files.trimTrailingWhitespace": true, + + "flow.enabled": false, + + "search.exclude": { + "**/node_modules": true, + "**/dist": true + } +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..ae40786 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,23 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "type": "yarn", + "task": "build", + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "type": "yarn", + "task": "test", + "group": { + "kind": "test", + "isDefault": true + } + } + ] +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..cbde456 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright 2019 Jakub Jirutka . + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.adoc b/README.adoc new file mode 100644 index 0000000..3738f60 --- /dev/null +++ b/README.adoc @@ -0,0 +1,73 @@ += Jupyter Notebook to HTML +:npm-name: ipynb2html +:gh-name: jirutka/{npm-name} +:gh-branch: master +:vs-marketplace-uri: https://marketplace.visualstudio.com/items?itemName= + +ifdef::env-github[] +image:https://travis-ci.com/{gh-name}.svg?branch={gh-branch}[Build Status, link="https://travis-ci.com/{gh-name}"] +image:https://img.shields.io/npm/v/{npm-name}.svg[npm Version, link="https://www.npmjs.org/package/{npm-name}"] +endif::env-github[] + +TODO + + +== Development + +== System Requirements + +* https://nodejs.org[NodeJS] 10.13+ +* https://yarnpkg.com[yarn] 1.6+ (can be installed using npm) + + +=== Used Tools + +* https://www.typescriptlang.org[TypeScript] the language +* https://yarnpkg.com[yarn] for dependencies management and building +* https://eslint.org[ESLint] for linting JS/TypeScript code +* https://jestjs.io[Jest] for testing + + +=== How to Start + +. Clone this repository: +[source, subs="+attributes"] +git clone git@github.com:{gh-name}.git + +. Install Yarn (if you don’t have it already): +[source] +npm install -g yarn + +. Install all JS dependencies: +[source] +yarn install + +. Build the project: +[source] +yarn build + +. Run tests: +[source] +yarn test + +. Run linter: +[source] +yarn lint + +IMPORTANT: Keep in mind that JS sources are located in the directory `src`; directory `lib` contains transpiled code (created after running `yarn build`)! + + +=== Visual Studio Code + +If you use Visual Studio Code, you should install the following extensions: + +* link:{vs-marketplace-uri}EditorConfig.EditorConfig[EditorConfig for VS Code] +* link:{vs-marketplace-uri}dbaeumer.vscode-eslint[ESLint] +* 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] + + +== License + +This project is licensed under http://opensource.org/licenses/MIT/[MIT License]. +For the full text of the license, see the link:LICENSE[LICENSE] file. diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..a9869a6 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,188 @@ +// For a detailed explanation regarding each configuration property, visit: +// https://jestjs.io/docs/en/configuration.html + +module.exports = { + // All imported modules in your tests should be mocked automatically + // automock: false, + + // Stop running tests after `n` failures + // bail: 0, + + // Respect "browser" field in package.json when resolving modules + // browser: false, + + // The directory where Jest should store its cached dependency information + // cacheDirectory: '/tmp/jest_rt', + + // Automatically clear mock calls and instances between every test + clearMocks: true, + + // Indicates whether the coverage information should be collected while executing the test + // collectCoverage: false, + + // An array of glob patterns indicating a set of files for which coverage information should be collected + collectCoverageFrom: [ + '/src/**/*.ts', + ], + + // The directory where Jest should output its coverage files + coverageDirectory: 'coverage', + + // An array of regexp pattern strings used to skip coverage collection + // coveragePathIgnorePatterns: [ + // '/node_modules/' + // ], + + // A list of reporter names that Jest uses when writing coverage reports + // coverageReporters: [ + // 'json', + // 'text', + // 'lcov', + // 'clover' + // ], + + // An object that configures minimum threshold enforcement for coverage results + // coverageThreshold: null, + + // A path to a custom dependency extractor + // dependencyExtractor: null, + + // Make calling deprecated APIs throw helpful error messages + // errorOnDeprecated: false, + + // Force coverage collection from ignored files using an array of glob patterns + // forceCoverageMatch: [], + + // A path to a module which exports an async function that is triggered once before all test suites + // globalSetup: null, + + // A path to a module which exports an async function that is triggered once after all test suites + // globalTeardown: null, + + // A set of global variables that need to be available in all test environments + // globals: {}, + + // An array of directory names to be searched recursively up from the requiring module's location + // moduleDirectories: [ + // 'node_modules' + // ], + + // An array of file extensions your modules use + // moduleFileExtensions: [ + // 'js', + // 'json', + // 'jsx', + // 'ts', + // 'tsx', + // 'node' + // ], + + // A map from regular expressions to module names that allow to stub out resources with a single module + moduleNameMapper: { + '@/(.*)': '/src/$1', + }, + + // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader + // modulePathIgnorePatterns: [], + + // Activates notifications for test results + // notify: false, + + // An enum that specifies notification mode. Requires { notify: true } + // notifyMode: "failure-change", + + // A preset that is used as a base for Jest's configuration + preset: 'ts-jest', + + // Run tests from one or more projects + // projects: null, + + // Use this configuration option to add custom reporters to Jest + // reporters: undefined, + + // Automatically reset mock state between every test + // resetMocks: false, + + // Reset the module registry before running each individual test + // resetModules: false, + + // A path to a custom resolver + // resolver: null, + + // Automatically restore mock state between every test + // restoreMocks: false, + + // The root directory that Jest should scan for tests and modules within + // rootDir: null, + + // A list of paths to directories that Jest should use to search for files in + // roots: [ + // '' + // ], + + // Allows you to use a custom runner instead of Jest's default test runner + // runner: 'jest-runner', + + // The paths to modules that run some code to configure or set up the testing environment before each test + // setupFiles: [], + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + // setupFilesAfterEnv: [], + + // A list of paths to snapshot serializer modules Jest should use for snapshot testing + // snapshotSerializers: [], + + // The test environment that will be used for testing + testEnvironment: 'node', + + // Options that will be passed to the testEnvironment + // testEnvironmentOptions: {}, + + // Adds a location field to test results + // testLocationInResults: false, + + // The glob patterns Jest uses to detect test files + testMatch: [ + '/test/**/*.test.[jt]s', + ], + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped + // testPathIgnorePatterns: [ + // '/node_modules/' + // ], + + // The regexp pattern or array of patterns that Jest uses to detect test files + // testRegex: [], + + // This option allows the use of a custom results processor + // testResultsProcessor: null, + + // This option allows use of a custom test runner + // testRunner: 'jasmine2', + + // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href + // testURL: 'http://localhost', + + // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" + // timers: 'real', + + // A map from regular expressions to paths to transformers + // transform: null, + + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation + // transformIgnorePatterns: [ + // '/node_modules/' + // ], + + // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them + // unmockedModulePathPatterns: undefined, + + // Indicates whether each individual test should be reported during the run + // verbose: null, + + // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode + // watchPathIgnorePatterns: [], + + // Whether to use watchman for file crawling + // watchman: true, +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..142217d --- /dev/null +++ b/package.json @@ -0,0 +1,53 @@ +{ + "name": "ipynb2html", + "version": "0.0.0", + "description": "Convert Jupyter Notebook to static HTML", + "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": [ + "converter", + "html", + "ipython", + "jupyter", + "notebook" + ], + "main": "lib/index.js", + "files": [ + "lib", + "src" + ], + "scripts": { + "build": "tsc", + "lint": "eslint 'src/**/*.[jt]s'", + "test": "jest --detectOpenHandles --coverage --verbose", + "watch-ts": "tsc -w" + }, + "engines": { + "node": ">=10.13.0" + }, + "dependencies": {}, + "devDependencies": { + "@types/jest": "^24.0.18", + "@types/node": "^10.13.0", + "@typescript-eslint/eslint-plugin": "^1.13.0", + "@typescript-eslint/parser": "^1.13.0", + "eslint": "^6.2.2", + "eslint-config-standard-with-typescript": "^8.0.0", + "eslint-import-resolver-typescript": "^1.1.1", + "eslint-plugin-import": "^2.18.0", + "eslint-plugin-node": "^9.1.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.0", + "jest": "^24.9.0", + "npm-run-all": "^4.1.5", + "ts-jest": "^24.1.0", + "ts-node": "^8.3.0", + "typescript": "~3.5.2" + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..70b786d --- /dev/null +++ b/src/index.ts @@ -0,0 +1 @@ +// TODO diff --git a/test/main.test.ts b/test/main.test.ts new file mode 100644 index 0000000..c797723 --- /dev/null +++ b/test/main.test.ts @@ -0,0 +1,4 @@ + +it('1 + 1 should be 2', () => { + expect( 1 + 1 ).toBe(2) +}) diff --git a/test/tsconfig.json b/test/tsconfig.json new file mode 100644 index 0000000..7c935a3 --- /dev/null +++ b/test/tsconfig.json @@ -0,0 +1,5 @@ +// This file is needed only for VSCode, see https://github.com/palmerhq/tsdx/issues/84. +{ + "extends": "../tsconfig.json", + "include": ["."], +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..158a628 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,76 @@ +{ + "compilerOptions": { + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es2018", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "./lib", /* Redirect output structure to the directory. */ + // "rootDir": ".", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + "strictNullChecks": true, /* Enable strict null checks. */ + "strictFunctionTypes": true, /* Enable strict checking of function types. */ + "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + "baseUrl": "./src", /* Base directory to resolve non-absolute module names. */ + "paths": { /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + "*": ["../types/*"], + "@/*": ["./*"], /* resolve all modules prefixed with '@/' from 'src' directory */ + }, + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + "typeRoots": [ /* List of folders to include type definitions from. */ + "./types", + "./node_modules/@types" + ], + // "types": [], /* Type declaration files to be included in compilation. */ + "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + "resolveJsonModule": true, /* Include modules imported with .json extension. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + }, + "include": [ + "src", + ], + "exclude": [ + "node_modules", + ] +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..03391fd --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4348 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/core@^7.1.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.0.tgz#9b00f73554edd67bebc86df8303ef678be3d7b48" + integrity sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.0" + "@babel/helpers" "^7.6.0" + "@babel/parser" "^7.6.0" + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.0" + "@babel/types" "^7.6.0" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.4.0", "@babel/generator@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.0.tgz#e2c21efbfd3293ad819a2359b448f002bfdfda56" + integrity sha512-Ms8Mo7YBdMMn1BYuNtKuP/z0TgEIhbcyB8HVR6PPNYp4P61lMsABiS4A3VG1qznjXVCf3r+fVHhm4efTYVsySA== + dependencies: + "@babel/types" "^7.6.0" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== + dependencies: + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== + +"@babel/helper-split-export-declaration@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" + integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== + dependencies: + "@babel/types" "^7.4.4" + +"@babel/helpers@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.0.tgz#21961d16c6a3c3ab597325c34c465c0887d31c6e" + integrity sha512-W9kao7OBleOjfXtFGgArGRX6eCP0UEcA2ZWEWNkJdRZnHhW4eEbeswbG3EwaRsnQUAEGWYgMq1HsIXuNNNy2eQ== + dependencies: + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.0" + "@babel/types" "^7.6.0" + +"@babel/highlight@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.0.tgz#3e05d0647432a8326cb28d0de03895ae5a57f39b" + integrity sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ== + +"@babel/plugin-syntax-object-rest-spread@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" + integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" + integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.0" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.0.tgz#389391d510f79be7ce2ddd6717be66d3fed4b516" + integrity sha512-93t52SaOBgml/xY74lsmt7xOR4ufYvhb5c5qiM6lu4J/dWGMAfAh6eKw4PjLes6DI6nQgearoxnFJk60YchpvQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.0" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.6.0": + version "7.6.1" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648" + integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@cnakazawa/watch@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" + integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@jest/console@^24.7.1", "@jest/console@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" + integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== + dependencies: + "@jest/source-map" "^24.9.0" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/core@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" + integrity sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A== + dependencies: + "@jest/console" "^24.7.1" + "@jest/reporters" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-changed-files "^24.9.0" + jest-config "^24.9.0" + jest-haste-map "^24.9.0" + jest-message-util "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-resolve-dependencies "^24.9.0" + jest-runner "^24.9.0" + jest-runtime "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + jest-watcher "^24.9.0" + micromatch "^3.1.10" + p-each-series "^1.0.0" + realpath-native "^1.1.0" + rimraf "^2.5.4" + slash "^2.0.0" + strip-ansi "^5.0.0" + +"@jest/environment@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" + integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ== + dependencies: + "@jest/fake-timers" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + +"@jest/fake-timers@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" + integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== + dependencies: + "@jest/types" "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + +"@jest/reporters@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" + integrity sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw== + dependencies: + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + istanbul-lib-coverage "^2.0.2" + istanbul-lib-instrument "^3.0.1" + istanbul-lib-report "^2.0.4" + istanbul-lib-source-maps "^3.0.1" + istanbul-reports "^2.2.6" + jest-haste-map "^24.9.0" + jest-resolve "^24.9.0" + jest-runtime "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.6.0" + node-notifier "^5.4.2" + slash "^2.0.0" + source-map "^0.6.0" + string-length "^2.0.0" + +"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" + integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" + +"@jest/test-result@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" + integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== + dependencies: + "@jest/console" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/istanbul-lib-coverage" "^2.0.0" + +"@jest/test-sequencer@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" + integrity sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A== + dependencies: + "@jest/test-result" "^24.9.0" + jest-haste-map "^24.9.0" + jest-runner "^24.9.0" + jest-runtime "^24.9.0" + +"@jest/transform@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" + integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^24.9.0" + babel-plugin-istanbul "^5.1.0" + chalk "^2.0.1" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.15" + jest-haste-map "^24.9.0" + jest-regex-util "^24.9.0" + jest-util "^24.9.0" + micromatch "^3.1.10" + pirates "^4.0.1" + realpath-native "^1.1.0" + slash "^2.0.0" + source-map "^0.6.1" + write-file-atomic "2.4.1" + +"@jest/types@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" + integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^13.0.0" + +"@types/babel__core@^7.1.0": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30" + integrity sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc" + integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.7.tgz#2496e9ff56196cc1429c72034e07eab6121b6f3f" + integrity sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw== + dependencies: + "@babel/types" "^7.3.0" + +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" + integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== + +"@types/istanbul-lib-report@*": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c" + integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" + integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/jest-diff@*": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" + integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== + +"@types/jest@^24.0.18": + version "24.0.18" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.18.tgz#9c7858d450c59e2164a8a9df0905fc5091944498" + integrity sha512-jcDDXdjTcrQzdN06+TSVsPPqxvsZA/5QkYfIZlq1JMw7FdP5AZylbOc+6B/cuDurctRe+MziUMtQ3xQdrbjqyQ== + dependencies: + "@types/jest-diff" "*" + +"@types/json-schema@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" + integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + +"@types/node@^10.13.0": + version "10.14.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.18.tgz#b7d45fc950e6ffd7edc685e890d13aa7b8535dce" + integrity sha512-ryO3Q3++yZC/+b8j8BdKd/dn9JlzlHBPdm80656xwYUdmPkpTGTjkAdt6BByiNupGPE8w0FhBgvYy/fX9hRNGQ== + +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== + +"@types/yargs-parser@*": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" + integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg== + +"@types/yargs@^13.0.0": + version "13.0.2" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.2.tgz#a64674fc0149574ecd90ba746e932b5a5f7b3653" + integrity sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz#22fed9b16ddfeb402fd7bcde56307820f6ebc49f" + integrity sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g== + dependencies: + "@typescript-eslint/experimental-utils" "1.13.0" + eslint-utils "^1.3.1" + functional-red-black-tree "^1.0.1" + regexpp "^2.0.1" + tsutils "^3.7.0" + +"@typescript-eslint/experimental-utils@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e" + integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "1.13.0" + eslint-scope "^4.0.0" + +"@typescript-eslint/parser@^1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.13.0.tgz#61ac7811ea52791c47dc9fd4dd4a184fae9ac355" + integrity sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "1.13.0" + "@typescript-eslint/typescript-estree" "1.13.0" + eslint-visitor-keys "^1.0.0" + +"@typescript-eslint/typescript-estree@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e" + integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw== + dependencies: + lodash.unescape "4.0.1" + semver "5.5.0" + +abab@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.1.tgz#3fa17797032b71410ec372e11668f4b4ffc86a82" + integrity sha512-1zSbbCuoIjafKZ3mblY5ikvAb0ODUbqBnFuUb7f6uLeQhhGJ0vEV4ntmtxKLT2WgXCO94E07BjunsIw1jOMPZw== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-globals@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== + dependencies: + acorn "^6.0.1" + acorn-walk "^6.0.1" + +acorn-jsx@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f" + integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw== + +acorn-walk@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== + +acorn@^5.5.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + +acorn@^6.0.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" + integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== + +acorn@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a" + integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ== + +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.0.0, ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arg@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.1.tgz#485f8e7c390ce4c5f78257dbea80d4be11feda4c" + integrity sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= + +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^1.0.0: + version "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= + +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + +babel-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" + integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw== + dependencies: + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/babel__core" "^7.1.0" + babel-plugin-istanbul "^5.1.0" + babel-preset-jest "^24.9.0" + chalk "^2.4.2" + slash "^2.0.0" + +babel-plugin-istanbul@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" + integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + find-up "^3.0.0" + istanbul-lib-instrument "^3.3.0" + test-exclude "^5.2.3" + +babel-plugin-jest-hoist@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" + integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw== + dependencies: + "@types/babel__traverse" "^7.0.6" + +babel-preset-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" + integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg== + dependencies: + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + babel-plugin-jest-hoist "^24.9.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +browser-process-hrtime@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" + integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== + +browser-resolve@^1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== + dependencies: + resolve "1.1.7" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.0.tgz#65fc784bf7f87c009b973c12db6546902fa9c7b5" + integrity sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg== + dependencies: + node-int64 "^0.4.0" + +buffer-from@1.x, buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chownr@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" + integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + 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== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@~2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +convert-source-map@^1.1.0, convert-source-map@^1.4.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +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" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" + integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== + dependencies: + cssom "0.3.x" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + +debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= + +diff-sequences@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" + integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== + +diff@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" + integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== + dependencies: + webidl-conversions "^4.0.2" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +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" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.12.0, es-abstract@^1.4.3, es-abstract@^1.5.1, es-abstract@^1.7.0: + version "1.14.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.2.tgz#7ce108fad83068c8783c3cdf62e504e084d8c497" + integrity sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.0" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-inspect "^1.6.0" + object-keys "^1.1.1" + string.prototype.trimleft "^2.0.0" + string.prototype.trimright "^2.0.0" + +es-to-primitive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@^1.9.1: + version "1.12.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" + integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-standard-with-typescript@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-8.0.0.tgz#295a0a25e788e8cc703aee97a63abebd4728ee87" + integrity sha512-6MS0ldyjlwUuJ31D1hdFCOXHrMAKw4iHaawWrtpa15/Pt7dbSjkwQmeeNQ8oKcjoDwreEPVxcZxnbQSz5L7FcQ== + dependencies: + "@typescript-eslint/parser" "^1.13.0" + eslint-config-standard "^13.0.1" + +eslint-config-standard@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-13.0.1.tgz#c9c6ffe0cfb8a51535bc5c7ec9f70eafb8c6b2c0" + integrity sha512-zLKp4QOgq6JFgRm1dDCVv1Iu0P5uZ4v5Wa4DTOkg2RFMxdCX/9Qf7lz9ezRj2dBRa955cWQF/O/LWEiYWAHbTw== + +eslint-import-resolver-node@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== + dependencies: + debug "^2.6.9" + resolve "^1.5.0" + +eslint-import-resolver-typescript@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-1.1.1.tgz#e6d42172b95144ef16610fe104ef38340edea591" + integrity sha512-jqSfumQ+H5y3FUJ6NjRkbOQSUOlbBucGTN3ELymOtcDBbPjVdm/luvJuCfCaIXGh8sEF26ma1qVdtDgl9ndhUg== + dependencies: + debug "^4.0.1" + resolve "^1.4.0" + tsconfig-paths "^3.6.0" + +eslint-module-utils@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c" + integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw== + dependencies: + debug "^2.6.8" + pkg-dir "^2.0.0" + +eslint-plugin-es@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz#12acae0f4953e76ba444bfd1b2271081ac620998" + integrity sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA== + dependencies: + eslint-utils "^1.4.2" + regexpp "^2.0.1" + +eslint-plugin-import@^2.18.0: + version "2.18.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" + integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== + dependencies: + array-includes "^3.0.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.4.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.0" + read-pkg-up "^2.0.0" + resolve "^1.11.0" + +eslint-plugin-node@^9.1.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-9.2.0.tgz#b1911f111002d366c5954a6d96d3cd5bf2a3036a" + integrity sha512-2abNmzAH/JpxI4gEOwd6K8wZIodK3BmHbTxz4s79OIYwwIt2gkpEXlAouJXu4H1c9ySTnRso0tsuthSOZbUMlA== + dependencies: + eslint-plugin-es "^1.4.1" + eslint-utils "^1.4.2" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-promise@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" + integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== + +eslint-plugin-standard@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz#ff0519f7ffaff114f76d1bd7c3996eef0f6e20b4" + integrity sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ== + +eslint-scope@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.1, eslint-utils@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" + integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== + dependencies: + eslint-visitor-keys "^1.0.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + +eslint@^6.2.2: + version "6.4.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.4.0.tgz#5aa9227c3fbe921982b2eda94ba0d7fae858611a" + integrity sha512-WTVEzK3lSFoXUovDHEbkJqCVPEPwbhCq4trDktNI6ygs7aO41d4cDT0JFAT5MivzZeVLWlg7vHL+bgrQv/t3vA== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.2" + eslint-visitor-keys "^1.1.0" + espree "^6.1.1" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^6.4.1" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de" + integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ== + dependencies: + acorn "^7.0.0" + acorn-jsx "^5.0.2" + eslint-visitor-keys "^1.1.0" + +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +exec-sh@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" + integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" + integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q== + dependencies: + "@jest/types" "^24.9.0" + ansi-styles "^3.2.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-regex-util "^24.9.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= + dependencies: + bser "^2.0.0" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" + integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fs-minipass@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" + integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== + dependencies: + minipass "^2.2.1" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.9" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" + integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + dependencies: + nan "^2.12.1" + node-pre-gyp "^0.12.0" + +function-bind@^1.0.2, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" + integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== + dependencies: + is-glob "^4.0.1" + +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0, globals@^11.7.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" + integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +handlebars@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.2.0.tgz#57ce8d2175b9bbb3d8b3cf3e4217b1aec8ddcb2e" + integrity sha512-Kb4xn5Qh1cxAKvQnzNWZ512DhABzyFNmsaJf3OAkWNa4NkaqWcNI8Tao8Tasi0/F4JD9oyG0YxuFyvyR57d+Gw== + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4: + version "2.8.4" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546" + integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ== + +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" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== + dependencies: + whatwg-encoding "^1.0.1" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-walk@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.2.tgz#99d83a246c196ea5c93ef9315ad7b0819c35069b" + integrity sha512-EXyErtpHbn75ZTsOADsfx6J/FPo6/5cjev46PXrcTpd8z3BoRkXgYu9/JVqrI7tusjmwCZutGeRJeU0Wo1e4Cw== + dependencies: + minimatch "^3.0.4" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.1: + version "5.1.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" + integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== + +import-fresh@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" + integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, 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== + +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +inquirer@^6.4.1: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +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" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.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" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +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" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= + dependencies: + has "^1.0.1" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + dependencies: + has-symbols "^1.0.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" + integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== + +istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" + integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== + dependencies: + "@babel/generator" "^7.4.0" + "@babel/parser" "^7.4.3" + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.3" + "@babel/types" "^7.4.0" + istanbul-lib-coverage "^2.0.5" + semver "^6.0.0" + +istanbul-lib-report@^2.0.4: + version "2.0.8" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" + integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== + dependencies: + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + supports-color "^6.1.0" + +istanbul-lib-source-maps@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" + integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + rimraf "^2.6.3" + source-map "^0.6.1" + +istanbul-reports@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" + integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== + dependencies: + handlebars "^4.1.2" + +jest-changed-files@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" + integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg== + dependencies: + "@jest/types" "^24.9.0" + execa "^1.0.0" + throat "^4.0.0" + +jest-cli@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" + integrity sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg== + dependencies: + "@jest/core" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + exit "^0.1.2" + import-local "^2.0.0" + is-ci "^2.0.0" + jest-config "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + prompts "^2.0.1" + realpath-native "^1.1.0" + yargs "^13.3.0" + +jest-config@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" + integrity sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^24.9.0" + "@jest/types" "^24.9.0" + babel-jest "^24.9.0" + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^24.9.0" + jest-environment-node "^24.9.0" + jest-get-type "^24.9.0" + jest-jasmine2 "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + micromatch "^3.1.10" + pretty-format "^24.9.0" + realpath-native "^1.1.0" + +jest-diff@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" + integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== + dependencies: + chalk "^2.0.1" + diff-sequences "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-docblock@^24.3.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" + integrity sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA== + dependencies: + detect-newline "^2.1.0" + +jest-each@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" + integrity sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog== + dependencies: + "@jest/types" "^24.9.0" + chalk "^2.0.1" + jest-get-type "^24.9.0" + jest-util "^24.9.0" + pretty-format "^24.9.0" + +jest-environment-jsdom@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" + integrity sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA== + dependencies: + "@jest/environment" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + jest-util "^24.9.0" + jsdom "^11.5.1" + +jest-environment-node@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" + integrity sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA== + dependencies: + "@jest/environment" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + jest-util "^24.9.0" + +jest-get-type@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" + integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== + +jest-haste-map@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" + integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== + dependencies: + "@jest/types" "^24.9.0" + anymatch "^2.0.0" + fb-watchman "^2.0.0" + graceful-fs "^4.1.15" + invariant "^2.2.4" + jest-serializer "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.9.0" + micromatch "^3.1.10" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^1.2.7" + +jest-jasmine2@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" + integrity sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^24.9.0" + is-generator-fn "^2.0.0" + jest-each "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-runtime "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + pretty-format "^24.9.0" + throat "^4.0.0" + +jest-leak-detector@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" + integrity sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA== + dependencies: + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-matcher-utils@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" + integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== + dependencies: + chalk "^2.0.1" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-message-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" + integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/stack-utils" "^1.0.1" + chalk "^2.0.1" + micromatch "^3.1.10" + slash "^2.0.0" + stack-utils "^1.0.1" + +jest-mock@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" + integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== + dependencies: + "@jest/types" "^24.9.0" + +jest-pnp-resolver@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" + integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== + +jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" + integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== + +jest-resolve-dependencies@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" + integrity sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g== + dependencies: + "@jest/types" "^24.9.0" + jest-regex-util "^24.3.0" + jest-snapshot "^24.9.0" + +jest-resolve@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" + integrity sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ== + dependencies: + "@jest/types" "^24.9.0" + browser-resolve "^1.11.3" + chalk "^2.0.1" + jest-pnp-resolver "^1.2.1" + realpath-native "^1.1.0" + +jest-runner@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" + integrity sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg== + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.4.2" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-config "^24.9.0" + jest-docblock "^24.3.0" + jest-haste-map "^24.9.0" + jest-jasmine2 "^24.9.0" + jest-leak-detector "^24.9.0" + jest-message-util "^24.9.0" + jest-resolve "^24.9.0" + jest-runtime "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.6.0" + source-map-support "^0.5.6" + throat "^4.0.0" + +jest-runtime@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" + integrity sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw== + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.9.0" + "@jest/source-map" "^24.3.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.1.15" + jest-config "^24.9.0" + jest-haste-map "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + realpath-native "^1.1.0" + slash "^2.0.0" + strip-bom "^3.0.0" + yargs "^13.3.0" + +jest-serializer@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" + integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== + +jest-snapshot@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" + integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + expect "^24.9.0" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-resolve "^24.9.0" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^24.9.0" + semver "^6.2.0" + +jest-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" + integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== + dependencies: + "@jest/console" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/source-map" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + callsites "^3.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.15" + is-ci "^2.0.0" + mkdirp "^0.5.1" + slash "^2.0.0" + source-map "^0.6.0" + +jest-validate@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" + integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== + dependencies: + "@jest/types" "^24.9.0" + camelcase "^5.3.1" + chalk "^2.0.1" + jest-get-type "^24.9.0" + leven "^3.1.0" + pretty-format "^24.9.0" + +jest-watcher@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" + integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw== + dependencies: + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + jest-util "^24.9.0" + string-length "^2.0.0" + +jest-worker@^24.6.0, jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" + integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw== + dependencies: + import-local "^2.0.0" + jest-cli "^24.9.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^11.5.1: + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== + dependencies: + abab "^2.0.0" + acorn "^5.5.3" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + cssom ">= 0.3.2 < 0.4.0" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" + html-encoding-sniffer "^1.0.2" + left-pad "^1.3.0" + nwsapi "^2.0.7" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.4" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@2.x, json5@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" + integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + dependencies: + minimist "^1.2.0" + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +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" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= + +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-error@1.x, make-error@^1.1.1: + version "1.3.5" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" + integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== + +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +mime-db@1.40.0: + version "1.40.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" + integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.24" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" + integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + dependencies: + mime-db "1.40.0" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +minipass@^2.2.1, minipass@^2.3.5: + version "2.5.1" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.5.1.tgz#cf435a9bf9408796ca3a3525a8b851464279c9b8" + integrity sha512-dmpSnLJtNQioZFI5HfQ55Ad0DzzsMAb+HfokwRTNXwEQjepbTkl5mtIlSVxGIkOkxlpX7wIn5ET/oAd9fZ/Y/Q== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.2.tgz#6f0ccc82fa53e1bf2ff145f220d2da9fa6e3a166" + integrity sha512-hR3At21uSrsjjDTWrbu0IMLTpnkpv8IIMFDFaoz43Tmu4LkmAXfH44vNNzpTnf+OAQQCHrb91y/wc2J4x5XgSQ== + dependencies: + minipass "^2.2.1" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +nan@^2.12.1: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +needle@^2.2.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +neo-async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^5.4.2: + version "5.4.3" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" + integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== + dependencies: + growly "^1.3.0" + is-wsl "^1.1.0" + semver "^5.5.0" + shellwords "^0.1.1" + which "^1.3.0" + +node-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + +npm-packlist@^1.1.6: + version "1.4.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" + integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npm-run-all@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== + dependencies: + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" + memorystream "^0.3.1" + minimatch "^3.0.4" + pidtree "^0.3.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +nwsapi@^2.0.7: + version "2.1.4" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f" + integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" + integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" + integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1, optionator@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-each-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" + integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= + dependencies: + p-reduce "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" + integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pidtree@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.0.tgz#f6fada10fccc9f99bf50e90d0b23d72c9ebc2e6b" + integrity sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +pretty-format@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" + integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== + dependencies: + "@jest/types" "^24.9.0" + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + react-is "^16.8.4" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +prompts@^2.0.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.2.1.tgz#f901dd2a2dfee080359c0e20059b24188d75ad35" + integrity sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.3" + +psl@^1.1.24, psl@^1.1.28: + version "1.4.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" + integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-is@^16.8.4: + version "16.9.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb" + integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw== + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== + dependencies: + find-up "^3.0.0" + read-pkg "^3.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +readable-stream@^2.0.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +realpath-native@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" + integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== + dependencies: + util.promisify "^1.0.0" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request-promise-core@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" + integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== + dependencies: + lodash "^4.17.11" + +request-promise-native@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" + integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== + dependencies: + request-promise-core "1.1.2" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.87.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "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== + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.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" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + +resolve@1.x, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + +rxjs@^6.4.0: + version "6.5.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" + integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== + dependencies: + tslib "^1.9.0" + +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.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + 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== + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== + +semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shell-quote@^1.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +sisteransi@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.3.tgz#98168d62b79e3a5e758e27ae63c4a053d748f4eb" + integrity sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.6: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stack-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string.prototype.padend@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" + integrity sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.4.3" + function-bind "^1.0.2" + +string.prototype.trimleft@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" + integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" + integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" + integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + 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" + +symbol-tree@^3.2.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +tar@^4: + version "4.4.10" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" + integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.5" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +test-exclude@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" + integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== + dependencies: + glob "^7.1.3" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" + require-main-filename "^2.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +tough-cookie@^2.3.3, tough-cookie@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +ts-jest@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.1.0.tgz#2eaa813271a2987b7e6c3fefbda196301c131734" + integrity sha512-HEGfrIEAZKfu1pkaxB9au17b1d9b56YZSqz5eCVE8mX68+5reOvlM93xGOzzCREIov9mdH7JBG+s0UyNAqr0tQ== + dependencies: + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + json5 "2.x" + lodash.memoize "4.x" + make-error "1.x" + mkdirp "0.x" + resolve "1.x" + semver "^5.5" + yargs-parser "10.x" + +ts-node@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" + integrity sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ== + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.6" + yn "^3.0.0" + +tsconfig-paths@^3.6.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@^1.8.1, tslib@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + +tsutils@^3.7.0: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + dependencies: + tslib "^1.8.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +typescript@~3.5.2: + version "3.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" + integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== + +uglify-js@^3.1.4: + version "3.6.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" + integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== + dependencies: + commander "~2.20.0" + source-map "~0.6.1" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + 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.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +uuid@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" + integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== + +v8-compile-cache@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" + integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= + dependencies: + browser-process-hrtime "^0.1.2" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" + integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" + integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + dependencies: + async-limiter "~1.0.0" + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^3.0.0, yallist@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== + +yargs-parser@10.x: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" + +yargs-parser@^13.1.1: + version "13.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" + integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.0: + version "13.3.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" + integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.1" + +yn@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== From 7bd698f8375869bbd91dc951f381ba0ac4fa02b3 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 5 Sep 2019 21:33:19 +0200 Subject: [PATCH 003/266] Import source from notebookjs package https://github.com/jsvine/notebookjs --- README.adoc | 5 + package.json | 6 +- src/index.js | 349 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/index.ts | 1 - tsconfig.json | 2 +- yarn.lock | 113 ++++++++++++++-- 6 files changed, 461 insertions(+), 15 deletions(-) create mode 100644 src/index.js delete mode 100644 src/index.ts diff --git a/README.adoc b/README.adoc index 3738f60..83e1e38 100644 --- a/README.adoc +++ b/README.adoc @@ -67,6 +67,11 @@ If you use Visual Studio Code, you should install the following extensions: * link:{vs-marketplace-uri}gamunu.vscode-yarn[yarn] +== Credits + +* This project is originally based on https://github.com/jsvine/notebookjs[notebookjs] 0.4.2 developed by https://github.com/jsvine[Jeremy Singer-Vine] and distributed under the http://opensource.org/licenses/MIT/[MIT License]. + + == License This project is licensed under http://opensource.org/licenses/MIT/[MIT License]. diff --git a/package.json b/package.json index 142217d..808c025 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,11 @@ "engines": { "node": ">=10.13.0" }, - "dependencies": {}, + "dependencies": { + "ansi_up": "^4.0.4", + "jsdom": "^15.1.1", + "marked": "^0.7.0" + }, "devDependencies": { "@types/jest": "^24.0.18", "@types/node": "^10.13.0", diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..f52e727 --- /dev/null +++ b/src/index.js @@ -0,0 +1,349 @@ +// notebook.js 0.4.2 +// http://github.com/jsvine/notebookjs +// notebook.js may be freely distributed under the MIT license. +(function () { + var root = this; + var VERSION = "0.4.2"; + + // Get browser or JSDOM document + var doc = root.document; + if (!doc) { + var jsdom = require("jsdom"); + doc = new jsdom.JSDOM().window.document; + } + + // Helper functions + var ident = function (x) { return x; }; + + var makeElement = function (tag, classNames) { + var el = doc.createElement(tag); + el.className = (classNames || []).map(function (cn) { + return nb.prefix + cn; + }).join(" "); + return el; + }; + + var escapeHTML = function (raw) { + var replaced = raw + .replace(//g, ">"); + return replaced; + }; + + var joinText = function (text) { + if (text.join) { + return text.map(joinText).join(""); + } else { + return text; + } + }; + + // Get supporting libraries + var condRequire = function (module_name) { + return typeof require === "function" && require(module_name); + }; + + var getMarkdown = function () { + return root.marked || condRequire("marked"); + }; + + var getAnsi = function () { + var lib = root.ansi_up || condRequire("ansi_up"); + return lib && lib.ansi_to_html; + }; + + // Set up `nb` namespace + var nb = { + prefix: "nb-", + markdown: getMarkdown() || ident, + ansi: getAnsi() || ident, + highlighter: ident, + VERSION: VERSION + }; + + // Inputs + nb.Input = function (raw, cell) { + this.raw = raw; + this.cell = cell; + }; + + nb.Input.prototype.render = function () { + if (!this.raw.length) { return makeElement("div"); } + var holder = makeElement("div", [ "input" ]); + var cell = this.cell; + if (typeof cell.number === "number") { + holder.setAttribute("data-prompt-number", this.cell.number); + } + var pre_el = makeElement("pre"); + var code_el = makeElement("code"); + var notebook = cell.worksheet.notebook; + var m = notebook.metadata; + var lang = this.cell.raw.language || m.language || (m.kernelspec && m.kernelspec.language) || (m.language_info && m.language_info.name); + code_el.setAttribute("data-language", lang); + code_el.className = "lang-" + lang; + code_el.innerHTML = nb.highlighter(escapeHTML(joinText(this.raw)), pre_el, code_el, lang); + pre_el.appendChild(code_el); + holder.appendChild(pre_el); + this.el = holder; + return holder; + }; + + // Outputs and output-renderers + var imageCreator = function (format) { + return function (data) { + var el = makeElement("img", [ "image-output" ]); + el.src = "data:image/" + format + ";base64," + joinText(data).replace(/\n/g, ""); + return el; + }; + }; + + nb.display = {}; + nb.display.text = function (text) { + var el = makeElement("pre", [ "text-output" ]); + el.innerHTML = escapeHTML(joinText(text)); + return el; + }; + nb.display["text/plain"] = nb.display.text; + + nb.display.html = function (html) { + var el = makeElement("div", [ "html-output" ]); + el.innerHTML = joinText(html); + return el; + }; + nb.display["text/html"] = nb.display.html; + + nb.display.marked = function(md) { + return nb.display.html(nb.markdown(joinText(md))); + }; + nb.display["text/markdown"] = nb.display.marked; + + nb.display.svg = function (svg) { + var el = makeElement("div", [ "svg-output" ]); + el.innerHTML = joinText(svg); + return el; + }; + nb.display["text/svg+xml"] = nb.display.svg; + nb.display["image/svg+xml"] = nb.display.svg; + + nb.display.latex = function (latex) { + var el = makeElement("div", [ "latex-output" ]); + el.innerHTML = joinText(latex); + return el; + }; + nb.display["text/latex"] = nb.display.latex; + + nb.display.javascript = function (js) { + var el = makeElement("script"); + el.innerHTML = joinText(js); + return el; + }; + nb.display["application/javascript"] = nb.display.javascript; + + nb.display.png = imageCreator("png"); + nb.display["image/png"] = nb.display.png; + nb.display.jpeg = imageCreator("jpeg"); + nb.display["image/jpeg"] = nb.display.jpeg; + + nb.display_priority = [ + "png", "image/png", "jpeg", "image/jpeg", + "svg", "image/svg+xml", "text/svg+xml", "html", "text/html", + "text/markdown", "latex", "text/latex", + "javascript", "application/javascript", + "text", "text/plain" + ]; + + var render_display_data = function () { + var o = this; + var formats = nb.display_priority.filter(function (d) { + return o.raw.data ? o.raw.data[d] : o.raw[d]; + }); + var format = formats[0]; + if (format) { + if (nb.display[format]) { + return nb.display[format](o.raw[format] || o.raw.data[format]); + } + } + return makeElement("div", [ "empty-output" ]); + }; + + var render_error = function () { + var el = makeElement("pre", [ "pyerr" ]); + var raw = this.raw.traceback.join("\n"); + el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el); + return el; + }; + + nb.Output = function (raw, cell) { + this.raw = raw; + this.cell = cell; + this.type = raw.output_type; + }; + + nb.Output.prototype.renderers = { + "display_data": render_display_data, + "execute_result": render_display_data, + "pyout": render_display_data, + "pyerr": render_error, + "error": render_error, + "stream": function () { + var el = makeElement("pre", [ (this.raw.stream || this.raw.name) ]); + var raw = joinText(this.raw.text); + el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el); + return el; + } + }; + + nb.Output.prototype.render = function () { + var outer = makeElement("div", [ "output" ]); + if (typeof this.cell.number === "number") { + outer.setAttribute("data-prompt-number", this.cell.number); + } + var inner = this.renderers[this.type].call(this); + outer.appendChild(inner); + this.el = outer; + return outer; + }; + + // Post-processing + nb.coalesceStreams = function (outputs) { + if (!outputs.length) { return outputs; } + var last = outputs[0]; + var new_outputs = [ last ]; + outputs.slice(1).forEach(function (o) { + if (o.raw.output_type === "stream" && + last.raw.output_type === "stream" && + o.raw.stream === last.raw.stream) { + last.raw.text = last.raw.text.concat(o.raw.text); + } else { + new_outputs.push(o); + last = o; + } + }); + return new_outputs; + }; + + // Cells + nb.Cell = function (raw, worksheet) { + var cell = this; + cell.raw = raw; + cell.worksheet = worksheet; + cell.type = raw.cell_type; + if (cell.type === "code") { + cell.number = raw.prompt_number > -1 ? raw.prompt_number : raw.execution_count; + var source = raw.input || [ raw.source ]; + cell.input = new nb.Input(source, cell); + var raw_outputs = (cell.raw.outputs || []).map(function (o) { + return new nb.Output(o, cell); + }); + cell.outputs = nb.coalesceStreams(raw_outputs); + } + }; + + nb.Cell.prototype.renderers = { + markdown: function () { + var el = makeElement("div", [ "cell", "markdown-cell" ]); + el.innerHTML = nb.markdown(joinText(this.raw.source)); + + /* Requires to render KaTeX + 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.js', + 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.css', + 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/contrib/auto-render.min.js', + */ + if (root.renderMathInElement != null) { + root.renderMathInElement(el, {delimiters: [ + {left: "$$", right: "$$", display: true}, + {left: "\\[", right: "\\]", display: true}, + {left: "\\(", right: "\\)", display: false}, + {left: "$", right: "$", display: false} + ]}); + } + + return el; + }, + heading: function () { + var el = makeElement("h" + this.raw.level, [ "cell", "heading-cell" ]); + el.innerHTML = joinText(this.raw.source); + return el; + }, + raw: function () { + var el = makeElement("div", [ "cell", "raw-cell" ]); + el.innerHTML = joinText(this.raw.source); + return el; + }, + code: function () { + var cell_el = makeElement("div", [ "cell", "code-cell" ]); + cell_el.appendChild(this.input.render()); + var output_els = this.outputs.forEach(function (o) { + cell_el.appendChild(o.render()); + }); + return cell_el; + } + }; + + nb.Cell.prototype.render = function () { + var el = this.renderers[this.type].call(this); + this.el = el; + return el; + }; + + // Worksheets + nb.Worksheet = function (raw, notebook) { + var worksheet = this; + this.raw = raw; + this.notebook = notebook; + this.cells = raw.cells.map(function (c) { + return new nb.Cell(c, worksheet); + }); + this.render = function () { + var worksheet_el = makeElement("div", [ "worksheet" ]); + worksheet.cells.forEach(function (c) { + worksheet_el.appendChild(c.render()); + }); + this.el = worksheet_el; + return worksheet_el; + }; + }; + + // Notebooks + nb.Notebook = function (raw, config) { + var notebook = this; + this.raw = raw; + this.config = config; + var meta = this.metadata = raw.metadata || {}; + this.title = meta.title || meta.name; + var _worksheets = raw.worksheets || [ { cells: raw.cells } ]; + this.worksheets = _worksheets.map(function (ws) { + return new nb.Worksheet(ws, notebook); + }); + this.sheet = this.worksheets[0]; + }; + + nb.Notebook.prototype.render = function () { + var notebook_el = makeElement("div", [ "notebook" ]); + this.worksheets.forEach(function (w) { + notebook_el.appendChild(w.render()); + }); + this.el = notebook_el; + return notebook_el; + }; + + nb.parse = function (nbjson, config) { + return new nb.Notebook(nbjson, config); + }; + + // Exports + if (typeof define === 'function' && define.amd) { + define(function() { + return nb; + }); + } + if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = nb; + } + exports.nb = nb; + } else { + root.nb = nb; + } + +}).call(this); diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 70b786d..0000000 --- a/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -// TODO diff --git a/tsconfig.json b/tsconfig.json index 158a628..25377fa 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,7 @@ "target": "es2018", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ // "lib": [], /* Specify library files to be included in the compilation. */ - // "allowJs": true, /* Allow javascript files to be compiled. */ + "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ // "declaration": true, /* Generates corresponding '.d.ts' file. */ diff --git a/yarn.lock b/yarn.lock index 03391fd..e2d29a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -437,7 +437,7 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -acorn-globals@^4.1.0: +acorn-globals@^4.1.0, acorn-globals@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== @@ -460,7 +460,7 @@ acorn@^5.5.3: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -acorn@^6.0.1: +acorn@^6.0.1, acorn@^6.1.1: version "6.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== @@ -507,6 +507,11 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi_up@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/ansi_up/-/ansi_up-4.0.4.tgz#5b8c35f0b02e4476f3f18cf89c3bf48d15d054f6" + integrity sha512-vRxC8q6QY918MbehO869biJW4tiunJdjOhi5fpY6NLOliBQlZhOkKgABJKJqH+JZfb/WfjvjN1chLWI6tODerw== + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -595,7 +600,7 @@ 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: +async-limiter@^1.0.0, 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== @@ -925,12 +930,12 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.6: version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^1.0.0: +cssstyle@^1.0.0, cssstyle@^1.2.2: version "1.4.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== @@ -944,7 +949,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^1.0.0: +data-urls@^1.0.0, data-urls@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== @@ -1132,7 +1137,7 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@^1.9.1: +escodegen@^1.11.1, escodegen@^1.9.1: version "1.12.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== @@ -1833,6 +1838,11 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + 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" @@ -2476,6 +2486,38 @@ jsdom@^11.5.1: ws "^5.2.0" xml-name-validator "^3.0.0" +jsdom@^15.1.1: + version "15.1.1" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.1.1.tgz#21ed01f81d95ef4327f3e564662aef5e65881252" + integrity sha512-cQZRBB33arrDAeCrAEWn1U3SvrvC8XysBua9Oqg1yWrsY/gYcusloJC3RZJXuY5eehSCmws8f2YeliCqGSkrtQ== + dependencies: + abab "^2.0.0" + acorn "^6.1.1" + acorn-globals "^4.3.2" + array-equal "^1.0.0" + cssom "^0.3.6" + cssstyle "^1.2.2" + data-urls "^1.1.0" + domexception "^1.0.1" + escodegen "^1.11.1" + html-encoding-sniffer "^1.0.2" + nwsapi "^2.1.4" + parse5 "5.1.0" + pn "^1.1.0" + request "^2.88.0" + request-promise-native "^1.0.7" + saxes "^3.1.9" + symbol-tree "^3.2.2" + tough-cookie "^3.0.1" + w3c-hr-time "^1.0.1" + w3c-xmlserializer "^1.1.2" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^7.0.0" + ws "^7.0.0" + xml-name-validator "^3.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -2672,6 +2714,11 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +marked@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" + integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg== + memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" @@ -2943,7 +2990,7 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -nwsapi@^2.0.7: +nwsapi@^2.0.7, nwsapi@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f" integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw== @@ -3143,6 +3190,11 @@ parse5@4.0.0: resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== +parse5@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -3403,7 +3455,7 @@ request-promise-core@1.1.2: dependencies: lodash "^4.17.11" -request-promise-native@^1.0.5: +request-promise-native@^1.0.5, request-promise-native@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== @@ -3412,7 +3464,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.87.0: +request@^2.87.0, request@^2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -3570,6 +3622,13 @@ sax@^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" + integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== + dependencies: + xmlchars "^2.1.1" + "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -4005,6 +4064,15 @@ tough-cookie@^2.3.3, tough-cookie@^2.3.4: psl "^1.1.28" punycode "^2.1.1" +tough-cookie@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== + dependencies: + ip-regex "^2.1.0" + psl "^1.1.28" + punycode "^2.1.1" + tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" @@ -4188,6 +4256,15 @@ w3c-hr-time@^1.0.1: dependencies: browser-process-hrtime "^0.1.2" +w3c-xmlserializer@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" + integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== + dependencies: + domexception "^1.0.1" + webidl-conversions "^4.0.2" + xml-name-validator "^3.0.0" + walker@^1.0.7, walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -4200,14 +4277,14 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: iconv-lite "0.4.24" -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: +whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== @@ -4296,11 +4373,23 @@ ws@^5.2.0: dependencies: async-limiter "~1.0.0" +ws@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.1.2.tgz#c672d1629de8bb27a9699eb599be47aeeedd8f73" + integrity sha512-gftXq3XI81cJCgkUiAVixA0raD9IVmXqsylCrjRygw4+UOOGzPoxnQ6r/CnVL9i+mDncJo94tSkyrtuuQVBmrg== + dependencies: + async-limiter "^1.0.0" + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xmlchars@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" From 30d55d9126ea1ff2f453fb2ac15482e050e62774 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 5 Sep 2019 21:37:33 +0200 Subject: [PATCH 004/266] Remove IIFE wrapper --- src/index.js | 631 +++++++++++++++++++++++++-------------------------- 1 file changed, 313 insertions(+), 318 deletions(-) diff --git a/src/index.js b/src/index.js index f52e727..11dc586 100644 --- a/src/index.js +++ b/src/index.js @@ -1,349 +1,344 @@ -// notebook.js 0.4.2 -// http://github.com/jsvine/notebookjs -// notebook.js may be freely distributed under the MIT license. -(function () { - var root = this; - var VERSION = "0.4.2"; +// This code is originally based on notebookjs 0.4.2 distributed under the MIT license. +var root = this; +var VERSION = "0.4.2"; - // Get browser or JSDOM document - var doc = root.document; - if (!doc) { - var jsdom = require("jsdom"); - doc = new jsdom.JSDOM().window.document; +// Get browser or JSDOM document +var doc = root.document; +if (!doc) { + var jsdom = require("jsdom"); + doc = new jsdom.JSDOM().window.document; +} + +// Helper functions +var ident = function (x) { return x; }; + +var makeElement = function (tag, classNames) { + var el = doc.createElement(tag); + el.className = (classNames || []).map(function (cn) { + return nb.prefix + cn; + }).join(" "); + return el; +}; + +var escapeHTML = function (raw) { + var replaced = raw + .replace(//g, ">"); + return replaced; +}; + +var joinText = function (text) { + if (text.join) { + return text.map(joinText).join(""); + } else { + return text; } +}; - // Helper functions - var ident = function (x) { return x; }; +// Get supporting libraries +var condRequire = function (module_name) { + return typeof require === "function" && require(module_name); +}; - var makeElement = function (tag, classNames) { - var el = doc.createElement(tag); - el.className = (classNames || []).map(function (cn) { - return nb.prefix + cn; - }).join(" "); +var getMarkdown = function () { + return root.marked || condRequire("marked"); +}; + +var getAnsi = function () { + var lib = root.ansi_up || condRequire("ansi_up"); + return lib && lib.ansi_to_html; +}; + +// Set up `nb` namespace +var nb = { + prefix: "nb-", + markdown: getMarkdown() || ident, + ansi: getAnsi() || ident, + highlighter: ident, + VERSION: VERSION +}; + +// Inputs +nb.Input = function (raw, cell) { + this.raw = raw; + this.cell = cell; +}; + +nb.Input.prototype.render = function () { + if (!this.raw.length) { return makeElement("div"); } + var holder = makeElement("div", [ "input" ]); + var cell = this.cell; + if (typeof cell.number === "number") { + holder.setAttribute("data-prompt-number", this.cell.number); + } + var pre_el = makeElement("pre"); + var code_el = makeElement("code"); + var notebook = cell.worksheet.notebook; + var m = notebook.metadata; + var lang = this.cell.raw.language || m.language || (m.kernelspec && m.kernelspec.language) || (m.language_info && m.language_info.name); + code_el.setAttribute("data-language", lang); + code_el.className = "lang-" + lang; + code_el.innerHTML = nb.highlighter(escapeHTML(joinText(this.raw)), pre_el, code_el, lang); + pre_el.appendChild(code_el); + holder.appendChild(pre_el); + this.el = holder; + return holder; +}; + +// Outputs and output-renderers +var imageCreator = function (format) { + return function (data) { + var el = makeElement("img", [ "image-output" ]); + el.src = "data:image/" + format + ";base64," + joinText(data).replace(/\n/g, ""); return el; - }; - - var escapeHTML = function (raw) { - var replaced = raw - .replace(//g, ">"); - return replaced; }; +}; - var joinText = function (text) { - if (text.join) { - return text.map(joinText).join(""); - } else { - return text; - } - }; +nb.display = {}; +nb.display.text = function (text) { + var el = makeElement("pre", [ "text-output" ]); + el.innerHTML = escapeHTML(joinText(text)); + return el; +}; +nb.display["text/plain"] = nb.display.text; - // Get supporting libraries - var condRequire = function (module_name) { - return typeof require === "function" && require(module_name); - }; +nb.display.html = function (html) { + var el = makeElement("div", [ "html-output" ]); + el.innerHTML = joinText(html); + return el; +}; +nb.display["text/html"] = nb.display.html; - var getMarkdown = function () { - return root.marked || condRequire("marked"); - }; +nb.display.marked = function(md) { + return nb.display.html(nb.markdown(joinText(md))); +}; +nb.display["text/markdown"] = nb.display.marked; - var getAnsi = function () { - var lib = root.ansi_up || condRequire("ansi_up"); - return lib && lib.ansi_to_html; - }; +nb.display.svg = function (svg) { + var el = makeElement("div", [ "svg-output" ]); + el.innerHTML = joinText(svg); + return el; +}; +nb.display["text/svg+xml"] = nb.display.svg; +nb.display["image/svg+xml"] = nb.display.svg; - // Set up `nb` namespace - var nb = { - prefix: "nb-", - markdown: getMarkdown() || ident, - ansi: getAnsi() || ident, - highlighter: ident, - VERSION: VERSION - }; +nb.display.latex = function (latex) { + var el = makeElement("div", [ "latex-output" ]); + el.innerHTML = joinText(latex); + return el; +}; +nb.display["text/latex"] = nb.display.latex; - // Inputs - nb.Input = function (raw, cell) { - this.raw = raw; - this.cell = cell; - }; +nb.display.javascript = function (js) { + var el = makeElement("script"); + el.innerHTML = joinText(js); + return el; +}; +nb.display["application/javascript"] = nb.display.javascript; - nb.Input.prototype.render = function () { - if (!this.raw.length) { return makeElement("div"); } - var holder = makeElement("div", [ "input" ]); - var cell = this.cell; - if (typeof cell.number === "number") { - holder.setAttribute("data-prompt-number", this.cell.number); +nb.display.png = imageCreator("png"); +nb.display["image/png"] = nb.display.png; +nb.display.jpeg = imageCreator("jpeg"); +nb.display["image/jpeg"] = nb.display.jpeg; + +nb.display_priority = [ + "png", "image/png", "jpeg", "image/jpeg", + "svg", "image/svg+xml", "text/svg+xml", "html", "text/html", + "text/markdown", "latex", "text/latex", + "javascript", "application/javascript", + "text", "text/plain" +]; + +var render_display_data = function () { + var o = this; + var formats = nb.display_priority.filter(function (d) { + return o.raw.data ? o.raw.data[d] : o.raw[d]; + }); + var format = formats[0]; + if (format) { + if (nb.display[format]) { + return nb.display[format](o.raw[format] || o.raw.data[format]); } - var pre_el = makeElement("pre"); - var code_el = makeElement("code"); - var notebook = cell.worksheet.notebook; - var m = notebook.metadata; - var lang = this.cell.raw.language || m.language || (m.kernelspec && m.kernelspec.language) || (m.language_info && m.language_info.name); - code_el.setAttribute("data-language", lang); - code_el.className = "lang-" + lang; - code_el.innerHTML = nb.highlighter(escapeHTML(joinText(this.raw)), pre_el, code_el, lang); - pre_el.appendChild(code_el); - holder.appendChild(pre_el); - this.el = holder; - return holder; - }; + } + return makeElement("div", [ "empty-output" ]); +}; - // Outputs and output-renderers - var imageCreator = function (format) { - return function (data) { - var el = makeElement("img", [ "image-output" ]); - el.src = "data:image/" + format + ";base64," + joinText(data).replace(/\n/g, ""); - return el; - }; - }; +var render_error = function () { + var el = makeElement("pre", [ "pyerr" ]); + var raw = this.raw.traceback.join("\n"); + el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el); + return el; +}; - nb.display = {}; - nb.display.text = function (text) { - var el = makeElement("pre", [ "text-output" ]); - el.innerHTML = escapeHTML(joinText(text)); - return el; - }; - nb.display["text/plain"] = nb.display.text; +nb.Output = function (raw, cell) { + this.raw = raw; + this.cell = cell; + this.type = raw.output_type; +}; - nb.display.html = function (html) { - var el = makeElement("div", [ "html-output" ]); - el.innerHTML = joinText(html); - return el; - }; - nb.display["text/html"] = nb.display.html; - - nb.display.marked = function(md) { - return nb.display.html(nb.markdown(joinText(md))); - }; - nb.display["text/markdown"] = nb.display.marked; - - nb.display.svg = function (svg) { - var el = makeElement("div", [ "svg-output" ]); - el.innerHTML = joinText(svg); - return el; - }; - nb.display["text/svg+xml"] = nb.display.svg; - nb.display["image/svg+xml"] = nb.display.svg; - - nb.display.latex = function (latex) { - var el = makeElement("div", [ "latex-output" ]); - el.innerHTML = joinText(latex); - return el; - }; - nb.display["text/latex"] = nb.display.latex; - - nb.display.javascript = function (js) { - var el = makeElement("script"); - el.innerHTML = joinText(js); - return el; - }; - nb.display["application/javascript"] = nb.display.javascript; - - nb.display.png = imageCreator("png"); - nb.display["image/png"] = nb.display.png; - nb.display.jpeg = imageCreator("jpeg"); - nb.display["image/jpeg"] = nb.display.jpeg; - - nb.display_priority = [ - "png", "image/png", "jpeg", "image/jpeg", - "svg", "image/svg+xml", "text/svg+xml", "html", "text/html", - "text/markdown", "latex", "text/latex", - "javascript", "application/javascript", - "text", "text/plain" - ]; - - var render_display_data = function () { - var o = this; - var formats = nb.display_priority.filter(function (d) { - return o.raw.data ? o.raw.data[d] : o.raw[d]; - }); - var format = formats[0]; - if (format) { - if (nb.display[format]) { - return nb.display[format](o.raw[format] || o.raw.data[format]); - } - } - return makeElement("div", [ "empty-output" ]); - }; - - var render_error = function () { - var el = makeElement("pre", [ "pyerr" ]); - var raw = this.raw.traceback.join("\n"); +nb.Output.prototype.renderers = { + "display_data": render_display_data, + "execute_result": render_display_data, + "pyout": render_display_data, + "pyerr": render_error, + "error": render_error, + "stream": function () { + var el = makeElement("pre", [ (this.raw.stream || this.raw.name) ]); + var raw = joinText(this.raw.text); el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el); return el; - }; + } +}; - nb.Output = function (raw, cell) { - this.raw = raw; - this.cell = cell; - this.type = raw.output_type; - }; +nb.Output.prototype.render = function () { + var outer = makeElement("div", [ "output" ]); + if (typeof this.cell.number === "number") { + outer.setAttribute("data-prompt-number", this.cell.number); + } + var inner = this.renderers[this.type].call(this); + outer.appendChild(inner); + this.el = outer; + return outer; +}; - nb.Output.prototype.renderers = { - "display_data": render_display_data, - "execute_result": render_display_data, - "pyout": render_display_data, - "pyerr": render_error, - "error": render_error, - "stream": function () { - var el = makeElement("pre", [ (this.raw.stream || this.raw.name) ]); - var raw = joinText(this.raw.text); - el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el); - return el; +// Post-processing +nb.coalesceStreams = function (outputs) { + if (!outputs.length) { return outputs; } + var last = outputs[0]; + var new_outputs = [ last ]; + outputs.slice(1).forEach(function (o) { + if (o.raw.output_type === "stream" && + last.raw.output_type === "stream" && + o.raw.stream === last.raw.stream) { + last.raw.text = last.raw.text.concat(o.raw.text); + } else { + new_outputs.push(o); + last = o; } - }; + }); + return new_outputs; +}; - nb.Output.prototype.render = function () { - var outer = makeElement("div", [ "output" ]); - if (typeof this.cell.number === "number") { - outer.setAttribute("data-prompt-number", this.cell.number); - } - var inner = this.renderers[this.type].call(this); - outer.appendChild(inner); - this.el = outer; - return outer; - }; - - // Post-processing - nb.coalesceStreams = function (outputs) { - if (!outputs.length) { return outputs; } - var last = outputs[0]; - var new_outputs = [ last ]; - outputs.slice(1).forEach(function (o) { - if (o.raw.output_type === "stream" && - last.raw.output_type === "stream" && - o.raw.stream === last.raw.stream) { - last.raw.text = last.raw.text.concat(o.raw.text); - } else { - new_outputs.push(o); - last = o; - } +// Cells +nb.Cell = function (raw, worksheet) { + var cell = this; + cell.raw = raw; + cell.worksheet = worksheet; + cell.type = raw.cell_type; + if (cell.type === "code") { + cell.number = raw.prompt_number > -1 ? raw.prompt_number : raw.execution_count; + var source = raw.input || [ raw.source ]; + cell.input = new nb.Input(source, cell); + var raw_outputs = (cell.raw.outputs || []).map(function (o) { + return new nb.Output(o, cell); }); - return new_outputs; - }; + cell.outputs = nb.coalesceStreams(raw_outputs); + } +}; - // Cells - nb.Cell = function (raw, worksheet) { - var cell = this; - cell.raw = raw; - cell.worksheet = worksheet; - cell.type = raw.cell_type; - if (cell.type === "code") { - cell.number = raw.prompt_number > -1 ? raw.prompt_number : raw.execution_count; - var source = raw.input || [ raw.source ]; - cell.input = new nb.Input(source, cell); - var raw_outputs = (cell.raw.outputs || []).map(function (o) { - return new nb.Output(o, cell); - }); - cell.outputs = nb.coalesceStreams(raw_outputs); +nb.Cell.prototype.renderers = { + markdown: function () { + var el = makeElement("div", [ "cell", "markdown-cell" ]); + el.innerHTML = nb.markdown(joinText(this.raw.source)); + + /* Requires to render KaTeX + 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.js', + 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.css', + 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/contrib/auto-render.min.js', + */ + if (root.renderMathInElement != null) { + root.renderMathInElement(el, {delimiters: [ + {left: "$$", right: "$$", display: true}, + {left: "\\[", right: "\\]", display: true}, + {left: "\\(", right: "\\)", display: false}, + {left: "$", right: "$", display: false} + ]}); } - }; - nb.Cell.prototype.renderers = { - markdown: function () { - var el = makeElement("div", [ "cell", "markdown-cell" ]); - el.innerHTML = nb.markdown(joinText(this.raw.source)); - - /* Requires to render KaTeX - 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.js', - 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.css', - 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/contrib/auto-render.min.js', - */ - if (root.renderMathInElement != null) { - root.renderMathInElement(el, {delimiters: [ - {left: "$$", right: "$$", display: true}, - {left: "\\[", right: "\\]", display: true}, - {left: "\\(", right: "\\)", display: false}, - {left: "$", right: "$", display: false} - ]}); - } - - return el; - }, - heading: function () { - var el = makeElement("h" + this.raw.level, [ "cell", "heading-cell" ]); - el.innerHTML = joinText(this.raw.source); - return el; - }, - raw: function () { - var el = makeElement("div", [ "cell", "raw-cell" ]); - el.innerHTML = joinText(this.raw.source); - return el; - }, - code: function () { - var cell_el = makeElement("div", [ "cell", "code-cell" ]); - cell_el.appendChild(this.input.render()); - var output_els = this.outputs.forEach(function (o) { - cell_el.appendChild(o.render()); - }); - return cell_el; - } - }; - - nb.Cell.prototype.render = function () { - var el = this.renderers[this.type].call(this); - this.el = el; return el; - }; - - // Worksheets - nb.Worksheet = function (raw, notebook) { - var worksheet = this; - this.raw = raw; - this.notebook = notebook; - this.cells = raw.cells.map(function (c) { - return new nb.Cell(c, worksheet); - }); - this.render = function () { - var worksheet_el = makeElement("div", [ "worksheet" ]); - worksheet.cells.forEach(function (c) { - worksheet_el.appendChild(c.render()); - }); - this.el = worksheet_el; - return worksheet_el; - }; - }; - - // Notebooks - nb.Notebook = function (raw, config) { - var notebook = this; - this.raw = raw; - this.config = config; - var meta = this.metadata = raw.metadata || {}; - this.title = meta.title || meta.name; - var _worksheets = raw.worksheets || [ { cells: raw.cells } ]; - this.worksheets = _worksheets.map(function (ws) { - return new nb.Worksheet(ws, notebook); - }); - this.sheet = this.worksheets[0]; - }; - - nb.Notebook.prototype.render = function () { - var notebook_el = makeElement("div", [ "notebook" ]); - this.worksheets.forEach(function (w) { - notebook_el.appendChild(w.render()); - }); - this.el = notebook_el; - return notebook_el; - }; - - nb.parse = function (nbjson, config) { - return new nb.Notebook(nbjson, config); - }; - - // Exports - if (typeof define === 'function' && define.amd) { - define(function() { - return nb; + }, + heading: function () { + var el = makeElement("h" + this.raw.level, [ "cell", "heading-cell" ]); + el.innerHTML = joinText(this.raw.source); + return el; + }, + raw: function () { + var el = makeElement("div", [ "cell", "raw-cell" ]); + el.innerHTML = joinText(this.raw.source); + return el; + }, + code: function () { + var cell_el = makeElement("div", [ "cell", "code-cell" ]); + cell_el.appendChild(this.input.render()); + var output_els = this.outputs.forEach(function (o) { + cell_el.appendChild(o.render()); }); + return cell_el; } - if (typeof exports !== 'undefined') { - if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = nb; - } - exports.nb = nb; - } else { - root.nb = nb; +}; + +nb.Cell.prototype.render = function () { + var el = this.renderers[this.type].call(this); + this.el = el; + return el; +}; + +// Worksheets +nb.Worksheet = function (raw, notebook) { + var worksheet = this; + this.raw = raw; + this.notebook = notebook; + this.cells = raw.cells.map(function (c) { + return new nb.Cell(c, worksheet); + }); + this.render = function () { + var worksheet_el = makeElement("div", [ "worksheet" ]); + worksheet.cells.forEach(function (c) { + worksheet_el.appendChild(c.render()); + }); + this.el = worksheet_el; + return worksheet_el; + }; +}; + +// Notebooks +nb.Notebook = function (raw, config) { + var notebook = this; + this.raw = raw; + this.config = config; + var meta = this.metadata = raw.metadata || {}; + this.title = meta.title || meta.name; + var _worksheets = raw.worksheets || [ { cells: raw.cells } ]; + this.worksheets = _worksheets.map(function (ws) { + return new nb.Worksheet(ws, notebook); + }); + this.sheet = this.worksheets[0]; +}; + +nb.Notebook.prototype.render = function () { + var notebook_el = makeElement("div", [ "notebook" ]); + this.worksheets.forEach(function (w) { + notebook_el.appendChild(w.render()); + }); + this.el = notebook_el; + return notebook_el; +}; + +nb.parse = function (nbjson, config) { + return new nb.Notebook(nbjson, config); +}; + +// Exports +if (typeof define === 'function' && define.amd) { + define(function() { + return nb; + }); +} +if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = nb; } - -}).call(this); + exports.nb = nb; +} else { + root.nb = nb; +} From 17402cfd184ba0143a23d675b316feb6ebe65f68 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 5 Sep 2019 21:42:17 +0200 Subject: [PATCH 005/266] Change indentation to 2 spaces --- src/index.js | 422 +++++++++++++++++++++++++-------------------------- 1 file changed, 211 insertions(+), 211 deletions(-) diff --git a/src/index.js b/src/index.js index 11dc586..548de43 100644 --- a/src/index.js +++ b/src/index.js @@ -5,134 +5,134 @@ var VERSION = "0.4.2"; // Get browser or JSDOM document var doc = root.document; if (!doc) { - var jsdom = require("jsdom"); - doc = new jsdom.JSDOM().window.document; + var jsdom = require("jsdom"); + doc = new jsdom.JSDOM().window.document; } // Helper functions var ident = function (x) { return x; }; var makeElement = function (tag, classNames) { - var el = doc.createElement(tag); - el.className = (classNames || []).map(function (cn) { - return nb.prefix + cn; - }).join(" "); - return el; + var el = doc.createElement(tag); + el.className = (classNames || []).map(function (cn) { + return nb.prefix + cn; + }).join(" "); + return el; }; var escapeHTML = function (raw) { - var replaced = raw - .replace(//g, ">"); - return replaced; + var replaced = raw + .replace(//g, ">"); + return replaced; }; var joinText = function (text) { - if (text.join) { - return text.map(joinText).join(""); - } else { - return text; - } + if (text.join) { + return text.map(joinText).join(""); + } else { + return text; + } }; // Get supporting libraries var condRequire = function (module_name) { - return typeof require === "function" && require(module_name); + return typeof require === "function" && require(module_name); }; var getMarkdown = function () { - return root.marked || condRequire("marked"); + return root.marked || condRequire("marked"); }; var getAnsi = function () { - var lib = root.ansi_up || condRequire("ansi_up"); - return lib && lib.ansi_to_html; + var lib = root.ansi_up || condRequire("ansi_up"); + return lib && lib.ansi_to_html; }; // Set up `nb` namespace var nb = { - prefix: "nb-", - markdown: getMarkdown() || ident, - ansi: getAnsi() || ident, - highlighter: ident, - VERSION: VERSION + prefix: "nb-", + markdown: getMarkdown() || ident, + ansi: getAnsi() || ident, + highlighter: ident, + VERSION: VERSION }; // Inputs nb.Input = function (raw, cell) { - this.raw = raw; - this.cell = cell; + this.raw = raw; + this.cell = cell; }; nb.Input.prototype.render = function () { - if (!this.raw.length) { return makeElement("div"); } - var holder = makeElement("div", [ "input" ]); - var cell = this.cell; - if (typeof cell.number === "number") { - holder.setAttribute("data-prompt-number", this.cell.number); - } - var pre_el = makeElement("pre"); - var code_el = makeElement("code"); - var notebook = cell.worksheet.notebook; - var m = notebook.metadata; - var lang = this.cell.raw.language || m.language || (m.kernelspec && m.kernelspec.language) || (m.language_info && m.language_info.name); - code_el.setAttribute("data-language", lang); - code_el.className = "lang-" + lang; - code_el.innerHTML = nb.highlighter(escapeHTML(joinText(this.raw)), pre_el, code_el, lang); - pre_el.appendChild(code_el); - holder.appendChild(pre_el); - this.el = holder; - return holder; + if (!this.raw.length) { return makeElement("div"); } + var holder = makeElement("div", [ "input" ]); + var cell = this.cell; + if (typeof cell.number === "number") { + holder.setAttribute("data-prompt-number", this.cell.number); + } + var pre_el = makeElement("pre"); + var code_el = makeElement("code"); + var notebook = cell.worksheet.notebook; + var m = notebook.metadata; + var lang = this.cell.raw.language || m.language || (m.kernelspec && m.kernelspec.language) || (m.language_info && m.language_info.name); + code_el.setAttribute("data-language", lang); + code_el.className = "lang-" + lang; + code_el.innerHTML = nb.highlighter(escapeHTML(joinText(this.raw)), pre_el, code_el, lang); + pre_el.appendChild(code_el); + holder.appendChild(pre_el); + this.el = holder; + return holder; }; // Outputs and output-renderers var imageCreator = function (format) { - return function (data) { - var el = makeElement("img", [ "image-output" ]); - el.src = "data:image/" + format + ";base64," + joinText(data).replace(/\n/g, ""); - return el; - }; + return function (data) { + var el = makeElement("img", [ "image-output" ]); + el.src = "data:image/" + format + ";base64," + joinText(data).replace(/\n/g, ""); + return el; + }; }; nb.display = {}; nb.display.text = function (text) { - var el = makeElement("pre", [ "text-output" ]); - el.innerHTML = escapeHTML(joinText(text)); - return el; + var el = makeElement("pre", [ "text-output" ]); + el.innerHTML = escapeHTML(joinText(text)); + return el; }; nb.display["text/plain"] = nb.display.text; nb.display.html = function (html) { - var el = makeElement("div", [ "html-output" ]); - el.innerHTML = joinText(html); - return el; + var el = makeElement("div", [ "html-output" ]); + el.innerHTML = joinText(html); + return el; }; nb.display["text/html"] = nb.display.html; nb.display.marked = function(md) { - return nb.display.html(nb.markdown(joinText(md))); + return nb.display.html(nb.markdown(joinText(md))); }; nb.display["text/markdown"] = nb.display.marked; nb.display.svg = function (svg) { - var el = makeElement("div", [ "svg-output" ]); - el.innerHTML = joinText(svg); - return el; + var el = makeElement("div", [ "svg-output" ]); + el.innerHTML = joinText(svg); + return el; }; nb.display["text/svg+xml"] = nb.display.svg; nb.display["image/svg+xml"] = nb.display.svg; nb.display.latex = function (latex) { - var el = makeElement("div", [ "latex-output" ]); - el.innerHTML = joinText(latex); - return el; + var el = makeElement("div", [ "latex-output" ]); + el.innerHTML = joinText(latex); + return el; }; nb.display["text/latex"] = nb.display.latex; nb.display.javascript = function (js) { - var el = makeElement("script"); - el.innerHTML = joinText(js); - return el; + var el = makeElement("script"); + el.innerHTML = joinText(js); + return el; }; nb.display["application/javascript"] = nb.display.javascript; @@ -142,203 +142,203 @@ nb.display.jpeg = imageCreator("jpeg"); nb.display["image/jpeg"] = nb.display.jpeg; nb.display_priority = [ - "png", "image/png", "jpeg", "image/jpeg", - "svg", "image/svg+xml", "text/svg+xml", "html", "text/html", - "text/markdown", "latex", "text/latex", - "javascript", "application/javascript", - "text", "text/plain" + "png", "image/png", "jpeg", "image/jpeg", + "svg", "image/svg+xml", "text/svg+xml", "html", "text/html", + "text/markdown", "latex", "text/latex", + "javascript", "application/javascript", + "text", "text/plain" ]; var render_display_data = function () { - var o = this; - var formats = nb.display_priority.filter(function (d) { - return o.raw.data ? o.raw.data[d] : o.raw[d]; - }); - var format = formats[0]; - if (format) { - if (nb.display[format]) { - return nb.display[format](o.raw[format] || o.raw.data[format]); - } + var o = this; + var formats = nb.display_priority.filter(function (d) { + return o.raw.data ? o.raw.data[d] : o.raw[d]; + }); + var format = formats[0]; + if (format) { + if (nb.display[format]) { + return nb.display[format](o.raw[format] || o.raw.data[format]); } - return makeElement("div", [ "empty-output" ]); + } + return makeElement("div", [ "empty-output" ]); }; var render_error = function () { - var el = makeElement("pre", [ "pyerr" ]); - var raw = this.raw.traceback.join("\n"); - el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el); - return el; + var el = makeElement("pre", [ "pyerr" ]); + var raw = this.raw.traceback.join("\n"); + el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el); + return el; }; nb.Output = function (raw, cell) { - this.raw = raw; - this.cell = cell; - this.type = raw.output_type; + this.raw = raw; + this.cell = cell; + this.type = raw.output_type; }; nb.Output.prototype.renderers = { - "display_data": render_display_data, - "execute_result": render_display_data, - "pyout": render_display_data, - "pyerr": render_error, - "error": render_error, - "stream": function () { - var el = makeElement("pre", [ (this.raw.stream || this.raw.name) ]); - var raw = joinText(this.raw.text); - el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el); - return el; - } + "display_data": render_display_data, + "execute_result": render_display_data, + "pyout": render_display_data, + "pyerr": render_error, + "error": render_error, + "stream": function () { + var el = makeElement("pre", [ (this.raw.stream || this.raw.name) ]); + var raw = joinText(this.raw.text); + el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el); + return el; + } }; nb.Output.prototype.render = function () { - var outer = makeElement("div", [ "output" ]); - if (typeof this.cell.number === "number") { - outer.setAttribute("data-prompt-number", this.cell.number); - } - var inner = this.renderers[this.type].call(this); - outer.appendChild(inner); - this.el = outer; - return outer; + var outer = makeElement("div", [ "output" ]); + if (typeof this.cell.number === "number") { + outer.setAttribute("data-prompt-number", this.cell.number); + } + var inner = this.renderers[this.type].call(this); + outer.appendChild(inner); + this.el = outer; + return outer; }; // Post-processing nb.coalesceStreams = function (outputs) { - if (!outputs.length) { return outputs; } - var last = outputs[0]; - var new_outputs = [ last ]; - outputs.slice(1).forEach(function (o) { - if (o.raw.output_type === "stream" && - last.raw.output_type === "stream" && - o.raw.stream === last.raw.stream) { - last.raw.text = last.raw.text.concat(o.raw.text); - } else { - new_outputs.push(o); - last = o; - } - }); - return new_outputs; + if (!outputs.length) { return outputs; } + var last = outputs[0]; + var new_outputs = [ last ]; + outputs.slice(1).forEach(function (o) { + if (o.raw.output_type === "stream" && + last.raw.output_type === "stream" && + o.raw.stream === last.raw.stream) { + last.raw.text = last.raw.text.concat(o.raw.text); + } else { + new_outputs.push(o); + last = o; + } + }); + return new_outputs; }; // Cells nb.Cell = function (raw, worksheet) { - var cell = this; - cell.raw = raw; - cell.worksheet = worksheet; - cell.type = raw.cell_type; - if (cell.type === "code") { - cell.number = raw.prompt_number > -1 ? raw.prompt_number : raw.execution_count; - var source = raw.input || [ raw.source ]; - cell.input = new nb.Input(source, cell); - var raw_outputs = (cell.raw.outputs || []).map(function (o) { - return new nb.Output(o, cell); - }); - cell.outputs = nb.coalesceStreams(raw_outputs); - } + var cell = this; + cell.raw = raw; + cell.worksheet = worksheet; + cell.type = raw.cell_type; + if (cell.type === "code") { + cell.number = raw.prompt_number > -1 ? raw.prompt_number : raw.execution_count; + var source = raw.input || [ raw.source ]; + cell.input = new nb.Input(source, cell); + var raw_outputs = (cell.raw.outputs || []).map(function (o) { + return new nb.Output(o, cell); + }); + cell.outputs = nb.coalesceStreams(raw_outputs); + } }; nb.Cell.prototype.renderers = { - markdown: function () { - var el = makeElement("div", [ "cell", "markdown-cell" ]); - el.innerHTML = nb.markdown(joinText(this.raw.source)); + markdown: function () { + var el = makeElement("div", [ "cell", "markdown-cell" ]); + el.innerHTML = nb.markdown(joinText(this.raw.source)); - /* Requires to render KaTeX - 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.js', - 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.css', - 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/contrib/auto-render.min.js', - */ - if (root.renderMathInElement != null) { - root.renderMathInElement(el, {delimiters: [ - {left: "$$", right: "$$", display: true}, - {left: "\\[", right: "\\]", display: true}, - {left: "\\(", right: "\\)", display: false}, - {left: "$", right: "$", display: false} - ]}); - } - - return el; - }, - heading: function () { - var el = makeElement("h" + this.raw.level, [ "cell", "heading-cell" ]); - el.innerHTML = joinText(this.raw.source); - return el; - }, - raw: function () { - var el = makeElement("div", [ "cell", "raw-cell" ]); - el.innerHTML = joinText(this.raw.source); - return el; - }, - code: function () { - var cell_el = makeElement("div", [ "cell", "code-cell" ]); - cell_el.appendChild(this.input.render()); - var output_els = this.outputs.forEach(function (o) { - cell_el.appendChild(o.render()); - }); - return cell_el; + /* Requires to render KaTeX + 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.js', + 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.css', + 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/contrib/auto-render.min.js', + */ + if (root.renderMathInElement != null) { + root.renderMathInElement(el, {delimiters: [ + {left: "$$", right: "$$", display: true}, + {left: "\\[", right: "\\]", display: true}, + {left: "\\(", right: "\\)", display: false}, + {left: "$", right: "$", display: false} + ]}); } + + return el; + }, + heading: function () { + var el = makeElement("h" + this.raw.level, [ "cell", "heading-cell" ]); + el.innerHTML = joinText(this.raw.source); + return el; + }, + raw: function () { + var el = makeElement("div", [ "cell", "raw-cell" ]); + el.innerHTML = joinText(this.raw.source); + return el; + }, + code: function () { + var cell_el = makeElement("div", [ "cell", "code-cell" ]); + cell_el.appendChild(this.input.render()); + var output_els = this.outputs.forEach(function (o) { + cell_el.appendChild(o.render()); + }); + return cell_el; + } }; nb.Cell.prototype.render = function () { - var el = this.renderers[this.type].call(this); - this.el = el; - return el; + var el = this.renderers[this.type].call(this); + this.el = el; + return el; }; // Worksheets nb.Worksheet = function (raw, notebook) { - var worksheet = this; - this.raw = raw; - this.notebook = notebook; - this.cells = raw.cells.map(function (c) { - return new nb.Cell(c, worksheet); + var worksheet = this; + this.raw = raw; + this.notebook = notebook; + this.cells = raw.cells.map(function (c) { + return new nb.Cell(c, worksheet); + }); + this.render = function () { + var worksheet_el = makeElement("div", [ "worksheet" ]); + worksheet.cells.forEach(function (c) { + worksheet_el.appendChild(c.render()); }); - this.render = function () { - var worksheet_el = makeElement("div", [ "worksheet" ]); - worksheet.cells.forEach(function (c) { - worksheet_el.appendChild(c.render()); - }); - this.el = worksheet_el; - return worksheet_el; - }; + this.el = worksheet_el; + return worksheet_el; + }; }; // Notebooks nb.Notebook = function (raw, config) { - var notebook = this; - this.raw = raw; - this.config = config; - var meta = this.metadata = raw.metadata || {}; - this.title = meta.title || meta.name; - var _worksheets = raw.worksheets || [ { cells: raw.cells } ]; - this.worksheets = _worksheets.map(function (ws) { - return new nb.Worksheet(ws, notebook); - }); - this.sheet = this.worksheets[0]; + var notebook = this; + this.raw = raw; + this.config = config; + var meta = this.metadata = raw.metadata || {}; + this.title = meta.title || meta.name; + var _worksheets = raw.worksheets || [ { cells: raw.cells } ]; + this.worksheets = _worksheets.map(function (ws) { + return new nb.Worksheet(ws, notebook); + }); + this.sheet = this.worksheets[0]; }; nb.Notebook.prototype.render = function () { - var notebook_el = makeElement("div", [ "notebook" ]); - this.worksheets.forEach(function (w) { - notebook_el.appendChild(w.render()); - }); - this.el = notebook_el; - return notebook_el; + var notebook_el = makeElement("div", [ "notebook" ]); + this.worksheets.forEach(function (w) { + notebook_el.appendChild(w.render()); + }); + this.el = notebook_el; + return notebook_el; }; nb.parse = function (nbjson, config) { - return new nb.Notebook(nbjson, config); + return new nb.Notebook(nbjson, config); }; // Exports if (typeof define === 'function' && define.amd) { - define(function() { - return nb; - }); + define(function() { + return nb; + }); } if (typeof exports !== 'undefined') { - if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = nb; - } - exports.nb = nb; + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = nb; + } + exports.nb = nb; } else { - root.nb = nb; + root.nb = nb; } From 143eaf5b4dce3cf5c769d14c8e28235391e45e76 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 5 Sep 2019 21:42:43 +0200 Subject: [PATCH 006/266] Remove semicolons --- src/index.js | 376 +++++++++++++++++++++++++-------------------------- 1 file changed, 188 insertions(+), 188 deletions(-) diff --git a/src/index.js b/src/index.js index 548de43..06fb8ec 100644 --- a/src/index.js +++ b/src/index.js @@ -1,53 +1,53 @@ // This code is originally based on notebookjs 0.4.2 distributed under the MIT license. -var root = this; -var VERSION = "0.4.2"; +var root = this +var VERSION = "0.4.2" // Get browser or JSDOM document -var doc = root.document; +var doc = root.document if (!doc) { - var jsdom = require("jsdom"); - doc = new jsdom.JSDOM().window.document; + var jsdom = require("jsdom") + doc = new jsdom.JSDOM().window.document } // Helper functions -var ident = function (x) { return x; }; +var ident = function (x) { return x } var makeElement = function (tag, classNames) { - var el = doc.createElement(tag); + var el = doc.createElement(tag) el.className = (classNames || []).map(function (cn) { - return nb.prefix + cn; - }).join(" "); - return el; -}; + return nb.prefix + cn + }).join(" ") + return el +} var escapeHTML = function (raw) { var replaced = raw .replace(//g, ">"); - return replaced; -}; + .replace(/>/g, ">") + return replaced +} var joinText = function (text) { if (text.join) { - return text.map(joinText).join(""); + return text.map(joinText).join("") } else { - return text; + return text } -}; +} // Get supporting libraries var condRequire = function (module_name) { - return typeof require === "function" && require(module_name); -}; + return typeof require === "function" && require(module_name) +} var getMarkdown = function () { - return root.marked || condRequire("marked"); -}; + return root.marked || condRequire("marked") +} var getAnsi = function () { - var lib = root.ansi_up || condRequire("ansi_up"); - return lib && lib.ansi_to_html; -}; + var lib = root.ansi_up || condRequire("ansi_up") + return lib && lib.ansi_to_html +} // Set up `nb` namespace var nb = { @@ -56,90 +56,90 @@ var nb = { ansi: getAnsi() || ident, highlighter: ident, VERSION: VERSION -}; +} // Inputs nb.Input = function (raw, cell) { - this.raw = raw; - this.cell = cell; -}; + this.raw = raw + this.cell = cell +} nb.Input.prototype.render = function () { - if (!this.raw.length) { return makeElement("div"); } - var holder = makeElement("div", [ "input" ]); - var cell = this.cell; + if (!this.raw.length) { return makeElement("div") } + var holder = makeElement("div", [ "input" ]) + var cell = this.cell if (typeof cell.number === "number") { - holder.setAttribute("data-prompt-number", this.cell.number); + holder.setAttribute("data-prompt-number", this.cell.number) } - var pre_el = makeElement("pre"); - var code_el = makeElement("code"); - var notebook = cell.worksheet.notebook; - var m = notebook.metadata; - var lang = this.cell.raw.language || m.language || (m.kernelspec && m.kernelspec.language) || (m.language_info && m.language_info.name); - code_el.setAttribute("data-language", lang); - code_el.className = "lang-" + lang; - code_el.innerHTML = nb.highlighter(escapeHTML(joinText(this.raw)), pre_el, code_el, lang); - pre_el.appendChild(code_el); - holder.appendChild(pre_el); - this.el = holder; - return holder; -}; + var pre_el = makeElement("pre") + var code_el = makeElement("code") + var notebook = cell.worksheet.notebook + var m = notebook.metadata + var lang = this.cell.raw.language || m.language || (m.kernelspec && m.kernelspec.language) || (m.language_info && m.language_info.name) + code_el.setAttribute("data-language", lang) + code_el.className = "lang-" + lang + code_el.innerHTML = nb.highlighter(escapeHTML(joinText(this.raw)), pre_el, code_el, lang) + pre_el.appendChild(code_el) + holder.appendChild(pre_el) + this.el = holder + return holder +} // Outputs and output-renderers var imageCreator = function (format) { return function (data) { - var el = makeElement("img", [ "image-output" ]); - el.src = "data:image/" + format + ";base64," + joinText(data).replace(/\n/g, ""); - return el; - }; -}; + var el = makeElement("img", [ "image-output" ]) + el.src = "data:image/" + format + ";base64," + joinText(data).replace(/\n/g, "") + return el + } +} -nb.display = {}; +nb.display = {} nb.display.text = function (text) { - var el = makeElement("pre", [ "text-output" ]); - el.innerHTML = escapeHTML(joinText(text)); - return el; -}; -nb.display["text/plain"] = nb.display.text; + var el = makeElement("pre", [ "text-output" ]) + el.innerHTML = escapeHTML(joinText(text)) + return el +} +nb.display["text/plain"] = nb.display.text nb.display.html = function (html) { - var el = makeElement("div", [ "html-output" ]); - el.innerHTML = joinText(html); - return el; -}; -nb.display["text/html"] = nb.display.html; + var el = makeElement("div", [ "html-output" ]) + el.innerHTML = joinText(html) + return el +} +nb.display["text/html"] = nb.display.html nb.display.marked = function(md) { - return nb.display.html(nb.markdown(joinText(md))); -}; -nb.display["text/markdown"] = nb.display.marked; + return nb.display.html(nb.markdown(joinText(md))) +} +nb.display["text/markdown"] = nb.display.marked nb.display.svg = function (svg) { - var el = makeElement("div", [ "svg-output" ]); - el.innerHTML = joinText(svg); - return el; -}; -nb.display["text/svg+xml"] = nb.display.svg; -nb.display["image/svg+xml"] = nb.display.svg; + var el = makeElement("div", [ "svg-output" ]) + el.innerHTML = joinText(svg) + return el +} +nb.display["text/svg+xml"] = nb.display.svg +nb.display["image/svg+xml"] = nb.display.svg nb.display.latex = function (latex) { - var el = makeElement("div", [ "latex-output" ]); - el.innerHTML = joinText(latex); - return el; -}; -nb.display["text/latex"] = nb.display.latex; + var el = makeElement("div", [ "latex-output" ]) + el.innerHTML = joinText(latex) + return el +} +nb.display["text/latex"] = nb.display.latex nb.display.javascript = function (js) { - var el = makeElement("script"); - el.innerHTML = joinText(js); - return el; -}; -nb.display["application/javascript"] = nb.display.javascript; + var el = makeElement("script") + el.innerHTML = joinText(js) + return el +} +nb.display["application/javascript"] = nb.display.javascript -nb.display.png = imageCreator("png"); -nb.display["image/png"] = nb.display.png; -nb.display.jpeg = imageCreator("jpeg"); -nb.display["image/jpeg"] = nb.display.jpeg; +nb.display.png = imageCreator("png") +nb.display["image/png"] = nb.display.png +nb.display.jpeg = imageCreator("jpeg") +nb.display["image/jpeg"] = nb.display.jpeg nb.display_priority = [ "png", "image/png", "jpeg", "image/jpeg", @@ -147,34 +147,34 @@ nb.display_priority = [ "text/markdown", "latex", "text/latex", "javascript", "application/javascript", "text", "text/plain" -]; +] var render_display_data = function () { - var o = this; + var o = this var formats = nb.display_priority.filter(function (d) { - return o.raw.data ? o.raw.data[d] : o.raw[d]; - }); - var format = formats[0]; + return o.raw.data ? o.raw.data[d] : o.raw[d] + }) + var format = formats[0] if (format) { if (nb.display[format]) { - return nb.display[format](o.raw[format] || o.raw.data[format]); + return nb.display[format](o.raw[format] || o.raw.data[format]) } } - return makeElement("div", [ "empty-output" ]); -}; + return makeElement("div", [ "empty-output" ]) +} var render_error = function () { - var el = makeElement("pre", [ "pyerr" ]); - var raw = this.raw.traceback.join("\n"); - el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el); - return el; -}; + var el = makeElement("pre", [ "pyerr" ]) + var raw = this.raw.traceback.join("\n") + el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) + return el +} nb.Output = function (raw, cell) { - this.raw = raw; - this.cell = cell; - this.type = raw.output_type; -}; + this.raw = raw + this.cell = cell + this.type = raw.output_type +} nb.Output.prototype.renderers = { "display_data": render_display_data, @@ -183,63 +183,63 @@ nb.Output.prototype.renderers = { "pyerr": render_error, "error": render_error, "stream": function () { - var el = makeElement("pre", [ (this.raw.stream || this.raw.name) ]); - var raw = joinText(this.raw.text); - el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el); - return el; + var el = makeElement("pre", [ (this.raw.stream || this.raw.name) ]) + var raw = joinText(this.raw.text) + el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) + return el } -}; +} nb.Output.prototype.render = function () { - var outer = makeElement("div", [ "output" ]); + var outer = makeElement("div", [ "output" ]) if (typeof this.cell.number === "number") { - outer.setAttribute("data-prompt-number", this.cell.number); + outer.setAttribute("data-prompt-number", this.cell.number) } - var inner = this.renderers[this.type].call(this); - outer.appendChild(inner); - this.el = outer; - return outer; -}; + var inner = this.renderers[this.type].call(this) + outer.appendChild(inner) + this.el = outer + return outer +} // Post-processing nb.coalesceStreams = function (outputs) { - if (!outputs.length) { return outputs; } - var last = outputs[0]; - var new_outputs = [ last ]; + if (!outputs.length) { return outputs } + var last = outputs[0] + var new_outputs = [ last ] outputs.slice(1).forEach(function (o) { if (o.raw.output_type === "stream" && last.raw.output_type === "stream" && o.raw.stream === last.raw.stream) { - last.raw.text = last.raw.text.concat(o.raw.text); + last.raw.text = last.raw.text.concat(o.raw.text) } else { - new_outputs.push(o); - last = o; + new_outputs.push(o) + last = o } - }); - return new_outputs; -}; + }) + return new_outputs +} // Cells nb.Cell = function (raw, worksheet) { - var cell = this; - cell.raw = raw; - cell.worksheet = worksheet; - cell.type = raw.cell_type; + var cell = this + cell.raw = raw + cell.worksheet = worksheet + cell.type = raw.cell_type if (cell.type === "code") { - cell.number = raw.prompt_number > -1 ? raw.prompt_number : raw.execution_count; - var source = raw.input || [ raw.source ]; - cell.input = new nb.Input(source, cell); + cell.number = raw.prompt_number > -1 ? raw.prompt_number : raw.execution_count + var source = raw.input || [ raw.source ] + cell.input = new nb.Input(source, cell) var raw_outputs = (cell.raw.outputs || []).map(function (o) { - return new nb.Output(o, cell); - }); - cell.outputs = nb.coalesceStreams(raw_outputs); + return new nb.Output(o, cell) + }) + cell.outputs = nb.coalesceStreams(raw_outputs) } -}; +} nb.Cell.prototype.renderers = { markdown: function () { - var el = makeElement("div", [ "cell", "markdown-cell" ]); - el.innerHTML = nb.markdown(joinText(this.raw.source)); + var el = makeElement("div", [ "cell", "markdown-cell" ]) + el.innerHTML = nb.markdown(joinText(this.raw.source)) /* Requires to render KaTeX 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.js', @@ -252,93 +252,93 @@ nb.Cell.prototype.renderers = { {left: "\\[", right: "\\]", display: true}, {left: "\\(", right: "\\)", display: false}, {left: "$", right: "$", display: false} - ]}); + ]}) } - return el; + return el }, heading: function () { - var el = makeElement("h" + this.raw.level, [ "cell", "heading-cell" ]); - el.innerHTML = joinText(this.raw.source); - return el; + var el = makeElement("h" + this.raw.level, [ "cell", "heading-cell" ]) + el.innerHTML = joinText(this.raw.source) + return el }, raw: function () { - var el = makeElement("div", [ "cell", "raw-cell" ]); - el.innerHTML = joinText(this.raw.source); - return el; + var el = makeElement("div", [ "cell", "raw-cell" ]) + el.innerHTML = joinText(this.raw.source) + return el }, code: function () { - var cell_el = makeElement("div", [ "cell", "code-cell" ]); - cell_el.appendChild(this.input.render()); + var cell_el = makeElement("div", [ "cell", "code-cell" ]) + cell_el.appendChild(this.input.render()) var output_els = this.outputs.forEach(function (o) { - cell_el.appendChild(o.render()); - }); - return cell_el; + cell_el.appendChild(o.render()) + }) + return cell_el } -}; +} nb.Cell.prototype.render = function () { - var el = this.renderers[this.type].call(this); - this.el = el; - return el; -}; + var el = this.renderers[this.type].call(this) + this.el = el + return el +} // Worksheets nb.Worksheet = function (raw, notebook) { - var worksheet = this; - this.raw = raw; - this.notebook = notebook; + var worksheet = this + this.raw = raw + this.notebook = notebook this.cells = raw.cells.map(function (c) { - return new nb.Cell(c, worksheet); - }); + return new nb.Cell(c, worksheet) + }) this.render = function () { - var worksheet_el = makeElement("div", [ "worksheet" ]); + var worksheet_el = makeElement("div", [ "worksheet" ]) worksheet.cells.forEach(function (c) { - worksheet_el.appendChild(c.render()); - }); - this.el = worksheet_el; - return worksheet_el; - }; -}; + worksheet_el.appendChild(c.render()) + }) + this.el = worksheet_el + return worksheet_el + } +} // Notebooks nb.Notebook = function (raw, config) { - var notebook = this; - this.raw = raw; - this.config = config; - var meta = this.metadata = raw.metadata || {}; - this.title = meta.title || meta.name; - var _worksheets = raw.worksheets || [ { cells: raw.cells } ]; + var notebook = this + this.raw = raw + this.config = config + var meta = this.metadata = raw.metadata || {} + this.title = meta.title || meta.name + var _worksheets = raw.worksheets || [ { cells: raw.cells } ] this.worksheets = _worksheets.map(function (ws) { - return new nb.Worksheet(ws, notebook); - }); - this.sheet = this.worksheets[0]; -}; + return new nb.Worksheet(ws, notebook) + }) + this.sheet = this.worksheets[0] +} nb.Notebook.prototype.render = function () { - var notebook_el = makeElement("div", [ "notebook" ]); + var notebook_el = makeElement("div", [ "notebook" ]) this.worksheets.forEach(function (w) { - notebook_el.appendChild(w.render()); - }); - this.el = notebook_el; - return notebook_el; -}; + notebook_el.appendChild(w.render()) + }) + this.el = notebook_el + return notebook_el +} nb.parse = function (nbjson, config) { - return new nb.Notebook(nbjson, config); -}; + return new nb.Notebook(nbjson, config) +} // Exports if (typeof define === 'function' && define.amd) { define(function() { - return nb; - }); + return nb + }) } if (typeof exports !== 'undefined') { if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = nb; + exports = module.exports = nb } - exports.nb = nb; + exports.nb = nb } else { - root.nb = nb; + root.nb = nb } From ef96ea9209740a6815ccd2e23569a329218ce292 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 5 Sep 2019 21:43:24 +0200 Subject: [PATCH 007/266] Replace double quotes with single quotes --- src/index.js | 134 +++++++++++++++++++++++++-------------------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/src/index.js b/src/index.js index 06fb8ec..4530c7f 100644 --- a/src/index.js +++ b/src/index.js @@ -1,11 +1,11 @@ // This code is originally based on notebookjs 0.4.2 distributed under the MIT license. var root = this -var VERSION = "0.4.2" +var VERSION = '0.4.2' // Get browser or JSDOM document var doc = root.document if (!doc) { - var jsdom = require("jsdom") + var jsdom = require('jsdom') doc = new jsdom.JSDOM().window.document } @@ -16,20 +16,20 @@ var makeElement = function (tag, classNames) { var el = doc.createElement(tag) el.className = (classNames || []).map(function (cn) { return nb.prefix + cn - }).join(" ") + }).join(' ') return el } var escapeHTML = function (raw) { var replaced = raw - .replace(//g, ">") + .replace(//g, '>') return replaced } var joinText = function (text) { if (text.join) { - return text.map(joinText).join("") + return text.map(joinText).join('') } else { return text } @@ -37,21 +37,21 @@ var joinText = function (text) { // Get supporting libraries var condRequire = function (module_name) { - return typeof require === "function" && require(module_name) + return typeof require === 'function' && require(module_name) } var getMarkdown = function () { - return root.marked || condRequire("marked") + return root.marked || condRequire('marked') } var getAnsi = function () { - var lib = root.ansi_up || condRequire("ansi_up") + var lib = root.ansi_up || condRequire('ansi_up') return lib && lib.ansi_to_html } // Set up `nb` namespace var nb = { - prefix: "nb-", + prefix: 'nb-', markdown: getMarkdown() || ident, ansi: getAnsi() || ident, highlighter: ident, @@ -65,19 +65,19 @@ nb.Input = function (raw, cell) { } nb.Input.prototype.render = function () { - if (!this.raw.length) { return makeElement("div") } - var holder = makeElement("div", [ "input" ]) + if (!this.raw.length) { return makeElement('div') } + var holder = makeElement('div', [ 'input' ]) var cell = this.cell - if (typeof cell.number === "number") { - holder.setAttribute("data-prompt-number", this.cell.number) + if (typeof cell.number === 'number') { + holder.setAttribute('data-prompt-number', this.cell.number) } - var pre_el = makeElement("pre") - var code_el = makeElement("code") + var pre_el = makeElement('pre') + var code_el = makeElement('code') var notebook = cell.worksheet.notebook var m = notebook.metadata var lang = this.cell.raw.language || m.language || (m.kernelspec && m.kernelspec.language) || (m.language_info && m.language_info.name) - code_el.setAttribute("data-language", lang) - code_el.className = "lang-" + lang + code_el.setAttribute('data-language', lang) + code_el.className = 'lang-' + lang code_el.innerHTML = nb.highlighter(escapeHTML(joinText(this.raw)), pre_el, code_el, lang) pre_el.appendChild(code_el) holder.appendChild(pre_el) @@ -88,65 +88,65 @@ nb.Input.prototype.render = function () { // Outputs and output-renderers var imageCreator = function (format) { return function (data) { - var el = makeElement("img", [ "image-output" ]) - el.src = "data:image/" + format + ";base64," + joinText(data).replace(/\n/g, "") + var el = makeElement('img', [ 'image-output' ]) + el.src = 'data:image/' + format + ';base64,' + joinText(data).replace(/\n/g, '') return el } } nb.display = {} nb.display.text = function (text) { - var el = makeElement("pre", [ "text-output" ]) + var el = makeElement('pre', [ 'text-output' ]) el.innerHTML = escapeHTML(joinText(text)) return el } -nb.display["text/plain"] = nb.display.text +nb.display['text/plain'] = nb.display.text nb.display.html = function (html) { - var el = makeElement("div", [ "html-output" ]) + var el = makeElement('div', [ 'html-output' ]) el.innerHTML = joinText(html) return el } -nb.display["text/html"] = nb.display.html +nb.display['text/html'] = nb.display.html nb.display.marked = function(md) { return nb.display.html(nb.markdown(joinText(md))) } -nb.display["text/markdown"] = nb.display.marked +nb.display['text/markdown'] = nb.display.marked nb.display.svg = function (svg) { - var el = makeElement("div", [ "svg-output" ]) + var el = makeElement('div', [ 'svg-output' ]) el.innerHTML = joinText(svg) return el } -nb.display["text/svg+xml"] = nb.display.svg -nb.display["image/svg+xml"] = nb.display.svg +nb.display['text/svg+xml'] = nb.display.svg +nb.display['image/svg+xml'] = nb.display.svg nb.display.latex = function (latex) { - var el = makeElement("div", [ "latex-output" ]) + var el = makeElement('div', [ 'latex-output' ]) el.innerHTML = joinText(latex) return el } -nb.display["text/latex"] = nb.display.latex +nb.display['text/latex'] = nb.display.latex nb.display.javascript = function (js) { - var el = makeElement("script") + var el = makeElement('script') el.innerHTML = joinText(js) return el } -nb.display["application/javascript"] = nb.display.javascript +nb.display['application/javascript'] = nb.display.javascript -nb.display.png = imageCreator("png") -nb.display["image/png"] = nb.display.png -nb.display.jpeg = imageCreator("jpeg") -nb.display["image/jpeg"] = nb.display.jpeg +nb.display.png = imageCreator('png') +nb.display['image/png'] = nb.display.png +nb.display.jpeg = imageCreator('jpeg') +nb.display['image/jpeg'] = nb.display.jpeg nb.display_priority = [ - "png", "image/png", "jpeg", "image/jpeg", - "svg", "image/svg+xml", "text/svg+xml", "html", "text/html", - "text/markdown", "latex", "text/latex", - "javascript", "application/javascript", - "text", "text/plain" + 'png', 'image/png', 'jpeg', 'image/jpeg', + 'svg', 'image/svg+xml', 'text/svg+xml', 'html', 'text/html', + 'text/markdown', 'latex', 'text/latex', + 'javascript', 'application/javascript', + 'text', 'text/plain' ] var render_display_data = function () { @@ -160,12 +160,12 @@ var render_display_data = function () { return nb.display[format](o.raw[format] || o.raw.data[format]) } } - return makeElement("div", [ "empty-output" ]) + return makeElement('div', [ 'empty-output' ]) } var render_error = function () { - var el = makeElement("pre", [ "pyerr" ]) - var raw = this.raw.traceback.join("\n") + var el = makeElement('pre', [ 'pyerr' ]) + var raw = this.raw.traceback.join('\n') el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) return el } @@ -177,13 +177,13 @@ nb.Output = function (raw, cell) { } nb.Output.prototype.renderers = { - "display_data": render_display_data, - "execute_result": render_display_data, - "pyout": render_display_data, - "pyerr": render_error, - "error": render_error, - "stream": function () { - var el = makeElement("pre", [ (this.raw.stream || this.raw.name) ]) + 'display_data': render_display_data, + 'execute_result': render_display_data, + 'pyout': render_display_data, + 'pyerr': render_error, + 'error': render_error, + 'stream': function () { + var el = makeElement('pre', [ (this.raw.stream || this.raw.name) ]) var raw = joinText(this.raw.text) el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) return el @@ -191,9 +191,9 @@ nb.Output.prototype.renderers = { } nb.Output.prototype.render = function () { - var outer = makeElement("div", [ "output" ]) - if (typeof this.cell.number === "number") { - outer.setAttribute("data-prompt-number", this.cell.number) + var outer = makeElement('div', [ 'output' ]) + if (typeof this.cell.number === 'number') { + outer.setAttribute('data-prompt-number', this.cell.number) } var inner = this.renderers[this.type].call(this) outer.appendChild(inner) @@ -207,8 +207,8 @@ nb.coalesceStreams = function (outputs) { var last = outputs[0] var new_outputs = [ last ] outputs.slice(1).forEach(function (o) { - if (o.raw.output_type === "stream" && - last.raw.output_type === "stream" && + if (o.raw.output_type === 'stream' && + last.raw.output_type === 'stream' && o.raw.stream === last.raw.stream) { last.raw.text = last.raw.text.concat(o.raw.text) } else { @@ -225,7 +225,7 @@ nb.Cell = function (raw, worksheet) { cell.raw = raw cell.worksheet = worksheet cell.type = raw.cell_type - if (cell.type === "code") { + if (cell.type === 'code') { cell.number = raw.prompt_number > -1 ? raw.prompt_number : raw.execution_count var source = raw.input || [ raw.source ] cell.input = new nb.Input(source, cell) @@ -238,7 +238,7 @@ nb.Cell = function (raw, worksheet) { nb.Cell.prototype.renderers = { markdown: function () { - var el = makeElement("div", [ "cell", "markdown-cell" ]) + var el = makeElement('div', [ 'cell', 'markdown-cell' ]) el.innerHTML = nb.markdown(joinText(this.raw.source)) /* Requires to render KaTeX @@ -248,27 +248,27 @@ nb.Cell.prototype.renderers = { */ if (root.renderMathInElement != null) { root.renderMathInElement(el, {delimiters: [ - {left: "$$", right: "$$", display: true}, - {left: "\\[", right: "\\]", display: true}, - {left: "\\(", right: "\\)", display: false}, - {left: "$", right: "$", display: false} + {left: '$$', right: '$$', display: true}, + {left: '\\[', right: '\\]', display: true}, + {left: '\\(', right: '\\)', display: false}, + {left: '$', right: '$', display: false} ]}) } return el }, heading: function () { - var el = makeElement("h" + this.raw.level, [ "cell", "heading-cell" ]) + var el = makeElement('h' + this.raw.level, [ 'cell', 'heading-cell' ]) el.innerHTML = joinText(this.raw.source) return el }, raw: function () { - var el = makeElement("div", [ "cell", "raw-cell" ]) + var el = makeElement('div', [ 'cell', 'raw-cell' ]) el.innerHTML = joinText(this.raw.source) return el }, code: function () { - var cell_el = makeElement("div", [ "cell", "code-cell" ]) + var cell_el = makeElement('div', [ 'cell', 'code-cell' ]) cell_el.appendChild(this.input.render()) var output_els = this.outputs.forEach(function (o) { cell_el.appendChild(o.render()) @@ -292,7 +292,7 @@ nb.Worksheet = function (raw, notebook) { return new nb.Cell(c, worksheet) }) this.render = function () { - var worksheet_el = makeElement("div", [ "worksheet" ]) + var worksheet_el = makeElement('div', [ 'worksheet' ]) worksheet.cells.forEach(function (c) { worksheet_el.appendChild(c.render()) }) @@ -316,7 +316,7 @@ nb.Notebook = function (raw, config) { } nb.Notebook.prototype.render = function () { - var notebook_el = makeElement("div", [ "notebook" ]) + var notebook_el = makeElement('div', [ 'notebook' ]) this.worksheets.forEach(function (w) { notebook_el.appendChild(w.render()) }) From 213c197cd1783c7779a38f914973dc681ba2b493 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 5 Sep 2019 21:47:32 +0200 Subject: [PATCH 008/266] Remove spaces inside brackets --- src/index.js | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/index.js b/src/index.js index 4530c7f..e96f553 100644 --- a/src/index.js +++ b/src/index.js @@ -66,7 +66,7 @@ nb.Input = function (raw, cell) { nb.Input.prototype.render = function () { if (!this.raw.length) { return makeElement('div') } - var holder = makeElement('div', [ 'input' ]) + var holder = makeElement('div', ['input']) var cell = this.cell if (typeof cell.number === 'number') { holder.setAttribute('data-prompt-number', this.cell.number) @@ -88,7 +88,7 @@ nb.Input.prototype.render = function () { // Outputs and output-renderers var imageCreator = function (format) { return function (data) { - var el = makeElement('img', [ 'image-output' ]) + var el = makeElement('img', ['image-output']) el.src = 'data:image/' + format + ';base64,' + joinText(data).replace(/\n/g, '') return el } @@ -96,14 +96,14 @@ var imageCreator = function (format) { nb.display = {} nb.display.text = function (text) { - var el = makeElement('pre', [ 'text-output' ]) + var el = makeElement('pre', ['text-output']) el.innerHTML = escapeHTML(joinText(text)) return el } nb.display['text/plain'] = nb.display.text nb.display.html = function (html) { - var el = makeElement('div', [ 'html-output' ]) + var el = makeElement('div', ['html-output']) el.innerHTML = joinText(html) return el } @@ -115,7 +115,7 @@ nb.display.marked = function(md) { nb.display['text/markdown'] = nb.display.marked nb.display.svg = function (svg) { - var el = makeElement('div', [ 'svg-output' ]) + var el = makeElement('div', ['svg-output']) el.innerHTML = joinText(svg) return el } @@ -123,7 +123,7 @@ nb.display['text/svg+xml'] = nb.display.svg nb.display['image/svg+xml'] = nb.display.svg nb.display.latex = function (latex) { - var el = makeElement('div', [ 'latex-output' ]) + var el = makeElement('div', ['latex-output']) el.innerHTML = joinText(latex) return el } @@ -160,11 +160,11 @@ var render_display_data = function () { return nb.display[format](o.raw[format] || o.raw.data[format]) } } - return makeElement('div', [ 'empty-output' ]) + return makeElement('div', ['empty-output']) } var render_error = function () { - var el = makeElement('pre', [ 'pyerr' ]) + var el = makeElement('pre', ['pyerr']) var raw = this.raw.traceback.join('\n') el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) return el @@ -183,7 +183,7 @@ nb.Output.prototype.renderers = { 'pyerr': render_error, 'error': render_error, 'stream': function () { - var el = makeElement('pre', [ (this.raw.stream || this.raw.name) ]) + var el = makeElement('pre', [(this.raw.stream || this.raw.name)]) var raw = joinText(this.raw.text) el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) return el @@ -191,7 +191,7 @@ nb.Output.prototype.renderers = { } nb.Output.prototype.render = function () { - var outer = makeElement('div', [ 'output' ]) + var outer = makeElement('div', ['output']) if (typeof this.cell.number === 'number') { outer.setAttribute('data-prompt-number', this.cell.number) } @@ -205,7 +205,7 @@ nb.Output.prototype.render = function () { nb.coalesceStreams = function (outputs) { if (!outputs.length) { return outputs } var last = outputs[0] - var new_outputs = [ last ] + var new_outputs = [last] outputs.slice(1).forEach(function (o) { if (o.raw.output_type === 'stream' && last.raw.output_type === 'stream' && @@ -227,7 +227,7 @@ nb.Cell = function (raw, worksheet) { cell.type = raw.cell_type if (cell.type === 'code') { cell.number = raw.prompt_number > -1 ? raw.prompt_number : raw.execution_count - var source = raw.input || [ raw.source ] + var source = raw.input || [raw.source] cell.input = new nb.Input(source, cell) var raw_outputs = (cell.raw.outputs || []).map(function (o) { return new nb.Output(o, cell) @@ -238,7 +238,7 @@ nb.Cell = function (raw, worksheet) { nb.Cell.prototype.renderers = { markdown: function () { - var el = makeElement('div', [ 'cell', 'markdown-cell' ]) + var el = makeElement('div', ['cell', 'markdown-cell']) el.innerHTML = nb.markdown(joinText(this.raw.source)) /* Requires to render KaTeX @@ -258,17 +258,17 @@ nb.Cell.prototype.renderers = { return el }, heading: function () { - var el = makeElement('h' + this.raw.level, [ 'cell', 'heading-cell' ]) + var el = makeElement('h' + this.raw.level, ['cell', 'heading-cell']) el.innerHTML = joinText(this.raw.source) return el }, raw: function () { - var el = makeElement('div', [ 'cell', 'raw-cell' ]) + var el = makeElement('div', ['cell', 'raw-cell']) el.innerHTML = joinText(this.raw.source) return el }, code: function () { - var cell_el = makeElement('div', [ 'cell', 'code-cell' ]) + var cell_el = makeElement('div', ['cell', 'code-cell']) cell_el.appendChild(this.input.render()) var output_els = this.outputs.forEach(function (o) { cell_el.appendChild(o.render()) @@ -292,7 +292,7 @@ nb.Worksheet = function (raw, notebook) { return new nb.Cell(c, worksheet) }) this.render = function () { - var worksheet_el = makeElement('div', [ 'worksheet' ]) + var worksheet_el = makeElement('div', ['worksheet']) worksheet.cells.forEach(function (c) { worksheet_el.appendChild(c.render()) }) @@ -308,7 +308,7 @@ nb.Notebook = function (raw, config) { this.config = config var meta = this.metadata = raw.metadata || {} this.title = meta.title || meta.name - var _worksheets = raw.worksheets || [ { cells: raw.cells } ] + var _worksheets = raw.worksheets || [{ cells: raw.cells }] this.worksheets = _worksheets.map(function (ws) { return new nb.Worksheet(ws, notebook) }) @@ -316,7 +316,7 @@ nb.Notebook = function (raw, config) { } nb.Notebook.prototype.render = function () { - var notebook_el = makeElement('div', [ 'notebook' ]) + var notebook_el = makeElement('div', ['notebook']) this.worksheets.forEach(function (w) { notebook_el.appendChild(w.render()) }) From 94762b82169888cc7b5f5f17949a5e0a1825617c Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 5 Sep 2019 21:55:47 +0200 Subject: [PATCH 009/266] Convert from ES5 to ES6 syntax using Lebab tool --- src/index.js | 182 ++++++++++++++++++++++----------------------------- 1 file changed, 80 insertions(+), 102 deletions(-) diff --git a/src/index.js b/src/index.js index e96f553..0a22932 100644 --- a/src/index.js +++ b/src/index.js @@ -1,33 +1,31 @@ // This code is originally based on notebookjs 0.4.2 distributed under the MIT license. -var root = this -var VERSION = '0.4.2' +const root = this +const VERSION = '0.4.2' // Get browser or JSDOM document -var doc = root.document +let doc = root.document if (!doc) { - var jsdom = require('jsdom') + const jsdom = require('jsdom') doc = new jsdom.JSDOM().window.document } // Helper functions -var ident = function (x) { return x } +const ident = x => x -var makeElement = function (tag, classNames) { - var el = doc.createElement(tag) - el.className = (classNames || []).map(function (cn) { - return nb.prefix + cn - }).join(' ') +function makeElement (tag, classNames) { + const el = doc.createElement(tag) + el.className = (classNames || []).map(cn => nb.prefix + cn).join(' ') return el } -var escapeHTML = function (raw) { - var replaced = raw +function escapeHTML (raw) { + const replaced = raw .replace(//g, '>') return replaced } -var joinText = function (text) { +function joinText (text) { if (text.join) { return text.map(joinText).join('') } else { @@ -36,26 +34,22 @@ var joinText = function (text) { } // Get supporting libraries -var condRequire = function (module_name) { - return typeof require === 'function' && require(module_name) -} +const condRequire = module_name => typeof require === 'function' && require(module_name) -var getMarkdown = function () { - return root.marked || condRequire('marked') -} +const getMarkdown = () => root.marked || condRequire('marked') -var getAnsi = function () { - var lib = root.ansi_up || condRequire('ansi_up') +function getAnsi () { + const lib = root.ansi_up || condRequire('ansi_up') return lib && lib.ansi_to_html } // Set up `nb` namespace -var nb = { +const nb = { prefix: 'nb-', markdown: getMarkdown() || ident, ansi: getAnsi() || ident, highlighter: ident, - VERSION: VERSION + VERSION } // Inputs @@ -66,18 +60,18 @@ nb.Input = function (raw, cell) { nb.Input.prototype.render = function () { if (!this.raw.length) { return makeElement('div') } - var holder = makeElement('div', ['input']) - var cell = this.cell + const holder = makeElement('div', ['input']) + const cell = this.cell if (typeof cell.number === 'number') { holder.setAttribute('data-prompt-number', this.cell.number) } - var pre_el = makeElement('pre') - var code_el = makeElement('code') - var notebook = cell.worksheet.notebook - var m = notebook.metadata - var lang = this.cell.raw.language || m.language || (m.kernelspec && m.kernelspec.language) || (m.language_info && m.language_info.name) + const pre_el = makeElement('pre') + const code_el = makeElement('code') + const notebook = cell.worksheet.notebook + const m = notebook.metadata + const lang = this.cell.raw.language || m.language || (m.kernelspec && m.kernelspec.language) || (m.language_info && m.language_info.name) code_el.setAttribute('data-language', lang) - code_el.className = 'lang-' + lang + code_el.className = `lang-${lang}` code_el.innerHTML = nb.highlighter(escapeHTML(joinText(this.raw)), pre_el, code_el, lang) pre_el.appendChild(code_el) holder.appendChild(pre_el) @@ -86,51 +80,47 @@ nb.Input.prototype.render = function () { } // Outputs and output-renderers -var imageCreator = function (format) { - return function (data) { - var el = makeElement('img', ['image-output']) - el.src = 'data:image/' + format + ';base64,' + joinText(data).replace(/\n/g, '') - return el - } +const imageCreator = format => data => { + const el = makeElement('img', ['image-output']) + el.src = `data:image/${format};base64,${joinText(data).replace(/\n/g, '')}` + return el } nb.display = {} -nb.display.text = function (text) { - var el = makeElement('pre', ['text-output']) +nb.display.text = text => { + const el = makeElement('pre', ['text-output']) el.innerHTML = escapeHTML(joinText(text)) return el } nb.display['text/plain'] = nb.display.text -nb.display.html = function (html) { - var el = makeElement('div', ['html-output']) +nb.display.html = html => { + const el = makeElement('div', ['html-output']) el.innerHTML = joinText(html) return el } nb.display['text/html'] = nb.display.html -nb.display.marked = function(md) { - return nb.display.html(nb.markdown(joinText(md))) -} +nb.display.marked = md => nb.display.html(nb.markdown(joinText(md))) nb.display['text/markdown'] = nb.display.marked -nb.display.svg = function (svg) { - var el = makeElement('div', ['svg-output']) +nb.display.svg = svg => { + const el = makeElement('div', ['svg-output']) el.innerHTML = joinText(svg) return el } nb.display['text/svg+xml'] = nb.display.svg nb.display['image/svg+xml'] = nb.display.svg -nb.display.latex = function (latex) { - var el = makeElement('div', ['latex-output']) +nb.display.latex = latex => { + const el = makeElement('div', ['latex-output']) el.innerHTML = joinText(latex) return el } nb.display['text/latex'] = nb.display.latex -nb.display.javascript = function (js) { - var el = makeElement('script') +nb.display.javascript = js => { + const el = makeElement('script') el.innerHTML = joinText(js) return el } @@ -149,12 +139,10 @@ nb.display_priority = [ 'text', 'text/plain' ] -var render_display_data = function () { - var o = this - var formats = nb.display_priority.filter(function (d) { - return o.raw.data ? o.raw.data[d] : o.raw[d] - }) - var format = formats[0] +function render_display_data () { + const o = this + const formats = nb.display_priority.filter(d => o.raw.data ? o.raw.data[d] : o.raw[d]) + const format = formats[0] if (format) { if (nb.display[format]) { return nb.display[format](o.raw[format] || o.raw.data[format]) @@ -163,9 +151,9 @@ var render_display_data = function () { return makeElement('div', ['empty-output']) } -var render_error = function () { - var el = makeElement('pre', ['pyerr']) - var raw = this.raw.traceback.join('\n') +function render_error () { + const el = makeElement('pre', ['pyerr']) + const raw = this.raw.traceback.join('\n') el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) return el } @@ -183,30 +171,30 @@ nb.Output.prototype.renderers = { 'pyerr': render_error, 'error': render_error, 'stream': function () { - var el = makeElement('pre', [(this.raw.stream || this.raw.name)]) - var raw = joinText(this.raw.text) + const el = makeElement('pre', [(this.raw.stream || this.raw.name)]) + const raw = joinText(this.raw.text) el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) return el } } nb.Output.prototype.render = function () { - var outer = makeElement('div', ['output']) + const outer = makeElement('div', ['output']) if (typeof this.cell.number === 'number') { outer.setAttribute('data-prompt-number', this.cell.number) } - var inner = this.renderers[this.type].call(this) + const inner = this.renderers[this.type].call(this) outer.appendChild(inner) this.el = outer return outer } // Post-processing -nb.coalesceStreams = function (outputs) { +nb.coalesceStreams = outputs => { if (!outputs.length) { return outputs } - var last = outputs[0] - var new_outputs = [last] - outputs.slice(1).forEach(function (o) { + let last = outputs[0] + const new_outputs = [last] + outputs.slice(1).forEach(o => { if (o.raw.output_type === 'stream' && last.raw.output_type === 'stream' && o.raw.stream === last.raw.stream) { @@ -221,24 +209,22 @@ nb.coalesceStreams = function (outputs) { // Cells nb.Cell = function (raw, worksheet) { - var cell = this + const cell = this cell.raw = raw cell.worksheet = worksheet cell.type = raw.cell_type if (cell.type === 'code') { cell.number = raw.prompt_number > -1 ? raw.prompt_number : raw.execution_count - var source = raw.input || [raw.source] + const source = raw.input || [raw.source] cell.input = new nb.Input(source, cell) - var raw_outputs = (cell.raw.outputs || []).map(function (o) { - return new nb.Output(o, cell) - }) + const raw_outputs = (cell.raw.outputs || []).map(o => new nb.Output(o, cell)) cell.outputs = nb.coalesceStreams(raw_outputs) } } nb.Cell.prototype.renderers = { - markdown: function () { - var el = makeElement('div', ['cell', 'markdown-cell']) + markdown () { + const el = makeElement('div', ['cell', 'markdown-cell']) el.innerHTML = nb.markdown(joinText(this.raw.source)) /* Requires to render KaTeX @@ -257,20 +243,20 @@ nb.Cell.prototype.renderers = { return el }, - heading: function () { - var el = makeElement('h' + this.raw.level, ['cell', 'heading-cell']) + heading () { + const el = makeElement(`h${this.raw.level}`, ['cell', 'heading-cell']) el.innerHTML = joinText(this.raw.source) return el }, - raw: function () { - var el = makeElement('div', ['cell', 'raw-cell']) + raw () { + const el = makeElement('div', ['cell', 'raw-cell']) el.innerHTML = joinText(this.raw.source) return el }, - code: function () { - var cell_el = makeElement('div', ['cell', 'code-cell']) + code () { + const cell_el = makeElement('div', ['cell', 'code-cell']) cell_el.appendChild(this.input.render()) - var output_els = this.outputs.forEach(function (o) { + const output_els = this.outputs.forEach(o => { cell_el.appendChild(o.render()) }) return cell_el @@ -278,22 +264,20 @@ nb.Cell.prototype.renderers = { } nb.Cell.prototype.render = function () { - var el = this.renderers[this.type].call(this) + const el = this.renderers[this.type].call(this) this.el = el return el } // Worksheets nb.Worksheet = function (raw, notebook) { - var worksheet = this + const worksheet = this this.raw = raw this.notebook = notebook - this.cells = raw.cells.map(function (c) { - return new nb.Cell(c, worksheet) - }) + this.cells = raw.cells.map(c => new nb.Cell(c, worksheet)) this.render = function () { - var worksheet_el = makeElement('div', ['worksheet']) - worksheet.cells.forEach(function (c) { + const worksheet_el = makeElement('div', ['worksheet']) + worksheet.cells.forEach(c => { worksheet_el.appendChild(c.render()) }) this.el = worksheet_el @@ -303,36 +287,30 @@ nb.Worksheet = function (raw, notebook) { // Notebooks nb.Notebook = function (raw, config) { - var notebook = this + const notebook = this this.raw = raw this.config = config - var meta = this.metadata = raw.metadata || {} + const meta = this.metadata = raw.metadata || {} this.title = meta.title || meta.name - var _worksheets = raw.worksheets || [{ cells: raw.cells }] - this.worksheets = _worksheets.map(function (ws) { - return new nb.Worksheet(ws, notebook) - }) + const _worksheets = raw.worksheets || [{ cells: raw.cells }] + this.worksheets = _worksheets.map(ws => new nb.Worksheet(ws, notebook)) this.sheet = this.worksheets[0] } nb.Notebook.prototype.render = function () { - var notebook_el = makeElement('div', ['notebook']) - this.worksheets.forEach(function (w) { + const notebook_el = makeElement('div', ['notebook']) + this.worksheets.forEach(w => { notebook_el.appendChild(w.render()) }) this.el = notebook_el return notebook_el } -nb.parse = function (nbjson, config) { - return new nb.Notebook(nbjson, config) -} +nb.parse = (nbjson, config) => new nb.Notebook(nbjson, config) // Exports if (typeof define === 'function' && define.amd) { - define(function() { - return nb - }) + define(() => nb) } if (typeof exports !== 'undefined') { if (typeof module !== 'undefined' && module.exports) { From 3fcddfb8366310b59b09f8c91142d0274f7d3c77 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 5 Sep 2019 22:00:59 +0200 Subject: [PATCH 010/266] Fix variable names to camelCase --- src/index.js | 70 ++++++++++++++++++++++++++-------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/index.js b/src/index.js index 0a22932..9708cca 100644 --- a/src/index.js +++ b/src/index.js @@ -34,7 +34,7 @@ function joinText (text) { } // Get supporting libraries -const condRequire = module_name => typeof require === 'function' && require(module_name) +const condRequire = moduleName => typeof require === 'function' && require(moduleName) const getMarkdown = () => root.marked || condRequire('marked') @@ -65,16 +65,16 @@ nb.Input.prototype.render = function () { if (typeof cell.number === 'number') { holder.setAttribute('data-prompt-number', this.cell.number) } - const pre_el = makeElement('pre') - const code_el = makeElement('code') + const preEl = makeElement('pre') + const codeEl = makeElement('code') const notebook = cell.worksheet.notebook const m = notebook.metadata const lang = this.cell.raw.language || m.language || (m.kernelspec && m.kernelspec.language) || (m.language_info && m.language_info.name) - code_el.setAttribute('data-language', lang) - code_el.className = `lang-${lang}` - code_el.innerHTML = nb.highlighter(escapeHTML(joinText(this.raw)), pre_el, code_el, lang) - pre_el.appendChild(code_el) - holder.appendChild(pre_el) + codeEl.setAttribute('data-language', lang) + codeEl.className = `lang-${lang}` + codeEl.innerHTML = nb.highlighter(escapeHTML(joinText(this.raw)), preEl, codeEl, lang) + preEl.appendChild(codeEl) + holder.appendChild(preEl) this.el = holder return holder } @@ -131,7 +131,7 @@ nb.display['image/png'] = nb.display.png nb.display.jpeg = imageCreator('jpeg') nb.display['image/jpeg'] = nb.display.jpeg -nb.display_priority = [ +nb.displayPriority = [ 'png', 'image/png', 'jpeg', 'image/jpeg', 'svg', 'image/svg+xml', 'text/svg+xml', 'html', 'text/html', 'text/markdown', 'latex', 'text/latex', @@ -139,9 +139,9 @@ nb.display_priority = [ 'text', 'text/plain' ] -function render_display_data () { +function renderDisplayData () { const o = this - const formats = nb.display_priority.filter(d => o.raw.data ? o.raw.data[d] : o.raw[d]) + const formats = nb.displayPriority.filter(d => o.raw.data ? o.raw.data[d] : o.raw[d]) const format = formats[0] if (format) { if (nb.display[format]) { @@ -151,7 +151,7 @@ function render_display_data () { return makeElement('div', ['empty-output']) } -function render_error () { +function renderError () { const el = makeElement('pre', ['pyerr']) const raw = this.raw.traceback.join('\n') el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) @@ -165,11 +165,11 @@ nb.Output = function (raw, cell) { } nb.Output.prototype.renderers = { - 'display_data': render_display_data, - 'execute_result': render_display_data, - 'pyout': render_display_data, - 'pyerr': render_error, - 'error': render_error, + 'display_data': renderDisplayData, + 'execute_result': renderDisplayData, + 'pyout': renderDisplayData, + 'pyerr': renderError, + 'error': renderError, 'stream': function () { const el = makeElement('pre', [(this.raw.stream || this.raw.name)]) const raw = joinText(this.raw.text) @@ -193,18 +193,18 @@ nb.Output.prototype.render = function () { nb.coalesceStreams = outputs => { if (!outputs.length) { return outputs } let last = outputs[0] - const new_outputs = [last] + const newOutputs = [last] outputs.slice(1).forEach(o => { if (o.raw.output_type === 'stream' && last.raw.output_type === 'stream' && o.raw.stream === last.raw.stream) { last.raw.text = last.raw.text.concat(o.raw.text) } else { - new_outputs.push(o) + newOutputs.push(o) last = o } }) - return new_outputs + return newOutputs } // Cells @@ -217,8 +217,8 @@ nb.Cell = function (raw, worksheet) { cell.number = raw.prompt_number > -1 ? raw.prompt_number : raw.execution_count const source = raw.input || [raw.source] cell.input = new nb.Input(source, cell) - const raw_outputs = (cell.raw.outputs || []).map(o => new nb.Output(o, cell)) - cell.outputs = nb.coalesceStreams(raw_outputs) + const rawOutputs = (cell.raw.outputs || []).map(o => new nb.Output(o, cell)) + cell.outputs = nb.coalesceStreams(rawOutputs) } } @@ -254,12 +254,12 @@ nb.Cell.prototype.renderers = { return el }, code () { - const cell_el = makeElement('div', ['cell', 'code-cell']) - cell_el.appendChild(this.input.render()) - const output_els = this.outputs.forEach(o => { - cell_el.appendChild(o.render()) + const cellEl = makeElement('div', ['cell', 'code-cell']) + cellEl.appendChild(this.input.render()) + const outputEls = this.outputs.forEach(o => { + cellEl.appendChild(o.render()) }) - return cell_el + return cellEl } } @@ -276,12 +276,12 @@ nb.Worksheet = function (raw, notebook) { this.notebook = notebook this.cells = raw.cells.map(c => new nb.Cell(c, worksheet)) this.render = function () { - const worksheet_el = makeElement('div', ['worksheet']) + const worksheetEl = makeElement('div', ['worksheet']) worksheet.cells.forEach(c => { - worksheet_el.appendChild(c.render()) + worksheetEl.appendChild(c.render()) }) - this.el = worksheet_el - return worksheet_el + this.el = worksheetEl + return worksheetEl } } @@ -298,12 +298,12 @@ nb.Notebook = function (raw, config) { } nb.Notebook.prototype.render = function () { - const notebook_el = makeElement('div', ['notebook']) + const notebookEl = makeElement('div', ['notebook']) this.worksheets.forEach(w => { - notebook_el.appendChild(w.render()) + notebookEl.appendChild(w.render()) }) - this.el = notebook_el - return notebook_el + this.el = notebookEl + return notebookEl } nb.parse = (nbjson, config) => new nb.Notebook(nbjson, config) From d3b3bddf51481d2eb4a8412073c582b631c50862 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 5 Sep 2019 22:12:38 +0200 Subject: [PATCH 011/266] Use ES6 classes --- src/index.js | 276 +++++++++++++++++++++++++++------------------------ 1 file changed, 148 insertions(+), 128 deletions(-) diff --git a/src/index.js b/src/index.js index 9708cca..db66d8f 100644 --- a/src/index.js +++ b/src/index.js @@ -53,31 +53,35 @@ const nb = { } // Inputs -nb.Input = function (raw, cell) { - this.raw = raw - this.cell = cell -} +class Input { -nb.Input.prototype.render = function () { - if (!this.raw.length) { return makeElement('div') } - const holder = makeElement('div', ['input']) - const cell = this.cell - if (typeof cell.number === 'number') { - holder.setAttribute('data-prompt-number', this.cell.number) + constructor (raw, cell) { + this.raw = raw + this.cell = cell + } + + render () { + if (!this.raw.length) { return makeElement('div') } + const holder = makeElement('div', ['input']) + const cell = this.cell + if (typeof cell.number === 'number') { + holder.setAttribute('data-prompt-number', this.cell.number) + } + const preEl = makeElement('pre') + const codeEl = makeElement('code') + const notebook = cell.worksheet.notebook + const m = notebook.metadata + const lang = this.cell.raw.language || m.language || (m.kernelspec && m.kernelspec.language) || (m.language_info && m.language_info.name) + codeEl.setAttribute('data-language', lang) + codeEl.className = `lang-${lang}` + codeEl.innerHTML = nb.highlighter(escapeHTML(joinText(this.raw)), preEl, codeEl, lang) + preEl.appendChild(codeEl) + holder.appendChild(preEl) + this.el = holder + return holder } - const preEl = makeElement('pre') - const codeEl = makeElement('code') - const notebook = cell.worksheet.notebook - const m = notebook.metadata - const lang = this.cell.raw.language || m.language || (m.kernelspec && m.kernelspec.language) || (m.language_info && m.language_info.name) - codeEl.setAttribute('data-language', lang) - codeEl.className = `lang-${lang}` - codeEl.innerHTML = nb.highlighter(escapeHTML(joinText(this.raw)), preEl, codeEl, lang) - preEl.appendChild(codeEl) - holder.appendChild(preEl) - this.el = holder - return holder } +nb.Input = Input // Outputs and output-renderers const imageCreator = format => data => { @@ -158,36 +162,42 @@ function renderError () { return el } -nb.Output = function (raw, cell) { - this.raw = raw - this.cell = cell - this.type = raw.output_type -} +class Output { -nb.Output.prototype.renderers = { - 'display_data': renderDisplayData, - 'execute_result': renderDisplayData, - 'pyout': renderDisplayData, - 'pyerr': renderError, - 'error': renderError, - 'stream': function () { - const el = makeElement('pre', [(this.raw.stream || this.raw.name)]) - const raw = joinText(this.raw.text) - el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) - return el + /* eslint-disable @typescript-eslint/camelcase */ + renderers = { + display_data: renderDisplayData, + execute_result: renderDisplayData, + pyout: renderDisplayData, + pyerr: renderError, + error: renderError, + stream: function () { + const el = makeElement('pre', [(this.raw.stream || this.raw.name)]) + const raw = joinText(this.raw.text) + el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) + return el + }, + } + /* eslint-enable @typescript-eslint/camelcase */ + + constructor (raw, cell) { + this.raw = raw + this.cell = cell + this.type = raw.output_type + } + + render () { + const outer = makeElement('div', ['output']) + if (typeof this.cell.number === 'number') { + outer.setAttribute('data-prompt-number', this.cell.number) + } + const inner = this.renderers[this.type].call(this) + outer.appendChild(inner) + this.el = outer + return outer } } - -nb.Output.prototype.render = function () { - const outer = makeElement('div', ['output']) - if (typeof this.cell.number === 'number') { - outer.setAttribute('data-prompt-number', this.cell.number) - } - const inner = this.renderers[this.type].call(this) - outer.appendChild(inner) - this.el = outer - return outer -} +nb.Output = Output // Post-processing nb.coalesceStreams = outputs => { @@ -207,104 +217,114 @@ nb.coalesceStreams = outputs => { return newOutputs } -// Cells -nb.Cell = function (raw, worksheet) { - const cell = this - cell.raw = raw - cell.worksheet = worksheet - cell.type = raw.cell_type - if (cell.type === 'code') { - cell.number = raw.prompt_number > -1 ? raw.prompt_number : raw.execution_count - const source = raw.input || [raw.source] - cell.input = new nb.Input(source, cell) - const rawOutputs = (cell.raw.outputs || []).map(o => new nb.Output(o, cell)) - cell.outputs = nb.coalesceStreams(rawOutputs) +class Cell { + + renderers = { + markdown () { + const el = makeElement('div', ['cell', 'markdown-cell']) + el.innerHTML = nb.markdown(joinText(this.raw.source)) + + /* Requires to render KaTeX + 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.js', + 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.css', + 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/contrib/auto-render.min.js', + */ + if (root.renderMathInElement != null) { + root.renderMathInElement(el, {delimiters: [ + {left: '$$', right: '$$', display: true}, + {left: '\\[', right: '\\]', display: true}, + {left: '\\(', right: '\\)', display: false}, + {left: '$', right: '$', display: false} + ]}) + } + + return el + }, + heading () { + const el = makeElement(`h${this.raw.level}`, ['cell', 'heading-cell']) + el.innerHTML = joinText(this.raw.source) + return el + }, + raw () { + const el = makeElement('div', ['cell', 'raw-cell']) + el.innerHTML = joinText(this.raw.source) + return el + }, + code () { + const cellEl = makeElement('div', ['cell', 'code-cell']) + cellEl.appendChild(this.input.render()) + const outputEls = this.outputs.forEach(o => { + cellEl.appendChild(o.render()) + }) + return cellEl + }, } -} -nb.Cell.prototype.renderers = { - markdown () { - const el = makeElement('div', ['cell', 'markdown-cell']) - el.innerHTML = nb.markdown(joinText(this.raw.source)) - - /* Requires to render KaTeX - 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.js', - 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.css', - 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/contrib/auto-render.min.js', - */ - if (root.renderMathInElement != null) { - root.renderMathInElement(el, {delimiters: [ - {left: '$$', right: '$$', display: true}, - {left: '\\[', right: '\\]', display: true}, - {left: '\\(', right: '\\)', display: false}, - {left: '$', right: '$', display: false} - ]}) + constructor (raw, worksheet) { + const cell = this + cell.raw = raw + cell.worksheet = worksheet + cell.type = raw.cell_type + if (cell.type === 'code') { + cell.number = raw.prompt_number > -1 ? raw.prompt_number : raw.execution_count + const source = raw.input || [raw.source] + cell.input = new nb.Input(source, cell) + const rawOutputs = (cell.raw.outputs || []).map(o => new nb.Output(o, cell)) + cell.outputs = nb.coalesceStreams(rawOutputs) } + } + render () { + const el = this.renderers[this.type].call(this) + this.el = el return el - }, - heading () { - const el = makeElement(`h${this.raw.level}`, ['cell', 'heading-cell']) - el.innerHTML = joinText(this.raw.source) - return el - }, - raw () { - const el = makeElement('div', ['cell', 'raw-cell']) - el.innerHTML = joinText(this.raw.source) - return el - }, - code () { - const cellEl = makeElement('div', ['cell', 'code-cell']) - cellEl.appendChild(this.input.render()) - const outputEls = this.outputs.forEach(o => { - cellEl.appendChild(o.render()) - }) - return cellEl } } +nb.Cell = Cell -nb.Cell.prototype.render = function () { - const el = this.renderers[this.type].call(this) - this.el = el - return el -} +class Worksheet { -// Worksheets -nb.Worksheet = function (raw, notebook) { - const worksheet = this - this.raw = raw - this.notebook = notebook - this.cells = raw.cells.map(c => new nb.Cell(c, worksheet)) - this.render = function () { + constructor (raw, notebook) { + const worksheet = this + this.raw = raw + this.notebook = notebook + this.cells = raw.cells.map(c => new nb.Cell(c, worksheet)) + } + + render () { const worksheetEl = makeElement('div', ['worksheet']) - worksheet.cells.forEach(c => { + this.cells.forEach(c => { worksheetEl.appendChild(c.render()) }) this.el = worksheetEl return worksheetEl } } +nb.Worksheet = Worksheet -// Notebooks -nb.Notebook = function (raw, config) { - const notebook = this - this.raw = raw - this.config = config - const meta = this.metadata = raw.metadata || {} - this.title = meta.title || meta.name - const _worksheets = raw.worksheets || [{ cells: raw.cells }] - this.worksheets = _worksheets.map(ws => new nb.Worksheet(ws, notebook)) - this.sheet = this.worksheets[0] -} +class Notebook { -nb.Notebook.prototype.render = function () { - const notebookEl = makeElement('div', ['notebook']) - this.worksheets.forEach(w => { - notebookEl.appendChild(w.render()) - }) - this.el = notebookEl - return notebookEl + constructor (raw, config) { + const notebook = this + this.raw = raw + this.config = config + const meta = this.metadata = raw.metadata || {} + this.title = meta.title || meta.name + const _worksheets = raw.worksheets || [{ cells: raw.cells }] + this.worksheets = _worksheets.map(ws => new nb.Worksheet(ws, notebook)) + this.sheet = this.worksheets[0] + } + + render () { + const notebookEl = makeElement('div', ['notebook']) + this.worksheets.forEach(w => { + notebookEl.appendChild(w.render()) + }) + this.el = notebookEl + return notebookEl + } } +nb.Notebook = Notebook nb.parse = (nbjson, config) => new nb.Notebook(nbjson, config) From 983629aaa2b290870f2b946a2ead0eb6046d5aa5 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 6 Sep 2019 00:22:43 +0200 Subject: [PATCH 012/266] Convert CommonJS to ES modules --- src/index.js | 38 ++++++++------------------------------ 1 file changed, 8 insertions(+), 30 deletions(-) diff --git a/src/index.js b/src/index.js index db66d8f..c441ba1 100644 --- a/src/index.js +++ b/src/index.js @@ -1,13 +1,12 @@ // This code is originally based on notebookjs 0.4.2 distributed under the MIT license. +import ansiUp from 'ansi_up' +import jsdom from 'jsdom' +import marked from 'marked' + const root = this const VERSION = '0.4.2' -// Get browser or JSDOM document -let doc = root.document -if (!doc) { - const jsdom = require('jsdom') - doc = new jsdom.JSDOM().window.document -} +const doc = new jsdom.JSDOM().window.document // Helper functions const ident = x => x @@ -33,21 +32,11 @@ function joinText (text) { } } -// Get supporting libraries -const condRequire = moduleName => typeof require === 'function' && require(moduleName) - -const getMarkdown = () => root.marked || condRequire('marked') - -function getAnsi () { - const lib = root.ansi_up || condRequire('ansi_up') - return lib && lib.ansi_to_html -} - // Set up `nb` namespace const nb = { prefix: 'nb-', - markdown: getMarkdown() || ident, - ansi: getAnsi() || ident, + markdown: marked, + ansi: ansiUp.ansi_to_html, highlighter: ident, VERSION } @@ -328,15 +317,4 @@ nb.Notebook = Notebook nb.parse = (nbjson, config) => new nb.Notebook(nbjson, config) -// Exports -if (typeof define === 'function' && define.amd) { - define(() => nb) -} -if (typeof exports !== 'undefined') { - if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = nb - } - exports.nb = nb -} else { - root.nb = nb -} +export default nb From 613580d0b937e70a1bdf341925e17ee0c4f79366 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 6 Sep 2019 00:36:14 +0200 Subject: [PATCH 013/266] First refactoring --- src/index.js | 308 +++++++++++++++++++++++++-------------------------- 1 file changed, 153 insertions(+), 155 deletions(-) diff --git a/src/index.js b/src/index.js index c441ba1..6124706 100644 --- a/src/index.js +++ b/src/index.js @@ -3,34 +3,11 @@ import ansiUp from 'ansi_up' import jsdom from 'jsdom' import marked from 'marked' -const root = this const VERSION = '0.4.2' const doc = new jsdom.JSDOM().window.document -// Helper functions -const ident = x => x - -function makeElement (tag, classNames) { - const el = doc.createElement(tag) - el.className = (classNames || []).map(cn => nb.prefix + cn).join(' ') - return el -} - -function escapeHTML (raw) { - const replaced = raw - .replace(//g, '>') - return replaced -} - -function joinText (text) { - if (text.join) { - return text.map(joinText).join('') - } else { - return text - } -} +const ident = (x) => x // Set up `nb` namespace const nb = { @@ -38,11 +15,23 @@ const nb = { markdown: marked, ansi: ansiUp.ansi_to_html, highlighter: ident, - VERSION + renderMath: doc.renderMathInElement || ident, + VERSION, } -// Inputs -class Input { +function makeElement (tag, classNames) { + const el = doc.createElement(tag) + el.className = (classNames || []).map(cn => nb.prefix + cn).join(' ') + return el +} + +const escapeHTML = (raw) => raw.replace(//g, '>') + +function joinText (text) { + return text.join ? text.map(joinText).join('') : text +} + +export class Input { constructor (raw, cell) { this.raw = raw @@ -50,96 +39,110 @@ class Input { } render () { - if (!this.raw.length) { return makeElement('div') } + if (!this.raw.length) { + return makeElement('div') + } const holder = makeElement('div', ['input']) const cell = this.cell + if (typeof cell.number === 'number') { holder.setAttribute('data-prompt-number', this.cell.number) } const preEl = makeElement('pre') const codeEl = makeElement('code') + const notebook = cell.worksheet.notebook const m = notebook.metadata const lang = this.cell.raw.language || m.language || (m.kernelspec && m.kernelspec.language) || (m.language_info && m.language_info.name) + codeEl.setAttribute('data-language', lang) codeEl.className = `lang-${lang}` codeEl.innerHTML = nb.highlighter(escapeHTML(joinText(this.raw)), preEl, codeEl, lang) + preEl.appendChild(codeEl) holder.appendChild(preEl) - this.el = holder + return holder } } -nb.Input = Input + // Outputs and output-renderers -const imageCreator = format => data => { +const imageCreator = (format) => (data) => { const el = makeElement('img', ['image-output']) el.src = `data:image/${format};base64,${joinText(data).replace(/\n/g, '')}` return el } -nb.display = {} -nb.display.text = text => { - const el = makeElement('pre', ['text-output']) - el.innerHTML = escapeHTML(joinText(text)) - return el +nb.display = { + text: (data) => { + const el = makeElement('pre', ['text-output']) + el.innerHTML = escapeHTML(joinText(data)) + return el + }, + html: (data) => { + const el = makeElement('div', ['html-output']) + el.innerHTML = joinText(data) + return el + }, + marked: (data) => nb.display.html(nb.markdown(joinText(data))), + svg: (svg) => { + const el = makeElement('div', ['svg-output']) + el.innerHTML = joinText(svg) + return el + }, + latex: (data) => { + const el = makeElement('div', ['latex-output']) + el.innerHTML = joinText(data) + return el + }, + javascript: (data) => { + const el = makeElement('script') + el.innerHTML = joinText(data) + return el + }, + png: imageCreator('png'), + jpeg: imageCreator('jpeg'), } -nb.display['text/plain'] = nb.display.text -nb.display.html = html => { - const el = makeElement('div', ['html-output']) - el.innerHTML = joinText(html) - return el -} -nb.display['text/html'] = nb.display.html - -nb.display.marked = md => nb.display.html(nb.markdown(joinText(md))) -nb.display['text/markdown'] = nb.display.marked - -nb.display.svg = svg => { - const el = makeElement('div', ['svg-output']) - el.innerHTML = joinText(svg) - return el -} -nb.display['text/svg+xml'] = nb.display.svg -nb.display['image/svg+xml'] = nb.display.svg - -nb.display.latex = latex => { - const el = makeElement('div', ['latex-output']) - el.innerHTML = joinText(latex) - return el -} -nb.display['text/latex'] = nb.display.latex - -nb.display.javascript = js => { - const el = makeElement('script') - el.innerHTML = joinText(js) - return el -} -nb.display['application/javascript'] = nb.display.javascript - -nb.display.png = imageCreator('png') -nb.display['image/png'] = nb.display.png -nb.display.jpeg = imageCreator('jpeg') -nb.display['image/jpeg'] = nb.display.jpeg +Object.entries({ + 'text/plain': 'text', + 'text/html': 'html', + 'text/markdown': 'marked', + 'text/svg+xml': 'svg', + 'image/svg+xml': 'svg', + 'text/latex': 'latex', + 'application/javascript': 'javascript', + 'image/png': 'png', + 'image/jpeg': 'jpeg', +}).forEach(([src, tgt]) => { + nb.display[src] = nb.display[tgt] +}) nb.displayPriority = [ - 'png', 'image/png', 'jpeg', 'image/jpeg', - 'svg', 'image/svg+xml', 'text/svg+xml', 'html', 'text/html', - 'text/markdown', 'latex', 'text/latex', - 'javascript', 'application/javascript', - 'text', 'text/plain' + 'png', + 'image/png', + 'jpeg', + 'image/jpeg', + 'svg', + 'image/svg+xml', + 'text/svg+xml', + 'html', + 'text/html', + 'text/markdown', + 'latex', + 'text/latex', + 'javascript', + 'application/javascript', + 'text', + 'text/plain', ] function renderDisplayData () { - const o = this - const formats = nb.displayPriority.filter(d => o.raw.data ? o.raw.data[d] : o.raw[d]) - const format = formats[0] - if (format) { - if (nb.display[format]) { - return nb.display[format](o.raw[format] || o.raw.data[format]) - } + const format = nb.displayPriority.find(d => this.raw.data ? this.raw.data[d] : this.raw[d]) + + if (format && nb.display[format]) { + return nb.display[format](this.raw[format] || this.raw.data[format]) } return makeElement('div', ['empty-output']) } @@ -147,11 +150,13 @@ function renderDisplayData () { function renderError () { const el = makeElement('pre', ['pyerr']) const raw = this.raw.traceback.join('\n') + el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) + return el } -class Output { +export class Output { /* eslint-disable @typescript-eslint/camelcase */ renderers = { @@ -160,7 +165,7 @@ class Output { pyout: renderDisplayData, pyerr: renderError, error: renderError, - stream: function () { + stream: () => { const el = makeElement('pre', [(this.raw.stream || this.raw.name)]) const raw = joinText(this.raw.text) el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) @@ -177,55 +182,48 @@ class Output { render () { const outer = makeElement('div', ['output']) + if (typeof this.cell.number === 'number') { outer.setAttribute('data-prompt-number', this.cell.number) } const inner = this.renderers[this.type].call(this) outer.appendChild(inner) - this.el = outer + return outer } } -nb.Output = Output // Post-processing -nb.coalesceStreams = outputs => { +function coalesceStreams (outputs) { if (!outputs.length) { return outputs } + let last = outputs[0] const newOutputs = [last] - outputs.slice(1).forEach(o => { - if (o.raw.output_type === 'stream' && - last.raw.output_type === 'stream' && - o.raw.stream === last.raw.stream) { - last.raw.text = last.raw.text.concat(o.raw.text) + + for (const output of outputs.slice(1)) { + if (output.raw.output_type === 'stream' && last.raw.output_type === 'stream' && output.raw.stream === last.raw.stream) { + last.raw.text = last.raw.text.concat(output.raw.text) } else { - newOutputs.push(o) - last = o + newOutputs.push(output) + last = output } - }) + } return newOutputs } -class Cell { +export class Cell { renderers = { markdown () { const el = makeElement('div', ['cell', 'markdown-cell']) el.innerHTML = nb.markdown(joinText(this.raw.source)) - /* Requires to render KaTeX - 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.js', - 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/katex.min.css', - 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.10.0/contrib/auto-render.min.js', - */ - if (root.renderMathInElement != null) { - root.renderMathInElement(el, {delimiters: [ - {left: '$$', right: '$$', display: true}, - {left: '\\[', right: '\\]', display: true}, - {left: '\\(', right: '\\)', display: false}, - {left: '$', right: '$', display: false} - ]}) - } + nb.renderMath(el, { delimiters: [ + { left: '$$', right: '$$', display: true }, + { left: '\\[', right: '\\]', display: true }, + { left: '\\(', right: '\\)', display: false }, + { left: '$', right: '$', display: false }, + ] }) return el }, @@ -240,81 +238,81 @@ class Cell { return el }, code () { - const cellEl = makeElement('div', ['cell', 'code-cell']) - cellEl.appendChild(this.input.render()) - const outputEls = this.outputs.forEach(o => { - cellEl.appendChild(o.render()) - }) - return cellEl + const el = makeElement('div', ['cell', 'code-cell']) + el.appendChild(this.input.render()) + + for (const output of this.outputs) { + el.appendChild(output.render()) + } + return el }, } constructor (raw, worksheet) { - const cell = this - cell.raw = raw - cell.worksheet = worksheet - cell.type = raw.cell_type - if (cell.type === 'code') { - cell.number = raw.prompt_number > -1 ? raw.prompt_number : raw.execution_count + this.raw = raw + this.worksheet = worksheet + this.type = raw.cell_type + + if (this.type === 'code') { + this.number = raw.prompt_number > -1 ? raw.prompt_number : raw.execution_count + const source = raw.input || [raw.source] - cell.input = new nb.Input(source, cell) - const rawOutputs = (cell.raw.outputs || []).map(o => new nb.Output(o, cell)) - cell.outputs = nb.coalesceStreams(rawOutputs) + this.input = new Input(source, this) + + const rawOutputs = (this.raw.outputs || []).map(output => new Output(output, this)) + this.outputs = coalesceStreams(rawOutputs) } } render () { - const el = this.renderers[this.type].call(this) - this.el = el - return el + return this.renderers[this.type].call(this) } } -nb.Cell = Cell -class Worksheet { +export class Worksheet { constructor (raw, notebook) { - const worksheet = this this.raw = raw this.notebook = notebook - this.cells = raw.cells.map(c => new nb.Cell(c, worksheet)) + this.cells = raw.cells.map(cell => new Cell(cell, this)) } render () { - const worksheetEl = makeElement('div', ['worksheet']) - this.cells.forEach(c => { - worksheetEl.appendChild(c.render()) - }) - this.el = worksheetEl - return worksheetEl + const el = makeElement('div', ['worksheet']) + + for (const cell of this.cells) { + el.appendChild(cell.render()) + } + return el } } -nb.Worksheet = Worksheet -class Notebook { +export class Notebook { - constructor (raw, config) { - const notebook = this + constructor (raw) { this.raw = raw - this.config = config + const meta = this.metadata = raw.metadata || {} this.title = meta.title || meta.name - const _worksheets = raw.worksheets || [{ cells: raw.cells }] - this.worksheets = _worksheets.map(ws => new nb.Worksheet(ws, notebook)) + + const worksheets = raw.worksheets || [{ cells: raw.cells }] + this.worksheets = worksheets.map(sheet => new Worksheet(sheet, this)) + this.sheet = this.worksheets[0] } render () { - const notebookEl = makeElement('div', ['notebook']) - this.worksheets.forEach(w => { - notebookEl.appendChild(w.render()) - }) - this.el = notebookEl - return notebookEl + const el = makeElement('div', ['notebook']) + + for (const sheet of this.worksheets) { + el.appendChild(sheet.render()) + } + return el } } -nb.Notebook = Notebook -nb.parse = (nbjson, config) => new nb.Notebook(nbjson, config) +nb.parse = function (nbjson) { + return new Notebook(nbjson) +} export default nb From 6a3daeb30c9f62cbc30c0fc7a2158888bff23b39 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 7 Sep 2019 13:23:43 +0200 Subject: [PATCH 014/266] Remove compat. with nbformat <4.0: markdown heading cell https://nbformat.readthedocs.io/en/latest/format_description.html#markdown-cells: > Heading cells have been removed, in favor of simple headings in markdown. --- src/index.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/index.js b/src/index.js index 6124706..c8df0d1 100644 --- a/src/index.js +++ b/src/index.js @@ -227,11 +227,6 @@ export class Cell { return el }, - heading () { - const el = makeElement(`h${this.raw.level}`, ['cell', 'heading-cell']) - el.innerHTML = joinText(this.raw.source) - return el - }, raw () { const el = makeElement('div', ['cell', 'raw-cell']) el.innerHTML = joinText(this.raw.source) From 467e5218c15748fe151c645a36a6c9bc89add46e Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 7 Sep 2019 13:28:22 +0200 Subject: [PATCH 015/266] Remove compat. with nbformat <4.0: code cell https://nbformat.readthedocs.io/en/latest/format_description.html#code-cells: > `input` was renamed to `source`, for consistency among cell types. https://nbformat.readthedocs.io/en/latest/format_description.html#code-cells: > prompt_number renamed to execution_count Key `language` was removed from the code cell in 4.0. --- src/index.js | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/index.js b/src/index.js index c8df0d1..ea3e79e 100644 --- a/src/index.js +++ b/src/index.js @@ -31,7 +31,7 @@ function joinText (text) { return text.join ? text.map(joinText).join('') : text } -export class Input { +export class Source { constructor (raw, cell) { this.raw = raw @@ -42,18 +42,21 @@ export class Input { if (!this.raw.length) { return makeElement('div') } - const holder = makeElement('div', ['input']) + // Class "input" is for backward compatibility with notebook.js. + const holder = makeElement('div', ['source', 'input']) const cell = this.cell - if (typeof cell.number === 'number') { - holder.setAttribute('data-prompt-number', this.cell.number) + if (typeof cell.executionCount === 'number') { + holder.setAttribute('data-execution-count', this.cell.executionCount) + // Only for backward compatibility with notebook.js. + holder.setAttribute('data-prompt-number', this.cell.executionCount) } const preEl = makeElement('pre') const codeEl = makeElement('code') const notebook = cell.worksheet.notebook const m = notebook.metadata - const lang = this.cell.raw.language || m.language || (m.kernelspec && m.kernelspec.language) || (m.language_info && m.language_info.name) + const lang = (m.language_info && m.language_info.name) || (m.kernelspec && m.kernelspec.language) codeEl.setAttribute('data-language', lang) codeEl.className = `lang-${lang}` @@ -183,8 +186,10 @@ export class Output { render () { const outer = makeElement('div', ['output']) - if (typeof this.cell.number === 'number') { - outer.setAttribute('data-prompt-number', this.cell.number) + if (typeof this.cell.executionCount === 'number') { + outer.setAttribute('data-execution-count', this.cell.executionCount) + // Only for backward compatibility with notebook.js. + outer.setAttribute('data-prompt-number', this.cell.executionCount) } const inner = this.renderers[this.type].call(this) outer.appendChild(inner) @@ -234,7 +239,7 @@ export class Cell { }, code () { const el = makeElement('div', ['cell', 'code-cell']) - el.appendChild(this.input.render()) + el.appendChild(this.source.render()) for (const output of this.outputs) { el.appendChild(output.render()) @@ -249,10 +254,10 @@ export class Cell { this.type = raw.cell_type if (this.type === 'code') { - this.number = raw.prompt_number > -1 ? raw.prompt_number : raw.execution_count + this.executionCount = raw.execution_count - const source = raw.input || [raw.source] - this.input = new Input(source, this) + const source = [raw.source] + this.source = new Source(source, this) const rawOutputs = (this.raw.outputs || []).map(output => new Output(output, this)) this.outputs = coalesceStreams(rawOutputs) From dbfe5b500b486dc5a155c0453841c00f9842c70b Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 7 Sep 2019 13:37:16 +0200 Subject: [PATCH 016/266] Remove compat. with nbformat <4.0: stream output https://nbformat.readthedocs.io/en/latest/format_description.html#stream-output: > The stream key was changed to name to match the stream message. --- src/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index ea3e79e..c079c6e 100644 --- a/src/index.js +++ b/src/index.js @@ -169,7 +169,7 @@ export class Output { pyerr: renderError, error: renderError, stream: () => { - const el = makeElement('pre', [(this.raw.stream || this.raw.name)]) + const el = makeElement('pre', [this.raw.name]) const raw = joinText(this.raw.text) el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) return el @@ -206,7 +206,7 @@ function coalesceStreams (outputs) { const newOutputs = [last] for (const output of outputs.slice(1)) { - if (output.raw.output_type === 'stream' && last.raw.output_type === 'stream' && output.raw.stream === last.raw.stream) { + if (output.raw.output_type === 'stream' && last.raw.output_type === 'stream' && output.raw.name === last.raw.name) { last.raw.text = last.raw.text.concat(output.raw.text) } else { newOutputs.push(output) From acbb3ca3cb603dbbc74fca835f6bea560b5f7d2f Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 7 Sep 2019 13:46:36 +0200 Subject: [PATCH 017/266] Remove compat. with nbformat <4.0: display_data https://nbformat.readthedocs.io/en/latest/format_description.html#display-data: > mime-types are used for keys, instead of a combination of short names > (text) and mime-types, and are stored in a data key, rather than the > top-level. i.e. output.data['image/png'] instead of output.png. --- src/index.js | 44 ++++++++++++-------------------------------- 1 file changed, 12 insertions(+), 32 deletions(-) diff --git a/src/index.js b/src/index.js index c079c6e..64ab199 100644 --- a/src/index.js +++ b/src/index.js @@ -78,74 +78,54 @@ const imageCreator = (format) => (data) => { } nb.display = { - text: (data) => { + 'text/plain': (data) => { const el = makeElement('pre', ['text-output']) el.innerHTML = escapeHTML(joinText(data)) return el }, - html: (data) => { + 'text/html': (data) => { const el = makeElement('div', ['html-output']) el.innerHTML = joinText(data) return el }, - marked: (data) => nb.display.html(nb.markdown(joinText(data))), - svg: (svg) => { + 'text/markdown': (data) => nb.display['text/html'](nb.markdown(joinText(data))), + 'image/svg+xml': (data) => { const el = makeElement('div', ['svg-output']) - el.innerHTML = joinText(svg) + el.innerHTML = joinText(data) return el }, - latex: (data) => { + 'text/latex': (data) => { const el = makeElement('div', ['latex-output']) el.innerHTML = joinText(data) return el }, - javascript: (data) => { + 'application/javascript': (data) => { const el = makeElement('script') el.innerHTML = joinText(data) return el }, - png: imageCreator('png'), - jpeg: imageCreator('jpeg'), + 'image/png': imageCreator('png'), + 'image/jpeg': imageCreator('jpeg'), } - -Object.entries({ - 'text/plain': 'text', - 'text/html': 'html', - 'text/markdown': 'marked', - 'text/svg+xml': 'svg', - 'image/svg+xml': 'svg', - 'text/latex': 'latex', - 'application/javascript': 'javascript', - 'image/png': 'png', - 'image/jpeg': 'jpeg', -}).forEach(([src, tgt]) => { - nb.display[src] = nb.display[tgt] -}) +nb.display['text/svg+xml'] = nb.display['image/svg+xml'] nb.displayPriority = [ - 'png', 'image/png', - 'jpeg', 'image/jpeg', - 'svg', 'image/svg+xml', 'text/svg+xml', - 'html', 'text/html', 'text/markdown', - 'latex', 'text/latex', - 'javascript', 'application/javascript', - 'text', 'text/plain', ] function renderDisplayData () { - const format = nb.displayPriority.find(d => this.raw.data ? this.raw.data[d] : this.raw[d]) + const format = nb.displayPriority.find(d => this.raw.data[d]) if (format && nb.display[format]) { - return nb.display[format](this.raw[format] || this.raw.data[format]) + return nb.display[format](this.raw.data[format]) } return makeElement('div', ['empty-output']) } From c982a7db3f82ec639ac57172e59ac409cccdf80c Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 7 Sep 2019 13:49:37 +0200 Subject: [PATCH 018/266] Remove compat. with nbformat <4.0: execute_result https://nbformat.readthedocs.io/en/latest/format_description.html#execute-result: > pyout renamed to execute_result --- src/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/index.js b/src/index.js index 64ab199..e3f4ed3 100644 --- a/src/index.js +++ b/src/index.js @@ -145,7 +145,6 @@ export class Output { renderers = { display_data: renderDisplayData, execute_result: renderDisplayData, - pyout: renderDisplayData, pyerr: renderError, error: renderError, stream: () => { From 5c661af4b8d225c3144d8492ab7f81ac1121e5d7 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 7 Sep 2019 13:50:48 +0200 Subject: [PATCH 019/266] Remove compat. with nbformat <4.0: error https://nbformat.readthedocs.io/en/latest/format_description.html#error: > pyerr renamed to error --- src/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index e3f4ed3..5046b75 100644 --- a/src/index.js +++ b/src/index.js @@ -131,7 +131,8 @@ function renderDisplayData () { } function renderError () { - const el = makeElement('pre', ['pyerr']) + // Class "pyerr" is for backward compatibility with notebook.js. + const el = makeElement('pre', ['error', 'pyerr']) const raw = this.raw.traceback.join('\n') el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) @@ -145,7 +146,6 @@ export class Output { renderers = { display_data: renderDisplayData, execute_result: renderDisplayData, - pyerr: renderError, error: renderError, stream: () => { const el = makeElement('pre', [this.raw.name]) From a495bdfc1392cb9322e51ef1b93254c084895eb0 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 7 Sep 2019 14:07:36 +0200 Subject: [PATCH 020/266] Remove compat. with nbformat <4.0: worksheets This was removed from nbformat 4.0+. --- src/index.js | 37 ++++++++----------------------------- 1 file changed, 8 insertions(+), 29 deletions(-) diff --git a/src/index.js b/src/index.js index 5046b75..b3028f1 100644 --- a/src/index.js +++ b/src/index.js @@ -54,8 +54,7 @@ export class Source { const preEl = makeElement('pre') const codeEl = makeElement('code') - const notebook = cell.worksheet.notebook - const m = notebook.metadata + const m = cell.notebook.metadata const lang = (m.language_info && m.language_info.name) || (m.kernelspec && m.kernelspec.language) codeEl.setAttribute('data-language', lang) @@ -227,9 +226,9 @@ export class Cell { }, } - constructor (raw, worksheet) { + constructor (raw, notebook) { this.raw = raw - this.worksheet = worksheet + this.notebook = notebook this.type = raw.cell_type if (this.type === 'code') { @@ -248,24 +247,6 @@ export class Cell { } } -export class Worksheet { - - constructor (raw, notebook) { - this.raw = raw - this.notebook = notebook - this.cells = raw.cells.map(cell => new Cell(cell, this)) - } - - render () { - const el = makeElement('div', ['worksheet']) - - for (const cell of this.cells) { - el.appendChild(cell.render()) - } - return el - } -} - export class Notebook { constructor (raw) { @@ -274,17 +255,15 @@ export class Notebook { const meta = this.metadata = raw.metadata || {} this.title = meta.title || meta.name - const worksheets = raw.worksheets || [{ cells: raw.cells }] - this.worksheets = worksheets.map(sheet => new Worksheet(sheet, this)) - - this.sheet = this.worksheets[0] + this.cells = raw.cells.map(cell => new Cell(cell, this)) } render () { - const el = makeElement('div', ['notebook']) + // Class "worksheet" is for backward compatibility with notebook.js. + const el = makeElement('div', ['notebook', 'worksheet']) - for (const sheet of this.worksheets) { - el.appendChild(sheet.render()) + for (const cell of this.cells) { + el.appendChild(cell.render()) } return el } From 0977d6b0978be11dcad4003161edf438bf22ef6b Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 7 Sep 2019 15:21:09 +0200 Subject: [PATCH 021/266] Add types for nbformat v4.3 --- src/nbformat.ts | 258 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 258 insertions(+) create mode 100644 src/nbformat.ts diff --git a/src/nbformat.ts b/src/nbformat.ts new file mode 100644 index 0000000..2101414 --- /dev/null +++ b/src/nbformat.ts @@ -0,0 +1,258 @@ +/* eslint-disable @typescript-eslint/consistent-type-definitions */ + +// These types are based on https://github.com/jupyter/nbformat/blob/b6b5a18e5a40d37f1cc0f71f65108288bdec9bb7/nbformat/v4/nbformat.v4.schema.json. +// This file was originally generated using json-schema-to-typescript 7.0.0 and +// then manually polished. + +/** Jupyter Notebook v4.3. */ +export interface Notebook { + + /** Notebook root-level metadata. */ + metadata: NotebookMetadata, + + /** Notebook format (minor number). Incremented for backward compatible changes to the notebook format. */ + nbformat_minor: number, + + /** Notebook format (major number). Incremented between backwards incompatible changes to the notebook format. */ + nbformat: '4', + + /** Array of cells of the current notebook. */ + cells: Cell[], +} + +/** Notebook root-level metadata. */ +export interface NotebookMetadata { + + /** Kernel information. */ + kernelspec?: KernelSpec, + + /** Kernel information. */ + language_info?: LanguageInfo, + + /** Original notebook format (major number) before converting the notebook between versions. This should never be written to a file. */ + orig_nbformat?: number, + + /** The title of the notebook document */ + title?: string, + + /** The author(s) of the notebook document */ + authors?: any[], + + /** Extra properties. */ + [key: string]: any, +} + +/** Kernel information. */ +export interface KernelSpec { + + /** Name of the kernel specification. */ + name: string, + + /** Name to display in UI. */ + display_name: string, + + /** Extra properties. */ + [key: string]: any, +} + +/** Kernel information. */ +export interface LanguageInfo { + + /** The programming language which this kernel runs. */ + name: string, + + /** The codemirror mode to use for code in this language. */ + codemirror_mode?: string | { [k: string]: any }, + + /** The file extension for files in this language. */ + file_extension?: string, + + /** The mimetype corresponding to files in this language. */ + mimetype?: string, + + /** The pygments lexer to use for code in this language. */ + pygments_lexer?: string, + + /** Extra properties. */ + [key: string]: any, +} + + +// ---------------------- Input (Cell) types ----------------------- // + +export type Cell = RawCell | MarkdownCell | CodeCell + +export enum CellType { + Raw = 'raw', + Markdown = 'markdown', + Code = 'code', +} + +interface BaseCell { + + /** String identifying the type of cell. */ + cell_type: CellType, + + /** Cell-level metadata. */ + metadata: CellMetadata, + + /** Contents of the cell, represented as an array of lines. */ + source: string | string[], +} + +/** Notebook raw nbconvert cell. */ +export interface RawCell extends BaseCell { + + /** String identifying the type of cell. */ + cell_type: CellType.Raw, + + /** Cell-level metadata. */ + metadata: CellMetadata & { + /** Raw cell metadata format for nbconvert. */ + format?: string, + }, + + /** Media attachments (e.g. inline images), stored as mimebundle keyed by filename. */ + attachments?: MediaAttachments, +} + +/** Notebook markdown cell. */ +export interface MarkdownCell extends BaseCell { + + /** String identifying the type of cell. */ + cell_type: CellType.Markdown, + + /** Media attachments (e.g. inline images), stored as mimebundle keyed by filename. */ + attachments?: MediaAttachments, +} + +/** Notebook code cell. */ +export interface CodeCell extends BaseCell { + + /** String identifying the type of cell. */ + cell_type: CellType.Code, + + /** Cell-level metadata. */ + metadata: CellMetadata & { + + /** Whether the cell's output is collapsed/expanded. */ + collapsed?: boolean, + + /** Whether the cell's output is scrolled, unscrolled, or autoscrolled. */ + scrolled?: true | false | 'auto', + }, + + /** Execution, display, or stream outputs. */ + outputs: Output[], + + /** The code cell's prompt number. Will be null if the cell has not been run. */ + execution_count: number | null, +} + +export interface CellMetadata { + + /** Official Jupyter Metadata for Raw Cells */ + jupyter?: { [k: string]: any }, + + /** + * The cell's name. If present, must be a non-empty string. Cell names are expected to be unique + * across all the cells in a given notebook. This criterion cannot be checked by the json schema + * and must be established by an additional check. + */ + name?: string, + + /** The cell's tags. Tags must be unique, and must not contain commas. */ + tags?: string[], + + /** Extra properties. */ + [key: string]: any, +} + +export interface MediaAttachments { + + /** The attachment's data stored as a mimebundle. */ + [filename: string]: { + /** mimetype output (e.g. text/plain), represented as either an array of strings or a string. */ + [mediaType: string]: string | string[], + }, +} + + +// ------------------------- Output types ------------------------- // + +export type Output = ExecuteResult | DisplayData | Stream | Error + +export enum OutputType { + ExecuteResult = 'execute_result', + DisplayData = 'display_data', + Stream = 'stream', + Error = 'error', +} + +/** Result of executing a code cell. */ +export interface ExecuteResult { + + /** Type of cell output. */ + output_type: OutputType.ExecuteResult, + + /** A result's prompt number. */ + execution_count: number | null, + + /** A mime-type keyed dictionary of data */ + data: { + /** mimetype output (e.g. text/plain), represented as either an array of strings or a string. */ + [mediaType: string]: string | string[], + }, + + /** Cell output metadata. */ + metadata: { + [k: string]: any, + }, +} + +/** Data displayed as a result of code cell execution. */ +export interface DisplayData { + + /** Type of cell output. */ + output_type: OutputType.DisplayData, + + /** A mime-type keyed dictionary of data */ + data: { + /** mimetype output (e.g. text/plain), represented as either an array of strings or a string. */ + [mediaType: string]: string | string[], + }, + + /** Cell output metadata. */ + metadata: { + [k: string]: any, + }, +} + +/** Stream output from a code cell. */ +export interface Stream { + + /** Type of cell output. */ + output_type: OutputType.Stream, + + /** The name of the stream (stdout, stderr). */ + name: string, + + /** The stream's text output, represented as an array of strings. */ + text: string | string[], +} + +/** Output of an error that occurred during code cell execution. */ +export interface Error { + + /** Type of cell output. */ + output_type: OutputType.Error, + + /** The name of the error. */ + ename: string, + + /** The value, or message, of the error. */ + evalue: string, + + /** The error's traceback, represented as an array of strings. */ + traceback: string[], +} From 9b4e0ed0cf5fba114ed36921517d3163fcc8f43f Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 7 Sep 2019 15:49:02 +0200 Subject: [PATCH 022/266] Convert to TypeScript (with type errors for now) --- package.json | 2 + src/{index.js => index.ts} | 105 ++++++++++++++++++++++--------------- yarn.lock | 26 ++++++++- 3 files changed, 90 insertions(+), 43 deletions(-) rename src/{index.js => index.ts} (70%) diff --git a/package.json b/package.json index 808c025..2932591 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,8 @@ }, "devDependencies": { "@types/jest": "^24.0.18", + "@types/jsdom": "^12.2.4", + "@types/marked": "^0.6.5", "@types/node": "^10.13.0", "@typescript-eslint/eslint-plugin": "^1.13.0", "@typescript-eslint/parser": "^1.13.0", diff --git a/src/index.js b/src/index.ts similarity index 70% rename from src/index.js rename to src/index.ts index b3028f1..e90bfcb 100644 --- a/src/index.js +++ b/src/index.ts @@ -1,44 +1,60 @@ // This code is originally based on notebookjs 0.4.2 distributed under the MIT license. -import ansiUp from 'ansi_up' +import AnsiUp from 'ansi_up' import jsdom from 'jsdom' import marked from 'marked' +import * as nbf from './nbformat' + +// TODO: This is only transient type, remove later. +type Nb = { + VERSION: string, + prefix: string, + markdown: (markup: string) => string, + ansi: (text: string) => string, + highlighter: (code: string, preEl: HTMLElement, codeEl?: HTMLElement, lang?: string) => string, + renderMath: (element: HTMLElement, config: { [k: string]: any }) => void, + display: DataRenderers, + displayPriority: string[], + parse: (nbjson: nbf.Notebook) => Notebook, +} + +type DataRenderer = (data: string | string[]) => HTMLElement +type DataRenderers = { [mediaType: string]: DataRenderer } + const VERSION = '0.4.2' const doc = new jsdom.JSDOM().window.document -const ident = (x) => x +const ident = (x: T): T => x // Set up `nb` namespace -const nb = { +const nb: Nb = { prefix: 'nb-', markdown: marked, - ansi: ansiUp.ansi_to_html, + ansi: new AnsiUp().ansi_to_html, highlighter: ident, - renderMath: doc.renderMathInElement || ident, + renderMath: (doc as any).renderMathInElement || ident, VERSION, -} +} as any -function makeElement (tag, classNames) { +function makeElement (tag: string, classNames?: string[]): HTMLElement { const el = doc.createElement(tag) el.className = (classNames || []).map(cn => nb.prefix + cn).join(' ') return el } -const escapeHTML = (raw) => raw.replace(//g, '>') +const escapeHTML = (raw: string) => raw.replace(//g, '>') -function joinText (text) { - return text.join ? text.map(joinText).join('') : text +function joinText (text: string | string[]): string { + return Array.isArray(text) ? text.map(joinText).join('') : text } export class Source { - constructor (raw, cell) { - this.raw = raw - this.cell = cell + constructor (public raw: string | string[], public cell: Cell) { } - render () { + render (): HTMLElement { if (!this.raw.length) { return makeElement('div') } @@ -47,9 +63,9 @@ export class Source { const cell = this.cell if (typeof cell.executionCount === 'number') { - holder.setAttribute('data-execution-count', this.cell.executionCount) + holder.setAttribute('data-execution-count', cell.executionCount.toString()) // Only for backward compatibility with notebook.js. - holder.setAttribute('data-prompt-number', this.cell.executionCount) + holder.setAttribute('data-prompt-number', cell.executionCount.toString()) } const preEl = makeElement('pre') const codeEl = makeElement('code') @@ -70,9 +86,9 @@ export class Source { // Outputs and output-renderers -const imageCreator = (format) => (data) => { +const imageCreator = (format: string) => (data: string | string[]): HTMLElement => { const el = makeElement('img', ['image-output']) - el.src = `data:image/${format};base64,${joinText(data).replace(/\n/g, '')}` + el.setAttribute('src', `data:image/${format};base64,${joinText(data).replace(/\n/g, '')}`) return el } @@ -105,7 +121,7 @@ nb.display = { }, 'image/png': imageCreator('png'), 'image/jpeg': imageCreator('jpeg'), -} +} as DataRenderers nb.display['text/svg+xml'] = nb.display['image/svg+xml'] nb.displayPriority = [ @@ -120,7 +136,7 @@ nb.displayPriority = [ 'text/plain', ] -function renderDisplayData () { +function renderDisplayData (this: Output): HTMLElement { const format = nb.displayPriority.find(d => this.raw.data[d]) if (format && nb.display[format]) { @@ -129,7 +145,7 @@ function renderDisplayData () { return makeElement('div', ['empty-output']) } -function renderError () { +function renderError (this: Output): HTMLElement { // Class "pyerr" is for backward compatibility with notebook.js. const el = makeElement('pre', ['error', 'pyerr']) const raw = this.raw.traceback.join('\n') @@ -141,12 +157,14 @@ function renderError () { export class Output { + type: nbf.OutputType + /* eslint-disable @typescript-eslint/camelcase */ renderers = { display_data: renderDisplayData, execute_result: renderDisplayData, error: renderError, - stream: () => { + stream (this: Output) { const el = makeElement('pre', [this.raw.name]) const raw = joinText(this.raw.text) el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) @@ -155,19 +173,17 @@ export class Output { } /* eslint-enable @typescript-eslint/camelcase */ - constructor (raw, cell) { - this.raw = raw - this.cell = cell + constructor (public raw: nbf.Output, public cell: Cell) { this.type = raw.output_type } - render () { + render (): HTMLElement { const outer = makeElement('div', ['output']) if (typeof this.cell.executionCount === 'number') { - outer.setAttribute('data-execution-count', this.cell.executionCount) + outer.setAttribute('data-execution-count', this.cell.executionCount.toString()) // Only for backward compatibility with notebook.js. - outer.setAttribute('data-prompt-number', this.cell.executionCount) + outer.setAttribute('data-prompt-number', this.cell.executionCount.toString()) } const inner = this.renderers[this.type].call(this) outer.appendChild(inner) @@ -177,7 +193,7 @@ export class Output { } // Post-processing -function coalesceStreams (outputs) { +function coalesceStreams (outputs: Output[]): Output[] { if (!outputs.length) { return outputs } let last = outputs[0] @@ -196,8 +212,13 @@ function coalesceStreams (outputs) { export class Cell { + type: nbf.CellType + executionCount?: number | null + source?: Source + outputs?: Output[] + renderers = { - markdown () { + markdown (this: Cell) { const el = makeElement('div', ['cell', 'markdown-cell']) el.innerHTML = nb.markdown(joinText(this.raw.source)) @@ -210,12 +231,12 @@ export class Cell { return el }, - raw () { + raw (this: Cell) { const el = makeElement('div', ['cell', 'raw-cell']) el.innerHTML = joinText(this.raw.source) return el }, - code () { + code (this: Cell) { const el = makeElement('div', ['cell', 'code-cell']) el.appendChild(this.source.render()) @@ -226,32 +247,32 @@ export class Cell { }, } - constructor (raw, notebook) { - this.raw = raw - this.notebook = notebook + constructor (public raw: nbf.Cell, public notebook: Notebook) { this.type = raw.cell_type - if (this.type === 'code') { + if (raw.cell_type === 'code') { this.executionCount = raw.execution_count - const source = [raw.source] + const source = raw.source this.source = new Source(source, this) - const rawOutputs = (this.raw.outputs || []).map(output => new Output(output, this)) + const rawOutputs = (raw.outputs || []).map(output => new Output(output, this)) this.outputs = coalesceStreams(rawOutputs) } } - render () { + render (): HTMLElement { return this.renderers[this.type].call(this) } } export class Notebook { - constructor (raw) { - this.raw = raw + metadata: nbf.NotebookMetadata + title: string + cells: Cell[] + constructor (public raw: nbf.Notebook) { const meta = this.metadata = raw.metadata || {} this.title = meta.title || meta.name @@ -269,7 +290,7 @@ export class Notebook { } } -nb.parse = function (nbjson) { +nb.parse = function (nbjson: nbf.Notebook) { return new Notebook(nbjson) } diff --git a/yarn.lock b/yarn.lock index e2d29a5..424417a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -357,6 +357,15 @@ dependencies: "@types/jest-diff" "*" +"@types/jsdom@^12.2.4": + version "12.2.4" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-12.2.4.tgz#845cd4d43f95b8406d9b724ec30c03edadcd9528" + integrity sha512-q+De3S/Ri6U9uPx89YA1XuC+QIBgndIfvBaaJG0pRT8Oqa75k4Mr7G9CRZjIvlbLGIukO/31DFGFJYlQBmXf/A== + dependencies: + "@types/node" "*" + "@types/tough-cookie" "*" + parse5 "^4.0.0" + "@types/json-schema@^7.0.3": version "7.0.3" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" @@ -367,6 +376,16 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= +"@types/marked@^0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.6.5.tgz#3cf2a56ef615dad24aaf99784ef90a9eba4e29d8" + integrity sha512-6kBKf64aVfx93UJrcyEZ+OBM5nGv4RLsI6sR1Ar34bpgvGVRoyTgpxn4ZmtxOM5aDTAaaznYuYUH8bUX3Nk3YA== + +"@types/node@*": + version "12.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.5.tgz#e19436e7f8e9b4601005d73673b6dc4784ffcc2f" + integrity sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w== + "@types/node@^10.13.0": version "10.14.18" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.18.tgz#b7d45fc950e6ffd7edc685e890d13aa7b8535dce" @@ -377,6 +396,11 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== +"@types/tough-cookie@*": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.5.tgz#9da44ed75571999b65c37b60c9b2b88db54c585d" + integrity sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg== + "@types/yargs-parser@*": version "13.1.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" @@ -3185,7 +3209,7 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse5@4.0.0: +parse5@4.0.0, parse5@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== From 80099e328f8f1645ebdf6969883666a763201031 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 7 Sep 2019 17:33:21 +0200 Subject: [PATCH 023/266] Simplify creating of new element --- src/index.ts | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/src/index.ts b/src/index.ts index e90bfcb..b6351e7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -37,9 +37,12 @@ const nb: Nb = { VERSION, } as any -function makeElement (tag: string, classNames?: string[]): HTMLElement { +function makeElement (tag: string, classNames?: string[], innerHTML?: string): HTMLElement { const el = doc.createElement(tag) el.className = (classNames || []).map(cn => nb.prefix + cn).join(' ') + if (innerHTML) { + el.innerHTML = innerHTML + } return el } @@ -63,9 +66,9 @@ export class Source { const cell = this.cell if (typeof cell.executionCount === 'number') { - holder.setAttribute('data-execution-count', cell.executionCount.toString()) + holder.setAttribute('data-execution-count', this.cell.executionCount.toString()) // Only for backward compatibility with notebook.js. - holder.setAttribute('data-prompt-number', cell.executionCount.toString()) + holder.setAttribute('data-prompt-number', this.cell.executionCount.toString()) } const preEl = makeElement('pre') const codeEl = makeElement('code') @@ -94,30 +97,20 @@ const imageCreator = (format: string) => (data: string | string[]): HTMLElement nb.display = { 'text/plain': (data) => { - const el = makeElement('pre', ['text-output']) - el.innerHTML = escapeHTML(joinText(data)) - return el + return makeElement('pre', ['text-output'], escapeHTML(joinText(data))) }, 'text/html': (data) => { - const el = makeElement('div', ['html-output']) - el.innerHTML = joinText(data) - return el + return makeElement('div', ['html-output'], joinText(data)) }, 'text/markdown': (data) => nb.display['text/html'](nb.markdown(joinText(data))), 'image/svg+xml': (data) => { - const el = makeElement('div', ['svg-output']) - el.innerHTML = joinText(data) - return el + return makeElement('div', ['svg-output'], joinText(data)) }, 'text/latex': (data) => { - const el = makeElement('div', ['latex-output']) - el.innerHTML = joinText(data) - return el + return makeElement('div', ['latex-output'], joinText(data)) }, 'application/javascript': (data) => { - const el = makeElement('script') - el.innerHTML = joinText(data) - return el + return makeElement('script', [], joinText(data)) }, 'image/png': imageCreator('png'), 'image/jpeg': imageCreator('jpeg'), @@ -219,8 +212,7 @@ export class Cell { renderers = { markdown (this: Cell) { - const el = makeElement('div', ['cell', 'markdown-cell']) - el.innerHTML = nb.markdown(joinText(this.raw.source)) + const el = makeElement('div', ['cell', 'markdown-cell'], nb.markdown(joinText(this.raw.source))) nb.renderMath(el, { delimiters: [ { left: '$$', right: '$$', display: true }, @@ -232,9 +224,7 @@ export class Cell { return el }, raw (this: Cell) { - const el = makeElement('div', ['cell', 'raw-cell']) - el.innerHTML = joinText(this.raw.source) - return el + return makeElement('div', ['cell', 'raw-cell'], joinText(this.raw.source)) }, code (this: Cell) { const el = makeElement('div', ['cell', 'code-cell']) From 4e8c683ec39d300dded1cb4b628153e76e437864 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 8 Sep 2019 12:57:44 +0200 Subject: [PATCH 024/266] DRY usage of joinText() --- src/index.ts | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/src/index.ts b/src/index.ts index b6351e7..74d0f0d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -18,7 +18,7 @@ type Nb = { parse: (nbjson: nbf.Notebook) => Notebook, } -type DataRenderer = (data: string | string[]) => HTMLElement +type DataRenderer = (data: string) => HTMLElement type DataRenderers = { [mediaType: string]: DataRenderer } const VERSION = '0.4.2' @@ -96,22 +96,12 @@ const imageCreator = (format: string) => (data: string | string[]): HTMLElement } nb.display = { - 'text/plain': (data) => { - return makeElement('pre', ['text-output'], escapeHTML(joinText(data))) - }, - 'text/html': (data) => { - return makeElement('div', ['html-output'], joinText(data)) - }, - 'text/markdown': (data) => nb.display['text/html'](nb.markdown(joinText(data))), - 'image/svg+xml': (data) => { - return makeElement('div', ['svg-output'], joinText(data)) - }, - 'text/latex': (data) => { - return makeElement('div', ['latex-output'], joinText(data)) - }, - 'application/javascript': (data) => { - return makeElement('script', [], joinText(data)) - }, + 'text/plain': (data) => makeElement('pre', ['text-output'], escapeHTML(data)), + 'text/html': (data) => makeElement('div', ['html-output'], data), + 'text/markdown': (data) => nb.display['text/html'](nb.markdown(data)), + 'image/svg+xml': (data) => makeElement('div', ['svg-output'], data), + 'text/latex': (data) => makeElement('div', ['latex-output'], data), + 'application/javascript': (data) => makeElement('script', [], data), 'image/png': imageCreator('png'), 'image/jpeg': imageCreator('jpeg'), } as DataRenderers @@ -133,7 +123,7 @@ function renderDisplayData (this: Output): HTMLElement { const format = nb.displayPriority.find(d => this.raw.data[d]) if (format && nb.display[format]) { - return nb.display[format](this.raw.data[format]) + return nb.display[format](joinText(this.raw.data[format])) } return makeElement('div', ['empty-output']) } From cd4313f2980bf3eb0cad05b33e85f6635112c3ee Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 7 Sep 2019 20:05:17 +0200 Subject: [PATCH 025/266] Rewrite classes to pure functions --- src/index.ts | 276 +++++++++++++++++++++------------------------------ 1 file changed, 113 insertions(+), 163 deletions(-) diff --git a/src/index.ts b/src/index.ts index 74d0f0d..5c3ff81 100644 --- a/src/index.ts +++ b/src/index.ts @@ -15,7 +15,7 @@ type Nb = { renderMath: (element: HTMLElement, config: { [k: string]: any }) => void, display: DataRenderers, displayPriority: string[], - parse: (nbjson: nbf.Notebook) => Notebook, + render: (notebook: nbf.Notebook) => HTMLElement, } type DataRenderer = (data: string) => HTMLElement @@ -52,42 +52,6 @@ function joinText (text: string | string[]): string { return Array.isArray(text) ? text.map(joinText).join('') : text } -export class Source { - - constructor (public raw: string | string[], public cell: Cell) { - } - - render (): HTMLElement { - if (!this.raw.length) { - return makeElement('div') - } - // Class "input" is for backward compatibility with notebook.js. - const holder = makeElement('div', ['source', 'input']) - const cell = this.cell - - if (typeof cell.executionCount === 'number') { - holder.setAttribute('data-execution-count', this.cell.executionCount.toString()) - // Only for backward compatibility with notebook.js. - holder.setAttribute('data-prompt-number', this.cell.executionCount.toString()) - } - const preEl = makeElement('pre') - const codeEl = makeElement('code') - - const m = cell.notebook.metadata - const lang = (m.language_info && m.language_info.name) || (m.kernelspec && m.kernelspec.language) - - codeEl.setAttribute('data-language', lang) - codeEl.className = `lang-${lang}` - codeEl.innerHTML = nb.highlighter(escapeHTML(joinText(this.raw)), preEl, codeEl, lang) - - preEl.appendChild(codeEl) - holder.appendChild(preEl) - - return holder - } -} - - // Outputs and output-renderers const imageCreator = (format: string) => (data: string | string[]): HTMLElement => { const el = makeElement('img', ['image-output']) @@ -119,72 +83,139 @@ nb.displayPriority = [ 'text/plain', ] -function renderDisplayData (this: Output): HTMLElement { - const format = nb.displayPriority.find(d => this.raw.data[d]) + +function renderNotebook (notebook: nbf.Notebook): HTMLElement { + // Class "worksheet" is for backward compatibility with notebook.js. + const el = makeElement('div', ['notebook', 'worksheet']) + + for (const cell of notebook.cells) { + el.appendChild(renderCell(cell, notebook)) + } + return el +} +nb.render = renderNotebook + +function renderCell (cell: nbf.Cell, notebook: nbf.Notebook): HTMLElement { + switch (cell.cell_type) { + case nbf.CellType.Code: return renderCodeCell(cell, notebook) + case nbf.CellType.Markdown: return renderMarkdownCell(cell) + case nbf.CellType.Raw: return renderRawCell(cell) + } +} + +function renderMarkdownCell (cell: nbf.MarkdownCell): HTMLElement { + const el = makeElement('div', ['cell', 'markdown-cell'], nb.markdown(joinText(cell.source))) + + nb.renderMath(el, { delimiters: [ + { left: '$$', right: '$$', display: true }, + { left: '\\[', right: '\\]', display: true }, + { left: '\\(', right: '\\)', display: false }, + { left: '$', right: '$', display: false }, + ] }) + + return el +} + +function renderRawCell (cell: nbf.RawCell): HTMLElement { + return makeElement('div', ['cell', 'raw-cell'], joinText(cell.source)) +} + +function renderCodeCell (cell: nbf.CodeCell, notebook: nbf.Notebook): HTMLElement { + const outer = makeElement('div', ['cell', 'code-cell']) + outer.appendChild(renderSource(cell, notebook)) + + coalesceStreams(cell.outputs || []) + .map(output => renderOutput(output, cell)) + .forEach(el => outer.appendChild(el)) + + return outer +} + +function renderSource (cell: nbf.CodeCell, notebook: nbf.Notebook): HTMLElement { + if (!cell.source.length) { + return makeElement('div') + } + // Class "input" is for backward compatibility with notebook.js. + const holder = makeElement('div', ['source', 'input']) + + if (typeof cell.execution_count === 'number') { + holder.setAttribute('data-execution-count', cell.execution_count.toString()) + // Only for backward compatibility with notebook.js. + holder.setAttribute('data-prompt-number', cell.execution_count.toString()) + } + const m = notebook.metadata + const lang = (m.language_info && m.language_info.name) || (m.kernelspec && m.kernelspec.language) + + const preEl = makeElement('pre') + const codeEl = makeElement('code') + + codeEl.setAttribute('data-language', lang) + codeEl.className = `lang-${lang}` + codeEl.innerHTML = nb.highlighter(escapeHTML(joinText(cell.source)), preEl, codeEl, lang) + + preEl.appendChild(codeEl) + holder.appendChild(preEl) + + return holder +} + +function renderOutput (output: nbf.Output, cell: nbf.CodeCell): HTMLElement { + const outer = makeElement('div', ['output']) + + if (typeof cell.execution_count === 'number') { + outer.setAttribute('data-execution-count', cell.execution_count.toString()) + // Only for backward compatibility with notebook.js. + outer.setAttribute('data-prompt-number', cell.execution_count.toString()) + } + + const inner = (() => { + switch (output.output_type) { + case nbf.OutputType.DisplayData: // fallthrough + case nbf.OutputType.ExecuteResult: return renderData(output) + case nbf.OutputType.Stream: return renderStream(output) + case nbf.OutputType.Error: return renderError(output) + } + })() + outer.appendChild(inner) + + return outer +} + +function renderData (output: nbf.DisplayData | nbf.ExecuteResult): HTMLElement { + const format = nb.displayPriority.find(d => output.data[d]) if (format && nb.display[format]) { - return nb.display[format](joinText(this.raw.data[format])) + return nb.display[format](joinText(output.data[format])) } return makeElement('div', ['empty-output']) } -function renderError (this: Output): HTMLElement { +function renderError (error: nbf.Error): HTMLElement { + const raw = error.traceback.join('\n') + // Class "pyerr" is for backward compatibility with notebook.js. const el = makeElement('pre', ['error', 'pyerr']) - const raw = this.raw.traceback.join('\n') - el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) return el } -export class Output { - - type: nbf.OutputType - - /* eslint-disable @typescript-eslint/camelcase */ - renderers = { - display_data: renderDisplayData, - execute_result: renderDisplayData, - error: renderError, - stream (this: Output) { - const el = makeElement('pre', [this.raw.name]) - const raw = joinText(this.raw.text) - el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) - return el - }, - } - /* eslint-enable @typescript-eslint/camelcase */ - - constructor (public raw: nbf.Output, public cell: Cell) { - this.type = raw.output_type - } - - render (): HTMLElement { - const outer = makeElement('div', ['output']) - - if (typeof this.cell.executionCount === 'number') { - outer.setAttribute('data-execution-count', this.cell.executionCount.toString()) - // Only for backward compatibility with notebook.js. - outer.setAttribute('data-prompt-number', this.cell.executionCount.toString()) - } - const inner = this.renderers[this.type].call(this) - outer.appendChild(inner) - - return outer - } +function renderStream (stream: nbf.Stream): HTMLElement { + const el = makeElement('pre', [stream.name]) + const raw = joinText(stream.text) + el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) + return el } -// Post-processing -function coalesceStreams (outputs: Output[]): Output[] { +function coalesceStreams (outputs: nbf.Output[]): nbf.Output[] { if (!outputs.length) { return outputs } let last = outputs[0] const newOutputs = [last] for (const output of outputs.slice(1)) { - if (output.raw.output_type === 'stream' && last.raw.output_type === 'stream' && output.raw.name === last.raw.name) { - last.raw.text = last.raw.text.concat(output.raw.text) + if (output.output_type === 'stream' && last.output_type === 'stream' && output.name === last.name) { + last.text = last.text.concat(...output.text) } else { newOutputs.push(output) last = output @@ -193,85 +224,4 @@ function coalesceStreams (outputs: Output[]): Output[] { return newOutputs } -export class Cell { - - type: nbf.CellType - executionCount?: number | null - source?: Source - outputs?: Output[] - - renderers = { - markdown (this: Cell) { - const el = makeElement('div', ['cell', 'markdown-cell'], nb.markdown(joinText(this.raw.source))) - - nb.renderMath(el, { delimiters: [ - { left: '$$', right: '$$', display: true }, - { left: '\\[', right: '\\]', display: true }, - { left: '\\(', right: '\\)', display: false }, - { left: '$', right: '$', display: false }, - ] }) - - return el - }, - raw (this: Cell) { - return makeElement('div', ['cell', 'raw-cell'], joinText(this.raw.source)) - }, - code (this: Cell) { - const el = makeElement('div', ['cell', 'code-cell']) - el.appendChild(this.source.render()) - - for (const output of this.outputs) { - el.appendChild(output.render()) - } - return el - }, - } - - constructor (public raw: nbf.Cell, public notebook: Notebook) { - this.type = raw.cell_type - - if (raw.cell_type === 'code') { - this.executionCount = raw.execution_count - - const source = raw.source - this.source = new Source(source, this) - - const rawOutputs = (raw.outputs || []).map(output => new Output(output, this)) - this.outputs = coalesceStreams(rawOutputs) - } - } - - render (): HTMLElement { - return this.renderers[this.type].call(this) - } -} - -export class Notebook { - - metadata: nbf.NotebookMetadata - title: string - cells: Cell[] - - constructor (public raw: nbf.Notebook) { - const meta = this.metadata = raw.metadata || {} - this.title = meta.title || meta.name - - this.cells = raw.cells.map(cell => new Cell(cell, this)) - } - - render () { - // Class "worksheet" is for backward compatibility with notebook.js. - const el = makeElement('div', ['notebook', 'worksheet']) - - for (const cell of this.cells) { - el.appendChild(cell.render()) - } - return el - } -} - -nb.parse = function (nbjson: nbf.Notebook) { - return new Notebook(nbjson) -} - export default nb From aab1c75272171541c2833876d045977af262da68 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 9 Sep 2019 12:08:14 +0200 Subject: [PATCH 026/266] Import nbformat types without namespace --- src/index.ts | 54 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/src/index.ts b/src/index.ts index 5c3ff81..48a1c53 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,7 +3,21 @@ import AnsiUp from 'ansi_up' import jsdom from 'jsdom' import marked from 'marked' -import * as nbf from './nbformat' +import { + Cell, + CellType, + CodeCell, + DisplayData, + Error as NbError, + ExecuteResult, + MarkdownCell, + Notebook, + Output, + OutputType, + RawCell, + Stream as NbStream, +} from './nbformat' + // TODO: This is only transient type, remove later. type Nb = { @@ -15,7 +29,7 @@ type Nb = { renderMath: (element: HTMLElement, config: { [k: string]: any }) => void, display: DataRenderers, displayPriority: string[], - render: (notebook: nbf.Notebook) => HTMLElement, + render: (notebook: Notebook) => HTMLElement, } type DataRenderer = (data: string) => HTMLElement @@ -84,7 +98,7 @@ nb.displayPriority = [ ] -function renderNotebook (notebook: nbf.Notebook): HTMLElement { +function renderNotebook (notebook: Notebook): HTMLElement { // Class "worksheet" is for backward compatibility with notebook.js. const el = makeElement('div', ['notebook', 'worksheet']) @@ -95,15 +109,15 @@ function renderNotebook (notebook: nbf.Notebook): HTMLElement { } nb.render = renderNotebook -function renderCell (cell: nbf.Cell, notebook: nbf.Notebook): HTMLElement { +function renderCell (cell: Cell, notebook: Notebook): HTMLElement { switch (cell.cell_type) { - case nbf.CellType.Code: return renderCodeCell(cell, notebook) - case nbf.CellType.Markdown: return renderMarkdownCell(cell) - case nbf.CellType.Raw: return renderRawCell(cell) + case CellType.Code: return renderCodeCell(cell, notebook) + case CellType.Markdown: return renderMarkdownCell(cell) + case CellType.Raw: return renderRawCell(cell) } } -function renderMarkdownCell (cell: nbf.MarkdownCell): HTMLElement { +function renderMarkdownCell (cell: MarkdownCell): HTMLElement { const el = makeElement('div', ['cell', 'markdown-cell'], nb.markdown(joinText(cell.source))) nb.renderMath(el, { delimiters: [ @@ -116,11 +130,11 @@ function renderMarkdownCell (cell: nbf.MarkdownCell): HTMLElement { return el } -function renderRawCell (cell: nbf.RawCell): HTMLElement { +function renderRawCell (cell: RawCell): HTMLElement { return makeElement('div', ['cell', 'raw-cell'], joinText(cell.source)) } -function renderCodeCell (cell: nbf.CodeCell, notebook: nbf.Notebook): HTMLElement { +function renderCodeCell (cell: CodeCell, notebook: Notebook): HTMLElement { const outer = makeElement('div', ['cell', 'code-cell']) outer.appendChild(renderSource(cell, notebook)) @@ -131,7 +145,7 @@ function renderCodeCell (cell: nbf.CodeCell, notebook: nbf.Notebook): HTMLElemen return outer } -function renderSource (cell: nbf.CodeCell, notebook: nbf.Notebook): HTMLElement { +function renderSource (cell: CodeCell, notebook: Notebook): HTMLElement { if (!cell.source.length) { return makeElement('div') } @@ -159,7 +173,7 @@ function renderSource (cell: nbf.CodeCell, notebook: nbf.Notebook): HTMLElement return holder } -function renderOutput (output: nbf.Output, cell: nbf.CodeCell): HTMLElement { +function renderOutput (output: Output, cell: CodeCell): HTMLElement { const outer = makeElement('div', ['output']) if (typeof cell.execution_count === 'number') { @@ -170,10 +184,10 @@ function renderOutput (output: nbf.Output, cell: nbf.CodeCell): HTMLElement { const inner = (() => { switch (output.output_type) { - case nbf.OutputType.DisplayData: // fallthrough - case nbf.OutputType.ExecuteResult: return renderData(output) - case nbf.OutputType.Stream: return renderStream(output) - case nbf.OutputType.Error: return renderError(output) + case OutputType.DisplayData: // fallthrough + case OutputType.ExecuteResult: return renderData(output) + case OutputType.Stream: return renderStream(output) + case OutputType.Error: return renderError(output) } })() outer.appendChild(inner) @@ -181,7 +195,7 @@ function renderOutput (output: nbf.Output, cell: nbf.CodeCell): HTMLElement { return outer } -function renderData (output: nbf.DisplayData | nbf.ExecuteResult): HTMLElement { +function renderData (output: DisplayData | ExecuteResult): HTMLElement { const format = nb.displayPriority.find(d => output.data[d]) if (format && nb.display[format]) { @@ -190,7 +204,7 @@ function renderData (output: nbf.DisplayData | nbf.ExecuteResult): HTMLElement { return makeElement('div', ['empty-output']) } -function renderError (error: nbf.Error): HTMLElement { +function renderError (error: NbError): HTMLElement { const raw = error.traceback.join('\n') // Class "pyerr" is for backward compatibility with notebook.js. @@ -200,14 +214,14 @@ function renderError (error: nbf.Error): HTMLElement { return el } -function renderStream (stream: nbf.Stream): HTMLElement { +function renderStream (stream: NbStream): HTMLElement { const el = makeElement('pre', [stream.name]) const raw = joinText(stream.text) el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) return el } -function coalesceStreams (outputs: nbf.Output[]): nbf.Output[] { +function coalesceStreams (outputs: Output[]): Output[] { if (!outputs.length) { return outputs } let last = outputs[0] From 2668ccd23d88f8788cebf10dc383fa88666b89f9 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 9 Sep 2019 14:49:46 +0200 Subject: [PATCH 027/266] Don't import marked and ansi_up, let user provide them And move them from dependencies to devDependencies and peerDependencies. --- src/index.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index 48a1c53..120bf5c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,5 @@ // This code is originally based on notebookjs 0.4.2 distributed under the MIT license. -import AnsiUp from 'ansi_up' import jsdom from 'jsdom' -import marked from 'marked' import { Cell, @@ -44,8 +42,8 @@ const ident = (x: T): T => x // Set up `nb` namespace const nb: Nb = { prefix: 'nb-', - markdown: marked, - ansi: new AnsiUp().ansi_to_html, + markdown: ident, + ansi: ident, highlighter: ident, renderMath: (doc as any).renderMathInElement || ident, VERSION, From a3ba8bb60b10d44d05ccd119f9de3c1a9866a66f Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 9 Sep 2019 22:11:37 +0200 Subject: [PATCH 028/266] Replace bloated jsdom with nodom --- package.json | 5 +- src/index.ts | 4 +- types/nodom/index.d.ts | 7 ++ types/nodom/lib/attributes.d.ts | 1 + types/nodom/lib/classlist.d.ts | 13 ++++ types/nodom/lib/dataset.d.ts | 1 + types/nodom/lib/document.d.ts | 31 ++++++++ types/nodom/lib/element.d.ts | 56 ++++++++++++++ types/nodom/lib/navigator.d.ts | 3 + types/nodom/lib/node.d.ts | 10 +++ types/nodom/lib/render.d.ts | 6 ++ types/nodom/lib/style.d.ts | 9 +++ types/nodom/lib/textnode.d.ts | 11 +++ yarn.lock | 129 +++++--------------------------- 14 files changed, 170 insertions(+), 116 deletions(-) create mode 100644 types/nodom/index.d.ts create mode 100644 types/nodom/lib/attributes.d.ts create mode 100644 types/nodom/lib/classlist.d.ts create mode 100644 types/nodom/lib/dataset.d.ts create mode 100644 types/nodom/lib/document.d.ts create mode 100644 types/nodom/lib/element.d.ts create mode 100644 types/nodom/lib/navigator.d.ts create mode 100644 types/nodom/lib/node.d.ts create mode 100644 types/nodom/lib/render.d.ts create mode 100644 types/nodom/lib/style.d.ts create mode 100644 types/nodom/lib/textnode.d.ts diff --git a/package.json b/package.json index 2932591..dfdf439 100644 --- a/package.json +++ b/package.json @@ -33,12 +33,11 @@ }, "dependencies": { "ansi_up": "^4.0.4", - "jsdom": "^15.1.1", - "marked": "^0.7.0" + "marked": "^0.7.0", + "nodom": "^2.2.1" }, "devDependencies": { "@types/jest": "^24.0.18", - "@types/jsdom": "^12.2.4", "@types/marked": "^0.6.5", "@types/node": "^10.13.0", "@typescript-eslint/eslint-plugin": "^1.13.0", diff --git a/src/index.ts b/src/index.ts index 120bf5c..a26f994 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,5 @@ // This code is originally based on notebookjs 0.4.2 distributed under the MIT license. -import jsdom from 'jsdom' +import { Document, HTMLElement } from 'nodom' import { Cell, @@ -35,7 +35,7 @@ type DataRenderers = { [mediaType: string]: DataRenderer } const VERSION = '0.4.2' -const doc = new jsdom.JSDOM().window.document +const doc = new Document() const ident = (x: T): T => x diff --git a/types/nodom/index.d.ts b/types/nodom/index.d.ts new file mode 100644 index 0000000..d7a828f --- /dev/null +++ b/types/nodom/index.d.ts @@ -0,0 +1,7 @@ +// TODO: Remove after https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38248 is released. + +export * from './lib/document'; +export * from './lib/element'; +export * from './lib/node'; +export * from './lib/render'; +export * from './lib/textnode'; diff --git a/types/nodom/lib/attributes.d.ts b/types/nodom/lib/attributes.d.ts new file mode 100644 index 0000000..75fa6f3 --- /dev/null +++ b/types/nodom/lib/attributes.d.ts @@ -0,0 +1 @@ +export class Attributes {} diff --git a/types/nodom/lib/classlist.d.ts b/types/nodom/lib/classlist.d.ts new file mode 100644 index 0000000..afc6d87 --- /dev/null +++ b/types/nodom/lib/classlist.d.ts @@ -0,0 +1,13 @@ +import { HTMLElement } from './element'; + +export class ClassList extends Array { + constructor(element: HTMLElement); + + add(className: string): void; + + contains(className: string): boolean; + + remove(className: string): void; + + reset(className?: string): void; +} diff --git a/types/nodom/lib/dataset.d.ts b/types/nodom/lib/dataset.d.ts new file mode 100644 index 0000000..207c8c6 --- /dev/null +++ b/types/nodom/lib/dataset.d.ts @@ -0,0 +1 @@ +export class Dataset {} diff --git a/types/nodom/lib/document.d.ts b/types/nodom/lib/document.d.ts new file mode 100644 index 0000000..6b50347 --- /dev/null +++ b/types/nodom/lib/document.d.ts @@ -0,0 +1,31 @@ +import { HTMLElement } from './element'; +import { TextNode } from './textnode'; + +export class Document { + readonly nodeType: number; + body: HTMLElement; + documentElement: HTMLElement; + head: HTMLElement; + implementation: { + createHTMLDocument(textContent: string): Document; + hasFeature(feature: string, version?: string): boolean; + }; + + createElement(tagName: string): HTMLElement; + + createElementNS(ns: string | null, tagName: string): HTMLElement; + + createDocumentFragment(): HTMLElement; + + createTextNode(text: string): TextNode; + + getElementsByTagName(tagName: string): HTMLElement[]; + + getElementsByClassName(classNames: string): HTMLElement[]; + + getElementById(id: string): HTMLElement | null; + + querySelector(selectors: string): HTMLElement | null; + + querySelectorAll(selectors: string): HTMLElement[]; +} diff --git a/types/nodom/lib/element.d.ts b/types/nodom/lib/element.d.ts new file mode 100644 index 0000000..f43783e --- /dev/null +++ b/types/nodom/lib/element.d.ts @@ -0,0 +1,56 @@ +import { Attributes } from './attributes'; +import { ClassList } from './classlist'; +import { Dataset } from './dataset'; +import { Node } from './node'; +import { CSSStyleDeclaration } from './style'; + +export class HTMLElement extends Node { + attributes: Attributes; + readonly classList: ClassList; + className: string; + dataset: Dataset; + innerHTML: string; + readonly isVoidEl: boolean; + readonly nextSibling: Node | undefined; + nodeType: number; + readonly outerHTML: string; + style: CSSStyleDeclaration; + tagName: string; + textContent: string; + + constructor(options: { [key: string]: string }); + + appendChild(child: T): T | undefined; + + insertBefore(child: T, before: Node | null): T | undefined; + + removeChild(child: Node): void; + + replaceChild(child: Node, replace: Node): void; + + getAttribute(attr: string): string | undefined; + + setAttribute(attr: string, value: string): void; + + getElementsByClassName(classNames: string): HTMLElement[]; + + getElementsByTagName(tagName: string): HTMLElement[]; + + matches(query: string): boolean; + + querySelector(selectors: string): HTMLElement | null; + + querySelectorAll(selectors: string): HTMLElement[]; + + addEventListener(): void; + + removeEventListener(): void; + + blur(): void; + + click(): void; + + focus(): void; + + render(inner?: boolean): string; +} diff --git a/types/nodom/lib/navigator.d.ts b/types/nodom/lib/navigator.d.ts new file mode 100644 index 0000000..cdec07d --- /dev/null +++ b/types/nodom/lib/navigator.d.ts @@ -0,0 +1,3 @@ +export class Navigator { + userAgent: string; +} diff --git a/types/nodom/lib/node.d.ts b/types/nodom/lib/node.d.ts new file mode 100644 index 0000000..52f52f0 --- /dev/null +++ b/types/nodom/lib/node.d.ts @@ -0,0 +1,10 @@ +export class Node { + childNodes: Node[]; + readonly children: Node[]; + readonly firstChild: Node | undefined; + readonly lastChild: Node | undefined; + readonly nodeName: string; + readonly nodeValue: any; + + cloneNode(deep?: boolean): Node; +} diff --git a/types/nodom/lib/render.d.ts b/types/nodom/lib/render.d.ts new file mode 100644 index 0000000..69b5dda --- /dev/null +++ b/types/nodom/lib/render.d.ts @@ -0,0 +1,6 @@ +import { HTMLElement } from './element'; + +export function render( + view: HTMLElement | { el: HTMLElement }, + inner: boolean, +): string; diff --git a/types/nodom/lib/style.d.ts b/types/nodom/lib/style.d.ts new file mode 100644 index 0000000..2b5f9c7 --- /dev/null +++ b/types/nodom/lib/style.d.ts @@ -0,0 +1,9 @@ +export class CSSStyleDeclaration { + cssText: string; + + setProperty(propertyName: string, value: string, priority?: string): void; + + valueOf(): this; + + setValue(style: string): void; +} diff --git a/types/nodom/lib/textnode.d.ts b/types/nodom/lib/textnode.d.ts new file mode 100644 index 0000000..658a24e --- /dev/null +++ b/types/nodom/lib/textnode.d.ts @@ -0,0 +1,11 @@ +import { Node } from './node'; + +export class TextNode extends Node { + readonly nodeType: number; + readonly nodeValue: string; + textContent: string; + + constructor(text: string); + + render(): string; +} diff --git a/yarn.lock b/yarn.lock index 424417a..e6ca284 100644 --- a/yarn.lock +++ b/yarn.lock @@ -357,15 +357,6 @@ dependencies: "@types/jest-diff" "*" -"@types/jsdom@^12.2.4": - version "12.2.4" - resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-12.2.4.tgz#845cd4d43f95b8406d9b724ec30c03edadcd9528" - integrity sha512-q+De3S/Ri6U9uPx89YA1XuC+QIBgndIfvBaaJG0pRT8Oqa75k4Mr7G9CRZjIvlbLGIukO/31DFGFJYlQBmXf/A== - dependencies: - "@types/node" "*" - "@types/tough-cookie" "*" - parse5 "^4.0.0" - "@types/json-schema@^7.0.3": version "7.0.3" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" @@ -381,11 +372,6 @@ resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.6.5.tgz#3cf2a56ef615dad24aaf99784ef90a9eba4e29d8" integrity sha512-6kBKf64aVfx93UJrcyEZ+OBM5nGv4RLsI6sR1Ar34bpgvGVRoyTgpxn4ZmtxOM5aDTAaaznYuYUH8bUX3Nk3YA== -"@types/node@*": - version "12.7.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.5.tgz#e19436e7f8e9b4601005d73673b6dc4784ffcc2f" - integrity sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w== - "@types/node@^10.13.0": version "10.14.18" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.18.tgz#b7d45fc950e6ffd7edc685e890d13aa7b8535dce" @@ -396,11 +382,6 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== -"@types/tough-cookie@*": - version "2.3.5" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.5.tgz#9da44ed75571999b65c37b60c9b2b88db54c585d" - integrity sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg== - "@types/yargs-parser@*": version "13.1.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" @@ -461,7 +442,7 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -acorn-globals@^4.1.0, acorn-globals@^4.3.2: +acorn-globals@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== @@ -484,7 +465,7 @@ acorn@^5.5.3: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -acorn@^6.0.1, acorn@^6.1.1: +acorn@^6.0.1: version "6.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== @@ -624,7 +605,7 @@ 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, async-limiter@~1.0.0: +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== @@ -954,12 +935,12 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.6: +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^1.0.0, cssstyle@^1.2.2: +cssstyle@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== @@ -973,7 +954,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^1.0.0, data-urls@^1.1.0: +data-urls@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== @@ -1161,7 +1142,7 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@^1.11.1, escodegen@^1.9.1: +escodegen@^1.9.1: version "1.12.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== @@ -1862,11 +1843,6 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - 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" @@ -2510,38 +2486,6 @@ jsdom@^11.5.1: ws "^5.2.0" xml-name-validator "^3.0.0" -jsdom@^15.1.1: - version "15.1.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.1.1.tgz#21ed01f81d95ef4327f3e564662aef5e65881252" - integrity sha512-cQZRBB33arrDAeCrAEWn1U3SvrvC8XysBua9Oqg1yWrsY/gYcusloJC3RZJXuY5eehSCmws8f2YeliCqGSkrtQ== - dependencies: - abab "^2.0.0" - acorn "^6.1.1" - acorn-globals "^4.3.2" - array-equal "^1.0.0" - cssom "^0.3.6" - cssstyle "^1.2.2" - data-urls "^1.1.0" - domexception "^1.0.1" - escodegen "^1.11.1" - html-encoding-sniffer "^1.0.2" - nwsapi "^2.1.4" - parse5 "5.1.0" - pn "^1.1.0" - request "^2.88.0" - request-promise-native "^1.0.7" - saxes "^3.1.9" - symbol-tree "^3.2.2" - tough-cookie "^3.0.1" - w3c-hr-time "^1.0.1" - w3c-xmlserializer "^1.1.2" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^7.0.0" - ws "^7.0.0" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -2939,6 +2883,11 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" +nodom@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/nodom/-/nodom-2.2.1.tgz#66310685e6d5ac0215d6f3c7c8a6b3bb5c5fff6f" + integrity sha512-zRxqWngbCycY7jYTxCp4RSwqnwNd20Ioq6Jyotel50XyW1hD0pWosUDmXtJNRZw0Ozl531DOyfBAum41e7eGfg== + nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -3014,7 +2963,7 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -nwsapi@^2.0.7, nwsapi@^2.1.4: +nwsapi@^2.0.7: version "2.1.4" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f" integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw== @@ -3209,16 +3158,11 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse5@4.0.0, parse5@^4.0.0: +parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== -parse5@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== - pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -3479,7 +3423,7 @@ request-promise-core@1.1.2: dependencies: lodash "^4.17.11" -request-promise-native@^1.0.5, request-promise-native@^1.0.7: +request-promise-native@^1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== @@ -3488,7 +3432,7 @@ request-promise-native@^1.0.5, request-promise-native@^1.0.7: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.87.0, request@^2.88.0: +request@^2.87.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -3646,13 +3590,6 @@ sax@^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" - integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== - dependencies: - xmlchars "^2.1.1" - "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -4088,15 +4025,6 @@ tough-cookie@^2.3.3, tough-cookie@^2.3.4: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== - dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" - punycode "^2.1.1" - tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" @@ -4280,15 +4208,6 @@ w3c-hr-time@^1.0.1: dependencies: browser-process-hrtime "^0.1.2" -w3c-xmlserializer@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" - integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== - dependencies: - domexception "^1.0.1" - webidl-conversions "^4.0.2" - xml-name-validator "^3.0.0" - walker@^1.0.7, walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -4301,14 +4220,14 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: iconv-lite "0.4.24" -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: +whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== @@ -4397,23 +4316,11 @@ ws@^5.2.0: dependencies: async-limiter "~1.0.0" -ws@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.1.2.tgz#c672d1629de8bb27a9699eb599be47aeeedd8f73" - integrity sha512-gftXq3XI81cJCgkUiAVixA0raD9IVmXqsylCrjRygw4+UOOGzPoxnQ6r/CnVL9i+mDncJo94tSkyrtuuQVBmrg== - dependencies: - async-limiter "^1.0.0" - xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xmlchars@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" From f332972ec0a6e212ae7a74b179814c6bb9921dfa Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 10 Sep 2019 19:24:47 +0200 Subject: [PATCH 029/266] Minimize calling DOM methods in render functions --- src/index.ts | 111 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 66 insertions(+), 45 deletions(-) diff --git a/src/index.ts b/src/index.ts index a26f994..a9549c1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -30,6 +30,8 @@ type Nb = { render: (notebook: Notebook) => HTMLElement, } +type Attributes = { [k: string]: string } + type DataRenderer = (data: string) => HTMLElement type DataRenderers = { [mediaType: string]: DataRenderer } @@ -49,11 +51,35 @@ const nb: Nb = { VERSION, } as any -function makeElement (tag: string, classNames?: string[], innerHTML?: string): HTMLElement { +function makeElement (tag: string, classes?: string[], children?: HTMLElement[] | string): HTMLElement +function makeElement (tag: string, attrs?: Attributes, children?: HTMLElement[] | string): HTMLElement +function makeElement ( + tag: string, + classesOrAttrs?: string[] | Attributes, + childrenOrHTML?: HTMLElement[] | string, +): HTMLElement { + + const prefixClassName = (name: string) => name.startsWith('lang-') ? name : nb.prefix + name + const el = doc.createElement(tag) - el.className = (classNames || []).map(cn => nb.prefix + cn).join(' ') - if (innerHTML) { - el.innerHTML = innerHTML + + if (Array.isArray(classesOrAttrs)) { + el.className = classesOrAttrs.map(prefixClassName).join(' ') + + } else if (classesOrAttrs) { + for (const [key, val] of Object.entries(classesOrAttrs)) { + if (key === 'class') { + el.className = val.split(' ').map(prefixClassName).join(' ') + } else { + el.setAttribute(key, val) + } + } + } + if (Array.isArray(childrenOrHTML)) { + childrenOrHTML.forEach(e => el.appendChild(e)) + + } else if (childrenOrHTML) { + el.innerHTML = childrenOrHTML } return el } @@ -66,9 +92,10 @@ function joinText (text: string | string[]): string { // Outputs and output-renderers const imageCreator = (format: string) => (data: string | string[]): HTMLElement => { - const el = makeElement('img', ['image-output']) - el.setAttribute('src', `data:image/${format};base64,${joinText(data).replace(/\n/g, '')}`) - return el + return makeElement('img', { + class: 'image-output', + src: `data:image/${format};base64,${joinText(data).replace(/\n/g, '')}`, + }) } nb.display = { @@ -96,14 +123,19 @@ nb.displayPriority = [ ] -function renderNotebook (notebook: Notebook): HTMLElement { - // Class "worksheet" is for backward compatibility with notebook.js. - const el = makeElement('div', ['notebook', 'worksheet']) +function executionCountAttrs ({ execution_count: count }: CodeCell): Attributes | undefined { + return count ? { + 'data-execution-count': String(count), + // Only for backward compatibility with notebook.js. + 'data-prompt-number': String(count), + } : undefined +} - for (const cell of notebook.cells) { - el.appendChild(renderCell(cell, notebook)) - } - return el +function renderNotebook (notebook: Notebook): HTMLElement { + const children = notebook.cells.map(cell => renderCell(cell, notebook)) + + // Class "worksheet" is for backward compatibility with notebook.js. + return makeElement('div', ['notebook', 'worksheet'], children) } nb.render = renderNotebook @@ -133,54 +165,38 @@ function renderRawCell (cell: RawCell): HTMLElement { } function renderCodeCell (cell: CodeCell, notebook: Notebook): HTMLElement { - const outer = makeElement('div', ['cell', 'code-cell']) - outer.appendChild(renderSource(cell, notebook)) - - coalesceStreams(cell.outputs || []) + const children = coalesceStreams(cell.outputs || []) .map(output => renderOutput(output, cell)) - .forEach(el => outer.appendChild(el)) - return outer + children.unshift(renderSource(cell, notebook)) + + return makeElement('div', ['cell', 'code-cell'], children) } function renderSource (cell: CodeCell, notebook: Notebook): HTMLElement { if (!cell.source.length) { return makeElement('div') } - // Class "input" is for backward compatibility with notebook.js. - const holder = makeElement('div', ['source', 'input']) - - if (typeof cell.execution_count === 'number') { - holder.setAttribute('data-execution-count', cell.execution_count.toString()) - // Only for backward compatibility with notebook.js. - holder.setAttribute('data-prompt-number', cell.execution_count.toString()) - } const m = notebook.metadata const lang = (m.language_info && m.language_info.name) || (m.kernelspec && m.kernelspec.language) const preEl = makeElement('pre') - const codeEl = makeElement('code') - codeEl.setAttribute('data-language', lang) - codeEl.className = `lang-${lang}` + const codeEl = makeElement('code', { 'classes': `lang-${lang}`, 'data-language': lang }) codeEl.innerHTML = nb.highlighter(escapeHTML(joinText(cell.source)), preEl, codeEl, lang) preEl.appendChild(codeEl) - holder.appendChild(preEl) - return holder + const attrs = { + ...executionCountAttrs(cell), + // Class "input" is for backward compatibility with notebook.js. + class: 'source input', + } + return makeElement('div', attrs, [preEl]) } function renderOutput (output: Output, cell: CodeCell): HTMLElement { - const outer = makeElement('div', ['output']) - - if (typeof cell.execution_count === 'number') { - outer.setAttribute('data-execution-count', cell.execution_count.toString()) - // Only for backward compatibility with notebook.js. - outer.setAttribute('data-prompt-number', cell.execution_count.toString()) - } - - const inner = (() => { + const innerEl = (() => { switch (output.output_type) { case OutputType.DisplayData: // fallthrough case OutputType.ExecuteResult: return renderData(output) @@ -188,9 +204,12 @@ function renderOutput (output: Output, cell: CodeCell): HTMLElement { case OutputType.Error: return renderError(output) } })() - outer.appendChild(inner) - return outer + const attrs = { + ...executionCountAttrs(cell), + class: 'output', + } + return makeElement('div', attrs, [innerEl]) } function renderData (output: DisplayData | ExecuteResult): HTMLElement { @@ -213,9 +232,11 @@ function renderError (error: NbError): HTMLElement { } function renderStream (stream: NbStream): HTMLElement { - const el = makeElement('pre', [stream.name]) const raw = joinText(stream.text) + + const el = makeElement('pre', [stream.name]) el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) + return el } From 30acfa337a99cf192109ae8737d95bd60e280cdf Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 11 Sep 2019 00:46:08 +0200 Subject: [PATCH 030/266] Don't pass elements to highlighter --- src/index.ts | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/src/index.ts b/src/index.ts index a9549c1..44ac231 100644 --- a/src/index.ts +++ b/src/index.ts @@ -23,7 +23,7 @@ type Nb = { prefix: string, markdown: (markup: string) => string, ansi: (text: string) => string, - highlighter: (code: string, preEl: HTMLElement, codeEl?: HTMLElement, lang?: string) => string, + highlighter: (code: string, lang?: string) => string, renderMath: (element: HTMLElement, config: { [k: string]: any }) => void, display: DataRenderers, displayPriority: string[], @@ -180,12 +180,9 @@ function renderSource (cell: CodeCell, notebook: Notebook): HTMLElement { const m = notebook.metadata const lang = (m.language_info && m.language_info.name) || (m.kernelspec && m.kernelspec.language) - const preEl = makeElement('pre') - - const codeEl = makeElement('code', { 'classes': `lang-${lang}`, 'data-language': lang }) - codeEl.innerHTML = nb.highlighter(escapeHTML(joinText(cell.source)), preEl, codeEl, lang) - - preEl.appendChild(codeEl) + const html = nb.highlighter(escapeHTML(joinText(cell.source)), lang) + const codeEl = makeElement('code', { 'classes': `lang-${lang}`, 'data-language': lang }, html) + const preEl = makeElement('pre', [], [codeEl]) const attrs = { ...executionCountAttrs(cell), @@ -223,21 +220,17 @@ function renderData (output: DisplayData | ExecuteResult): HTMLElement { function renderError (error: NbError): HTMLElement { const raw = error.traceback.join('\n') + const html = nb.highlighter(nb.ansi(escapeHTML(raw))) // Class "pyerr" is for backward compatibility with notebook.js. - const el = makeElement('pre', ['error', 'pyerr']) - el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) - - return el + return makeElement('pre', ['error', 'pyerr'], html) } function renderStream (stream: NbStream): HTMLElement { const raw = joinText(stream.text) + const html = nb.highlighter(nb.ansi(escapeHTML(raw))) - const el = makeElement('pre', [stream.name]) - el.innerHTML = nb.highlighter(nb.ansi(escapeHTML(raw)), el) - - return el + return makeElement('pre', [stream.name], html) } function coalesceStreams (outputs: Output[]): Output[] { From b736cb1ff27a162ec1588f8175a3a8428897edab Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 16 Sep 2019 22:09:04 +0200 Subject: [PATCH 031/266] Don't code-highlight Stream and Error outputs 1. We don't know the language of the stdout/stderr and error outputs anyway and typically it's just a text. 2. stdout/stderr output may contain ANSI escape sequences, so we convert them into HTML first. ANSI converter returns an HTML as a string; highlight.js doesn't recognize this as HTML, it simply highlights the given string as a code containing HTML. Actually I don't understand how else this should work and how it does work in the original notebookjs... --- src/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/index.ts b/src/index.ts index 44ac231..5d64e79 100644 --- a/src/index.ts +++ b/src/index.ts @@ -23,7 +23,7 @@ type Nb = { prefix: string, markdown: (markup: string) => string, ansi: (text: string) => string, - highlighter: (code: string, lang?: string) => string, + highlighter: (code: string, lang: string) => string, renderMath: (element: HTMLElement, config: { [k: string]: any }) => void, display: DataRenderers, displayPriority: string[], @@ -220,7 +220,7 @@ function renderData (output: DisplayData | ExecuteResult): HTMLElement { function renderError (error: NbError): HTMLElement { const raw = error.traceback.join('\n') - const html = nb.highlighter(nb.ansi(escapeHTML(raw))) + const html = nb.ansi(escapeHTML(raw)) // Class "pyerr" is for backward compatibility with notebook.js. return makeElement('pre', ['error', 'pyerr'], html) @@ -228,7 +228,7 @@ function renderError (error: NbError): HTMLElement { function renderStream (stream: NbStream): HTMLElement { const raw = joinText(stream.text) - const html = nb.highlighter(nb.ansi(escapeHTML(raw))) + const html = nb.ansi(escapeHTML(raw)) return makeElement('pre', [stream.name], html) } From 9d07316d71faa3762d273ac489895f422aaf96fe Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 12 Sep 2019 00:34:46 +0200 Subject: [PATCH 032/266] Move katex config out of renderer function --- src/index.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/index.ts b/src/index.ts index 5d64e79..f02cf13 100644 --- a/src/index.ts +++ b/src/index.ts @@ -41,6 +41,15 @@ const doc = new Document() const ident = (x: T): T => x +const katexConfig = { + delimiters: [ + { left: '$$', right: '$$', display: true }, + { left: '\\[', right: '\\]', display: true }, + { left: '\\(', right: '\\)', display: false }, + { left: '$', right: '$', display: false }, + ], +} + // Set up `nb` namespace const nb: Nb = { prefix: 'nb-', @@ -149,13 +158,7 @@ function renderCell (cell: Cell, notebook: Notebook): HTMLElement { function renderMarkdownCell (cell: MarkdownCell): HTMLElement { const el = makeElement('div', ['cell', 'markdown-cell'], nb.markdown(joinText(cell.source))) - - nb.renderMath(el, { delimiters: [ - { left: '$$', right: '$$', display: true }, - { left: '\\[', right: '\\]', display: true }, - { left: '\\(', right: '\\)', display: false }, - { left: '$', right: '$', display: false }, - ] }) + nb.renderMath(el, katexConfig) return el } From 34195169a6745fffe76dce328e5f0a178d31e509 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 12 Sep 2019 01:01:27 +0200 Subject: [PATCH 033/266] Sort display renderers by priority and refactor text/svg+xml alias --- src/index.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/index.ts b/src/index.ts index f02cf13..69a79b7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -108,16 +108,16 @@ const imageCreator = (format: string) => (data: string | string[]): HTMLElement } nb.display = { - 'text/plain': (data) => makeElement('pre', ['text-output'], escapeHTML(data)), - 'text/html': (data) => makeElement('div', ['html-output'], data), - 'text/markdown': (data) => nb.display['text/html'](nb.markdown(data)), - 'image/svg+xml': (data) => makeElement('div', ['svg-output'], data), - 'text/latex': (data) => makeElement('div', ['latex-output'], data), - 'application/javascript': (data) => makeElement('script', [], data), 'image/png': imageCreator('png'), 'image/jpeg': imageCreator('jpeg'), + 'image/svg+xml': (data) => makeElement('div', ['svg-output'], data), + 'text/svg+xml': (data) => nb.display['image/svg+xml'](data), + 'text/html': (data) => makeElement('div', ['html-output'], data), + 'text/markdown': (data) => nb.display['text/html'](nb.markdown(data)), + 'text/latex': (data) => makeElement('div', ['latex-output'], data), + 'application/javascript': (data) => makeElement('script', [], data), + 'text/plain': (data) => makeElement('pre', ['text-output'], escapeHTML(data)), } as DataRenderers -nb.display['text/svg+xml'] = nb.display['image/svg+xml'] nb.displayPriority = [ 'image/png', From eb55e17525fd789e8e5996157431111250b301f8 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 12 Sep 2019 17:16:43 +0200 Subject: [PATCH 034/266] Rename makeElement() to el() --- src/index.ts | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/index.ts b/src/index.ts index 69a79b7..cf7286e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -60,9 +60,9 @@ const nb: Nb = { VERSION, } as any -function makeElement (tag: string, classes?: string[], children?: HTMLElement[] | string): HTMLElement -function makeElement (tag: string, attrs?: Attributes, children?: HTMLElement[] | string): HTMLElement -function makeElement ( +function el (tag: string, classes?: string[], children?: HTMLElement[] | string): HTMLElement +function el (tag: string, attrs?: Attributes, children?: HTMLElement[] | string): HTMLElement +function el ( tag: string, classesOrAttrs?: string[] | Attributes, childrenOrHTML?: HTMLElement[] | string, @@ -101,7 +101,7 @@ function joinText (text: string | string[]): string { // Outputs and output-renderers const imageCreator = (format: string) => (data: string | string[]): HTMLElement => { - return makeElement('img', { + return el('img', { class: 'image-output', src: `data:image/${format};base64,${joinText(data).replace(/\n/g, '')}`, }) @@ -110,13 +110,13 @@ const imageCreator = (format: string) => (data: string | string[]): HTMLElement nb.display = { 'image/png': imageCreator('png'), 'image/jpeg': imageCreator('jpeg'), - 'image/svg+xml': (data) => makeElement('div', ['svg-output'], data), + 'image/svg+xml': (data) => el('div', ['svg-output'], data), 'text/svg+xml': (data) => nb.display['image/svg+xml'](data), - 'text/html': (data) => makeElement('div', ['html-output'], data), + 'text/html': (data) => el('div', ['html-output'], data), 'text/markdown': (data) => nb.display['text/html'](nb.markdown(data)), - 'text/latex': (data) => makeElement('div', ['latex-output'], data), - 'application/javascript': (data) => makeElement('script', [], data), - 'text/plain': (data) => makeElement('pre', ['text-output'], escapeHTML(data)), + 'text/latex': (data) => el('div', ['latex-output'], data), + 'application/javascript': (data) => el('script', [], data), + 'text/plain': (data) => el('pre', ['text-output'], escapeHTML(data)), } as DataRenderers nb.displayPriority = [ @@ -144,7 +144,7 @@ function renderNotebook (notebook: Notebook): HTMLElement { const children = notebook.cells.map(cell => renderCell(cell, notebook)) // Class "worksheet" is for backward compatibility with notebook.js. - return makeElement('div', ['notebook', 'worksheet'], children) + return el('div', ['notebook', 'worksheet'], children) } nb.render = renderNotebook @@ -157,14 +157,14 @@ function renderCell (cell: Cell, notebook: Notebook): HTMLElement { } function renderMarkdownCell (cell: MarkdownCell): HTMLElement { - const el = makeElement('div', ['cell', 'markdown-cell'], nb.markdown(joinText(cell.source))) - nb.renderMath(el, katexConfig) + const div = el('div', ['cell', 'markdown-cell'], nb.markdown(joinText(cell.source))) + nb.renderMath(div, katexConfig) - return el + return div } function renderRawCell (cell: RawCell): HTMLElement { - return makeElement('div', ['cell', 'raw-cell'], joinText(cell.source)) + return el('div', ['cell', 'raw-cell'], joinText(cell.source)) } function renderCodeCell (cell: CodeCell, notebook: Notebook): HTMLElement { @@ -173,26 +173,26 @@ function renderCodeCell (cell: CodeCell, notebook: Notebook): HTMLElement { children.unshift(renderSource(cell, notebook)) - return makeElement('div', ['cell', 'code-cell'], children) + return el('div', ['cell', 'code-cell'], children) } function renderSource (cell: CodeCell, notebook: Notebook): HTMLElement { if (!cell.source.length) { - return makeElement('div') + return el('div') } const m = notebook.metadata const lang = (m.language_info && m.language_info.name) || (m.kernelspec && m.kernelspec.language) const html = nb.highlighter(escapeHTML(joinText(cell.source)), lang) - const codeEl = makeElement('code', { 'classes': `lang-${lang}`, 'data-language': lang }, html) - const preEl = makeElement('pre', [], [codeEl]) + const codeEl = el('code', { 'classes': `lang-${lang}`, 'data-language': lang }, html) + const preEl = el('pre', [], [codeEl]) const attrs = { ...executionCountAttrs(cell), // Class "input" is for backward compatibility with notebook.js. class: 'source input', } - return makeElement('div', attrs, [preEl]) + return el('div', attrs, [preEl]) } function renderOutput (output: Output, cell: CodeCell): HTMLElement { @@ -209,7 +209,7 @@ function renderOutput (output: Output, cell: CodeCell): HTMLElement { ...executionCountAttrs(cell), class: 'output', } - return makeElement('div', attrs, [innerEl]) + return el('div', attrs, [innerEl]) } function renderData (output: DisplayData | ExecuteResult): HTMLElement { @@ -218,7 +218,7 @@ function renderData (output: DisplayData | ExecuteResult): HTMLElement { if (format && nb.display[format]) { return nb.display[format](joinText(output.data[format])) } - return makeElement('div', ['empty-output']) + return el('div', ['empty-output']) } function renderError (error: NbError): HTMLElement { @@ -226,14 +226,14 @@ function renderError (error: NbError): HTMLElement { const html = nb.ansi(escapeHTML(raw)) // Class "pyerr" is for backward compatibility with notebook.js. - return makeElement('pre', ['error', 'pyerr'], html) + return el('pre', ['error', 'pyerr'], html) } function renderStream (stream: NbStream): HTMLElement { const raw = joinText(stream.text) const html = nb.ansi(escapeHTML(raw)) - return makeElement('pre', [stream.name], html) + return el('pre', [stream.name], html) } function coalesceStreams (outputs: Output[]): Output[] { From 9775f6f3bd3323a7a44f0933226a4ef5ba323ecc Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 12 Sep 2019 18:54:36 +0200 Subject: [PATCH 035/266] Rename index.ts to renderer.ts --- README.adoc | 2 +- src/index.ts | 257 +----------------------------------------------- src/renderer.ts | 256 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 258 insertions(+), 257 deletions(-) create mode 100644 src/renderer.ts diff --git a/README.adoc b/README.adoc index 83e1e38..d8a1afe 100644 --- a/README.adoc +++ b/README.adoc @@ -69,7 +69,7 @@ If you use Visual Studio Code, you should install the following extensions: == Credits -* This project is originally based on https://github.com/jsvine/notebookjs[notebookjs] 0.4.2 developed by https://github.com/jsvine[Jeremy Singer-Vine] and distributed under the http://opensource.org/licenses/MIT/[MIT License]. +* The renderer module is originally based on https://github.com/jsvine/notebookjs[notebookjs] 0.4.2 developed by https://github.com/jsvine[Jeremy Singer-Vine] and distributed under the http://opensource.org/licenses/MIT/[MIT License]. == License diff --git a/src/index.ts b/src/index.ts index cf7286e..6ca21c7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,256 +1 @@ -// This code is originally based on notebookjs 0.4.2 distributed under the MIT license. -import { Document, HTMLElement } from 'nodom' - -import { - Cell, - CellType, - CodeCell, - DisplayData, - Error as NbError, - ExecuteResult, - MarkdownCell, - Notebook, - Output, - OutputType, - RawCell, - Stream as NbStream, -} from './nbformat' - - -// TODO: This is only transient type, remove later. -type Nb = { - VERSION: string, - prefix: string, - markdown: (markup: string) => string, - ansi: (text: string) => string, - highlighter: (code: string, lang: string) => string, - renderMath: (element: HTMLElement, config: { [k: string]: any }) => void, - display: DataRenderers, - displayPriority: string[], - render: (notebook: Notebook) => HTMLElement, -} - -type Attributes = { [k: string]: string } - -type DataRenderer = (data: string) => HTMLElement -type DataRenderers = { [mediaType: string]: DataRenderer } - -const VERSION = '0.4.2' - -const doc = new Document() - -const ident = (x: T): T => x - -const katexConfig = { - delimiters: [ - { left: '$$', right: '$$', display: true }, - { left: '\\[', right: '\\]', display: true }, - { left: '\\(', right: '\\)', display: false }, - { left: '$', right: '$', display: false }, - ], -} - -// Set up `nb` namespace -const nb: Nb = { - prefix: 'nb-', - markdown: ident, - ansi: ident, - highlighter: ident, - renderMath: (doc as any).renderMathInElement || ident, - VERSION, -} as any - -function el (tag: string, classes?: string[], children?: HTMLElement[] | string): HTMLElement -function el (tag: string, attrs?: Attributes, children?: HTMLElement[] | string): HTMLElement -function el ( - tag: string, - classesOrAttrs?: string[] | Attributes, - childrenOrHTML?: HTMLElement[] | string, -): HTMLElement { - - const prefixClassName = (name: string) => name.startsWith('lang-') ? name : nb.prefix + name - - const el = doc.createElement(tag) - - if (Array.isArray(classesOrAttrs)) { - el.className = classesOrAttrs.map(prefixClassName).join(' ') - - } else if (classesOrAttrs) { - for (const [key, val] of Object.entries(classesOrAttrs)) { - if (key === 'class') { - el.className = val.split(' ').map(prefixClassName).join(' ') - } else { - el.setAttribute(key, val) - } - } - } - if (Array.isArray(childrenOrHTML)) { - childrenOrHTML.forEach(e => el.appendChild(e)) - - } else if (childrenOrHTML) { - el.innerHTML = childrenOrHTML - } - return el -} - -const escapeHTML = (raw: string) => raw.replace(//g, '>') - -function joinText (text: string | string[]): string { - return Array.isArray(text) ? text.map(joinText).join('') : text -} - -// Outputs and output-renderers -const imageCreator = (format: string) => (data: string | string[]): HTMLElement => { - return el('img', { - class: 'image-output', - src: `data:image/${format};base64,${joinText(data).replace(/\n/g, '')}`, - }) -} - -nb.display = { - 'image/png': imageCreator('png'), - 'image/jpeg': imageCreator('jpeg'), - 'image/svg+xml': (data) => el('div', ['svg-output'], data), - 'text/svg+xml': (data) => nb.display['image/svg+xml'](data), - 'text/html': (data) => el('div', ['html-output'], data), - 'text/markdown': (data) => nb.display['text/html'](nb.markdown(data)), - 'text/latex': (data) => el('div', ['latex-output'], data), - 'application/javascript': (data) => el('script', [], data), - 'text/plain': (data) => el('pre', ['text-output'], escapeHTML(data)), -} as DataRenderers - -nb.displayPriority = [ - 'image/png', - 'image/jpeg', - 'image/svg+xml', - 'text/svg+xml', - 'text/html', - 'text/markdown', - 'text/latex', - 'application/javascript', - 'text/plain', -] - - -function executionCountAttrs ({ execution_count: count }: CodeCell): Attributes | undefined { - return count ? { - 'data-execution-count': String(count), - // Only for backward compatibility with notebook.js. - 'data-prompt-number': String(count), - } : undefined -} - -function renderNotebook (notebook: Notebook): HTMLElement { - const children = notebook.cells.map(cell => renderCell(cell, notebook)) - - // Class "worksheet" is for backward compatibility with notebook.js. - return el('div', ['notebook', 'worksheet'], children) -} -nb.render = renderNotebook - -function renderCell (cell: Cell, notebook: Notebook): HTMLElement { - switch (cell.cell_type) { - case CellType.Code: return renderCodeCell(cell, notebook) - case CellType.Markdown: return renderMarkdownCell(cell) - case CellType.Raw: return renderRawCell(cell) - } -} - -function renderMarkdownCell (cell: MarkdownCell): HTMLElement { - const div = el('div', ['cell', 'markdown-cell'], nb.markdown(joinText(cell.source))) - nb.renderMath(div, katexConfig) - - return div -} - -function renderRawCell (cell: RawCell): HTMLElement { - return el('div', ['cell', 'raw-cell'], joinText(cell.source)) -} - -function renderCodeCell (cell: CodeCell, notebook: Notebook): HTMLElement { - const children = coalesceStreams(cell.outputs || []) - .map(output => renderOutput(output, cell)) - - children.unshift(renderSource(cell, notebook)) - - return el('div', ['cell', 'code-cell'], children) -} - -function renderSource (cell: CodeCell, notebook: Notebook): HTMLElement { - if (!cell.source.length) { - return el('div') - } - const m = notebook.metadata - const lang = (m.language_info && m.language_info.name) || (m.kernelspec && m.kernelspec.language) - - const html = nb.highlighter(escapeHTML(joinText(cell.source)), lang) - const codeEl = el('code', { 'classes': `lang-${lang}`, 'data-language': lang }, html) - const preEl = el('pre', [], [codeEl]) - - const attrs = { - ...executionCountAttrs(cell), - // Class "input" is for backward compatibility with notebook.js. - class: 'source input', - } - return el('div', attrs, [preEl]) -} - -function renderOutput (output: Output, cell: CodeCell): HTMLElement { - const innerEl = (() => { - switch (output.output_type) { - case OutputType.DisplayData: // fallthrough - case OutputType.ExecuteResult: return renderData(output) - case OutputType.Stream: return renderStream(output) - case OutputType.Error: return renderError(output) - } - })() - - const attrs = { - ...executionCountAttrs(cell), - class: 'output', - } - return el('div', attrs, [innerEl]) -} - -function renderData (output: DisplayData | ExecuteResult): HTMLElement { - const format = nb.displayPriority.find(d => output.data[d]) - - if (format && nb.display[format]) { - return nb.display[format](joinText(output.data[format])) - } - return el('div', ['empty-output']) -} - -function renderError (error: NbError): HTMLElement { - const raw = error.traceback.join('\n') - const html = nb.ansi(escapeHTML(raw)) - - // Class "pyerr" is for backward compatibility with notebook.js. - return el('pre', ['error', 'pyerr'], html) -} - -function renderStream (stream: NbStream): HTMLElement { - const raw = joinText(stream.text) - const html = nb.ansi(escapeHTML(raw)) - - return el('pre', [stream.name], html) -} - -function coalesceStreams (outputs: Output[]): Output[] { - if (!outputs.length) { return outputs } - - let last = outputs[0] - const newOutputs = [last] - - for (const output of outputs.slice(1)) { - if (output.output_type === 'stream' && last.output_type === 'stream' && output.name === last.name) { - last.text = last.text.concat(...output.text) - } else { - newOutputs.push(output) - last = output - } - } - return newOutputs -} - -export default nb +export { default } from './renderer' diff --git a/src/renderer.ts b/src/renderer.ts new file mode 100644 index 0000000..cf7286e --- /dev/null +++ b/src/renderer.ts @@ -0,0 +1,256 @@ +// This code is originally based on notebookjs 0.4.2 distributed under the MIT license. +import { Document, HTMLElement } from 'nodom' + +import { + Cell, + CellType, + CodeCell, + DisplayData, + Error as NbError, + ExecuteResult, + MarkdownCell, + Notebook, + Output, + OutputType, + RawCell, + Stream as NbStream, +} from './nbformat' + + +// TODO: This is only transient type, remove later. +type Nb = { + VERSION: string, + prefix: string, + markdown: (markup: string) => string, + ansi: (text: string) => string, + highlighter: (code: string, lang: string) => string, + renderMath: (element: HTMLElement, config: { [k: string]: any }) => void, + display: DataRenderers, + displayPriority: string[], + render: (notebook: Notebook) => HTMLElement, +} + +type Attributes = { [k: string]: string } + +type DataRenderer = (data: string) => HTMLElement +type DataRenderers = { [mediaType: string]: DataRenderer } + +const VERSION = '0.4.2' + +const doc = new Document() + +const ident = (x: T): T => x + +const katexConfig = { + delimiters: [ + { left: '$$', right: '$$', display: true }, + { left: '\\[', right: '\\]', display: true }, + { left: '\\(', right: '\\)', display: false }, + { left: '$', right: '$', display: false }, + ], +} + +// Set up `nb` namespace +const nb: Nb = { + prefix: 'nb-', + markdown: ident, + ansi: ident, + highlighter: ident, + renderMath: (doc as any).renderMathInElement || ident, + VERSION, +} as any + +function el (tag: string, classes?: string[], children?: HTMLElement[] | string): HTMLElement +function el (tag: string, attrs?: Attributes, children?: HTMLElement[] | string): HTMLElement +function el ( + tag: string, + classesOrAttrs?: string[] | Attributes, + childrenOrHTML?: HTMLElement[] | string, +): HTMLElement { + + const prefixClassName = (name: string) => name.startsWith('lang-') ? name : nb.prefix + name + + const el = doc.createElement(tag) + + if (Array.isArray(classesOrAttrs)) { + el.className = classesOrAttrs.map(prefixClassName).join(' ') + + } else if (classesOrAttrs) { + for (const [key, val] of Object.entries(classesOrAttrs)) { + if (key === 'class') { + el.className = val.split(' ').map(prefixClassName).join(' ') + } else { + el.setAttribute(key, val) + } + } + } + if (Array.isArray(childrenOrHTML)) { + childrenOrHTML.forEach(e => el.appendChild(e)) + + } else if (childrenOrHTML) { + el.innerHTML = childrenOrHTML + } + return el +} + +const escapeHTML = (raw: string) => raw.replace(//g, '>') + +function joinText (text: string | string[]): string { + return Array.isArray(text) ? text.map(joinText).join('') : text +} + +// Outputs and output-renderers +const imageCreator = (format: string) => (data: string | string[]): HTMLElement => { + return el('img', { + class: 'image-output', + src: `data:image/${format};base64,${joinText(data).replace(/\n/g, '')}`, + }) +} + +nb.display = { + 'image/png': imageCreator('png'), + 'image/jpeg': imageCreator('jpeg'), + 'image/svg+xml': (data) => el('div', ['svg-output'], data), + 'text/svg+xml': (data) => nb.display['image/svg+xml'](data), + 'text/html': (data) => el('div', ['html-output'], data), + 'text/markdown': (data) => nb.display['text/html'](nb.markdown(data)), + 'text/latex': (data) => el('div', ['latex-output'], data), + 'application/javascript': (data) => el('script', [], data), + 'text/plain': (data) => el('pre', ['text-output'], escapeHTML(data)), +} as DataRenderers + +nb.displayPriority = [ + 'image/png', + 'image/jpeg', + 'image/svg+xml', + 'text/svg+xml', + 'text/html', + 'text/markdown', + 'text/latex', + 'application/javascript', + 'text/plain', +] + + +function executionCountAttrs ({ execution_count: count }: CodeCell): Attributes | undefined { + return count ? { + 'data-execution-count': String(count), + // Only for backward compatibility with notebook.js. + 'data-prompt-number': String(count), + } : undefined +} + +function renderNotebook (notebook: Notebook): HTMLElement { + const children = notebook.cells.map(cell => renderCell(cell, notebook)) + + // Class "worksheet" is for backward compatibility with notebook.js. + return el('div', ['notebook', 'worksheet'], children) +} +nb.render = renderNotebook + +function renderCell (cell: Cell, notebook: Notebook): HTMLElement { + switch (cell.cell_type) { + case CellType.Code: return renderCodeCell(cell, notebook) + case CellType.Markdown: return renderMarkdownCell(cell) + case CellType.Raw: return renderRawCell(cell) + } +} + +function renderMarkdownCell (cell: MarkdownCell): HTMLElement { + const div = el('div', ['cell', 'markdown-cell'], nb.markdown(joinText(cell.source))) + nb.renderMath(div, katexConfig) + + return div +} + +function renderRawCell (cell: RawCell): HTMLElement { + return el('div', ['cell', 'raw-cell'], joinText(cell.source)) +} + +function renderCodeCell (cell: CodeCell, notebook: Notebook): HTMLElement { + const children = coalesceStreams(cell.outputs || []) + .map(output => renderOutput(output, cell)) + + children.unshift(renderSource(cell, notebook)) + + return el('div', ['cell', 'code-cell'], children) +} + +function renderSource (cell: CodeCell, notebook: Notebook): HTMLElement { + if (!cell.source.length) { + return el('div') + } + const m = notebook.metadata + const lang = (m.language_info && m.language_info.name) || (m.kernelspec && m.kernelspec.language) + + const html = nb.highlighter(escapeHTML(joinText(cell.source)), lang) + const codeEl = el('code', { 'classes': `lang-${lang}`, 'data-language': lang }, html) + const preEl = el('pre', [], [codeEl]) + + const attrs = { + ...executionCountAttrs(cell), + // Class "input" is for backward compatibility with notebook.js. + class: 'source input', + } + return el('div', attrs, [preEl]) +} + +function renderOutput (output: Output, cell: CodeCell): HTMLElement { + const innerEl = (() => { + switch (output.output_type) { + case OutputType.DisplayData: // fallthrough + case OutputType.ExecuteResult: return renderData(output) + case OutputType.Stream: return renderStream(output) + case OutputType.Error: return renderError(output) + } + })() + + const attrs = { + ...executionCountAttrs(cell), + class: 'output', + } + return el('div', attrs, [innerEl]) +} + +function renderData (output: DisplayData | ExecuteResult): HTMLElement { + const format = nb.displayPriority.find(d => output.data[d]) + + if (format && nb.display[format]) { + return nb.display[format](joinText(output.data[format])) + } + return el('div', ['empty-output']) +} + +function renderError (error: NbError): HTMLElement { + const raw = error.traceback.join('\n') + const html = nb.ansi(escapeHTML(raw)) + + // Class "pyerr" is for backward compatibility with notebook.js. + return el('pre', ['error', 'pyerr'], html) +} + +function renderStream (stream: NbStream): HTMLElement { + const raw = joinText(stream.text) + const html = nb.ansi(escapeHTML(raw)) + + return el('pre', [stream.name], html) +} + +function coalesceStreams (outputs: Output[]): Output[] { + if (!outputs.length) { return outputs } + + let last = outputs[0] + const newOutputs = [last] + + for (const output of outputs.slice(1)) { + if (output.output_type === 'stream' && last.output_type === 'stream' && output.name === last.name) { + last.text = last.text.concat(...output.text) + } else { + newOutputs.push(output) + last = output + } + } + return newOutputs +} + +export default nb From f19a70416e2d87832ca7debfcb8424f155132210 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 12 Sep 2019 17:19:49 +0200 Subject: [PATCH 036/266] Completely refactor renderer and add tests for utils --- src/elementCreator.ts | 49 ++++ src/index.ts | 19 +- src/renderer.ts | 390 +++++++++++++-------------- src/utils.ts | 32 +++ test/elementCreator.test.ts | 113 ++++++++ test/main.test.ts | 4 - test/setup.ts | 6 + test/support/matchers/index.ts | 1 + test/support/matchers/toHtmlEqual.ts | 32 +++ test/utils.test.ts | 49 ++++ 10 files changed, 487 insertions(+), 208 deletions(-) create mode 100644 src/elementCreator.ts create mode 100644 src/utils.ts create mode 100644 test/elementCreator.test.ts delete mode 100644 test/main.test.ts create mode 100644 test/setup.ts create mode 100644 test/support/matchers/index.ts create mode 100644 test/support/matchers/toHtmlEqual.ts create mode 100644 test/utils.test.ts diff --git a/src/elementCreator.ts b/src/elementCreator.ts new file mode 100644 index 0000000..a63cb81 --- /dev/null +++ b/src/elementCreator.ts @@ -0,0 +1,49 @@ +// NOTE: nodom.HTMLElement defines a subset of properties and functions of +// the browser's HTMLElement, that's why we use it here. +import { HTMLElement } from 'nodom' + + +type Attributes = { [k: string]: string } + +export type ElementCreator = + & ((tag: string, classes?: string[], children?: HTMLElement[] | string) => HTMLElement) + & ((tag: string, attrs?: Attributes, children?: HTMLElement[] | string) => HTMLElement) + +export { HTMLElement } + + +/** + * Returns a function for building `HTMLElement`s. + * + * @param {function} createElement A function that creates a new `HTMLElement` + * (e.g. `document.createElement.bind(document)`). + * @param {string} classPrefix The prefix to be used for all CSS class names + * except `lang-*`. Default is `nb-`. + */ +export default (createElement: (tag: string) => HTMLElement, classPrefix: string = 'nb-'): ElementCreator => { + const prefixClassName = (name: string) => name.startsWith('lang-') ? name : classPrefix + name + + return (tag: string, classesOrAttrs?: string[] | Attributes, childrenOrHTML?: HTMLElement[] | string) => { + const el = createElement(tag) + + if (Array.isArray(classesOrAttrs)) { + el.className = classesOrAttrs.map(prefixClassName).join(' ') + + } else if (classesOrAttrs) { + for (const [key, val] of Object.entries(classesOrAttrs)) { + if (key === 'class') { + el.className = val.split(' ').map(prefixClassName).join(' ') + } else { + el.setAttribute(key, val) + } + } + } + if (Array.isArray(childrenOrHTML)) { + childrenOrHTML.forEach(e => el.appendChild(e)) + + } else if (childrenOrHTML) { + el.innerHTML = childrenOrHTML + } + return el + } +} diff --git a/src/index.ts b/src/index.ts index 6ca21c7..d05d34a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1,18 @@ -export { default } from './renderer' +import { Document } from 'nodom' + +import buildElementCreator from './elementCreator' +import buildRenderer, { Options as RendererOpts, NbRenderer } from './renderer' + + +export { NbRenderer } + +export type Options = Partial & { + classPrefix?: string, +} + +export default (opts: Options = {}): NbRenderer => { + const doc = new Document() + const elementCreator = buildElementCreator(doc.createElement.bind(doc), opts.classPrefix) + + return buildRenderer({ elementCreator, ...opts }) +} diff --git a/src/renderer.ts b/src/renderer.ts index cf7286e..fbd4306 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -1,6 +1,6 @@ // This code is originally based on notebookjs 0.4.2 distributed under the MIT license. -import { Document, HTMLElement } from 'nodom' - +import { ElementCreator, HTMLElement } from './elementCreator' +import { callableObject, escapeHTML, identity } from './utils' import { Cell, CellType, @@ -17,29 +17,37 @@ import { } from './nbformat' -// TODO: This is only transient type, remove later. -type Nb = { - VERSION: string, - prefix: string, - markdown: (markup: string) => string, - ansi: (text: string) => string, - highlighter: (code: string, lang: string) => string, - renderMath: (element: HTMLElement, config: { [k: string]: any }) => void, - display: DataRenderers, - displayPriority: string[], - render: (notebook: Notebook) => HTMLElement, +export type Options = { + /** An object with additional data renderers indexed by a media type. */ + dataRenderers?: DataRenderers, + /** + * An array of the supported media types in the priority order. When a cell + * contains multiple representations of the data, the one with the media type + * that has the lowest index in this array will be rendered. The default is + * `Object.keys({ ...dataRenderers, ...builtinRenderers })`. + */ + dataRenderersOrder?: string[], + + /** A function for creating HTMLElement. */ + elementCreator: ElementCreator, + + /** A function for converting ANSI escape sequences in the given text to HTML. */ + ansiCodesRenderer?: (text: string) => string, + + /** A function for highlighting the given source code, it should return an HTML string. */ + codeHighlighter?: (code: string, lang: string) => string, + + /** A function for converting the given Markdown source to HTML. */ + markdownRenderer?: (markup: string) => string, + + /** A function for rendering delimited math expressions in the given HTML element. */ + mathRenderer?: (element: HTMLElement, config: {[k: string]: any}) => void, } -type Attributes = { [k: string]: string } +export type DataRenderer = (data: string) => HTMLElement -type DataRenderer = (data: string) => HTMLElement type DataRenderers = { [mediaType: string]: DataRenderer } -const VERSION = '0.4.2' - -const doc = new Document() - -const ident = (x: T): T => x const katexConfig = { delimiters: [ @@ -50,192 +58,10 @@ const katexConfig = { ], } -// Set up `nb` namespace -const nb: Nb = { - prefix: 'nb-', - markdown: ident, - ansi: ident, - highlighter: ident, - renderMath: (doc as any).renderMathInElement || ident, - VERSION, -} as any - -function el (tag: string, classes?: string[], children?: HTMLElement[] | string): HTMLElement -function el (tag: string, attrs?: Attributes, children?: HTMLElement[] | string): HTMLElement -function el ( - tag: string, - classesOrAttrs?: string[] | Attributes, - childrenOrHTML?: HTMLElement[] | string, -): HTMLElement { - - const prefixClassName = (name: string) => name.startsWith('lang-') ? name : nb.prefix + name - - const el = doc.createElement(tag) - - if (Array.isArray(classesOrAttrs)) { - el.className = classesOrAttrs.map(prefixClassName).join(' ') - - } else if (classesOrAttrs) { - for (const [key, val] of Object.entries(classesOrAttrs)) { - if (key === 'class') { - el.className = val.split(' ').map(prefixClassName).join(' ') - } else { - el.setAttribute(key, val) - } - } - } - if (Array.isArray(childrenOrHTML)) { - childrenOrHTML.forEach(e => el.appendChild(e)) - - } else if (childrenOrHTML) { - el.innerHTML = childrenOrHTML - } - return el -} - -const escapeHTML = (raw: string) => raw.replace(//g, '>') - function joinText (text: string | string[]): string { return Array.isArray(text) ? text.map(joinText).join('') : text } -// Outputs and output-renderers -const imageCreator = (format: string) => (data: string | string[]): HTMLElement => { - return el('img', { - class: 'image-output', - src: `data:image/${format};base64,${joinText(data).replace(/\n/g, '')}`, - }) -} - -nb.display = { - 'image/png': imageCreator('png'), - 'image/jpeg': imageCreator('jpeg'), - 'image/svg+xml': (data) => el('div', ['svg-output'], data), - 'text/svg+xml': (data) => nb.display['image/svg+xml'](data), - 'text/html': (data) => el('div', ['html-output'], data), - 'text/markdown': (data) => nb.display['text/html'](nb.markdown(data)), - 'text/latex': (data) => el('div', ['latex-output'], data), - 'application/javascript': (data) => el('script', [], data), - 'text/plain': (data) => el('pre', ['text-output'], escapeHTML(data)), -} as DataRenderers - -nb.displayPriority = [ - 'image/png', - 'image/jpeg', - 'image/svg+xml', - 'text/svg+xml', - 'text/html', - 'text/markdown', - 'text/latex', - 'application/javascript', - 'text/plain', -] - - -function executionCountAttrs ({ execution_count: count }: CodeCell): Attributes | undefined { - return count ? { - 'data-execution-count': String(count), - // Only for backward compatibility with notebook.js. - 'data-prompt-number': String(count), - } : undefined -} - -function renderNotebook (notebook: Notebook): HTMLElement { - const children = notebook.cells.map(cell => renderCell(cell, notebook)) - - // Class "worksheet" is for backward compatibility with notebook.js. - return el('div', ['notebook', 'worksheet'], children) -} -nb.render = renderNotebook - -function renderCell (cell: Cell, notebook: Notebook): HTMLElement { - switch (cell.cell_type) { - case CellType.Code: return renderCodeCell(cell, notebook) - case CellType.Markdown: return renderMarkdownCell(cell) - case CellType.Raw: return renderRawCell(cell) - } -} - -function renderMarkdownCell (cell: MarkdownCell): HTMLElement { - const div = el('div', ['cell', 'markdown-cell'], nb.markdown(joinText(cell.source))) - nb.renderMath(div, katexConfig) - - return div -} - -function renderRawCell (cell: RawCell): HTMLElement { - return el('div', ['cell', 'raw-cell'], joinText(cell.source)) -} - -function renderCodeCell (cell: CodeCell, notebook: Notebook): HTMLElement { - const children = coalesceStreams(cell.outputs || []) - .map(output => renderOutput(output, cell)) - - children.unshift(renderSource(cell, notebook)) - - return el('div', ['cell', 'code-cell'], children) -} - -function renderSource (cell: CodeCell, notebook: Notebook): HTMLElement { - if (!cell.source.length) { - return el('div') - } - const m = notebook.metadata - const lang = (m.language_info && m.language_info.name) || (m.kernelspec && m.kernelspec.language) - - const html = nb.highlighter(escapeHTML(joinText(cell.source)), lang) - const codeEl = el('code', { 'classes': `lang-${lang}`, 'data-language': lang }, html) - const preEl = el('pre', [], [codeEl]) - - const attrs = { - ...executionCountAttrs(cell), - // Class "input" is for backward compatibility with notebook.js. - class: 'source input', - } - return el('div', attrs, [preEl]) -} - -function renderOutput (output: Output, cell: CodeCell): HTMLElement { - const innerEl = (() => { - switch (output.output_type) { - case OutputType.DisplayData: // fallthrough - case OutputType.ExecuteResult: return renderData(output) - case OutputType.Stream: return renderStream(output) - case OutputType.Error: return renderError(output) - } - })() - - const attrs = { - ...executionCountAttrs(cell), - class: 'output', - } - return el('div', attrs, [innerEl]) -} - -function renderData (output: DisplayData | ExecuteResult): HTMLElement { - const format = nb.displayPriority.find(d => output.data[d]) - - if (format && nb.display[format]) { - return nb.display[format](joinText(output.data[format])) - } - return el('div', ['empty-output']) -} - -function renderError (error: NbError): HTMLElement { - const raw = error.traceback.join('\n') - const html = nb.ansi(escapeHTML(raw)) - - // Class "pyerr" is for backward compatibility with notebook.js. - return el('pre', ['error', 'pyerr'], html) -} - -function renderStream (stream: NbStream): HTMLElement { - const raw = joinText(stream.text) - const html = nb.ansi(escapeHTML(raw)) - - return el('pre', [stream.name], html) -} - function coalesceStreams (outputs: Output[]): Output[] { if (!outputs.length) { return outputs } @@ -253,4 +79,162 @@ function coalesceStreams (outputs: Output[]): Output[] { return newOutputs } -export default nb +function executionCountAttrs ({ execution_count: count }: CodeCell): { [k: string]: string } | undefined { + return count ? { + 'data-execution-count': String(count), + // Only for backward compatibility with notebook.js. + 'data-prompt-number': String(count), + } : undefined +} + +function notebookLanguage ({ metadata: meta }: Notebook): string { + return (meta.language_info && meta.language_info.name) + || (meta.kernelspec && meta.kernelspec.language) + || 'python' +} + +/** + * Builds a Notebook renderer function with the given options. It returns + * a "callable object" of renderer functions for each Notebook's AST node. + * You can easily replace any of the renderer functions to modify behaviour + * of the renderer. + */ +function buildRenderer (opts: Options) { + const renderMarkdown = opts.markdownRenderer || identity + const renderMathInElement = opts.mathRenderer || identity + const renderAnsiCodes = opts.ansiCodesRenderer || identity + const highlightCode = opts.codeHighlighter || identity + + const el = opts.elementCreator + const el2 = (tag: string, classes: string[]) => (data: string) => el(tag, classes, data) + + const embeddedImageEl = (format: string) => (data: string | string[]) => el('img', { + class: 'image-output', + src: `data:image/${format};base64,${joinText(data).replace(/\n/g, '')}`, + }) + + // opts.dataRenderers is intentionally included twice; to get the user's + // provided renderers in the default dataRenderersOrder before the built-in + // renderers and at the same time allow to override any built-in renderer. + const dataRenderers: DataRenderers = { + ...opts.dataRenderers, + 'image/png': embeddedImageEl('png'), + 'image/jpeg': embeddedImageEl('jpeg'), + 'image/svg+xml': el2('div', ['svg-output']), + 'text/svg+xml': (data) => dataRenderers['image/svg+xml'](data), + 'text/html': el2('div', ['html-output']), + 'text/markdown': (data) => dataRenderers['text/html'](renderMarkdown(data)), + 'text/latex': el2('div', ['latex-output']), + 'application/javascript': el2('script', []), + 'text/plain': (data) => el('pre', ['text-output'], escapeHTML(data)), + ...opts.dataRenderers, + } + const dataRenderersOrder = opts.dataRenderersOrder || Object.keys(dataRenderers) + + const resolveDataType = (output: DisplayData | ExecuteResult) => { + return dataRenderersOrder.find(type => output.data[type] && dataRenderers[type]) + } + + const r = callableObject('Notebook', { + Notebook: (notebook: Notebook): HTMLElement => { + const children = notebook.cells.map(cell => r.Cell(cell, notebook)) + // Class "worksheet" is for backward compatibility with notebook.js. + return el('div', ['notebook', 'worksheet'], children) + }, + + Cell: (cell: Cell, notebook: Notebook): HTMLElement => { + switch (cell.cell_type) { + case CellType.Code: return r.CodeCell(cell, notebook) + case CellType.Markdown: return r.MarkdownCell(cell, notebook) + case CellType.Raw: return r.RawCell(cell, notebook) + } + }, + + MarkdownCell: (cell: MarkdownCell, _notebook: Notebook): HTMLElement => { + const html = renderMarkdown(joinText(cell.source)) + const div = el('div', ['cell', 'markdown-cell'], html) + renderMathInElement(div, katexConfig) + + return div + }, + + RawCell: (cell: RawCell, _notebook: Notebook): HTMLElement => { + return el('div', ['cell', 'raw-cell'], joinText(cell.source)) + }, + + CodeCell: (cell: CodeCell, notebook: Notebook): HTMLElement => { + const children = coalesceStreams(cell.outputs || []) + .map(output => r.Output(output, cell)) + + children.unshift(r.Source(cell, notebook)) + + return el('div', ['cell', 'code-cell'], children) + }, + + Source: (cell: CodeCell, notebook: Notebook): HTMLElement => { + if (!cell.source.length) { + return el('div') + } + const lang = notebookLanguage(notebook) + const html = highlightCode(escapeHTML(joinText(cell.source)), lang) + + const codeEl = el('code', { 'classes': `lang-${lang}`, 'data-language': lang }, html) + const preEl = el('pre', [], [codeEl]) + + // Class "input" is for backward compatibility with notebook.js. + const attrs = { ...executionCountAttrs(cell), class: 'source input' } + + return el('div', attrs, [preEl]) + }, + + Output: (output: Output, cell: CodeCell): HTMLElement => { + const innerEl = (() => { + switch (output.output_type) { + case OutputType.DisplayData: return r.DisplayData(output) + case OutputType.ExecuteResult: return r.ExecuteResult(output) + case OutputType.Stream: return r.Stream(output) + case OutputType.Error: return r.Error(output) + } + })() + const attrs = { ...executionCountAttrs(cell), class: 'output' } + + return el('div', attrs, [innerEl]) + }, + + DisplayData: (output: DisplayData): HTMLElement => { + const type = resolveDataType(output) + if (type) { + return dataRenderers[type](joinText(output.data[type])) + } + return el('div', ['empty-output']) + }, + + ExecuteResult: (output: ExecuteResult): HTMLElement => { + const type = resolveDataType(output) + if (type) { + return dataRenderers[type](joinText(output.data[type])) + } + return el('div', ['empty-output']) + }, + + Error: (error: NbError): HTMLElement => { + const raw = error.traceback.join('\n') + const html = renderAnsiCodes(escapeHTML(raw)) + + // Class "pyerr" is for backward compatibility with notebook.js. + return el('pre', ['error', 'pyerr'], html) + }, + + Stream: (stream: NbStream): HTMLElement => { + const raw = joinText(stream.text) + const html = renderAnsiCodes(escapeHTML(raw)) + + return el('pre', [stream.name], html) + }, + }) + return r +} + +export type NbRenderer = ReturnType + +export default buildRenderer diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..bf348bc --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,32 @@ +/** + * Creates a "callable object" with the given properties. In fact, it creates + * a function that calls `obj[funcName]` and copies all the enumerable + * properties of the *template* to the created function. + * + * @param {string} funcName Name of the function property of the *template*. + * @param {Object} template The source object from which to copy enumerable properties. + * @return A function with all enumerable properties of the *template*. + */ +export function callableObject ( + funcName: K, + template: T, +): T[K] extends Function ? T & T[K] : never { + + const fn = function (...args: any[]) { + return (template[funcName] as any)(...args) + } + return Object.assign(fn, template) as any +} + +/** + * Escapes characters with special meaning in HTML with the corresponding + * HTML entities. + */ +export function escapeHTML (raw: string): string { + return raw.replace(//g, '>') +} + +/** + * A function that does nothing but return the parameter supplied to it. + */ +export const identity = (x: T, ..._rest: any[]): T => x diff --git a/test/elementCreator.test.ts b/test/elementCreator.test.ts new file mode 100644 index 0000000..726ec7f --- /dev/null +++ b/test/elementCreator.test.ts @@ -0,0 +1,113 @@ +import './setup' +import { Document } from 'nodom' + +import buildElementCreator from '@/elementCreator' + + +const doc = new Document() + +const el1 = (() => { + const el = doc.createElement('p') + el.className = 'fixture' + el.textContent = 'child-1' + return el +})() + +const el2 = (() => { + const el = doc.createElement('img') + el.setAttribute('src', 'pic.png') + return el +})() + + +describe('created function', () => { + const prefix = 'x-' + const makeElement = buildElementCreator(doc.createElement.bind(doc), prefix) + let exp = doc.createElement('div') + + + describe('with tag', () => { + + it('returns an HTMLElement for the specified tag', () => { + expect( makeElement('div') ).toHtmlEqual(exp) + }) + + describe('and classes', () => { + const tag = 'img' + const classes = ['foo', 'bar'] + + beforeEach(() => { + exp = doc.createElement(tag) + exp.className = `${prefix}foo ${prefix}bar` + }) + + it('returns an HTMLElement with the specified classes prefixed', () => { + expect( makeElement(tag, classes) ).toHtmlEqual(exp) + }) + + it('does not prefix class name starting with lang-', () => { + expect( makeElement(tag, ['lang-js']).className ).toEqual('lang-js') + }) + + describe('and child elements', () => { + + it('returns an HTMLElement with the given children', () => { + exp.appendChild(el1) + exp.appendChild(el2) + + expect( makeElement(tag, classes, [el1, el2]) ).toHtmlEqual(exp) + }) + }) + + describe('and inner HTML', () => { + + it('returns an HTMLElement with the given inner HTML', () => { + exp.innerHTML = el1.outerHTML + + expect( makeElement(tag, classes, el1.outerHTML) ).toHtmlEqual(exp) + }) + }) + }) + + describe('and attributes', () => { + const tag = 'img' + const attrs = { src: 'img.png', alt: 'picture' } + + beforeEach(() => { + exp = doc.createElement(tag) + for (const [key, val] of Object.entries(attrs)) { + exp.setAttribute(key, val) + } + }) + + it('returns an HTMLElement with the given attributes', () => { + expect( makeElement('img', attrs) ).toHtmlEqual(exp) + }) + + it('prefixes items of the class attribute that do not start with lang-', () => { + expect( + makeElement(tag, { src: 'img.png', class: 'foo lang-js' }).className + ).toEqual(`${prefix}foo lang-js`) + }) + + describe('and child elements', () => { + + it('returns an HTMLElement with the given children', () => { + exp.appendChild(el1) + exp.appendChild(el2) + + expect( makeElement(tag, attrs, [el1, el2]) ).toHtmlEqual(exp) + }) + }) + + describe('and inner HTML', () => { + + it('returns an HTMLElement with the given inner HTML', () => { + exp.innerHTML = el1.outerHTML + + expect( makeElement(tag, attrs, el1.outerHTML) ).toHtmlEqual(exp) + }) + }) + }) + }) +}) diff --git a/test/main.test.ts b/test/main.test.ts deleted file mode 100644 index c797723..0000000 --- a/test/main.test.ts +++ /dev/null @@ -1,4 +0,0 @@ - -it('1 + 1 should be 2', () => { - expect( 1 + 1 ).toBe(2) -}) diff --git a/test/setup.ts b/test/setup.ts new file mode 100644 index 0000000..8944e60 --- /dev/null +++ b/test/setup.ts @@ -0,0 +1,6 @@ +// TODO: How to correctly load this file implicitly? +// setupFilesAfterEnv does not work with TS well. + +import * as matchers from './support/matchers' + +expect.extend(matchers) diff --git a/test/support/matchers/index.ts b/test/support/matchers/index.ts new file mode 100644 index 0000000..e44fde7 --- /dev/null +++ b/test/support/matchers/index.ts @@ -0,0 +1 @@ +export { toHtmlEqual } from './toHtmlEqual' diff --git a/test/support/matchers/toHtmlEqual.ts b/test/support/matchers/toHtmlEqual.ts new file mode 100644 index 0000000..5c3423f --- /dev/null +++ b/test/support/matchers/toHtmlEqual.ts @@ -0,0 +1,32 @@ +import { matcherHint, printDiffOrStringify } from 'jest-matcher-utils' +import { HTMLElement } from 'nodom' + +type MatcherResult = jest.CustomMatcherResult + +declare global { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace jest { + // eslint-disable-next-line @typescript-eslint/consistent-type-definitions + interface Matchers { + toHtmlEqual (expected: HTMLElement | string): R, + } + } +} + +export function toHtmlEqual (received: HTMLElement, expected: HTMLElement | string): MatcherResult { + const receivedStr = received.outerHTML + const expectedStr = typeof expected === 'string' ? expected : expected.outerHTML + + const pass = receivedStr === expectedStr + + const hintOpts = { + isNot: pass, + comment: 'equality of .outerHTML', + } + const message = () => + matcherHint('toHtmlEqual', undefined, undefined, hintOpts) + + '\n\n' + + printDiffOrStringify(expectedStr, receivedStr, 'Expected', 'Received', true) + + return { pass, message } +} diff --git a/test/utils.test.ts b/test/utils.test.ts new file mode 100644 index 0000000..84888e6 --- /dev/null +++ b/test/utils.test.ts @@ -0,0 +1,49 @@ +import { callableObject, escapeHTML, identity } from '@/utils' + + +describe('.callableObject', () => { + + describe('returned value', () => { + const template = { + str: 'allons-y!', + func1: jest.fn().mockReturnValue(1), + func2: jest.fn().mockReturnValue(2), + } + const subject = callableObject('func1', template) + + it('is a function that calls the specified template function', () => { + expect( subject ).toBeInstanceOf(Function) + expect( subject('a', 'b') ).toBe(1) + expect( template.func1 ).toBeCalledWith('a', 'b') + }) + + it('is not the same function as the specified template function', () => { + expect( subject ).not.toBe(template.func1) + }) + + it('has all enumerable properties of the given template', () => { + expect( subject.str ).toBe(template.str) + expect( subject.func1 ).toBe(template.func1) + expect( subject.func2 ).toBe(template.func2) + }) + }) +}) + + +describe('.escapeHTML', () => { + test.each([ + /* input | expected */ + ['<' , '<' ], + ['>' , '>' ], + ['Hey >_>', 'Hey >_<! <<>>'], + ])('"%s" -> "%s"', (input, expected) => { + expect( escapeHTML(input) ).toEqual(expected) + }) +}) + + +describe('.identity', () => { + it('returns the first given argument', () => { + expect( identity('a', 'b') ).toBe('a') + }) +}) From 61c3b5feab2195aa3fa6af9d5828b2435e6e6c9f Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 13 Sep 2019 22:07:53 +0200 Subject: [PATCH 037/266] Fix escapeHTML() to escape even "&" and refactor it --- src/utils.ts | 11 +++++++++-- test/utils.test.ts | 9 +++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/utils.ts b/src/utils.ts index bf348bc..c0333a9 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,3 +1,10 @@ + +const htmlEntities = { + '&': '&', + '<': '<', + '>': '>', +} + /** * Creates a "callable object" with the given properties. In fact, it creates * a function that calls `obj[funcName]` and copies all the enumerable @@ -22,8 +29,8 @@ export function callableObject ( * Escapes characters with special meaning in HTML with the corresponding * HTML entities. */ -export function escapeHTML (raw: string): string { - return raw.replace(//g, '>') +export function escapeHTML (str: string): string { + return str.replace(/[&<>]/g, c => (htmlEntities as any)[c]) } /** diff --git a/test/utils.test.ts b/test/utils.test.ts index 84888e6..cffdbe8 100644 --- a/test/utils.test.ts +++ b/test/utils.test.ts @@ -32,10 +32,11 @@ describe('.callableObject', () => { describe('.escapeHTML', () => { test.each([ - /* input | expected */ - ['<' , '<' ], - ['>' , '>' ], - ['Hey >_>', 'Hey >_<! <<>>'], + /* input | expected */ + ['&' , '&' ], + ['<' , '<' ], + ['>' , '>' ], + ['Hey >_>', 'Hey >_<! <<&>>'], ])('"%s" -> "%s"', (input, expected) => { expect( escapeHTML(input) ).toEqual(expected) }) From 9ee9575eae1046b24cd74ec8cd51ef5afe269d6e Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 14 Sep 2019 18:45:16 +0200 Subject: [PATCH 038/266] Remove mathRenderer option The current approach doesn't work with nodom because KaTeX's renderMathInElement() works on an element with full DOM and we have only element with innerHTML string. --- src/renderer.ts | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/src/renderer.ts b/src/renderer.ts index fbd4306..0fc0205 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -39,9 +39,6 @@ export type Options = { /** A function for converting the given Markdown source to HTML. */ markdownRenderer?: (markup: string) => string, - - /** A function for rendering delimited math expressions in the given HTML element. */ - mathRenderer?: (element: HTMLElement, config: {[k: string]: any}) => void, } export type DataRenderer = (data: string) => HTMLElement @@ -49,15 +46,6 @@ export type DataRenderer = (data: string) => HTMLElement type DataRenderers = { [mediaType: string]: DataRenderer } -const katexConfig = { - delimiters: [ - { left: '$$', right: '$$', display: true }, - { left: '\\[', right: '\\]', display: true }, - { left: '\\(', right: '\\)', display: false }, - { left: '$', right: '$', display: false }, - ], -} - function joinText (text: string | string[]): string { return Array.isArray(text) ? text.map(joinText).join('') : text } @@ -101,7 +89,6 @@ function notebookLanguage ({ metadata: meta }: Notebook): string { */ function buildRenderer (opts: Options) { const renderMarkdown = opts.markdownRenderer || identity - const renderMathInElement = opts.mathRenderer || identity const renderAnsiCodes = opts.ansiCodesRenderer || identity const highlightCode = opts.codeHighlighter || identity @@ -151,11 +138,7 @@ function buildRenderer (opts: Options) { }, MarkdownCell: (cell: MarkdownCell, _notebook: Notebook): HTMLElement => { - const html = renderMarkdown(joinText(cell.source)) - const div = el('div', ['cell', 'markdown-cell'], html) - renderMathInElement(div, katexConfig) - - return div + return el('div', ['cell', 'markdown-cell'], renderMarkdown(joinText(cell.source))) }, RawCell: (cell: RawCell, _notebook: Notebook): HTMLElement => { From fceb1f8e2322dae7f66d32f6083414bddc1f7a20 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 14 Sep 2019 13:59:42 +0200 Subject: [PATCH 039/266] Import math extractor utils from jupyter/notebook repository Source copied from https://github.com/jupyter/notebook/blob/6.0.1/notebook/static/notebook/js/mathjaxutils.js with the following modifications: - indentation converted to 2 spaces - init function removed - MSE fix removed --- README.adoc | 1 + src/mathExtractor.js | 188 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 189 insertions(+) create mode 100644 src/mathExtractor.js diff --git a/README.adoc b/README.adoc index d8a1afe..9a5fea3 100644 --- a/README.adoc +++ b/README.adoc @@ -70,6 +70,7 @@ If you use Visual Studio Code, you should install the following extensions: == Credits * The renderer module is originally based on https://github.com/jsvine/notebookjs[notebookjs] 0.4.2 developed by https://github.com/jsvine[Jeremy Singer-Vine] and distributed under the http://opensource.org/licenses/MIT/[MIT License]. +* The mathExtractor module is based on https://github.com/jupyter/notebook/blob/6.0.1/notebook/static/notebook/js/mathjaxutils.js[mathjaxutils.js] from the https://github.com/jupyter/notebook[Jupyter Notebook] 6.0.1 distributed under the https://github.com/jupyter/notebook/blob/6.0.1/COPYING.md[Modified BSD License]. == License diff --git a/src/mathExtractor.js b/src/mathExtractor.js new file mode 100644 index 0000000..e8ccd49 --- /dev/null +++ b/src/mathExtractor.js @@ -0,0 +1,188 @@ +// Copyright (c) Jupyter Development Team. +// Distributed under the terms of the Modified BSD License. +// Based on https://github.com/jupyter/notebook/blob/6.0.1/notebook/static/notebook/js/mathjaxutils.js. +"use strict"; + +// Some magic for deferring mathematical expressions to MathJax +// by hiding them from the Markdown parser. +// Some of the code here is adapted with permission from Davide Cervone +// under the terms of the Apache2 license governing the MathJax project. +// Other minor modifications are also due to StackExchange and are used with +// permission. + +// MATHSPLIT contains the pattern for math delimiters and special symbols +// needed for searching for math in the text input. +var MATHSPLIT = /(\$\$?|\\(?:begin|end)\{[a-z]*\*?\}|\\[{}$]|[{}]|(?:\n\s*)+|@@\d+@@|\\\\(?:\(|\)|\[|\]))/i; + +// The math is in blocks i through j, so +// collect it into one block and clear the others. +// Replace &, <, and > by named entities. +// Clear the current math positions and store the index of the +// math, then push the math string onto the storage array. +// The preProcess function is called on all blocks if it has been passed in +var process_math = function (i, j, pre_process, math, blocks) { + var block = blocks.slice(i, j + 1).join("").replace(/&/g, "&") // use HTML entity for & + .replace(//g, ">") // use HTML entity for > + ; + while (j > i) { + blocks[j] = ""; + j--; + } + blocks[i] = "@@" + math.length + "@@"; // replace the current block text with a unique tag to find later + if (pre_process){ + block = pre_process(block); + } + math.push(block); + return blocks; +}; + +// Break up the text into its component parts and search +// through them for math delimiters, braces, linebreaks, etc. +// Math delimiters must match and braces must balance. +// Don't allow math to pass through a double linebreak +// (which will be a paragraph). +// +var remove_math = function (text) { + var math = []; // stores math strings for later + var start; + var end; + var last; + var braces; + + // Except for extreme edge cases, this should catch precisely those pieces of the markdown + // source that will later be turned into code spans. While MathJax will not TeXify code spans, + // we still have to consider them at this point; the following issue has happened several times: + // + // `$foo` and `$bar` are varibales. --> $foo ` and `$bar are variables. + + var hasCodeSpans = /`/.test(text), + de_tilde; + if (hasCodeSpans) { + var tilde = function (wholematch) { + return wholematch.replace(/\$/g, "~D"); + } + text = text.replace(/~/g, "~T") + .replace(/(^|[^\\])(`+)([^\n]*?[^`\n])\2(?!`)/gm, tilde) + .replace(/^\s{0,3}(`{3,})(.|\n)*?\1/gm, tilde); + de_tilde = function (text) { + return text.replace(/~([TD])/g, function (wholematch, character) { + return { T: "~", D: "$" }[character]; + }); + }; + } else { + de_tilde = function (text) { return text; }; + } + + // TODO: Test if it works correctly across browsers. The original code uses + // utils.regex_split() based on http://blog.stevenlevithan.com/archives/cross-browser-split. + var blocks = text.replace(/\r\n?/g, "\n").split(MATHSPLIT); + + for (var i = 1, m = blocks.length; i < m; i += 2) { + var block = blocks[i]; + if (block.charAt(0) === "@") { + // + // Things that look like our math markers will get + // stored and then retrieved along with the math. + // + blocks[i] = "@@" + math.length + "@@"; + math.push(block); + } + else if (start) { + // + // If we are in math, look for the end delimiter, + // but don't go past double line breaks, and + // and balance braces within the math. + // + if (block === end) { + if (braces) { + last = i; + } + else { + blocks = process_math(start, i, de_tilde, math, blocks); + start = null; + end = null; + last = null; + } + } + else if (block.match(/\n.*\n/)) { + if (last) { + i = last; + blocks = process_math(start, i, de_tilde, math, blocks); + } + start = null; + end = null; + last = null; + braces = 0; + } + else if (block === "{") { + braces++; + } + else if (block === "}" && braces) { + braces--; + } + } + else { + // + // Look for math start delimiters and when + // found, set up the end delimiter. + // + if (block === "$" || block === "$$") { + start = i; + end = block; + braces = 0; + } + else if (block === "\\\\\(" || block === "\\\\\[") { + start = i; + end = block.slice(-1) === "(" ? "\\\\\)" : "\\\\\]"; + braces = 0; + } + else if (block.substr(1, 5) === "begin") { + start = i; + end = "\\end" + block.substr(6); + braces = 0; + } + } + } + if (last) { + blocks = process_math(start, last, de_tilde, math, blocks); + start = null; + end = null; + last = null; + } + return [de_tilde(blocks.join("")), math]; +}; + +// +// Put back the math strings that were saved, +// and clear the math array (no need to keep it around). +// +var replace_math = function (text, math) { + // + // Replaces a math placeholder with its corresponding group. + // The math delimiters "\\(", "\\[", "\\)" and "\\]" are replaced + // removing one backslash in order to be interpreted correctly by MathJax. + // + var math_group_process = function (match, n) { + var math_group = math[n]; + + if (math_group.substr(0, 3) === "\\\\\(" && math_group.substr(math_group.length - 3) === "\\\\\)") { + math_group = "\\\(" + math_group.substring(3, math_group.length - 3) + "\\\)"; + } else if (math_group.substr(0, 3) === "\\\\\[" && math_group.substr(math_group.length - 3) === "\\\\\]") { + math_group = "\\\[" + math_group.substring(3, math_group.length - 3) + "\\\]"; + } + + return math_group; + }; + + // Replace all the math group placeholders in the text + // with the saved strings. + text = text.replace(/@@(\d+)@@/g, math_group_process); + + return text; +}; + +module.exports = { + remove_math : remove_math, + replace_math : replace_math +}; From 92e00f7df8355108b6806b9addf687f692a1019a Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 14 Sep 2019 14:08:59 +0200 Subject: [PATCH 040/266] mathExtractor: Fix code-style - semicolons - indentation and alignment - quotes --- src/mathExtractor.js | 262 ++++++++++++++++++++----------------------- 1 file changed, 124 insertions(+), 138 deletions(-) diff --git a/src/mathExtractor.js b/src/mathExtractor.js index e8ccd49..08d43b2 100644 --- a/src/mathExtractor.js +++ b/src/mathExtractor.js @@ -1,188 +1,174 @@ // Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. // Based on https://github.com/jupyter/notebook/blob/6.0.1/notebook/static/notebook/js/mathjaxutils.js. -"use strict"; +'use strict' -// Some magic for deferring mathematical expressions to MathJax -// by hiding them from the Markdown parser. -// Some of the code here is adapted with permission from Davide Cervone -// under the terms of the Apache2 license governing the MathJax project. +// Some magic for deferring mathematical expressions to MathJax by hiding them +// from the Markdown parser. +// Some of the code here is adapted with permission from Davide Cervone under +// the terms of the Apache2 license governing the MathJax project. // Other minor modifications are also due to StackExchange and are used with // permission. // MATHSPLIT contains the pattern for math delimiters and special symbols // needed for searching for math in the text input. -var MATHSPLIT = /(\$\$?|\\(?:begin|end)\{[a-z]*\*?\}|\\[{}$]|[{}]|(?:\n\s*)+|@@\d+@@|\\\\(?:\(|\)|\[|\]))/i; +var MATHSPLIT = /(\$\$?|\\(?:begin|end)\{[a-z]*\*?\}|\\[{}$]|[{}]|(?:\n\s*)+|@@\d+@@|\\\\(?:\(|\)|\[|\]))/i -// The math is in blocks i through j, so -// collect it into one block and clear the others. -// Replace &, <, and > by named entities. -// Clear the current math positions and store the index of the -// math, then push the math string onto the storage array. -// The preProcess function is called on all blocks if it has been passed in +// - The math is in blocks i through j, so collect it into one block and clear +// the others. +// - Replace &, <, and > by named entities. +// - Clear the current math positions and store the index of the math, then +// push the math string onto the storage array. +// - The pre_process function is called on all blocks if it has been passed in var process_math = function (i, j, pre_process, math, blocks) { - var block = blocks.slice(i, j + 1).join("").replace(/&/g, "&") // use HTML entity for & - .replace(//g, ">") // use HTML entity for > - ; + var block = blocks.slice(i, j + 1).join('') + .replace(/&/g, '&') // use HTML entity for & + .replace(//g, '>') // use HTML entity for > + while (j > i) { - blocks[j] = ""; - j--; + blocks[j] = '' + j-- } - blocks[i] = "@@" + math.length + "@@"; // replace the current block text with a unique tag to find later - if (pre_process){ - block = pre_process(block); + // Replace the current block text with a unique tag to find later. + blocks[i] = '@@' + math.length + '@@' + if (pre_process) { + block = pre_process(block) } - math.push(block); - return blocks; -}; + math.push(block) + return blocks +} -// Break up the text into its component parts and search -// through them for math delimiters, braces, linebreaks, etc. -// Math delimiters must match and braces must balance. -// Don't allow math to pass through a double linebreak -// (which will be a paragraph). -// +// - Break up the text into its component parts and search through them for +// math delimiters, braces, line breaks, etc. +// - Math delimiters must match and braces must balance. +// - Don't allow math to pass through a double line break (which will be +// a paragraph). var remove_math = function (text) { - var math = []; // stores math strings for later - var start; - var end; - var last; - var braces; + var math = [] // stores math strings for later + var start + var end + var last + var braces - // Except for extreme edge cases, this should catch precisely those pieces of the markdown - // source that will later be turned into code spans. While MathJax will not TeXify code spans, - // we still have to consider them at this point; the following issue has happened several times: + // Except for extreme edge cases, this should catch precisely those pieces of + // the Markdown source that will later be turned into code spans. While + // MathJax will not TeXify code spans, we still have to consider them at this + // point; the following issue has happened several times: // - // `$foo` and `$bar` are varibales. --> $foo ` and `$bar are variables. - - var hasCodeSpans = /`/.test(text), - de_tilde; + // `$foo` and `$bar` are variables. --> $foo ` and `$bar are variables. + // + var hasCodeSpans = /`/.test(text) + var de_tilde if (hasCodeSpans) { var tilde = function (wholematch) { - return wholematch.replace(/\$/g, "~D"); + return wholematch.replace(/\$/g, '~D') } - text = text.replace(/~/g, "~T") - .replace(/(^|[^\\])(`+)([^\n]*?[^`\n])\2(?!`)/gm, tilde) - .replace(/^\s{0,3}(`{3,})(.|\n)*?\1/gm, tilde); + text = text + .replace(/~/g, '~T') + .replace(/(^|[^\\])(`+)([^\n]*?[^`\n])\2(?!`)/gm, tilde) + .replace(/^\s{0,3}(`{3,})(.|\n)*?\1/gm, tilde) de_tilde = function (text) { return text.replace(/~([TD])/g, function (wholematch, character) { - return { T: "~", D: "$" }[character]; - }); - }; + return { T: '~', D: '$' }[character] + }) + } } else { - de_tilde = function (text) { return text; }; + de_tilde = function (text) { return text } } // TODO: Test if it works correctly across browsers. The original code uses // utils.regex_split() based on http://blog.stevenlevithan.com/archives/cross-browser-split. - var blocks = text.replace(/\r\n?/g, "\n").split(MATHSPLIT); + var blocks = text.replace(/\r\n?/g, '\n').split(MATHSPLIT) for (var i = 1, m = blocks.length; i < m; i += 2) { - var block = blocks[i]; - if (block.charAt(0) === "@") { - // - // Things that look like our math markers will get - // stored and then retrieved along with the math. - // - blocks[i] = "@@" + math.length + "@@"; - math.push(block); - } - else if (start) { - // - // If we are in math, look for the end delimiter, - // but don't go past double line breaks, and - // and balance braces within the math. - // + var block = blocks[i] + + if (block.charAt(0) === '@') { + // Things that look like our math markers will get stored and then + // retrieved along with the math. + blocks[i] = '@@' + math.length + '@@' + math.push(block) + + } else if (start) { + // If we are in math, look for the end delimiter, but don't go past + // double line breaks, and and balance braces within the math. if (block === end) { if (braces) { - last = i; + last = i + } else { + blocks = process_math(start, i, de_tilde, math, blocks) + start = null + end = null + last = null } - else { - blocks = process_math(start, i, de_tilde, math, blocks); - start = null; - end = null; - last = null; - } - } - else if (block.match(/\n.*\n/)) { + } else if (block.match(/\n.*\n/)) { if (last) { - i = last; - blocks = process_math(start, i, de_tilde, math, blocks); + i = last + blocks = process_math(start, i, de_tilde, math, blocks) } - start = null; - end = null; - last = null; - braces = 0; + start = null + end = null + last = null + braces = 0 + } else if (block === '{') { + braces++ + } else if (block === '}' && braces) { + braces-- } - else if (block === "{") { - braces++; - } - else if (block === "}" && braces) { - braces--; - } - } - else { - // - // Look for math start delimiters and when - // found, set up the end delimiter. - // - if (block === "$" || block === "$$") { - start = i; - end = block; - braces = 0; - } - else if (block === "\\\\\(" || block === "\\\\\[") { - start = i; - end = block.slice(-1) === "(" ? "\\\\\)" : "\\\\\]"; - braces = 0; - } - else if (block.substr(1, 5) === "begin") { - start = i; - end = "\\end" + block.substr(6); - braces = 0; + } else { + // Look for math start delimiters and when found, set up + // the end delimiter. + if (block === '$' || block === '$$') { + start = i + end = block + braces = 0 + } else if (block === '\\\\\(' || block === '\\\\\[') { + start = i + end = block.slice(-1) === '(' ? '\\\\\)' : '\\\\\]' + braces = 0 + } else if (block.substr(1, 5) === 'begin') { + start = i + end = '\\end' + block.substr(6) + braces = 0 } } } if (last) { - blocks = process_math(start, last, de_tilde, math, blocks); - start = null; - end = null; - last = null; + blocks = process_math(start, last, de_tilde, math, blocks) + start = null + end = null + last = null } - return [de_tilde(blocks.join("")), math]; -}; + return [de_tilde(blocks.join('')), math] +} -// -// Put back the math strings that were saved, -// and clear the math array (no need to keep it around). -// +// Put back the math strings that were saved, and clear the math array (no need +// to keep it around). var replace_math = function (text, math) { - // - // Replaces a math placeholder with its corresponding group. - // The math delimiters "\\(", "\\[", "\\)" and "\\]" are replaced - // removing one backslash in order to be interpreted correctly by MathJax. - // - var math_group_process = function (match, n) { - var math_group = math[n]; - if (math_group.substr(0, 3) === "\\\\\(" && math_group.substr(math_group.length - 3) === "\\\\\)") { - math_group = "\\\(" + math_group.substring(3, math_group.length - 3) + "\\\)"; - } else if (math_group.substr(0, 3) === "\\\\\[" && math_group.substr(math_group.length - 3) === "\\\\\]") { - math_group = "\\\[" + math_group.substring(3, math_group.length - 3) + "\\\]"; + // Replaces a math placeholder with its corresponding group. + // The math delimiters "\\(", "\\[", "\\)" and "\\]" are replaced removing + // one backslash in order to be interpreted correctly by MathJax. + var math_group_process = function (match, n) { + var math_group = math[n] + + if (math_group.substr(0, 3) === '\\\\\(' && math_group.substr(math_group.length - 3) === '\\\\\)') { + math_group = '\\\(' + math_group.substring(3, math_group.length - 3) + '\\\)' + } else if (math_group.substr(0, 3) === '\\\\\[' && math_group.substr(math_group.length - 3) === '\\\\\]') { + math_group = '\\\[' + math_group.substring(3, math_group.length - 3) + '\\\]' } - return math_group; - }; + return math_group + } - // Replace all the math group placeholders in the text - // with the saved strings. - text = text.replace(/@@(\d+)@@/g, math_group_process); + // Replace all the math group placeholders in the text with the saved strings. + text = text.replace(/@@(\d+)@@/g, math_group_process) - return text; -}; + return text +} module.exports = { - remove_math : remove_math, - replace_math : replace_math -}; + remove_math: remove_math, + replace_math: replace_math, +} From aa3b063413074e3bc30f2c2a15a520a1e9eb87eb Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 14 Sep 2019 14:13:39 +0200 Subject: [PATCH 041/266] mathExtractor: Change under_score names to camelCase --- src/mathExtractor.js | 48 ++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/mathExtractor.js b/src/mathExtractor.js index 08d43b2..e3f8ce7 100644 --- a/src/mathExtractor.js +++ b/src/mathExtractor.js @@ -19,8 +19,8 @@ var MATHSPLIT = /(\$\$?|\\(?:begin|end)\{[a-z]*\*?\}|\\[{}$]|[{}]|(?:\n\s*)+|@@\ // - Replace &, <, and > by named entities. // - Clear the current math positions and store the index of the math, then // push the math string onto the storage array. -// - The pre_process function is called on all blocks if it has been passed in -var process_math = function (i, j, pre_process, math, blocks) { +// - The preProcess function is called on all blocks if it has been passed in +var processMath = function (i, j, preProcess, math, blocks) { var block = blocks.slice(i, j + 1).join('') .replace(/&/g, '&') // use HTML entity for & .replace(/ $foo ` and `$bar are variables. // var hasCodeSpans = /`/.test(text) - var de_tilde + var deTilde if (hasCodeSpans) { var tilde = function (wholematch) { return wholematch.replace(/\$/g, '~D') @@ -68,13 +68,13 @@ var remove_math = function (text) { .replace(/~/g, '~T') .replace(/(^|[^\\])(`+)([^\n]*?[^`\n])\2(?!`)/gm, tilde) .replace(/^\s{0,3}(`{3,})(.|\n)*?\1/gm, tilde) - de_tilde = function (text) { + deTilde = function (text) { return text.replace(/~([TD])/g, function (wholematch, character) { return { T: '~', D: '$' }[character] }) } } else { - de_tilde = function (text) { return text } + deTilde = function (text) { return text } } // TODO: Test if it works correctly across browsers. The original code uses @@ -97,7 +97,7 @@ var remove_math = function (text) { if (braces) { last = i } else { - blocks = process_math(start, i, de_tilde, math, blocks) + blocks = processMath(start, i, deTilde, math, blocks) start = null end = null last = null @@ -105,7 +105,7 @@ var remove_math = function (text) { } else if (block.match(/\n.*\n/)) { if (last) { i = last - blocks = process_math(start, i, de_tilde, math, blocks) + blocks = processMath(start, i, deTilde, math, blocks) } start = null end = null @@ -135,40 +135,40 @@ var remove_math = function (text) { } } if (last) { - blocks = process_math(start, last, de_tilde, math, blocks) + blocks = processMath(start, last, deTilde, math, blocks) start = null end = null last = null } - return [de_tilde(blocks.join('')), math] + return [deTilde(blocks.join('')), math] } // Put back the math strings that were saved, and clear the math array (no need // to keep it around). -var replace_math = function (text, math) { +var replaceMath = function (text, math) { // Replaces a math placeholder with its corresponding group. // The math delimiters "\\(", "\\[", "\\)" and "\\]" are replaced removing // one backslash in order to be interpreted correctly by MathJax. - var math_group_process = function (match, n) { - var math_group = math[n] + var mathGroupProcess = function (match, n) { + var mathGroup = math[n] - if (math_group.substr(0, 3) === '\\\\\(' && math_group.substr(math_group.length - 3) === '\\\\\)') { - math_group = '\\\(' + math_group.substring(3, math_group.length - 3) + '\\\)' - } else if (math_group.substr(0, 3) === '\\\\\[' && math_group.substr(math_group.length - 3) === '\\\\\]') { - math_group = '\\\[' + math_group.substring(3, math_group.length - 3) + '\\\]' + if (mathGroup.substr(0, 3) === '\\\\\(' && mathGroup.substr(mathGroup.length - 3) === '\\\\\)') { + mathGroup = '\\\(' + mathGroup.substring(3, mathGroup.length - 3) + '\\\)' + } else if (mathGroup.substr(0, 3) === '\\\\\[' && mathGroup.substr(mathGroup.length - 3) === '\\\\\]') { + mathGroup = '\\\[' + mathGroup.substring(3, mathGroup.length - 3) + '\\\]' } - return math_group + return mathGroup } // Replace all the math group placeholders in the text with the saved strings. - text = text.replace(/@@(\d+)@@/g, math_group_process) + text = text.replace(/@@(\d+)@@/g, mathGroupProcess) return text } module.exports = { - remove_math: remove_math, - replace_math: replace_math, + removeMath: removeMath, + replaceMath: replaceMath, } From 464a0b24dea942300e4f8e8033cc4fb3ea9bbb5a Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 14 Sep 2019 14:55:59 +0200 Subject: [PATCH 042/266] mathExtractor: Remove unnecessary escapes in regexps --- src/mathExtractor.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/mathExtractor.js b/src/mathExtractor.js index e3f8ce7..cf0c72b 100644 --- a/src/mathExtractor.js +++ b/src/mathExtractor.js @@ -123,9 +123,9 @@ var removeMath = function (text) { start = i end = block braces = 0 - } else if (block === '\\\\\(' || block === '\\\\\[') { + } else if (block === '\\\\(' || block === '\\\\[') { start = i - end = block.slice(-1) === '(' ? '\\\\\)' : '\\\\\]' + end = block.slice(-1) === '(' ? '\\\\)' : '\\\\]' braces = 0 } else if (block.substr(1, 5) === 'begin') { start = i @@ -153,10 +153,10 @@ var replaceMath = function (text, math) { var mathGroupProcess = function (match, n) { var mathGroup = math[n] - if (mathGroup.substr(0, 3) === '\\\\\(' && mathGroup.substr(mathGroup.length - 3) === '\\\\\)') { - mathGroup = '\\\(' + mathGroup.substring(3, mathGroup.length - 3) + '\\\)' - } else if (mathGroup.substr(0, 3) === '\\\\\[' && mathGroup.substr(mathGroup.length - 3) === '\\\\\]') { - mathGroup = '\\\[' + mathGroup.substring(3, mathGroup.length - 3) + '\\\]' + if (mathGroup.substr(0, 3) === '\\\\(' && mathGroup.substr(mathGroup.length - 3) === '\\\\)') { + mathGroup = '\\(' + mathGroup.substring(3, mathGroup.length - 3) + '\\)' + } else if (mathGroup.substr(0, 3) === '\\\\[' && mathGroup.substr(mathGroup.length - 3) === '\\\\]') { + mathGroup = '\\[' + mathGroup.substring(3, mathGroup.length - 3) + '\\]' } return mathGroup From 443603dd4f64dae47783851b2e99f1ca846c29f0 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 14 Sep 2019 15:18:44 +0200 Subject: [PATCH 043/266] mathExtractor: Convert to TypeScript --- src/{mathExtractor.js => mathExtractor.ts} | 66 +++++++++++----------- 1 file changed, 32 insertions(+), 34 deletions(-) rename src/{mathExtractor.js => mathExtractor.ts} (79%) diff --git a/src/mathExtractor.js b/src/mathExtractor.ts similarity index 79% rename from src/mathExtractor.js rename to src/mathExtractor.ts index cf0c72b..037a320 100644 --- a/src/mathExtractor.js +++ b/src/mathExtractor.ts @@ -1,7 +1,6 @@ // Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. // Based on https://github.com/jupyter/notebook/blob/6.0.1/notebook/static/notebook/js/mathjaxutils.js. -'use strict' // Some magic for deferring mathematical expressions to MathJax by hiding them // from the Markdown parser. @@ -12,7 +11,7 @@ // MATHSPLIT contains the pattern for math delimiters and special symbols // needed for searching for math in the text input. -var MATHSPLIT = /(\$\$?|\\(?:begin|end)\{[a-z]*\*?\}|\\[{}$]|[{}]|(?:\n\s*)+|@@\d+@@|\\\\(?:\(|\)|\[|\]))/i +const MATHSPLIT = /(\$\$?|\\(?:begin|end)\{[a-z]*\*?\}|\\[{}$]|[{}]|(?:\n\s*)+|@@\d+@@|\\\\(?:\(|\)|\[|\]))/i // - The math is in blocks i through j, so collect it into one block and clear // the others. @@ -20,8 +19,11 @@ var MATHSPLIT = /(\$\$?|\\(?:begin|end)\{[a-z]*\*?\}|\\[{}$]|[{}]|(?:\n\s*)+|@@\ // - Clear the current math positions and store the index of the math, then // push the math string onto the storage array. // - The preProcess function is called on all blocks if it has been passed in -var processMath = function (i, j, preProcess, math, blocks) { - var block = blocks.slice(i, j + 1).join('') +function processMath ( + i: number, j: number, preProcess: (block: string) => string, math: string[], blocks: string[], +): string[] { + + let block = blocks.slice(i, j + 1).join('') .replace(/&/g, '&') // use HTML entity for & .replace(//g, '>') // use HTML entity for > @@ -31,11 +33,13 @@ var processMath = function (i, j, preProcess, math, blocks) { j-- } // Replace the current block text with a unique tag to find later. - blocks[i] = '@@' + math.length + '@@' + blocks[i] = `@@${math.length}@@` + if (preProcess) { block = preProcess(block) } math.push(block) + return blocks } @@ -44,12 +48,12 @@ var processMath = function (i, j, preProcess, math, blocks) { // - Math delimiters must match and braces must balance. // - Don't allow math to pass through a double line break (which will be // a paragraph). -var removeMath = function (text) { - var math = [] // stores math strings for later - var start - var end - var last - var braces +export function removeMath (text: string): [string, string[]] { + const math: string[] = [] // stores math strings for later + let start: number | null = null + let end: string | null = null + let last: number | null = null + let braces = 0 // Except for extreme edge cases, this should catch precisely those pieces of // the Markdown source that will later be turned into code spans. While @@ -58,36 +62,35 @@ var removeMath = function (text) { // // `$foo` and `$bar` are variables. --> $foo ` and `$bar are variables. // - var hasCodeSpans = /`/.test(text) - var deTilde + const hasCodeSpans = /`/.test(text) + let deTilde: (text: string) => string + if (hasCodeSpans) { - var tilde = function (wholematch) { - return wholematch.replace(/\$/g, '~D') - } + const tilde = (match: string) => match.replace(/\$/g, '~D') + text = text .replace(/~/g, '~T') .replace(/(^|[^\\])(`+)([^\n]*?[^`\n])\2(?!`)/gm, tilde) .replace(/^\s{0,3}(`{3,})(.|\n)*?\1/gm, tilde) - deTilde = function (text) { - return text.replace(/~([TD])/g, function (wholematch, character) { - return { T: '~', D: '$' }[character] - }) + + deTilde = (text) => { + return text.replace(/~([TD])/g, (_, char: 'T' | 'D') => ({ T: '~', D: '$' }[char])) } } else { - deTilde = function (text) { return text } + deTilde = (text) => text } // TODO: Test if it works correctly across browsers. The original code uses // utils.regex_split() based on http://blog.stevenlevithan.com/archives/cross-browser-split. - var blocks = text.replace(/\r\n?/g, '\n').split(MATHSPLIT) + let blocks = text.replace(/\r\n?/g, '\n').split(MATHSPLIT) - for (var i = 1, m = blocks.length; i < m; i += 2) { - var block = blocks[i] + for (let i = 1, m = blocks.length; i < m; i += 2) { + const block = blocks[i] if (block.charAt(0) === '@') { // Things that look like our math markers will get stored and then // retrieved along with the math. - blocks[i] = '@@' + math.length + '@@' + blocks[i] = `@@${math.length}@@` math.push(block) } else if (start) { @@ -135,7 +138,7 @@ var removeMath = function (text) { } } if (last) { - blocks = processMath(start, last, deTilde, math, blocks) + blocks = processMath(start || 0, last, deTilde, math, blocks) start = null end = null last = null @@ -145,13 +148,13 @@ var removeMath = function (text) { // Put back the math strings that were saved, and clear the math array (no need // to keep it around). -var replaceMath = function (text, math) { +export function replaceMath (text: string, math: string[]): string { // Replaces a math placeholder with its corresponding group. // The math delimiters "\\(", "\\[", "\\)" and "\\]" are replaced removing // one backslash in order to be interpreted correctly by MathJax. - var mathGroupProcess = function (match, n) { - var mathGroup = math[n] + const mathGroupProcess = (_: any, n: string) => { + let mathGroup = math[Number(n)] if (mathGroup.substr(0, 3) === '\\\\(' && mathGroup.substr(mathGroup.length - 3) === '\\\\)') { mathGroup = '\\(' + mathGroup.substring(3, mathGroup.length - 3) + '\\)' @@ -167,8 +170,3 @@ var replaceMath = function (text, math) { return text } - -module.exports = { - removeMath: removeMath, - replaceMath: replaceMath, -} From 4e15e765730dd816f829b582e4f6db0e8ea90201 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 14 Sep 2019 16:03:05 +0200 Subject: [PATCH 044/266] mathExtractor: Modernize and refactor --- src/mathExtractor.ts | 181 +++++++++++++++++++++---------------------- 1 file changed, 87 insertions(+), 94 deletions(-) diff --git a/src/mathExtractor.ts b/src/mathExtractor.ts index 037a320..4588b85 100644 --- a/src/mathExtractor.ts +++ b/src/mathExtractor.ts @@ -1,6 +1,7 @@ // Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. // Based on https://github.com/jupyter/notebook/blob/6.0.1/notebook/static/notebook/js/mathjaxutils.js. +import { escapeHTML } from './utils' // Some magic for deferring mathematical expressions to MathJax by hiding them // from the Markdown parser. @@ -9,38 +10,56 @@ // Other minor modifications are also due to StackExchange and are used with // permission. -// MATHSPLIT contains the pattern for math delimiters and special symbols -// needed for searching for math in the text input. -const MATHSPLIT = /(\$\$?|\\(?:begin|end)\{[a-z]*\*?\}|\\[{}$]|[{}]|(?:\n\s*)+|@@\d+@@|\\\\(?:\(|\)|\[|\]))/i +// The pattern for math delimiters and special symbols needed for searching for +// math in the text input. +const mathSplitRx = /(\$\$?|\\(?:begin|end)\{[a-z]*\*?\}|\\[{}$]|[{}]|(?:\n\s*)+|@@\d+@@|\\\\(?:\(|\)|\[|\]))/i -// - The math is in blocks i through j, so collect it into one block and clear -// the others. +// Except for extreme edge cases, this should catch precisely those pieces of +// the Markdown source that will later be turned into code spans. While +// MathJax will not TeXify code spans, we still have to consider them at this +// point; the following issue has happened several times: +// +// `$foo` and `$bar` are variables. --> $foo ` and `$bar are variables. +// +function escapeCodes (text: string): string { + const escapeDolar = (match: string) => match.replace(/\$/g, '~D') + + return text + .replace(/~/g, '~T') + .replace(/(^|[^\\])(`+)([^\n]*?[^`\n])\2(?!`)/gm, escapeDolar) + .replace(/^\s{0,3}(`{3,})(.|\n)*?\1/gm, escapeDolar) +} + +function unescapeCodes (text: string): string { + const subs = { T: '~', D: '$' } + + return text.replace(/~([TD])/g, (_, char: keyof typeof subs) => subs[char]) +} + +// - The math is in blocks start through end, so collect it into one block and +// clear the others. // - Replace &, <, and > by named entities. // - Clear the current math positions and store the index of the math, then // push the math string onto the storage array. // - The preProcess function is called on all blocks if it has been passed in function processMath ( - i: number, j: number, preProcess: (block: string) => string, math: string[], blocks: string[], -): string[] { + preProcess: (str: string) => string, + math: string[], + blocks: string[], + start: number, + end: number, +): void { - let block = blocks.slice(i, j + 1).join('') - .replace(/&/g, '&') // use HTML entity for & - .replace(//g, '>') // use HTML entity for > + const block = escapeHTML(blocks.slice(start, end + 1).join('')) - while (j > i) { - blocks[j] = '' - j-- + while (end > start) { + blocks[end] = '' + end-- } // Replace the current block text with a unique tag to find later. - blocks[i] = `@@${math.length}@@` + blocks[start] = `@@${math.length}@@` - if (preProcess) { - block = preProcess(block) - } - math.push(block) - - return blocks + math.push(preProcess(block)) } // - Break up the text into its component parts and search through them for @@ -49,101 +68,78 @@ function processMath ( // - Don't allow math to pass through a double line break (which will be // a paragraph). export function removeMath (text: string): [string, string[]] { - const math: string[] = [] // stores math strings for later - let start: number | null = null - let end: string | null = null - let last: number | null = null - let braces = 0 - - // Except for extreme edge cases, this should catch precisely those pieces of - // the Markdown source that will later be turned into code spans. While - // MathJax will not TeXify code spans, we still have to consider them at this - // point; the following issue has happened several times: - // - // `$foo` and `$bar` are variables. --> $foo ` and `$bar are variables. - // - const hasCodeSpans = /`/.test(text) - let deTilde: (text: string) => string + const hasCodeSpans = text.includes('`') if (hasCodeSpans) { - const tilde = (match: string) => match.replace(/\$/g, '~D') - - text = text - .replace(/~/g, '~T') - .replace(/(^|[^\\])(`+)([^\n]*?[^`\n])\2(?!`)/gm, tilde) - .replace(/^\s{0,3}(`{3,})(.|\n)*?\1/gm, tilde) - - deTilde = (text) => { - return text.replace(/~([TD])/g, (_, char: 'T' | 'D') => ({ T: '~', D: '$' }[char])) - } - } else { - deTilde = (text) => text + text = escapeCodes(text) } + const unescape = hasCodeSpans ? unescapeCodes : (x: string) => x + + const math: string[] = [] // stores math strings for later // TODO: Test if it works correctly across browsers. The original code uses // utils.regex_split() based on http://blog.stevenlevithan.com/archives/cross-browser-split. - let blocks = text.replace(/\r\n?/g, '\n').split(MATHSPLIT) + const blocks = text.replace(/\r\n?/g, '\n').split(mathSplitRx) - for (let i = 1, m = blocks.length; i < m; i += 2) { + let startIdx: number | null = null // the blocks' index where the current math starts + let lastIdx: number | null = null // the blocks' index where the current math ends + let endDelim: string | null = null // end delimiter of the current math expression + let bracesLevel = 0 // nesting level of the braces + + for (let i = 1; i < blocks.length; i += 2) { const block = blocks[i] - if (block.charAt(0) === '@') { + if (block.startsWith('@')) { // Things that look like our math markers will get stored and then // retrieved along with the math. blocks[i] = `@@${math.length}@@` math.push(block) - } else if (start) { + } else if (startIdx) { // If we are in math, look for the end delimiter, but don't go past // double line breaks, and and balance braces within the math. - if (block === end) { - if (braces) { - last = i + if (block === endDelim) { + if (bracesLevel) { + lastIdx = i } else { - blocks = processMath(start, i, deTilde, math, blocks) - start = null - end = null - last = null + processMath(unescape, math, blocks, startIdx, i) + startIdx = endDelim = lastIdx = null } } else if (block.match(/\n.*\n/)) { - if (last) { - i = last - blocks = processMath(start, i, deTilde, math, blocks) + if (lastIdx) { + i = lastIdx + processMath(unescape, math, blocks, startIdx, i) } - start = null - end = null - last = null - braces = 0 + startIdx = endDelim = lastIdx = null + bracesLevel = 0 } else if (block === '{') { - braces++ - } else if (block === '}' && braces) { - braces-- + bracesLevel++ + } else if (block === '}' && bracesLevel) { + bracesLevel-- } } else { // Look for math start delimiters and when found, set up // the end delimiter. if (block === '$' || block === '$$') { - start = i - end = block - braces = 0 + startIdx = i + endDelim = block + bracesLevel = 0 } else if (block === '\\\\(' || block === '\\\\[') { - start = i - end = block.slice(-1) === '(' ? '\\\\)' : '\\\\]' - braces = 0 - } else if (block.substr(1, 5) === 'begin') { - start = i - end = '\\end' + block.substr(6) - braces = 0 + startIdx = i + endDelim = block.endsWith('(') ? '\\\\)' : '\\\\]' + bracesLevel = 0 + } else if (block.startsWith('\\begin')) { + startIdx = i + endDelim = '\\end' + block.substr(6) + bracesLevel = 0 } } } - if (last) { - blocks = processMath(start || 0, last, deTilde, math, blocks) - start = null - end = null - last = null + if (lastIdx) { + processMath(unescape, math, blocks, startIdx || 0, lastIdx) + startIdx = endDelim = lastIdx = null } - return [deTilde(blocks.join('')), math] + return [unescape(blocks.join('')), math] } // Put back the math strings that were saved, and clear the math array (no need @@ -154,19 +150,16 @@ export function replaceMath (text: string, math: string[]): string { // The math delimiters "\\(", "\\[", "\\)" and "\\]" are replaced removing // one backslash in order to be interpreted correctly by MathJax. const mathGroupProcess = (_: any, n: string) => { - let mathGroup = math[Number(n)] + const mathGroup = math[Number(n)] + const first3 = mathGroup.slice(0, 3) + const last3 = mathGroup.slice(-3) - if (mathGroup.substr(0, 3) === '\\\\(' && mathGroup.substr(mathGroup.length - 3) === '\\\\)') { - mathGroup = '\\(' + mathGroup.substring(3, mathGroup.length - 3) + '\\)' - } else if (mathGroup.substr(0, 3) === '\\\\[' && mathGroup.substr(mathGroup.length - 3) === '\\\\]') { - mathGroup = '\\[' + mathGroup.substring(3, mathGroup.length - 3) + '\\]' + if ((first3 === '\\\\(' && last3 === '\\\\)') || (first3 === '\\\\[' && last3 === '\\\\]')) { + return mathGroup.slice(1, -3) + last3.slice(1) } - return mathGroup } // Replace all the math group placeholders in the text with the saved strings. - text = text.replace(/@@(\d+)@@/g, mathGroupProcess) - - return text + return text.replace(/@@(\d+)@@/g, mathGroupProcess) } From 327856497ca0d6714d593a1f8fe67056d1e25378 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 14 Sep 2019 19:51:23 +0200 Subject: [PATCH 045/266] mathExtractor: Don't modify delimiters in replaceMath() --- src/mathExtractor.ts | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/src/mathExtractor.ts b/src/mathExtractor.ts index 4588b85..a74a6bc 100644 --- a/src/mathExtractor.ts +++ b/src/mathExtractor.ts @@ -145,21 +145,5 @@ export function removeMath (text: string): [string, string[]] { // Put back the math strings that were saved, and clear the math array (no need // to keep it around). export function replaceMath (text: string, math: string[]): string { - - // Replaces a math placeholder with its corresponding group. - // The math delimiters "\\(", "\\[", "\\)" and "\\]" are replaced removing - // one backslash in order to be interpreted correctly by MathJax. - const mathGroupProcess = (_: any, n: string) => { - const mathGroup = math[Number(n)] - const first3 = mathGroup.slice(0, 3) - const last3 = mathGroup.slice(-3) - - if ((first3 === '\\\\(' && last3 === '\\\\)') || (first3 === '\\\\[' && last3 === '\\\\]')) { - return mathGroup.slice(1, -3) + last3.slice(1) - } - return mathGroup - } - - // Replace all the math group placeholders in the text with the saved strings. - return text.replace(/@@(\d+)@@/g, mathGroupProcess) + return text.replace(/@@(\d+)@@/g, (_, n) => math[Number(n)]) } From cd11e47f541a1fff6962dc94a6ec2638d2a0e47e Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 14 Sep 2019 20:27:56 +0200 Subject: [PATCH 046/266] mathExtractor: Improve docs and function names --- src/mathExtractor.ts | 58 +++++++++++++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/src/mathExtractor.ts b/src/mathExtractor.ts index a74a6bc..c8145f9 100644 --- a/src/mathExtractor.ts +++ b/src/mathExtractor.ts @@ -14,13 +14,17 @@ import { escapeHTML } from './utils' // math in the text input. const mathSplitRx = /(\$\$?|\\(?:begin|end)\{[a-z]*\*?\}|\\[{}$]|[{}]|(?:\n\s*)+|@@\d+@@|\\\\(?:\(|\)|\[|\]))/i -// Except for extreme edge cases, this should catch precisely those pieces of -// the Markdown source that will later be turned into code spans. While -// MathJax will not TeXify code spans, we still have to consider them at this -// point; the following issue has happened several times: -// -// `$foo` and `$bar` are variables. --> $foo ` and `$bar are variables. -// +/** + * Escapes dollar characters (`$`) inside in-line codes and fenced code blocks + * found in the given Markdown text. + * + * Except for extreme edge cases, this should catch precisely those pieces of + * the Markdown source that will later be turned into code spans. While + * MathJax will not TeXify code spans, we still have to consider them at this + * point; the following issue has happened several times: + * + * `$foo` and `$bar` are variables. --> $foo ` and `$bar are variables. + */ function escapeCodes (text: string): string { const escapeDolar = (match: string) => match.replace(/\$/g, '~D') @@ -30,6 +34,9 @@ function escapeCodes (text: string): string { .replace(/^\s{0,3}(`{3,})(.|\n)*?\1/gm, escapeDolar) } +/** + * Reverts escaping performed by `escapeCodes()`. + */ function unescapeCodes (text: string): string { const subs = { T: '~', D: '$' } @@ -44,8 +51,8 @@ function unescapeCodes (text: string): string { // - The preProcess function is called on all blocks if it has been passed in function processMath ( preProcess: (str: string) => string, - math: string[], - blocks: string[], + math: string[], // will be modified in-place + blocks: string[], // will be modified in-place start: number, end: number, ): void { @@ -62,12 +69,23 @@ function processMath ( math.push(preProcess(block)) } -// - Break up the text into its component parts and search through them for -// math delimiters, braces, line breaks, etc. -// - Math delimiters must match and braces must balance. -// - Don't allow math to pass through a double line break (which will be -// a paragraph). -export function removeMath (text: string): [string, string[]] { +/** + * Extracts delimited math expressions from the given *text*, substitutes them + * with numbered markers and returns a tuple of the modified *text* and an + * array of the extracted math expressions (including the delimiters). + * + * NOTE: If the *text* contains substrings that match our markers (`@@\d+@@`) + * used to substitute math expressions, they will be substituted too - to avoid + * errors when restoring math expressions. Thus the returned array will contain + * even items that are not math expressions. + */ +export function extractMath (text: string): [string, string[]] { + // - Break up the text into its component parts and search through them for + // math delimiters, braces, line breaks, etc. + // - Math delimiters must match and braces must balance. + // - Don't allow math to pass through a double line break (which will be + // a paragraph). + const hasCodeSpans = text.includes('`') if (hasCodeSpans) { @@ -142,8 +160,10 @@ export function removeMath (text: string): [string, string[]] { return [unescape(blocks.join('')), math] } -// Put back the math strings that were saved, and clear the math array (no need -// to keep it around). -export function replaceMath (text: string, math: string[]): string { - return text.replace(/@@(\d+)@@/g, (_, n) => math[Number(n)]) +/** + * Replaces markers injected by `extractMath()` into the given *text* with + * strings from the given *chunks* array. + */ +export function restoreMath (text: string, chunks: string[]): string { + return text.replace(/@@(\d+)@@/g, (_, n) => chunks[Number(n)]) } From 016fae6eb8c1cf822fe0f45db89aed8ca3a1716a Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 14 Sep 2019 21:33:55 +0200 Subject: [PATCH 047/266] mathExtractor: Parse extracted delimited expressions --- src/mathExtractor.ts | 43 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/src/mathExtractor.ts b/src/mathExtractor.ts index c8145f9..f8bd8f8 100644 --- a/src/mathExtractor.ts +++ b/src/mathExtractor.ts @@ -10,10 +10,45 @@ import { escapeHTML } from './utils' // Other minor modifications are also due to StackExchange and are used with // permission. +export type ExtractedChunk = { + raw: string, +} | { + raw: string, + math: string, + displayMode: boolean, +} + // The pattern for math delimiters and special symbols needed for searching for // math in the text input. const mathSplitRx = /(\$\$?|\\(?:begin|end)\{[a-z]*\*?\}|\\[{}$]|[{}]|(?:\n\s*)+|@@\d+@@|\\\\(?:\(|\)|\[|\]))/i +const delimiters = { + '$$': { displayMode: true }, + '$': { displayMode: false }, + '\\\\[': { displayMode: true }, + '\\\\(': { displayMode: false }, +} + +/** + * Parses the given string that may contain a delimited math expression. + * Use this function to parse extracted chunks from `extractMath()`. + */ +function parseDelimitedMath (raw: string): ExtractedChunk { + const delim = Object.keys(delimiters) + .find(s => raw.startsWith(s)) as keyof typeof delimiters | undefined + + if (delim) { + const math = raw.slice(delim.length, -delim.length) + return { raw, math, ...delimiters[delim] } + + } else if (raw.startsWith('\\begin')) { + return { raw, math: raw, displayMode: true } + + } else { + return { raw } + } +} + /** * Escapes dollar characters (`$`) inside in-line codes and fenced code blocks * found in the given Markdown text. @@ -72,14 +107,14 @@ function processMath ( /** * Extracts delimited math expressions from the given *text*, substitutes them * with numbered markers and returns a tuple of the modified *text* and an - * array of the extracted math expressions (including the delimiters). + * array of the extracted expressions. * * NOTE: If the *text* contains substrings that match our markers (`@@\d+@@`) * used to substitute math expressions, they will be substituted too - to avoid * errors when restoring math expressions. Thus the returned array will contain - * even items that are not math expressions. + * even items that are not math expressions! */ -export function extractMath (text: string): [string, string[]] { +export function extractMath (text: string): [string, ExtractedChunk[]] { // - Break up the text into its component parts and search through them for // math delimiters, braces, line breaks, etc. // - Math delimiters must match and braces must balance. @@ -157,7 +192,7 @@ export function extractMath (text: string): [string, string[]] { processMath(unescape, math, blocks, startIdx || 0, lastIdx) startIdx = endDelim = lastIdx = null } - return [unescape(blocks.join('')), math] + return [unescape(blocks.join('')), math.map(parseDelimitedMath)] } /** From 431fb1331dc2ed71a8c6467e722892017e0ae02c Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 15 Sep 2019 20:45:29 +0200 Subject: [PATCH 048/266] CI: Add API Key for npm --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c968c67..9b4378c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,7 @@ deploy: provider: npm email: jakub@jirutka.cz api_key: - secure: TODO + secure: "0D1IFNeu0BuCg8SCuNUNXARDARNQbmPCH1qivlIRURaoe5Lns/oTunavJ7eIrvPA/1wMOozWGo6TlVb0ucnWNJ+ux31XTX1BGFoTAUw/dZk3C3s0HT7WuTKLrO6itIQtoBIWMfKAAe5doF00fBDQgFgSwU64CgWsZ2GUNKxXOAfkagInYHU5izGGsS+HQ5FyR5QqQzkHNUiLYs9IA1V3TF2s93ITmcqQZlah/n03BChBEA/LRkMqlEF+1YKaO+4q0PglHYJ1vlN/8n/TQTmAgsm4S67x+ADcBA/3M5UawXPGf+ZyYr1sAgjnE/Rt5BrhApnzrb2m1z1vig1uRPL/bsKADZfSDJVyr+dU4zl73g8U9QtpOMdlOphLWdgWix+JmbUVgtu/iC83zjBBHEfP97NFNJLVkBhnSxoX8xu9+za0jYKlSln5Khoegh1lw9YGx1A/3Z34FxY+G5Fh2cUidrMBrI4F9BJWoiDAnEvvB3yFhZtqbDta1p2iROqwW8/Z5M1CjtyMnemvPi/9oGvlQVaqn7mr45srHIJHjqxdS9HMLDhy7fKr407NvSOl6N7VNxOTW2KfawAkCWqJccEvfRnoaouRhUhdMcDTqiIMl8hYO4jEML6ioJisaLksWXeT9Sv6QoNbPPaWoGjDc9/c0eedfn49U4YMnjCqfIpZAdo=" # 9919......6b7c skip_cleanup: true on: tags: true From e8ed2556467a34fe129f64170ef0e2b45b7266c5 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 16 Sep 2019 23:02:02 +0200 Subject: [PATCH 049/266] Don't escape text passed to ansiCodeRenderer The current version of ansi_up does it implicitly. --- src/renderer.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/renderer.ts b/src/renderer.ts index 0fc0205..f48ba43 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -30,8 +30,11 @@ export type Options = { /** A function for creating HTMLElement. */ elementCreator: ElementCreator, - - /** A function for converting ANSI escape sequences in the given text to HTML. */ + /** + * A function for converting ANSI escape sequences in the given *text* to HTML. + * It gets the text from the cell as-is, without prior escaping, so it must + * escape special characters unsafe for HTML (ansi_up does it implicitly)! + */ ansiCodesRenderer?: (text: string) => string, /** A function for highlighting the given source code, it should return an HTML string. */ @@ -89,7 +92,7 @@ function notebookLanguage ({ metadata: meta }: Notebook): string { */ function buildRenderer (opts: Options) { const renderMarkdown = opts.markdownRenderer || identity - const renderAnsiCodes = opts.ansiCodesRenderer || identity + const renderAnsiCodes = opts.ansiCodesRenderer || escapeHTML const highlightCode = opts.codeHighlighter || identity const el = opts.elementCreator @@ -201,17 +204,13 @@ function buildRenderer (opts: Options) { }, Error: (error: NbError): HTMLElement => { - const raw = error.traceback.join('\n') - const html = renderAnsiCodes(escapeHTML(raw)) - + const html = renderAnsiCodes(error.traceback.join('\n')) // Class "pyerr" is for backward compatibility with notebook.js. return el('pre', ['error', 'pyerr'], html) }, Stream: (stream: NbStream): HTMLElement => { - const raw = joinText(stream.text) - const html = renderAnsiCodes(escapeHTML(raw)) - + const html = renderAnsiCodes(joinText(stream.text)) return el('pre', [stream.name], html) }, }) From 18a7a512cc2d1db115825388bd56777002abf845 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 16 Sep 2019 23:07:51 +0200 Subject: [PATCH 050/266] Don't escape text passed to codeHighlighter highlight.js does it implicitly. --- src/renderer.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/renderer.ts b/src/renderer.ts index f48ba43..bd17150 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -36,8 +36,12 @@ export type Options = { * escape special characters unsafe for HTML (ansi_up does it implicitly)! */ ansiCodesRenderer?: (text: string) => string, - - /** A function for highlighting the given source code, it should return an HTML string. */ + /** + * A function for highlighting the given source *code*, it should return an + * HTML string. It gets the text from the cell as-is, without prior escaping, + * so it must escape special characters unsafe for HTML (highlight.js does it + * implicitly)! + */ codeHighlighter?: (code: string, lang: string) => string, /** A function for converting the given Markdown source to HTML. */ @@ -93,7 +97,7 @@ function notebookLanguage ({ metadata: meta }: Notebook): string { function buildRenderer (opts: Options) { const renderMarkdown = opts.markdownRenderer || identity const renderAnsiCodes = opts.ansiCodesRenderer || escapeHTML - const highlightCode = opts.codeHighlighter || identity + const highlightCode = opts.codeHighlighter || escapeHTML const el = opts.elementCreator const el2 = (tag: string, classes: string[]) => (data: string) => el(tag, classes, data) @@ -162,7 +166,7 @@ function buildRenderer (opts: Options) { return el('div') } const lang = notebookLanguage(notebook) - const html = highlightCode(escapeHTML(joinText(cell.source)), lang) + const html = highlightCode(joinText(cell.source), lang) const codeEl = el('code', { 'classes': `lang-${lang}`, 'data-language': lang }, html) const preEl = el('pre', [], [codeEl]) From ca9bae9483c37cf66fb34f32b78b35ee7556e77f Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 17 Sep 2019 12:31:37 +0200 Subject: [PATCH 051/266] Don't escape math that will be passed to math renderer KaTeX doesn't interpret escaped <>& correctly and it escapes unsafe characters in the output implicitly. --- src/mathExtractor.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/mathExtractor.ts b/src/mathExtractor.ts index f8bd8f8..2e95738 100644 --- a/src/mathExtractor.ts +++ b/src/mathExtractor.ts @@ -1,7 +1,6 @@ // Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. // Based on https://github.com/jupyter/notebook/blob/6.0.1/notebook/static/notebook/js/mathjaxutils.js. -import { escapeHTML } from './utils' // Some magic for deferring mathematical expressions to MathJax by hiding them // from the Markdown parser. @@ -80,7 +79,6 @@ function unescapeCodes (text: string): string { // - The math is in blocks start through end, so collect it into one block and // clear the others. -// - Replace &, <, and > by named entities. // - Clear the current math positions and store the index of the math, then // push the math string onto the storage array. // - The preProcess function is called on all blocks if it has been passed in @@ -92,7 +90,7 @@ function processMath ( end: number, ): void { - const block = escapeHTML(blocks.slice(start, end + 1).join('')) + const block = blocks.slice(start, end + 1).join('') while (end > start) { blocks[end] = '' From 86754fbd98a91590524f93b6318e372ac1fdce91 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 16 Sep 2019 23:12:16 +0200 Subject: [PATCH 052/266] Reformat comments on renderer.Options --- src/renderer.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/renderer.ts b/src/renderer.ts index bd17150..3dd4e36 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -18,7 +18,9 @@ import { export type Options = { - /** An object with additional data renderers indexed by a media type. */ + /** + * An object with additional data renderers indexed by a media type. + */ dataRenderers?: DataRenderers, /** * An array of the supported media types in the priority order. When a cell @@ -27,8 +29,9 @@ export type Options = { * `Object.keys({ ...dataRenderers, ...builtinRenderers })`. */ dataRenderersOrder?: string[], - - /** A function for creating HTMLElement. */ + /** + * A function for creating HTMLElement. + */ elementCreator: ElementCreator, /** * A function for converting ANSI escape sequences in the given *text* to HTML. @@ -43,8 +46,9 @@ export type Options = { * implicitly)! */ codeHighlighter?: (code: string, lang: string) => string, - - /** A function for converting the given Markdown source to HTML. */ + /** + * A function for converting the given Markdown source to HTML. + */ markdownRenderer?: (markup: string) => string, } From 34cf2c462068ba220a5cf12efd2e6f4e7ac081e1 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 17 Sep 2019 00:26:27 +0200 Subject: [PATCH 053/266] Replace if-else-if statements with switch statement I think that it's a bit more readable. But still, why TypeScript still doesn't have pattern matching, only this crappy C-like switch? :( --- src/mathExtractor.ts | 67 ++++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 28 deletions(-) diff --git a/src/mathExtractor.ts b/src/mathExtractor.ts index 2e95738..a9f3105 100644 --- a/src/mathExtractor.ts +++ b/src/mathExtractor.ts @@ -149,40 +149,51 @@ export function extractMath (text: string): [string, ExtractedChunk[]] { } else if (startIdx) { // If we are in math, look for the end delimiter, but don't go past // double line breaks, and and balance braces within the math. - if (block === endDelim) { - if (bracesLevel) { - lastIdx = i - } else { - processMath(unescape, math, blocks, startIdx, i) + switch (block) { + case endDelim: + if (bracesLevel) { + lastIdx = i + } else { + processMath(unescape, math, blocks, startIdx, i) + startIdx = endDelim = lastIdx = null + } + break + case '{': + bracesLevel++ + break + case '}': + if (bracesLevel) { bracesLevel-- } + break + default: if (block.match(/\n.*\n/)) { + if (lastIdx) { + i = lastIdx + processMath(unescape, math, blocks, startIdx, i) + } startIdx = endDelim = lastIdx = null + bracesLevel = 0 } - } else if (block.match(/\n.*\n/)) { - if (lastIdx) { - i = lastIdx - processMath(unescape, math, blocks, startIdx, i) - } - startIdx = endDelim = lastIdx = null - bracesLevel = 0 - } else if (block === '{') { - bracesLevel++ - } else if (block === '}' && bracesLevel) { - bracesLevel-- } } else { // Look for math start delimiters and when found, set up // the end delimiter. - if (block === '$' || block === '$$') { - startIdx = i - endDelim = block - bracesLevel = 0 - } else if (block === '\\\\(' || block === '\\\\[') { - startIdx = i - endDelim = block.endsWith('(') ? '\\\\)' : '\\\\]' - bracesLevel = 0 - } else if (block.startsWith('\\begin')) { - startIdx = i - endDelim = '\\end' + block.substr(6) - bracesLevel = 0 + switch (block) { + case '$': + case '$$': + startIdx = i + endDelim = block + bracesLevel = 0 + break + case '\\\\(': + case '\\\\[': + startIdx = i + endDelim = block.endsWith('(') ? '\\\\)' : '\\\\]' + bracesLevel = 0 + break + default: if (block.startsWith('\\begin')) { + startIdx = i + endDelim = '\\end' + block.substr(6) + bracesLevel = 0 + } } } } From 457e1716d9de2b77f6e3a662efbf0db0c4fa54b9 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 17 Sep 2019 22:36:32 +0200 Subject: [PATCH 054/266] mathExtractor: Escape marker-like sequences instead of returning them --- src/mathExtractor.ts | 54 ++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/src/mathExtractor.ts b/src/mathExtractor.ts index a9f3105..695a6f9 100644 --- a/src/mathExtractor.ts +++ b/src/mathExtractor.ts @@ -9,17 +9,15 @@ // Other minor modifications are also due to StackExchange and are used with // permission. -export type ExtractedChunk = { +export type MathExpression = { raw: string, -} | { - raw: string, - math: string, + value: string, displayMode: boolean, } // The pattern for math delimiters and special symbols needed for searching for // math in the text input. -const mathSplitRx = /(\$\$?|\\(?:begin|end)\{[a-z]*\*?\}|\\[{}$]|[{}]|(?:\n\s*)+|@@\d+@@|\\\\(?:\(|\)|\[|\]))/i +const mathSplitRx = /(\$\$?|\\(?:begin|end)\{[a-z]*\*?\}|\\[{}$]|[{}]|(?:\n\s*)+|\\\\(?:\(|\)|\[|\]))/i const delimiters = { '$$': { displayMode: true }, @@ -32,19 +30,16 @@ const delimiters = { * Parses the given string that may contain a delimited math expression. * Use this function to parse extracted chunks from `extractMath()`. */ -function parseDelimitedMath (raw: string): ExtractedChunk { +function parseDelimitedMath (raw: string): MathExpression { const delim = Object.keys(delimiters) .find(s => raw.startsWith(s)) as keyof typeof delimiters | undefined if (delim) { - const math = raw.slice(delim.length, -delim.length) - return { raw, math, ...delimiters[delim] } - - } else if (raw.startsWith('\\begin')) { - return { raw, math: raw, displayMode: true } + const value = raw.slice(delim.length, -delim.length) + return { raw, value, ...delimiters[delim] } } else { - return { raw } + return { raw, value: raw, displayMode: true } } } @@ -97,7 +92,7 @@ function processMath ( end-- } // Replace the current block text with a unique tag to find later. - blocks[start] = `@@${math.length}@@` + blocks[start] = `@@${math.length + 1}@@` math.push(preProcess(block)) } @@ -107,20 +102,22 @@ function processMath ( * with numbered markers and returns a tuple of the modified *text* and an * array of the extracted expressions. * - * NOTE: If the *text* contains substrings that match our markers (`@@\d+@@`) - * used to substitute math expressions, they will be substituted too - to avoid - * errors when restoring math expressions. Thus the returned array will contain - * even items that are not math expressions! + * NOTE: Sequences that looks like our markers (`@@\d+@@`) will be escaped by + * adding a zero (`0`) before the number. They will be unescaped in + * `restoreMath()`. */ -export function extractMath (text: string): [string, ExtractedChunk[]] { +export function extractMath (text: string): [string, MathExpression[]] { // - Break up the text into its component parts and search through them for // math delimiters, braces, line breaks, etc. // - Math delimiters must match and braces must balance. // - Don't allow math to pass through a double line break (which will be // a paragraph). - const hasCodeSpans = text.includes('`') + // Escape things that look like our math markers so we can distinguish them + // later in `restoreMath()`. + text = text.replace(/@@(\d+)@@/g, (_, n) => `@@0${n}@@`) + const hasCodeSpans = text.includes('`') if (hasCodeSpans) { text = escapeCodes(text) } @@ -140,13 +137,7 @@ export function extractMath (text: string): [string, ExtractedChunk[]] { for (let i = 1; i < blocks.length; i += 2) { const block = blocks[i] - if (block.startsWith('@')) { - // Things that look like our math markers will get stored and then - // retrieved along with the math. - blocks[i] = `@@${math.length}@@` - math.push(block) - - } else if (startIdx) { + if (startIdx) { // If we are in math, look for the end delimiter, but don't go past // double line breaks, and and balance braces within the math. switch (block) { @@ -205,9 +196,12 @@ export function extractMath (text: string): [string, ExtractedChunk[]] { } /** - * Replaces markers injected by `extractMath()` into the given *text* with - * strings from the given *chunks* array. + * Replaces math markers injected by `extractMath()` into the given *text* + * with strings from the given *math* array and unescapes sequences that looks + * like our markers. */ -export function restoreMath (text: string, chunks: string[]): string { - return text.replace(/@@(\d+)@@/g, (_, n) => chunks[Number(n)]) +export function restoreMath (text: string, math: string[]): string { + return text + .replace(/@@([1-9][0-9]*)@@/g, (_, n) => math[Number(n) - 1]) + .replace(/@@0(\d+)@@/g, (_, n) => `@@${n}@@`) } From 030b4297ba89bf06d3383d5680ce096300828e02 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 17 Sep 2019 23:43:14 +0200 Subject: [PATCH 055/266] Add markdownRenderer with marked, katex and highlight.js --- package.json | 4 ++++ src/markdownRenderer.ts | 37 +++++++++++++++++++++++++++++++++++++ yarn.lock | 31 ++++++++++++++++++++++++++++++- 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 src/markdownRenderer.ts diff --git a/package.json b/package.json index dfdf439..a49baf6 100644 --- a/package.json +++ b/package.json @@ -33,11 +33,15 @@ }, "dependencies": { "ansi_up": "^4.0.4", + "highlightjs": "^9.12.0", + "katex": "^0.11.0", "marked": "^0.7.0", "nodom": "^2.2.1" }, "devDependencies": { + "@types/highlightjs": "^9.12.0", "@types/jest": "^24.0.18", + "@types/katex": "^0.10.2", "@types/marked": "^0.6.5", "@types/node": "^10.13.0", "@typescript-eslint/eslint-plugin": "^1.13.0", diff --git a/src/markdownRenderer.ts b/src/markdownRenderer.ts new file mode 100644 index 0000000..1e9d40f --- /dev/null +++ b/src/markdownRenderer.ts @@ -0,0 +1,37 @@ +import hjs from 'highlightjs' +import katex, { KatexOptions } from 'katex' +import marked, { MarkedOptions } from 'marked' + +import { extractMath, restoreMath } from './mathExtractor' + + +function highlight (code: string, lang: string): string { + return hjs.getLanguage(lang) + ? hjs.highlight(lang, code, true).value + : code +} + +/** + * Returns a pre-configured marked parser with math support (using KaTeX) + * and code highlighter (highlight.js). + * + * @param {MarkedOptions} markedOpts Options for the marked Markdown renderer. + * @param {KatexOptions} katexOpts Options for the KaTeX math renderer. + */ +export default (markedOpts: MarkedOptions = {}, katexOpts: KatexOptions = {}) => { + markedOpts = { highlight, ...markedOpts } + katexOpts = { strict: false, throwOnError: false, ...katexOpts } + + /** + * Converts the given *markdown* into HTML. + */ + return (markdown: string): string => { + const [text, math] = extractMath(markdown) + const html = marked.parse(text, markedOpts) + + const mathHtml = math.map(({ value, displayMode }) => { + return katex.renderToString(value, { ...katexOpts, displayMode }) + }) + return restoreMath(html, mathHtml) + } +} diff --git a/yarn.lock b/yarn.lock index e6ca284..b2118d7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -325,6 +325,18 @@ resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== +"@types/highlight.js@*": + version "9.12.3" + resolved "https://registry.yarnpkg.com/@types/highlight.js/-/highlight.js-9.12.3.tgz#b672cfaac25cbbc634a0fd92c515f66faa18dbca" + integrity sha512-pGF/zvYOACZ/gLGWdQH8zSwteQS1epp68yRcVLJMgUck/MjEn/FBYmPub9pXT8C1e4a8YZfHo1CKyV8q1vKUnQ== + +"@types/highlightjs@^9.12.0": + version "9.12.0" + resolved "https://registry.yarnpkg.com/@types/highlightjs/-/highlightjs-9.12.0.tgz#2d41f689f63b3746e882dc795cbebe07ab6eaf27" + integrity sha512-MmUcjkDtCBfx2BPeLLTtJ5mFmGgWk9nAgZmNesixaGHOr0tCecsTU2iUgYvhRsWJSts2WbcpAtVPuIzZ0ybJ1A== + dependencies: + "@types/highlight.js" "*" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" @@ -367,6 +379,11 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= +"@types/katex@^0.10.2": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@types/katex/-/katex-0.10.2.tgz#322afa83aba5cca4edcea014ebf0be997135dbd9" + integrity sha512-QYTNuhuDU22gouVoL5kLmBTguu2rPvtp7wL5U5fTFsQkM1ojfUgxFPMFrqOSUofrdWwnZEmblcobdlLXj1lVOw== + "@types/marked@^0.6.5": version "0.6.5" resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.6.5.tgz#3cf2a56ef615dad24aaf99784ef90a9eba4e29d8" @@ -882,7 +899,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.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== @@ -1733,6 +1750,11 @@ has@^1.0.1, has@^1.0.3: dependencies: function-bind "^1.1.1" +highlightjs@^9.12.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/highlightjs/-/highlightjs-9.12.0.tgz#9b84eb42a7aa8488eb69ac79fec44cf495bf72a1" + integrity sha512-eAhWMtDZaOZIQdxIP4UEB1vNp/CVXQPdMSihTSuaExhFIRC0BVpXbtP3mTP1hDoGOyh7nbB3cuC3sOPhG5wGDA== + hosted-git-info@^2.1.4: version "2.8.4" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546" @@ -2540,6 +2562,13 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +katex@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.11.0.tgz#9a870f37dd9a5c90446277754bfc98f905c04bbc" + integrity sha512-RQsU3HSMjLW9AdPpi2zaBwM123goCbUcUbBJfmjcAdA982RgtEUNMmrf+3y8anGjgJLantcNLa/VSK73xztQBg== + dependencies: + commander "^2.19.0" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" From a944bf2d27030b2c09aaea3035a951ee6dcf76ec Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 17 Sep 2019 23:49:21 +0200 Subject: [PATCH 056/266] Pre-configure renderer with all external components --- src/index.ts | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index d05d34a..02c45af 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,11 @@ +import AnsiUp from 'ansi_up' +import hjs from 'highlightjs' +import { KatexOptions } from 'katex' +import { MarkedOptions } from 'marked' import { Document } from 'nodom' import buildElementCreator from './elementCreator' +import buildMarkdownRenderer from './markdownRenderer' import buildRenderer, { Options as RendererOpts, NbRenderer } from './renderer' @@ -8,11 +13,31 @@ export { NbRenderer } export type Options = Partial & { classPrefix?: string, + katexOpts?: KatexOptions, + markedOpts?: MarkedOptions, +} + + +function codeHighlighter (code: string, lang: string): string { + return hjs.getLanguage(lang) + ? hjs.highlight(lang, code).value + : code } export default (opts: Options = {}): NbRenderer => { const doc = new Document() const elementCreator = buildElementCreator(doc.createElement.bind(doc), opts.classPrefix) - return buildRenderer({ elementCreator, ...opts }) + const ansiUp = new AnsiUp() + const ansiCodesRenderer = ansiUp.ansi_to_html.bind(ansiUp) + + const markdownRenderer = buildMarkdownRenderer(opts.markedOpts, opts.katexOpts) + + return buildRenderer({ + ansiCodesRenderer, + codeHighlighter, + elementCreator, + markdownRenderer, + ...opts, + }) } From cee6f20158b211284a6a594f286436dd62d59dd5 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 17 Sep 2019 23:53:04 +0200 Subject: [PATCH 057/266] Replace ansi_up with anser It's smaller... --- package.json | 2 +- src/index.ts | 10 +++++----- yarn.lock | 10 +++++----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index a49baf6..c707b4b 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "node": ">=10.13.0" }, "dependencies": { - "ansi_up": "^4.0.4", + "anser": "^1.4.8", "highlightjs": "^9.12.0", "katex": "^0.11.0", "marked": "^0.7.0", diff --git a/src/index.ts b/src/index.ts index 02c45af..42e13b2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -import AnsiUp from 'ansi_up' +import anser from 'anser' import hjs from 'highlightjs' import { KatexOptions } from 'katex' import { MarkedOptions } from 'marked' @@ -18,6 +18,10 @@ export type Options = Partial & { } +function ansiCodesRenderer (input: string): string { + return anser.ansiToHtml(anser.escapeForHtml(input)) +} + function codeHighlighter (code: string, lang: string): string { return hjs.getLanguage(lang) ? hjs.highlight(lang, code).value @@ -27,10 +31,6 @@ function codeHighlighter (code: string, lang: string): string { export default (opts: Options = {}): NbRenderer => { const doc = new Document() const elementCreator = buildElementCreator(doc.createElement.bind(doc), opts.classPrefix) - - const ansiUp = new AnsiUp() - const ansiCodesRenderer = ansiUp.ansi_to_html.bind(ansiUp) - const markdownRenderer = buildMarkdownRenderer(opts.markedOpts, opts.katexOpts) return buildRenderer({ diff --git a/yarn.lock b/yarn.lock index b2118d7..82a960d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -502,6 +502,11 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +anser@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.8.tgz#19a3bfc5f0e31c49efaea38f58fd0d136597f2a3" + integrity sha512-tVHucTCKIt9VRrpQKzPtOlwm/3AmyQ7J+QE29ixFnvuE2hm83utEVrN7jJapYkHV6hI0HOHkEX9TOMCzHtwvuA== + ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -529,11 +534,6 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi_up@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/ansi_up/-/ansi_up-4.0.4.tgz#5b8c35f0b02e4476f3f18cf89c3bf48d15d054f6" - integrity sha512-vRxC8q6QY918MbehO869biJW4tiunJdjOhi5fpY6NLOliBQlZhOkKgABJKJqH+JZfb/WfjvjN1chLWI6tODerw== - anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" From 1d4dd89b21f72fac613185fe0ec30eecaed6b0a2 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 18 Sep 2019 00:00:05 +0200 Subject: [PATCH 058/266] Release version 0.1.0-beta.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c707b4b..6741fb4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html", - "version": "0.0.0", + "version": "0.1.0-beta.1", "description": "Convert Jupyter Notebook to static HTML", "author": "Jakub Jirutka ", "license": "MIT", From 526a7b51ea6e06ffd09bc16aa792a6ef5e49ec55 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 18 Sep 2019 13:18:00 +0200 Subject: [PATCH 059/266] Fix wrong type of Notebook.nbformat --- src/nbformat.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nbformat.ts b/src/nbformat.ts index 2101414..244da7a 100644 --- a/src/nbformat.ts +++ b/src/nbformat.ts @@ -14,7 +14,7 @@ export interface Notebook { nbformat_minor: number, /** Notebook format (major number). Incremented between backwards incompatible changes to the notebook format. */ - nbformat: '4', + nbformat: 4, /** Array of cells of the current notebook. */ cells: Cell[], From 745346150e0605695178d1e555af4343ea4d2c6e Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 18 Sep 2019 13:53:07 +0200 Subject: [PATCH 060/266] Add module readNotebookTitle --- src/readNotebookTitle.ts | 48 ++++++++++++ test/readNotebookTitle.test.ts | 134 +++++++++++++++++++++++++++++++++ 2 files changed, 182 insertions(+) create mode 100644 src/readNotebookTitle.ts create mode 100644 test/readNotebookTitle.test.ts diff --git a/src/readNotebookTitle.ts b/src/readNotebookTitle.ts new file mode 100644 index 0000000..030f122 --- /dev/null +++ b/src/readNotebookTitle.ts @@ -0,0 +1,48 @@ +import marked from 'marked' + +import { Notebook, CellType } from './nbformat' + + +class EmptyRenderer extends marked.Renderer { + + constructor (options?: marked.MarkedOptions) { + super(options) + + for (const prop in this) { + if (this[prop] instanceof Function) { + (this as any)[prop] = () => '' + } + } + } +} + +class MainTitleRenderer extends EmptyRenderer { + _titleFound = false + + heading (_text: string, level: number, raw: string, _slugger: marked.Slugger): string { + if (level === 1 && !this._titleFound) { + this._titleFound = true + return raw + } + return '' + } +} + +/** + * Returns title of the given *notebook*, or an empty string if not found. + * + * If the title is not present in the notebook's metadata and the first cell is + * a Markdown cell, it parses it and returns the first level 1 heading. + */ +export default (notebook: Notebook): string => { + if (notebook.metadata.title) { + return notebook.metadata.title + } + if (notebook.cells.length > 0 && notebook.cells[0].cell_type === CellType.Markdown) { + const source = notebook.cells[0].source + const markup = Array.isArray(source) ? source.join('') : source + + return marked.parse(markup, { renderer: new MainTitleRenderer() }) + } + return '' +} diff --git a/test/readNotebookTitle.test.ts b/test/readNotebookTitle.test.ts new file mode 100644 index 0000000..b1998a4 --- /dev/null +++ b/test/readNotebookTitle.test.ts @@ -0,0 +1,134 @@ +import readNotebookTitle from '@/readNotebookTitle' +import { Notebook, CellType, MarkdownCell } from '@/nbformat' + + +const markdownCell = (source: string | string[]): MarkdownCell => ({ + cell_type: CellType.Markdown, + metadata: {}, + source, +}) + +const baseNotebook: Notebook = { + nbformat: 4, + nbformat_minor: 3, + metadata: {}, + cells: [ markdownCell('# Markdown Title\n\nLorem ipsum dolor') ], +} + + +describe('readNotebookTitle', () => { + + describe('when metadata contains title', () => { + const notebook = { + ...baseNotebook, + metadata: { + title: 'Metadata Title', + }, + } + + it('returns title from the metadata', () => { + expect( readNotebookTitle(notebook) ).toEqual('Metadata Title') + }) + }) + + + describe('when metadata does not contain title', () => { + const notebook = baseNotebook + + it('returns level 1 title from markdown cell', () => { + expect( readNotebookTitle(notebook) ).toEqual('Markdown Title') + }) + + + describe('when first cell is a Markdown cell', () => { + + describe('with a single level 1 title', () => { + const notebook = { + ...baseNotebook, + cells: [ + markdownCell([ + '# *Title* Level 1\n', + '\n', + 'Lorem ipsum\n', + '\n', + '## Title Level 2\n', + '\n', + 'dolor sit amet\n', + ]), + ], + } + + it('returns level 1 title with stripped formatting parsed from the first cell', () => { + expect( readNotebookTitle(notebook) ).toEqual('Title Level 1') + }) + }) + + describe('with a single level 1 title not on the first line', () => { + const notebook = { + ...baseNotebook, + cells: [ + markdownCell('Lorem ipsum\n\n# Title Level 1\n\ndolor sit amet.\n'), + ], + } + + it('returns level 1 title parsed from the first cell', () => { + expect( readNotebookTitle(notebook) ).toEqual('Title Level 1') + }) + }) + + describe('with multiple first level titles', () => { + const notebook = { + ...baseNotebook, + cells: [ + markdownCell(['# First Title\n\nLorem ipsum\n\n# Second Title\n\ndolor sit amet\n']), + ], + } + + it('returns the first level 1 title parsed from the first cell', () => { + expect( readNotebookTitle(notebook) ).toEqual('First Title') + }) + }) + + describe('without any level 1 title', () => { + const notebook = { + ...baseNotebook, + cells: [ markdownCell(['Lorem ipsum\n', 'dolor sit amet\n']) ], + } + + it('returns an empty string', () => { + expect( readNotebookTitle(notebook) ).toBe('') + }) + }) + }) + + describe('when first cell is not type Markdown', () => { + const notebook: Notebook = { + ...baseNotebook, + cells: [ + { + cell_type: CellType.Raw, + source: 'Lorem ipsum\n', + metadata: {}, + }, + ], + } + + it('returns an empty string', () => { + expect( readNotebookTitle(notebook) ).toBe('') + }) + }) + + describe('when there are no cells', () => { + const notebook = { + ...baseNotebook, + cells: [], + } + + it('returns an empty string', () => { + expect( readNotebookTitle(notebook) ).toBe('') + }) + }) + + }) + +}) From 20f4dec62c4d2be87b6a15baeccc1c4618f83b03 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 20 Sep 2019 18:17:28 +0200 Subject: [PATCH 061/266] Release version 0.1.0-beta.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6741fb4..853edf7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html", - "version": "0.1.0-beta.1", + "version": "0.1.0-beta.2", "description": "Convert Jupyter Notebook to static HTML", "author": "Jakub Jirutka ", "license": "MIT", From 36131b9ed28f1139da03a39b84c0a689c23bda98 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 17 Sep 2019 01:41:49 +0200 Subject: [PATCH 062/266] Add workaround for SageMath latex outputs --- src/htmlRenderer.ts | 23 +++++++++++++++++++++++ src/index.ts | 13 ++++++++++++- test/htmlRenderer.test.ts | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 src/htmlRenderer.ts create mode 100644 test/htmlRenderer.test.ts diff --git a/src/htmlRenderer.ts b/src/htmlRenderer.ts new file mode 100644 index 0000000..a99341e --- /dev/null +++ b/src/htmlRenderer.ts @@ -0,0 +1,23 @@ +import { ElementCreator, HTMLElement } from './elementCreator' +import { DataRenderer } from './renderer' + + +const extractMathRx = /^\s*\s*([\s\S]*)<\/script><\/html>\s*$/ + +export type Options = { + elementCreator: ElementCreator, + mathRenderer: (math: string) => string, +} + +/** + * Returns a text/html data renderer with workaround for SageMath (La)TeX output. + */ +export default ({ elementCreator: el, mathRenderer: renderMath }: Options): DataRenderer => { + + return (data: string): HTMLElement => { + const math = (data.match(extractMathRx) || [])[1] + return math + ? el('div', ['latex-output'], renderMath(math)) + : el('div', ['html-output'], data) + } +} diff --git a/src/index.ts b/src/index.ts index 42e13b2..a4c3649 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,10 +1,11 @@ import anser from 'anser' import hjs from 'highlightjs' -import { KatexOptions } from 'katex' +import katex, { KatexOptions } from 'katex' import { MarkedOptions } from 'marked' import { Document } from 'nodom' import buildElementCreator from './elementCreator' +import htmlRenderer from './htmlRenderer' import buildMarkdownRenderer from './markdownRenderer' import buildRenderer, { Options as RendererOpts, NbRenderer } from './renderer' @@ -28,14 +29,24 @@ function codeHighlighter (code: string, lang: string): string { : code } +function mathRenderer (tex: string) { + return katex.renderToString(tex, { displayMode: true, throwOnError: false }) +} + export default (opts: Options = {}): NbRenderer => { const doc = new Document() const elementCreator = buildElementCreator(doc.createElement.bind(doc), opts.classPrefix) const markdownRenderer = buildMarkdownRenderer(opts.markedOpts, opts.katexOpts) + const dataRenderers = { + 'text/html': htmlRenderer({ elementCreator, mathRenderer }), + ...opts.dataRenderers, + } + return buildRenderer({ ansiCodesRenderer, codeHighlighter, + dataRenderers, elementCreator, markdownRenderer, ...opts, diff --git a/test/htmlRenderer.test.ts b/test/htmlRenderer.test.ts new file mode 100644 index 0000000..9fe5bd3 --- /dev/null +++ b/test/htmlRenderer.test.ts @@ -0,0 +1,33 @@ +import { Document } from 'nodom' + +import buildElementCreator from '@/elementCreator' +import htmlRenderer from '@/htmlRenderer' + + +describe('htmlRenderer', () => { + const doc = new Document() + const elementCreator = buildElementCreator(doc.createElement.bind(doc), '') + const mathRenderer = jest.fn(math => math) + + const renderHtml = htmlRenderer({ elementCreator, mathRenderer }) + + + describe('with SageMath\'s embedded TeX', () => { + const math = '\\newcommand{\\Bold}[1]{\\mathbf{#1}}\\Bold{Z}' + const data = `` + + it('returns
${math}
', () => { + expect( renderHtml(data) ).toEqual(elementCreator('div', ['latex-output'], math)) + expect( mathRenderer ).toBeCalledWith(math) + }) + }) + + describe('with other HTML', () => { + const data = '

Lorem ipsum

' + + it('returns
${data}
', () => { + expect( renderHtml(data) ).toEqual(elementCreator('div', ['html-output'], data)) + expect( mathRenderer ).not.toBeCalled() + }) + }) +}) From 9c18c74085d5d038c84ad063795e64f5d0ed6159 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 22 Sep 2019 23:29:10 +0200 Subject: [PATCH 063/266] Release version v0.1.0-beta.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 853edf7..815118f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html", - "version": "0.1.0-beta.2", + "version": "0.1.0-beta.3", "description": "Convert Jupyter Notebook to static HTML", "author": "Jakub Jirutka ", "license": "MIT", From 5193f92ed28d9b1e7d6e740fccd42d2a4cd0ca7d Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 23 Sep 2019 17:40:16 +0200 Subject: [PATCH 064/266] Trim leading/trailing whitespaces in MathExpression.value --- src/mathExtractor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mathExtractor.ts b/src/mathExtractor.ts index 695a6f9..cde1b88 100644 --- a/src/mathExtractor.ts +++ b/src/mathExtractor.ts @@ -35,7 +35,7 @@ function parseDelimitedMath (raw: string): MathExpression { .find(s => raw.startsWith(s)) as keyof typeof delimiters | undefined if (delim) { - const value = raw.slice(delim.length, -delim.length) + const value = raw.slice(delim.length, -delim.length).trim() return { raw, value, ...delimiters[delim] } } else { From 05d38601c13c145f0d23ffc5869e351f251e5997 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 24 Sep 2019 00:17:12 +0200 Subject: [PATCH 065/266] Add tests for mathExtractor --- package.json | 2 + test/mathExtractor.test.ts | 138 +++++++++++++++++++++++++++++++++++++ yarn.lock | 10 +++ 3 files changed, 150 insertions(+) create mode 100644 test/mathExtractor.test.ts diff --git a/package.json b/package.json index 815118f..3fdda14 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "nodom": "^2.2.1" }, "devDependencies": { + "@types/dedent": "^0.7.0", "@types/highlightjs": "^9.12.0", "@types/jest": "^24.0.18", "@types/katex": "^0.10.2", @@ -46,6 +47,7 @@ "@types/node": "^10.13.0", "@typescript-eslint/eslint-plugin": "^1.13.0", "@typescript-eslint/parser": "^1.13.0", + "dedent": "^0.7.0", "eslint": "^6.2.2", "eslint-config-standard-with-typescript": "^8.0.0", "eslint-import-resolver-typescript": "^1.1.1", diff --git a/test/mathExtractor.test.ts b/test/mathExtractor.test.ts new file mode 100644 index 0000000..fd304ab --- /dev/null +++ b/test/mathExtractor.test.ts @@ -0,0 +1,138 @@ +import dedent from 'dedent' + +import { extractMath, restoreMath } from '@/mathExtractor' + + +describe('.extractMath', () => { + + describe.each([ + /* delimiters | displayMode */ + ['$...$' , false], + ['$$...$$' , true ], + ['\\\\(...\\\\)', false], + ['\\\\[...\\\\]', true ], + ] as Array<[string, boolean]>)( + 'text with expression delimited using %s', (delimiters, displayMode) => { + + describe('on a single line', () => { + const value = 'x = 42' + const raw = delimiters.replace('...', value) + + it('extracts and substitutes math expression in the given text', () => { + expect( + extractMath(`Let's define ${raw}.`) + ).toEqual([`Let's define @@1@@.`, [{ displayMode, raw, value }]]) + }) + }) + + describe('on multiple lines', () => { + const value = 'x = 42\ny = 55' + const raw = delimiters.replace('...', `\n ${value}\n`) + + it('extracts and substitutes math expression in the given text', () => { + expect( + extractMath(`Let's define ${raw}.`) + ).toEqual([`Let's define @@1@@.`, [{ displayMode, raw, value }]]) + }) + }) + } + ) + + describe('text with \\begin{..} ... \\end{..} expression', () => { + const raw = '\\begin{equation}a_{0}+ b_{T}\\end{equation}' + + it('extracts and substitutes math expression in the given text', () => { + expect( + extractMath(`Let's define ${raw}.`) + ).toEqual([`Let's define @@1@@.`, [{ displayMode: true, raw, value: raw }]]) + }) + }) + + describe('text with marker-like sequences', () => { + + it('escapes @@[0-9]+@@ as @@0[0-9]+@@', () => { + expect( + extractMath('This @@02@@ is not our marker') + ).toEqual(['This @@002@@ is not our marker', []]) + }) + }) + + it('ignores math delimiters inside `inline code`', () => { + expect( + extractMath('`$x$` and ``$`x`$`` is a code, $x$ is not') + ).toEqual([ + '`$x$` and ``$`x`$`` is a code, @@1@@ is not', + [{ displayMode: false, raw: '$x$', value: 'x' }], + ]) + }) + + it('ignores math delimiters inside ```fenced code blocks```', () => { + const text = dedent` + Some code: + \`\`\`sh + echo $foo $bar + \`\`\` + and $$ x = 42 $$ + ` + expect( extractMath(text) ).toEqual([ + text.replace('$$ x = 42 $$', '@@1@@'), + [{ displayMode: true, raw: '$$ x = 42 $$', value: 'x = 42' }], + ]) + }) + + test('complex example', () => { + const eq2 = dedent` + \begin{aligned} + A_k &= \langle k, +\infty), & + B_k &= \{ p \mid p \ \text{is prvočíslo a} \ p < k \} + \end{aligned} + ` + const text = dedent` + Define sets for natural $k$ + + \begin{aligned} + A_k &= \langle k, +\infty), & + B_k &= \{ p \mid p \ \text{is prvočíslo a} \ p < k \} + \end{aligned} + + This @@1@@ is not a marker, this \`$x && $y\` + is not a math, but \\(x\\) and $$ + x = 42 + $$ is. + ` + const expected = dedent` + Define sets for natural @@1@@ + + @@2@@ + + This @@01@@ is not a marker, this \`$x && $y\` + is not a math, but @@3@@ and @@4@@ is. + ` + + expect( extractMath(text) ).toEqual([expected, [ + { displayMode: false, raw: '$k$', value: 'k' }, + { displayMode: true, raw: eq2, value: eq2 }, + { displayMode: false, raw: '\\\\(x\\\\)', value: 'x' }, + { displayMode: true, raw: '$$\n x = 42\n$$', value: 'x = 42' }, + ]]) + }) +}) + + +describe('.restoreMath', () => { + + it('replaces markers with the given strings', () => { + const repl = ['first'] + repl[21] = 'second' + + expect( + restoreMath("Let's define @@1@@ and @@22@@.", repl) + ).toEqual("Let's define first and second.") + }) + + it('unescapes marker-like sequences', () => { + expect( + restoreMath('This @@001@@ is not our marker, nor @@01@@, but @@1@@ is.', ['this one']) + ).toEqual('This @@01@@ is not our marker, nor @@1@@, but this one is.') + }) +}) diff --git a/yarn.lock b/yarn.lock index 82a960d..41ad974 100644 --- a/yarn.lock +++ b/yarn.lock @@ -320,6 +320,11 @@ dependencies: "@babel/types" "^7.3.0" +"@types/dedent@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@types/dedent/-/dedent-0.7.0.tgz#155f339ca404e6dd90b9ce46a3f78fd69ca9b050" + integrity sha512-EGlKlgMhnLt/cM4DbUSafFdrkeJoC9Mvnj0PUCU7tFmTjMjNRT957kXCx0wYm3JuEq4o4ZsS5vG+NlkM2DMd2A== + "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" @@ -1011,6 +1016,11 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" From 53dfd524e0f4229d0458be6886bcc5a4a4654fa1 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 24 Sep 2019 01:16:11 +0200 Subject: [PATCH 066/266] Use non-capturing groups inside regexps in mathExtractor --- src/mathExtractor.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mathExtractor.ts b/src/mathExtractor.ts index cde1b88..da4fcc0 100644 --- a/src/mathExtractor.ts +++ b/src/mathExtractor.ts @@ -59,8 +59,8 @@ function escapeCodes (text: string): string { return text .replace(/~/g, '~T') - .replace(/(^|[^\\])(`+)([^\n]*?[^`\n])\2(?!`)/gm, escapeDolar) - .replace(/^\s{0,3}(`{3,})(.|\n)*?\1/gm, escapeDolar) + .replace(/(?:^|[^\\])(`+)[^\n]*?[^`\n]\1(?!`)/gm, escapeDolar) + .replace(/^\s{0,3}(`{3,})(?:.|\n)*?\1/gm, escapeDolar) } /** From 0a4f4a09a3d3d53e3302c5614f2f0c727be06fff Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 24 Sep 2019 01:36:54 +0200 Subject: [PATCH 067/266] Fix mathExtractor to recognize `inline code` with line breaks --- src/mathExtractor.ts | 2 ++ test/mathExtractor.test.ts | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/src/mathExtractor.ts b/src/mathExtractor.ts index da4fcc0..4c74ccd 100644 --- a/src/mathExtractor.ts +++ b/src/mathExtractor.ts @@ -59,7 +59,9 @@ function escapeCodes (text: string): string { return text .replace(/~/g, '~T') + .replace(/\n(?!\n)/g, '~N') .replace(/(?:^|[^\\])(`+)[^\n]*?[^`\n]\1(?!`)/gm, escapeDolar) + .replace(/~N/g, '\n') .replace(/^\s{0,3}(`{3,})(?:.|\n)*?\1/gm, escapeDolar) } diff --git a/test/mathExtractor.test.ts b/test/mathExtractor.test.ts index fd304ab..7a97ef5 100644 --- a/test/mathExtractor.test.ts +++ b/test/mathExtractor.test.ts @@ -66,6 +66,15 @@ describe('.extractMath', () => { ]) }) + it('ignores math delimiters inside `inline code` with line breaks', () => { + expect( + extractMath('`$x\n$` and ``\n$`x`$\n`` is a code, `$x$\n\nis` not') + ).toEqual([ + '`$x\n$` and ``\n$`x`$\n`` is a code, `@@1@@\n\nis` not', + [{ displayMode: false, raw: '$x$', value: 'x' }], + ]) + }) + it('ignores math delimiters inside ```fenced code blocks```', () => { const text = dedent` Some code: From 3d2e312e4b99e7d09335a799f46622558a09778e Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 25 Sep 2019 14:35:54 +0200 Subject: [PATCH 068/266] Add type MimeBundle to nbformat --- src/nbformat.ts | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/nbformat.ts b/src/nbformat.ts index 244da7a..9124772 100644 --- a/src/nbformat.ts +++ b/src/nbformat.ts @@ -171,10 +171,7 @@ export interface CellMetadata { export interface MediaAttachments { /** The attachment's data stored as a mimebundle. */ - [filename: string]: { - /** mimetype output (e.g. text/plain), represented as either an array of strings or a string. */ - [mediaType: string]: string | string[], - }, + [filename: string]: MimeBundle, } @@ -199,10 +196,7 @@ export interface ExecuteResult { execution_count: number | null, /** A mime-type keyed dictionary of data */ - data: { - /** mimetype output (e.g. text/plain), represented as either an array of strings or a string. */ - [mediaType: string]: string | string[], - }, + data: MimeBundle, /** Cell output metadata. */ metadata: { @@ -217,10 +211,7 @@ export interface DisplayData { output_type: OutputType.DisplayData, /** A mime-type keyed dictionary of data */ - data: { - /** mimetype output (e.g. text/plain), represented as either an array of strings or a string. */ - [mediaType: string]: string | string[], - }, + data: MimeBundle, /** Cell output metadata. */ metadata: { @@ -256,3 +247,12 @@ export interface Error { /** The error's traceback, represented as an array of strings. */ traceback: string[], } + + +// ------------------------- Misc types ------------------------- // + +export interface MimeBundle { + + /** mimetype output (e.g. text/plain), represented as either an array of strings or a string. */ + [mediaType: string]: string | string[], +} From 7963bc442bb998668d8ed4d9c74c05c376f6385a Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 25 Sep 2019 16:02:21 +0200 Subject: [PATCH 069/266] Handle unsupported Cell and Output types --- src/renderer.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/renderer.ts b/src/renderer.ts index 3dd4e36..0a61265 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -145,6 +145,7 @@ function buildRenderer (opts: Options) { case CellType.Code: return r.CodeCell(cell, notebook) case CellType.Markdown: return r.MarkdownCell(cell, notebook) case CellType.Raw: return r.RawCell(cell, notebook) + default: return el('div', [], '') } }, @@ -188,6 +189,7 @@ function buildRenderer (opts: Options) { case OutputType.ExecuteResult: return r.ExecuteResult(output) case OutputType.Stream: return r.Stream(output) case OutputType.Error: return r.Error(output) + default: return el('div', [], '') } })() const attrs = { ...executionCountAttrs(cell), class: 'output' } From 9c19c9f340b7dd03860538a29d0f012b30f55dce Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 25 Sep 2019 16:08:33 +0200 Subject: [PATCH 070/266] Add type MultilineString to nbformat --- src/nbformat.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/nbformat.ts b/src/nbformat.ts index 9124772..3db363a 100644 --- a/src/nbformat.ts +++ b/src/nbformat.ts @@ -97,7 +97,7 @@ interface BaseCell { metadata: CellMetadata, /** Contents of the cell, represented as an array of lines. */ - source: string | string[], + source: MultilineString, } /** Notebook raw nbconvert cell. */ @@ -229,7 +229,7 @@ export interface Stream { name: string, /** The stream's text output, represented as an array of strings. */ - text: string | string[], + text: MultilineString, } /** Output of an error that occurred during code cell execution. */ @@ -254,5 +254,7 @@ export interface Error { export interface MimeBundle { /** mimetype output (e.g. text/plain), represented as either an array of strings or a string. */ - [mediaType: string]: string | string[], + [mediaType: string]: MultilineString, } + +export type MultilineString = string | string[] From a9819019401ab7af0929f04df16d019b96177f46 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 25 Sep 2019 16:10:39 +0200 Subject: [PATCH 071/266] Fix argument type of embeddedImageEl() --- src/renderer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer.ts b/src/renderer.ts index 0a61265..b6a0c5c 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -106,9 +106,9 @@ function buildRenderer (opts: Options) { const el = opts.elementCreator const el2 = (tag: string, classes: string[]) => (data: string) => el(tag, classes, data) - const embeddedImageEl = (format: string) => (data: string | string[]) => el('img', { + const embeddedImageEl = (format: string) => (data: string) => el('img', { class: 'image-output', - src: `data:image/${format};base64,${joinText(data).replace(/\n/g, '')}`, + src: `data:image/${format};base64,${data.replace(/\n/g, '')}`, }) // opts.dataRenderers is intentionally included twice; to get the user's From 8771eff9573a89eef7223eef4e88dd46d5266d83 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 25 Sep 2019 20:33:27 +0200 Subject: [PATCH 072/266] Fix attribute classes on Source's code element, should be class --- src/renderer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer.ts b/src/renderer.ts index b6a0c5c..07f98fc 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -173,7 +173,7 @@ function buildRenderer (opts: Options) { const lang = notebookLanguage(notebook) const html = highlightCode(joinText(cell.source), lang) - const codeEl = el('code', { 'classes': `lang-${lang}`, 'data-language': lang }, html) + const codeEl = el('code', { 'class': `lang-${lang}`, 'data-language': lang }, html) const preEl = el('pre', [], [codeEl]) // Class "input" is for backward compatibility with notebook.js. From ecce6b8485568ca009842ea43aaeaf74ca057125 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 26 Sep 2019 18:17:51 +0200 Subject: [PATCH 073/266] Move module utils to directory internal --- src/{ => internal}/utils.ts | 0 src/renderer.ts | 2 +- test/{ => internal}/utils.test.ts | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename src/{ => internal}/utils.ts (100%) rename test/{ => internal}/utils.test.ts (95%) diff --git a/src/utils.ts b/src/internal/utils.ts similarity index 100% rename from src/utils.ts rename to src/internal/utils.ts diff --git a/src/renderer.ts b/src/renderer.ts index 07f98fc..3f462e5 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -1,6 +1,6 @@ // This code is originally based on notebookjs 0.4.2 distributed under the MIT license. import { ElementCreator, HTMLElement } from './elementCreator' -import { callableObject, escapeHTML, identity } from './utils' +import { callableObject, escapeHTML, identity } from './internal/utils' import { Cell, CellType, diff --git a/test/utils.test.ts b/test/internal/utils.test.ts similarity index 95% rename from test/utils.test.ts rename to test/internal/utils.test.ts index cffdbe8..b953671 100644 --- a/test/utils.test.ts +++ b/test/internal/utils.test.ts @@ -1,4 +1,4 @@ -import { callableObject, escapeHTML, identity } from '@/utils' +import { callableObject, escapeHTML, identity } from '@/internal/utils' describe('.callableObject', () => { From 17390b1e9dc8d70d0b03c329a39f225d017b75f0 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 27 Sep 2019 12:27:29 +0200 Subject: [PATCH 074/266] Bump nodom to ^2.3.0 This version fixes the issue with duplicating element attributes. --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 3fdda14..878ef27 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "highlightjs": "^9.12.0", "katex": "^0.11.0", "marked": "^0.7.0", - "nodom": "^2.2.1" + "nodom": "^2.3.0" }, "devDependencies": { "@types/dedent": "^0.7.0", diff --git a/yarn.lock b/yarn.lock index 41ad974..3bcf9ab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2922,10 +2922,10 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -nodom@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/nodom/-/nodom-2.2.1.tgz#66310685e6d5ac0215d6f3c7c8a6b3bb5c5fff6f" - integrity sha512-zRxqWngbCycY7jYTxCp4RSwqnwNd20Ioq6Jyotel50XyW1hD0pWosUDmXtJNRZw0Ozl531DOyfBAum41e7eGfg== +nodom@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/nodom/-/nodom-2.3.0.tgz#466dc65583240d38190f7dd792a358c3b173adb6" + integrity sha512-HrxRnAHf0MUkbXCxQLfx/oI12hYcfhjMf1TkfWa4IWkwejxY8UnYLag+44RA0d3Sg0SQpljSg63xelE71mae2g== nopt@^4.0.1: version "4.0.1" From 85875d7663844fe91d9a34c52f8c498b65f159ec Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 27 Sep 2019 14:53:54 +0200 Subject: [PATCH 075/266] Fix code-style in readNotebookTitle.test --- test/readNotebookTitle.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/readNotebookTitle.test.ts b/test/readNotebookTitle.test.ts index b1998a4..c1e9fac 100644 --- a/test/readNotebookTitle.test.ts +++ b/test/readNotebookTitle.test.ts @@ -1,5 +1,5 @@ -import readNotebookTitle from '@/readNotebookTitle' import { Notebook, CellType, MarkdownCell } from '@/nbformat' +import readNotebookTitle from '@/readNotebookTitle' const markdownCell = (source: string | string[]): MarkdownCell => ({ @@ -12,7 +12,9 @@ const baseNotebook: Notebook = { nbformat: 4, nbformat_minor: 3, metadata: {}, - cells: [ markdownCell('# Markdown Title\n\nLorem ipsum dolor') ], + cells: [ + markdownCell('# Markdown Title\n\nLorem ipsum dolor'), + ], } @@ -128,7 +130,5 @@ describe('readNotebookTitle', () => { expect( readNotebookTitle(notebook) ).toBe('') }) }) - }) - }) From 196b37827f6a7dccbc2d9f8c663b3440aae8c7f0 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 28 Sep 2019 01:03:25 +0200 Subject: [PATCH 076/266] Disable ESLint rule consistent-type-definitions It's actually better to use "interface" instead of "type" - interfaces preserve their name in error messages, types do not (they are just aliases). --- .eslintrc.js | 2 +- src/nbformat.ts | 2 -- test/support/matchers/toHtmlEqual.ts | 1 - 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 9c7bf88..e260396 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -55,7 +55,7 @@ module.exports = { // TypeScript '@typescript-eslint/await-thenable': 'error', - '@typescript-eslint/consistent-type-definitions': ['warn', 'type'], + '@typescript-eslint/consistent-type-definitions': 'off', '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/explicit-member-accessibility': ['warn', { accessibility: 'no-public', diff --git a/src/nbformat.ts b/src/nbformat.ts index 3db363a..75e7fe1 100644 --- a/src/nbformat.ts +++ b/src/nbformat.ts @@ -1,5 +1,3 @@ -/* eslint-disable @typescript-eslint/consistent-type-definitions */ - // These types are based on https://github.com/jupyter/nbformat/blob/b6b5a18e5a40d37f1cc0f71f65108288bdec9bb7/nbformat/v4/nbformat.v4.schema.json. // This file was originally generated using json-schema-to-typescript 7.0.0 and // then manually polished. diff --git a/test/support/matchers/toHtmlEqual.ts b/test/support/matchers/toHtmlEqual.ts index 5c3423f..e5b7f2d 100644 --- a/test/support/matchers/toHtmlEqual.ts +++ b/test/support/matchers/toHtmlEqual.ts @@ -6,7 +6,6 @@ type MatcherResult = jest.CustomMatcherResult declare global { // eslint-disable-next-line @typescript-eslint/no-namespace namespace jest { - // eslint-disable-next-line @typescript-eslint/consistent-type-definitions interface Matchers { toHtmlEqual (expected: HTMLElement | string): R, } From 7718f4b6064a3a183dca56cc8d580a9033de7a71 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 27 Sep 2019 20:44:53 +0200 Subject: [PATCH 077/266] Change buildRenderer() to accept elementCreator as first argument --- src/index.ts | 5 ++--- src/renderer.ts | 12 ++++++------ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/index.ts b/src/index.ts index a4c3649..1fae044 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,7 +12,7 @@ import buildRenderer, { Options as RendererOpts, NbRenderer } from './renderer' export { NbRenderer } -export type Options = Partial & { +export type Options = RendererOpts & { classPrefix?: string, katexOpts?: KatexOptions, markedOpts?: MarkedOptions, @@ -43,11 +43,10 @@ export default (opts: Options = {}): NbRenderer => { ...opts.dataRenderers, } - return buildRenderer({ + return buildRenderer(elementCreator, { ansiCodesRenderer, codeHighlighter, dataRenderers, - elementCreator, markdownRenderer, ...opts, }) diff --git a/src/renderer.ts b/src/renderer.ts index 3f462e5..4d76022 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -29,10 +29,6 @@ export type Options = { * `Object.keys({ ...dataRenderers, ...builtinRenderers })`. */ dataRenderersOrder?: string[], - /** - * A function for creating HTMLElement. - */ - elementCreator: ElementCreator, /** * A function for converting ANSI escape sequences in the given *text* to HTML. * It gets the text from the cell as-is, without prior escaping, so it must @@ -97,13 +93,17 @@ function notebookLanguage ({ metadata: meta }: Notebook): string { * a "callable object" of renderer functions for each Notebook's AST node. * You can easily replace any of the renderer functions to modify behaviour * of the renderer. + * + * @param {ElementCreator} elementCreator The function that will be used for + * building all HTML elements. + * @param {Options} opts */ -function buildRenderer (opts: Options) { +function buildRenderer (elementCreator: ElementCreator, opts: Options = {}) { const renderMarkdown = opts.markdownRenderer || identity const renderAnsiCodes = opts.ansiCodesRenderer || escapeHTML const highlightCode = opts.codeHighlighter || escapeHTML - const el = opts.elementCreator + const el = elementCreator const el2 = (tag: string, classes: string[]) => (data: string) => el(tag, classes, data) const embeddedImageEl = (format: string) => (data: string) => el('img', { From 21044fe8a2965680547ea4113d34a853004f6840 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 27 Sep 2019 22:16:54 +0200 Subject: [PATCH 078/266] Remove fallback to notebook.metadata.kernelspec.language nbformat 4.x defines only `notebook.metadata.language_info.name` for the notebook language. `notebook.metadata.kernelspec.language` is non-standard, probably from some older nbformat version. It just increases complexity for testing, so get rid of it. --- src/renderer.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/renderer.ts b/src/renderer.ts index 4d76022..39819e5 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -83,9 +83,7 @@ function executionCountAttrs ({ execution_count: count }: CodeCell): { [k: strin } function notebookLanguage ({ metadata: meta }: Notebook): string { - return (meta.language_info && meta.language_info.name) - || (meta.kernelspec && meta.kernelspec.language) - || 'python' + return (meta.language_info && meta.language_info.name) || 'python' } /** From f5e5006e04558034d314146709d53d76fbfbc4f7 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 28 Sep 2019 16:04:51 +0200 Subject: [PATCH 079/266] Don't return undefined in executionCountAttrs() --- src/renderer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer.ts b/src/renderer.ts index 39819e5..c6ffc1b 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -74,12 +74,12 @@ function coalesceStreams (outputs: Output[]): Output[] { return newOutputs } -function executionCountAttrs ({ execution_count: count }: CodeCell): { [k: string]: string } | undefined { +function executionCountAttrs ({ execution_count: count }: CodeCell): { [k: string]: string } { return count ? { 'data-execution-count': String(count), // Only for backward compatibility with notebook.js. 'data-prompt-number': String(count), - } : undefined + } : {} } function notebookLanguage ({ metadata: meta }: Notebook): string { From 35ba8cc87faae56a23045263c0b71e91e461c4d9 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 28 Sep 2019 22:51:45 +0200 Subject: [PATCH 080/266] Handle empty cell.source in CodeCell() instead of Source() --- src/renderer.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/renderer.ts b/src/renderer.ts index c6ffc1b..a98a935 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -156,18 +156,17 @@ function buildRenderer (elementCreator: ElementCreator, opts: Options = {}) { }, CodeCell: (cell: CodeCell, notebook: Notebook): HTMLElement => { - const children = coalesceStreams(cell.outputs || []) + const source = cell.source.length > 0 + ? r.Source(cell, notebook) + : el('div') + + const outputs = coalesceStreams(cell.outputs || []) .map(output => r.Output(output, cell)) - children.unshift(r.Source(cell, notebook)) - - return el('div', ['cell', 'code-cell'], children) + return el('div', ['cell', 'code-cell'], [source, ...outputs]) }, Source: (cell: CodeCell, notebook: Notebook): HTMLElement => { - if (!cell.source.length) { - return el('div') - } const lang = notebookLanguage(notebook) const html = highlightCode(joinText(cell.source), lang) From 1c91dcf9f3e9a6f32f162e1ad3d75138af1b7df8 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 27 Sep 2019 15:25:10 +0200 Subject: [PATCH 081/266] Load test/setup.ts implicitly --- jest.config.js | 4 +++- test/elementCreator.test.ts | 1 - test/setup.ts | 4 +--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/jest.config.js b/jest.config.js index a9869a6..07c9154 100644 --- a/jest.config.js +++ b/jest.config.js @@ -127,7 +127,9 @@ module.exports = { // setupFiles: [], // A list of paths to modules that run some code to configure or set up the testing framework before each test - // setupFilesAfterEnv: [], + setupFilesAfterEnv: [ + '/test/setup.ts', + ], // A list of paths to snapshot serializer modules Jest should use for snapshot testing // snapshotSerializers: [], diff --git a/test/elementCreator.test.ts b/test/elementCreator.test.ts index 726ec7f..05ef025 100644 --- a/test/elementCreator.test.ts +++ b/test/elementCreator.test.ts @@ -1,4 +1,3 @@ -import './setup' import { Document } from 'nodom' import buildElementCreator from '@/elementCreator' diff --git a/test/setup.ts b/test/setup.ts index 8944e60..37a2c46 100644 --- a/test/setup.ts +++ b/test/setup.ts @@ -1,6 +1,4 @@ -// TODO: How to correctly load this file implicitly? -// setupFilesAfterEnv does not work with TS well. - +import 'jest' import * as matchers from './support/matchers' expect.extend(matchers) From 3a462032571b7846b7461dccdf0fea47011e2e21 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 27 Sep 2019 15:27:27 +0200 Subject: [PATCH 082/266] Add jest-chain --- package.json | 1 + test/setup.ts | 2 ++ yarn.lock | 5 +++++ 3 files changed, 8 insertions(+) diff --git a/package.json b/package.json index 878ef27..30be7ef 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "eslint-plugin-promise": "^4.2.1", "eslint-plugin-standard": "^4.0.0", "jest": "^24.9.0", + "jest-chain": "^1.1.2", "npm-run-all": "^4.1.5", "ts-jest": "^24.1.0", "ts-node": "^8.3.0", diff --git a/test/setup.ts b/test/setup.ts index 37a2c46..b872e19 100644 --- a/test/setup.ts +++ b/test/setup.ts @@ -1,4 +1,6 @@ import 'jest' +import 'jest-chain' + import * as matchers from './support/matchers' expect.extend(matchers) diff --git a/yarn.lock b/yarn.lock index 3bcf9ab..961363e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2114,6 +2114,11 @@ istanbul-reports@^2.2.6: dependencies: handlebars "^4.1.2" +jest-chain@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/jest-chain/-/jest-chain-1.1.2.tgz#80a098a4f5e19cd671d705d170bda501777ac3cf" + integrity sha512-9C4zfLK7/ZGnEctJbqiv6KDInWtdAqJBVmMePpEmyKlYfZy095At4bytuw5B2UvugPxYEbAHurJsFocn3fkkFw== + jest-changed-files@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" From ac53ba25411a2fd18fae555fce07de8a68ade86d Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 27 Sep 2019 15:30:55 +0200 Subject: [PATCH 083/266] Refactor internal/utils.test to utilize jest-chain --- test/internal/utils.test.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/internal/utils.test.ts b/test/internal/utils.test.ts index b953671..286b812 100644 --- a/test/internal/utils.test.ts +++ b/test/internal/utils.test.ts @@ -22,9 +22,10 @@ describe('.callableObject', () => { }) it('has all enumerable properties of the given template', () => { - expect( subject.str ).toBe(template.str) - expect( subject.func1 ).toBe(template.func1) - expect( subject.func2 ).toBe(template.func2) + expect( subject ) + .toHaveProperty('str', template.str) + .toHaveProperty('func1', template.func1) + .toHaveProperty('func2', template.func2) }) }) }) From 1416f80634a5da35800f5caf2a762a35953e6192 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 27 Sep 2019 03:09:14 +0200 Subject: [PATCH 084/266] Improve matcher toHtmlEqual() to support array of elements --- test/support/matchers/toHtmlEqual.ts | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/test/support/matchers/toHtmlEqual.ts b/test/support/matchers/toHtmlEqual.ts index e5b7f2d..ade97da 100644 --- a/test/support/matchers/toHtmlEqual.ts +++ b/test/support/matchers/toHtmlEqual.ts @@ -7,14 +7,31 @@ declare global { // eslint-disable-next-line @typescript-eslint/no-namespace namespace jest { interface Matchers { - toHtmlEqual (expected: HTMLElement | string): R, + toHtmlEqual (expected: HTMLElement | string | Array): R, } } } -export function toHtmlEqual (received: HTMLElement, expected: HTMLElement | string): MatcherResult { - const receivedStr = received.outerHTML - const expectedStr = typeof expected === 'string' ? expected : expected.outerHTML +function formatArray (items: unknown[]): string { + return '[\n' + items.map(x => ` ${x}`).join(',\n') + '\n]' +} + +function stringify (obj: HTMLElement | string): string { + return typeof obj === 'string' ? obj : obj.outerHTML +} + +export function toHtmlEqual ( + received: HTMLElement | HTMLElement[], + expected: HTMLElement | string | Array, +): MatcherResult { + + const receivedStr = Array.isArray(received) + ? formatArray(received.map(stringify)) + : stringify(received) + + const expectedStr = Array.isArray(expected) + ? formatArray(expected.map(stringify)) + : stringify(expected) const pass = receivedStr === expectedStr From f4bca35e8029b8baf6a2190a382841ebcea9c6fb Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 27 Sep 2019 03:10:11 +0200 Subject: [PATCH 085/266] Add tests for renderer module --- package.json | 1 + test/renderer.test.ts | 548 ++++++++++++++++++++++++++++++ test/support/fixtures/notebook.ts | 101 ++++++ test/support/helpers.ts | 21 ++ yarn.lock | 5 + 5 files changed, 676 insertions(+) create mode 100644 test/renderer.test.ts create mode 100644 test/support/fixtures/notebook.ts create mode 100644 test/support/helpers.ts diff --git a/package.json b/package.json index 30be7ef..762c282 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "@types/node": "^10.13.0", "@typescript-eslint/eslint-plugin": "^1.13.0", "@typescript-eslint/parser": "^1.13.0", + "arrify": "^2.0.1", "dedent": "^0.7.0", "eslint": "^6.2.2", "eslint-config-standard-with-typescript": "^8.0.0", diff --git a/test/renderer.test.ts b/test/renderer.test.ts new file mode 100644 index 0000000..4b49c49 --- /dev/null +++ b/test/renderer.test.ts @@ -0,0 +1,548 @@ +import arrify from 'arrify' +import { Document, HTMLElement } from 'nodom' + +import buildElementCreator from '@/elementCreator' +import buildRenderer, { NbRenderer, Options as RendererOpts } from '@/renderer' +import { DisplayData, MimeBundle, MultilineString, Notebook } from '@/nbformat' + +import { mockLastResult, mockResults } from './support/helpers' +import * as _fixtures from './support/fixtures/notebook' + +const document = new Document() +const fixtures = _fixtures // workaround to allow indexed access + + +describe('built renderer', () => { + const elementCreator = buildElementCreator(document.createElement.bind(document), '') + const markdownRenderer = jest.fn(x => `${x}`) + const ansiCodesRenderer = jest.fn(x => `${x}`) + const codeHighlighter = jest.fn(x => `${x}`) + + const notebook = fixtures.Notebook + + const dataRenderers = { + 'text/custom': rendererMock('DisplayData'), + } + const rendererOpts: RendererOpts = { + ansiCodesRenderer, + codeHighlighter, + markdownRenderer, + dataRenderers, + } + let renderer: NbRenderer + + + beforeEach(() => { + renderer = buildRenderer(elementCreator, rendererOpts) + }) + + + describe('.Notebook', () => { + beforeEach(() => { + renderer.Cell = rendererMock('Cell') + }) + + it('returns div.notebook.worksheet', () => { + expect( renderer.Notebook({ ...notebook, cells: [] }) ).toHtmlEqual( + '
' + ) + }) + + it('returns element with $cells converted using .Cell() as the children', () => { + const result = renderer.Notebook(notebook) + + notebook.cells.forEach((cell, idx) => { + expect( renderer.Cell ).toHaveBeenNthCalledWith(idx + 1, cell, notebook) + }) + expect( result.children ).toHtmlEqual(mockResults(renderer.Cell)) + }) + }) + + + describe('.Cell', () => { + + describe.each([ + 'CodeCell', 'MarkdownCell', 'RawCell', + ] as const)('with %s', (type) => { + const cell = fixtures[type] + + it(`returns result of calling .${type}() with the given cell`, () => { + const expected = stubElement(type) + renderer[type] = jest.fn(() => expected) + + expect( renderer.Cell(cell, notebook) ).toBe(expected) + expect( renderer[type] ).toBeCalledWith(cell, notebook) + }) + }) + + describe('with unsupported cell type', () => { + const cell = { + cell_type: 'whatever', + metadata: {}, + } as any + + it('returns div with comment "Unsupported cell type"', () => { + expect( renderer.Cell(cell, notebook) ).toHtmlEqual( + `
` + ) + }) + }) + }) + + + describe('.MarkdownCell', () => { + eachMultilineVariant(fixtures.MarkdownCell, 'source', (cell) => { + const source = join(cell.source) + + it('returns div.cell.markdown-cell with the $source converted using markdownRenderer() as content', () => { + expect( renderer.MarkdownCell(cell, notebook) ).toHtmlEqual( + `
${mockLastResult(markdownRenderer)}
` + ) + expect( markdownRenderer ).toBeCalledWith(source) + }) + }) + }) + + + describe('.RawCell', () => { + eachMultilineVariant(fixtures.RawCell, 'source', (cell) => { + + it('returns div.cell.raw-cell with the $source as content', () => { + expect( renderer.RawCell(cell, notebook) ).toHtmlEqual( + `
${join(cell.source)}
` + ) + }) + }) + }) + + + describe('.CodeCell', () => { + const cell = fixtures.CodeCell + let result: HTMLElement + + beforeEach(() => { + renderer.Source = rendererMock('Source') + renderer.Output = rendererMock('Output') + + result = renderer.CodeCell(cell, notebook) + }) + + it('returns div.cell.code-cell', () => { + expect( result ).toBeInstanceOf(HTMLElement) + expect( result.tagName ).toBe('div') + expect( result.className ).toBe('cell code-cell') + }) + + describe('with non-empty $source', () => { + + it('returns element with $source rendered using .Source() as children[0]', () => { + expect( renderer.Source ).toBeCalledWith(cell, notebook) + expect( result.children[0] ).toHtmlEqual(mockLastResult(renderer.Source)) + }) + }) + + describe('with empty $source', () => { + beforeEach(() => { + result = renderer.CodeCell({ ...cell, source: [] }, notebook) + }) + + it('returns element with empty div as children[0]', () => { + expect( result.children[0] ).toHtmlEqual('
') + }) + }) + + it('returns element with $outputs rendered using .Output() as children[1+]', () => { + cell.outputs.forEach((output, idx) => { + expect( renderer.Output ).toHaveBeenNthCalledWith(idx + 1, output, cell) + }) + expect( result.children.slice(1) ).toHtmlEqual(mockResults(renderer.Output)) + }) + }) + + + describe('.Source', () => { + const cell = fixtures.CodeCell + const notebookLang = notebook.metadata.language_info!.name + let result: HTMLElement + + beforeEach(() => { + result = renderer.Source(cell, notebook) + }) + + it('returns div > pre > code', () => { + expect( result ).toBeInstanceOf(HTMLElement) + expect( result.tagName ).toBe('div') + expect( result.children ).toHaveLength(1) + + const middle = result.firstChild as HTMLElement + expect( middle.tagName ).toBe('pre') + expect( middle.children ).toHaveLength(1) + + const inner = middle.firstChild as HTMLElement + expect( inner.tagName ).toBe('code') + }) + + it("calls the codeHighlighter() with the notebook's language", () => { + expect( codeHighlighter ).toBeCalledWith(expect.anything(), notebookLang) + }) + + describe('outer div', () => { + + it('has class "source input"', () => { + expect( result.className ).toBe('source input') + }) + + describe('when the cell has non-null execution_count', () => { + const myCell = { ...cell, execution_count: 2 } + + it('has data-execution-count and data-prompt-number attributes', () => { + const result = renderer.Source(myCell, notebook) + + expect( result.attributes ).toMatchObject({ + 'data-execution-count': String(myCell.execution_count), + 'data-prompt-number': String(myCell.execution_count), + }) + }) + }) + + describe('when the cell has null execution_count', () => { + const myCell = { ...cell, execution_count: null } + + it('has data-execution-count and data-prompt-number attributes', () => { + const result = renderer.Source(myCell, notebook) + + expect( result.attributes ) + .not.toHaveProperty('data-execution-count') + .not.toHaveProperty('data-prompt-number') + }) + }) + }) + + describe('inner code', () => { + let codeEl: HTMLElement + + beforeEach(() => { + codeEl = renderer.Source(cell, notebook).firstChild!.firstChild as HTMLElement + }) + + it("has class lang- where lang is the notebook's language", () => { + expect( codeEl.className ).toBe(`lang-${notebookLang}`) + }) + + it("has attribute data-language with the notebook's language", () => { + expect( codeEl.getAttribute('data-language') ).toBe(notebookLang) + }) + + it('has $source converted using codeHighlighter() as the innerHTML', () => { + expect( codeHighlighter ).toBeCalledWith(join(cell.source), expect.anything()) + expect( codeEl.innerHTML ).toEqual(mockLastResult(codeHighlighter)) + }) + }) + + describe('when the notebook does not have metadata.language_info.name', () => { + const myNotebook: Notebook = { ...notebook, metadata: {} } + const notebookLang = 'python' + + it('uses the default language: python', () => { + const result = renderer.Source(cell, myNotebook) + const codeEl = result.firstChild!.firstChild as HTMLElement + + expect( codeEl.getAttribute('data-language') ).toBe(notebookLang) + expect( codeEl.classList ).toContain(`lang-${notebookLang}`) + expect( codeHighlighter ).toBeCalledWith(expect.anything(), notebookLang) + }) + }) + }) + + + describe('.Output', () => { + const cell = fixtures.CodeCell + + describe.each([ + 'DisplayData', 'ExecuteResult', 'Stream', 'Error', + ] as const)('with %s output', (type) => { + + const output = fixtures[type] + let result: HTMLElement + + beforeEach(() => { + renderer[type] = rendererMock(type) + result = renderer.Output(output, cell) + }) + + it('returns div.output', () => { + expect( result ).toBeInstanceOf(HTMLElement) + expect( result.tagName ).toBe('div') + expect( result.className ).toBe('output') + }) + + it(`returns element with the output rendered using .${type}() as the only child`, () => { + expect( renderer[type] ).toBeCalledWith(output) + expect( result.children ).toHtmlEqual([mockLastResult(renderer[type])]) + }) + + describe('when the cell has non-null execution_count', () => { + const cell = { ...fixtures.CodeCell, execution_count: 2 } + + it('returns element with attributes data-execution-count and data-prompt-number', () => { + const result = renderer.Output(output, cell) + + expect( result.attributes ).toMatchObject({ + 'data-execution-count': String(cell.execution_count), + 'data-prompt-number': String(cell.execution_count), + }) + }) + }) + + describe('when the cell has null execution_count', () => { + const cell = { ...fixtures.CodeCell, execution_count: null } + + it('returns element without attributes data-execution-count and data-prompt-number', () => { + const result = renderer.Output(output, cell) + + expect( result.attributes ) + .not.toHaveProperty('data-execution-count') + .not.toHaveProperty('data-prompt-number') + }) + }) + }) + + describe('with unsupported output type', () => { + const output = { + output_type: 'whatever', + } as any + + const cell = { + ...fixtures.CodeCell, + execution_count: null, + output: [output], + } + + it('returns div with comment "Unsupported output type"', () => { + expect( renderer.Output(output, cell) ).toHtmlEqual( + `
` + ) + }) + }) + }) + + + describe('.DisplayData', () => { + + function displayDataWith (data: MimeBundle): DisplayData { + return { ...fixtures.DisplayData, data } + } + + function withMimeData ( + mimeType: string, + value: MultilineString, + fn: (output: DisplayData, value: MultilineString) => void, + ): void { + + describe(mimeType, () => { + describe('as a string', () => { + const data = join(value) + fn(displayDataWith({ [mimeType]: data }), data) + }) + + describe('as an array', () => { + const data = arrify(value) + fn(displayDataWith({ [mimeType]: data }), data) + }) + }) + } + + describe('with single data of unsupported MIME type', () => { + const displayData = displayDataWith({ 'text/non-sense': 'whaat' }) + + it('returns div.empty-output', () => { + expect( renderer.DisplayData(displayData) ).toHtmlEqual( + `
` + ) + }) + }) + + describe('with single data of built-in MIME type', () => { + + ;['image/png', 'image/jpeg'].forEach(mimeType => { + withMimeData(mimeType, ['aW1hZ2Ug\n', 'ZGF0YQ=='], (output) => { + + it('returns img.image-output with the data in the src attribute', () => { + expect( renderer.DisplayData(output) ).toHtmlEqual( + `` + ) + }) + }) + }) + + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + ;([ + /* mimeType | classes */ + ['image/svg+xml', ['svg-output'] ], + ['text/svg+xml' , ['svg-output'] ], + ['text/html' , ['html-output'] ], + ['text/latex' , ['latex-output']], + ] as Array<[string, string[]]>).forEach(([mimeType, classes]) => { + withMimeData(mimeType, 'data', (output, data) => { + + it(`returns div${classes.map(x => `.${x}`)} with the data as content`, () => { + expect( renderer.DisplayData(output) ).toHtmlEqual( + `
${data}
` + ) + }) + }) + }) + + withMimeData('text/markdown', ['Lorem\n', 'ipsum'], (output, data) => { + + it('returns div.html-output with the data converted using markdownRenderer() as content', () => { + expect( renderer.DisplayData(output) ).toHtmlEqual( + `
${mockLastResult(markdownRenderer)}
` + ) + expect( markdownRenderer ).toBeCalledWith(join(data)) + }) + }) + + withMimeData('text/plain', '>_<', (output) => { + + it('returns pre.text-output with html-escaped data', () => { + expect( renderer.DisplayData(output) ).toHtmlEqual( + `
>_<
` + ) + }) + }) + + withMimeData('application/javascript', 'alert("Hello &!")', (output, data) => { + + it('returns script with the data', () => { + expect( renderer.DisplayData(output) ).toHtmlEqual( + `` + ) + }) + }) + }) + + describe('with single data of non-built-in MIME type', () => { + + withMimeData('text/custom', 'Lorem ipsum', (output, data) => { + + it('renders the data using the associated external renderer', () => { + expect( renderer.DisplayData(output) ).toHtmlEqual( + mockLastResult(dataRenderers['text/custom']) + ) + expect( dataRenderers['text/custom'] ).toBeCalledWith(join(data)) + }) + }) + }) + + describe('with multiple data', () => { + const mimeBundle = { + 'text/plain': 'Lorem ipsum', + 'text/html': '

Lorem ipsum

', + 'text/unknown': '???', + } + const output = displayDataWith(mimeBundle) + + it('renders the data of the MIME type with a higher priority', () => { + expect( renderer.DisplayData(output) ).toHtmlEqual( + `
${mimeBundle['text/html']}
` + ) + }) + + test('the provided dataRenderers have higher priority than the built-ins', () => { + const mimeBundle = { + 'text/custom': '>>Lorem ipsum<<', + 'text/html': '

Lorem ipsum

', + } + const output = displayDataWith(mimeBundle) + + expect( renderer.DisplayData(output) ).toHtmlEqual( + mockLastResult(dataRenderers['text/custom']) + ) + }) + }) + + describe('when built with external renderer for the built-in type', () => { + const dataRenderer = rendererMock('DisplayData') + + beforeEach(() => { + renderer = buildRenderer(elementCreator, { + ...rendererOpts, + dataRenderers: { 'text/plain': dataRenderer }, + }) + }) + + it('renders the data using the external renderer instead of the built-in', () => { + const data = 'allons-y!' + const output = displayDataWith({ 'text/plain': [data] }) + + expect( renderer.DisplayData(output) ).toBe(mockLastResult(dataRenderer)) + expect( dataRenderer ).toBeCalledWith(data) + }) + }) + }) + + + describe('.Error', () => { + const error = fixtures.Error + const traceback = error.traceback.join('\n') + + it('returns pre.error.pyerr with inner $traceback converted using ansiCodesRenderer', () => { + expect( renderer.Error(error) ).toHtmlEqual( + `
${mockLastResult(ansiCodesRenderer)}
` + ) + expect( ansiCodesRenderer ).toBeCalledWith(traceback) + }) + }) + + + describe('.Stream', () => { + eachMultilineVariant(fixtures.Stream, 'text', (stream) => { + const text = join(stream.text) + + it('returns pre.$name with inner $text converted using ansiCodesRenderer', () => { + expect( renderer.Stream(stream) ).toHtmlEqual( + `
${mockLastResult(ansiCodesRenderer)}
` + ) + expect( ansiCodesRenderer ).toBeCalledWith(text) + }) + }) + }) +}) + + +function eachMultilineVariant ( + obj: T, + propName: K, + fn: (obj: T) => void, +): void { + const propValue = obj[propName] + + describe(`when ${propName} is an array`, + () => fn({ ...obj, [propName]: arrify(propValue) })) + + describe(`when ${propName} is a string`, + () => fn({ ...obj, [propName]: join(propValue) })) +} + +const genStubElement = jest.fn((type: string) => { + const id = genStubElement.mock.calls.filter(args => args[0] === type).length + + const el = document.createElement('stub') + el.setAttribute('type', type) + el.setAttribute('id', id.toString()) + + return el +}) + +function stubElement (type: string): HTMLElement { + return genStubElement(type) +} + +function rendererMock (type: string) { + return jest.fn(() => stubElement(type)) +} + +function join (input: MultilineString): string { + return Array.isArray(input) ? input.join('') : input +} diff --git a/test/support/fixtures/notebook.ts b/test/support/fixtures/notebook.ts new file mode 100644 index 0000000..92ae4b8 --- /dev/null +++ b/test/support/fixtures/notebook.ts @@ -0,0 +1,101 @@ +import * as nb from '@/nbformat' + +const { CellType, OutputType } = nb + + +export const Stream: nb.Stream = { + output_type: OutputType.Stream, + name: 'stdout', + text: [ + 'foo\n', + 'bar', + ], +} + +export const Error: nb.Error = { + output_type: OutputType.Error, + ename: 'Error', + evalue: 'whatever', + traceback: [ + 'Error', + ' at repl:1:7', + ' at REPLServer.self.eval (repl.js:110:21)', + ], +} + +export const ExecuteResult: nb.ExecuteResult = { + output_type: OutputType.ExecuteResult, + data: { + 'text/plain': [ + '[1, 2]\n', + '[3, 4]', + ], + }, + execution_count: 1, + metadata: {}, +} + +export const DisplayData: nb.DisplayData = { + output_type: OutputType.DisplayData, + data: { + 'application/x-tex': '\\alpha = 42', + 'text/plain': 'α = 42', + }, + metadata: {}, +} + +export const CodeCell: nb.CodeCell = { + cell_type: CellType.Code, + source: 'print("Hello, world!")', + execution_count: 1, + outputs: [ + DisplayData, + ExecuteResult, + Stream, + Error, + ], + metadata: {}, +} + +export const RawCell: nb.RawCell = { + cell_type: CellType.Raw, + source: '

Allons-y!

', + metadata: { + format: 'text/html', + }, +} + +export const MarkdownCell: nb.MarkdownCell = { + cell_type: CellType.Markdown, + source: [ + '# Title\n', + '\n', + 'Markdown content', + ], + metadata: { + tags: ['test'], + }, +} + +export const Notebook: nb.Notebook = { + metadata: { + kernelspec: { + display_name: 'Julia 1.2.0', + language: 'julia', + name: 'julia-1.2', + }, + language_info: { + file_extension: '.jl', + mimetype: 'application/julia', + name: 'julia', + version: '1.2.0', + }, + }, + nbformat: 4, + nbformat_minor: 3, + cells: [ + RawCell, + MarkdownCell, + CodeCell, + ], +} diff --git a/test/support/helpers.ts b/test/support/helpers.ts new file mode 100644 index 0000000..e17b673 --- /dev/null +++ b/test/support/helpers.ts @@ -0,0 +1,21 @@ + +type Callable = (...args: any[]) => any + +export type Mock = jest.Mock, Parameters> + +export function asMock (fn: F): Mock { + if (jest.isMockFunction(fn)) { + return fn + } + throw TypeError('not a mocked function') +} + +export function mockResults (fn: F): Array> { + return asMock(fn).mock.results + .filter(x => x.type === 'return') + .map(x => x.value) +} + +export function mockLastResult (fn: F): ReturnType { + return mockResults(fn).pop() as ReturnType +} diff --git a/yarn.lock b/yarn.lock index 961363e..5bfb9fc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -605,6 +605,11 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" From 5dcada84dd78d72844eb376b44dd74c0ba7ab7d0 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 28 Sep 2019 00:37:24 +0200 Subject: [PATCH 086/266] Add JSX support for tests --- jest.config.js | 2 +- test/setup.ts | 1 + test/support/jsx.ts | 73 +++++++++++++++++++++++++++++++++++++++++++++ tsconfig.json | 3 +- 4 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 test/support/jsx.ts diff --git a/jest.config.js b/jest.config.js index 07c9154..970f955 100644 --- a/jest.config.js +++ b/jest.config.js @@ -145,7 +145,7 @@ module.exports = { // The glob patterns Jest uses to detect test files testMatch: [ - '/test/**/*.test.[jt]s', + '/test/**/*.test.[jt]s?(x)', ], // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped diff --git a/test/setup.ts b/test/setup.ts index b872e19..0da8300 100644 --- a/test/setup.ts +++ b/test/setup.ts @@ -2,5 +2,6 @@ import 'jest' import 'jest-chain' import * as matchers from './support/matchers' +import './support/jsx' expect.extend(matchers) diff --git a/test/support/jsx.ts b/test/support/jsx.ts new file mode 100644 index 0000000..1cb01d1 --- /dev/null +++ b/test/support/jsx.ts @@ -0,0 +1,73 @@ +import { Document as NDocument, HTMLElement as NHTMLElement, Node as NNode } from 'nodom' + +type Assign = Pick> & K + +type ElementProperties = Assign, { + class?: T['className'], + style?: Partial, + children?: any, +}> + +type AnyProperties = {[key: string]: any} + +type CreateElement = typeof createElement + +declare global { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + type IntrinsicElements = { + [K in keyof HTMLElementTagNameMap]: ElementProperties + } + type ElementChildrenAttribute = { + children: any, + } + const createElement: CreateElement + } +} + +const document = new NDocument() + +// Mimics React.createElement function. +export function createElement ( + factory: (props: AnyProperties) => R, props: AnyProperties, ...children: any[] +): R + +export function createElement ( + type: K, props: JSX.IntrinsicElements[K], ...children: any[] +): NHTMLElement + +export function createElement ( + type: string | ((props: AnyProperties) => NHTMLElement), props: AnyProperties, ...children: any[] +): NHTMLElement { + + if (typeof type === 'function') { + return type({ ...props, children }) + } + const el = document.createElement(type) + + for (const [key, val] of Object.entries(props || {})) { + if (!val) { + continue + } else if (key === 'class' || key === 'className') { + el.className = String(val) + } else { + el.setAttribute(key, String(val)) + } + } + for (const child of children) { + if (!child) { + continue + } else if (child instanceof NNode) { + el.appendChild(child) + } else if (typeof child === 'object' && '__html' in child) { + el.innerHTML = child.__html + } else { + el.appendChild(document.createTextNode(String(child))) + } + } + return el +} + +(global as any).JSX = { + createElement, +} diff --git a/tsconfig.json b/tsconfig.json index 25377fa..389c421 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,8 @@ // "lib": [], /* Specify library files to be included in the compilation. */ "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + "jsx": "react", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + "jsxFactory": "JSX.createElement", /* Specify the JSX factory function to use when targeting react JSX emit, e.g. React.createElement or h. */ // "declaration": true, /* Generates corresponding '.d.ts' file. */ // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ "sourceMap": true, /* Generates corresponding '.map' file. */ From e7d8cfa1930108098dbcc82bbb161b55dc03e146 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 28 Sep 2019 03:08:44 +0200 Subject: [PATCH 087/266] Add Jest matcher toMatchElement() --- test/support/matchers/index.ts | 1 + test/support/matchers/toMatchElement.ts | 72 +++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 test/support/matchers/toMatchElement.ts diff --git a/test/support/matchers/index.ts b/test/support/matchers/index.ts index e44fde7..51316e1 100644 --- a/test/support/matchers/index.ts +++ b/test/support/matchers/index.ts @@ -1 +1,2 @@ export { toHtmlEqual } from './toHtmlEqual' +export { toMatchElement } from './toMatchElement' diff --git a/test/support/matchers/toMatchElement.ts b/test/support/matchers/toMatchElement.ts new file mode 100644 index 0000000..161144c --- /dev/null +++ b/test/support/matchers/toMatchElement.ts @@ -0,0 +1,72 @@ +import { matcherHint, printDiffOrStringify } from 'jest-matcher-utils' +import { HTMLElement, Node } from 'nodom' + +type MatcherResult = jest.CustomMatcherResult + +type Options = { + ignoreAttrs?: boolean, +} + +declare global { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace jest { + interface Matchers { + toMatchElement (expected: HTMLElement, opts?: Options): R, + } + } +} + +export const AnythingNode = new class extends Node { + render () { return '' } +}() + +export const Anything = () => AnythingNode + +function filterWildcardChildren (rec: Node, exp: Node): void { + if (exp.firstChild === AnythingNode + && exp.children.length === 1 + && rec instanceof HTMLElement + && rec.innerHTML + ) { + rec.innerHTML = '' + rec.children.splice(0, rec.children.length, AnythingNode) + return + } + for (let i = 0; i < exp.children.length && i < rec.children.length; i++) { + if (exp.children[i] === AnythingNode) { + rec.children[i] = AnythingNode + } else { + filterWildcardChildren(exp.children[i], rec.children[i]) + } + } +} + +function clearAttributes (node: Node): void { + if (node instanceof HTMLElement) { + node.attributes = {} + node.className = '' + } + node.children.forEach(clearAttributes) +} + +export function toMatchElement (received: HTMLElement, expected: HTMLElement, opts?: Options): MatcherResult { + received = received.cloneNode(true) as HTMLElement + + if (opts && opts.ignoreAttrs) { + clearAttributes(received) + } + filterWildcardChildren(received, expected) + + const receivedStr = received.outerHTML + const expectedStr = expected.outerHTML + const expectedLabel = 'expected' + (opts ? ', ' + JSON.stringify(opts) : '') + + const pass = receivedStr === expectedStr + + const message = () => + matcherHint('toMatchElement', undefined, expectedLabel, { isNot: pass }) + + '\n\n' + + printDiffOrStringify(expectedStr, receivedStr, 'Expected', 'Received', true) + + return { pass, message } +} From a9a38c44197614e9409d885144f0f471f506c19e Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 29 Sep 2019 02:05:44 +0200 Subject: [PATCH 088/266] Use JSX in renderer tests --- test/{renderer.test.ts => renderer.test.tsx} | 99 +++++++++++--------- 1 file changed, 55 insertions(+), 44 deletions(-) rename test/{renderer.test.ts => renderer.test.tsx} (87%) diff --git a/test/renderer.test.ts b/test/renderer.test.tsx similarity index 87% rename from test/renderer.test.ts rename to test/renderer.test.tsx index 4b49c49..f7417f2 100644 --- a/test/renderer.test.ts +++ b/test/renderer.test.tsx @@ -1,3 +1,5 @@ +import './setup' // setupFilesAfterEnv doesn't work here + import arrify from 'arrify' import { Document, HTMLElement } from 'nodom' @@ -5,6 +7,7 @@ import buildElementCreator from '@/elementCreator' import buildRenderer, { NbRenderer, Options as RendererOpts } from '@/renderer' import { DisplayData, MimeBundle, MultilineString, Notebook } from '@/nbformat' +import { Anything } from './support/matchers/toMatchElement' import { mockLastResult, mockResults } from './support/helpers' import * as _fixtures from './support/fixtures/notebook' @@ -44,7 +47,7 @@ describe('built renderer', () => { it('returns div.notebook.worksheet', () => { expect( renderer.Notebook({ ...notebook, cells: [] }) ).toHtmlEqual( - '
' +
) }) @@ -83,7 +86,9 @@ describe('built renderer', () => { it('returns div with comment "Unsupported cell type"', () => { expect( renderer.Cell(cell, notebook) ).toHtmlEqual( - `
` +
+ {{__html: '' }} +
) }) }) @@ -96,7 +101,9 @@ describe('built renderer', () => { it('returns div.cell.markdown-cell with the $source converted using markdownRenderer() as content', () => { expect( renderer.MarkdownCell(cell, notebook) ).toHtmlEqual( - `
${mockLastResult(markdownRenderer)}
` +
+ {{__html: mockLastResult(markdownRenderer) }} +
) expect( markdownRenderer ).toBeCalledWith(source) }) @@ -109,7 +116,9 @@ describe('built renderer', () => { it('returns div.cell.raw-cell with the $source as content', () => { expect( renderer.RawCell(cell, notebook) ).toHtmlEqual( - `
${join(cell.source)}
` +
+ {{__html: join(cell.source) }} +
) }) }) @@ -128,9 +137,9 @@ describe('built renderer', () => { }) it('returns div.cell.code-cell', () => { - expect( result ).toBeInstanceOf(HTMLElement) - expect( result.tagName ).toBe('div') - expect( result.className ).toBe('cell code-cell') + expect( result ).toMatchElement( +
+ ) }) describe('with non-empty $source', () => { @@ -147,7 +156,9 @@ describe('built renderer', () => { }) it('returns element with empty div as children[0]', () => { - expect( result.children[0] ).toHtmlEqual('
') + expect( result.children[0] ).toHtmlEqual( +
+ ) }) }) @@ -170,16 +181,14 @@ describe('built renderer', () => { }) it('returns div > pre > code', () => { - expect( result ).toBeInstanceOf(HTMLElement) - expect( result.tagName ).toBe('div') - expect( result.children ).toHaveLength(1) - - const middle = result.firstChild as HTMLElement - expect( middle.tagName ).toBe('pre') - expect( middle.children ).toHaveLength(1) - - const inner = middle.firstChild as HTMLElement - expect( inner.tagName ).toBe('code') + expect( result ).toMatchElement( +
+
+            
+          
+
, + { ignoreAttrs: true } + ) }) it("calls the codeHighlighter() with the notebook's language", () => { @@ -256,7 +265,7 @@ describe('built renderer', () => { describe('.Output', () => { - const cell = fixtures.CodeCell + const cell = { ...fixtures.CodeCell, execution_count: null } describe.each([ 'DisplayData', 'ExecuteResult', 'Stream', 'Error', @@ -271,9 +280,9 @@ describe('built renderer', () => { }) it('returns div.output', () => { - expect( result ).toBeInstanceOf(HTMLElement) - expect( result.tagName ).toBe('div') - expect( result.className ).toBe('output') + expect( result ).toMatchElement( +
+ ) }) it(`returns element with the output rendered using .${type}() as the only child`, () => { @@ -293,18 +302,6 @@ describe('built renderer', () => { }) }) }) - - describe('when the cell has null execution_count', () => { - const cell = { ...fixtures.CodeCell, execution_count: null } - - it('returns element without attributes data-execution-count and data-prompt-number', () => { - const result = renderer.Output(output, cell) - - expect( result.attributes ) - .not.toHaveProperty('data-execution-count') - .not.toHaveProperty('data-prompt-number') - }) - }) }) describe('with unsupported output type', () => { @@ -320,7 +317,11 @@ describe('built renderer', () => { it('returns div with comment "Unsupported output type"', () => { expect( renderer.Output(output, cell) ).toHtmlEqual( - `
` +
+
+ {{__html: '' }} +
+
) }) }) @@ -357,7 +358,7 @@ describe('built renderer', () => { it('returns div.empty-output', () => { expect( renderer.DisplayData(displayData) ).toHtmlEqual( - `
` +
) }) }) @@ -369,7 +370,7 @@ describe('built renderer', () => { it('returns img.image-output with the data in the src attribute', () => { expect( renderer.DisplayData(output) ).toHtmlEqual( - `` + ) }) }) @@ -387,7 +388,9 @@ describe('built renderer', () => { it(`returns div${classes.map(x => `.${x}`)} with the data as content`, () => { expect( renderer.DisplayData(output) ).toHtmlEqual( - `
${data}
` +
+ {{__html: join(data) }} +
) }) }) @@ -397,7 +400,9 @@ describe('built renderer', () => { it('returns div.html-output with the data converted using markdownRenderer() as content', () => { expect( renderer.DisplayData(output) ).toHtmlEqual( - `
${mockLastResult(markdownRenderer)}
` +
+ {{__html: mockLastResult(markdownRenderer) }} +
) expect( markdownRenderer ).toBeCalledWith(join(data)) }) @@ -407,7 +412,7 @@ describe('built renderer', () => { it('returns pre.text-output with html-escaped data', () => { expect( renderer.DisplayData(output) ).toHtmlEqual( - `
>_<
` +
{ '>_<' }
// FIXME: unescape after updating nodom ) }) }) @@ -416,7 +421,7 @@ describe('built renderer', () => { it('returns script with the data', () => { expect( renderer.DisplayData(output) ).toHtmlEqual( - `` + ) }) }) @@ -445,7 +450,9 @@ describe('built renderer', () => { it('renders the data of the MIME type with a higher priority', () => { expect( renderer.DisplayData(output) ).toHtmlEqual( - `
${mimeBundle['text/html']}
` +
+ {{__html: mimeBundle['text/html'] }} +
) }) @@ -489,7 +496,9 @@ describe('built renderer', () => { it('returns pre.error.pyerr with inner $traceback converted using ansiCodesRenderer', () => { expect( renderer.Error(error) ).toHtmlEqual( - `
${mockLastResult(ansiCodesRenderer)}
` +
+          {{__html: mockLastResult(ansiCodesRenderer) }}
+        
) expect( ansiCodesRenderer ).toBeCalledWith(traceback) }) @@ -502,7 +511,9 @@ describe('built renderer', () => { it('returns pre.$name with inner $text converted using ansiCodesRenderer', () => { expect( renderer.Stream(stream) ).toHtmlEqual( - `
${mockLastResult(ansiCodesRenderer)}
` +
+            {{__html: mockLastResult(ansiCodesRenderer) }}
+          
) expect( ansiCodesRenderer ).toBeCalledWith(text) }) From 1e0126fc48a837042f8d33ad04e7988e427d956a Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 29 Sep 2019 02:10:42 +0200 Subject: [PATCH 089/266] Release version 0.1.0-beta.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 762c282..74d39e6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html", - "version": "0.1.0-beta.3", + "version": "0.1.0-beta.4", "description": "Convert Jupyter Notebook to static HTML", "author": "Jakub Jirutka ", "license": "MIT", From 34ab834a6d9ef4d34b8fd0cc5cf36d1bb4cf149c Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 30 Sep 2019 17:20:28 +0200 Subject: [PATCH 090/266] Bump nodom to ^2.4.0 --- package.json | 2 +- test/renderer.test.tsx | 2 +- types/nodom/index.d.ts | 7 ----- types/nodom/lib/attributes.d.ts | 1 - types/nodom/lib/classlist.d.ts | 13 -------- types/nodom/lib/dataset.d.ts | 1 - types/nodom/lib/document.d.ts | 31 ------------------ types/nodom/lib/element.d.ts | 56 --------------------------------- types/nodom/lib/navigator.d.ts | 3 -- types/nodom/lib/node.d.ts | 10 ------ types/nodom/lib/render.d.ts | 6 ---- types/nodom/lib/style.d.ts | 9 ------ types/nodom/lib/textnode.d.ts | 11 ------- yarn.lock | 8 ++--- 14 files changed, 6 insertions(+), 154 deletions(-) delete mode 100644 types/nodom/index.d.ts delete mode 100644 types/nodom/lib/attributes.d.ts delete mode 100644 types/nodom/lib/classlist.d.ts delete mode 100644 types/nodom/lib/dataset.d.ts delete mode 100644 types/nodom/lib/document.d.ts delete mode 100644 types/nodom/lib/element.d.ts delete mode 100644 types/nodom/lib/navigator.d.ts delete mode 100644 types/nodom/lib/node.d.ts delete mode 100644 types/nodom/lib/render.d.ts delete mode 100644 types/nodom/lib/style.d.ts delete mode 100644 types/nodom/lib/textnode.d.ts diff --git a/package.json b/package.json index 74d39e6..c490032 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "highlightjs": "^9.12.0", "katex": "^0.11.0", "marked": "^0.7.0", - "nodom": "^2.3.0" + "nodom": "^2.4.0" }, "devDependencies": { "@types/dedent": "^0.7.0", diff --git a/test/renderer.test.tsx b/test/renderer.test.tsx index f7417f2..0c21212 100644 --- a/test/renderer.test.tsx +++ b/test/renderer.test.tsx @@ -412,7 +412,7 @@ describe('built renderer', () => { it('returns pre.text-output with html-escaped data', () => { expect( renderer.DisplayData(output) ).toHtmlEqual( -
{ '>_<' }
// FIXME: unescape after updating nodom +
{ '>_<' }
) }) }) diff --git a/types/nodom/index.d.ts b/types/nodom/index.d.ts deleted file mode 100644 index d7a828f..0000000 --- a/types/nodom/index.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -// TODO: Remove after https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38248 is released. - -export * from './lib/document'; -export * from './lib/element'; -export * from './lib/node'; -export * from './lib/render'; -export * from './lib/textnode'; diff --git a/types/nodom/lib/attributes.d.ts b/types/nodom/lib/attributes.d.ts deleted file mode 100644 index 75fa6f3..0000000 --- a/types/nodom/lib/attributes.d.ts +++ /dev/null @@ -1 +0,0 @@ -export class Attributes {} diff --git a/types/nodom/lib/classlist.d.ts b/types/nodom/lib/classlist.d.ts deleted file mode 100644 index afc6d87..0000000 --- a/types/nodom/lib/classlist.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { HTMLElement } from './element'; - -export class ClassList extends Array { - constructor(element: HTMLElement); - - add(className: string): void; - - contains(className: string): boolean; - - remove(className: string): void; - - reset(className?: string): void; -} diff --git a/types/nodom/lib/dataset.d.ts b/types/nodom/lib/dataset.d.ts deleted file mode 100644 index 207c8c6..0000000 --- a/types/nodom/lib/dataset.d.ts +++ /dev/null @@ -1 +0,0 @@ -export class Dataset {} diff --git a/types/nodom/lib/document.d.ts b/types/nodom/lib/document.d.ts deleted file mode 100644 index 6b50347..0000000 --- a/types/nodom/lib/document.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { HTMLElement } from './element'; -import { TextNode } from './textnode'; - -export class Document { - readonly nodeType: number; - body: HTMLElement; - documentElement: HTMLElement; - head: HTMLElement; - implementation: { - createHTMLDocument(textContent: string): Document; - hasFeature(feature: string, version?: string): boolean; - }; - - createElement(tagName: string): HTMLElement; - - createElementNS(ns: string | null, tagName: string): HTMLElement; - - createDocumentFragment(): HTMLElement; - - createTextNode(text: string): TextNode; - - getElementsByTagName(tagName: string): HTMLElement[]; - - getElementsByClassName(classNames: string): HTMLElement[]; - - getElementById(id: string): HTMLElement | null; - - querySelector(selectors: string): HTMLElement | null; - - querySelectorAll(selectors: string): HTMLElement[]; -} diff --git a/types/nodom/lib/element.d.ts b/types/nodom/lib/element.d.ts deleted file mode 100644 index f43783e..0000000 --- a/types/nodom/lib/element.d.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { Attributes } from './attributes'; -import { ClassList } from './classlist'; -import { Dataset } from './dataset'; -import { Node } from './node'; -import { CSSStyleDeclaration } from './style'; - -export class HTMLElement extends Node { - attributes: Attributes; - readonly classList: ClassList; - className: string; - dataset: Dataset; - innerHTML: string; - readonly isVoidEl: boolean; - readonly nextSibling: Node | undefined; - nodeType: number; - readonly outerHTML: string; - style: CSSStyleDeclaration; - tagName: string; - textContent: string; - - constructor(options: { [key: string]: string }); - - appendChild(child: T): T | undefined; - - insertBefore(child: T, before: Node | null): T | undefined; - - removeChild(child: Node): void; - - replaceChild(child: Node, replace: Node): void; - - getAttribute(attr: string): string | undefined; - - setAttribute(attr: string, value: string): void; - - getElementsByClassName(classNames: string): HTMLElement[]; - - getElementsByTagName(tagName: string): HTMLElement[]; - - matches(query: string): boolean; - - querySelector(selectors: string): HTMLElement | null; - - querySelectorAll(selectors: string): HTMLElement[]; - - addEventListener(): void; - - removeEventListener(): void; - - blur(): void; - - click(): void; - - focus(): void; - - render(inner?: boolean): string; -} diff --git a/types/nodom/lib/navigator.d.ts b/types/nodom/lib/navigator.d.ts deleted file mode 100644 index cdec07d..0000000 --- a/types/nodom/lib/navigator.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export class Navigator { - userAgent: string; -} diff --git a/types/nodom/lib/node.d.ts b/types/nodom/lib/node.d.ts deleted file mode 100644 index 52f52f0..0000000 --- a/types/nodom/lib/node.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export class Node { - childNodes: Node[]; - readonly children: Node[]; - readonly firstChild: Node | undefined; - readonly lastChild: Node | undefined; - readonly nodeName: string; - readonly nodeValue: any; - - cloneNode(deep?: boolean): Node; -} diff --git a/types/nodom/lib/render.d.ts b/types/nodom/lib/render.d.ts deleted file mode 100644 index 69b5dda..0000000 --- a/types/nodom/lib/render.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { HTMLElement } from './element'; - -export function render( - view: HTMLElement | { el: HTMLElement }, - inner: boolean, -): string; diff --git a/types/nodom/lib/style.d.ts b/types/nodom/lib/style.d.ts deleted file mode 100644 index 2b5f9c7..0000000 --- a/types/nodom/lib/style.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -export class CSSStyleDeclaration { - cssText: string; - - setProperty(propertyName: string, value: string, priority?: string): void; - - valueOf(): this; - - setValue(style: string): void; -} diff --git a/types/nodom/lib/textnode.d.ts b/types/nodom/lib/textnode.d.ts deleted file mode 100644 index 658a24e..0000000 --- a/types/nodom/lib/textnode.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Node } from './node'; - -export class TextNode extends Node { - readonly nodeType: number; - readonly nodeValue: string; - textContent: string; - - constructor(text: string); - - render(): string; -} diff --git a/yarn.lock b/yarn.lock index 5bfb9fc..23e4e06 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2932,10 +2932,10 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -nodom@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/nodom/-/nodom-2.3.0.tgz#466dc65583240d38190f7dd792a358c3b173adb6" - integrity sha512-HrxRnAHf0MUkbXCxQLfx/oI12hYcfhjMf1TkfWa4IWkwejxY8UnYLag+44RA0d3Sg0SQpljSg63xelE71mae2g== +nodom@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/nodom/-/nodom-2.4.0.tgz#de09965814d717fba21eb7be891c26ca6c437dd8" + integrity sha512-qhfYgpoCSi37HLiViMlf94YqMQdvk3n3arI1uGbAWZK9NKCYRSI42W8lATeGloYGLYxb8us1C5rTvtsXjwdWQg== nopt@^4.0.1: version "4.0.1" From 782fc305e7c34a24f60f88e4bea803585b1e3ac8 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 30 Sep 2019 17:26:00 +0200 Subject: [PATCH 091/266] Set class using setAttribute() instead of className To minimalize used HTMLElement's API surface. --- src/elementCreator.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/elementCreator.ts b/src/elementCreator.ts index a63cb81..b5f30d5 100644 --- a/src/elementCreator.ts +++ b/src/elementCreator.ts @@ -27,15 +27,14 @@ export default (createElement: (tag: string) => HTMLElement, classPrefix: string const el = createElement(tag) if (Array.isArray(classesOrAttrs)) { - el.className = classesOrAttrs.map(prefixClassName).join(' ') + el.setAttribute('class', classesOrAttrs.map(prefixClassName).join(' ')) } else if (classesOrAttrs) { - for (const [key, val] of Object.entries(classesOrAttrs)) { + for (let [key, val] of Object.entries(classesOrAttrs)) { if (key === 'class') { - el.className = val.split(' ').map(prefixClassName).join(' ') - } else { - el.setAttribute(key, val) + val = val.split(' ').map(prefixClassName).join(' ') } + el.setAttribute(key, val) } } if (Array.isArray(childrenOrHTML)) { From ec70c7713e003bfa27f08b772b1ec3de4626950d Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 29 Sep 2019 17:22:26 +0200 Subject: [PATCH 092/266] Don't export HTMLElement from elementCreator module --- src/elementCreator.ts | 2 -- src/htmlRenderer.ts | 4 +++- src/renderer.ts | 4 +++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/elementCreator.ts b/src/elementCreator.ts index b5f30d5..982babb 100644 --- a/src/elementCreator.ts +++ b/src/elementCreator.ts @@ -9,8 +9,6 @@ export type ElementCreator = & ((tag: string, classes?: string[], children?: HTMLElement[] | string) => HTMLElement) & ((tag: string, attrs?: Attributes, children?: HTMLElement[] | string) => HTMLElement) -export { HTMLElement } - /** * Returns a function for building `HTMLElement`s. diff --git a/src/htmlRenderer.ts b/src/htmlRenderer.ts index a99341e..8312b49 100644 --- a/src/htmlRenderer.ts +++ b/src/htmlRenderer.ts @@ -1,4 +1,6 @@ -import { ElementCreator, HTMLElement } from './elementCreator' +import { HTMLElement } from 'nodom' + +import { ElementCreator } from './elementCreator' import { DataRenderer } from './renderer' diff --git a/src/renderer.ts b/src/renderer.ts index a98a935..86de3cb 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -1,5 +1,7 @@ // This code is originally based on notebookjs 0.4.2 distributed under the MIT license. -import { ElementCreator, HTMLElement } from './elementCreator' +import { HTMLElement } from 'nodom' + +import { ElementCreator } from './elementCreator' import { callableObject, escapeHTML, identity } from './internal/utils' import { Cell, From 0dd5a9ee53bf8b7cf189d727a44f15344297da38 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 29 Sep 2019 17:31:43 +0200 Subject: [PATCH 093/266] Generalize elementCreator --- src/elementCreator.ts | 27 +++++++++++++++++---------- src/htmlRenderer.ts | 2 +- src/renderer.ts | 2 +- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/elementCreator.ts b/src/elementCreator.ts index 982babb..cdf6714 100644 --- a/src/elementCreator.ts +++ b/src/elementCreator.ts @@ -1,14 +1,16 @@ -// NOTE: nodom.HTMLElement defines a subset of properties and functions of -// the browser's HTMLElement, that's why we use it here. -import { HTMLElement } from 'nodom' - - type Attributes = { [k: string]: string } -export type ElementCreator = - & ((tag: string, classes?: string[], children?: HTMLElement[] | string) => HTMLElement) - & ((tag: string, attrs?: Attributes, children?: HTMLElement[] | string) => HTMLElement) +// Definition of the smallest possible subset of the HTMLElement type required +// for this module's function. +export type MinimalElement = { + innerHTML: string, + setAttribute (name: string, value: string): void, + appendChild (child: any): any, +} +export type ElementCreator = + & ((tag: string, classes?: string[], children?: TElement[] | string) => TElement) + & ((tag: string, attrs?: Attributes, children?: TElement[] | string) => TElement) /** * Returns a function for building `HTMLElement`s. @@ -17,11 +19,16 @@ export type ElementCreator = * (e.g. `document.createElement.bind(document)`). * @param {string} classPrefix The prefix to be used for all CSS class names * except `lang-*`. Default is `nb-`. + * @template TElement Type of the element object that *createElement* produces. */ -export default (createElement: (tag: string) => HTMLElement, classPrefix: string = 'nb-'): ElementCreator => { +export default ( + createElement: (tag: string) => TElement, + classPrefix: string = 'nb-', +): ElementCreator => { + const prefixClassName = (name: string) => name.startsWith('lang-') ? name : classPrefix + name - return (tag: string, classesOrAttrs?: string[] | Attributes, childrenOrHTML?: HTMLElement[] | string) => { + return (tag: string, classesOrAttrs?: string[] | Attributes, childrenOrHTML?: TElement[] | string): TElement => { const el = createElement(tag) if (Array.isArray(classesOrAttrs)) { diff --git a/src/htmlRenderer.ts b/src/htmlRenderer.ts index 8312b49..f091da2 100644 --- a/src/htmlRenderer.ts +++ b/src/htmlRenderer.ts @@ -7,7 +7,7 @@ import { DataRenderer } from './renderer' const extractMathRx = /^\s*\s*([\s\S]*)<\/script><\/html>\s*$/ export type Options = { - elementCreator: ElementCreator, + elementCreator: ElementCreator, mathRenderer: (math: string) => string, } diff --git a/src/renderer.ts b/src/renderer.ts index 86de3cb..a81f0ed 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -98,7 +98,7 @@ function notebookLanguage ({ metadata: meta }: Notebook): string { * building all HTML elements. * @param {Options} opts */ -function buildRenderer (elementCreator: ElementCreator, opts: Options = {}) { +function buildRenderer (elementCreator: ElementCreator, opts: Options = {}) { const renderMarkdown = opts.markdownRenderer || identity const renderAnsiCodes = opts.ansiCodesRenderer || escapeHTML const highlightCode = opts.codeHighlighter || escapeHTML From db98cb4f740bb9f2db696998e94fc9ec13de65ac Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 29 Sep 2019 21:51:01 +0200 Subject: [PATCH 094/266] Generalize renderer --- src/htmlRenderer.ts | 11 +++++----- src/index.ts | 6 +++--- src/renderer.ts | 48 ++++++++++++++++++++++++------------------ test/renderer.test.tsx | 4 ++-- 4 files changed, 37 insertions(+), 32 deletions(-) diff --git a/src/htmlRenderer.ts b/src/htmlRenderer.ts index f091da2..0511f0e 100644 --- a/src/htmlRenderer.ts +++ b/src/htmlRenderer.ts @@ -1,22 +1,21 @@ -import { HTMLElement } from 'nodom' - import { ElementCreator } from './elementCreator' import { DataRenderer } from './renderer' const extractMathRx = /^\s*\s*([\s\S]*)<\/script><\/html>\s*$/ -export type Options = { - elementCreator: ElementCreator, +export type Options = { + elementCreator: ElementCreator, mathRenderer: (math: string) => string, } /** * Returns a text/html data renderer with workaround for SageMath (La)TeX output. */ -export default ({ elementCreator: el, mathRenderer: renderMath }: Options): DataRenderer => { +export default (opts: Options): DataRenderer => { + const { elementCreator: el, mathRenderer: renderMath } = opts - return (data: string): HTMLElement => { + return (data: string): TElement => { const math = (data.match(extractMathRx) || [])[1] return math ? el('div', ['latex-output'], renderMath(math)) diff --git a/src/index.ts b/src/index.ts index 1fae044..fd1040a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,7 +2,7 @@ import anser from 'anser' import hjs from 'highlightjs' import katex, { KatexOptions } from 'katex' import { MarkedOptions } from 'marked' -import { Document } from 'nodom' +import { Document, HTMLElement } from 'nodom' import buildElementCreator from './elementCreator' import htmlRenderer from './htmlRenderer' @@ -12,7 +12,7 @@ import buildRenderer, { Options as RendererOpts, NbRenderer } from './renderer' export { NbRenderer } -export type Options = RendererOpts & { +export type Options = RendererOpts & { classPrefix?: string, katexOpts?: KatexOptions, markedOpts?: MarkedOptions, @@ -33,7 +33,7 @@ function mathRenderer (tex: string) { return katex.renderToString(tex, { displayMode: true, throwOnError: false }) } -export default (opts: Options = {}): NbRenderer => { +export default (opts: Options = {}): NbRenderer => { const doc = new Document() const elementCreator = buildElementCreator(doc.createElement.bind(doc), opts.classPrefix) const markdownRenderer = buildMarkdownRenderer(opts.markedOpts, opts.katexOpts) diff --git a/src/renderer.ts b/src/renderer.ts index a81f0ed..ef78e30 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -1,6 +1,4 @@ // This code is originally based on notebookjs 0.4.2 distributed under the MIT license. -import { HTMLElement } from 'nodom' - import { ElementCreator } from './elementCreator' import { callableObject, escapeHTML, identity } from './internal/utils' import { @@ -19,11 +17,11 @@ import { } from './nbformat' -export type Options = { +export type Options = { /** * An object with additional data renderers indexed by a media type. */ - dataRenderers?: DataRenderers, + dataRenderers?: DataRenderers, /** * An array of the supported media types in the priority order. When a cell * contains multiple representations of the data, the one with the media type @@ -50,9 +48,9 @@ export type Options = { markdownRenderer?: (markup: string) => string, } -export type DataRenderer = (data: string) => HTMLElement +export type DataRenderer = (data: string) => TElement -type DataRenderers = { [mediaType: string]: DataRenderer } +type DataRenderers = { [mediaType: string]: DataRenderer } function joinText (text: string | string[]): string { @@ -97,8 +95,10 @@ function notebookLanguage ({ metadata: meta }: Notebook): string { * @param {ElementCreator} elementCreator The function that will be used for * building all HTML elements. * @param {Options} opts + * @return {NbRenderer} + * @template TElement Type of the element object that *elementCreator* produces. */ -function buildRenderer (elementCreator: ElementCreator, opts: Options = {}) { +function buildRenderer (elementCreator: ElementCreator, opts: Options = {}) { const renderMarkdown = opts.markdownRenderer || identity const renderAnsiCodes = opts.ansiCodesRenderer || escapeHTML const highlightCode = opts.codeHighlighter || escapeHTML @@ -114,7 +114,7 @@ function buildRenderer (elementCreator: ElementCreator, opts: Optio // opts.dataRenderers is intentionally included twice; to get the user's // provided renderers in the default dataRenderersOrder before the built-in // renderers and at the same time allow to override any built-in renderer. - const dataRenderers: DataRenderers = { + const dataRenderers: DataRenderers = { ...opts.dataRenderers, 'image/png': embeddedImageEl('png'), 'image/jpeg': embeddedImageEl('jpeg'), @@ -134,13 +134,13 @@ function buildRenderer (elementCreator: ElementCreator, opts: Optio } const r = callableObject('Notebook', { - Notebook: (notebook: Notebook): HTMLElement => { + Notebook: (notebook: Notebook): TElement => { const children = notebook.cells.map(cell => r.Cell(cell, notebook)) // Class "worksheet" is for backward compatibility with notebook.js. return el('div', ['notebook', 'worksheet'], children) }, - Cell: (cell: Cell, notebook: Notebook): HTMLElement => { + Cell: (cell: Cell, notebook: Notebook): TElement => { switch (cell.cell_type) { case CellType.Code: return r.CodeCell(cell, notebook) case CellType.Markdown: return r.MarkdownCell(cell, notebook) @@ -149,15 +149,15 @@ function buildRenderer (elementCreator: ElementCreator, opts: Optio } }, - MarkdownCell: (cell: MarkdownCell, _notebook: Notebook): HTMLElement => { + MarkdownCell: (cell: MarkdownCell, _notebook: Notebook): TElement => { return el('div', ['cell', 'markdown-cell'], renderMarkdown(joinText(cell.source))) }, - RawCell: (cell: RawCell, _notebook: Notebook): HTMLElement => { + RawCell: (cell: RawCell, _notebook: Notebook): TElement => { return el('div', ['cell', 'raw-cell'], joinText(cell.source)) }, - CodeCell: (cell: CodeCell, notebook: Notebook): HTMLElement => { + CodeCell: (cell: CodeCell, notebook: Notebook): TElement => { const source = cell.source.length > 0 ? r.Source(cell, notebook) : el('div') @@ -168,7 +168,7 @@ function buildRenderer (elementCreator: ElementCreator, opts: Optio return el('div', ['cell', 'code-cell'], [source, ...outputs]) }, - Source: (cell: CodeCell, notebook: Notebook): HTMLElement => { + Source: (cell: CodeCell, notebook: Notebook): TElement => { const lang = notebookLanguage(notebook) const html = highlightCode(joinText(cell.source), lang) @@ -181,7 +181,7 @@ function buildRenderer (elementCreator: ElementCreator, opts: Optio return el('div', attrs, [preEl]) }, - Output: (output: Output, cell: CodeCell): HTMLElement => { + Output: (output: Output, cell: CodeCell): TElement => { const innerEl = (() => { switch (output.output_type) { case OutputType.DisplayData: return r.DisplayData(output) @@ -196,7 +196,7 @@ function buildRenderer (elementCreator: ElementCreator, opts: Optio return el('div', attrs, [innerEl]) }, - DisplayData: (output: DisplayData): HTMLElement => { + DisplayData: (output: DisplayData): TElement => { const type = resolveDataType(output) if (type) { return dataRenderers[type](joinText(output.data[type])) @@ -204,7 +204,7 @@ function buildRenderer (elementCreator: ElementCreator, opts: Optio return el('div', ['empty-output']) }, - ExecuteResult: (output: ExecuteResult): HTMLElement => { + ExecuteResult: (output: ExecuteResult): TElement => { const type = resolveDataType(output) if (type) { return dataRenderers[type](joinText(output.data[type])) @@ -212,13 +212,13 @@ function buildRenderer (elementCreator: ElementCreator, opts: Optio return el('div', ['empty-output']) }, - Error: (error: NbError): HTMLElement => { + Error: (error: NbError): TElement => { const html = renderAnsiCodes(error.traceback.join('\n')) // Class "pyerr" is for backward compatibility with notebook.js. return el('pre', ['error', 'pyerr'], html) }, - Stream: (stream: NbStream): HTMLElement => { + Stream: (stream: NbStream): TElement => { const html = renderAnsiCodes(joinText(stream.text)) return el('pre', [stream.name], html) }, @@ -226,6 +226,12 @@ function buildRenderer (elementCreator: ElementCreator, opts: Optio return r } -export type NbRenderer = ReturnType - export default buildRenderer + +// XXX: An ugly hack to infer return type of generic function that returns +// generalized object. +abstract class DummyClass { + renderer = buildRenderer(this.elementCreator()) + abstract elementCreator (): ElementCreator +} +export type NbRenderer = DummyClass['renderer'] diff --git a/test/renderer.test.tsx b/test/renderer.test.tsx index 0c21212..3491d0e 100644 --- a/test/renderer.test.tsx +++ b/test/renderer.test.tsx @@ -26,13 +26,13 @@ describe('built renderer', () => { const dataRenderers = { 'text/custom': rendererMock('DisplayData'), } - const rendererOpts: RendererOpts = { + const rendererOpts: RendererOpts = { ansiCodesRenderer, codeHighlighter, markdownRenderer, dataRenderers, } - let renderer: NbRenderer + let renderer: NbRenderer beforeEach(() => { From fd653f08deb9b9e259d5e39a92297b77bd20eda1 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 2 Oct 2019 01:42:44 +0200 Subject: [PATCH 095/266] Fix code-style: Remove unnecessary type annotation --- src/elementCreator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/elementCreator.ts b/src/elementCreator.ts index cdf6714..2c2ba48 100644 --- a/src/elementCreator.ts +++ b/src/elementCreator.ts @@ -23,7 +23,7 @@ export type ElementCreator = */ export default ( createElement: (tag: string) => TElement, - classPrefix: string = 'nb-', + classPrefix = 'nb-', ): ElementCreator => { const prefixClassName = (name: string) => name.startsWith('lang-') ? name : classPrefix + name From 909d01e732daa72f556d0a18747d354b7028326f Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 2 Oct 2019 01:27:39 +0200 Subject: [PATCH 096/266] Bump eslint packages to the latest versions and update rules --- .eslintrc.js | 7 ++- package.json | 10 ++-- yarn.lock | 126 ++++++++++++++++++++++++--------------------------- 3 files changed, 68 insertions(+), 75 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index e260396..1cfe651 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -17,6 +17,7 @@ module.exports = { 'eslint:recommended', 'plugin:@typescript-eslint/eslint-recommended', 'plugin:@typescript-eslint/recommended', + 'plugin:@typescript-eslint/recommended-requiring-type-checking', 'standard-with-typescript', 'plugin:import/recommended', 'plugin:import/typescript', @@ -54,7 +55,6 @@ module.exports = { }], // TypeScript - '@typescript-eslint/await-thenable': 'error', '@typescript-eslint/consistent-type-definitions': 'off', '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/explicit-member-accessibility': ['warn', { @@ -89,8 +89,6 @@ module.exports = { '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-floating-promises': 'error', '@typescript-eslint/no-namespace': 'warn', - '@typescript-eslint/no-object-literal-type-assertion': 'off', - '@typescript-eslint/no-parameter-properties': 'off', '@typescript-eslint/no-require-imports': 'error', '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_', @@ -103,12 +101,13 @@ module.exports = { }], '@typescript-eslint/prefer-for-of': 'warn', '@typescript-eslint/prefer-includes': 'warn', - '@typescript-eslint/prefer-interface': 'off', + '@typescript-eslint/prefer-regexp-exec': 'warn', '@typescript-eslint/prefer-string-starts-ends-with': 'warn', '@typescript-eslint/promise-function-async': ['error', { allowAny: true, }], '@typescript-eslint/semi': ['error', 'never'], + '@typescript-eslint/strict-boolean-expressions': 'off', }, overrides: [ { diff --git a/package.json b/package.json index c490032..efec32b 100644 --- a/package.json +++ b/package.json @@ -45,15 +45,15 @@ "@types/katex": "^0.10.2", "@types/marked": "^0.6.5", "@types/node": "^10.13.0", - "@typescript-eslint/eslint-plugin": "^1.13.0", - "@typescript-eslint/parser": "^1.13.0", + "@typescript-eslint/eslint-plugin": "^2.3.2", + "@typescript-eslint/parser": "^2.3.2", "arrify": "^2.0.1", "dedent": "^0.7.0", - "eslint": "^6.2.2", - "eslint-config-standard-with-typescript": "^8.0.0", + "eslint": "^6.5.1", + "eslint-config-standard-with-typescript": "^9.0.0", "eslint-import-resolver-typescript": "^1.1.1", "eslint-plugin-import": "^2.18.0", - "eslint-plugin-node": "^9.1.0", + "eslint-plugin-node": "^10.0.0", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-standard": "^4.0.0", "jest": "^24.9.0", diff --git a/yarn.lock b/yarn.lock index 23e4e06..0bcf84b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -416,43 +416,45 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz#22fed9b16ddfeb402fd7bcde56307820f6ebc49f" - integrity sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g== +"@typescript-eslint/eslint-plugin@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.3.2.tgz#7e112ca0bb29044d915baf10163a8199a20f7c69" + integrity sha512-tcnpksq1bXzcIRbYLeXkgp6l+ggEMXXUcl1wsSvL807fRtmvVQKygElwEUf4hBA76dNag3VAK1q2m3vd7qJaZA== dependencies: - "@typescript-eslint/experimental-utils" "1.13.0" - eslint-utils "^1.3.1" + "@typescript-eslint/experimental-utils" "2.3.2" + eslint-utils "^1.4.2" functional-red-black-tree "^1.0.1" regexpp "^2.0.1" - tsutils "^3.7.0" + tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e" - integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== +"@typescript-eslint/experimental-utils@2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.3.2.tgz#e50f31264507e6fec7b33840bb6af260c24f4ea8" + integrity sha512-t+JGdTT6dRbmvKDlhlVkEueoZa0fhJNfG6z2cpnRPLwm3VwYr2BjR//acJGC1Yza0I9ZNcDfRY7ubQEvvfG6Jg== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "1.13.0" - eslint-scope "^4.0.0" + "@typescript-eslint/typescript-estree" "2.3.2" + eslint-scope "^5.0.0" -"@typescript-eslint/parser@^1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.13.0.tgz#61ac7811ea52791c47dc9fd4dd4a184fae9ac355" - integrity sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ== +"@typescript-eslint/parser@^2.0.0", "@typescript-eslint/parser@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.3.2.tgz#e9b742e191cd1209930da469cde379591ad0af5b" + integrity sha512-nq1UQeNGdKdqdgF6Ww+Ov2OidWgiL96+JYdXXZ2rkP/OWyc6KMNSbs6MpRCpI8q+PmDa7hBnHNQIo7w/drYccA== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "1.13.0" - "@typescript-eslint/typescript-estree" "1.13.0" - eslint-visitor-keys "^1.0.0" + "@typescript-eslint/experimental-utils" "2.3.2" + "@typescript-eslint/typescript-estree" "2.3.2" + eslint-visitor-keys "^1.1.0" -"@typescript-eslint/typescript-estree@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e" - integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw== +"@typescript-eslint/typescript-estree@2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.3.2.tgz#107414aa04e689fe6f7251eb63fb500217f2b7f4" + integrity sha512-eZNEAai16nwyhIVIEaWQlaUgAU3S9CkQ58qvK0+3IuSdLJD3W1PNuehQFMIhW/mTP1oFR9GNoTcLg7gtXz6lzA== dependencies: + glob "^7.1.4" + is-glob "^4.0.1" lodash.unescape "4.0.1" - semver "5.5.0" + semver "^6.3.0" abab@^2.0.0: version "2.0.1" @@ -1186,18 +1188,18 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" -eslint-config-standard-with-typescript@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-8.0.0.tgz#295a0a25e788e8cc703aee97a63abebd4728ee87" - integrity sha512-6MS0ldyjlwUuJ31D1hdFCOXHrMAKw4iHaawWrtpa15/Pt7dbSjkwQmeeNQ8oKcjoDwreEPVxcZxnbQSz5L7FcQ== +eslint-config-standard-with-typescript@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-9.0.0.tgz#961bbd4d43e4f7e772cb6d8bf728bf88c6bbbff3" + integrity sha512-e9ReAJbpYY8p0jndi6+x4K2PWkOU4xFqEJ6XRmLLoq7SxaqC9n5vlxqfadAznoMoffkjW8cN7HlyQLj15ITpvQ== dependencies: - "@typescript-eslint/parser" "^1.13.0" - eslint-config-standard "^13.0.1" + "@typescript-eslint/parser" "^2.0.0" + eslint-config-standard "^14.0.0" -eslint-config-standard@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-13.0.1.tgz#c9c6ffe0cfb8a51535bc5c7ec9f70eafb8c6b2c0" - integrity sha512-zLKp4QOgq6JFgRm1dDCVv1Iu0P5uZ4v5Wa4DTOkg2RFMxdCX/9Qf7lz9ezRj2dBRa955cWQF/O/LWEiYWAHbTw== +eslint-config-standard@^14.0.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.0.tgz#b23da2b76fe5a2eba668374f246454e7058f15d4" + integrity sha512-EF6XkrrGVbvv8hL/kYa/m6vnvmUT+K82pJJc4JJVMM6+Qgqh0pnwprSxdduDLB9p/7bIxD+YV5O0wfb8lmcPbA== eslint-import-resolver-node@^0.3.2: version "0.3.2" @@ -1224,13 +1226,13 @@ eslint-module-utils@^2.4.0: debug "^2.6.8" pkg-dir "^2.0.0" -eslint-plugin-es@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz#12acae0f4953e76ba444bfd1b2271081ac620998" - integrity sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA== +eslint-plugin-es@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-2.0.0.tgz#0f5f5da5f18aa21989feebe8a73eadefb3432976" + integrity sha512-f6fceVtg27BR02EYnBhgWLFQfK6bN4Ll0nQFrBHOlCsAyxeZkn0NHns5O0YZOPrV1B3ramd6cgFwaoFLcSkwEQ== dependencies: eslint-utils "^1.4.2" - regexpp "^2.0.1" + regexpp "^3.0.0" eslint-plugin-import@^2.18.0: version "2.18.2" @@ -1249,12 +1251,12 @@ eslint-plugin-import@^2.18.0: read-pkg-up "^2.0.0" resolve "^1.11.0" -eslint-plugin-node@^9.1.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-9.2.0.tgz#b1911f111002d366c5954a6d96d3cd5bf2a3036a" - integrity sha512-2abNmzAH/JpxI4gEOwd6K8wZIodK3BmHbTxz4s79OIYwwIt2gkpEXlAouJXu4H1c9ySTnRso0tsuthSOZbUMlA== +eslint-plugin-node@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-10.0.0.tgz#fd1adbc7a300cf7eb6ac55cf4b0b6fc6e577f5a6" + integrity sha512-1CSyM/QCjs6PXaT18+zuAXsjXGIGo5Rw630rSKwokSs2jrYURQc4R5JZpoanNCqwNmepg+0eZ9L7YiRUJb8jiQ== dependencies: - eslint-plugin-es "^1.4.1" + eslint-plugin-es "^2.0.0" eslint-utils "^1.4.2" ignore "^5.1.1" minimatch "^3.0.4" @@ -1271,14 +1273,6 @@ eslint-plugin-standard@^4.0.0: resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz#ff0519f7ffaff114f76d1bd7c3996eef0f6e20b4" integrity sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ== -eslint-scope@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - eslint-scope@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" @@ -1287,7 +1281,7 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.3.1, eslint-utils@^1.4.2: +eslint-utils@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== @@ -1299,10 +1293,10 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== -eslint@^6.2.2: - version "6.4.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.4.0.tgz#5aa9227c3fbe921982b2eda94ba0d7fae858611a" - integrity sha512-WTVEzK3lSFoXUovDHEbkJqCVPEPwbhCq4trDktNI6ygs7aO41d4cDT0JFAT5MivzZeVLWlg7vHL+bgrQv/t3vA== +eslint@^6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.5.1.tgz#828e4c469697d43bb586144be152198b91e96ed6" + integrity sha512-32h99BoLYStT1iq1v2P9uwpyznQ4M2jRiFB6acitKz52Gqn+vPaMDUTB1bYi1WN4Nquj2w+t+bimYUG83DC55A== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" @@ -1661,7 +1655,7 @@ glob-parent@^5.0.0: dependencies: is-glob "^4.0.1" -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== @@ -3450,6 +3444,11 @@ regexpp@^2.0.1: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== +regexpp@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" + integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -3644,12 +3643,7 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== - -semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.2.0: +semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -4136,7 +4130,7 @@ tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== -tsutils@^3.7.0: +tsutils@^3.17.1: version "3.17.1" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== From 48f089c6d7591bfbe4048dc9208e2afd23d39f57 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 2 Oct 2019 01:45:10 +0200 Subject: [PATCH 097/266] Use RegExp#exec instead of String#match where possible See https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/prefer-regexp-exec.md --- src/htmlRenderer.ts | 2 +- src/mathExtractor.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/htmlRenderer.ts b/src/htmlRenderer.ts index 0511f0e..28ac8ff 100644 --- a/src/htmlRenderer.ts +++ b/src/htmlRenderer.ts @@ -16,7 +16,7 @@ export default (opts: Options): DataRenderer => { const { elementCreator: el, mathRenderer: renderMath } = opts return (data: string): TElement => { - const math = (data.match(extractMathRx) || [])[1] + const math = (extractMathRx.exec(data) || [])[1] return math ? el('div', ['latex-output'], renderMath(math)) : el('div', ['html-output'], data) diff --git a/src/mathExtractor.ts b/src/mathExtractor.ts index 4c74ccd..2e4b774 100644 --- a/src/mathExtractor.ts +++ b/src/mathExtractor.ts @@ -157,7 +157,7 @@ export function extractMath (text: string): [string, MathExpression[]] { case '}': if (bracesLevel) { bracesLevel-- } break - default: if (block.match(/\n.*\n/)) { + default: if (/\n.*\n/.exec(block)) { if (lastIdx) { i = lastIdx processMath(unescape, math, blocks, startIdx, i) From 7b90320c4974b17700f403a41726b6803601b932 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 2 Oct 2019 02:00:50 +0200 Subject: [PATCH 098/266] Fix code-style: Don't use template literals without placeholders --- test/mathExtractor.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/mathExtractor.test.ts b/test/mathExtractor.test.ts index 7a97ef5..f5a2825 100644 --- a/test/mathExtractor.test.ts +++ b/test/mathExtractor.test.ts @@ -21,7 +21,7 @@ describe('.extractMath', () => { it('extracts and substitutes math expression in the given text', () => { expect( extractMath(`Let's define ${raw}.`) - ).toEqual([`Let's define @@1@@.`, [{ displayMode, raw, value }]]) + ).toEqual(["Let's define @@1@@.", [{ displayMode, raw, value }]]) }) }) @@ -32,7 +32,7 @@ describe('.extractMath', () => { it('extracts and substitutes math expression in the given text', () => { expect( extractMath(`Let's define ${raw}.`) - ).toEqual([`Let's define @@1@@.`, [{ displayMode, raw, value }]]) + ).toEqual(["Let's define @@1@@.", [{ displayMode, raw, value }]]) }) }) } @@ -44,7 +44,7 @@ describe('.extractMath', () => { it('extracts and substitutes math expression in the given text', () => { expect( extractMath(`Let's define ${raw}.`) - ).toEqual([`Let's define @@1@@.`, [{ displayMode: true, raw, value: raw }]]) + ).toEqual(["Let's define @@1@@.", [{ displayMode: true, raw, value: raw }]]) }) }) From a89fad58cf6218184c3ce77f7b9c3fbfad8eb61e Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 2 Oct 2019 02:05:37 +0200 Subject: [PATCH 099/266] Enable ESLint for tests and update rules overrides --- .eslintignore | 3 +++ .eslintrc.js | 11 +++++++++-- package.json | 2 +- src/index.ts | 2 ++ test/renderer.test.tsx | 1 + 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/.eslintignore b/.eslintignore index fdcca26..f840b9b 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,4 +1,7 @@ +/.*cache/ /.tmp/ +/coverage/ /dist/ /lib/ /types/ +/*.js diff --git a/.eslintrc.js b/.eslintrc.js index 1cfe651..6ece6d9 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,7 +1,13 @@ module.exports = { parser: '@typescript-eslint/parser', parserOptions: { - project: './tsconfig.json', + ecmaFeatures: { + jsx: true, + }, + project: [ + './tsconfig.json', + './test/tsconfig.json', + ], }, env: { es6: true, @@ -111,11 +117,12 @@ module.exports = { }, overrides: [ { - files: ['*.test.ts'], + files: ['*.test.ts?(x)'], rules: { // Allow to format arrays for parametrized tests as tables. 'array-bracket-spacing': 'off', 'comma-spacing': 'off', + 'object-curly-spacing': 'off', 'no-multi-spaces': 'off', 'standard/array-bracket-even-spacing': 'off', // Allow spaces inside expect( foo ). diff --git a/package.json b/package.json index efec32b..549c91d 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ ], "scripts": { "build": "tsc", - "lint": "eslint 'src/**/*.[jt]s'", + "lint": "eslint --ext .ts,.tsx,.js .", "test": "jest --detectOpenHandles --coverage --verbose", "watch-ts": "tsc -w" }, diff --git a/src/index.ts b/src/index.ts index fd1040a..ca0f50f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -20,6 +20,8 @@ export type Options = RendererOpts & { function ansiCodesRenderer (input: string): string { + // TODO: Remove after https://github.com/IonicaBizau/anser/pull/49 is merged. + // eslint-disable-next-line import/no-named-as-default-member return anser.ansiToHtml(anser.escapeForHtml(input)) } diff --git a/test/renderer.test.tsx b/test/renderer.test.tsx index 3491d0e..bcb040b 100644 --- a/test/renderer.test.tsx +++ b/test/renderer.test.tsx @@ -7,6 +7,7 @@ import buildElementCreator from '@/elementCreator' import buildRenderer, { NbRenderer, Options as RendererOpts } from '@/renderer' import { DisplayData, MimeBundle, MultilineString, Notebook } from '@/nbformat' +// eslint-disable-next-line @typescript-eslint/no-unused-vars import { Anything } from './support/matchers/toMatchElement' import { mockLastResult, mockResults } from './support/helpers' import * as _fixtures from './support/fixtures/notebook' From 0394738a358da4fa1a7ca91aca22c0606b1961df Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 2 Oct 2019 17:27:46 +0200 Subject: [PATCH 100/266] Replace eslint-import-resolver-typescript with eslint-import-resolver-ts The former doesn't support multiple tsconfig.json and as I found out now, some rules didn't work with it at all. --- .eslintrc.js | 24 ++++++++++++++---------- package.json | 2 +- src/index.ts | 3 ++- src/markdownRenderer.ts | 6 ++++-- src/readNotebookTitle.ts | 2 +- tsconfig.json | 6 +++--- yarn.lock | 38 +++++++++++++++++++++++++++++--------- 7 files changed, 54 insertions(+), 27 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 6ece6d9..054a45c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,13 +1,15 @@ +const tsconfigs = [ + 'tsconfig.json', + 'test/tsconfig.json', +] + module.exports = { parser: '@typescript-eslint/parser', parserOptions: { ecmaFeatures: { jsx: true, }, - project: [ - './tsconfig.json', - './test/tsconfig.json', - ], + project: tsconfigs, }, env: { es6: true, @@ -15,8 +17,10 @@ module.exports = { }, settings: { 'import/resolver': { - // Use eslint-import-resolver-typescript to obey "paths" in tsconfig.json. - typescript: {}, + // Use eslint-import-resolver-ts to obey "paths" in tsconfig.json. + ts: { + directory: tsconfigs, + }, }, }, extends: [ @@ -54,11 +58,11 @@ module.exports = { 'semi': 'off', // Import + 'import/default': 'off', 'import/newline-after-import': 'warn', - 'import/order': ['warn', { - 'groups': [['builtin', 'external']], - 'newlines-between': 'always-and-inside-groups', - }], + 'import/no-absolute-path': 'error', + // This rule disallows using both wildcard and selective imports from the same module. + 'import/no-duplicates': 'off', // TypeScript '@typescript-eslint/consistent-type-definitions': 'off', diff --git a/package.json b/package.json index 549c91d..addcd9d 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "dedent": "^0.7.0", "eslint": "^6.5.1", "eslint-config-standard-with-typescript": "^9.0.0", - "eslint-import-resolver-typescript": "^1.1.1", + "eslint-import-resolver-ts": "^0.4.0", "eslint-plugin-import": "^2.18.0", "eslint-plugin-node": "^10.0.0", "eslint-plugin-promise": "^4.2.1", diff --git a/src/index.ts b/src/index.ts index ca0f50f..6b32cd4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,7 @@ import anser from 'anser' import hjs from 'highlightjs' -import katex, { KatexOptions } from 'katex' +import * as katex from 'katex' +import { KatexOptions } from 'katex' import { MarkedOptions } from 'marked' import { Document, HTMLElement } from 'nodom' diff --git a/src/markdownRenderer.ts b/src/markdownRenderer.ts index 1e9d40f..354e464 100644 --- a/src/markdownRenderer.ts +++ b/src/markdownRenderer.ts @@ -1,6 +1,8 @@ import hjs from 'highlightjs' -import katex, { KatexOptions } from 'katex' -import marked, { MarkedOptions } from 'marked' +import * as katex from 'katex' +import { KatexOptions } from 'katex' +import * as marked from 'marked' +import { MarkedOptions } from 'marked' import { extractMath, restoreMath } from './mathExtractor' diff --git a/src/readNotebookTitle.ts b/src/readNotebookTitle.ts index 030f122..b0963ba 100644 --- a/src/readNotebookTitle.ts +++ b/src/readNotebookTitle.ts @@ -1,4 +1,4 @@ -import marked from 'marked' +import * as marked from 'marked' import { Notebook, CellType } from './nbformat' diff --git a/tsconfig.json b/tsconfig.json index 389c421..bd9e53d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -41,10 +41,10 @@ /* Module Resolution Options */ "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - "baseUrl": "./src", /* Base directory to resolve non-absolute module names. */ + "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ "paths": { /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - "*": ["../types/*"], - "@/*": ["./*"], /* resolve all modules prefixed with '@/' from 'src' directory */ + "*": ["./types/*"], + "@/*": ["./src/*"], /* resolve all modules prefixed with '@/' from 'src' directory */ }, // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ "typeRoots": [ /* List of folders to include type definitions from. */ diff --git a/yarn.lock b/yarn.lock index 0bcf84b..a90d520 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1209,14 +1209,16 @@ eslint-import-resolver-node@^0.3.2: debug "^2.6.9" resolve "^1.5.0" -eslint-import-resolver-typescript@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-1.1.1.tgz#e6d42172b95144ef16610fe104ef38340edea591" - integrity sha512-jqSfumQ+H5y3FUJ6NjRkbOQSUOlbBucGTN3ELymOtcDBbPjVdm/luvJuCfCaIXGh8sEF26ma1qVdtDgl9ndhUg== +eslint-import-resolver-ts@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-ts/-/eslint-import-resolver-ts-0.4.2.tgz#cd1a4a31144d15b5b6ec7aa88920df4b0e07a385" + integrity sha512-M5WH0xJ3nnwSZZ8f6J550elDmsf/86mau66irHm+qBr5n0soqfuKqr41Qd6oZNBCY6FoSAkiLgnVFEvXAoBvZA== dependencies: - debug "^4.0.1" - resolve "^1.4.0" - tsconfig-paths "^3.6.0" + debug "^4.1.1" + is-glob "^4.0.1" + resolve "^1.12.0" + tiny-glob "^0.2.6" + tsconfig-paths "^3.9.0" eslint-module-utils@^2.4.0: version "2.4.1" @@ -1672,6 +1674,16 @@ globals@^11.1.0, globals@^11.7.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globalyzer@^0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.4.tgz#bc8e273afe1ac7c24eea8def5b802340c5cc534f" + integrity sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA== + +globrex@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" + integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: version "4.2.2" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" @@ -3543,7 +3555,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@1.x, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0: +resolve@1.x, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.5.0: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== @@ -4018,6 +4030,14 @@ through@^2.3.6: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= +tiny-glob@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.6.tgz#9e056e169d9788fe8a734dfa1ff02e9b92ed7eda" + integrity sha512-A7ewMqPu1B5PWwC3m7KVgAu96Ch5LA0w4SnEN/LbDREj/gAD0nPWboRbn8YoP9ISZXqeNAlMvKSKoEuhcfK3Pw== + dependencies: + globalyzer "^0.1.0" + globrex "^0.1.1" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -4115,7 +4135,7 @@ ts-node@^8.3.0: source-map-support "^0.5.6" yn "^3.0.0" -tsconfig-paths@^3.6.0: +tsconfig-paths@^3.9.0: version "3.9.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== From 610a6c4cbe2defc92a53283fe022bc1ef1e05596 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 2 Oct 2019 21:26:56 +0200 Subject: [PATCH 101/266] Generate and include type declarations in the package It seems that this is needed for consumers of the package. --- package.json | 1 + tsconfig.json | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index addcd9d..bce9c79 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "notebook" ], "main": "lib/index.js", + "types": "lib/index.d.ts", "files": [ "lib", "src" diff --git a/tsconfig.json b/tsconfig.json index bd9e53d..bde5d3c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,12 +5,12 @@ "target": "es2018", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ // "lib": [], /* Specify library files to be included in the compilation. */ - "allowJs": true, /* Allow javascript files to be compiled. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ "jsx": "react", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ "jsxFactory": "JSX.createElement", /* Specify the JSX factory function to use when targeting react JSX emit, e.g. React.createElement or h. */ - // "declaration": true, /* Generates corresponding '.d.ts' file. */ - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + "declaration": true, /* Generates corresponding '.d.ts' file. */ + "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ "sourceMap": true, /* Generates corresponding '.map' file. */ // "outFile": "./", /* Concatenate and emit output to single file. */ "outDir": "./lib", /* Redirect output structure to the directory. */ From 4e4f16a1ba126c87639960fab6eee9f7fb63fa0e Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 2 Oct 2019 22:52:55 +0200 Subject: [PATCH 102/266] Add clean script --- package.json | 2 ++ yarn.lock | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/package.json b/package.json index bce9c79..0a7e387 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ ], "scripts": { "build": "tsc", + "clean": "rimraf coverage/ dist/ lib/ *.log", "lint": "eslint --ext .ts,.tsx,.js .", "test": "jest --detectOpenHandles --coverage --verbose", "watch-ts": "tsc -w" @@ -60,6 +61,7 @@ "jest": "^24.9.0", "jest-chain": "^1.1.2", "npm-run-all": "^4.1.5", + "rimraf": "^3.0.0", "ts-jest": "^24.1.0", "ts-node": "^8.3.0", "typescript": "~3.5.2" diff --git a/yarn.lock b/yarn.lock index a90d520..f2385a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3589,6 +3589,13 @@ rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: dependencies: glob "^7.1.3" +rimraf@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" + integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== + dependencies: + glob "^7.1.3" + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" From 393e9612210afc4b694920d02bf8bbca9f02c3a6 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 7 Oct 2019 12:43:17 +0200 Subject: [PATCH 103/266] Use ttypescript for TS transpilation --- README.adoc | 1 + jest.config.js | 6 +++++- package.json | 5 +++-- yarn.lock | 9 ++++++++- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/README.adoc b/README.adoc index 9a5fea3..dc48278 100644 --- a/README.adoc +++ b/README.adoc @@ -23,6 +23,7 @@ TODO === Used Tools * https://www.typescriptlang.org[TypeScript] the language +* https://github.com/cevek/ttypescript[ttypescript] wrapper for `tsc` allowing to use custom AST transformers * https://yarnpkg.com[yarn] for dependencies management and building * https://eslint.org[ESLint] for linting JS/TypeScript code * https://jestjs.io[Jest] for testing diff --git a/jest.config.js b/jest.config.js index 970f955..00703b6 100644 --- a/jest.config.js +++ b/jest.config.js @@ -60,7 +60,11 @@ module.exports = { // globalTeardown: null, // A set of global variables that need to be available in all test environments - // globals: {}, + globals: { + 'ts-jest': { + compiler: 'ttypescript', + }, + }, // An array of directory names to be searched recursively up from the requiring module's location // moduleDirectories: [ diff --git a/package.json b/package.json index 0a7e387..4397714 100644 --- a/package.json +++ b/package.json @@ -24,11 +24,11 @@ "src" ], "scripts": { - "build": "tsc", + "build": "ttsc", "clean": "rimraf coverage/ dist/ lib/ *.log", "lint": "eslint --ext .ts,.tsx,.js .", "test": "jest --detectOpenHandles --coverage --verbose", - "watch-ts": "tsc -w" + "watch-ts": "ttsc -w" }, "engines": { "node": ">=10.13.0" @@ -64,6 +64,7 @@ "rimraf": "^3.0.0", "ts-jest": "^24.1.0", "ts-node": "^8.3.0", + "ttypescript": "^1.5.7", "typescript": "~3.5.2" } } diff --git a/yarn.lock b/yarn.lock index f2385a0..62aeaea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3555,7 +3555,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@1.x, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.5.0: +resolve@1.x, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.9.0: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== @@ -4164,6 +4164,13 @@ tsutils@^3.17.1: dependencies: tslib "^1.8.1" +ttypescript@^1.5.7: + version "1.5.7" + resolved "https://registry.yarnpkg.com/ttypescript/-/ttypescript-1.5.7.tgz#76bb96765b331194b58a4e7d79fae82b886fc29a" + integrity sha512-qloW8S60+xWVC2bQWldYQfESNFkIgDL5/M+vAOOsuLJ1pQu0SG2vQx5DNJO2nlwSrHxD8cDuF2sVDXg6v3GG3Q== + dependencies: + resolve "^1.9.0" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" From 2e3236ccde8176b354ade5a739da37330d85b2aa Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 7 Oct 2019 15:17:09 +0200 Subject: [PATCH 104/266] Export package version from the index module --- package.json | 1 + src/index.ts | 2 ++ src/version.ts | 5 +++++ tsconfig.json | 5 +++++ yarn.lock | 5 +++++ 5 files changed, 18 insertions(+) create mode 100644 src/version.ts diff --git a/package.json b/package.json index 4397714..860d81c 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "rimraf": "^3.0.0", "ts-jest": "^24.1.0", "ts-node": "^8.3.0", + "ts-transformer-inline-file": "^0.1.1", "ttypescript": "^1.5.7", "typescript": "~3.5.2" } diff --git a/src/index.ts b/src/index.ts index 6b32cd4..ac6a693 100644 --- a/src/index.ts +++ b/src/index.ts @@ -11,6 +11,8 @@ import buildMarkdownRenderer from './markdownRenderer' import buildRenderer, { Options as RendererOpts, NbRenderer } from './renderer' +export { default as version } from './version' + export { NbRenderer } export type Options = RendererOpts & { diff --git a/src/version.ts b/src/version.ts new file mode 100644 index 0000000..34d6582 --- /dev/null +++ b/src/version.ts @@ -0,0 +1,5 @@ +import { $INLINE_JSON } from 'ts-transformer-inline-file' + +const { version } = $INLINE_JSON('../package.json') + +export default version as string diff --git a/tsconfig.json b/tsconfig.json index bde5d3c..57293b8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -67,6 +67,11 @@ /* Experimental Options */ // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + // AST transformers used by ttypescript. + "plugins": [ + { "transform": "ts-transformer-inline-file/transformer" }, + ] }, "include": [ "src", diff --git a/yarn.lock b/yarn.lock index 62aeaea..8a79c4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4142,6 +4142,11 @@ ts-node@^8.3.0: source-map-support "^0.5.6" yn "^3.0.0" +ts-transformer-inline-file@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ts-transformer-inline-file/-/ts-transformer-inline-file-0.1.1.tgz#b3b6f42fe446cd49fff2436816627f4d6988bfd7" + integrity sha512-2bPkAFjATsRG4ld8TFTUqn4TvEdXLQf/wwGsepFeRKSXLPqFRhdUHusAGPB1/Zif3CVjppD+bfne58gynd8RfQ== + tsconfig-paths@^3.9.0: version "3.9.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" From ffaec46e59d879bbc3851706d466056529a0fbc5 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 8 Oct 2019 00:20:00 +0200 Subject: [PATCH 105/266] Readme: Change clone address to https:// One cannot clone the repository via SSH if doesn't have an SSH key on GitHub. --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index dc48278..ebbecc8 100644 --- a/README.adoc +++ b/README.adoc @@ -33,7 +33,7 @@ TODO . Clone this repository: [source, subs="+attributes"] -git clone git@github.com:{gh-name}.git +git clone https://github.com/{gh-name}.git . Install Yarn (if you don’t have it already): [source] From b54d86c3a48fdd4fb6e8aeef88094c5be3223e2d Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 13 Oct 2019 14:18:01 +0200 Subject: [PATCH 106/266] Bump anser to ^1.4.9 --- package.json | 2 +- src/index.ts | 2 -- yarn.lock | 8 ++++---- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 860d81c..58f10b7 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "node": ">=10.13.0" }, "dependencies": { - "anser": "^1.4.8", + "anser": "^1.4.9", "highlightjs": "^9.12.0", "katex": "^0.11.0", "marked": "^0.7.0", diff --git a/src/index.ts b/src/index.ts index ac6a693..e014475 100644 --- a/src/index.ts +++ b/src/index.ts @@ -23,8 +23,6 @@ export type Options = RendererOpts & { function ansiCodesRenderer (input: string): string { - // TODO: Remove after https://github.com/IonicaBizau/anser/pull/49 is merged. - // eslint-disable-next-line import/no-named-as-default-member return anser.ansiToHtml(anser.escapeForHtml(input)) } diff --git a/yarn.lock b/yarn.lock index 8a79c4a..e51c6d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -509,10 +509,10 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -anser@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.8.tgz#19a3bfc5f0e31c49efaea38f58fd0d136597f2a3" - integrity sha512-tVHucTCKIt9VRrpQKzPtOlwm/3AmyQ7J+QE29ixFnvuE2hm83utEVrN7jJapYkHV6hI0HOHkEX9TOMCzHtwvuA== +anser@^1.4.9: + version "1.4.9" + resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" + integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA== ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" From 35eb180fe9868e935d26ad43fb8e902632099006 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 13 Oct 2019 14:23:15 +0200 Subject: [PATCH 107/266] Add ts-transformer-export-default-name --- package.json | 1 + tsconfig.json | 1 + yarn.lock | 7 +++++++ 3 files changed, 9 insertions(+) diff --git a/package.json b/package.json index 58f10b7..256d6b4 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "rimraf": "^3.0.0", "ts-jest": "^24.1.0", "ts-node": "^8.3.0", + "ts-transformer-export-default-name": "^0.1.0", "ts-transformer-inline-file": "^0.1.1", "ttypescript": "^1.5.7", "typescript": "~3.5.2" diff --git a/tsconfig.json b/tsconfig.json index 57293b8..f7f207b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -70,6 +70,7 @@ // AST transformers used by ttypescript. "plugins": [ + { "transform": "ts-transformer-export-default-name" }, { "transform": "ts-transformer-inline-file/transformer" }, ] }, diff --git a/yarn.lock b/yarn.lock index e51c6d5..bd94034 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4142,6 +4142,13 @@ ts-node@^8.3.0: source-map-support "^0.5.6" yn "^3.0.0" +ts-transformer-export-default-name@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ts-transformer-export-default-name/-/ts-transformer-export-default-name-0.1.0.tgz#cfb54a8914a0d3d39b2d0b4503534f97c56aecf3" + integrity sha512-BuuyacKdKhURfhyibd8D2kgDBEGu2vrqS4tZazkv9PXDKIRuOyNEGQkUX7j7BtaBC1/k+fLPCw0RcpVjNsVVIA== + dependencies: + camelcase "^5.3.1" + ts-transformer-inline-file@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ts-transformer-inline-file/-/ts-transformer-inline-file-0.1.1.tgz#b3b6f42fe446cd49fff2436816627f4d6988bfd7" From 00ea7249106e1447f96d18690397af05c735464d Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 13 Oct 2019 20:48:24 +0200 Subject: [PATCH 108/266] Pass provided katexOpts even to htmlRenderer and centralize defaults --- src/index.ts | 13 ++++++++----- src/markdownRenderer.ts | 1 - 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/index.ts b/src/index.ts index e014475..b483fc3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -21,6 +21,10 @@ export type Options = RendererOpts & { markedOpts?: MarkedOptions, } +const defaultKatexOpts: KatexOptions = { + displayMode: true, + throwOnError: false, +} function ansiCodesRenderer (input: string): string { return anser.ansiToHtml(anser.escapeForHtml(input)) @@ -32,14 +36,13 @@ function codeHighlighter (code: string, lang: string): string { : code } -function mathRenderer (tex: string) { - return katex.renderToString(tex, { displayMode: true, throwOnError: false }) -} - export default (opts: Options = {}): NbRenderer => { + const katexOpts = { ...defaultKatexOpts, ...opts.katexOpts } + const doc = new Document() const elementCreator = buildElementCreator(doc.createElement.bind(doc), opts.classPrefix) - const markdownRenderer = buildMarkdownRenderer(opts.markedOpts, opts.katexOpts) + const markdownRenderer = buildMarkdownRenderer(opts.markedOpts, katexOpts) + const mathRenderer = (tex: string) => katex.renderToString(tex, katexOpts) const dataRenderers = { 'text/html': htmlRenderer({ elementCreator, mathRenderer }), diff --git a/src/markdownRenderer.ts b/src/markdownRenderer.ts index 354e464..bb3252b 100644 --- a/src/markdownRenderer.ts +++ b/src/markdownRenderer.ts @@ -22,7 +22,6 @@ function highlight (code: string, lang: string): string { */ export default (markedOpts: MarkedOptions = {}, katexOpts: KatexOptions = {}) => { markedOpts = { highlight, ...markedOpts } - katexOpts = { strict: false, throwOnError: false, ...katexOpts } /** * Converts the given *markdown* into HTML. From 3919b16d7d9fb4e26d0d67849ea4870335795193 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 13 Oct 2019 23:39:54 +0200 Subject: [PATCH 109/266] Rename hjs to hljs (highlight.js) hjs was a mistake, I wanted to follow the name used in the highlight.js' examples on their web. --- src/index.ts | 6 +++--- src/markdownRenderer.ts | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/index.ts b/src/index.ts index b483fc3..f7e6e1a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,5 @@ import anser from 'anser' -import hjs from 'highlightjs' +import hljs from 'highlightjs' import * as katex from 'katex' import { KatexOptions } from 'katex' import { MarkedOptions } from 'marked' @@ -31,8 +31,8 @@ function ansiCodesRenderer (input: string): string { } function codeHighlighter (code: string, lang: string): string { - return hjs.getLanguage(lang) - ? hjs.highlight(lang, code).value + return hljs.getLanguage(lang) + ? hljs.highlight(lang, code).value : code } diff --git a/src/markdownRenderer.ts b/src/markdownRenderer.ts index bb3252b..377b4c5 100644 --- a/src/markdownRenderer.ts +++ b/src/markdownRenderer.ts @@ -1,4 +1,4 @@ -import hjs from 'highlightjs' +import hljs from 'highlightjs' import * as katex from 'katex' import { KatexOptions } from 'katex' import * as marked from 'marked' @@ -8,8 +8,8 @@ import { extractMath, restoreMath } from './mathExtractor' function highlight (code: string, lang: string): string { - return hjs.getLanguage(lang) - ? hjs.highlight(lang, code, true).value + return hljs.getLanguage(lang) + ? hljs.highlight(lang, code, true).value : code } From 0d94c8a2aced53cbde55c45b8a85488a64a8f2a1 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 14 Oct 2019 00:35:58 +0200 Subject: [PATCH 110/266] Add comments to index.ts and improve comment on buildRenderer() --- src/index.ts | 25 +++++++++++++++++++++++++ src/renderer.ts | 8 ++++---- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index f7e6e1a..3db64bb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -16,8 +16,20 @@ export { default as version } from './version' export { NbRenderer } export type Options = RendererOpts & { + /** + * The prefix to be used for all CSS class names except `lang-*`. + * Default is `nb-`. + */ classPrefix?: string, + /** + * Options for the KaTeX math renderer. Default is + * `{ displayMode: true, throwOnError: false }`. The provided options will + * be merged with the default. + */ katexOpts?: KatexOptions, + /** + * Options for the marked Markdown renderer. + */ markedOpts?: MarkedOptions, } @@ -36,6 +48,19 @@ function codeHighlighter (code: string, lang: string): string { : code } +/** + * Builds a full-fledged Notebook renderer for server-side rendering with a + * fake DOM implementation "nodom". + * + * It supports rendering of Markdown cells with math (using marked and KaTeX), + * code highlighting (using highlight.js), rendering of ANSI escape sequences + * (using Anser) and SageMath-style math outputs. All of them may be overridden + * via *opts*. + * + * It returns a "callable object" that exposes one renderer function for each + * of the Notebook's AST nodes. You can easily replace any of the functions to + * modify behaviour of the renderer. + */ export default (opts: Options = {}): NbRenderer => { const katexOpts = { ...defaultKatexOpts, ...opts.katexOpts } diff --git a/src/renderer.ts b/src/renderer.ts index ef78e30..8081bc9 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -87,10 +87,10 @@ function notebookLanguage ({ metadata: meta }: Notebook): string { } /** - * Builds a Notebook renderer function with the given options. It returns - * a "callable object" of renderer functions for each Notebook's AST node. - * You can easily replace any of the renderer functions to modify behaviour - * of the renderer. + * Builds a Notebook renderer function with the given options. It returns a + * "callable object" that exposes a renderer function for each of the + * Notebook's AST node. You can easily replace any of the functions to modify + * behaviour of the renderer. * * @param {ElementCreator} elementCreator The function that will be used for * building all HTML elements. From 9cabcadd4cb2da2efb2e7247be7beff6dc1e7900 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 10 Oct 2019 21:54:57 +0200 Subject: [PATCH 111/266] Fix wrong named imports and disable corresponding ESLint rule It doesn't work when the code is bundled using Rollup.js. This problem was introduced in 0394738a358da4fa1a7ca91aca22c0606b1961df. KaTeX and Marked have it wrong in type declarations, so ESLint rule import/no-named-as-default-member is not very helpful here... --- .eslintrc.js | 2 ++ src/index.ts | 3 +-- src/markdownRenderer.ts | 6 ++---- src/readNotebookTitle.ts | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 054a45c..ba08c62 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -63,6 +63,8 @@ module.exports = { 'import/no-absolute-path': 'error', // This rule disallows using both wildcard and selective imports from the same module. 'import/no-duplicates': 'off', + // Some packages has it wrong in type declarations (e.g. katex, marked). + 'import/no-named-as-default-member': 'off', // TypeScript '@typescript-eslint/consistent-type-definitions': 'off', diff --git a/src/index.ts b/src/index.ts index 3db64bb..b5ecd31 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,6 @@ import anser from 'anser' import hljs from 'highlightjs' -import * as katex from 'katex' -import { KatexOptions } from 'katex' +import katex, { KatexOptions } from 'katex' import { MarkedOptions } from 'marked' import { Document, HTMLElement } from 'nodom' diff --git a/src/markdownRenderer.ts b/src/markdownRenderer.ts index 377b4c5..cf2db08 100644 --- a/src/markdownRenderer.ts +++ b/src/markdownRenderer.ts @@ -1,8 +1,6 @@ import hljs from 'highlightjs' -import * as katex from 'katex' -import { KatexOptions } from 'katex' -import * as marked from 'marked' -import { MarkedOptions } from 'marked' +import katex, { KatexOptions } from 'katex' +import marked, { MarkedOptions } from 'marked' import { extractMath, restoreMath } from './mathExtractor' diff --git a/src/readNotebookTitle.ts b/src/readNotebookTitle.ts index b0963ba..030f122 100644 --- a/src/readNotebookTitle.ts +++ b/src/readNotebookTitle.ts @@ -1,4 +1,4 @@ -import * as marked from 'marked' +import marked from 'marked' import { Notebook, CellType } from './nbformat' From cde05b7272fb6af464f551c9fe4f0c6965b91951 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 14 Oct 2019 01:06:27 +0200 Subject: [PATCH 112/266] Release version 0.1.0-beta.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 256d6b4..d005238 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html", - "version": "0.1.0-beta.4", + "version": "0.1.0-beta.5", "description": "Convert Jupyter Notebook to static HTML", "author": "Jakub Jirutka ", "license": "MIT", From f84ba06666395bec55a1067e84aa69e5e7960daa Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 14 Oct 2019 01:16:07 +0200 Subject: [PATCH 113/266] Add Coverage Gutters to list of recommended VS Code extensions --- .vscode/extensions.json | 1 + README.adoc | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 0c484aa..83f99da 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -8,6 +8,7 @@ "EditorConfig.EditorConfig", "gamunu.vscode-yarn", "Orta.vscode-jest", + "ryanluker.vscode-coverage-gutters", "shtian.jest-snippets-standard" ], // List of extensions recommended by VS Code that should not be recommended for users of this workspace. diff --git a/README.adoc b/README.adoc index ebbecc8..9b98e7b 100644 --- a/README.adoc +++ b/README.adoc @@ -47,7 +47,7 @@ yarn install [source] yarn build -. Run tests: +. Run tests and generate code coverage: [source] yarn test @@ -62,6 +62,7 @@ IMPORTANT: Keep in mind that JS sources are located in the directory `src`; dire 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}Orta.vscode-jest[Jest] (and link:{vs-marketplace-uri}shtian.jest-snippets-standard[Jest Snippets Standard Style]) From 6e64ab79c6291e85f064b4e008928a4eec1ae564 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 14 Oct 2019 01:17:30 +0200 Subject: [PATCH 114/266] Readme: Remove yarn from System Requirements It can be installed using npm which is already described in How to Start. --- README.adoc | 1 - 1 file changed, 1 deletion(-) diff --git a/README.adoc b/README.adoc index 9b98e7b..8eb58a8 100644 --- a/README.adoc +++ b/README.adoc @@ -17,7 +17,6 @@ TODO == System Requirements * https://nodejs.org[NodeJS] 10.13+ -* https://yarnpkg.com[yarn] 1.6+ (can be installed using npm) === Used Tools From a8c48cc4f2ad085b5a70834a1b0612fb33b400c7 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 14 Oct 2019 14:17:33 +0200 Subject: [PATCH 115/266] Add suffix Output to nbformat types Error and Stream To avoid confusion with standard JS/Node types. --- src/nbformat.ts | 6 +++--- src/renderer.ts | 8 ++++---- test/support/fixtures/notebook.ts | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/nbformat.ts b/src/nbformat.ts index 75e7fe1..dc422ab 100644 --- a/src/nbformat.ts +++ b/src/nbformat.ts @@ -175,7 +175,7 @@ export interface MediaAttachments { // ------------------------- Output types ------------------------- // -export type Output = ExecuteResult | DisplayData | Stream | Error +export type Output = ExecuteResult | DisplayData | StreamOutput | ErrorOutput export enum OutputType { ExecuteResult = 'execute_result', @@ -218,7 +218,7 @@ export interface DisplayData { } /** Stream output from a code cell. */ -export interface Stream { +export interface StreamOutput { /** Type of cell output. */ output_type: OutputType.Stream, @@ -231,7 +231,7 @@ export interface Stream { } /** Output of an error that occurred during code cell execution. */ -export interface Error { +export interface ErrorOutput { /** Type of cell output. */ output_type: OutputType.Error, diff --git a/src/renderer.ts b/src/renderer.ts index 8081bc9..7920191 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -6,14 +6,14 @@ import { CellType, CodeCell, DisplayData, - Error as NbError, + ErrorOutput, ExecuteResult, MarkdownCell, Notebook, Output, OutputType, RawCell, - Stream as NbStream, + StreamOutput, } from './nbformat' @@ -212,13 +212,13 @@ function buildRenderer (elementCreator: ElementCreator, opt return el('div', ['empty-output']) }, - Error: (error: NbError): TElement => { + Error: (error: ErrorOutput): TElement => { const html = renderAnsiCodes(error.traceback.join('\n')) // Class "pyerr" is for backward compatibility with notebook.js. return el('pre', ['error', 'pyerr'], html) }, - Stream: (stream: NbStream): TElement => { + Stream: (stream: StreamOutput): TElement => { const html = renderAnsiCodes(joinText(stream.text)) return el('pre', [stream.name], html) }, diff --git a/test/support/fixtures/notebook.ts b/test/support/fixtures/notebook.ts index 92ae4b8..7b7e23b 100644 --- a/test/support/fixtures/notebook.ts +++ b/test/support/fixtures/notebook.ts @@ -3,7 +3,7 @@ import * as nb from '@/nbformat' const { CellType, OutputType } = nb -export const Stream: nb.Stream = { +export const Stream: nb.StreamOutput = { output_type: OutputType.Stream, name: 'stdout', text: [ @@ -12,7 +12,7 @@ export const Stream: nb.Stream = { ], } -export const Error: nb.Error = { +export const Error: nb.ErrorOutput = { output_type: OutputType.Error, ename: 'Error', evalue: 'whatever', From c06d13821c30a209eb24f25b2c9f8c7a2ede5621 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 18 Oct 2019 18:25:48 +0200 Subject: [PATCH 116/266] VSCode: Add more format settings --- .vscode/settings.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 8f05d5c..3f2f535 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -15,8 +15,18 @@ "flow.enabled": false, + "javascript.format.insertSpaceAfterConstructor": true, + "javascript.format.insertSpaceBeforeFunctionParenthesis": true, + "javascript.format.semicolons": "remove", + "javascript.preferences.quoteStyle": "single", + "search.exclude": { "**/node_modules": true, "**/dist": true - } + }, + + "typescript.format.insertSpaceAfterConstructor": true, + "typescript.format.insertSpaceBeforeFunctionParenthesis": true, + "typescript.format.semicolons": "remove", + "typescript.preferences.quoteStyle": "single", } From b848a9028a85e54e59c1de89f585737cfa1a4818 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 18 Oct 2019 18:26:58 +0200 Subject: [PATCH 117/266] VSCode: Use workspace version of tsdk --- .vscode/settings.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.vscode/settings.json b/.vscode/settings.json index 3f2f535..1223b2c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -29,4 +29,5 @@ "typescript.format.insertSpaceBeforeFunctionParenthesis": true, "typescript.format.semicolons": "remove", "typescript.preferences.quoteStyle": "single", + "typescript.tsdk": "./node_modules/typescript/lib", } From 99092cd9754fe434659afb554cdf6e819eeadead Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 18 Oct 2019 18:40:38 +0200 Subject: [PATCH 118/266] Bump typescript to ~3.6.4 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index d005238..c046276 100644 --- a/package.json +++ b/package.json @@ -67,6 +67,6 @@ "ts-transformer-export-default-name": "^0.1.0", "ts-transformer-inline-file": "^0.1.1", "ttypescript": "^1.5.7", - "typescript": "~3.5.2" + "typescript": "~3.6.4" } } diff --git a/yarn.lock b/yarn.lock index bd94034..c731664 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4202,10 +4202,10 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -typescript@~3.5.2: - version "3.5.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" - integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== +typescript@~3.6.4: + version "3.6.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.4.tgz#b18752bb3792bc1a0281335f7f6ebf1bbfc5b91d" + integrity sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg== uglify-js@^3.1.4: version "3.6.0" From 9b80667f99f50c6f0dbef9ad5c3fb972c0b256d1 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 18 Oct 2019 18:43:11 +0200 Subject: [PATCH 119/266] Bump ts-node to ^8.4.1 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c046276..bb49ecb 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "npm-run-all": "^4.1.5", "rimraf": "^3.0.0", "ts-jest": "^24.1.0", - "ts-node": "^8.3.0", + "ts-node": "^8.4.1", "ts-transformer-export-default-name": "^0.1.0", "ts-transformer-inline-file": "^0.1.1", "ttypescript": "^1.5.7", diff --git a/yarn.lock b/yarn.lock index c731664..b5c37d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4131,10 +4131,10 @@ ts-jest@^24.1.0: semver "^5.5" yargs-parser "10.x" -ts-node@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" - integrity sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ== +ts-node@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.4.1.tgz#270b0dba16e8723c9fa4f9b4775d3810fd994b4f" + integrity sha512-5LpRN+mTiCs7lI5EtbXmF/HfMeCjzt7DH9CZwtkr6SywStrNQC723wG+aOWFiLNn7zT3kD/RnFqi3ZUfr4l5Qw== dependencies: arg "^4.1.0" diff "^4.0.1" From 04a37430d13ad8fa56144721d2caeab8dda2a652 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 18 Oct 2019 18:56:23 +0200 Subject: [PATCH 120/266] Bump @typescript-eslint/* to ^2.4.0 --- package.json | 4 +- yarn.lock | 134 ++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 129 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index bb49ecb..dcab116 100644 --- a/package.json +++ b/package.json @@ -47,8 +47,8 @@ "@types/katex": "^0.10.2", "@types/marked": "^0.6.5", "@types/node": "^10.13.0", - "@typescript-eslint/eslint-plugin": "^2.3.2", - "@typescript-eslint/parser": "^2.3.2", + "@typescript-eslint/eslint-plugin": "^2.4.0", + "@typescript-eslint/parser": "^2.4.0", "arrify": "^2.0.1", "dedent": "^0.7.0", "eslint": "^6.5.1", diff --git a/yarn.lock b/yarn.lock index b5c37d4..b378832 100644 --- a/yarn.lock +++ b/yarn.lock @@ -416,12 +416,12 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.3.2.tgz#7e112ca0bb29044d915baf10163a8199a20f7c69" - integrity sha512-tcnpksq1bXzcIRbYLeXkgp6l+ggEMXXUcl1wsSvL807fRtmvVQKygElwEUf4hBA76dNag3VAK1q2m3vd7qJaZA== +"@typescript-eslint/eslint-plugin@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.4.0.tgz#aaf6b542ff75b78f4191a8bf1c519184817caa24" + integrity sha512-se/YCk7PUoyMwSm/u3Ii9E+BgDUc736uw/lXCDpXEqRgPGsoBTtS8Mntue/vZX8EGyzGplYuePBuVyhZDM9EpQ== dependencies: - "@typescript-eslint/experimental-utils" "2.3.2" + "@typescript-eslint/experimental-utils" "2.4.0" eslint-utils "^1.4.2" functional-red-black-tree "^1.0.1" regexpp "^2.0.1" @@ -436,7 +436,16 @@ "@typescript-eslint/typescript-estree" "2.3.2" eslint-scope "^5.0.0" -"@typescript-eslint/parser@^2.0.0", "@typescript-eslint/parser@^2.3.2": +"@typescript-eslint/experimental-utils@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.4.0.tgz#dd8f3f466be25c3610a06fed22cfb6e6aa17f6d9" + integrity sha512-2cvhNaJoWavgTtnC7e1jUSPZQ7e4U2X9Yoy5sQmkS7lTESuyuZrlRcaoNuFfYEd6hgrmMU7+QoSp8Ad+kT1nfA== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.4.0" + eslint-scope "^5.0.0" + +"@typescript-eslint/parser@^2.0.0": version "2.3.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.3.2.tgz#e9b742e191cd1209930da469cde379591ad0af5b" integrity sha512-nq1UQeNGdKdqdgF6Ww+Ov2OidWgiL96+JYdXXZ2rkP/OWyc6KMNSbs6MpRCpI8q+PmDa7hBnHNQIo7w/drYccA== @@ -446,6 +455,16 @@ "@typescript-eslint/typescript-estree" "2.3.2" eslint-visitor-keys "^1.1.0" +"@typescript-eslint/parser@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.4.0.tgz#fe43ed5fec14af03d3594fce2c3b7ec4c8df0243" + integrity sha512-IouAKi/grJ4MFrwdXIJ1GHAwbPWYgkT3b/x8Q49F378c9nwgxVkO76e0rZeUVpwHMaUuoKG2sUeK0XGkwdlwkw== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.4.0" + "@typescript-eslint/typescript-estree" "2.4.0" + eslint-visitor-keys "^1.1.0" + "@typescript-eslint/typescript-estree@2.3.2": version "2.3.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.3.2.tgz#107414aa04e689fe6f7251eb63fb500217f2b7f4" @@ -456,6 +475,17 @@ lodash.unescape "4.0.1" semver "^6.3.0" +"@typescript-eslint/typescript-estree@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.4.0.tgz#722c95493e1b7682893edaaaec0e69f36917feef" + integrity sha512-/DzDAtMqF5d9IlXrrvu/Id/uoKjnSxf/3FbtKK679a/T7lbDM8qQuirtGvFy6Uh+x0hALuCMwnMfUf0P24/+Iw== + dependencies: + chokidar "^3.0.2" + glob "^7.1.4" + is-glob "^4.0.1" + lodash.unescape "4.0.1" + semver "^6.3.0" + abab@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.1.tgz#3fa17797032b71410ec372e11668f4b4ffc86a82" @@ -549,6 +579,14 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -722,6 +760,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -746,6 +789,13 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + browser-process-hrtime@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" @@ -833,6 +883,21 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +chokidar@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.2.2.tgz#a433973350021e09f2b853a2287781022c0dc935" + integrity sha512-bw3pm7kZ2Wa6+jQWYP/c7bAZy3i4GwiIiMO2EeRjrE48l8vBqC/WvFhSF0xyM8fQiPEGvwMY/5bqDG7sSEOuhg== + 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.2.0" + optionalDependencies: + fsevents "~2.1.1" + chownr@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" @@ -1528,6 +1593,13 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -1602,6 +1674,11 @@ fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" +fsevents@~2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.1.tgz#74c64e21df71721845d0c44fe54b7f56b82995a9" + integrity sha512-4FRPXWETxtigtJW/gxzEDsX1LVbPAM93VleB83kZB+ellqbHMkyt2aJfuzNLRvFPnGi6bcE5SvfxgbXPeKteJw== + function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -1657,6 +1734,13 @@ glob-parent@^5.0.0: dependencies: is-glob "^4.0.1" +glob-parent@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + dependencies: + is-glob "^4.0.1" + glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" @@ -1905,6 +1989,13 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +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" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -1993,7 +2084,7 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -2007,6 +2098,11 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -2968,6 +3064,11 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + npm-bundled@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" @@ -3262,6 +3363,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picomatch@^2.0.4: + version "2.0.7" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" + integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== + pidtree@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.0.tgz#f6fada10fccc9f99bf50e90d0b23d72c9ebc2e6b" @@ -3436,6 +3542,13 @@ readable-stream@^2.0.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readdirp@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" + integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== + dependencies: + picomatch "^2.0.4" + realpath-native@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" @@ -4077,6 +4190,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" From 9e27f0a8edc3dfef7e6cc32de0bc7fd4b972879b Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 18 Oct 2019 19:02:55 +0200 Subject: [PATCH 121/266] Bump eslint-config-standard-with-typescript to ^10.0.0 --- .eslintrc.js | 1 - package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index ba08c62..8a1dca2 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -99,7 +99,6 @@ module.exports = { singleline: { delimiter: 'comma', requireLast: false }, }], '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-floating-promises': 'error', '@typescript-eslint/no-namespace': 'warn', '@typescript-eslint/no-require-imports': 'error', '@typescript-eslint/no-unused-vars': ['error', { diff --git a/package.json b/package.json index dcab116..64b5362 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "arrify": "^2.0.1", "dedent": "^0.7.0", "eslint": "^6.5.1", - "eslint-config-standard-with-typescript": "^9.0.0", + "eslint-config-standard-with-typescript": "^10.0.0", "eslint-import-resolver-ts": "^0.4.0", "eslint-plugin-import": "^2.18.0", "eslint-plugin-node": "^10.0.0", diff --git a/yarn.lock b/yarn.lock index b378832..1347a2c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1253,10 +1253,10 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" -eslint-config-standard-with-typescript@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-9.0.0.tgz#961bbd4d43e4f7e772cb6d8bf728bf88c6bbbff3" - integrity sha512-e9ReAJbpYY8p0jndi6+x4K2PWkOU4xFqEJ6XRmLLoq7SxaqC9n5vlxqfadAznoMoffkjW8cN7HlyQLj15ITpvQ== +eslint-config-standard-with-typescript@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-10.0.0.tgz#f96a5aa9ef9dfd76aafdc07c44754fc4067210ed" + integrity sha512-t21JVyToxvoOFgcg69K6HM38SwWM3QADiOHyz7q+4Qz+Iir3nvRCstGpPzRCKnlXBHinP4AM0QtytkE1J6otig== dependencies: "@typescript-eslint/parser" "^2.0.0" eslint-config-standard "^14.0.0" From 495f17fd876a728020d46167681d217843dba79e Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 2 Oct 2019 00:54:30 +0200 Subject: [PATCH 122/266] Convert repository to "monorepo" --- .eslintignore | 5 +- .eslintrc.js | 5 +- .gitignore | 5 +- .travis.yml | 14 +- .vscode/settings.json | 3 + .yarnrc | 2 + README.adoc | 2 +- jest.config.base.js | 196 ++++++++++++++ jest.config.js | 190 +------------- package.json | 50 ++-- packages/ipynb2html/jest.config.js | 7 + packages/ipynb2html/package.json | 43 ++++ .../ipynb2html/src}/elementCreator.ts | 0 .../ipynb2html/src}/htmlRenderer.ts | 0 {src => packages/ipynb2html/src}/index.ts | 0 .../ipynb2html/src}/internal/utils.ts | 0 .../ipynb2html/src}/markdownRenderer.ts | 0 .../ipynb2html/src}/mathExtractor.ts | 0 {src => packages/ipynb2html/src}/nbformat.ts | 0 .../ipynb2html/src}/readNotebookTitle.ts | 0 {src => packages/ipynb2html/src}/renderer.ts | 0 {src => packages/ipynb2html/src}/version.ts | 0 .../ipynb2html/test}/elementCreator.test.ts | 0 .../ipynb2html/test}/htmlRenderer.test.ts | 0 .../ipynb2html/test}/internal/utils.test.ts | 0 .../ipynb2html/test}/mathExtractor.test.ts | 0 .../test}/readNotebookTitle.test.ts | 0 .../ipynb2html/test}/renderer.test.tsx | 6 +- .../test}/support/fixtures/notebook.ts | 0 .../ipynb2html/test}/tsconfig.json | 0 packages/ipynb2html/tsconfig.json | 17 ++ scripts/bump-version | 33 +++ tsconfig.base.json | 74 ++++++ tsconfig.json | 83 +----- yarn.lock | 239 +++++++++++++++++- 35 files changed, 654 insertions(+), 320 deletions(-) create mode 100644 .yarnrc create mode 100644 jest.config.base.js create mode 100644 packages/ipynb2html/jest.config.js create mode 100644 packages/ipynb2html/package.json rename {src => packages/ipynb2html/src}/elementCreator.ts (100%) rename {src => packages/ipynb2html/src}/htmlRenderer.ts (100%) rename {src => packages/ipynb2html/src}/index.ts (100%) rename {src => packages/ipynb2html/src}/internal/utils.ts (100%) rename {src => packages/ipynb2html/src}/markdownRenderer.ts (100%) rename {src => packages/ipynb2html/src}/mathExtractor.ts (100%) rename {src => packages/ipynb2html/src}/nbformat.ts (100%) rename {src => packages/ipynb2html/src}/readNotebookTitle.ts (100%) rename {src => packages/ipynb2html/src}/renderer.ts (100%) rename {src => packages/ipynb2html/src}/version.ts (100%) rename {test => packages/ipynb2html/test}/elementCreator.test.ts (100%) rename {test => packages/ipynb2html/test}/htmlRenderer.test.ts (100%) rename {test => packages/ipynb2html/test}/internal/utils.test.ts (100%) rename {test => packages/ipynb2html/test}/mathExtractor.test.ts (100%) rename {test => packages/ipynb2html/test}/readNotebookTitle.test.ts (100%) rename {test => packages/ipynb2html/test}/renderer.test.tsx (98%) rename {test => packages/ipynb2html/test}/support/fixtures/notebook.ts (100%) rename {test => packages/ipynb2html/test}/tsconfig.json (100%) create mode 100644 packages/ipynb2html/tsconfig.json create mode 100755 scripts/bump-version create mode 100644 tsconfig.base.json diff --git a/.eslintignore b/.eslintignore index f840b9b..2152323 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,6 +2,9 @@ /.tmp/ /coverage/ /dist/ -/lib/ +/packages/*/coverage/ +/packages/*/lib/ +/packages/*/*.js +/scripts/* /types/ /*.js diff --git a/.eslintrc.js b/.eslintrc.js index 8a1dca2..2d0f905 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,9 +1,10 @@ const tsconfigs = [ - 'tsconfig.json', - 'test/tsconfig.json', + 'packages/*/tsconfig.json', + 'packages/*/test/tsconfig.json', ] module.exports = { + root: true, parser: '@typescript-eslint/parser', parserOptions: { ecmaFeatures: { diff --git a/.gitignore b/.gitignore index 52437b0..ad1aadd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,10 @@ /coverage/ /dist/ -/lib/ +/packages/*/coverage/ +/packages/*/lib/ /.*cache/ /.tmp/ node_modules/ +.tsbuildinfo +tsconfig.tsbuildinfo *.log diff --git a/.travis.yml b/.travis.yml index 9b4378c..f54ec81 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,15 @@ dist: bionic + language: node_js node_js: - '10' - '12' - node +env: + global: + - secure: "DrPA1eYBRjS+1/w/sRq/r5wQyOewuh1PGPzFtQR62TJeAyO6AvKQ6wfesxMA898b+0D3SCNxrCVK12XB3auySEOZocQuN7N51hsteA/QtPoBBbnoHy8Dap2YbiJ5fbCVnM/Wl/Z2rZmQWFBM3rmqXggCyEhKEw3kkz8WMm/7UCGVxmoHUelpMnDEII0RiJdPCGT19IA90KpJDsqbSzTVY+TsqjSNuN91LQ23ApwSHKklvbvKWxcgrtAzJDXLeS9CS3QqSHucurOM2Kpv0umOkBzds4da+NtWKYZC3XxThmMB5wT7b60EZPIc/iFftQFy2qiDAFxeGN+j9kwsNX68aXl4MuCGlzdvGj0KkeXYYhl1Jusc30uTzXYMlz2b3u+AcsMLLxFs2HvUU94SpAfe9VrarSnQK+6CZz0eCtF/NCCi6J9GqlBTsqzZDmdVaJpFDG1FidC4Ka9FcteKcWXqffowQ5KjIhqaearSmRESMqepV7T8tDUCb217PE0C+L0NGfg6RaY4DtGsJAawDeh/09aXrP6NakAKjWUfaJqjhkMexB8JTb+yanjVXsgj4VUfvTgvWjMi+yU3DIfopL+mawvgckRRL9DTEIf5ICjSruyEH8FWEz+kMzas41zboabR12YMLuorHfgZu31DiDsJkSD292t/lwWW6oybRl0iJBk=" # NPM_TOKEN=ceed......2bf2 + cache: yarn install: @@ -15,11 +20,12 @@ script: - yarn run test - yarn run lint +before_deploy: + - echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}' >> "$HOME"/.npmrc + deploy: - provider: npm - email: jakub@jirutka.cz - api_key: - secure: "0D1IFNeu0BuCg8SCuNUNXARDARNQbmPCH1qivlIRURaoe5Lns/oTunavJ7eIrvPA/1wMOozWGo6TlVb0ucnWNJ+ux31XTX1BGFoTAUw/dZk3C3s0HT7WuTKLrO6itIQtoBIWMfKAAe5doF00fBDQgFgSwU64CgWsZ2GUNKxXOAfkagInYHU5izGGsS+HQ5FyR5QqQzkHNUiLYs9IA1V3TF2s93ITmcqQZlah/n03BChBEA/LRkMqlEF+1YKaO+4q0PglHYJ1vlN/8n/TQTmAgsm4S67x+ADcBA/3M5UawXPGf+ZyYr1sAgjnE/Rt5BrhApnzrb2m1z1vig1uRPL/bsKADZfSDJVyr+dU4zl73g8U9QtpOMdlOphLWdgWix+JmbUVgtu/iC83zjBBHEfP97NFNJLVkBhnSxoX8xu9+za0jYKlSln5Khoegh1lw9YGx1A/3Z34FxY+G5Fh2cUidrMBrI4F9BJWoiDAnEvvB3yFhZtqbDta1p2iROqwW8/Z5M1CjtyMnemvPi/9oGvlQVaqn7mr45srHIJHjqxdS9HMLDhy7fKr407NvSOl6N7VNxOTW2KfawAkCWqJccEvfRnoaouRhUhdMcDTqiIMl8hYO4jEML6ioJisaLksWXeT9Sv6QoNbPPaWoGjDc9/c0eedfn49U4YMnjCqfIpZAdo=" # 9919......6b7c + provider: script + script: yarn publish-all --non-interactive skip_cleanup: true on: tags: true diff --git a/.vscode/settings.json b/.vscode/settings.json index 1223b2c..b7f924c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,6 +10,9 @@ "files.encoding": "utf8", "files.eol": "\n", + "files.exclude": { + "**/.tsbuildinfo": true, + }, "files.insertFinalNewline": true, "files.trimTrailingWhitespace": true, diff --git a/.yarnrc b/.yarnrc new file mode 100644 index 0000000..307cf2d --- /dev/null +++ b/.yarnrc @@ -0,0 +1,2 @@ +version-git-message "Release version %s" +version-sign-git-tag true diff --git a/README.adoc b/README.adoc index 8eb58a8..544b1a8 100644 --- a/README.adoc +++ b/README.adoc @@ -54,7 +54,7 @@ yarn test [source] yarn lint -IMPORTANT: Keep in mind that JS sources are located in the directory `src`; directory `lib` contains transpiled code (created after running `yarn build`)! +IMPORTANT: Keep in mind that JS sources are located in the `src` directories; `lib` directories contains transpiled code (created after running `yarn build`)! === Visual Studio Code diff --git a/jest.config.base.js b/jest.config.base.js new file mode 100644 index 0000000..1a191cc --- /dev/null +++ b/jest.config.base.js @@ -0,0 +1,196 @@ +// For a detailed explanation regarding each configuration property, visit: +// https://jestjs.io/docs/en/configuration.html + +module.exports = { + // All imported modules in your tests should be mocked automatically + // automock: false, + + // Stop running tests after `n` failures + // bail: 0, + + // Respect "browser" field in package.json when resolving modules + // browser: false, + + // The directory where Jest should store its cached dependency information + // cacheDirectory: '/tmp/jest_rt', + + // Automatically clear mock calls and instances between every test + clearMocks: true, + + // Indicates whether the coverage information should be collected while executing the test + // collectCoverage: false, + + // An array of glob patterns indicating a set of files for which coverage information should be collected + collectCoverageFrom: [ + '/src/**/*.ts', + ], + + // The directory where Jest should output its coverage files + coverageDirectory: '/coverage', + + // An array of regexp pattern strings used to skip coverage collection + // coveragePathIgnorePatterns: [ + // '/node_modules/' + // ], + + // A list of reporter names that Jest uses when writing coverage reports + // coverageReporters: [ + // 'json', + // 'text', + // 'lcov', + // 'clover' + // ], + + // An object that configures minimum threshold enforcement for coverage results + // coverageThreshold: null, + + // A path to a custom dependency extractor + // dependencyExtractor: null, + + // Make calling deprecated APIs throw helpful error messages + // errorOnDeprecated: false, + + // Force coverage collection from ignored files using an array of glob patterns + // forceCoverageMatch: [], + + // A path to a module which exports an async function that is triggered once before all test suites + // globalSetup: null, + + // A path to a module which exports an async function that is triggered once after all test suites + // globalTeardown: null, + + // A set of global variables that need to be available in all test environments + globals: { + 'ts-jest': { + compiler: 'ttypescript', + tsConfig: '/tsconfig.json', + }, + }, + + // An array of directory names to be searched recursively up from the requiring module's location + // moduleDirectories: [ + // 'node_modules' + // ], + + // An array of file extensions your modules use + // moduleFileExtensions: [ + // 'js', + // 'json', + // 'jsx', + // 'ts', + // 'tsx', + // 'node' + // ], + + // A map from regular expressions to module names that allow to stub out resources with a single module + moduleNameMapper: { + '@/(.*)': '/src/$1', + '~/(.*)': `${__dirname}/$1`, + }, + + // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader + // modulePathIgnorePatterns: [], + + // Activates notifications for test results + // notify: false, + + // An enum that specifies notification mode. Requires { notify: true } + // notifyMode: "failure-change", + + // A preset that is used as a base for Jest's configuration + preset: 'ts-jest', + + // Run tests from one or more projects + // projects: null, + + // Use this configuration option to add custom reporters to Jest + // reporters: undefined, + + // Automatically reset mock state between every test + // resetMocks: false, + + // Reset the module registry before running each individual test + // resetModules: false, + + // A path to a custom resolver + // resolver: null, + + // Automatically restore mock state between every test + // restoreMocks: false, + + // The root directory that Jest should scan for tests and modules within + // rootDir: null, + + // A list of paths to directories that Jest should use to search for files in + // roots: [ + // '' + // ], + + // Allows you to use a custom runner instead of Jest's default test runner + // runner: 'jest-runner', + + // The paths to modules that run some code to configure or set up the testing environment before each test + // setupFiles: [], + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + setupFilesAfterEnv: [ + `${__dirname}/test/setup.ts`, + ], + + // A list of paths to snapshot serializer modules Jest should use for snapshot testing + // snapshotSerializers: [], + + // The test environment that will be used for testing + testEnvironment: 'node', + + // Options that will be passed to the testEnvironment + // testEnvironmentOptions: {}, + + // Adds a location field to test results + // testLocationInResults: false, + + // The glob patterns Jest uses to detect test files + testMatch: [ + '/test/**/*.test.[jt]s?(x)', + ], + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped + // testPathIgnorePatterns: [ + // '/node_modules/' + // ], + + // The regexp pattern or array of patterns that Jest uses to detect test files + // testRegex: [], + + // This option allows the use of a custom results processor + // testResultsProcessor: null, + + // This option allows use of a custom test runner + // testRunner: 'jasmine2', + + // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href + // testURL: 'http://localhost', + + // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" + // timers: 'real', + + // A map from regular expressions to paths to transformers + // transform: null, + + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation + // transformIgnorePatterns: [ + // '/node_modules/' + // ], + + // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them + // unmockedModulePathPatterns: undefined, + + // Indicates whether each individual test should be reported during the run + // verbose: null, + + // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode + // watchPathIgnorePatterns: [], + + // Whether to use watchman for file crawling + // watchman: true, +} diff --git a/jest.config.js b/jest.config.js index 00703b6..908a64d 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,193 +2,11 @@ // https://jestjs.io/docs/en/configuration.html module.exports = { - // All imported modules in your tests should be mocked automatically - // automock: false, - - // Stop running tests after `n` failures - // bail: 0, - - // Respect "browser" field in package.json when resolving modules - // browser: false, - - // The directory where Jest should store its cached dependency information - // cacheDirectory: '/tmp/jest_rt', - - // Automatically clear mock calls and instances between every test - clearMocks: true, - - // Indicates whether the coverage information should be collected while executing the test - // collectCoverage: false, - - // An array of glob patterns indicating a set of files for which coverage information should be collected - collectCoverageFrom: [ - '/src/**/*.ts', - ], - - // The directory where Jest should output its coverage files - coverageDirectory: 'coverage', - - // An array of regexp pattern strings used to skip coverage collection - // coveragePathIgnorePatterns: [ - // '/node_modules/' - // ], - - // A list of reporter names that Jest uses when writing coverage reports - // coverageReporters: [ - // 'json', - // 'text', - // 'lcov', - // 'clover' - // ], - - // An object that configures minimum threshold enforcement for coverage results - // coverageThreshold: null, - - // A path to a custom dependency extractor - // dependencyExtractor: null, - - // Make calling deprecated APIs throw helpful error messages - // errorOnDeprecated: false, - - // Force coverage collection from ignored files using an array of glob patterns - // forceCoverageMatch: [], - - // A path to a module which exports an async function that is triggered once before all test suites - // globalSetup: null, - - // A path to a module which exports an async function that is triggered once after all test suites - // globalTeardown: null, - - // A set of global variables that need to be available in all test environments - globals: { - 'ts-jest': { - compiler: 'ttypescript', - }, - }, - - // An array of directory names to be searched recursively up from the requiring module's location - // moduleDirectories: [ - // 'node_modules' - // ], - - // An array of file extensions your modules use - // moduleFileExtensions: [ - // 'js', - // 'json', - // 'jsx', - // 'ts', - // 'tsx', - // 'node' - // ], - - // A map from regular expressions to module names that allow to stub out resources with a single module - moduleNameMapper: { - '@/(.*)': '/src/$1', - }, - - // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader - // modulePathIgnorePatterns: [], - - // Activates notifications for test results - // notify: false, - - // An enum that specifies notification mode. Requires { notify: true } - // notifyMode: "failure-change", - - // A preset that is used as a base for Jest's configuration - preset: 'ts-jest', + ...require('./jest.config.base'), // Run tests from one or more projects - // projects: null, - - // Use this configuration option to add custom reporters to Jest - // reporters: undefined, - - // Automatically reset mock state between every test - // resetMocks: false, - - // Reset the module registry before running each individual test - // resetModules: false, - - // A path to a custom resolver - // resolver: null, - - // Automatically restore mock state between every test - // restoreMocks: false, - - // The root directory that Jest should scan for tests and modules within - // rootDir: null, - - // A list of paths to directories that Jest should use to search for files in - // roots: [ - // '' - // ], - - // Allows you to use a custom runner instead of Jest's default test runner - // runner: 'jest-runner', - - // The paths to modules that run some code to configure or set up the testing environment before each test - // setupFiles: [], - - // A list of paths to modules that run some code to configure or set up the testing framework before each test - setupFilesAfterEnv: [ - '/test/setup.ts', + projects: [ + '', + '/packages/*/', ], - - // A list of paths to snapshot serializer modules Jest should use for snapshot testing - // snapshotSerializers: [], - - // The test environment that will be used for testing - testEnvironment: 'node', - - // Options that will be passed to the testEnvironment - // testEnvironmentOptions: {}, - - // Adds a location field to test results - // testLocationInResults: false, - - // The glob patterns Jest uses to detect test files - testMatch: [ - '/test/**/*.test.[jt]s?(x)', - ], - - // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - // testPathIgnorePatterns: [ - // '/node_modules/' - // ], - - // The regexp pattern or array of patterns that Jest uses to detect test files - // testRegex: [], - - // This option allows the use of a custom results processor - // testResultsProcessor: null, - - // This option allows use of a custom test runner - // testRunner: 'jasmine2', - - // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href - // testURL: 'http://localhost', - - // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" - // timers: 'real', - - // A map from regular expressions to paths to transformers - // transform: null, - - // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - // transformIgnorePatterns: [ - // '/node_modules/' - // ], - - // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them - // unmockedModulePathPatterns: undefined, - - // Indicates whether each individual test should be reported during the run - // verbose: null, - - // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode - // watchPathIgnorePatterns: [], - - // Whether to use watchman for file crawling - // watchman: true, } diff --git a/package.json b/package.json index 64b5362..1be6e74 100644 --- a/package.json +++ b/package.json @@ -1,45 +1,20 @@ { - "name": "ipynb2html", + "name": "ipynb2html-parent", "version": "0.1.0-beta.5", - "description": "Convert Jupyter Notebook to static HTML", - "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": [ - "converter", - "html", - "ipython", - "jupyter", - "notebook" - ], - "main": "lib/index.js", - "types": "lib/index.d.ts", - "files": [ - "lib", - "src" - ], + "private": true, "scripts": { - "build": "ttsc", - "clean": "rimraf coverage/ dist/ lib/ *.log", + "build": "ttsc --build", + "clean": "rimraf coverage/ lib/ *.log && wsrun clean", "lint": "eslint --ext .ts,.tsx,.js .", + "postinstall": "run-s build", + "publish-all": "wsrun --serial publish", "test": "jest --detectOpenHandles --coverage --verbose", - "watch-ts": "ttsc -w" + "version": "./scripts/bump-version && git add **/package.json", + "watch-ts": "ttsc --build --watch" }, "engines": { "node": ">=10.13.0" }, - "dependencies": { - "anser": "^1.4.9", - "highlightjs": "^9.12.0", - "katex": "^0.11.0", - "marked": "^0.7.0", - "nodom": "^2.4.0" - }, "devDependencies": { "@types/dedent": "^0.7.0", "@types/highlightjs": "^9.12.0", @@ -67,6 +42,11 @@ "ts-transformer-export-default-name": "^0.1.0", "ts-transformer-inline-file": "^0.1.1", "ttypescript": "^1.5.7", - "typescript": "~3.6.4" - } + "typescript": "~3.6.4", + "wsrun": "^5.0.2", + "yarn-version-bump": "^0.0.3" + }, + "workspaces": [ + "packages/*" + ] } diff --git a/packages/ipynb2html/jest.config.js b/packages/ipynb2html/jest.config.js new file mode 100644 index 0000000..0a2d9a3 --- /dev/null +++ b/packages/ipynb2html/jest.config.js @@ -0,0 +1,7 @@ +const pkg = require('./package.json') + +module.exports = { + ...require('../../jest.config.base'), + name: pkg.name, + displayName: pkg.name, +} diff --git a/packages/ipynb2html/package.json b/packages/ipynb2html/package.json new file mode 100644 index 0000000..ac2b103 --- /dev/null +++ b/packages/ipynb2html/package.json @@ -0,0 +1,43 @@ +{ + "name": "ipynb2html", + "version": "0.1.0-beta.5", + "description": "Convert Jupyter Notebook to static HTML", + "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": [ + "converter", + "html", + "ipython", + "jupyter", + "notebook" + ], + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "lib", + "src" + ], + "scripts": { + "build": "tsc --build", + "clean": "rimraf coverage/ lib/ .tsbuildinfo", + "lint": "eslint --ext .ts,.tsx,.js .", + "test": "jest --detectOpenHandles --coverage --verbose", + "watch-ts": "tsc --build --watch" + }, + "engines": { + "node": ">=10.13.0" + }, + "dependencies": { + "anser": "^1.4.9", + "highlightjs": "^9.12.0", + "katex": "^0.11.0", + "marked": "^0.7.0", + "nodom": "^2.3.0" + } +} diff --git a/src/elementCreator.ts b/packages/ipynb2html/src/elementCreator.ts similarity index 100% rename from src/elementCreator.ts rename to packages/ipynb2html/src/elementCreator.ts diff --git a/src/htmlRenderer.ts b/packages/ipynb2html/src/htmlRenderer.ts similarity index 100% rename from src/htmlRenderer.ts rename to packages/ipynb2html/src/htmlRenderer.ts diff --git a/src/index.ts b/packages/ipynb2html/src/index.ts similarity index 100% rename from src/index.ts rename to packages/ipynb2html/src/index.ts diff --git a/src/internal/utils.ts b/packages/ipynb2html/src/internal/utils.ts similarity index 100% rename from src/internal/utils.ts rename to packages/ipynb2html/src/internal/utils.ts diff --git a/src/markdownRenderer.ts b/packages/ipynb2html/src/markdownRenderer.ts similarity index 100% rename from src/markdownRenderer.ts rename to packages/ipynb2html/src/markdownRenderer.ts diff --git a/src/mathExtractor.ts b/packages/ipynb2html/src/mathExtractor.ts similarity index 100% rename from src/mathExtractor.ts rename to packages/ipynb2html/src/mathExtractor.ts diff --git a/src/nbformat.ts b/packages/ipynb2html/src/nbformat.ts similarity index 100% rename from src/nbformat.ts rename to packages/ipynb2html/src/nbformat.ts diff --git a/src/readNotebookTitle.ts b/packages/ipynb2html/src/readNotebookTitle.ts similarity index 100% rename from src/readNotebookTitle.ts rename to packages/ipynb2html/src/readNotebookTitle.ts diff --git a/src/renderer.ts b/packages/ipynb2html/src/renderer.ts similarity index 100% rename from src/renderer.ts rename to packages/ipynb2html/src/renderer.ts diff --git a/src/version.ts b/packages/ipynb2html/src/version.ts similarity index 100% rename from src/version.ts rename to packages/ipynb2html/src/version.ts diff --git a/test/elementCreator.test.ts b/packages/ipynb2html/test/elementCreator.test.ts similarity index 100% rename from test/elementCreator.test.ts rename to packages/ipynb2html/test/elementCreator.test.ts diff --git a/test/htmlRenderer.test.ts b/packages/ipynb2html/test/htmlRenderer.test.ts similarity index 100% rename from test/htmlRenderer.test.ts rename to packages/ipynb2html/test/htmlRenderer.test.ts diff --git a/test/internal/utils.test.ts b/packages/ipynb2html/test/internal/utils.test.ts similarity index 100% rename from test/internal/utils.test.ts rename to packages/ipynb2html/test/internal/utils.test.ts diff --git a/test/mathExtractor.test.ts b/packages/ipynb2html/test/mathExtractor.test.ts similarity index 100% rename from test/mathExtractor.test.ts rename to packages/ipynb2html/test/mathExtractor.test.ts diff --git a/test/readNotebookTitle.test.ts b/packages/ipynb2html/test/readNotebookTitle.test.ts similarity index 100% rename from test/readNotebookTitle.test.ts rename to packages/ipynb2html/test/readNotebookTitle.test.ts diff --git a/test/renderer.test.tsx b/packages/ipynb2html/test/renderer.test.tsx similarity index 98% rename from test/renderer.test.tsx rename to packages/ipynb2html/test/renderer.test.tsx index bcb040b..d11aabc 100644 --- a/test/renderer.test.tsx +++ b/packages/ipynb2html/test/renderer.test.tsx @@ -1,4 +1,4 @@ -import './setup' // setupFilesAfterEnv doesn't work here +import '~/test/setup' // setupFilesAfterEnv doesn't work here import arrify from 'arrify' import { Document, HTMLElement } from 'nodom' @@ -8,8 +8,8 @@ import buildRenderer, { NbRenderer, Options as RendererOpts } from '@/renderer' import { DisplayData, MimeBundle, MultilineString, Notebook } from '@/nbformat' // eslint-disable-next-line @typescript-eslint/no-unused-vars -import { Anything } from './support/matchers/toMatchElement' -import { mockLastResult, mockResults } from './support/helpers' +import { Anything } from '~/test/support/matchers/toMatchElement' +import { mockLastResult, mockResults } from '~/test/support/helpers' import * as _fixtures from './support/fixtures/notebook' const document = new Document() diff --git a/test/support/fixtures/notebook.ts b/packages/ipynb2html/test/support/fixtures/notebook.ts similarity index 100% rename from test/support/fixtures/notebook.ts rename to packages/ipynb2html/test/support/fixtures/notebook.ts diff --git a/test/tsconfig.json b/packages/ipynb2html/test/tsconfig.json similarity index 100% rename from test/tsconfig.json rename to packages/ipynb2html/test/tsconfig.json diff --git a/packages/ipynb2html/tsconfig.json b/packages/ipynb2html/tsconfig.json new file mode 100644 index 0000000..1835848 --- /dev/null +++ b/packages/ipynb2html/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib", + "tsBuildInfoFile": "./.tsbuildinfo", + "baseUrl": ".", + "paths": { + "*": ["../../types/*"], + "@/*": ["./src/*"], + "~/*": ["../../*"], + }, + }, + "include": [ + "./src", + ], +} diff --git a/scripts/bump-version b/scripts/bump-version new file mode 100755 index 0000000..45737be --- /dev/null +++ b/scripts/bump-version @@ -0,0 +1,33 @@ +#!/usr/bin/env node +'use strict' + +const path = require('path') +const { bumpVersion } = require('yarn-version-bump/src/bump-version') +const { processJsonFile } = require('yarn-version-bump/src/util/json') +const Workspace = require('yarn-version-bump/src/workspace') +const rootPkg = require('../package.json') + + +async function workspacePackages () { + return Object.keys((await new Workspace('.').workspaceSnapshot).packages) +} + +async function bumpAllPackages (newVersion) { + processJsonFile('package.json', pkg => { + pkg.version = newVersion + return pkg + }) + for (const pkgname of await workspacePackages()) { + console.log(`bumping ${pkgname} to ${newVersion}`) + await bumpVersion(pkgname, newVersion, '.') + } +} + +const newVersion = process.argv[2] || rootPkg.version + +process.chdir(path.resolve(__dirname, '..')) + +bumpAllPackages(newVersion).catch(err => { + console.error(err) + process.exit(1) +}) diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..a1949fa --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,74 @@ +{ + "compilerOptions": { + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es2018", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + "jsx": "react", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + "jsxFactory": "JSX.createElement", /* Specify the JSX factory function to use when targeting react JSX emit, e.g. React.createElement or h. */ + "declaration": true, /* Generates corresponding '.d.ts' file. */ + "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + // "outDir": "./lib", /* Redirect output structure to the directory. */ + // "rootDir": ".", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + "strictNullChecks": true, /* Enable strict null checks. */ + "strictFunctionTypes": true, /* Enable strict checking of function types. */ + "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + "typeRoots": [ /* List of folders to include type definitions from. */ + "./types", + "./node_modules/@types" + ], + // "types": [], /* Type declaration files to be included in compilation. */ + "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + "resolveJsonModule": true, /* Include modules imported with .json extension. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + // AST transformers used by ttypescript. + "plugins": [ + { "transform": "ts-transformer-export-default-name" }, + { "transform": "ts-transformer-inline-file/transformer" }, + ], + } +} diff --git a/tsconfig.json b/tsconfig.json index f7f207b..4f971a7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,83 +1,6 @@ { - "compilerOptions": { - /* Basic Options */ - // "incremental": true, /* Enable incremental compilation */ - "target": "es2018", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ - "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ - // "lib": [], /* Specify library files to be included in the compilation. */ - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - "jsx": "react", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - "jsxFactory": "JSX.createElement", /* Specify the JSX factory function to use when targeting react JSX emit, e.g. React.createElement or h. */ - "declaration": true, /* Generates corresponding '.d.ts' file. */ - "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "./lib", /* Redirect output structure to the directory. */ - // "rootDir": ".", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": true, /* Enable all strict type-checking options. */ - "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - "strictNullChecks": true, /* Enable strict null checks. */ - "strictFunctionTypes": true, /* Enable strict checking of function types. */ - "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - - /* Module Resolution Options */ - "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - "paths": { /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - "*": ["./types/*"], - "@/*": ["./src/*"], /* resolve all modules prefixed with '@/' from 'src' directory */ - }, - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - "typeRoots": [ /* List of folders to include type definitions from. */ - "./types", - "./node_modules/@types" - ], - // "types": [], /* Type declaration files to be included in compilation. */ - "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - "resolveJsonModule": true, /* Include modules imported with .json extension. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - - // AST transformers used by ttypescript. - "plugins": [ - { "transform": "ts-transformer-export-default-name" }, - { "transform": "ts-transformer-inline-file/transformer" }, - ] - }, - "include": [ - "src", - ], - "exclude": [ - "node_modules", + "files": [], + "references": [ + { "path": "./packages/ipynb2html" }, ] } diff --git a/yarn.lock b/yarn.lock index 1347a2c..a874042 100644 --- a/yarn.lock +++ b/yarn.lock @@ -765,6 +765,11 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== +bluebird@^3.5.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" + integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -869,7 +874,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -930,6 +935,15 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -1018,6 +1032,15 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -1078,7 +1101,7 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" -decamelize@^1.2.0: +decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -1142,6 +1165,11 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= + detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -1451,6 +1479,19 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -1703,11 +1744,21 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -1970,6 +2021,11 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + 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" @@ -2103,6 +2159,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-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -2720,6 +2781,13 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + left-pad@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" @@ -2758,6 +2826,17 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" +load-json-file@^5.0.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" + integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== + dependencies: + graceful-fs "^4.1.15" + parse-json "^4.0.0" + pify "^4.0.1" + strip-bom "^3.0.0" + type-fest "^0.3.0" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -2789,7 +2868,7 @@ lodash.unescape@4.0.1: resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14: +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, 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== @@ -2801,6 +2880,21 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -2838,6 +2932,13 @@ marked@^0.7.0: resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg== +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= + dependencies: + mimic-fn "^1.0.0" + memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" @@ -3034,7 +3135,7 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -nodom@^2.4.0: +nodom@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/nodom/-/nodom-2.4.0.tgz#de09965814d717fba21eb7be891c26ca6c437dd8" integrity sha512-qhfYgpoCSi37HLiViMlf94YqMQdvk3n3arI1uGbAWZK9NKCYRSI42W8lATeGloYGLYxb8us1C5rTvtsXjwdWQg== @@ -3224,6 +3325,15 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -3452,6 +3562,11 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.3" +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + psl@^1.1.24, psl@^1.1.28: version "1.4.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" @@ -3636,6 +3751,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -3871,6 +3991,13 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" + source-map-resolve@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" @@ -3938,6 +4065,13 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" +split@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -3993,7 +4127,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.1.0: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -4140,12 +4274,12 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -throat@^4.0.0: +throat@^4.0.0, throat@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= -through@^2.3.6: +through@2, through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -4322,6 +4456,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + typescript@~3.6.4: version "3.6.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.4.tgz#b18752bb3792bc1a0281335f7f6ebf1bbfc5b91d" @@ -4488,6 +4627,14 @@ wordwrap@~1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -4511,6 +4658,27 @@ write-file-atomic@2.4.1: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write-file-atomic@^2.0.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-json-file@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" + integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= + dependencies: + detect-indent "^5.0.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + pify "^3.0.0" + sort-keys "^2.0.0" + write-file-atomic "^2.0.0" + write@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" @@ -4525,16 +4693,40 @@ ws@^5.2.0: dependencies: async-limiter "~1.0.0" +wsrun@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/wsrun/-/wsrun-5.0.2.tgz#e7d1ebc8bc861647116608c81184fe7521213002" + integrity sha512-j3vkJUBa1Z35R6yqc04TTsEnPKKlHV0NiMbdM3QiQMQJDpPUoMgq5RegDTCyxx0ZnmsYCbwNxPGX2ps9DSIXaQ== + dependencies: + bluebird "^3.5.1" + chalk "^2.3.0" + glob "^7.1.2" + lodash "^4.17.4" + minimatch "^3.0.4" + split "^1.0.1" + throat "^4.1.0" + yargs "^10.0.3" + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + yallist@^3.0.0, yallist@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" @@ -4555,6 +4747,31 @@ yargs-parser@^13.1.1: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" + integrity sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ== + dependencies: + camelcase "^4.1.0" + +yargs@^10.0.3: + version "10.1.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" + integrity sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig== + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^8.1.0" + yargs@^13.3.0: version "13.3.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" @@ -4571,6 +4788,14 @@ yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.1" +yarn-version-bump@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/yarn-version-bump/-/yarn-version-bump-0.0.3.tgz#3feac3b4e5d461d78621f020ee3f7a42296852b2" + integrity sha512-AmQ1O1TJo78WODccEx10Kqywkt+pXbRFSoVxtAoEEPn/O98RAqjeoQSV/SdTNcDwzU9W6zOudvFmutwWo2CdGA== + dependencies: + load-json-file "^5.0.0" + write-json-file "^2.3.0" + yn@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" From 1ae226918cc37104dd8cfb3065870a515041efb9 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 3 Oct 2019 14:44:58 +0200 Subject: [PATCH 123/266] Split package to ipynb2html and ipynb2html-core --- README.adoc | 29 ++++++++++++++- package.json | 1 + packages/ipynb2html-core/jest.config.js | 7 ++++ packages/ipynb2html-core/package.json | 36 +++++++++++++++++++ .../src/elementCreator.ts | 0 .../src/htmlRenderer.ts | 0 packages/ipynb2html-core/src/index.ts | 8 +++++ .../src/internal/utils.ts | 0 .../src/mathExtractor.ts | 0 .../src/nbformat.ts | 0 .../src/renderer.ts | 0 packages/ipynb2html-core/src/version.ts | 5 +++ .../test/elementCreator.test.ts | 0 .../test/htmlRenderer.test.ts | 0 .../test/internal/utils.test.ts | 0 .../test/mathExtractor.test.ts | 0 .../test/renderer.test.tsx | 0 .../test/support/fixtures/notebook.ts | 0 packages/ipynb2html-core/test/tsconfig.json | 5 +++ packages/ipynb2html-core/tsconfig.json | 17 +++++++++ packages/ipynb2html/package.json | 5 +-- packages/ipynb2html/src/index.ts | 21 ++++++----- packages/ipynb2html/src/markdownRenderer.ts | 6 ++-- packages/ipynb2html/src/readNotebookTitle.ts | 2 +- .../ipynb2html/test/readNotebookTitle.test.ts | 3 +- packages/ipynb2html/tsconfig.json | 3 ++ tsconfig.json | 1 + 27 files changed, 133 insertions(+), 16 deletions(-) create mode 100644 packages/ipynb2html-core/jest.config.js create mode 100644 packages/ipynb2html-core/package.json rename packages/{ipynb2html => ipynb2html-core}/src/elementCreator.ts (100%) rename packages/{ipynb2html => ipynb2html-core}/src/htmlRenderer.ts (100%) create mode 100644 packages/ipynb2html-core/src/index.ts rename packages/{ipynb2html => ipynb2html-core}/src/internal/utils.ts (100%) rename packages/{ipynb2html => ipynb2html-core}/src/mathExtractor.ts (100%) rename packages/{ipynb2html => ipynb2html-core}/src/nbformat.ts (100%) rename packages/{ipynb2html => ipynb2html-core}/src/renderer.ts (100%) create mode 100644 packages/ipynb2html-core/src/version.ts rename packages/{ipynb2html => ipynb2html-core}/test/elementCreator.test.ts (100%) rename packages/{ipynb2html => ipynb2html-core}/test/htmlRenderer.test.ts (100%) rename packages/{ipynb2html => ipynb2html-core}/test/internal/utils.test.ts (100%) rename packages/{ipynb2html => ipynb2html-core}/test/mathExtractor.test.ts (100%) rename packages/{ipynb2html => ipynb2html-core}/test/renderer.test.tsx (100%) rename packages/{ipynb2html => ipynb2html-core}/test/support/fixtures/notebook.ts (100%) create mode 100644 packages/ipynb2html-core/test/tsconfig.json create mode 100644 packages/ipynb2html-core/tsconfig.json diff --git a/README.adoc b/README.adoc index 544b1a8..16be14d 100644 --- a/README.adoc +++ b/README.adoc @@ -6,12 +6,39 @@ ifdef::env-github[] image:https://travis-ci.com/{gh-name}.svg?branch={gh-branch}[Build Status, link="https://travis-ci.com/{gh-name}"] -image:https://img.shields.io/npm/v/{npm-name}.svg[npm Version, link="https://www.npmjs.org/package/{npm-name}"] endif::env-github[] TODO +== Packages + +This repository contains the following packages, all published on https://www.npmjs.com/[npm]. + + +=== {npm-name}-core + +ifdef::env-github[] +image:https://img.shields.io/npm/v/{npm-name}-core.svg[Version on npm, link="https://www.npmjs.org/package/{npm-name}-core"] +endif::env-github[] + +This package provides the renderer itself (converter from ipynb to HTML) and some utilities with *no dependencies*. +You have to provide your own syntax highlighter and Markdown, math and ANSI sequences renderer; or not, if you don’t need them. + +=== {npm-name} + +ifdef::env-github[] +image:https://img.shields.io/npm/v/{npm-name}.svg[Version on npm, link="https://www.npmjs.org/package/{npm-name}"] +endif::env-github[] + +This package builds on the {npm-name}-core and provides a complete, ready-to-go renderer configured with: + +* https://github.com/markedjs/marked[marked] as Markdown renderer, +* https://github.com/KaTeX/KaTeX[KaTeX] as math renderer, +* https://github.com/IonicaBizau/anser[anser] as ANSI sequences renderer, +* https://github.com/highlightjs/highlight.js[highlight.js] as syntax highlighter. + + == Development == System Requirements diff --git a/package.json b/package.json index 1be6e74..1ebbed3 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "eslint-plugin-standard": "^4.0.0", "jest": "^24.9.0", "jest-chain": "^1.1.2", + "nodom": "^2.3.0", "npm-run-all": "^4.1.5", "rimraf": "^3.0.0", "ts-jest": "^24.1.0", diff --git a/packages/ipynb2html-core/jest.config.js b/packages/ipynb2html-core/jest.config.js new file mode 100644 index 0000000..0a2d9a3 --- /dev/null +++ b/packages/ipynb2html-core/jest.config.js @@ -0,0 +1,7 @@ +const pkg = require('./package.json') + +module.exports = { + ...require('../../jest.config.base'), + name: pkg.name, + displayName: pkg.name, +} diff --git a/packages/ipynb2html-core/package.json b/packages/ipynb2html-core/package.json new file mode 100644 index 0000000..df473c7 --- /dev/null +++ b/packages/ipynb2html-core/package.json @@ -0,0 +1,36 @@ +{ + "name": "ipynb2html-core", + "version": "0.1.0-beta.5", + "description": "Convert Jupyter Notebook to static HTML", + "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": [ + "converter", + "html", + "ipython", + "jupyter", + "notebook" + ], + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "lib", + "src" + ], + "scripts": { + "build": "ttsc --build", + "clean": "rimraf coverage/ lib/ .tsbuildinfo", + "lint": "eslint --ext .ts,.tsx,.js .", + "test": "jest --detectOpenHandles --coverage --verbose", + "watch-ts": "ttsc --build --watch" + }, + "engines": { + "node": ">=10.13.0" + } +} diff --git a/packages/ipynb2html/src/elementCreator.ts b/packages/ipynb2html-core/src/elementCreator.ts similarity index 100% rename from packages/ipynb2html/src/elementCreator.ts rename to packages/ipynb2html-core/src/elementCreator.ts diff --git a/packages/ipynb2html/src/htmlRenderer.ts b/packages/ipynb2html-core/src/htmlRenderer.ts similarity index 100% rename from packages/ipynb2html/src/htmlRenderer.ts rename to packages/ipynb2html-core/src/htmlRenderer.ts diff --git a/packages/ipynb2html-core/src/index.ts b/packages/ipynb2html-core/src/index.ts new file mode 100644 index 0000000..11d8468 --- /dev/null +++ b/packages/ipynb2html-core/src/index.ts @@ -0,0 +1,8 @@ +import * as mathExtractor from './mathExtractor' + +export { default as createElementCreator, ElementCreator } from './elementCreator' +export { default as createHtmlRenderer } from './htmlRenderer' +export * from './nbformat' +export { default as createNbRenderer, DataRenderer, NbRenderer, Options as NbRendererOpts } from './renderer' +export { mathExtractor } +export { default as version } from './version' diff --git a/packages/ipynb2html/src/internal/utils.ts b/packages/ipynb2html-core/src/internal/utils.ts similarity index 100% rename from packages/ipynb2html/src/internal/utils.ts rename to packages/ipynb2html-core/src/internal/utils.ts diff --git a/packages/ipynb2html/src/mathExtractor.ts b/packages/ipynb2html-core/src/mathExtractor.ts similarity index 100% rename from packages/ipynb2html/src/mathExtractor.ts rename to packages/ipynb2html-core/src/mathExtractor.ts diff --git a/packages/ipynb2html/src/nbformat.ts b/packages/ipynb2html-core/src/nbformat.ts similarity index 100% rename from packages/ipynb2html/src/nbformat.ts rename to packages/ipynb2html-core/src/nbformat.ts diff --git a/packages/ipynb2html/src/renderer.ts b/packages/ipynb2html-core/src/renderer.ts similarity index 100% rename from packages/ipynb2html/src/renderer.ts rename to packages/ipynb2html-core/src/renderer.ts diff --git a/packages/ipynb2html-core/src/version.ts b/packages/ipynb2html-core/src/version.ts new file mode 100644 index 0000000..34d6582 --- /dev/null +++ b/packages/ipynb2html-core/src/version.ts @@ -0,0 +1,5 @@ +import { $INLINE_JSON } from 'ts-transformer-inline-file' + +const { version } = $INLINE_JSON('../package.json') + +export default version as string diff --git a/packages/ipynb2html/test/elementCreator.test.ts b/packages/ipynb2html-core/test/elementCreator.test.ts similarity index 100% rename from packages/ipynb2html/test/elementCreator.test.ts rename to packages/ipynb2html-core/test/elementCreator.test.ts diff --git a/packages/ipynb2html/test/htmlRenderer.test.ts b/packages/ipynb2html-core/test/htmlRenderer.test.ts similarity index 100% rename from packages/ipynb2html/test/htmlRenderer.test.ts rename to packages/ipynb2html-core/test/htmlRenderer.test.ts diff --git a/packages/ipynb2html/test/internal/utils.test.ts b/packages/ipynb2html-core/test/internal/utils.test.ts similarity index 100% rename from packages/ipynb2html/test/internal/utils.test.ts rename to packages/ipynb2html-core/test/internal/utils.test.ts diff --git a/packages/ipynb2html/test/mathExtractor.test.ts b/packages/ipynb2html-core/test/mathExtractor.test.ts similarity index 100% rename from packages/ipynb2html/test/mathExtractor.test.ts rename to packages/ipynb2html-core/test/mathExtractor.test.ts diff --git a/packages/ipynb2html/test/renderer.test.tsx b/packages/ipynb2html-core/test/renderer.test.tsx similarity index 100% rename from packages/ipynb2html/test/renderer.test.tsx rename to packages/ipynb2html-core/test/renderer.test.tsx diff --git a/packages/ipynb2html/test/support/fixtures/notebook.ts b/packages/ipynb2html-core/test/support/fixtures/notebook.ts similarity index 100% rename from packages/ipynb2html/test/support/fixtures/notebook.ts rename to packages/ipynb2html-core/test/support/fixtures/notebook.ts diff --git a/packages/ipynb2html-core/test/tsconfig.json b/packages/ipynb2html-core/test/tsconfig.json new file mode 100644 index 0000000..7c935a3 --- /dev/null +++ b/packages/ipynb2html-core/test/tsconfig.json @@ -0,0 +1,5 @@ +// This file is needed only for VSCode, see https://github.com/palmerhq/tsdx/issues/84. +{ + "extends": "../tsconfig.json", + "include": ["."], +} diff --git a/packages/ipynb2html-core/tsconfig.json b/packages/ipynb2html-core/tsconfig.json new file mode 100644 index 0000000..1835848 --- /dev/null +++ b/packages/ipynb2html-core/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib", + "tsBuildInfoFile": "./.tsbuildinfo", + "baseUrl": ".", + "paths": { + "*": ["../../types/*"], + "@/*": ["./src/*"], + "~/*": ["../../*"], + }, + }, + "include": [ + "./src", + ], +} diff --git a/packages/ipynb2html/package.json b/packages/ipynb2html/package.json index ac2b103..59addea 100644 --- a/packages/ipynb2html/package.json +++ b/packages/ipynb2html/package.json @@ -24,11 +24,11 @@ "src" ], "scripts": { - "build": "tsc --build", + "build": "ttsc --build", "clean": "rimraf coverage/ lib/ .tsbuildinfo", "lint": "eslint --ext .ts,.tsx,.js .", "test": "jest --detectOpenHandles --coverage --verbose", - "watch-ts": "tsc --build --watch" + "watch-ts": "ttsc --build --watch" }, "engines": { "node": ">=10.13.0" @@ -36,6 +36,7 @@ "dependencies": { "anser": "^1.4.9", "highlightjs": "^9.12.0", + "ipynb2html-core": "0.1.0-beta.5", "katex": "^0.11.0", "marked": "^0.7.0", "nodom": "^2.3.0" diff --git a/packages/ipynb2html/src/index.ts b/packages/ipynb2html/src/index.ts index b5ecd31..11626b2 100644 --- a/packages/ipynb2html/src/index.ts +++ b/packages/ipynb2html/src/index.ts @@ -4,17 +4,22 @@ import katex, { KatexOptions } from 'katex' import { MarkedOptions } from 'marked' import { Document, HTMLElement } from 'nodom' -import buildElementCreator from './elementCreator' -import htmlRenderer from './htmlRenderer' +import { + createElementCreator, + createHtmlRenderer, + createNbRenderer, + NbRenderer, + NbRendererOpts as BaseOptions, +} from 'ipynb2html-core' + import buildMarkdownRenderer from './markdownRenderer' -import buildRenderer, { Options as RendererOpts, NbRenderer } from './renderer' export { default as version } from './version' export { NbRenderer } -export type Options = RendererOpts & { +export type NbRendererOpts = BaseOptions & { /** * The prefix to be used for all CSS class names except `lang-*`. * Default is `nb-`. @@ -60,20 +65,20 @@ function codeHighlighter (code: string, lang: string): string { * of the Notebook's AST nodes. You can easily replace any of the functions to * modify behaviour of the renderer. */ -export default (opts: Options = {}): NbRenderer => { +export default (opts: NbRendererOpts = {}): NbRenderer => { const katexOpts = { ...defaultKatexOpts, ...opts.katexOpts } const doc = new Document() - const elementCreator = buildElementCreator(doc.createElement.bind(doc), opts.classPrefix) + const elementCreator = createElementCreator(doc.createElement.bind(doc), opts.classPrefix) const markdownRenderer = buildMarkdownRenderer(opts.markedOpts, katexOpts) const mathRenderer = (tex: string) => katex.renderToString(tex, katexOpts) const dataRenderers = { - 'text/html': htmlRenderer({ elementCreator, mathRenderer }), + 'text/html': createHtmlRenderer({ elementCreator, mathRenderer }), ...opts.dataRenderers, } - return buildRenderer(elementCreator, { + return createNbRenderer(elementCreator, { ansiCodesRenderer, codeHighlighter, dataRenderers, diff --git a/packages/ipynb2html/src/markdownRenderer.ts b/packages/ipynb2html/src/markdownRenderer.ts index cf2db08..3d60e72 100644 --- a/packages/ipynb2html/src/markdownRenderer.ts +++ b/packages/ipynb2html/src/markdownRenderer.ts @@ -2,7 +2,7 @@ import hljs from 'highlightjs' import katex, { KatexOptions } from 'katex' import marked, { MarkedOptions } from 'marked' -import { extractMath, restoreMath } from './mathExtractor' +import { mathExtractor } from 'ipynb2html-core' function highlight (code: string, lang: string): string { @@ -25,12 +25,12 @@ export default (markedOpts: MarkedOptions = {}, katexOpts: KatexOptions = {}) => * Converts the given *markdown* into HTML. */ return (markdown: string): string => { - const [text, math] = extractMath(markdown) + const [text, math] = mathExtractor.extractMath(markdown) const html = marked.parse(text, markedOpts) const mathHtml = math.map(({ value, displayMode }) => { return katex.renderToString(value, { ...katexOpts, displayMode }) }) - return restoreMath(html, mathHtml) + return mathExtractor.restoreMath(html, mathHtml) } } diff --git a/packages/ipynb2html/src/readNotebookTitle.ts b/packages/ipynb2html/src/readNotebookTitle.ts index 030f122..7115fc1 100644 --- a/packages/ipynb2html/src/readNotebookTitle.ts +++ b/packages/ipynb2html/src/readNotebookTitle.ts @@ -1,6 +1,6 @@ import marked from 'marked' -import { Notebook, CellType } from './nbformat' +import { Notebook, CellType } from 'ipynb2html-core' class EmptyRenderer extends marked.Renderer { diff --git a/packages/ipynb2html/test/readNotebookTitle.test.ts b/packages/ipynb2html/test/readNotebookTitle.test.ts index c1e9fac..b69fd70 100644 --- a/packages/ipynb2html/test/readNotebookTitle.test.ts +++ b/packages/ipynb2html/test/readNotebookTitle.test.ts @@ -1,6 +1,7 @@ -import { Notebook, CellType, MarkdownCell } from '@/nbformat' import readNotebookTitle from '@/readNotebookTitle' +import { Notebook, CellType, MarkdownCell } from 'ipynb2html-core' + const markdownCell = (source: string | string[]): MarkdownCell => ({ cell_type: CellType.Markdown, diff --git a/packages/ipynb2html/tsconfig.json b/packages/ipynb2html/tsconfig.json index 1835848..bd715db 100644 --- a/packages/ipynb2html/tsconfig.json +++ b/packages/ipynb2html/tsconfig.json @@ -14,4 +14,7 @@ "include": [ "./src", ], + "references": [ + { "path": "../ipynb2html-core" }, + ], } diff --git a/tsconfig.json b/tsconfig.json index 4f971a7..eca5c10 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,7 @@ { "files": [], "references": [ + { "path": "./packages/ipynb2html-core" }, { "path": "./packages/ipynb2html" }, ] } From e2edb19bc07b9e6fc6dafe32cde8748087987698 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 11 Oct 2019 21:38:41 +0200 Subject: [PATCH 124/266] Readme: Add short preamble --- README.adoc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.adoc b/README.adoc index 16be14d..8faa434 100644 --- a/README.adoc +++ b/README.adoc @@ -8,7 +8,8 @@ ifdef::env-github[] image:https://travis-ci.com/{gh-name}.svg?branch={gh-branch}[Build Status, link="https://travis-ci.com/{gh-name}"] endif::env-github[] -TODO +ipynb2html is a converter (renderer) of the https://nbformat.readthedocs.io/en/stable/[Jupyter Notebook Format] 4.0+ to static HTML. +It works both in Node.js and browser environment. == Packages @@ -22,7 +23,7 @@ ifdef::env-github[] image:https://img.shields.io/npm/v/{npm-name}-core.svg[Version on npm, link="https://www.npmjs.org/package/{npm-name}-core"] endif::env-github[] -This package provides the renderer itself (converter from ipynb to HTML) and some utilities with *no dependencies*. +This package provides the converter itself and some utilities with *no dependencies*. You have to provide your own syntax highlighter and Markdown, math and ANSI sequences renderer; or not, if you don’t need them. === {npm-name} From 91e8aafa10eb9d70bb1363f3cba47a9b6fefe6cb Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 11 Oct 2019 23:01:44 +0200 Subject: [PATCH 125/266] Add script for converting README.adoc to Markdown before publishing npmjs.com still doesn't support AsciiDoc for READMEs. >_< --- .gitignore | 1 + .travis.yml | 6 ++++++ README.adoc | 5 +++++ packages/ipynb2html-core/package.json | 2 ++ packages/ipynb2html/package.json | 2 ++ scripts/adoc2md | 4 ++++ 6 files changed, 20 insertions(+) create mode 100755 scripts/adoc2md diff --git a/.gitignore b/.gitignore index ad1aadd..3fd4c93 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ /dist/ /packages/*/coverage/ /packages/*/lib/ +/packages/*/README.md /.*cache/ /.tmp/ node_modules/ diff --git a/.travis.yml b/.travis.yml index f54ec81..6c63c7a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,12 @@ node_js: - '12' - node +addons: + apt: + packages: + - asciidoctor + - pandoc + env: global: - secure: "DrPA1eYBRjS+1/w/sRq/r5wQyOewuh1PGPzFtQR62TJeAyO6AvKQ6wfesxMA898b+0D3SCNxrCVK12XB3auySEOZocQuN7N51hsteA/QtPoBBbnoHy8Dap2YbiJ5fbCVnM/Wl/Z2rZmQWFBM3rmqXggCyEhKEw3kkz8WMm/7UCGVxmoHUelpMnDEII0RiJdPCGT19IA90KpJDsqbSzTVY+TsqjSNuN91LQ23ApwSHKklvbvKWxcgrtAzJDXLeS9CS3QqSHucurOM2Kpv0umOkBzds4da+NtWKYZC3XxThmMB5wT7b60EZPIc/iFftQFy2qiDAFxeGN+j9kwsNX68aXl4MuCGlzdvGj0KkeXYYhl1Jusc30uTzXYMlz2b3u+AcsMLLxFs2HvUU94SpAfe9VrarSnQK+6CZz0eCtF/NCCi6J9GqlBTsqzZDmdVaJpFDG1FidC4Ka9FcteKcWXqffowQ5KjIhqaearSmRESMqepV7T8tDUCb217PE0C+L0NGfg6RaY4DtGsJAawDeh/09aXrP6NakAKjWUfaJqjhkMexB8JTb+yanjVXsgj4VUfvTgvWjMi+yU3DIfopL+mawvgckRRL9DTEIf5ICjSruyEH8FWEz+kMzas41zboabR12YMLuorHfgZu31DiDsJkSD292t/lwWW6oybRl0iJBk=" # NPM_TOKEN=ceed......2bf2 diff --git a/README.adoc b/README.adoc index 8faa434..2a9c476 100644 --- a/README.adoc +++ b/README.adoc @@ -40,11 +40,14 @@ This package builds on the {npm-name}-core and provides a complete, ready-to-go * https://github.com/highlightjs/highlight.js[highlight.js] as syntax highlighter. +ifndef::npm-readme[] + == Development == System Requirements * https://nodejs.org[NodeJS] 10.13+ +* https://pandoc.org[Pandoc] and https://asciidoctor.org[Asciidoctor] (used only for converting README.adoc to Markdown for npmjs) === Used Tools @@ -95,6 +98,8 @@ If you use Visual Studio Code, you should install the following extensions: * 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] +endif::[] + == Credits diff --git a/packages/ipynb2html-core/package.json b/packages/ipynb2html-core/package.json index df473c7..345c26b 100644 --- a/packages/ipynb2html-core/package.json +++ b/packages/ipynb2html-core/package.json @@ -27,7 +27,9 @@ "build": "ttsc --build", "clean": "rimraf coverage/ lib/ .tsbuildinfo", "lint": "eslint --ext .ts,.tsx,.js .", + "prepublishOnly": "run-s readme2md", "test": "jest --detectOpenHandles --coverage --verbose", + "readme2md": "../../scripts/adoc2md -a npm-readme ../../README.adoc > README.md", "watch-ts": "ttsc --build --watch" }, "engines": { diff --git a/packages/ipynb2html/package.json b/packages/ipynb2html/package.json index 59addea..9c84049 100644 --- a/packages/ipynb2html/package.json +++ b/packages/ipynb2html/package.json @@ -27,7 +27,9 @@ "build": "ttsc --build", "clean": "rimraf coverage/ lib/ .tsbuildinfo", "lint": "eslint --ext .ts,.tsx,.js .", + "prepublishOnly": "run-s readme2md", "test": "jest --detectOpenHandles --coverage --verbose", + "readme2md": "../../scripts/adoc2md -a npm-readme ../../README.adoc > README.md", "watch-ts": "ttsc --build --watch" }, "engines": { diff --git a/scripts/adoc2md b/scripts/adoc2md new file mode 100755 index 0000000..fb7e5a0 --- /dev/null +++ b/scripts/adoc2md @@ -0,0 +1,4 @@ +#!/bin/sh -e +( set -o pipefail 2>/dev/null ) && set -o pipefail + +asciidoctor -o - -b docbook "$@" | pandoc -f docbook -t markdown_github -o - From af2ed648992a10f60815f71e637091a051ecc89a Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sat, 19 Oct 2019 20:57:42 +0200 Subject: [PATCH 126/266] Release version 0.1.0-beta.6 --- package.json | 2 +- packages/ipynb2html-core/package.json | 2 +- packages/ipynb2html/package.json | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 1ebbed3..eaac1bc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html-parent", - "version": "0.1.0-beta.5", + "version": "0.1.0-beta.6", "private": true, "scripts": { "build": "ttsc --build", diff --git a/packages/ipynb2html-core/package.json b/packages/ipynb2html-core/package.json index 345c26b..a3cb2df 100644 --- a/packages/ipynb2html-core/package.json +++ b/packages/ipynb2html-core/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html-core", - "version": "0.1.0-beta.5", + "version": "0.1.0-beta.6", "description": "Convert Jupyter Notebook to static HTML", "author": "Jakub Jirutka ", "license": "MIT", diff --git a/packages/ipynb2html/package.json b/packages/ipynb2html/package.json index 9c84049..5113006 100644 --- a/packages/ipynb2html/package.json +++ b/packages/ipynb2html/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html", - "version": "0.1.0-beta.5", + "version": "0.1.0-beta.6", "description": "Convert Jupyter Notebook to static HTML", "author": "Jakub Jirutka ", "license": "MIT", @@ -38,7 +38,7 @@ "dependencies": { "anser": "^1.4.9", "highlightjs": "^9.12.0", - "ipynb2html-core": "0.1.0-beta.5", + "ipynb2html-core": "0.1.0-beta.6", "katex": "^0.11.0", "marked": "^0.7.0", "nodom": "^2.3.0" From 518c327d78859bed39b73b5621b5f81c2aa64759 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 20 Oct 2019 15:32:07 +0200 Subject: [PATCH 127/266] Change default export in ipynb2html/index to named --- packages/ipynb2html/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ipynb2html/src/index.ts b/packages/ipynb2html/src/index.ts index 11626b2..2e0be10 100644 --- a/packages/ipynb2html/src/index.ts +++ b/packages/ipynb2html/src/index.ts @@ -65,7 +65,7 @@ function codeHighlighter (code: string, lang: string): string { * of the Notebook's AST nodes. You can easily replace any of the functions to * modify behaviour of the renderer. */ -export default (opts: NbRendererOpts = {}): NbRenderer => { +export function createRenderer (opts: NbRendererOpts = {}): NbRenderer { const katexOpts = { ...defaultKatexOpts, ...opts.katexOpts } const doc = new Document() From a4aeca48b81ecddfc040c79767bc20be631c463d Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 20 Oct 2019 15:34:23 +0200 Subject: [PATCH 128/266] Re-export readNotebookTitle from index --- packages/ipynb2html/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ipynb2html/src/index.ts b/packages/ipynb2html/src/index.ts index 2e0be10..8b0c039 100644 --- a/packages/ipynb2html/src/index.ts +++ b/packages/ipynb2html/src/index.ts @@ -16,7 +16,7 @@ import buildMarkdownRenderer from './markdownRenderer' export { default as version } from './version' - +export { default as readNotebookTitle } from './readNotebookTitle' export { NbRenderer } export type NbRendererOpts = BaseOptions & { From 3c78b609f408600d79b7774382eaaf54b9d4f8e3 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 20 Oct 2019 20:42:05 +0200 Subject: [PATCH 129/266] Readme: Fix wrong level of title System Requirements --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index 2a9c476..da4e982 100644 --- a/README.adoc +++ b/README.adoc @@ -44,7 +44,7 @@ ifndef::npm-readme[] == Development -== System Requirements +=== System Requirements * https://nodejs.org[NodeJS] 10.13+ * https://pandoc.org[Pandoc] and https://asciidoctor.org[Asciidoctor] (used only for converting README.adoc to Markdown for npmjs) From 58aff83cc5c1fc6c373ab4b93ad657c67868de06 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 20 Oct 2019 22:16:28 +0200 Subject: [PATCH 130/266] Readme: Add Bundlephobia badges --- README.adoc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.adoc b/README.adoc index da4e982..a5e4597 100644 --- a/README.adoc +++ b/README.adoc @@ -21,6 +21,7 @@ This repository contains the following packages, all published on https://www.np ifdef::env-github[] image:https://img.shields.io/npm/v/{npm-name}-core.svg[Version on npm, link="https://www.npmjs.org/package/{npm-name}-core"] +image:https://img.shields.io/bundlephobia/min/{npm-name}-core.svg[Minified bundle size, link="https://bundlephobia.com/result?p={npm-name}-core"] endif::env-github[] This package provides the converter itself and some utilities with *no dependencies*. @@ -30,6 +31,7 @@ You have to provide your own syntax highlighter and Markdown, math and ANSI sequ ifdef::env-github[] image:https://img.shields.io/npm/v/{npm-name}.svg[Version on npm, link="https://www.npmjs.org/package/{npm-name}"] +image:https://img.shields.io/bundlephobia/min/{npm-name}.svg[Minified bundle size, link="https://bundlephobia.com/result?p={npm-name}"] endif::env-github[] This package builds on the {npm-name}-core and provides a complete, ready-to-go renderer configured with: From dd4bee711871664059a0c87a5dad38d531bd9386 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 22 Oct 2019 20:11:54 +0200 Subject: [PATCH 131/266] Readme: Add Usage example --- README.adoc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.adoc b/README.adoc index a5e4597..9a6487c 100644 --- a/README.adoc +++ b/README.adoc @@ -42,6 +42,23 @@ This package builds on the {npm-name}-core and provides a complete, ready-to-go * https://github.com/highlightjs/highlight.js[highlight.js] as syntax highlighter. +== Usage + +=== Node.js + +[source, js, subs="+attributes"] +---- +import * as fs from 'fs' +import * as ipynb from '{npm-name}' + +const renderNotebook = ipynb.createRenderer() + +const notebook = JSON.parse(fs.readFileSync('./example.ipynb', 'utf8')) + +console.log(renderNotebook(notebook).outerHTML) +---- + + ifndef::npm-readme[] == Development From d8c18bd2c6c569b7c969dfec6925e23fe1db9217 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 22 Oct 2019 22:21:16 +0200 Subject: [PATCH 132/266] ipynb2html: Remove dependency on nodom, allow to provide any Document --- README.adoc | 10 ++++++- packages/ipynb2html-core/src/index.ts | 2 +- packages/ipynb2html/package.json | 4 ++- packages/ipynb2html/src/index.ts | 43 ++++++++++++++++++++++----- 4 files changed, 49 insertions(+), 10 deletions(-) diff --git a/README.adoc b/README.adoc index 9a6487c..0c430dc 100644 --- a/README.adoc +++ b/README.adoc @@ -46,12 +46,20 @@ This package builds on the {npm-name}-core and provides a complete, ready-to-go === Node.js +To render HTML in Node.js (server-side rendering), you need some (fake) DOM implementation. +The recommended one is https://github.com/redom/nodom/[nodom] -- it’s lightweight, https://bundlephobia.com/result?p=nodom[small], doesn’t have any external dependencies and {npm-name} is tested against it. +However, you can choose any other if you like. + +[source, subs="+attributes"] +npm install {npm-name} nodom + [source, js, subs="+attributes"] ---- import * as fs from 'fs' import * as ipynb from '{npm-name}' +import { Document } from 'nodom' -const renderNotebook = ipynb.createRenderer() +const renderNotebook = ipynb.createRenderer(new Document()) const notebook = JSON.parse(fs.readFileSync('./example.ipynb', 'utf8')) diff --git a/packages/ipynb2html-core/src/index.ts b/packages/ipynb2html-core/src/index.ts index 11d8468..8671cfd 100644 --- a/packages/ipynb2html-core/src/index.ts +++ b/packages/ipynb2html-core/src/index.ts @@ -1,6 +1,6 @@ import * as mathExtractor from './mathExtractor' -export { default as createElementCreator, ElementCreator } from './elementCreator' +export { default as createElementCreator, ElementCreator, MinimalElement } from './elementCreator' export { default as createHtmlRenderer } from './htmlRenderer' export * from './nbformat' export { default as createNbRenderer, DataRenderer, NbRenderer, Options as NbRendererOpts } from './renderer' diff --git a/packages/ipynb2html/package.json b/packages/ipynb2html/package.json index 5113006..68b633f 100644 --- a/packages/ipynb2html/package.json +++ b/packages/ipynb2html/package.json @@ -40,7 +40,9 @@ "highlightjs": "^9.12.0", "ipynb2html-core": "0.1.0-beta.6", "katex": "^0.11.0", - "marked": "^0.7.0", + "marked": "^0.7.0" + }, + "peerDependencies": { "nodom": "^2.3.0" } } diff --git a/packages/ipynb2html/src/index.ts b/packages/ipynb2html/src/index.ts index 8b0c039..8e3c4fe 100644 --- a/packages/ipynb2html/src/index.ts +++ b/packages/ipynb2html/src/index.ts @@ -2,12 +2,12 @@ import anser from 'anser' import hljs from 'highlightjs' import katex, { KatexOptions } from 'katex' import { MarkedOptions } from 'marked' -import { Document, HTMLElement } from 'nodom' import { createElementCreator, createHtmlRenderer, createNbRenderer, + MinimalElement, NbRenderer, NbRendererOpts as BaseOptions, } from 'ipynb2html-core' @@ -19,7 +19,7 @@ export { default as version } from './version' export { default as readNotebookTitle } from './readNotebookTitle' export { NbRenderer } -export type NbRendererOpts = BaseOptions & { +export type NbRendererOpts = BaseOptions & { /** * The prefix to be used for all CSS class names except `lang-*`. * Default is `nb-`. @@ -37,6 +37,14 @@ export type NbRendererOpts = BaseOptions & { markedOpts?: MarkedOptions, } +/** + * Definition of the smallest possible subset of the Document type required + * for this module's function. + */ +type MinimalDocument = { + createElement (tag: string): TElement, +} + const defaultKatexOpts: KatexOptions = { displayMode: true, throwOnError: false, @@ -53,8 +61,7 @@ function codeHighlighter (code: string, lang: string): string { } /** - * Builds a full-fledged Notebook renderer for server-side rendering with a - * fake DOM implementation "nodom". + * Builds a full-fledged Jupyter Notebook renderer. * * It supports rendering of Markdown cells with math (using marked and KaTeX), * code highlighting (using highlight.js), rendering of ANSI escape sequences @@ -64,12 +71,34 @@ function codeHighlighter (code: string, lang: string): string { * It returns a "callable object" that exposes one renderer function for each * of the Notebook's AST nodes. You can easily replace any of the functions to * modify behaviour of the renderer. + * + * @example + * import * as fs from 'fs' + * import * as ipynb from 'ipynb2html' + * import { Document } from 'nodom' + * + * const renderNotebook = ipynb.createRenderer(new Document()) + * const notebook = JSON.parse(fs.readFileSync('./example.ipynb', 'utf8')) + * + * console.log(renderNotebook(notebook).outerHTML) + * + * @param document The `Document` object from the browser's native DOM or any + * fake/virtual DOM library (e.g. nodom). The only required method is + * `createElement`. + * @param opts The renderer options. + * @return A configured instance of the Notebook renderer. */ -export function createRenderer (opts: NbRendererOpts = {}): NbRenderer { +export function createRenderer ( + document: MinimalDocument, + opts: NbRendererOpts = {}, +): NbRenderer { + const katexOpts = { ...defaultKatexOpts, ...opts.katexOpts } - const doc = new Document() - const elementCreator = createElementCreator(doc.createElement.bind(doc), opts.classPrefix) + const elementCreator = createElementCreator( + document.createElement.bind(document), + opts.classPrefix, + ) const markdownRenderer = buildMarkdownRenderer(opts.markedOpts, katexOpts) const mathRenderer = (tex: string) => katex.renderToString(tex, katexOpts) From 36faf95829bafc8454acccfa6953852cc0b5ddb4 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 23 Oct 2019 14:01:59 +0200 Subject: [PATCH 133/266] Add version attribute to Readme --- README.adoc | 1 + package.json | 3 ++- scripts/bump-version | 12 +++++++++++- yarn.lock | 23 ++++++++++++++++++++++- 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/README.adoc b/README.adoc index 0c430dc..5c317b5 100644 --- a/README.adoc +++ b/README.adoc @@ -2,6 +2,7 @@ :npm-name: ipynb2html :gh-name: jirutka/{npm-name} :gh-branch: master +:version: 0.1.0-beta.6 :vs-marketplace-uri: https://marketplace.visualstudio.com/items?itemName= ifdef::env-github[] diff --git a/package.json b/package.json index eaac1bc..82b979d 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "postinstall": "run-s build", "publish-all": "wsrun --serial publish", "test": "jest --detectOpenHandles --coverage --verbose", - "version": "./scripts/bump-version && git add **/package.json", + "version": "./scripts/bump-version && git add README.adoc **/package.json", "watch-ts": "ttsc --build --watch" }, "engines": { @@ -33,6 +33,7 @@ "eslint-plugin-node": "^10.0.0", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-standard": "^4.0.0", + "fs-extra": "^8.1.0", "jest": "^24.9.0", "jest-chain": "^1.1.2", "nodom": "^2.3.0", diff --git a/scripts/bump-version b/scripts/bump-version index 45737be..eb2237a 100755 --- a/scripts/bump-version +++ b/scripts/bump-version @@ -1,6 +1,7 @@ #!/usr/bin/env node 'use strict' +const fs = require('fs-extra') const path = require('path') const { bumpVersion } = require('yarn-version-bump/src/bump-version') const { processJsonFile } = require('yarn-version-bump/src/util/json') @@ -23,11 +24,20 @@ async function bumpAllPackages (newVersion) { } } +async function updateReadme (newVersion) { + return fs.readFile('README.adoc', 'utf8') + .then(str => str.replace(/^:version: \d.*$/m, `:version: ${newVersion}`)) + .then(str => fs.writeFile('README.adoc', str)) +} + const newVersion = process.argv[2] || rootPkg.version process.chdir(path.resolve(__dirname, '..')) -bumpAllPackages(newVersion).catch(err => { +Promise.all([ + bumpAllPackages(newVersion), + updateReadme(newVersion), +]).catch(err => { console.error(err) process.exit(1) }) diff --git a/yarn.lock b/yarn.lock index a874042..0d56d37 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1695,6 +1695,15 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.6" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" @@ -1819,7 +1828,7 @@ globrex@^0.1.1: resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.2" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== @@ -2735,6 +2744,13 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + 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" @@ -4484,6 +4500,11 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +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== + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" From 4705564489eeb2370b18db413026c89dd7266377 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 9 Oct 2019 16:09:24 +0200 Subject: [PATCH 134/266] Add specialized support for browser env. and build browser bundles --- .gitignore | 1 + README.adoc | 92 +- package.json | 12 + packages/ipynb2html/package.json | 15 +- packages/ipynb2html/rollup.config.js | 103 ++ packages/ipynb2html/src/browser.ts | 47 + packages/ipynb2html/src/global.d.ts | 7 + packages/ipynb2html/src/index.ts | 46 +- packages/ipynb2html/src/markdownRenderer.ts | 4 +- packages/ipynb2html/src/readNotebookTitle.ts | 4 +- yarn.lock | 945 ++++++++++++++++++- 11 files changed, 1246 insertions(+), 30 deletions(-) create mode 100644 packages/ipynb2html/rollup.config.js create mode 100644 packages/ipynb2html/src/browser.ts create mode 100644 packages/ipynb2html/src/global.d.ts diff --git a/.gitignore b/.gitignore index 3fd4c93..7125557 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /coverage/ /dist/ /packages/*/coverage/ +/packages/*/dist/ /packages/*/lib/ /packages/*/README.md /.*cache/ diff --git a/README.adoc b/README.adoc index 5c317b5..116b6ff 100644 --- a/README.adoc +++ b/README.adoc @@ -3,13 +3,17 @@ :gh-name: jirutka/{npm-name} :gh-branch: master :version: 0.1.0-beta.6 +:ansiup-version: 4.0.4 +:hljs-version: 9.15.10 +:katex-version: 0.11.1 +:marked-version: 0.7.0 :vs-marketplace-uri: https://marketplace.visualstudio.com/items?itemName= ifdef::env-github[] image:https://travis-ci.com/{gh-name}.svg?branch={gh-branch}[Build Status, link="https://travis-ci.com/{gh-name}"] endif::env-github[] -ipynb2html is a converter (renderer) of the https://nbformat.readthedocs.io/en/stable/[Jupyter Notebook Format] 4.0+ to static HTML. +{npm-name} is a converter (renderer) of the https://nbformat.readthedocs.io/en/stable/[Jupyter Notebook Format] 4.0+ to static HTML. It works both in Node.js and browser environment. @@ -45,7 +49,7 @@ This package builds on the {npm-name}-core and provides a complete, ready-to-go == Usage -=== Node.js +=== Node.js (server-side) To render HTML in Node.js (server-side rendering), you need some (fake) DOM implementation. The recommended one is https://github.com/redom/nodom/[nodom] -- it’s lightweight, https://bundlephobia.com/result?p=nodom[small], doesn’t have any external dependencies and {npm-name} is tested against it. @@ -68,8 +72,91 @@ console.log(renderNotebook(notebook).outerHTML) ---- +=== Browser (client-side) + +You have basically two options how to use {npm-name} in the browser: use the browser bundles provided in the {npm-name} package, or build your own bundle (using e.g. https://rollupjs.org[Rollup] or https://webpack.js.org/[webpack]). + +The provided bundles are in UMD format (AMD, CommonJS and IIFE in one file), so they should work in all environments (old and modern browsers, Node.js). +They are transpiled and have injected https://github.com/zloirock/core-js/[core-js] polyfills to be compatible with browsers that have https://browserl.ist/?q=%3E0.5%25%2C+Firefox+ESR%2C+not+dead[>0.5% global coverage, Firefox ESR, and not dead browsers]. + + +==== Full Bundle + +`{npm-name}-full.min.js` is a self-contained bundle with all the external dependencies included (marked, KaTeX, Anser and Highlight.js). + +You can link it from https://www.jsdelivr.com/[jsDelivr CDN], for example: + +[source, html, subs="+attributes"] + + + + + + + + + ... + + +The bundle exposes global variable `{npm-name}`: + +[source, js, subs="+attributes"] +const element = {npm-name}.render(notebook) +document.body.appendChild(element) + +{npm-name} also provides function `autoRender` that renders each notebook on the page embedded (as JSON) inside ``.footnote:[Don’t forget to escape HTML special characters: `<`, `>`, and `&`.] + +[source, html, subs="+attributes"] + + + + + + + + + +
+ +
+ + + + +==== Slim Bundle + +`{npm-name}.min.js` contains only {npm-name} and {npm-name}-core code (plus polyfills). +If you load marked, KaTeX, AnsiUp, and Highlight.js in the page, you will get the same functionality as with `{npm-name}-full.min.js`: + +[source, html, subs="+attributes"] + + + + + + + + + + + + ... + + +Or you may use any other implementations and provide them to the `{npm-name}.createRenderer` function. +All of them are optional, but you usually need at least a Markdown renderer. + ifndef::npm-readme[] + == Development === System Requirements @@ -85,6 +172,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://rollupjs.org[Rollup] for building single-file bundles === How to Start diff --git a/package.json b/package.json index 82b979d..6d35009 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "private": true, "scripts": { "build": "ttsc --build", + "bundle": "wsrun --exclude-missing bundle", "clean": "rimraf coverage/ lib/ *.log && wsrun clean", "lint": "eslint --ext .ts,.tsx,.js .", "postinstall": "run-s build", @@ -16,6 +17,8 @@ "node": ">=10.13.0" }, "devDependencies": { + "@babel/core": "^7.6.3", + "@babel/preset-env": "^7.6.3", "@types/dedent": "^0.7.0", "@types/highlightjs": "^9.12.0", "@types/jest": "^24.0.18", @@ -24,7 +27,9 @@ "@types/node": "^10.13.0", "@typescript-eslint/eslint-plugin": "^2.4.0", "@typescript-eslint/parser": "^2.4.0", + "ansi_up": "^4.0.4", "arrify": "^2.0.1", + "core-js": "^3.2.1", "dedent": "^0.7.0", "eslint": "^6.5.1", "eslint-config-standard-with-typescript": "^10.0.0", @@ -39,6 +44,13 @@ "nodom": "^2.3.0", "npm-run-all": "^4.1.5", "rimraf": "^3.0.0", + "rollup": "^1.23.0", + "rollup-plugin-add-git-msg": "^1.0.3", + "rollup-plugin-babel": "^4.3.3", + "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-terser": "^5.1.2", + "rollup-plugin-typescript2": "^0.24.3", "ts-jest": "^24.1.0", "ts-node": "^8.4.1", "ts-transformer-export-default-name": "^0.1.0", diff --git a/packages/ipynb2html/package.json b/packages/ipynb2html/package.json index 68b633f..954055d 100644 --- a/packages/ipynb2html/package.json +++ b/packages/ipynb2html/package.json @@ -18,16 +18,20 @@ "notebook" ], "main": "lib/index.js", + "browser": "dist/ipynb2html.min.js", "types": "lib/index.d.ts", "files": [ + "dist/ipynb2html.min.js*", + "dist/ipynb2html-full.min.js*", "lib", "src" ], "scripts": { "build": "ttsc --build", - "clean": "rimraf coverage/ lib/ .tsbuildinfo", + "bundle": "rollup -c", + "clean": "rimraf coverage/ dist/ lib/ .tsbuildinfo", "lint": "eslint --ext .ts,.tsx,.js .", - "prepublishOnly": "run-s readme2md", + "prepublishOnly": "run-p bundle readme2md", "test": "jest --detectOpenHandles --coverage --verbose", "readme2md": "../../scripts/adoc2md -a npm-readme ../../README.adoc > README.md", "watch-ts": "ttsc --build --watch" @@ -44,5 +48,10 @@ }, "peerDependencies": { "nodom": "^2.3.0" - } + }, + "browserslist": [ + ">0.5%", + "Firefox ESR", + "not dead" + ] } diff --git a/packages/ipynb2html/rollup.config.js b/packages/ipynb2html/rollup.config.js new file mode 100644 index 0000000..af3f1aa --- /dev/null +++ b/packages/ipynb2html/rollup.config.js @@ -0,0 +1,103 @@ +import addGitMsg from 'rollup-plugin-add-git-msg' +import babel from 'rollup-plugin-babel' +import commonjs from 'rollup-plugin-commonjs' +import resolve from 'rollup-plugin-node-resolve' +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'] + +const globals = { + anser: 'anser', + highlightjs: 'hljs', + katex: 'katex', + marked: 'marked', +} + +const plugins = [ + // Transpile TypeScript sources to JS. + typescript({ + typescript: ttypescript, + tsconfigOverride: { + compilerOptions: { + target: 'ES5', + module: 'ESNext', + declaration: false, + declarationMap: false, + composite: false, + incremental: 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'), + }), + // Minify JS. + terser({ + ecma: 5, + include: [/^.+\.min\.js$/], + output: { + // Preserve comment injected by addGitMsg. + comments: RegExp(`\\$\\{${pkg.name}\\}`), + }, + }), +] + +const output = (filename, extra = {}) => ['.js', '.min.js'].map(ext => ({ + name: pkg.name, + file: `${filename}${ext}`, + format: 'umd', + sourcemap: true, + ...extra, +})) + +export default [ + // Bundle third-party dependencies except core-js polyfills. + { + input: 'src/browser.ts', + external: Object.keys(globals), + plugins, + output: output(`dist/${pkg.name}`, { globals }), + }, + // Bundle with all dependencies. + { + input: 'src/browser.ts', + plugins, + // Tree-shaking breaks KaTeX and has almost zero effect on the bundle size. + treeshake: false, + output: output(`dist/${pkg.name}-full`), + } +] diff --git a/packages/ipynb2html/src/browser.ts b/packages/ipynb2html/src/browser.ts new file mode 100644 index 0000000..1056f96 --- /dev/null +++ b/packages/ipynb2html/src/browser.ts @@ -0,0 +1,47 @@ +import { createRenderer, NbRendererOpts, Notebook } from '.' + +export * from '.' + + +function unescapeHTML (input: string): string { + return new DOMParser() + .parseFromString(input, 'text/html') + .documentElement + .textContent || '' +} + +/** + * Renders the given Jupyter *notebook* to HTML. It's a shorthand for + * `createRenderer(document, opts)(notebook)`. + * + * @example + * document.body.appendChild(ipynb2html.render(notebook)) + * + * @param notebook Object in Jupyter Notebook Format 4.0+. + * @param opts The renderer options. + * @return An HTMLElement with the rendered *notebook*. + * @see createRenderer + */ +export function render (notebook: Notebook, opts: NbRendererOpts = {}): HTMLElement { + return createRenderer(document, opts)(notebook) +} + +/** + * Renders Jupyter Notebook inside each + * `` found in + * the page's body. + * + * @param opts The renderer options. + */ +export function autoRender (opts: NbRendererOpts = {}): void { + const selector = 'script[type="application/x-ipynb+json"]' + const render = createRenderer(document, opts) + + document.querySelectorAll(selector).forEach(script => { + if (script.textContent && script.parentElement) { + const notebook = JSON.parse(unescapeHTML(script.textContent)) + const nbElement = render(notebook) + script.parentElement.replaceChild(nbElement, script) + } + }) +} diff --git a/packages/ipynb2html/src/global.d.ts b/packages/ipynb2html/src/global.d.ts new file mode 100644 index 0000000..f0f5ae6 --- /dev/null +++ b/packages/ipynb2html/src/global.d.ts @@ -0,0 +1,7 @@ +// AnsiUp may be provided in the browser environment as an external dependency +// via global variable. It's an alternative to Anser that doesn't provide +// bundle for browsers. +declare class AnsiUp { + // eslint-disable-next-line @typescript-eslint/camelcase + ansi_to_html (input: string): string +} diff --git a/packages/ipynb2html/src/index.ts b/packages/ipynb2html/src/index.ts index 8e3c4fe..708ba09 100644 --- a/packages/ipynb2html/src/index.ts +++ b/packages/ipynb2html/src/index.ts @@ -1,7 +1,7 @@ import anser from 'anser' import hljs from 'highlightjs' import katex, { KatexOptions } from 'katex' -import { MarkedOptions } from 'marked' +import marked, { MarkedOptions } from 'marked' import { createElementCreator, @@ -10,6 +10,7 @@ import { MinimalElement, NbRenderer, NbRendererOpts as BaseOptions, + Notebook, } from 'ipynb2html-core' import buildMarkdownRenderer from './markdownRenderer' @@ -17,7 +18,7 @@ import buildMarkdownRenderer from './markdownRenderer' export { default as version } from './version' export { default as readNotebookTitle } from './readNotebookTitle' -export { NbRenderer } +export { NbRenderer, Notebook } export type NbRendererOpts = BaseOptions & { /** @@ -50,11 +51,7 @@ const defaultKatexOpts: KatexOptions = { throwOnError: false, } -function ansiCodesRenderer (input: string): string { - return anser.ansiToHtml(anser.escapeForHtml(input)) -} - -function codeHighlighter (code: string, lang: string): string { +function hljsCodeHighlighter (code: string, lang: string): string { return hljs.getLanguage(lang) ? hljs.highlight(lang, code).value : code @@ -72,7 +69,7 @@ function codeHighlighter (code: string, lang: string): string { * of the Notebook's AST nodes. You can easily replace any of the functions to * modify behaviour of the renderer. * - * @example + * @example // Node.js * import * as fs from 'fs' * import * as ipynb from 'ipynb2html' * import { Document } from 'nodom' @@ -82,6 +79,10 @@ function codeHighlighter (code: string, lang: string): string { * * console.log(renderNotebook(notebook).outerHTML) * + * @example // Browser + * const render = ipynb2html.createRenderer(document) + * document.body.appendChild(render(notebook)) + * * @param document The `Document` object from the browser's native DOM or any * fake/virtual DOM library (e.g. nodom). The only required method is * `createElement`. @@ -93,18 +94,37 @@ export function createRenderer ( opts: NbRendererOpts = {}, ): NbRenderer { + let { ansiCodesRenderer, codeHighlighter, dataRenderers = {}, markdownRenderer } = opts const katexOpts = { ...defaultKatexOpts, ...opts.katexOpts } const elementCreator = createElementCreator( document.createElement.bind(document), opts.classPrefix, ) - const markdownRenderer = buildMarkdownRenderer(opts.markedOpts, katexOpts) - const mathRenderer = (tex: string) => katex.renderToString(tex, katexOpts) - const dataRenderers = { - 'text/html': createHtmlRenderer({ elementCreator, mathRenderer }), - ...opts.dataRenderers, + // The following ifs for the imported modules are for the browser bundle + // without dependencies. + if (!ansiCodesRenderer) { + if (anser) { + ansiCodesRenderer = (input) => anser.ansiToHtml(anser.escapeForHtml(input)) + } else if (AnsiUp) { + const ansiUp = new AnsiUp() + ansiCodesRenderer = ansiUp.ansi_to_html.bind(ansiUp) + } + } + if (!codeHighlighter && hljs) { + codeHighlighter = hljsCodeHighlighter + } + if (!markdownRenderer && marked) { + if (katex) { + markdownRenderer = buildMarkdownRenderer(opts.markedOpts, katexOpts) + } else { + markdownRenderer = (text) => marked.parse(text, opts.markedOpts) + } + } + if (!dataRenderers['text/html'] && katex) { + const mathRenderer = (tex: string) => katex.renderToString(tex, katexOpts) + dataRenderers['text/html'] = createHtmlRenderer({ elementCreator, mathRenderer }) } return createNbRenderer(elementCreator, { diff --git a/packages/ipynb2html/src/markdownRenderer.ts b/packages/ipynb2html/src/markdownRenderer.ts index 3d60e72..135d9d9 100644 --- a/packages/ipynb2html/src/markdownRenderer.ts +++ b/packages/ipynb2html/src/markdownRenderer.ts @@ -19,7 +19,9 @@ function highlight (code: string, lang: string): string { * @param {KatexOptions} katexOpts Options for the KaTeX math renderer. */ export default (markedOpts: MarkedOptions = {}, katexOpts: KatexOptions = {}) => { - markedOpts = { highlight, ...markedOpts } + if (hljs) { // highlightjs may be an optional dependency (in browser bundle) + markedOpts = { highlight, ...markedOpts } + } /** * Converts the given *markdown* into HTML. diff --git a/packages/ipynb2html/src/readNotebookTitle.ts b/packages/ipynb2html/src/readNotebookTitle.ts index 7115fc1..f4d5046 100644 --- a/packages/ipynb2html/src/readNotebookTitle.ts +++ b/packages/ipynb2html/src/readNotebookTitle.ts @@ -1,6 +1,6 @@ import marked from 'marked' -import { Notebook, CellType } from 'ipynb2html-core' +import { Notebook } from 'ipynb2html-core' class EmptyRenderer extends marked.Renderer { @@ -38,7 +38,7 @@ export default (notebook: Notebook): string => { if (notebook.metadata.title) { return notebook.metadata.title } - if (notebook.cells.length > 0 && notebook.cells[0].cell_type === CellType.Markdown) { + if (notebook.cells.length > 0 && notebook.cells[0].cell_type === 'markdown') { const source = notebook.cells[0].source const markup = Array.isArray(source) ? source.join('') : source diff --git a/yarn.lock b/yarn.lock index 0d56d37..40c9b58 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,6 +29,26 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.6.3": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff" + integrity sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.4" + "@babel/helpers" "^7.6.2" + "@babel/parser" "^7.6.4" + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.3" + "@babel/types" "^7.6.3" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/generator@^7.4.0", "@babel/generator@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.0.tgz#e2c21efbfd3293ad819a2359b448f002bfdfda56" @@ -40,6 +60,57 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.6.3", "@babel/generator@^7.6.4": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671" + integrity sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w== + dependencies: + "@babel/types" "^7.6.3" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" + integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" + integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-call-delegate@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" + integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== + dependencies: + "@babel/helper-hoist-variables" "^7.4.4" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" + +"@babel/helper-define-map@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369" + integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/types" "^7.5.5" + lodash "^4.17.13" + +"@babel/helper-explode-assignable-expression@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" + integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== + dependencies: + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + "@babel/helper-function-name@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" @@ -56,11 +127,87 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-hoist-variables@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" + integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== + dependencies: + "@babel/types" "^7.4.4" + +"@babel/helper-member-expression-to-functions@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590" + integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA== + dependencies: + "@babel/types" "^7.5.5" + +"@babel/helper-module-imports@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" + integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a" + integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/template" "^7.4.4" + "@babel/types" "^7.5.5" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" + integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== + dependencies: + "@babel/types" "^7.0.0" + "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== +"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" + integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== + dependencies: + lodash "^4.17.13" + +"@babel/helper-remap-async-to-generator@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" + integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-wrap-function" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-replace-supers@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2" + integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.5.5" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.5.5" + "@babel/types" "^7.5.5" + +"@babel/helper-simple-access@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" + integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== + dependencies: + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + "@babel/helper-split-export-declaration@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" @@ -68,6 +215,16 @@ dependencies: "@babel/types" "^7.4.4" +"@babel/helper-wrap-function@^7.1.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" + integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.2.0" + "@babel/helpers@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.0.tgz#21961d16c6a3c3ab597325c34c465c0887d31c6e" @@ -77,6 +234,15 @@ "@babel/traverse" "^7.6.0" "@babel/types" "^7.6.0" +"@babel/helpers@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.2.tgz#681ffe489ea4dcc55f23ce469e58e59c1c045153" + integrity sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA== + dependencies: + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.2" + "@babel/types" "^7.6.0" + "@babel/highlight@^7.0.0": version "7.5.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" @@ -91,14 +257,399 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.0.tgz#3e05d0647432a8326cb28d0de03895ae5a57f39b" integrity sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ== -"@babel/plugin-syntax-object-rest-spread@^7.0.0": +"@babel/parser@^7.6.3", "@babel/parser@^7.6.4": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" + integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A== + +"@babel/plugin-proposal-async-generator-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" + integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/plugin-syntax-async-generators" "^7.2.0" + +"@babel/plugin-proposal-dynamic-import@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506" + integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + +"@babel/plugin-proposal-json-strings@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" + integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + +"@babel/plugin-proposal-object-rest-spread@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096" + integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" + integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz#05413762894f41bfe42b9a5e80919bd575dcc802" + integrity sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" + +"@babel/plugin-syntax-async-generators@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" + integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-dynamic-import@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" + integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-json-strings@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" + integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.6.0": +"@babel/plugin-syntax-optional-catch-binding@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" + integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-arrow-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" + integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-async-to-generator@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e" + integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + +"@babel/plugin-transform-block-scoped-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" + integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-block-scoping@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz#6e854e51fbbaa84351b15d4ddafe342f3a5d542a" + integrity sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9" + integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-define-map" "^7.5.5" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.5.5" + "@babel/helper-split-export-declaration" "^7.4.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" + integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-destructuring@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" + integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-dotall-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz#44abb948b88f0199a627024e1508acaf8dc9b2f9" + integrity sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" + +"@babel/plugin-transform-duplicate-keys@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853" + integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-exponentiation-operator@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" + integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-for-of@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" + integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-function-name@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" + integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" + integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-member-expression-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" + integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-amd@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91" + integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-commonjs@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486" + integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g== + dependencies: + "@babel/helper-module-transforms" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-systemjs@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249" + integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg== + dependencies: + "@babel/helper-hoist-variables" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-umd@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" + integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.3.tgz#aaa6e409dd4fb2e50b6e2a91f7e3a3149dbce0cf" + integrity sha512-jTkk7/uE6H2s5w6VlMHeWuH+Pcy2lmdwFoeWCVnvIrDUnB5gQqTVI8WfmEAhF2CDEarGrknZcmSFg1+bkfCoSw== + dependencies: + regexpu-core "^4.6.0" + +"@babel/plugin-transform-new-target@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" + integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-object-super@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9" + integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.5.5" + +"@babel/plugin-transform-parameters@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" + integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== + dependencies: + "@babel/helper-call-delegate" "^7.4.4" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-property-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" + integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-regenerator@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" + integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== + dependencies: + regenerator-transform "^0.14.0" + +"@babel/plugin-transform-reserved-words@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" + integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-shorthand-properties@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" + integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-spread@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd" + integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-sticky-regex@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" + integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + +"@babel/plugin-transform-template-literals@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" + integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-typeof-symbol@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" + integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-unicode-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz#b692aad888a7e8d8b1b214be6b9dc03d5031f698" + integrity sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" + +"@babel/preset-env@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.3.tgz#9e1bf05a2e2d687036d24c40e4639dc46cef2271" + integrity sha512-CWQkn7EVnwzlOdR5NOm2+pfgSNEZmvGjOhlCHBDq0J8/EStr+G+FvPEiz9B56dR6MoiUFjXhfE4hjLoAKKJtIQ== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.2.0" + "@babel/plugin-proposal-dynamic-import" "^7.5.0" + "@babel/plugin-proposal-json-strings" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.6.2" + "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.6.2" + "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-transform-arrow-functions" "^7.2.0" + "@babel/plugin-transform-async-to-generator" "^7.5.0" + "@babel/plugin-transform-block-scoped-functions" "^7.2.0" + "@babel/plugin-transform-block-scoping" "^7.6.3" + "@babel/plugin-transform-classes" "^7.5.5" + "@babel/plugin-transform-computed-properties" "^7.2.0" + "@babel/plugin-transform-destructuring" "^7.6.0" + "@babel/plugin-transform-dotall-regex" "^7.6.2" + "@babel/plugin-transform-duplicate-keys" "^7.5.0" + "@babel/plugin-transform-exponentiation-operator" "^7.2.0" + "@babel/plugin-transform-for-of" "^7.4.4" + "@babel/plugin-transform-function-name" "^7.4.4" + "@babel/plugin-transform-literals" "^7.2.0" + "@babel/plugin-transform-member-expression-literals" "^7.2.0" + "@babel/plugin-transform-modules-amd" "^7.5.0" + "@babel/plugin-transform-modules-commonjs" "^7.6.0" + "@babel/plugin-transform-modules-systemjs" "^7.5.0" + "@babel/plugin-transform-modules-umd" "^7.2.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.3" + "@babel/plugin-transform-new-target" "^7.4.4" + "@babel/plugin-transform-object-super" "^7.5.5" + "@babel/plugin-transform-parameters" "^7.4.4" + "@babel/plugin-transform-property-literals" "^7.2.0" + "@babel/plugin-transform-regenerator" "^7.4.5" + "@babel/plugin-transform-reserved-words" "^7.2.0" + "@babel/plugin-transform-shorthand-properties" "^7.2.0" + "@babel/plugin-transform-spread" "^7.6.2" + "@babel/plugin-transform-sticky-regex" "^7.2.0" + "@babel/plugin-transform-template-literals" "^7.4.4" + "@babel/plugin-transform-typeof-symbol" "^7.2.0" + "@babel/plugin-transform-unicode-regex" "^7.6.2" + "@babel/types" "^7.6.3" + browserslist "^4.6.0" + core-js-compat "^3.1.1" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.5.0" + +"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== @@ -122,6 +673,21 @@ globals "^11.1.0" lodash "^4.17.13" +"@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9" + integrity sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.3" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.6.3" + "@babel/types" "^7.6.3" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + "@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.6.0": version "7.6.1" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648" @@ -131,6 +697,15 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@babel/types@^7.2.0", "@babel/types@^7.5.5", "@babel/types@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" + integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + "@cnakazawa/watch@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" @@ -330,6 +905,11 @@ resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== +"@types/estree@*", "@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + "@types/highlight.js@*": version "9.12.3" resolved "https://registry.yarnpkg.com/@types/highlight.js/-/highlight.js-9.12.3.tgz#b672cfaac25cbbc634a0fd92c515f66faa18dbca" @@ -394,11 +974,23 @@ resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.6.5.tgz#3cf2a56ef615dad24aaf99784ef90a9eba4e29d8" integrity sha512-6kBKf64aVfx93UJrcyEZ+OBM5nGv4RLsI6sR1Ar34bpgvGVRoyTgpxn4ZmtxOM5aDTAaaznYuYUH8bUX3Nk3YA== +"@types/node@*": + version "12.11.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.5.tgz#6c3c8dc84988aff11fd2a63d7b5fbf39eaaab7b1" + integrity sha512-LC8ALj/24PhByn39nr5jnTvpE7MujK8y7LQmV74kHYF5iQ0odCPkMH4IZNZw+cobKfSXqaC8GgegcbIsQpffdA== + "@types/node@^10.13.0": version "10.14.18" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.18.tgz#b7d45fc950e6ffd7edc685e890d13aa7b8535dce" integrity sha512-ryO3Q3++yZC/+b8j8BdKd/dn9JlzlHBPdm80656xwYUdmPkpTGTjkAdt6BByiNupGPE8w0FhBgvYy/fX9hRNGQ== +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -529,6 +1121,11 @@ acorn@^7.0.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a" integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ== +acorn@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" + integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== + ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: version "6.10.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" @@ -571,6 +1168,11 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi_up@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/ansi_up/-/ansi_up-4.0.4.tgz#5b8c35f0b02e4476f3f18cf89c3bf48d15d054f6" + integrity sha512-vRxC8q6QY918MbehO869biJW4tiunJdjOhi5fpY6NLOliBQlZhOkKgABJKJqH+JZfb/WfjvjN1chLWI6tODerw== + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -710,6 +1312,13 @@ babel-jest@^24.9.0: chalk "^2.4.2" slash "^2.0.0" +babel-plugin-dynamic-import-node@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== + dependencies: + object.assign "^4.1.0" + babel-plugin-istanbul@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" @@ -813,6 +1422,15 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" +browserslist@^4.6.0, browserslist@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.1.tgz#bd400d1aea56538580e8c4d5f1c54ac11b5ab468" + integrity sha512-QtULFqKIAtiyNx7NhZ/p4rB8m3xDozVo/pi5VgTlADLF2tNigz/QH+v0m5qhn7XfHT7u+607NcCNOnC0HZAlMg== + dependencies: + caniuse-lite "^1.0.30000999" + electron-to-chromium "^1.3.284" + node-releases "^1.1.36" + bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" @@ -832,6 +1450,11 @@ buffer-from@1.x, buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +builtin-modules@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" + integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -862,6 +1485,11 @@ 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-lite@^1.0.30000999: + version "1.0.30001002" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001002.tgz#ba999a737b1abd5bf0fd47efe43a09b9cadbe9b0" + integrity sha512-pRuxPE8wdrWmVPKcDmJJiGBxr6lFJq4ivdSeo9FTmGj5Rb8NX3Mby2pARG57MXF15hYAhZ0nHV5XxT2ig4bz3g== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -995,6 +1623,16 @@ commander@^2.19.0, commander@~2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== +commander@^2.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== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -1027,6 +1665,19 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +core-js-compat@^3.1.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.3.3.tgz#82642808cf484a35292b2f8e83ef9376884e760f" + integrity sha512-GNZkENsx5pMnS7Inwv7ZO/s3B68a9WU5kIjxqrD/tkNR8mtfXJRk8fAKRlbvWZSGPc59/TkiOBDYl5Cb65pTVA== + dependencies: + browserslist "^4.7.1" + semver "^6.3.0" + +core-js@^3.2.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.3.3.tgz#b7048d3c6c1a52b5fe55a729c1d4ccdffe0891bb" + integrity sha512-0xmD4vUJRY8nfLyV9zcpC17FtSie5STXzw+HyYw2t8IIvmDnbq7RJUULECCo+NstpJtwK9kx8S+898iyqgeUow== + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -1220,6 +1871,11 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +electron-to-chromium@^1.3.284: + version "1.3.293" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.293.tgz#e52a30026b89276e211be36083a4d7136fd480ea" + integrity sha512-DQSBRuU2Z1vG+CEWUIfCEVMHtuaGlhVojzg39mX5dx7PLSFDJ7DSrGUWzaPFFgWR1jo26hj1nXXRQZvFwk7F8w== + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -1469,6 +2125,11 @@ estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +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== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -1641,6 +2302,15 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +find-cache-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.0.0.tgz#cd4b7dd97b7185b7e17dbfe2d6e4115ee3eeb8fc" + integrity sha512-t7ulV1fmbxh5G9l/492O1p5+EBbr3uwpt6odhFTMc+nWyhmbloe+ja9BZ8pIBtqFWhOmCWVjx+pTW4zDkFoclw== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.0" + pkg-dir "^4.1.0" + find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -1655,6 +2325,14 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -1695,7 +2373,7 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -fs-extra@^8.1.0: +fs-extra@8.1.0, fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -2023,7 +2701,7 @@ inquirer@^6.4.1: strip-ansi "^5.1.0" through "^2.3.6" -invariant@^2.2.4: +invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -2156,6 +2834,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -2185,6 +2868,13 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= +is-reference@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.4.tgz#3f95849886ddb70256a3e6d062b1a68c13c51427" + integrity sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw== + dependencies: + "@types/estree" "0.0.39" + is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -2650,6 +3340,11 @@ jest@^24.9.0: import-local "^2.0.0" jest-cli "^24.9.0" +js-levenshtein@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -2705,6 +3400,11 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -2869,6 +3569,13 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + lodash.memoize@4.x: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -2904,6 +3611,13 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +magic-string@^0.25.2: + version "0.25.4" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.4.tgz#325b8a0a79fc423db109b77fd5a19183b7ba5143" + integrity sha512-oycWO9nEVAP2RVPbIoDoA4Y7LFIJ3xRYov93gAyJhZkET1tNuB0u7uWkZS2LpBWTJUWnmau/To8ECWRC+jKNfw== + dependencies: + sourcemap-codec "^1.4.4" + make-dir@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -2919,6 +3633,13 @@ make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" +make-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" + integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw== + dependencies: + semver "^6.0.0" + make-error@1.x, make-error@^1.1.1: version "1.3.5" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" @@ -3151,6 +3872,13 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" +node-releases@^1.1.36: + version "1.1.38" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.38.tgz#d81b365df2936654ba37f509ba2fbe91eff2578b" + integrity sha512-/5NZAaOyTj134Oy5Cp/J8mso8OD/D9CSuL+6TOXXsTKO8yjc5e4up75SRPCganCjwFKMj2jbp5tR0dViVdox7g== + dependencies: + semver "^6.3.0" + nodom@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/nodom/-/nodom-2.4.0.tgz#de09965814d717fba21eb7be891c26ca6c437dd8" @@ -3265,7 +3993,7 @@ object-inspect@^1.6.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== -object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -3277,6 +4005,16 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + object.getownpropertydescriptors@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" @@ -3382,7 +4120,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== @@ -3403,6 +4141,13 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-reduce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" @@ -3455,6 +4200,11 @@ path-exists@^3.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -3535,6 +4285,13 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" @@ -3560,6 +4317,11 @@ pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" +private@^0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -3687,6 +4449,25 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" +regenerate-unicode-properties@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + +regenerator-transform@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" + integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== + dependencies: + private "^0.1.6" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -3705,6 +4486,30 @@ regexpp@^3.0.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.1.0" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + +regjsgen@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== + +regjsparser@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" + integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== + dependencies: + jsesc "~0.5.0" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -3804,7 +4609,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@1.x, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.9.0: +resolve@1.12.0, resolve@1.x, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.9.0: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== @@ -3845,6 +4650,86 @@ rimraf@^3.0.0: dependencies: glob "^7.1.3" +rollup-plugin-add-git-msg@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-add-git-msg/-/rollup-plugin-add-git-msg-1.0.3.tgz#9ec04edb892cf4465d23931176f397ebb126488d" + integrity sha1-nsBO24ks9EZdI5MRdvOX67EmSI0= + +rollup-plugin-babel@^4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.3.3.tgz#7eb5ac16d9b5831c3fd5d97e8df77ba25c72a2aa" + integrity sha512-tKzWOCmIJD/6aKNz0H1GMM+lW1q9KyFubbWzGiOG540zxPPifnEAHTZwjo0g991Y+DyOZcLqBgqOdqazYE5fkw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + rollup-pluginutils "^2.8.1" + +rollup-plugin-commonjs@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz#417af3b54503878e084d127adf4d1caf8beb86fb" + integrity sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q== + dependencies: + estree-walker "^0.6.1" + is-reference "^1.1.2" + magic-string "^0.25.2" + resolve "^1.11.0" + rollup-pluginutils "^2.8.1" + +rollup-plugin-node-resolve@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz#730f93d10ed202473b1fb54a5997a7db8c6d8523" + integrity sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw== + dependencies: + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.11.1" + rollup-pluginutils "^2.8.1" + +rollup-plugin-terser@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.1.2.tgz#3e41256205cb75f196fc70d4634227d1002c255c" + integrity sha512-sWKBCOS+vUkRtHtEiJPAf+WnBqk/C402fBD9AVHxSIXMqjsY7MnYWKYEUqGixtr0c8+1DjzUEPlNgOYQPVrS1g== + dependencies: + "@babel/code-frame" "^7.0.0" + jest-worker "^24.6.0" + rollup-pluginutils "^2.8.1" + serialize-javascript "^1.7.0" + terser "^4.1.0" + +rollup-plugin-typescript2@^0.24.3: + version "0.24.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.24.3.tgz#276fa33a9d584d500da62d3e5400307f4a46bdf2" + integrity sha512-D7yovQlhnRoz7pG/RF0ni+koxgzEShwfAGuOq6OVqKzcATHOvmUt2ePeYVdc9N0adcW1PcTzklUEM0oNWE/POw== + dependencies: + find-cache-dir "^3.0.0" + fs-extra "8.1.0" + resolve "1.12.0" + rollup-pluginutils "2.8.1" + tslib "1.10.0" + +rollup-pluginutils@2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz#8fa6dd0697344938ef26c2c09d2488ce9e33ce97" + integrity sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg== + dependencies: + estree-walker "^0.6.1" + +rollup-pluginutils@^2.8.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@^1.23.0: + version "1.25.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.25.2.tgz#739f508bd8f7ece52bb6c1fcda83466af82b7f6d" + integrity sha512-+7z6Wab/L45QCPcfpuTZKwKiB0tynj05s/+s2U3F2Bi7rOLPr9UcjUwO7/xpjlPNXA/hwnth6jBExFRGyf3tMg== + dependencies: + "@types/estree" "*" + "@types/node" "*" + acorn "^7.1.0" + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -3916,6 +4801,11 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +serialize-javascript@^1.7.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" + integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -4025,7 +4915,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.6: +source-map-support@^0.5.6, source-map-support@~0.5.12: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== @@ -4048,6 +4938,11 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +sourcemap-codec@^1.4.4: + version "1.4.6" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz#e30a74f0402bad09807640d39e971090a08ce1e9" + integrity sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg== + spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -4275,6 +5170,15 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" +terser@^4.1.0: + version "4.3.9" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.9.tgz#e4be37f80553d02645668727777687dad26bbca8" + integrity sha512-NFGMpHjlzmyOtPL+fDw3G7+6Ueh/sz4mkaUYa4lJCxOPTNzd0Uj0aZJOmsDYoSQyfuVoWDMSWTPU3huyOm2zdA== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + test-exclude@^5.2.3: version "5.2.3" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" @@ -4434,7 +5338,7 @@ tsconfig-paths@^3.9.0: minimist "^1.2.0" strip-bom "^3.0.0" -tslib@^1.8.1, tslib@^1.9.0: +tslib@1.10.0, tslib@^1.8.1, tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== @@ -4490,6 +5394,29 @@ uglify-js@^3.1.4: commander "~2.20.0" source-map "~0.6.1" +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" From 7129670f6309869509cc7845c5c480bfc1c69f08 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 23 Oct 2019 12:55:51 +0200 Subject: [PATCH 135/266] Add example pages for browser bundles --- examples/bundle-full.html | 326 +++++++++++++++++++++++++++++++++++++ examples/bundle.html | 330 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 656 insertions(+) create mode 100644 examples/bundle-full.html create mode 100644 examples/bundle.html diff --git a/examples/bundle-full.html b/examples/bundle-full.html new file mode 100644 index 0000000..1f756f5 --- /dev/null +++ b/examples/bundle-full.html @@ -0,0 +1,326 @@ + + + + + + Example using ipynb2html-full.js + + + + + + + + + + diff --git a/examples/bundle.html b/examples/bundle.html new file mode 100644 index 0000000..4160de8 --- /dev/null +++ b/examples/bundle.html @@ -0,0 +1,330 @@ + + + + + + Example using ipynb2html.js + + + + + + + + + + + + + + From 3154d20f2beb1d53a7bfe801108dc8367e5b0ab7 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 23 Oct 2019 18:29:12 +0200 Subject: [PATCH 136/266] Release version 0.1.0-beta.7 --- README.adoc | 2 +- package.json | 2 +- packages/ipynb2html-core/package.json | 2 +- packages/ipynb2html/package.json | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.adoc b/README.adoc index 116b6ff..dc0d144 100644 --- a/README.adoc +++ b/README.adoc @@ -2,7 +2,7 @@ :npm-name: ipynb2html :gh-name: jirutka/{npm-name} :gh-branch: master -:version: 0.1.0-beta.6 +:version: 0.1.0-beta.7 :ansiup-version: 4.0.4 :hljs-version: 9.15.10 :katex-version: 0.11.1 diff --git a/package.json b/package.json index 6d35009..a39209e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html-parent", - "version": "0.1.0-beta.6", + "version": "0.1.0-beta.7", "private": true, "scripts": { "build": "ttsc --build", diff --git a/packages/ipynb2html-core/package.json b/packages/ipynb2html-core/package.json index a3cb2df..6051075 100644 --- a/packages/ipynb2html-core/package.json +++ b/packages/ipynb2html-core/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html-core", - "version": "0.1.0-beta.6", + "version": "0.1.0-beta.7", "description": "Convert Jupyter Notebook to static HTML", "author": "Jakub Jirutka ", "license": "MIT", diff --git a/packages/ipynb2html/package.json b/packages/ipynb2html/package.json index 954055d..06d1d9a 100644 --- a/packages/ipynb2html/package.json +++ b/packages/ipynb2html/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html", - "version": "0.1.0-beta.6", + "version": "0.1.0-beta.7", "description": "Convert Jupyter Notebook to static HTML", "author": "Jakub Jirutka ", "license": "MIT", @@ -42,7 +42,7 @@ "dependencies": { "anser": "^1.4.9", "highlightjs": "^9.12.0", - "ipynb2html-core": "0.1.0-beta.6", + "ipynb2html-core": "0.1.0-beta.7", "katex": "^0.11.0", "marked": "^0.7.0" }, From 4d3777725bf93665ee9fb8dbefd07458b038e058 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 23 Oct 2019 18:39:42 +0200 Subject: [PATCH 137/266] Exclude /packages/*/dist from linted files --- .eslintignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintignore b/.eslintignore index 2152323..58add41 100644 --- a/.eslintignore +++ b/.eslintignore @@ -3,6 +3,7 @@ /coverage/ /dist/ /packages/*/coverage/ +/packages/*/dist/ /packages/*/lib/ /packages/*/*.js /scripts/* From 1a092a27363c500e9cc761cd65e698974a731333 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 23 Oct 2019 18:41:44 +0200 Subject: [PATCH 138/266] CI: Add yarn run bundle --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 6c63c7a..fcacf7b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,6 +23,7 @@ install: script: - yarn run build + - yarn run bundle - yarn run test - yarn run lint From 731bd2c619cf3736cb1e92bde5ad9247fa461f5b Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 24 Oct 2019 15:51:18 +0200 Subject: [PATCH 139/266] Add tool patch-package --- package.json | 4 +- patches/.gitkeep | 0 yarn.lock | 327 ++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 325 insertions(+), 6 deletions(-) create mode 100644 patches/.gitkeep diff --git a/package.json b/package.json index a39209e..e65d4f3 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "bundle": "wsrun --exclude-missing bundle", "clean": "rimraf coverage/ lib/ *.log && wsrun clean", "lint": "eslint --ext .ts,.tsx,.js .", - "postinstall": "run-s build", + "postinstall": "patch-package && run-s build", "publish-all": "wsrun --serial publish", "test": "jest --detectOpenHandles --coverage --verbose", "version": "./scripts/bump-version && git add README.adoc **/package.json", @@ -43,6 +43,8 @@ "jest-chain": "^1.1.2", "nodom": "^2.3.0", "npm-run-all": "^4.1.5", + "patch-package": "^6.2.0", + "postinstall-postinstall": "^2.0.0", "rimraf": "^3.0.0", "rollup": "^1.23.0", "rollup-plugin-add-git-msg": "^1.0.3", diff --git a/patches/.gitkeep b/patches/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/yarn.lock b/yarn.lock index 40c9b58..818b9ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1078,6 +1078,11 @@ lodash.unescape "4.0.1" semver "^6.3.0" +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + abab@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.1.tgz#3fa17797032b71410ec372e11668f4b4ffc86a82" @@ -1141,6 +1146,13 @@ anser@^1.4.9: resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA== +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= + dependencies: + string-width "^2.0.0" + ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -1379,6 +1391,19 @@ bluebird@^3.5.1: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1475,7 +1500,7 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^4.1.0: +camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= @@ -1497,6 +1522,11 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1536,6 +1566,11 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -1551,6 +1586,11 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= + cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -1643,6 +1683,18 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +configstore@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" + integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -1683,6 +1735,13 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= + dependencies: + capture-stack-trace "^1.0.0" + cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -1703,6 +1762,11 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" @@ -1863,6 +1927,18 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" +dot-prop@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== + dependencies: + is-obj "^1.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -2333,6 +2409,14 @@ find-up@^4.0.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-yarn-workspace-root@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db" + integrity sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q== + dependencies: + fs-extra "^4.0.3" + micromatch "^3.1.4" + flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -2382,6 +2466,24 @@ fs-extra@8.1.0, fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.6" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" @@ -2491,6 +2593,13 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + globals@^11.1.0, globals@^11.7.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -2506,6 +2615,23 @@ globrex@^0.1.1: resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.2" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" @@ -2651,6 +2777,11 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -2677,7 +2808,7 @@ inherits@2, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@~1.3.0: +ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -2749,6 +2880,13 @@ is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -2834,11 +2972,24 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -2851,6 +3002,18 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + is-plain-obj@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -2868,6 +3031,11 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + is-reference@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.4.tgz#3f95849886ddb70256a3e6d062b1a68c13c51427" @@ -2882,7 +3050,12 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" -is-stream@^1.1.0: +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -3492,11 +3665,25 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= + dependencies: + package-json "^4.0.0" + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -3603,6 +3790,11 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -4163,6 +4355,16 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -4195,6 +4397,25 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +patch-package@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.2.0.tgz#677de858e352b6ca4e6cb48a6efde2cec9fde566" + integrity sha512-HWlQflaBBMjLBfOWomfolF8aqsFDeNbSNro1JDUgYqnVvPM5OILJ9DQdwIRiKmGaOsmHvhkl1FYkvv1I9r2ZJw== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^2.4.2" + cross-spawn "^6.0.5" + find-yarn-workspace-root "^1.2.1" + fs-extra "^7.0.1" + is-ci "^2.0.0" + klaw-sync "^6.0.0" + minimist "^1.2.0" + rimraf "^2.6.3" + semver "^5.6.0" + slash "^2.0.0" + tmp "^0.0.33" + update-notifier "^2.5.0" + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -4210,6 +4431,11 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -4302,11 +4528,21 @@ 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= +postinstall-postinstall@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.0.0.tgz#7ba6711b4420575c4f561638836a81faad47f43f" + integrity sha512-3f6qWexsHiT4WKtZc5DRb0FPLilHtARi5KpY4fqban/DJNn8/YhZH8U7dVKVz51WbOxEnR31gV+qYQhvEdHtdQ== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + pretty-format@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" @@ -4373,7 +4609,7 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -rc@^1.2.7: +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -4498,6 +4734,21 @@ regexpu-core@^4.6.0: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.1.0" +registry-auth-token@^3.0.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= + dependencies: + rc "^1.0.1" + regjsgen@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" @@ -4791,7 +5042,14 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.6.0: +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -5170,6 +5428,13 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= + dependencies: + execa "^0.7.0" + terser@^4.1.0: version "4.3.9" resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.9.tgz#e4be37f80553d02645668727777687dad26bbca8" @@ -5204,6 +5469,11 @@ through@2, through@^2.3.6: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + tiny-glob@^0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.6.tgz#9e056e169d9788fe8a734dfa1ff02e9b92ed7eda" @@ -5427,6 +5697,13 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + dependencies: + crypto-random-string "^1.0.0" + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -5440,6 +5717,27 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= + +update-notifier@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -5452,6 +5750,13 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -5565,6 +5870,13 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== + dependencies: + string-width "^2.1.1" + wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" @@ -5655,6 +5967,11 @@ wsrun@^5.0.2: throat "^4.1.0" yargs "^10.0.3" +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" From 01865d5971482a8bb46c66151459868cfb774935 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 24 Oct 2019 15:53:11 +0200 Subject: [PATCH 140/266] Add patch for rollup-plugin-add-git-msg to fix "vv" version prefix --- patches/rollup-plugin-add-git-msg+1.0.3.patch | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 patches/rollup-plugin-add-git-msg+1.0.3.patch diff --git a/patches/rollup-plugin-add-git-msg+1.0.3.patch b/patches/rollup-plugin-add-git-msg+1.0.3.patch new file mode 100644 index 0000000..ccce1f2 --- /dev/null +++ b/patches/rollup-plugin-add-git-msg+1.0.3.patch @@ -0,0 +1,30 @@ +TODO: Remove after https://github.com/oplinjie/rollup-plugin-add-git-msg/pull/1 is merged. + +diff --git a/node_modules/rollup-plugin-add-git-msg/dist/rollup-plugin-add-git-msg.es.js b/node_modules/rollup-plugin-add-git-msg/dist/rollup-plugin-add-git-msg.es.js +index 184a00e..fb3fde4 100644 +--- a/node_modules/rollup-plugin-add-git-msg/dist/rollup-plugin-add-git-msg.es.js ++++ b/node_modules/rollup-plugin-add-git-msg/dist/rollup-plugin-add-git-msg.es.js +@@ -73,7 +73,8 @@ Banner.prototype.getHeaderArray = function getHeaderArray (opt) { + if (opt.showTag) { + var tag = runGitCommand(TAG_COMMAND); + if (tag) { +- gitMsg = gitMsg.concat(("v" + tag + " - ")); ++ var prefix = tag.indexOf("v") === 0 ? "" : "v" ++ gitMsg = gitMsg.concat((prefix + tag + " - ")); + } + } + +diff --git a/node_modules/rollup-plugin-add-git-msg/dist/rollup-plugin-add-git-msg.js b/node_modules/rollup-plugin-add-git-msg/dist/rollup-plugin-add-git-msg.js +index 7d16072..f288638 100644 +--- a/node_modules/rollup-plugin-add-git-msg/dist/rollup-plugin-add-git-msg.js ++++ b/node_modules/rollup-plugin-add-git-msg/dist/rollup-plugin-add-git-msg.js +@@ -77,7 +77,8 @@ Banner.prototype.getHeaderArray = function getHeaderArray (opt) { + if (opt.showTag) { + var tag = runGitCommand(TAG_COMMAND); + if (tag) { +- gitMsg = gitMsg.concat(("v" + tag + " - ")); ++ var prefix = tag.indexOf("v") === 0 ? "" : "v" ++ gitMsg = gitMsg.concat((prefix + tag + " - ")); + } + } + From aab57a8f480d1643d7edfa1c3448aaeb7b986892 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 28 Oct 2019 22:09:33 +0100 Subject: [PATCH 141/266] Inject summary of bundled packages into the browser bundle --- package.json | 1 + packages/ipynb2html/rollup.config.js | 11 +- yarn.lock | 226 ++++++++++++++++++++++++++- 3 files changed, 233 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e65d4f3..0646f20 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "rollup-plugin-add-git-msg": "^1.0.3", "rollup-plugin-babel": "^4.3.3", "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-node-license": "^0.2.0", "rollup-plugin-node-resolve": "^5.2.0", "rollup-plugin-terser": "^5.1.2", "rollup-plugin-typescript2": "^0.24.3", diff --git a/packages/ipynb2html/rollup.config.js b/packages/ipynb2html/rollup.config.js index af3f1aa..cc63198 100644 --- a/packages/ipynb2html/rollup.config.js +++ b/packages/ipynb2html/rollup.config.js @@ -1,6 +1,7 @@ import addGitMsg from 'rollup-plugin-add-git-msg' import babel from 'rollup-plugin-babel' import commonjs from 'rollup-plugin-commonjs' +import license from 'rollup-plugin-node-license' import resolve from 'rollup-plugin-node-resolve' import { terser } from 'rollup-plugin-terser' import ttypescript from 'ttypescript' @@ -32,6 +33,10 @@ const plugins = [ incremental: true, }, }, + // This is needed for node-license plugin. :( + // https://github.com/ezolenko/rollup-plugin-typescript2#plugins-using-asyncawait + objectHashIgnoreUnknownHack: true, + clean: true, }), // Resolve node modules. resolve({ @@ -65,13 +70,15 @@ const plugins = [ '* 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' }), // Minify JS. terser({ ecma: 5, include: [/^.+\.min\.js$/], output: { - // Preserve comment injected by addGitMsg. - comments: RegExp(`\\$\\{${pkg.name}\\}`), + // Preserve comment injected by addGitMsg and license. + comments: RegExp(`(?:\\$\\{${pkg.name}\\}|Bundled npm packages)`), }, }), ] diff --git a/yarn.lock b/yarn.lock index 818b9ba..9162838 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1158,6 +1158,11 @@ ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-regex@^0.2.0, ansi-regex@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" + integrity sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk= + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -1173,6 +1178,11 @@ ansi-regex@^4.0.0, ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-styles@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" + integrity sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94= + ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -1264,6 +1274,11 @@ arrify@^2.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -1541,6 +1556,17 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4 escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174" + integrity sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ= + dependencies: + ansi-styles "^1.1.0" + escape-string-regexp "^1.0.0" + has-ansi "^0.1.0" + strip-ansi "^0.3.0" + supports-color "^0.2.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -1816,6 +1842,11 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1895,6 +1926,14 @@ detect-newline@^2.1.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= +dezalgo@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + dependencies: + asap "^2.0.0" + wrappy "1" + diff-sequences@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" @@ -1996,7 +2035,7 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" -escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= @@ -2666,6 +2705,13 @@ har-validator@~5.1.0: ajv "^6.5.5" har-schema "^2.0.0" +has-ansi@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e" + integrity sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4= + dependencies: + ansi-regex "^0.2.0" + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -3709,6 +3755,22 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +license-checker@16.0.0: + version "16.0.0" + resolved "https://registry.yarnpkg.com/license-checker/-/license-checker-16.0.0.tgz#4e1263e5314b4519f8c3a5fe2fe4f38bc645a87d" + integrity sha512-TAZDfuhEM1oZcBXICOeTBMt+bXIHllvoKHZA658YgPLzcnT45MS2Tjqqwkd5ctkHOlKJ8fTdl5dft2YTCe/4LQ== + dependencies: + chalk "~0.5.1" + debug "^2.2.0" + mkdirp "^0.3.5" + nopt "^2.2.0" + read-installed "~4.0.3" + semver "^5.3.0" + spdx "^0.5.1" + spdx-correct "^2.0.3" + spdx-satisfies "^0.1.3" + treeify "^1.0.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" @@ -3856,6 +3918,11 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +markdown-table@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + marked@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" @@ -3966,6 +4033,11 @@ mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "0.0.8" +mkdirp@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.5.tgz#de3e5f8961c88c787ee1368df849ac4413eca8d7" + integrity sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc= + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -4076,6 +4148,13 @@ nodom@^2.3.0: resolved "https://registry.yarnpkg.com/nodom/-/nodom-2.4.0.tgz#de09965814d717fba21eb7be891c26ca6c437dd8" integrity sha512-qhfYgpoCSi37HLiViMlf94YqMQdvk3n3arI1uGbAWZK9NKCYRSI42W8lATeGloYGLYxb8us1C5rTvtsXjwdWQg== +nopt@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-2.2.1.tgz#2aa09b7d1768487b3b89a9c5aa52335bff0baea7" + integrity sha1-KqCbfRdoSHs7ianFqlIzW/8Lrqc= + dependencies: + abbrev "1" + nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -4084,7 +4163,7 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.3.2: +normalize-package-data@^2.0.0, normalize-package-data@^2.3.2: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -4624,6 +4703,32 @@ react-is@^16.8.4: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb" integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw== +read-installed@~4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" + integrity sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc= + dependencies: + debuglog "^1.0.1" + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + semver "2 || 3 || 4 || 5" + slide "~1.1.3" + util-extend "^1.0.1" + optionalDependencies: + graceful-fs "^4.1.2" + +read-package-json@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.0.tgz#e3d42e6c35ea5ae820d9a03ab0c7291217fc51d5" + integrity sha512-KLhu8M1ZZNkMcrq1+0UJbR8Dii8KZUqB0Sha4mOx/bknfKI/fyrQVrG/YIt2UOtG667sD8+ee4EXMM91W9dC+A== + dependencies: + glob "^7.1.1" + json-parse-better-errors "^1.0.1" + normalize-package-data "^2.0.0" + slash "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.2" + read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" @@ -4671,6 +4776,16 @@ readable-stream@^2.0.6: 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" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + readdirp@~3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" @@ -4925,6 +5040,14 @@ rollup-plugin-commonjs@^10.1.0: resolve "^1.11.0" rollup-pluginutils "^2.8.1" +rollup-plugin-node-license@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-license/-/rollup-plugin-node-license-0.2.0.tgz#aa18b6a5df52a7da3c639847e65826bb7af5ef2d" + integrity sha512-FTpd4WuplizTEIVmWv7bZ2EYVIE0Q8h7O+vtBgJbLGuUeVaPQ4N0lbULQhIzYwS0xGbHETVtA0l6tNQHIedd6Q== + dependencies: + license-checker "16.0.0" + markdown-table "1.1.3" + rollup-plugin-node-resolve@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz#730f93d10ed202473b1fb54a5997a7db8c6d8523" @@ -5111,6 +5234,11 @@ sisteransi@^1.0.3: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.3.tgz#98168d62b79e3a5e758e27ae63c4a053d748f4eb" integrity sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg== +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + slash@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" @@ -5125,6 +5253,11 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +slide@~1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -5201,6 +5334,22 @@ sourcemap-codec@^1.4.4: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz#e30a74f0402bad09807640d39e971090a08ce1e9" integrity sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg== +spdx-compare@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/spdx-compare/-/spdx-compare-0.1.2.tgz#b06af3ea34af7437d91a9f449eaf2d2e93c3c8fb" + integrity sha1-sGrz6jSvdDfZGp9Enq8tLpPDyPs= + dependencies: + spdx-expression-parse "^1.0.0" + spdx-ranges "^1.0.0" + +spdx-correct@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-2.0.4.tgz#d1652ad2ebc516f656f66ea93398558065f1b4a4" + integrity sha512-c+4gPpt9YDhz7cHlz5UrsHzxxRi4ksclxnEEKsuGT9JdwSC+ZNmsGbYRzzgxyZaBYpcWnlu+4lPcdLKx4DOCmA== + dependencies: + spdx-expression-parse "^2.0.1" + spdx-license-ids "^2.0.1" + spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -5209,11 +5358,29 @@ spdx-correct@^3.0.0: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" -spdx-exceptions@^2.1.0: +spdx-exceptions@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-1.0.5.tgz#9d21ac4da4bdb71d060fb74e5a67531d032cbba6" + integrity sha1-nSGsTaS9tx0GD7dOWmdTHQMsu6Y= + +spdx-exceptions@^2.0.0, spdx-exceptions@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== +spdx-expression-parse@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + integrity sha1-m98vIOH0DtRH++JzJmGR/O1RYmw= + +spdx-expression-parse@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-2.0.2.tgz#e2e0f229c057eac704c5a6d1c687eed66aca034b" + integrity sha512-oFxOkWCfFS0ltNp0H66gXlU4NF6bxg7RkoTYR0413t+yTY9zyj+AIWsjtN8dcVp6703ijDYBWBIARlJ7DkyP9Q== + dependencies: + spdx-exceptions "^2.0.0" + spdx-license-ids "^2.0.1" + spdx-expression-parse@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" @@ -5222,11 +5389,42 @@ spdx-expression-parse@^3.0.0: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" +spdx-license-ids@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + integrity sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc= + +spdx-license-ids@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-2.0.1.tgz#02017bcc3534ee4ffef6d58d20e7d3e9a1c3c8ec" + integrity sha1-AgF7zDU07k/+9tWNIOfT6aHDyOw= + spdx-license-ids@^3.0.0: version "3.0.5" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== +spdx-ranges@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/spdx-ranges/-/spdx-ranges-1.0.1.tgz#0f4eec7b8ea48ed202e374bb8942e8d18dc0113e" + integrity sha1-D07se46kjtIC43S7iULo0Y3AET4= + +spdx-satisfies@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/spdx-satisfies/-/spdx-satisfies-0.1.3.tgz#67a1f274e6115d4aae28afe474db76164be10bdc" + integrity sha1-Z6HydOYRXUquKK/kdNt2FkvhC9w= + dependencies: + spdx-compare "^0.1.2" + spdx-expression-parse "^1.0.0" + +spdx@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/spdx/-/spdx-0.5.2.tgz#76a428b9b97e7904ef83e62a4af0d06fdb50c265" + integrity sha512-WQbfCQT2uKLsDllnO9ItpcGUiiF1O/ZvBGCyqFZRg122HgiZubpwpZiM7BkmH19HC3XR3Z+DFMGJNzXSPebG8A== + dependencies: + spdx-exceptions "^1.0.0" + spdx-license-ids "^1.0.0" + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -5345,6 +5543,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +strip-ansi@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" + integrity sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA= + dependencies: + ansi-regex "^0.2.1" + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -5386,6 +5591,11 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +supports-color@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" + integrity sha1-2S3iaU6z9nMjlz1649i1W0wiGQo= + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -5554,6 +5764,11 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +treeify@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" + integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -5767,6 +5982,11 @@ util-deprecate@~1.0.1: 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.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" From 8c924913cf4986265275e32d11feebc2b0b11e5c Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 20 Oct 2019 19:55:46 +0200 Subject: [PATCH 142/266] Create package ipynb2html-cli --- README.adoc | 11 +++ packages/ipynb2html-cli/package.json | 52 ++++++++++++ packages/ipynb2html-cli/src/cli.ts | 108 ++++++++++++++++++++++++ packages/ipynb2html-cli/src/index.ts | 16 ++++ packages/ipynb2html-cli/src/template.ts | 38 +++++++++ packages/ipynb2html-cli/tsconfig.json | 21 +++++ tsconfig.json | 1 + yarn.lock | 29 ++++++- 8 files changed, 274 insertions(+), 2 deletions(-) create mode 100644 packages/ipynb2html-cli/package.json create mode 100755 packages/ipynb2html-cli/src/cli.ts create mode 100644 packages/ipynb2html-cli/src/index.ts create mode 100644 packages/ipynb2html-cli/src/template.ts create mode 100644 packages/ipynb2html-cli/tsconfig.json diff --git a/README.adoc b/README.adoc index dc0d144..68eca1a 100644 --- a/README.adoc +++ b/README.adoc @@ -32,6 +32,7 @@ endif::env-github[] This package provides the converter itself and some utilities with *no dependencies*. You have to provide your own syntax highlighter and Markdown, math and ANSI sequences renderer; or not, if you don’t need them. + === {npm-name} ifdef::env-github[] @@ -47,6 +48,16 @@ This package builds on the {npm-name}-core and provides a complete, ready-to-go * https://github.com/highlightjs/highlight.js[highlight.js] as syntax highlighter. +=== {npm-name}-cli + +ifdef::env-github[] +image:https://img.shields.io/npm/v/{npm-name}-cli.svg[Version on npm, link="https://www.npmjs.org/package/{npm-name}-cli"] +image:https://img.shields.io/bundlephobia/min/{npm-name}-cli.svg[Minified bundle size, link="https://bundlephobia.com/result?p={npm-name}-cli"] +endif::env-github[] + +This package provides a CLI interface for {npm-name}. + + == Usage === Node.js (server-side) diff --git a/packages/ipynb2html-cli/package.json b/packages/ipynb2html-cli/package.json new file mode 100644 index 0000000..f8c3970 --- /dev/null +++ b/packages/ipynb2html-cli/package.json @@ -0,0 +1,52 @@ +{ + "name": "ipynb2html-cli", + "version": "0.1.0-beta.7", + "description": "CLI tool for converting Jupyter Notebooks to static HTML", + "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": [ + "cli", + "converter", + "html", + "ipython", + "jupyter", + "notebook" + ], + "bin": { + "ipynb2html": "lib/index.js" + }, + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "lib", + "src" + ], + "scripts": { + "build": "ttsc --build", + "clean": "rimraf coverage/ lib/ .tsbuildinfo", + "lint": "eslint --ext .ts,.tsx,.js .", + "prepublishOnly": "run-s readme2md", + "readme2md": "../../scripts/adoc2md -a npm-readme ../../README.adoc > README.md", + "watch-ts": "ttsc --build --watch" + }, + "engines": { + "node": ">=10.13.0" + }, + "dependencies": { + "ipynb2html": "0.1.0-beta.7", + "minimist": "^1.2.0", + "minimist-options": "^4.0.2", + "nodom": "^2.3.0", + "source-map-support": "^0.5.13" + }, + "devDependencies": { + "@types/minimist": "^1.2.0", + "@types/source-map-support": "^0.5.0" + } +} diff --git a/packages/ipynb2html-cli/src/cli.ts b/packages/ipynb2html-cli/src/cli.ts new file mode 100755 index 0000000..2650855 --- /dev/null +++ b/packages/ipynb2html-cli/src/cli.ts @@ -0,0 +1,108 @@ +import fs from 'fs' +import minimist from 'minimist' +import minimistOptions from 'minimist-options' +import { Document } from 'nodom' +import { exit } from 'process' +import { $INLINE_JSON } from 'ts-transformer-inline-file' + +import * as ipynb2html from 'ipynb2html' + +import template from './template' + + +const { version, bugs: bugsUrl } = $INLINE_JSON('../package.json') +const progName = 'ipynb2html' + +const helpMsg = `\ +Usage: ${progName} [options] [] + +Convert Jupyter Notebook 4.0+ to a static HTML page. + +Arguments: + Path of the Jupyter notebook to read, or "-" for STDIN. + Path of the file to write the output HTML into. If not + provided, the output will be written to STDOUT. + +Options: + -d --debug Print debug messages. + -h --help Show this message and exit. + -V --version Print version and exit. + +Exit Codes: + 1 Generic error code. + 2 Missing required arguments or invalid option. + +Please report bugs at <${bugsUrl}>. +` + +function logErr (msg: string): void { + console.error(`${progName}: ${msg}`) +} + +function parseCliArgs (argv: string[]) { + const opts = minimist(argv, minimistOptions({ + debug: { alias: 'd', type: 'boolean' }, + version: { alias: 'V', type: 'boolean' }, + help: { alias: 'h', type: 'boolean' }, + arguments: 'string', + stopEarly: true, + unknown: (arg: string) => { + if (arg.startsWith('-')) { + logErr(`Unknown option: ${arg}`) + return exit(2) + } else { + return true + } + }, + })) + + if (opts.help) { + console.log(helpMsg) + return exit(0) + } + if (opts.version) { + console.log(`${progName} ${version}`) + return exit(0) + } + + if (opts._.length < 1 || opts._.length > 2) { + logErr('Invalid number of arguments\n') + console.log(helpMsg) + return exit(2) + } + const [input, output] = opts._ + + return { + debug: opts.debug as boolean, + input: input === '-' ? 0 : input, // 0 = stdin + output, + } +} + +export default (argv: string[]): void => { + const opts = parseCliArgs(argv) + + try { + const notebook = JSON.parse(fs.readFileSync(opts.input, 'utf-8')) + + const title = ipynb2html.readNotebookTitle(notebook) || 'Notebook' + + const render = ipynb2html.createRenderer(new Document()) + const contents = render(notebook).outerHTML + + const html = template(contents, title) + + if (opts.output) { + fs.writeFileSync(opts.output, html) + } else { + console.log(html) + } + } catch (err) { + if (opts.debug) { + console.debug(err) + } else { + logErr(err.message) + } + return exit(1) + } +} diff --git a/packages/ipynb2html-cli/src/index.ts b/packages/ipynb2html-cli/src/index.ts new file mode 100644 index 0000000..d3f57e3 --- /dev/null +++ b/packages/ipynb2html-cli/src/index.ts @@ -0,0 +1,16 @@ +#!/usr/bin/env node +import sourceMapSupport from 'source-map-support' + +import cli from './cli' + +// Allow to disable sourcemap when running from pkg bundle. +if (!/^(0|disable|false|no|off)$/i.test(process.env.NODE_SOURCEMAP || '')) { + sourceMapSupport.install({ environment: 'node' }) +} + +// If the file is run directly (not required as a module), call CLI. +if (require.main === module) { + cli(process.argv.slice(2)) +} + +export default cli diff --git a/packages/ipynb2html-cli/src/template.ts b/packages/ipynb2html-cli/src/template.ts new file mode 100644 index 0000000..12bda79 --- /dev/null +++ b/packages/ipynb2html-cli/src/template.ts @@ -0,0 +1,38 @@ +export default (contents: string, title: string): string => `\ + + + + + + ${title} + + + + + + +${contents} + + +` diff --git a/packages/ipynb2html-cli/tsconfig.json b/packages/ipynb2html-cli/tsconfig.json new file mode 100644 index 0000000..00b05ac --- /dev/null +++ b/packages/ipynb2html-cli/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib", + "tsBuildInfoFile": "./.tsbuildinfo", + "baseUrl": ".", + "paths": { + "*": ["../../types/*"], + "@/*": ["./src/*"], + "~/*": ["../../*"], + }, + }, + "include": [ + "./src", + ], + "references": [ + { "path": "../ipynb2html-core" }, + { "path": "../ipynb2html" }, + ], +} diff --git a/tsconfig.json b/tsconfig.json index eca5c10..e8ed575 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,5 +3,6 @@ "references": [ { "path": "./packages/ipynb2html-core" }, { "path": "./packages/ipynb2html" }, + { "path": "./packages/ipynb2html-cli" }, ] } diff --git a/yarn.lock b/yarn.lock index 9162838..3eb561a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -974,6 +974,11 @@ resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.6.5.tgz#3cf2a56ef615dad24aaf99784ef90a9eba4e29d8" integrity sha512-6kBKf64aVfx93UJrcyEZ+OBM5nGv4RLsI6sR1Ar34bpgvGVRoyTgpxn4ZmtxOM5aDTAaaznYuYUH8bUX3Nk3YA== +"@types/minimist@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" + integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= + "@types/node@*": version "12.11.5" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.5.tgz#6c3c8dc84988aff11fd2a63d7b5fbf39eaaab7b1" @@ -991,6 +996,13 @@ dependencies: "@types/node" "*" +"@types/source-map-support@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@types/source-map-support/-/source-map-support-0.5.0.tgz#40f47e68bc0bdf54d19dddad4550f521cdb9968c" + integrity sha512-OrnAz5K5dXDgMdeRRoXIjDAvkodQ9ESvVJCyzrhzUJKmCkXgmYx/KLUBcVFe5eS4FiohfcY7YPxsdkmSwJz9wA== + dependencies: + "@types/node" "*" + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -1269,6 +1281,11 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + arrify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" @@ -3060,7 +3077,7 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-plain-obj@^1.0.0: +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" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= @@ -3988,6 +4005,14 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimist-options@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.0.2.tgz#29c4021373ded40d546186725e57761e4b1984a7" + integrity sha512-seq4hpWkYSUh1y7NXxzucwAN9yVlBc3Upgdjz8vLCP97jG8kaOmzYrVH/m7tQ1NYD1wdtZbSLfdy4zFmRWuc/w== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -5306,7 +5331,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.6, source-map-support@~0.5.12: +source-map-support@^0.5.13, source-map-support@^0.5.6, source-map-support@~0.5.12: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== From 8d6614bcccdfea0ad2777e4ed283dd88b72ac249 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 20 Oct 2019 20:18:28 +0200 Subject: [PATCH 143/266] Build standalone bundle with CLI --- package.json | 3 + packages/ipynb2html-cli/package.json | 3 +- packages/ipynb2html-cli/rollup.config.js | 75 ++++++++++++++++++++++++ yarn.lock | 37 +++++++++++- 4 files changed, 115 insertions(+), 3 deletions(-) create mode 100644 packages/ipynb2html-cli/rollup.config.js diff --git a/package.json b/package.json index 0646f20..f9d6c4c 100644 --- a/package.json +++ b/package.json @@ -50,8 +50,11 @@ "rollup-plugin-add-git-msg": "^1.0.3", "rollup-plugin-babel": "^4.3.3", "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-executable": "^1.5.1", + "rollup-plugin-node-externals": "^2.0.1", "rollup-plugin-node-license": "^0.2.0", "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-strip-shebang": "^1.2.7", "rollup-plugin-terser": "^5.1.2", "rollup-plugin-typescript2": "^0.24.3", "ts-jest": "^24.1.0", diff --git a/packages/ipynb2html-cli/package.json b/packages/ipynb2html-cli/package.json index f8c3970..624c094 100644 --- a/packages/ipynb2html-cli/package.json +++ b/packages/ipynb2html-cli/package.json @@ -29,7 +29,8 @@ ], "scripts": { "build": "ttsc --build", - "clean": "rimraf coverage/ lib/ .tsbuildinfo", + "bundle": "rollup -c", + "clean": "rimraf coverage/ dist/ lib/ .tsbuildinfo", "lint": "eslint --ext .ts,.tsx,.js .", "prepublishOnly": "run-s readme2md", "readme2md": "../../scripts/adoc2md -a npm-readme ../../README.adoc > README.md", diff --git a/packages/ipynb2html-cli/rollup.config.js b/packages/ipynb2html-cli/rollup.config.js new file mode 100644 index 0000000..eb9a947 --- /dev/null +++ b/packages/ipynb2html-cli/rollup.config.js @@ -0,0 +1,75 @@ +import addGitMsg from 'rollup-plugin-add-git-msg' +import commonjs from 'rollup-plugin-commonjs' +import executable from 'rollup-plugin-executable' +import externals from 'rollup-plugin-node-externals' +import license from 'rollup-plugin-node-license' +import resolve from 'rollup-plugin-node-resolve' +import { terser } from 'rollup-plugin-terser' +import typescript from 'rollup-plugin-typescript2' +import stripShebang from 'rollup-plugin-strip-shebang' +import ttypescript from 'ttypescript' + +import pkg from './package.json' + + +export default { + input: 'src/index.ts', + plugins: [ + // Rollup doesn't like shebangs, let's strip it. + stripShebang({ + include: 'src/index.ts', + }), + // Transpile TypeScript sources to JS. + typescript({ + typescript: ttypescript, + tsconfigOverride: { + compilerOptions: { + module: 'ESNext', + declaration: false, + declarationMap: false, + composite: false, + incremental: true, + }, + }, + // This is needed for node-license plugin. :( + // https://github.com/ezolenko/rollup-plugin-typescript2#plugins-using-asyncawait + objectHashIgnoreUnknownHack: true, + clean: true, + }), + // Make node builtins external. + externals(), + // Resolve node modules. + resolve({ + extensions: ['.mjs', '.js', '.ts'], + mainFields: ['jsnext:main', 'module', 'main'], + }), + // Convert CommonJS modules to ES6 modules. + commonjs(), + // 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' }), + // Minify JS. + terser({ + ecma: 2018, + output: { + // Preserve comment injected by addGitMsg and license. + comments: RegExp(`(?:\\$\\{${pkg.name}\\}|Bundled npm packages)`), + }, + }), + // Make the output file executable. + executable(), + ], + output: { + file: 'dist/ipynb2html', + format: 'cjs', + banner: '#!/usr/bin/env node', + exports: 'named', + sourcemap: true, + }, +} diff --git a/yarn.lock b/yarn.lock index 3eb561a..4fd96e8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -649,6 +649,13 @@ js-levenshtein "^1.1.3" semver "^5.5.0" +"@babel/runtime@^7.6.2": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f" + integrity sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA== + dependencies: + regenerator-runtime "^0.13.2" + "@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" @@ -3882,7 +3889,7 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -magic-string@^0.25.2: +magic-string@^0.25.2, magic-string@^0.25.3: version "0.25.4" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.4.tgz#325b8a0a79fc423db109b77fd5a19183b7ba5143" integrity sha512-oycWO9nEVAP2RVPbIoDoA4Y7LFIJ3xRYov93gAyJhZkET1tNuB0u7uWkZS2LpBWTJUWnmau/To8ECWRC+jKNfw== @@ -4837,6 +4844,11 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== +regenerator-runtime@^0.13.2: + version "0.13.3" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" + integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== + regenerator-transform@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" @@ -5065,6 +5077,18 @@ rollup-plugin-commonjs@^10.1.0: resolve "^1.11.0" rollup-pluginutils "^2.8.1" +rollup-plugin-executable@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-executable/-/rollup-plugin-executable-1.5.1.tgz#cd06d3d6596795a4d4e5e9fc32e1cc3204593c7b" + integrity sha512-+UAapfjBIJP24/x2qqxQTCNOZq2fRdLOpeXlIaGwOYTvjafBkc35LQrApr3Lg+2izJTUJsQdiW38vaoArS0n+A== + dependencies: + "@babel/runtime" "^7.6.2" + +rollup-plugin-node-externals@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-externals/-/rollup-plugin-node-externals-2.1.1.tgz#fe7fd5304e6dea9cfb656d49d1d2c89d72f2e992" + integrity sha512-YCDa2LqsvpxraSsJB2p1GozP9CGrp25R3a57baFUcacJgpoI04UnBx18z4ucPCaCCnedvcgeh27BYr9fiEfyXg== + rollup-plugin-node-license@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/rollup-plugin-node-license/-/rollup-plugin-node-license-0.2.0.tgz#aa18b6a5df52a7da3c639847e65826bb7af5ef2d" @@ -5084,6 +5108,15 @@ rollup-plugin-node-resolve@^5.2.0: resolve "^1.11.1" rollup-pluginutils "^2.8.1" +rollup-plugin-strip-shebang@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/rollup-plugin-strip-shebang/-/rollup-plugin-strip-shebang-1.2.7.tgz#164967b0038606e073c74e0e90198d67d67ac135" + integrity sha512-tMVg6/Q1Ii56O/PWaQ1QQC0SKmB32veOgY/PXgymw5NEWuKpaWxFImLbFK1Fct5I07IPxflYG6jX2OgBNf5NQQ== + dependencies: + is-callable "^1.1.4" + magic-string "^0.25.3" + rollup-pluginutils "^2.8.2" + rollup-plugin-terser@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.1.2.tgz#3e41256205cb75f196fc70d4634227d1002c255c" @@ -5113,7 +5146,7 @@ rollup-pluginutils@2.8.1: dependencies: estree-walker "^0.6.1" -rollup-pluginutils@^2.8.1: +rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: version "2.8.2" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== From e4f8f436f1f77a649646e55231d3433cc73b6cf3 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 28 Oct 2019 23:46:54 +0100 Subject: [PATCH 144/266] =?UTF-8?q?Pack=20CLI=E2=80=89bundle=20into=20rele?= =?UTF-8?q?ase=20tarball=20and=20zip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 5 +- packages/ipynb2html-cli/package.json | 3 +- scripts/create-archives | 79 ++++++++++++++++++++++++++++ yarn.lock | 61 +++++++++++++++++++++ 4 files changed, 146 insertions(+), 2 deletions(-) create mode 100755 scripts/create-archives diff --git a/package.json b/package.json index f9d6c4c..a4af34d 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "@typescript-eslint/parser": "^2.4.0", "ansi_up": "^4.0.4", "arrify": "^2.0.1", + "common-path-prefix": "^2.0.0", "core-js": "^3.2.1", "dedent": "^0.7.0", "eslint": "^6.5.1", @@ -57,6 +58,7 @@ "rollup-plugin-strip-shebang": "^1.2.7", "rollup-plugin-terser": "^5.1.2", "rollup-plugin-typescript2": "^0.24.3", + "tar": "^5.0.5", "ts-jest": "^24.1.0", "ts-node": "^8.4.1", "ts-transformer-export-default-name": "^0.1.0", @@ -64,7 +66,8 @@ "ttypescript": "^1.5.7", "typescript": "~3.6.4", "wsrun": "^5.0.2", - "yarn-version-bump": "^0.0.3" + "yarn-version-bump": "^0.0.3", + "yazl": "^2.5.1" }, "workspaces": [ "packages/*" diff --git a/packages/ipynb2html-cli/package.json b/packages/ipynb2html-cli/package.json index 624c094..26305a1 100644 --- a/packages/ipynb2html-cli/package.json +++ b/packages/ipynb2html-cli/package.json @@ -29,8 +29,9 @@ ], "scripts": { "build": "ttsc --build", - "bundle": "rollup -c", + "bundle": "rollup -c && run-s create-archives", "clean": "rimraf coverage/ dist/ lib/ .tsbuildinfo", + "create-archives": "../../scripts/create-archives dist/ipynb2html-cli dist/ipynb2html dist/ipynb2html.map", "lint": "eslint --ext .ts,.tsx,.js .", "prepublishOnly": "run-s readme2md", "readme2md": "../../scripts/adoc2md -a npm-readme ../../README.adoc > README.md", diff --git a/scripts/create-archives b/scripts/create-archives new file mode 100755 index 0000000..bb4337b --- /dev/null +++ b/scripts/create-archives @@ -0,0 +1,79 @@ +#!/usr/bin/env node +'use strict' + +const commonPathPrefix = require('common-path-prefix') +const execa = require('execa') +const fs = require('fs-extra') +const path = require('path') +const tar = require('tar') +const { ZipFile } = require('yazl') + + +async function writeTarGz (basename, fileList, cwd) { + console.log(`Creating ${basename}.tar.gz...`) + + return tar.create({ + file: `${basename}.tar.gz`, + prefix: path.basename(basename), + gzip: true, + portable: true, + cwd: cwd || '.', + }, fileList) +} + +async function writeZip (basename, fileList, cwd) { + const prefix = path.basename(basename) + const zipfile = new ZipFile() + + return new Promise((resolve, reject) => { + console.log(`Creating ${basename}.zip...`) + + for (let fname of fileList) { + zipfile.addFile(path.join(cwd || '.', fname), path.join(prefix, fname)) + } + zipfile.outputStream + .pipe(fs.createWriteStream(`${basename}.zip`)) + .on('close', resolve) + .on('error', reject) + zipfile.end() + }) +} + +async function gitDescribe (prefix) { + const output = await execa.stdout('git', [ + 'describe', + '--always', + `--match=${prefix}*` + ]) + return output.startsWith(prefix) ? output : `v0.0.0-${output}` +} + +async function createArchives (destName, srcFiles) { + const version = await gitDescribe('v') + destName += `-${version}` + + const srcDir = commonPathPrefix(srcFiles) + const fileList = srcFiles.map(p => p.slice(srcDir.length)) + + fs.mkdirpSync(path.dirname(destName)) + + return Promise.all([ + writeTarGz(destName, fileList, srcDir), + writeZip(destName, fileList, srcDir), + ]) +} + + +const argv = process.argv.slice(2) +if (argv.length < 3 || ['-h', '--help'].includes(argv[0])) { + console.warn('Usage: create-archives ...') + process.exit(2) +} + +const destName = argv[0] +const srcFiles = argv.slice(1) + +createArchives(destName, srcFiles).catch(err => { + console.error(err) + process.exit(1) +}) diff --git a/yarn.lock b/yarn.lock index 4fd96e8..af16454 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1509,6 +1509,11 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1616,6 +1621,11 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== +chownr@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" + integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== + ci-info@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" @@ -1718,6 +1728,11 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +common-path-prefix@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-2.0.0.tgz#25b0265f318bf093a6ec630813aac97b29dea230" + integrity sha512-Lb9qbwwyQdRDmyib0qur7BC9/GHIbviTaQebayFsGC/n77AwFhZINCcJkQx2qVv9LJsA8F5ex65F2qrOfWGUyw== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -2554,6 +2569,13 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.2.1" +fs-minipass@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.0.0.tgz#a6415edab02fae4b9e9230bc87ee2e4472003cd1" + integrity sha512-40Qz+LFXmd9tzYVnnBmZvFfvAADfUA14TXPK1s7IfElJTIZ97rA8w4Kin7Wt5JBrC3ShnnFJO/5vPjPEeJIq9A== + dependencies: + minipass "^3.0.0" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -4043,6 +4065,13 @@ minipass@^2.2.1, minipass@^2.3.5: safe-buffer "^5.1.2" yallist "^3.0.0" +minipass@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" + integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w== + dependencies: + yallist "^4.0.0" + minizlib@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.2.tgz#6f0ccc82fa53e1bf2ff145f220d2da9fa6e3a166" @@ -4050,6 +4079,14 @@ minizlib@^1.2.1: dependencies: minipass "^2.2.1" +minizlib@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3" + integrity sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -5696,6 +5733,18 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" +tar@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/tar/-/tar-5.0.5.tgz#03fcdb7105bc8ea3ce6c86642b9c942495b04f93" + integrity sha512-MNIgJddrV2TkuwChwcSNds/5E9VijOiw7kAc1y5hTNJoLDSuIyid2QtLYiCYNnICebpuvjhPQZsXwUL0O3l7OQ== + dependencies: + chownr "^1.1.3" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.0" + mkdirp "^0.5.0" + yallist "^4.0.0" + term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" @@ -6275,6 +6324,11 @@ yallist@^3.0.0, yallist@^3.0.3: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yargs-parser@10.x: version "10.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" @@ -6339,6 +6393,13 @@ yarn-version-bump@^0.0.3: load-json-file "^5.0.0" write-json-file "^2.3.0" +yazl@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35" + integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== + dependencies: + buffer-crc32 "~0.2.3" + yn@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" From c687f528dc6606f86d0540f5a8edc174b5866951 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 28 Oct 2019 23:47:40 +0100 Subject: [PATCH 145/266] Add License with info about bundled deps into release tarball/zip --- packages/ipynb2html-cli/package.json | 3 +- packages/ipynb2html-cli/scripts/pack-bundle | 8 ++++ scripts/assemble-license | 42 +++++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) create mode 100755 packages/ipynb2html-cli/scripts/pack-bundle create mode 100755 scripts/assemble-license diff --git a/packages/ipynb2html-cli/package.json b/packages/ipynb2html-cli/package.json index 26305a1..0b0ff06 100644 --- a/packages/ipynb2html-cli/package.json +++ b/packages/ipynb2html-cli/package.json @@ -29,9 +29,8 @@ ], "scripts": { "build": "ttsc --build", - "bundle": "rollup -c && run-s create-archives", + "bundle": "rollup -c && ./scripts/pack-bundle", "clean": "rimraf coverage/ dist/ lib/ .tsbuildinfo", - "create-archives": "../../scripts/create-archives dist/ipynb2html-cli dist/ipynb2html dist/ipynb2html.map", "lint": "eslint --ext .ts,.tsx,.js .", "prepublishOnly": "run-s readme2md", "readme2md": "../../scripts/adoc2md -a npm-readme ../../README.adoc > README.md", diff --git a/packages/ipynb2html-cli/scripts/pack-bundle b/packages/ipynb2html-cli/scripts/pack-bundle new file mode 100755 index 0000000..8c93dba --- /dev/null +++ b/packages/ipynb2html-cli/scripts/pack-bundle @@ -0,0 +1,8 @@ +#!/bin/sh +set -e + +cd "$(dirname "$0")/../dist" +export PATH="$(pwd)/../../../scripts:$PATH" + +assemble-license ipynb2html > LICENSE +create-archives ipynb2html-cli ipynb2html ipynb2html.map LICENSE diff --git a/scripts/assemble-license b/scripts/assemble-license new file mode 100755 index 0000000..146fd4a --- /dev/null +++ b/scripts/assemble-license @@ -0,0 +1,42 @@ +#!/usr/bin/env node +'use strict' + +const fs = require('fs') +const path = require('path') + + +function extractLicenseTable (filename) { + const source = fs.readFileSync(filename, 'utf8') + + const start = source.indexOf('/*!\n * Bundled npm packages') + const end = start + source.slice(start).indexOf('*/') + + return source + .slice(start, end) + .split('\n') + .filter(s => s.startsWith(' * |')) + .map(s => s.slice(3)) + .join('\n') +} + +function readLicense () { + return fs.readFileSync(path.join(__dirname, '../LICENSE'), 'utf8') +} + + +const argv = process.argv.slice(2) +if (argv.length < 1 || ['-h', '--help'].includes(argv[0])) { + console.warn('Usage: assemble-license ') + process.exit(2) +} + +const bundlePath = path.resolve(argv[0]) + +console.log(`\ +${readLicense()} +------------------------- + +This product bundles source code of the following projects: + +${extractLicenseTable(bundlePath)}\ +`) From 0afc6f755b8241763f5e9f276cb7a91297233fb6 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 20 Oct 2019 20:20:44 +0200 Subject: [PATCH 146/266] CI: Deploy tarball/zip with CLI to GitHub Releases --- .travis.yml | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index fcacf7b..9da42a0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,9 +31,22 @@ before_deploy: - echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}' >> "$HOME"/.npmrc deploy: - provider: script - script: yarn publish-all --non-interactive - skip_cleanup: true - on: - tags: true - node_js: '10' + - provider: script + script: yarn publish-all --non-interactive + skip_cleanup: true + on: + repo: jirutka/ipynb2html + tags: true + node_js: '10' + - provider: releases + api_key: + secure: j5Ks+lUUE2NkUKKC4A+FRKVia3oRyanMKp25jZwF2jLOQxZp0/BggNOduw7zMLzPizmMbz7CkYV/pLyXH+rwCjOdQPnSGLorzfp6ztzG49SqPUK5i5PdSctYT7+C2HdYR25xtw6f06HXzLWTIeYb0JG+5pUCkI4R+z1JEqZhx3PMOkAx9Ec9UoYNKcbHe1E78y8zH0pDccVJ1ejrbmizEqZALpYNR+qCWhTfLVbwYlpJJGIKCIXVYI9tU/3y/6JOO+gCX2m8jqNVBPrwWWD//gGExn2lR6BK0WiXTE71FbM7GyVjoeh93Zg1WifF+7DBtaTI9qs+928afLn28AcWqB6P/HgoRgt/4oLvJU2hkdkIoNqQONqYZeglW1A5qYp6T3nURLpcn1cg2yBD6vNi8cet4ntgOsPu9Soa8pzsm9xcITMJNUlFOEWyYPyvgTXHUjZwbZvrZHRVYeHrDOuq9EEAz+11u1FYG49uSBZf3+H6CmL7n2qeoYhlMhT94bgIkF4ByFmP+OTUcMcWvDdA7uD8JqPMaxQI0hhjrszxPT7C5YNXsJ1Q0vU2zZSMF74fygsXlnr6VeqwxSzgF/6mAAuSwtKSg/pFPPLdevIeehw4oLCz+ZdxVk5kpfymKvqvueDdMMoV4Fse4Yhv81Z76tAPM35TtqJa77DJwqOVOCE= + file_glob: true + file: + - packages/ipynb2html-cli/dist/*.tar.gz + - packages/ipynb2html-cli/dist/*.zip + skip_cleanup: true + on: + repo: jirutka/ipynb2html + tags: true + node_js: '10' From 1e8620a8e0301fa011ffc13ad014feb757496edf Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 29 Oct 2019 00:25:26 +0100 Subject: [PATCH 147/266] Readme: Add Installation and Usage for CLI --- README.adoc | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/README.adoc b/README.adoc index 68eca1a..641364c 100644 --- a/README.adoc +++ b/README.adoc @@ -58,8 +58,32 @@ endif::env-github[] This package provides a CLI interface for {npm-name}. +== Installation + +All the <> can be installed using `npm` or `yarn` from https://www.npmjs.com/[npmjs.com]. + + +=== Standalone CLI Tool + +{npm-name}-cli is also provided as a single minified JavaScript with all the external dependencies bundled in. +It requires only Node.js (version 10 or newer) to be installed on the system. + +* https://github.com/{gh-name}/releases/download/v{version}/{npm-name}-cli-v{version}.tar.gz[{npm-name}-cli-v{version}.tar.gz] +* https://github.com/{gh-name}/releases/download/v{version}/{npm-name}-cli-v{version}.zip[{npm-name}-cli-v{version}.zip] + +The archive also contains source maps (useful for debugging). + + == Usage +=== CLI + +[source, subs="+attributes"] +{npm-name} notebook.ipynb notebook.html + +Run `{npm-name} --help` for more information. + + === Node.js (server-side) To render HTML in Node.js (server-side rendering), you need some (fake) DOM implementation. From 7aadb665b6a635bac365315929a4849f8742933d Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 29 Oct 2019 01:19:23 +0100 Subject: [PATCH 148/266] CI: Create source tarball and deploy to GitHub Releases --- .travis.yml | 2 ++ package.json | 2 +- scripts/create-src-tarball | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100755 scripts/create-src-tarball diff --git a/.travis.yml b/.travis.yml index 9da42a0..061cbb7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,6 +20,7 @@ cache: yarn install: - yarn install + - test -z "$TRAVIS_TAG" || ./scripts/create-src-tarball dist/ipynb2html-$TRAVIS_TAG-src.tar.gz script: - yarn run build @@ -43,6 +44,7 @@ deploy: secure: j5Ks+lUUE2NkUKKC4A+FRKVia3oRyanMKp25jZwF2jLOQxZp0/BggNOduw7zMLzPizmMbz7CkYV/pLyXH+rwCjOdQPnSGLorzfp6ztzG49SqPUK5i5PdSctYT7+C2HdYR25xtw6f06HXzLWTIeYb0JG+5pUCkI4R+z1JEqZhx3PMOkAx9Ec9UoYNKcbHe1E78y8zH0pDccVJ1ejrbmizEqZALpYNR+qCWhTfLVbwYlpJJGIKCIXVYI9tU/3y/6JOO+gCX2m8jqNVBPrwWWD//gGExn2lR6BK0WiXTE71FbM7GyVjoeh93Zg1WifF+7DBtaTI9qs+928afLn28AcWqB6P/HgoRgt/4oLvJU2hkdkIoNqQONqYZeglW1A5qYp6T3nURLpcn1cg2yBD6vNi8cet4ntgOsPu9Soa8pzsm9xcITMJNUlFOEWyYPyvgTXHUjZwbZvrZHRVYeHrDOuq9EEAz+11u1FYG49uSBZf3+H6CmL7n2qeoYhlMhT94bgIkF4ByFmP+OTUcMcWvDdA7uD8JqPMaxQI0hhjrszxPT7C5YNXsJ1Q0vU2zZSMF74fygsXlnr6VeqwxSzgF/6mAAuSwtKSg/pFPPLdevIeehw4oLCz+ZdxVk5kpfymKvqvueDdMMoV4Fse4Yhv81Z76tAPM35TtqJa77DJwqOVOCE= file_glob: true file: + - dist/*.tar.gz - packages/ipynb2html-cli/dist/*.tar.gz - packages/ipynb2html-cli/dist/*.zip skip_cleanup: true diff --git a/package.json b/package.json index a4af34d..a763ad5 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "scripts": { "build": "ttsc --build", "bundle": "wsrun --exclude-missing bundle", - "clean": "rimraf coverage/ lib/ *.log && wsrun clean", + "clean": "rimraf coverage/ dist/ lib/ *.log && wsrun clean", "lint": "eslint --ext .ts,.tsx,.js .", "postinstall": "patch-package && run-s build", "publish-all": "wsrun --serial publish", diff --git a/scripts/create-src-tarball b/scripts/create-src-tarball new file mode 100755 index 0000000..c0b1282 --- /dev/null +++ b/scripts/create-src-tarball @@ -0,0 +1,19 @@ +#!/bin/sh +set -eu + +cd "$(dirname "$0")/.." + +case "${1:-}" in + '' | -h | --help) echo "Usage: $0 " >&2; exit 2;; +esac + +out_file="$1" +base_dir=$(basename "$(pwd)") +base_name=$(basename "${out_file%.tar.gz}") + +mkdir -p dist +tar -czf "$out_file" \ + -C .. --exclude-vcs \ + --exclude="**/$out_file" \ + --xform="s|^$base_dir|$base_name|" \ + "$base_dir" From e68d1898797c217c53133cc54143ef563192523b Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 29 Oct 2019 01:32:48 +0100 Subject: [PATCH 149/266] Release version 0.1.0-beta.8 --- README.adoc | 2 +- package.json | 2 +- packages/ipynb2html-cli/package.json | 4 ++-- packages/ipynb2html-core/package.json | 2 +- packages/ipynb2html/package.json | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.adoc b/README.adoc index 641364c..db3011e 100644 --- a/README.adoc +++ b/README.adoc @@ -2,7 +2,7 @@ :npm-name: ipynb2html :gh-name: jirutka/{npm-name} :gh-branch: master -:version: 0.1.0-beta.7 +:version: 0.1.0-beta.8 :ansiup-version: 4.0.4 :hljs-version: 9.15.10 :katex-version: 0.11.1 diff --git a/package.json b/package.json index a763ad5..aff4a82 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html-parent", - "version": "0.1.0-beta.7", + "version": "0.1.0-beta.8", "private": true, "scripts": { "build": "ttsc --build", diff --git a/packages/ipynb2html-cli/package.json b/packages/ipynb2html-cli/package.json index 0b0ff06..ffd1722 100644 --- a/packages/ipynb2html-cli/package.json +++ b/packages/ipynb2html-cli/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html-cli", - "version": "0.1.0-beta.7", + "version": "0.1.0-beta.8", "description": "CLI tool for converting Jupyter Notebooks to static HTML", "author": "Jakub Jirutka ", "license": "MIT", @@ -40,7 +40,7 @@ "node": ">=10.13.0" }, "dependencies": { - "ipynb2html": "0.1.0-beta.7", + "ipynb2html": "0.1.0-beta.8", "minimist": "^1.2.0", "minimist-options": "^4.0.2", "nodom": "^2.3.0", diff --git a/packages/ipynb2html-core/package.json b/packages/ipynb2html-core/package.json index 6051075..e6b2587 100644 --- a/packages/ipynb2html-core/package.json +++ b/packages/ipynb2html-core/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html-core", - "version": "0.1.0-beta.7", + "version": "0.1.0-beta.8", "description": "Convert Jupyter Notebook to static HTML", "author": "Jakub Jirutka ", "license": "MIT", diff --git a/packages/ipynb2html/package.json b/packages/ipynb2html/package.json index 06d1d9a..3c32a6e 100644 --- a/packages/ipynb2html/package.json +++ b/packages/ipynb2html/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html", - "version": "0.1.0-beta.7", + "version": "0.1.0-beta.8", "description": "Convert Jupyter Notebook to static HTML", "author": "Jakub Jirutka ", "license": "MIT", @@ -42,7 +42,7 @@ "dependencies": { "anser": "^1.4.9", "highlightjs": "^9.12.0", - "ipynb2html-core": "0.1.0-beta.7", + "ipynb2html-core": "0.1.0-beta.8", "katex": "^0.11.0", "marked": "^0.7.0" }, From 0da10ec7029115faef1227bf2a25d0cadd56734a Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Tue, 29 Oct 2019 01:43:43 +0100 Subject: [PATCH 150/266] Readme: Exclude section Installation from npm Readme --- README.adoc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.adoc b/README.adoc index db3011e..a4b66b3 100644 --- a/README.adoc +++ b/README.adoc @@ -58,6 +58,8 @@ endif::env-github[] This package provides a CLI interface for {npm-name}. +ifndef::npm-readme[] + == Installation All the <> can be installed using `npm` or `yarn` from https://www.npmjs.com/[npmjs.com]. @@ -73,6 +75,8 @@ It requires only Node.js (version 10 or newer) to be installed on the system. The archive also contains source maps (useful for debugging). +endif::[] + == Usage From 68e382d05b33d96d3b69b4d0dacd05751b1688b0 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 3 Nov 2019 12:21:56 +0100 Subject: [PATCH 151/266] Remove x permission from cli.ts --- packages/ipynb2html-cli/src/cli.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 packages/ipynb2html-cli/src/cli.ts diff --git a/packages/ipynb2html-cli/src/cli.ts b/packages/ipynb2html-cli/src/cli.ts old mode 100755 new mode 100644 From 1a8142f64184e3e0fe23ba9b458c8941bba1d2fb Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 3 Nov 2019 12:39:10 +0100 Subject: [PATCH 152/266] Fix running CLI directly from installed npm package --- .eslintignore | 1 + package.json | 1 - packages/ipynb2html-cli/bin/ipynb2html | 2 ++ packages/ipynb2html-cli/package.json | 3 ++- packages/ipynb2html-cli/rollup.config.js | 5 ----- packages/ipynb2html-cli/src/index.ts | 1 - yarn.lock | 13 ++----------- 7 files changed, 7 insertions(+), 19 deletions(-) create mode 100755 packages/ipynb2html-cli/bin/ipynb2html diff --git a/.eslintignore b/.eslintignore index 58add41..d9277b2 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,6 +2,7 @@ /.tmp/ /coverage/ /dist/ +/packages/*/bin/ /packages/*/coverage/ /packages/*/dist/ /packages/*/lib/ diff --git a/package.json b/package.json index aff4a82..ef6831f 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,6 @@ "rollup-plugin-node-externals": "^2.0.1", "rollup-plugin-node-license": "^0.2.0", "rollup-plugin-node-resolve": "^5.2.0", - "rollup-plugin-strip-shebang": "^1.2.7", "rollup-plugin-terser": "^5.1.2", "rollup-plugin-typescript2": "^0.24.3", "tar": "^5.0.5", diff --git a/packages/ipynb2html-cli/bin/ipynb2html b/packages/ipynb2html-cli/bin/ipynb2html new file mode 100755 index 0000000..e4cd1ab --- /dev/null +++ b/packages/ipynb2html-cli/bin/ipynb2html @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('../lib/index').default(process.argv.slice(2)) diff --git a/packages/ipynb2html-cli/package.json b/packages/ipynb2html-cli/package.json index ffd1722..8951076 100644 --- a/packages/ipynb2html-cli/package.json +++ b/packages/ipynb2html-cli/package.json @@ -19,11 +19,12 @@ "notebook" ], "bin": { - "ipynb2html": "lib/index.js" + "ipynb2html": "bin/ipynb2html" }, "main": "lib/index.js", "types": "lib/index.d.ts", "files": [ + "bin", "lib", "src" ], diff --git a/packages/ipynb2html-cli/rollup.config.js b/packages/ipynb2html-cli/rollup.config.js index eb9a947..55c48e7 100644 --- a/packages/ipynb2html-cli/rollup.config.js +++ b/packages/ipynb2html-cli/rollup.config.js @@ -6,7 +6,6 @@ import license from 'rollup-plugin-node-license' import resolve from 'rollup-plugin-node-resolve' import { terser } from 'rollup-plugin-terser' import typescript from 'rollup-plugin-typescript2' -import stripShebang from 'rollup-plugin-strip-shebang' import ttypescript from 'ttypescript' import pkg from './package.json' @@ -15,10 +14,6 @@ import pkg from './package.json' export default { input: 'src/index.ts', plugins: [ - // Rollup doesn't like shebangs, let's strip it. - stripShebang({ - include: 'src/index.ts', - }), // Transpile TypeScript sources to JS. typescript({ typescript: ttypescript, diff --git a/packages/ipynb2html-cli/src/index.ts b/packages/ipynb2html-cli/src/index.ts index d3f57e3..7149bad 100644 --- a/packages/ipynb2html-cli/src/index.ts +++ b/packages/ipynb2html-cli/src/index.ts @@ -1,4 +1,3 @@ -#!/usr/bin/env node import sourceMapSupport from 'source-map-support' import cli from './cli' diff --git a/yarn.lock b/yarn.lock index af16454..5d6d252 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3911,7 +3911,7 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -magic-string@^0.25.2, magic-string@^0.25.3: +magic-string@^0.25.2: version "0.25.4" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.4.tgz#325b8a0a79fc423db109b77fd5a19183b7ba5143" integrity sha512-oycWO9nEVAP2RVPbIoDoA4Y7LFIJ3xRYov93gAyJhZkET1tNuB0u7uWkZS2LpBWTJUWnmau/To8ECWRC+jKNfw== @@ -5145,15 +5145,6 @@ rollup-plugin-node-resolve@^5.2.0: resolve "^1.11.1" rollup-pluginutils "^2.8.1" -rollup-plugin-strip-shebang@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/rollup-plugin-strip-shebang/-/rollup-plugin-strip-shebang-1.2.7.tgz#164967b0038606e073c74e0e90198d67d67ac135" - integrity sha512-tMVg6/Q1Ii56O/PWaQ1QQC0SKmB32veOgY/PXgymw5NEWuKpaWxFImLbFK1Fct5I07IPxflYG6jX2OgBNf5NQQ== - dependencies: - is-callable "^1.1.4" - magic-string "^0.25.3" - rollup-pluginutils "^2.8.2" - rollup-plugin-terser@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.1.2.tgz#3e41256205cb75f196fc70d4634227d1002c255c" @@ -5183,7 +5174,7 @@ rollup-pluginutils@2.8.1: dependencies: estree-walker "^0.6.1" -rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: +rollup-pluginutils@^2.8.1: version "2.8.2" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== From 37ce69b9d17c915ba4fe050cf91be128eeb32401 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 30 Oct 2019 23:06:36 +0100 Subject: [PATCH 153/266] Add reference stylesheet and use it instead of nbpreview's --- README.adoc | 4 ++ examples/bundle-full.html | 5 +- examples/bundle.html | 5 +- package.json | 1 + packages/ipynb2html-cli/src/template.ts | 10 +-- packages/ipynb2html/package.json | 7 ++- packages/ipynb2html/styles/notebook.css | 78 +++++++++++++++++++++++ yarn.lock | 82 ++++++++++++++++++++++++- 8 files changed, 177 insertions(+), 15 deletions(-) create mode 100644 packages/ipynb2html/styles/notebook.css diff --git a/README.adoc b/README.adoc index a4b66b3..3aacf9c 100644 --- a/README.adoc +++ b/README.adoc @@ -47,6 +47,8 @@ This package builds on the {npm-name}-core and provides a complete, ready-to-go * https://github.com/IonicaBizau/anser[anser] as ANSI sequences renderer, * https://github.com/highlightjs/highlight.js[highlight.js] as syntax highlighter. +It also provides a reference stylesheet which you can find in `dist/notebook.min.css` (or non-minified link:packages/{npm-name}/styles/notebook.css[`styles/notebook.css`]). + === {npm-name}-cli @@ -130,6 +132,7 @@ You can link it from https://www.jsdelivr.com/[jsDelivr CDN], for example: + @@ -150,6 +153,7 @@ document.body.appendChild(element) + diff --git a/packages/ipynb2html/package.json b/packages/ipynb2html/package.json index 3c32a6e..384f25c 100644 --- a/packages/ipynb2html/package.json +++ b/packages/ipynb2html/package.json @@ -23,15 +23,18 @@ "files": [ "dist/ipynb2html.min.js*", "dist/ipynb2html-full.min.js*", + "dist/notebook.min.css*", "lib", - "src" + "src", + "styles" ], "scripts": { "build": "ttsc --build", "bundle": "rollup -c", "clean": "rimraf coverage/ dist/ lib/ .tsbuildinfo", "lint": "eslint --ext .ts,.tsx,.js .", - "prepublishOnly": "run-p bundle readme2md", + "minify-css": "csso styles/notebook.css -o dist/notebook.min.css -s dist/notebook.min.css.map", + "prepublishOnly": "run-p bundle minify-css 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/styles/notebook.css b/packages/ipynb2html/styles/notebook.css new file mode 100644 index 0000000..de2c687 --- /dev/null +++ b/packages/ipynb2html/styles/notebook.css @@ -0,0 +1,78 @@ +/* Reference styles for ipynb2html */ + +.nb-notebook { + line-height: 1.5; +} + +.nb-cell + .nb-cell { + margin-top: 1.4rem; +} + +.nb-raw-cell { + font-family: monospace; + white-space: pre-wrap; +} + +.nb-code-cell { + position: relative; +} + +.nb-source { + background-color: #f7f7f7; + border: 1px solid #cfcfcf; + border-radius: 2px; + overflow-x: auto; +} + +.nb-source::before, +.nb-output::before { + position: absolute; + font-family: monospace; + color: #999; + left: -7.5em; + width: 7em; + text-align: right; +} + +.nb-source::before { + content: "In [" attr(data-execution-count) "]:"; +} +.nb-output::before { + content: "Out[" attr(data-execution-count) "]:"; +} + +.nb-source + .nb-output, +.nb-output + .nb-output { + margin-top: 1.4rem; +} + +.nb-source > pre { + padding: 0.5em; + margin: 0; +} + +.nb-output { + min-height: 1em; + width: 100%; +} + +.nb-output > pre { + padding: 0.5em; + margin: 0; + overflow-x: auto; +} + +.nb-output > img { + max-width: 100%; +} + +.nb-stdout, +.nb-stderr { + white-space: pre-wrap; +} + +.nb-error, +.nb-stderr { + background-color: #fdd; + border-radius: 2px; +} diff --git a/yarn.lock b/yarn.lock index 5d6d252..7fd4154 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1202,6 +1202,11 @@ ansi-styles@^1.1.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" integrity sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94= +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -1576,6 +1581,17 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1601,6 +1617,21 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +chokidar@^3.0.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.2.3.tgz#b9270a565d14f02f6bfdd537a6a2bbf5549b8c8c" + integrity sha512-GtrxGuRf6bzHQmXWRepvsGnXpkQkVU+D2/9a7dAe4a7v1NhrfZOZ2oKf76M3nOs46fFYL8D+Q8JYA4GYeJ8Cjw== + 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.2.0" + optionalDependencies: + fsevents "~2.1.1" + chokidar@^3.0.2: version "3.2.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.2.2.tgz#a433973350021e09f2b853a2287781022c0dc935" @@ -1636,6 +1667,13 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +clap@^1.0.9: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA== + dependencies: + chalk "^1.1.3" + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -1832,6 +1870,31 @@ crypto-random-string@^1.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= +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" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +csso-cli@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/csso-cli/-/csso-cli-3.0.0.tgz#a9bf3de54067c5ee471cbdb002da2b89ece9b06c" + integrity sha512-j0ytVZ8qHXcFnR3HOvfH8RWOeHtlqwt97mYe32AnJ2yG6noqV0Jsn8OwOQq8wpdavkHr8JOx6drRtY2HoKLjqw== + dependencies: + chokidar "^3.0.0" + clap "^1.0.9" + csso "^4.0.1" + source-map "^0.6.1" + +csso@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.2.tgz#e5f81ab3a56b8eefb7f0092ce7279329f454de3d" + integrity sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg== + dependencies: + css-tree "1.0.0-alpha.37" + cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" @@ -2074,7 +2137,7 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" -escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= @@ -2758,6 +2821,13 @@ has-ansi@^0.1.0: dependencies: ansi-regex "^0.2.0" +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -3974,6 +4044,11 @@ marked@^0.7.0: resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg== +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + mem@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" @@ -5682,6 +5757,11 @@ supports-color@^0.2.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" integrity sha1-2S3iaU6z9nMjlz1649i1W0wiGQo= +supports-color@^2.0.0: + version "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: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" From b7cbf2230b6a48f49d8f4eecfcdd32e0c830d3f5 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 31 Oct 2019 12:35:38 +0100 Subject: [PATCH 154/266] Remove CSS class nb-worksheet I've added it only for backward compatibility with styles designed for notebook.js, but actually even nbpreview (from the same author as notebook.js) doesn't use it. Let's get rid of it. --- packages/ipynb2html-core/src/renderer.ts | 3 +-- packages/ipynb2html-core/test/renderer.test.tsx | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/ipynb2html-core/src/renderer.ts b/packages/ipynb2html-core/src/renderer.ts index 7920191..6ad1a74 100644 --- a/packages/ipynb2html-core/src/renderer.ts +++ b/packages/ipynb2html-core/src/renderer.ts @@ -136,8 +136,7 @@ function buildRenderer (elementCreator: ElementCreator, opt const r = callableObject('Notebook', { Notebook: (notebook: Notebook): TElement => { const children = notebook.cells.map(cell => r.Cell(cell, notebook)) - // Class "worksheet" is for backward compatibility with notebook.js. - return el('div', ['notebook', 'worksheet'], children) + return el('div', ['notebook'], children) }, Cell: (cell: Cell, notebook: Notebook): TElement => { diff --git a/packages/ipynb2html-core/test/renderer.test.tsx b/packages/ipynb2html-core/test/renderer.test.tsx index d11aabc..7c34562 100644 --- a/packages/ipynb2html-core/test/renderer.test.tsx +++ b/packages/ipynb2html-core/test/renderer.test.tsx @@ -46,9 +46,9 @@ describe('built renderer', () => { renderer.Cell = rendererMock('Cell') }) - it('returns div.notebook.worksheet', () => { + it('returns div.notebook', () => { expect( renderer.Notebook({ ...notebook, cells: [] }) ).toHtmlEqual( -
+
) }) From 74a27b318f2272c82f41b013d3559a3b93bec652 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 3 Nov 2019 20:31:17 +0100 Subject: [PATCH 155/266] Improve styles responsivity --- packages/ipynb2html-cli/src/template.ts | 17 ++++++++++++++--- packages/ipynb2html/styles/notebook.css | 22 +++++++++++++++------- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/packages/ipynb2html-cli/src/template.ts b/packages/ipynb2html-cli/src/template.ts index 4f16547..70b98c1 100644 --- a/packages/ipynb2html-cli/src/template.ts +++ b/packages/ipynb2html-cli/src/template.ts @@ -24,12 +24,23 @@ export default (contents: string, title: string): string => `\ padding: 0; } .nb-notebook { - width: 99%; - max-width: 750px; + max-width: 45rem; margin: 0 auto; - padding: 3em 6em 1em 6em; + padding: 3rem 6rem; background-color: white; } + @media (max-width: 900px) { + .nb-notebook { + padding-left: 5rem; + padding-right: 3rem; + max-width: none; + } + } + @media (max-width: 768px) { + .nb-notebook { + padding: 1rem 5% 2rem 5%; + } + } ${notebookCss.slice(0, -1).replace(/\n\n/g, '\n').replace(/^/gm, ' ')} diff --git a/packages/ipynb2html/styles/notebook.css b/packages/ipynb2html/styles/notebook.css index de2c687..a9d24c6 100644 --- a/packages/ipynb2html/styles/notebook.css +++ b/packages/ipynb2html/styles/notebook.css @@ -17,13 +17,6 @@ position: relative; } -.nb-source { - background-color: #f7f7f7; - border: 1px solid #cfcfcf; - border-radius: 2px; - overflow-x: auto; -} - .nb-source::before, .nb-output::before { position: absolute; @@ -47,8 +40,12 @@ } .nb-source > pre { + background-color: #f7f7f7; + border: 1px solid #cfcfcf; + border-radius: 2px; padding: 0.5em; margin: 0; + overflow-x: auto; } .nb-output { @@ -76,3 +73,14 @@ background-color: #fdd; border-radius: 2px; } + +@media (max-width: 768px) { + .nb-source::before, + .nb-output::before { + display: block; + position: relative; + left: 0; + padding-bottom: 0.5em; + text-align: left; + } +} From eeee0decc6aaf07dcbab708c39aee6e74b1f06e2 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 3 Nov 2019 20:47:32 +0100 Subject: [PATCH 156/266] Extract inline style from template.ts to page.css --- packages/ipynb2html-cli/src/page.css | 25 +++++++++++++++++++++++++ packages/ipynb2html-cli/src/template.ts | 25 ++----------------------- 2 files changed, 27 insertions(+), 23 deletions(-) create mode 100644 packages/ipynb2html-cli/src/page.css diff --git a/packages/ipynb2html-cli/src/page.css b/packages/ipynb2html-cli/src/page.css new file mode 100644 index 0000000..4e1b15d --- /dev/null +++ b/packages/ipynb2html-cli/src/page.css @@ -0,0 +1,25 @@ +html, body { + margin: 0; + padding: 0; +} + +.nb-notebook { + max-width: 45rem; + margin: 0 auto; + padding: 3rem 6rem; + background-color: white; +} + +@media (max-width: 900px) { + .nb-notebook { + padding-left: 5rem; + padding-right: 3rem; + max-width: none; + } +} + +@media (max-width: 768px) { + .nb-notebook { + padding: 1rem 5% 2rem 5%; + } +} diff --git a/packages/ipynb2html-cli/src/template.ts b/packages/ipynb2html-cli/src/template.ts index 70b98c1..7cdebba 100644 --- a/packages/ipynb2html-cli/src/template.ts +++ b/packages/ipynb2html-cli/src/template.ts @@ -1,6 +1,7 @@ import { $INLINE_FILE } from 'ts-transformer-inline-file' const notebookCss = $INLINE_FILE('../../ipynb2html/styles/notebook.css') +const pageCss = $INLINE_FILE('./page.css') export default (contents: string, title: string): string => `\ @@ -19,29 +20,7 @@ export default (contents: string, title: string): string => `\ integrity="sha384-BdGj8xC2eZkQaxoQ8nSLefg4AV4/AwB3Fj+8SUSo7pnKP6Eoy18liIKTPn9oBYNG" crossorigin="anonymous"> From 638666c72354b30c5b2ad3b8fb4402a6482202be Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 3 Nov 2019 23:05:36 +0100 Subject: [PATCH 157/266] Add rules for tables into CLI styles --- packages/ipynb2html-cli/src/page.css | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/packages/ipynb2html-cli/src/page.css b/packages/ipynb2html-cli/src/page.css index 4e1b15d..27f119d 100644 --- a/packages/ipynb2html-cli/src/page.css +++ b/packages/ipynb2html-cli/src/page.css @@ -3,6 +3,31 @@ html, body { padding: 0; } +table { + border-collapse: collapse; + border: 1px solid #cfcfcf; +} + +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; +} + .nb-notebook { max-width: 45rem; margin: 0 auto; @@ -10,6 +35,10 @@ html, body { background-color: white; } +.nb-output table { + font-size: 0.9em; +} + @media (max-width: 900px) { .nb-notebook { padding-left: 5rem; From 8427698e2106ca595850ac9973c98f8d12d0c241 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 3 Nov 2019 23:38:05 +0100 Subject: [PATCH 158/266] Improve CLI styles to be more consistent across different browsers --- packages/ipynb2html-cli/src/page.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/ipynb2html-cli/src/page.css b/packages/ipynb2html-cli/src/page.css index 27f119d..1082c78 100644 --- a/packages/ipynb2html-cli/src/page.css +++ b/packages/ipynb2html-cli/src/page.css @@ -1,6 +1,14 @@ html, body { margin: 0; padding: 0; + background-color: #dedede; + color: #2a2a2a; + font-family: sans-serif; +} + +code, +pre { + font-size: 0.85rem; } table { From d658d9b5b77e9489861e4b489461a71849a673da Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 3 Nov 2019 23:57:37 +0100 Subject: [PATCH 159/266] Use box-shadow on .nb-notebook in CLI styles --- packages/ipynb2html-cli/src/page.css | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/ipynb2html-cli/src/page.css b/packages/ipynb2html-cli/src/page.css index 1082c78..c592f99 100644 --- a/packages/ipynb2html-cli/src/page.css +++ b/packages/ipynb2html-cli/src/page.css @@ -38,9 +38,10 @@ tbody tr:hover { .nb-notebook { max-width: 45rem; - margin: 0 auto; + margin: 1rem auto; padding: 3rem 6rem; background-color: white; + box-shadow: 4px 4px 8px #cfcfcf, -4px -4px 8px #cfcfcf; } .nb-output table { @@ -49,9 +50,11 @@ tbody tr:hover { @media (max-width: 900px) { .nb-notebook { + margin: 0; padding-left: 5rem; padding-right: 3rem; max-width: none; + box-shadow: none; } } From 842f652ca52a10ce502511f1933d2d65d7e371f9 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 4 Nov 2019 01:15:14 +0100 Subject: [PATCH 160/266] Increase margin before headings in CLI styles --- packages/ipynb2html-cli/src/page.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/ipynb2html-cli/src/page.css b/packages/ipynb2html-cli/src/page.css index c592f99..b5d038f 100644 --- a/packages/ipynb2html-cli/src/page.css +++ b/packages/ipynb2html-cli/src/page.css @@ -11,6 +11,10 @@ pre { font-size: 0.85rem; } +h1, h2, h3, h4, h5, h6 { + margin-top: 1.6em; +} + table { border-collapse: collapse; border: 1px solid #cfcfcf; From 875e57639ed2bbd432dd8c3bce3822e311dc6761 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Mon, 4 Nov 2019 10:43:04 +0100 Subject: [PATCH 161/266] Rename template.ts to page.ts --- packages/ipynb2html-cli/src/cli.ts | 8 ++++---- packages/ipynb2html-cli/src/{template.ts => page.ts} | 0 2 files changed, 4 insertions(+), 4 deletions(-) rename packages/ipynb2html-cli/src/{template.ts => page.ts} (100%) diff --git a/packages/ipynb2html-cli/src/cli.ts b/packages/ipynb2html-cli/src/cli.ts index 2650855..92084fc 100644 --- a/packages/ipynb2html-cli/src/cli.ts +++ b/packages/ipynb2html-cli/src/cli.ts @@ -7,7 +7,7 @@ import { $INLINE_JSON } from 'ts-transformer-inline-file' import * as ipynb2html from 'ipynb2html' -import template from './template' +import renderPage from './page' const { version, bugs: bugsUrl } = $INLINE_JSON('../package.json') @@ -87,10 +87,10 @@ export default (argv: string[]): void => { const title = ipynb2html.readNotebookTitle(notebook) || 'Notebook' - const render = ipynb2html.createRenderer(new Document()) - const contents = render(notebook).outerHTML + const renderNotebook = ipynb2html.createRenderer(new Document()) + const contents = renderNotebook(notebook).outerHTML - const html = template(contents, title) + const html = renderPage(contents, title) if (opts.output) { fs.writeFileSync(opts.output, html) diff --git a/packages/ipynb2html-cli/src/template.ts b/packages/ipynb2html-cli/src/page.ts similarity index 100% rename from packages/ipynb2html-cli/src/template.ts rename to packages/ipynb2html-cli/src/page.ts From 93a559493f9668c84929a94bc910439ce165d563 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 8 Nov 2019 17:46:41 +0100 Subject: [PATCH 162/266] Rename dataRenderersOrder to dataTypesPriority --- packages/ipynb2html-core/src/renderer.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/ipynb2html-core/src/renderer.ts b/packages/ipynb2html-core/src/renderer.ts index 6ad1a74..a7c44da 100644 --- a/packages/ipynb2html-core/src/renderer.ts +++ b/packages/ipynb2html-core/src/renderer.ts @@ -23,12 +23,12 @@ export type Options = { */ dataRenderers?: DataRenderers, /** - * An array of the supported media types in the priority order. When a cell + * An array of the supported MIME types in the priority order. When a cell * contains multiple representations of the data, the one with the media type * that has the lowest index in this array will be rendered. The default is * `Object.keys({ ...dataRenderers, ...builtinRenderers })`. */ - dataRenderersOrder?: string[], + dataTypesPriority?: string[], /** * A function for converting ANSI escape sequences in the given *text* to HTML. * It gets the text from the cell as-is, without prior escaping, so it must @@ -112,7 +112,7 @@ function buildRenderer (elementCreator: ElementCreator, opt }) // opts.dataRenderers is intentionally included twice; to get the user's - // provided renderers in the default dataRenderersOrder before the built-in + // provided renderers in the default dataTypesPriority before the built-in // renderers and at the same time allow to override any built-in renderer. const dataRenderers: DataRenderers = { ...opts.dataRenderers, @@ -127,10 +127,10 @@ function buildRenderer (elementCreator: ElementCreator, opt 'text/plain': (data) => el('pre', ['text-output'], escapeHTML(data)), ...opts.dataRenderers, } - const dataRenderersOrder = opts.dataRenderersOrder || Object.keys(dataRenderers) + const dataTypesPriority = opts.dataTypesPriority || Object.keys(dataRenderers) const resolveDataType = (output: DisplayData | ExecuteResult) => { - return dataRenderersOrder.find(type => output.data[type] && dataRenderers[type]) + return dataTypesPriority.find(type => output.data[type] && dataRenderers[type]) } const r = callableObject('Notebook', { From 31173df6230c546d0c3e96f11ce3dc985698f9b2 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 22 Jan 2020 16:13:40 +0100 Subject: [PATCH 163/266] Rename type Options in renderer to NbRendererOpts --- packages/ipynb2html-core/src/index.ts | 2 +- packages/ipynb2html-core/src/renderer.ts | 6 +++--- packages/ipynb2html-core/test/renderer.test.tsx | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/ipynb2html-core/src/index.ts b/packages/ipynb2html-core/src/index.ts index 8671cfd..6a9b89e 100644 --- a/packages/ipynb2html-core/src/index.ts +++ b/packages/ipynb2html-core/src/index.ts @@ -3,6 +3,6 @@ import * as mathExtractor from './mathExtractor' export { default as createElementCreator, ElementCreator, MinimalElement } from './elementCreator' export { default as createHtmlRenderer } from './htmlRenderer' export * from './nbformat' -export { default as createNbRenderer, DataRenderer, NbRenderer, Options as NbRendererOpts } from './renderer' +export { default as createNbRenderer, DataRenderer, NbRenderer, NbRendererOpts } from './renderer' export { mathExtractor } export { default as version } from './version' diff --git a/packages/ipynb2html-core/src/renderer.ts b/packages/ipynb2html-core/src/renderer.ts index a7c44da..db4dd70 100644 --- a/packages/ipynb2html-core/src/renderer.ts +++ b/packages/ipynb2html-core/src/renderer.ts @@ -17,7 +17,7 @@ import { } from './nbformat' -export type Options = { +export type NbRendererOpts = { /** * An object with additional data renderers indexed by a media type. */ @@ -94,11 +94,11 @@ function notebookLanguage ({ metadata: meta }: Notebook): string { * * @param {ElementCreator} elementCreator The function that will be used for * building all HTML elements. - * @param {Options} opts + * @param {NbRendererOpts} opts * @return {NbRenderer} * @template TElement Type of the element object that *elementCreator* produces. */ -function buildRenderer (elementCreator: ElementCreator, opts: Options = {}) { +function buildRenderer (elementCreator: ElementCreator, opts: NbRendererOpts = {}) { const renderMarkdown = opts.markdownRenderer || identity const renderAnsiCodes = opts.ansiCodesRenderer || escapeHTML const highlightCode = opts.codeHighlighter || escapeHTML diff --git a/packages/ipynb2html-core/test/renderer.test.tsx b/packages/ipynb2html-core/test/renderer.test.tsx index 7c34562..b7e213b 100644 --- a/packages/ipynb2html-core/test/renderer.test.tsx +++ b/packages/ipynb2html-core/test/renderer.test.tsx @@ -4,7 +4,7 @@ import arrify from 'arrify' import { Document, HTMLElement } from 'nodom' import buildElementCreator from '@/elementCreator' -import buildRenderer, { NbRenderer, Options as RendererOpts } from '@/renderer' +import buildRenderer, { NbRenderer, NbRendererOpts } from '@/renderer' import { DisplayData, MimeBundle, MultilineString, Notebook } from '@/nbformat' // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -27,7 +27,7 @@ describe('built renderer', () => { const dataRenderers = { 'text/custom': rendererMock('DisplayData'), } - const rendererOpts: RendererOpts = { + const rendererOpts: NbRendererOpts = { ansiCodesRenderer, codeHighlighter, markdownRenderer, From 6c2fa15393de83e710e43595553b147fe629f1ba Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 22 Jan 2020 16:18:03 +0100 Subject: [PATCH 164/266] Refactor renderer object to class It's more flexible in terms of extensibility and more familiar for devs. Avoiding classes doesn't seem to be really worth it in this particular case. --- packages/ipynb2html-core/src/index.ts | 2 +- .../ipynb2html-core/src/internal/utils.ts | 43 +-- packages/ipynb2html-core/src/renderer.ts | 284 ++++++++++-------- .../test/internal/utils.test.ts | 71 +++-- .../ipynb2html-core/test/renderer.test.tsx | 8 +- packages/ipynb2html/src/index.ts | 3 +- 6 files changed, 236 insertions(+), 175 deletions(-) diff --git a/packages/ipynb2html-core/src/index.ts b/packages/ipynb2html-core/src/index.ts index 6a9b89e..d45c461 100644 --- a/packages/ipynb2html-core/src/index.ts +++ b/packages/ipynb2html-core/src/index.ts @@ -3,6 +3,6 @@ import * as mathExtractor from './mathExtractor' export { default as createElementCreator, ElementCreator, MinimalElement } from './elementCreator' export { default as createHtmlRenderer } from './htmlRenderer' export * from './nbformat' -export { default as createNbRenderer, DataRenderer, NbRenderer, NbRendererOpts } from './renderer' +export { default as NbRenderer, DataRenderer, NbRendererOpts } from './renderer' export { mathExtractor } export { default as version } from './version' diff --git a/packages/ipynb2html-core/src/internal/utils.ts b/packages/ipynb2html-core/src/internal/utils.ts index c0333a9..e91c3d5 100644 --- a/packages/ipynb2html-core/src/internal/utils.ts +++ b/packages/ipynb2html-core/src/internal/utils.ts @@ -5,25 +5,34 @@ const htmlEntities = { '>': '>', } -/** - * Creates a "callable object" with the given properties. In fact, it creates - * a function that calls `obj[funcName]` and copies all the enumerable - * properties of the *template* to the created function. - * - * @param {string} funcName Name of the function property of the *template*. - * @param {Object} template The source object from which to copy enumerable properties. - * @return A function with all enumerable properties of the *template*. - */ -export function callableObject ( - funcName: K, - template: T, -): T[K] extends Function ? T & T[K] : never { +type CallableConstructor = new () => T extends { __call__: Function } + ? T['__call__'] + : 'subclass does not implement method __call__' - const fn = function (...args: any[]) { - return (template[funcName] as any)(...args) +export const CallableInstance: CallableConstructor = function Callable ( + this: object, +): Function { + + const func = this.constructor.prototype.__call__ as Function + + const cls = function (...args: any[]) { + return func.apply(cls, args) } - return Object.assign(fn, template) as any -} + Object.setPrototypeOf(cls, this.constructor.prototype) + + Object.defineProperties(cls, { + name: { + value: this.constructor.name, + configurable: true, + }, + length: { + value: func.length, + configurable: true, + }, + }) + return cls +} as any +CallableInstance.prototype = Object.create(Function.prototype) /** * Escapes characters with special meaning in HTML with the corresponding diff --git a/packages/ipynb2html-core/src/renderer.ts b/packages/ipynb2html-core/src/renderer.ts index db4dd70..fa795aa 100644 --- a/packages/ipynb2html-core/src/renderer.ts +++ b/packages/ipynb2html-core/src/renderer.ts @@ -1,6 +1,6 @@ // This code is originally based on notebookjs 0.4.2 distributed under the MIT license. import { ElementCreator } from './elementCreator' -import { callableObject, escapeHTML, identity } from './internal/utils' +import { CallableInstance, escapeHTML, identity } from './internal/utils' import { Cell, CellType, @@ -48,7 +48,7 @@ export type NbRendererOpts = { markdownRenderer?: (markup: string) => string, } -export type DataRenderer = (data: string) => TElement +export type DataRenderer = (this: NbRenderer | void, data: string) => TElement type DataRenderers = { [mediaType: string]: DataRenderer } @@ -86,151 +86,169 @@ function notebookLanguage ({ metadata: meta }: Notebook): string { return (meta.language_info && meta.language_info.name) || 'python' } -/** - * Builds a Notebook renderer function with the given options. It returns a - * "callable object" that exposes a renderer function for each of the - * Notebook's AST node. You can easily replace any of the functions to modify - * behaviour of the renderer. - * - * @param {ElementCreator} elementCreator The function that will be used for - * building all HTML elements. - * @param {NbRendererOpts} opts - * @return {NbRenderer} - * @template TElement Type of the element object that *elementCreator* produces. - */ -function buildRenderer (elementCreator: ElementCreator, opts: NbRendererOpts = {}) { - const renderMarkdown = opts.markdownRenderer || identity - const renderAnsiCodes = opts.ansiCodesRenderer || escapeHTML - const highlightCode = opts.codeHighlighter || escapeHTML +class NbRenderer extends CallableInstance> { - const el = elementCreator - const el2 = (tag: string, classes: string[]) => (data: string) => el(tag, classes, data) + readonly el: ElementCreator + readonly renderMarkdown: NonNullable + readonly renderAnsiCodes: NonNullable + readonly highlightCode: NonNullable + readonly dataRenderers: DataRenderers + readonly dataTypesPriority: string[] - const embeddedImageEl = (format: string) => (data: string) => el('img', { - class: 'image-output', - src: `data:image/${format};base64,${data.replace(/\n/g, '')}`, - }) + /** + * Creates a Notebook renderer with the given options. The constructed object + * is "callable", i.e. you can treat it as a function. + * + * @example + * const renderer = new NbRenderer(document.createElement.bind(document)) + * console.log(renderer(notebook).outerHTML) + * + * @param {ElementCreator} elementCreator The function that will be used for + * building all HTML elements. + * @param {NbRendererOpts} opts The renderer's options. + */ + constructor (elementCreator: ElementCreator, opts: NbRendererOpts = {}) { + super() - // opts.dataRenderers is intentionally included twice; to get the user's - // provided renderers in the default dataTypesPriority before the built-in - // renderers and at the same time allow to override any built-in renderer. - const dataRenderers: DataRenderers = { - ...opts.dataRenderers, - 'image/png': embeddedImageEl('png'), - 'image/jpeg': embeddedImageEl('jpeg'), - 'image/svg+xml': el2('div', ['svg-output']), - 'text/svg+xml': (data) => dataRenderers['image/svg+xml'](data), - 'text/html': el2('div', ['html-output']), - 'text/markdown': (data) => dataRenderers['text/html'](renderMarkdown(data)), - 'text/latex': el2('div', ['latex-output']), - 'application/javascript': el2('script', []), - 'text/plain': (data) => el('pre', ['text-output'], escapeHTML(data)), - ...opts.dataRenderers, - } - const dataTypesPriority = opts.dataTypesPriority || Object.keys(dataRenderers) + this.el = elementCreator + this.renderMarkdown = opts.markdownRenderer || identity + this.renderAnsiCodes = opts.ansiCodesRenderer || escapeHTML + this.highlightCode = opts.codeHighlighter || escapeHTML - const resolveDataType = (output: DisplayData | ExecuteResult) => { - return dataTypesPriority.find(type => output.data[type] && dataRenderers[type]) + const el2 = (tag: string, classes: string[]) => (data: string) => this.el(tag, classes, data) + + const embeddedImageEl = (format: string) => (data: string) => this.el('img', { + class: 'image-output', + src: `data:image/${format};base64,${data.replace(/\n/g, '')}`, + }) + + // opts.dataRenderers is intentionally included twice; to get the user's + // provided renderers in the default dataTypesPriority before the built-in + // renderers and at the same time allow to override any built-in renderer. + this.dataRenderers = { + ...opts.dataRenderers, + 'image/png': embeddedImageEl('png'), + 'image/jpeg': embeddedImageEl('jpeg'), + 'image/svg+xml': el2('div', ['svg-output']), + 'text/svg+xml': (data) => this.dataRenderers['image/svg+xml'].call(this, data), + 'text/html': el2('div', ['html-output']), + 'text/markdown': (data) => this.el('div', ['html-output'], this.renderMarkdown(data)), + 'text/latex': el2('div', ['latex-output']), + 'application/javascript': el2('script', []), + 'text/plain': (data) => this.el('pre', ['text-output'], escapeHTML(data)), + ...opts.dataRenderers, + } + this.dataTypesPriority = opts.dataTypesPriority || Object.keys(this.dataRenderers) } - const r = callableObject('Notebook', { - Notebook: (notebook: Notebook): TElement => { - const children = notebook.cells.map(cell => r.Cell(cell, notebook)) - return el('div', ['notebook'], children) - }, + /** + * Renders the given Jupyter *notebook*. + */ + __call__ (notebook: Notebook): TElement { + return this.Notebook(notebook) + } + /** + * Renders the given Jupyter *notebook*. + */ + Notebook (notebook: Notebook): TElement { + const children = notebook.cells.map(cell => this.Cell(cell, notebook)) + return this.el('div', ['notebook'], children) + } - Cell: (cell: Cell, notebook: Notebook): TElement => { - switch (cell.cell_type) { - case CellType.Code: return r.CodeCell(cell, notebook) - case CellType.Markdown: return r.MarkdownCell(cell, notebook) - case CellType.Raw: return r.RawCell(cell, notebook) - default: return el('div', [], '') + Cell (cell: Cell, notebook: Notebook): TElement { + switch (cell.cell_type) { + case CellType.Code: return this.CodeCell(cell, notebook) + case CellType.Markdown: return this.MarkdownCell(cell, notebook) + case CellType.Raw: return this.RawCell(cell, notebook) + default: return this.el('div', [], '') + } + } + + MarkdownCell (cell: MarkdownCell, _notebook: Notebook): TElement { + return this.el('div', ['cell', 'markdown-cell'], this.renderMarkdown(joinText(cell.source))) + } + + RawCell (cell: RawCell, _notebook: Notebook): TElement { + return this.el('div', ['cell', 'raw-cell'], joinText(cell.source)) + } + + CodeCell (cell: CodeCell, notebook: Notebook): TElement { + const source = cell.source.length > 0 + ? this.Source(cell, notebook) + : this.el('div') + + const outputs = coalesceStreams(cell.outputs || []) + .map(output => this.Output(output, cell)) + + return this.el('div', ['cell', 'code-cell'], [source, ...outputs]) + } + + Source (cell: CodeCell, notebook: Notebook): TElement { + const lang = notebookLanguage(notebook) + const html = this.highlightCode(joinText(cell.source), lang) + + const codeEl = this.el('code', { 'class': `lang-${lang}`, 'data-language': lang }, html) + const preEl = this.el('pre', [], [codeEl]) + + // Class "input" is for backward compatibility with notebook.js. + const attrs = { ...executionCountAttrs(cell), class: 'source input' } + + return this.el('div', attrs, [preEl]) + } + + Output (output: Output, cell: CodeCell): TElement { + const innerEl = (() => { + switch (output.output_type) { + case OutputType.DisplayData: return this.DisplayData(output) + case OutputType.ExecuteResult: return this.ExecuteResult(output) + case OutputType.Stream: return this.Stream(output) + case OutputType.Error: return this.Error(output) + default: return this.el('div', [], '') } - }, + })() + const attrs = { ...executionCountAttrs(cell), class: 'output' } - MarkdownCell: (cell: MarkdownCell, _notebook: Notebook): TElement => { - return el('div', ['cell', 'markdown-cell'], renderMarkdown(joinText(cell.source))) - }, + return this.el('div', attrs, [innerEl]) + } - RawCell: (cell: RawCell, _notebook: Notebook): TElement => { - return el('div', ['cell', 'raw-cell'], joinText(cell.source)) - }, + DisplayData (output: DisplayData): TElement { + const type = this.resolveDataType(output) + if (type) { + return this.renderData(type, joinText(output.data[type])) + } + return this.el('div', ['empty-output']) + } - CodeCell: (cell: CodeCell, notebook: Notebook): TElement => { - const source = cell.source.length > 0 - ? r.Source(cell, notebook) - : el('div') + ExecuteResult (output: ExecuteResult): TElement { + const type = this.resolveDataType(output) + if (type) { + return this.renderData(type, joinText(output.data[type])) + } + return this.el('div', ['empty-output']) + } - const outputs = coalesceStreams(cell.outputs || []) - .map(output => r.Output(output, cell)) + Error (error: ErrorOutput): TElement { + const html = this.renderAnsiCodes(error.traceback.join('\n')) + // Class "pyerr" is for backward compatibility with notebook.js. + return this.el('pre', ['error', 'pyerr'], html) + } - return el('div', ['cell', 'code-cell'], [source, ...outputs]) - }, + Stream (stream: StreamOutput): TElement { + const html = this.renderAnsiCodes(joinText(stream.text)) + return this.el('pre', [stream.name], html) + } - Source: (cell: CodeCell, notebook: Notebook): TElement => { - const lang = notebookLanguage(notebook) - const html = highlightCode(joinText(cell.source), lang) + renderData (mimeType: string, data: string): TElement { + const render = this.dataRenderers[mimeType] + if (!render) { + throw RangeError(`missing renderer for MIME type: ${mimeType}`) + } + return render.call(this, data) + } - const codeEl = el('code', { 'class': `lang-${lang}`, 'data-language': lang }, html) - const preEl = el('pre', [], [codeEl]) - - // Class "input" is for backward compatibility with notebook.js. - const attrs = { ...executionCountAttrs(cell), class: 'source input' } - - return el('div', attrs, [preEl]) - }, - - Output: (output: Output, cell: CodeCell): TElement => { - const innerEl = (() => { - switch (output.output_type) { - case OutputType.DisplayData: return r.DisplayData(output) - case OutputType.ExecuteResult: return r.ExecuteResult(output) - case OutputType.Stream: return r.Stream(output) - case OutputType.Error: return r.Error(output) - default: return el('div', [], '') - } - })() - const attrs = { ...executionCountAttrs(cell), class: 'output' } - - return el('div', attrs, [innerEl]) - }, - - DisplayData: (output: DisplayData): TElement => { - const type = resolveDataType(output) - if (type) { - return dataRenderers[type](joinText(output.data[type])) - } - return el('div', ['empty-output']) - }, - - ExecuteResult: (output: ExecuteResult): TElement => { - const type = resolveDataType(output) - if (type) { - return dataRenderers[type](joinText(output.data[type])) - } - return el('div', ['empty-output']) - }, - - Error: (error: ErrorOutput): TElement => { - const html = renderAnsiCodes(error.traceback.join('\n')) - // Class "pyerr" is for backward compatibility with notebook.js. - return el('pre', ['error', 'pyerr'], html) - }, - - Stream: (stream: StreamOutput): TElement => { - const html = renderAnsiCodes(joinText(stream.text)) - return el('pre', [stream.name], html) - }, - }) - return r + resolveDataType (output: DisplayData | ExecuteResult): string | undefined { + return this.dataTypesPriority.find(type => output.data[type]) + } } -export default buildRenderer - -// XXX: An ugly hack to infer return type of generic function that returns -// generalized object. -abstract class DummyClass { - renderer = buildRenderer(this.elementCreator()) - abstract elementCreator (): ElementCreator -} -export type NbRenderer = DummyClass['renderer'] +export default NbRenderer diff --git a/packages/ipynb2html-core/test/internal/utils.test.ts b/packages/ipynb2html-core/test/internal/utils.test.ts index 286b812..caba1b5 100644 --- a/packages/ipynb2html-core/test/internal/utils.test.ts +++ b/packages/ipynb2html-core/test/internal/utils.test.ts @@ -1,31 +1,64 @@ -import { callableObject, escapeHTML, identity } from '@/internal/utils' +import { CallableInstance, escapeHTML, identity } from '@/internal/utils' -describe('.callableObject', () => { +describe('CallableInstance', () => { - describe('returned value', () => { - const template = { - str: 'allons-y!', - func1: jest.fn().mockReturnValue(1), - func2: jest.fn().mockReturnValue(2), + class FixtureCallable extends CallableInstance { + readonly salutation: string + + constructor (salutation: string) { + super() + this.salutation = salutation } - const subject = callableObject('func1', template) - it('is a function that calls the specified template function', () => { - expect( subject ).toBeInstanceOf(Function) - expect( subject('a', 'b') ).toBe(1) - expect( template.func1 ).toBeCalledWith('a', 'b') + __call__ (name: string) { + return this.salute(name) + } + + salute (name: string) { + return `${this.salutation}, ${name}!` + } + } + + describe('subclass', () => { + it('can be instantiated using new', () => { + expect(() => new FixtureCallable('Hello') ).not.toThrow() + }) + }) + + describe('subclass instance', () => { + let instance: FixtureCallable + + beforeEach(() => { + instance = new FixtureCallable('Hello') }) - it('is not the same function as the specified template function', () => { - expect( subject ).not.toBe(template.func1) + it('is an instance of its class', () => { + expect( instance ).toBeInstanceOf(FixtureCallable) + expect( instance.salutation ).toBe('Hello') + expect( instance.salute('world') ).toBe('Hello, world!') }) - it('has all enumerable properties of the given template', () => { - expect( subject ) - .toHaveProperty('str', template.str) - .toHaveProperty('func1', template.func1) - .toHaveProperty('func2', template.func2) + it('is an instance of Function', () => { + expect( instance ).toBeInstanceOf(Function) + }) + + it('is a typeof function', () => { + expect( typeof instance ).toBe('function') + }) + + it('has function property "name" that equals the class name', () => { + expect( instance.name ).toBe('FixtureCallable') + }) + + it('has function property "length" that equals number of arguments of the __call__ method', () => { + expect( instance.length ).toBe(1) + }) + + it('can be called, redirects to the method __call__', () => { + expect( instance('world') ).toBe('Hello, world!') + expect( instance.apply(null, ['world']) ).toBe('Hello, world!') // eslint-disable-line no-useless-call + expect( instance.call(null, 'world') ).toBe('Hello, world!') // eslint-disable-line no-useless-call }) }) }) diff --git a/packages/ipynb2html-core/test/renderer.test.tsx b/packages/ipynb2html-core/test/renderer.test.tsx index b7e213b..37209b1 100644 --- a/packages/ipynb2html-core/test/renderer.test.tsx +++ b/packages/ipynb2html-core/test/renderer.test.tsx @@ -1,10 +1,12 @@ +/* eslint-disable @typescript-eslint/unbound-method */ + import '~/test/setup' // setupFilesAfterEnv doesn't work here import arrify from 'arrify' import { Document, HTMLElement } from 'nodom' import buildElementCreator from '@/elementCreator' -import buildRenderer, { NbRenderer, NbRendererOpts } from '@/renderer' +import NbRenderer, { NbRendererOpts } from '@/renderer' import { DisplayData, MimeBundle, MultilineString, Notebook } from '@/nbformat' // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -37,7 +39,7 @@ describe('built renderer', () => { beforeEach(() => { - renderer = buildRenderer(elementCreator, rendererOpts) + renderer = new NbRenderer(elementCreator, rendererOpts) }) @@ -474,7 +476,7 @@ describe('built renderer', () => { const dataRenderer = rendererMock('DisplayData') beforeEach(() => { - renderer = buildRenderer(elementCreator, { + renderer = new NbRenderer(elementCreator, { ...rendererOpts, dataRenderers: { 'text/plain': dataRenderer }, }) diff --git a/packages/ipynb2html/src/index.ts b/packages/ipynb2html/src/index.ts index 708ba09..166227f 100644 --- a/packages/ipynb2html/src/index.ts +++ b/packages/ipynb2html/src/index.ts @@ -6,7 +6,6 @@ import marked, { MarkedOptions } from 'marked' import { createElementCreator, createHtmlRenderer, - createNbRenderer, MinimalElement, NbRenderer, NbRendererOpts as BaseOptions, @@ -127,7 +126,7 @@ export function createRenderer ( dataRenderers['text/html'] = createHtmlRenderer({ elementCreator, mathRenderer }) } - return createNbRenderer(elementCreator, { + return new NbRenderer(elementCreator, { ansiCodesRenderer, codeHighlighter, dataRenderers, From 712c0dbb0c21e8e16bc4ef4b7e1d5ed9df4f1a30 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Wed, 22 Jan 2020 16:56:38 +0100 Subject: [PATCH 165/266] Add prefix "render" to NbRenderer's methods --- packages/ipynb2html-core/src/renderer.ts | 44 +++--- .../ipynb2html-core/test/renderer.test.tsx | 131 +++++++++--------- 2 files changed, 88 insertions(+), 87 deletions(-) diff --git a/packages/ipynb2html-core/src/renderer.ts b/packages/ipynb2html-core/src/renderer.ts index fa795aa..1fec24a 100644 --- a/packages/ipynb2html-core/src/renderer.ts +++ b/packages/ipynb2html-core/src/renderer.ts @@ -145,45 +145,45 @@ class NbRenderer extends CallableInstance> { * Renders the given Jupyter *notebook*. */ __call__ (notebook: Notebook): TElement { - return this.Notebook(notebook) + return this.render(notebook) } /** * Renders the given Jupyter *notebook*. */ - Notebook (notebook: Notebook): TElement { - const children = notebook.cells.map(cell => this.Cell(cell, notebook)) + render (notebook: Notebook): TElement { + const children = notebook.cells.map(cell => this.renderCell(cell, notebook)) return this.el('div', ['notebook'], children) } - Cell (cell: Cell, notebook: Notebook): TElement { + renderCell (cell: Cell, notebook: Notebook): TElement { switch (cell.cell_type) { - case CellType.Code: return this.CodeCell(cell, notebook) - case CellType.Markdown: return this.MarkdownCell(cell, notebook) - case CellType.Raw: return this.RawCell(cell, notebook) + case CellType.Code: return this.renderCodeCell(cell, notebook) + case CellType.Markdown: return this.renderMarkdownCell(cell, notebook) + case CellType.Raw: return this.renderRawCell(cell, notebook) default: return this.el('div', [], '') } } - MarkdownCell (cell: MarkdownCell, _notebook: Notebook): TElement { + renderMarkdownCell (cell: MarkdownCell, _notebook: Notebook): TElement { return this.el('div', ['cell', 'markdown-cell'], this.renderMarkdown(joinText(cell.source))) } - RawCell (cell: RawCell, _notebook: Notebook): TElement { + renderRawCell (cell: RawCell, _notebook: Notebook): TElement { return this.el('div', ['cell', 'raw-cell'], joinText(cell.source)) } - CodeCell (cell: CodeCell, notebook: Notebook): TElement { + renderCodeCell (cell: CodeCell, notebook: Notebook): TElement { const source = cell.source.length > 0 - ? this.Source(cell, notebook) + ? this.renderSource(cell, notebook) : this.el('div') const outputs = coalesceStreams(cell.outputs || []) - .map(output => this.Output(output, cell)) + .map(output => this.renderOutput(output, cell)) return this.el('div', ['cell', 'code-cell'], [source, ...outputs]) } - Source (cell: CodeCell, notebook: Notebook): TElement { + renderSource (cell: CodeCell, notebook: Notebook): TElement { const lang = notebookLanguage(notebook) const html = this.highlightCode(joinText(cell.source), lang) @@ -196,13 +196,13 @@ class NbRenderer extends CallableInstance> { return this.el('div', attrs, [preEl]) } - Output (output: Output, cell: CodeCell): TElement { + renderOutput (output: Output, cell: CodeCell): TElement { const innerEl = (() => { switch (output.output_type) { - case OutputType.DisplayData: return this.DisplayData(output) - case OutputType.ExecuteResult: return this.ExecuteResult(output) - case OutputType.Stream: return this.Stream(output) - case OutputType.Error: return this.Error(output) + case OutputType.DisplayData: return this.renderDisplayData(output) + case OutputType.ExecuteResult: return this.renderExecuteResult(output) + case OutputType.Stream: return this.renderStream(output) + case OutputType.Error: return this.renderError(output) default: return this.el('div', [], '') } })() @@ -211,7 +211,7 @@ class NbRenderer extends CallableInstance> { return this.el('div', attrs, [innerEl]) } - DisplayData (output: DisplayData): TElement { + renderDisplayData (output: DisplayData): TElement { const type = this.resolveDataType(output) if (type) { return this.renderData(type, joinText(output.data[type])) @@ -219,7 +219,7 @@ class NbRenderer extends CallableInstance> { return this.el('div', ['empty-output']) } - ExecuteResult (output: ExecuteResult): TElement { + renderExecuteResult (output: ExecuteResult): TElement { const type = this.resolveDataType(output) if (type) { return this.renderData(type, joinText(output.data[type])) @@ -227,13 +227,13 @@ class NbRenderer extends CallableInstance> { return this.el('div', ['empty-output']) } - Error (error: ErrorOutput): TElement { + renderError (error: ErrorOutput): TElement { const html = this.renderAnsiCodes(error.traceback.join('\n')) // Class "pyerr" is for backward compatibility with notebook.js. return this.el('pre', ['error', 'pyerr'], html) } - Stream (stream: StreamOutput): TElement { + renderStream (stream: StreamOutput): TElement { const html = this.renderAnsiCodes(joinText(stream.text)) return this.el('pre', [stream.name], html) } diff --git a/packages/ipynb2html-core/test/renderer.test.tsx b/packages/ipynb2html-core/test/renderer.test.tsx index 37209b1..3618204 100644 --- a/packages/ipynb2html-core/test/renderer.test.tsx +++ b/packages/ipynb2html-core/test/renderer.test.tsx @@ -12,10 +12,9 @@ import { DisplayData, MimeBundle, MultilineString, Notebook } from '@/nbformat' // eslint-disable-next-line @typescript-eslint/no-unused-vars import { Anything } from '~/test/support/matchers/toMatchElement' import { mockLastResult, mockResults } from '~/test/support/helpers' -import * as _fixtures from './support/fixtures/notebook' +import * as fixtures from './support/fixtures/notebook' const document = new Document() -const fixtures = _fixtures // workaround to allow indexed access describe('built renderer', () => { @@ -43,41 +42,42 @@ describe('built renderer', () => { }) - describe('.Notebook', () => { + describe('.render', () => { beforeEach(() => { - renderer.Cell = rendererMock('Cell') + renderer.renderCell = rendererMock('Cell') }) it('returns div.notebook', () => { - expect( renderer.Notebook({ ...notebook, cells: [] }) ).toHtmlEqual( + expect( renderer.render({ ...notebook, cells: [] }) ).toHtmlEqual(
) }) - it('returns element with $cells converted using .Cell() as the children', () => { - const result = renderer.Notebook(notebook) + it('returns element with $cells converted using .renderCell() as the children', () => { + const result = renderer.render(notebook) notebook.cells.forEach((cell, idx) => { - expect( renderer.Cell ).toHaveBeenNthCalledWith(idx + 1, cell, notebook) + expect( renderer.renderCell ).toHaveBeenNthCalledWith(idx + 1, cell, notebook) }) - expect( result.children ).toHtmlEqual(mockResults(renderer.Cell)) + expect( result.children ).toHtmlEqual(mockResults(renderer.renderCell)) }) }) - describe('.Cell', () => { + describe('.renderCell', () => { describe.each([ - 'CodeCell', 'MarkdownCell', 'RawCell', - ] as const)('with %s', (type) => { - const cell = fixtures[type] + 'renderCodeCell', 'renderMarkdownCell', 'renderRawCell', + ] as const)('with %s', (funcName) => { + const type = funcName.replace('render', '') + const cell = (fixtures as any)[type] - it(`returns result of calling .${type}() with the given cell`, () => { + it(`returns result of calling .${funcName}() with the given cell`, () => { const expected = stubElement(type) - renderer[type] = jest.fn(() => expected) + const rendererFunc = (renderer as any)[funcName] = jest.fn(() => expected) - expect( renderer.Cell(cell, notebook) ).toBe(expected) - expect( renderer[type] ).toBeCalledWith(cell, notebook) + expect( renderer.renderCell(cell, notebook) ).toBe(expected) + expect( rendererFunc ).toBeCalledWith(cell, notebook) }) }) @@ -88,7 +88,7 @@ describe('built renderer', () => { } as any it('returns div with comment "Unsupported cell type"', () => { - expect( renderer.Cell(cell, notebook) ).toHtmlEqual( + expect( renderer.renderCell(cell, notebook) ).toHtmlEqual(
{{__html: '' }}
@@ -98,12 +98,12 @@ describe('built renderer', () => { }) - describe('.MarkdownCell', () => { + describe('.renderMarkdownCell', () => { eachMultilineVariant(fixtures.MarkdownCell, 'source', (cell) => { const source = join(cell.source) it('returns div.cell.markdown-cell with the $source converted using markdownRenderer() as content', () => { - expect( renderer.MarkdownCell(cell, notebook) ).toHtmlEqual( + expect( renderer.renderMarkdownCell(cell, notebook) ).toHtmlEqual(
{{__html: mockLastResult(markdownRenderer) }}
@@ -114,11 +114,11 @@ describe('built renderer', () => { }) - describe('.RawCell', () => { + describe('.renderRawCell', () => { eachMultilineVariant(fixtures.RawCell, 'source', (cell) => { it('returns div.cell.raw-cell with the $source as content', () => { - expect( renderer.RawCell(cell, notebook) ).toHtmlEqual( + expect( renderer.renderRawCell(cell, notebook) ).toHtmlEqual(
{{__html: join(cell.source) }}
@@ -128,15 +128,15 @@ describe('built renderer', () => { }) - describe('.CodeCell', () => { + describe('.renderCodeCell', () => { const cell = fixtures.CodeCell let result: HTMLElement beforeEach(() => { - renderer.Source = rendererMock('Source') - renderer.Output = rendererMock('Output') + renderer.renderSource = rendererMock('Source') + renderer.renderOutput = rendererMock('Output') - result = renderer.CodeCell(cell, notebook) + result = renderer.renderCodeCell(cell, notebook) }) it('returns div.cell.code-cell', () => { @@ -147,15 +147,15 @@ describe('built renderer', () => { describe('with non-empty $source', () => { - it('returns element with $source rendered using .Source() as children[0]', () => { - expect( renderer.Source ).toBeCalledWith(cell, notebook) - expect( result.children[0] ).toHtmlEqual(mockLastResult(renderer.Source)) + it('returns element with $source rendered using .renderSource() as children[0]', () => { + expect( renderer.renderSource ).toBeCalledWith(cell, notebook) + expect( result.children[0] ).toHtmlEqual(mockLastResult(renderer.renderSource)) }) }) describe('with empty $source', () => { beforeEach(() => { - result = renderer.CodeCell({ ...cell, source: [] }, notebook) + result = renderer.renderCodeCell({ ...cell, source: [] }, notebook) }) it('returns element with empty div as children[0]', () => { @@ -165,22 +165,22 @@ describe('built renderer', () => { }) }) - it('returns element with $outputs rendered using .Output() as children[1+]', () => { + it('returns element with $outputs rendered using .renderOutput() as children[1+]', () => { cell.outputs.forEach((output, idx) => { - expect( renderer.Output ).toHaveBeenNthCalledWith(idx + 1, output, cell) + expect( renderer.renderOutput ).toHaveBeenNthCalledWith(idx + 1, output, cell) }) - expect( result.children.slice(1) ).toHtmlEqual(mockResults(renderer.Output)) + expect( result.children.slice(1) ).toHtmlEqual(mockResults(renderer.renderOutput)) }) }) - describe('.Source', () => { + describe('.renderSource', () => { const cell = fixtures.CodeCell const notebookLang = notebook.metadata.language_info!.name let result: HTMLElement beforeEach(() => { - result = renderer.Source(cell, notebook) + result = renderer.renderSource(cell, notebook) }) it('returns div > pre > code', () => { @@ -208,7 +208,7 @@ describe('built renderer', () => { const myCell = { ...cell, execution_count: 2 } it('has data-execution-count and data-prompt-number attributes', () => { - const result = renderer.Source(myCell, notebook) + const result = renderer.renderSource(myCell, notebook) expect( result.attributes ).toMatchObject({ 'data-execution-count': String(myCell.execution_count), @@ -221,7 +221,7 @@ describe('built renderer', () => { const myCell = { ...cell, execution_count: null } it('has data-execution-count and data-prompt-number attributes', () => { - const result = renderer.Source(myCell, notebook) + const result = renderer.renderSource(myCell, notebook) expect( result.attributes ) .not.toHaveProperty('data-execution-count') @@ -234,7 +234,7 @@ describe('built renderer', () => { let codeEl: HTMLElement beforeEach(() => { - codeEl = renderer.Source(cell, notebook).firstChild!.firstChild as HTMLElement + codeEl = renderer.renderSource(cell, notebook).firstChild!.firstChild as HTMLElement }) it("has class lang- where lang is the notebook's language", () => { @@ -256,7 +256,7 @@ describe('built renderer', () => { const notebookLang = 'python' it('uses the default language: python', () => { - const result = renderer.Source(cell, myNotebook) + const result = renderer.renderSource(cell, myNotebook) const codeEl = result.firstChild!.firstChild as HTMLElement expect( codeEl.getAttribute('data-language') ).toBe(notebookLang) @@ -267,19 +267,20 @@ describe('built renderer', () => { }) - describe('.Output', () => { + describe('.renderOutput', () => { const cell = { ...fixtures.CodeCell, execution_count: null } describe.each([ - 'DisplayData', 'ExecuteResult', 'Stream', 'Error', - ] as const)('with %s output', (type) => { + 'renderDisplayData', 'renderExecuteResult', 'renderStream', 'renderError', + ] as const)('with %s output', (funcName) => { - const output = fixtures[type] + const type = funcName.replace('render', '') + const output = (fixtures as any)[type] let result: HTMLElement beforeEach(() => { - renderer[type] = rendererMock(type) - result = renderer.Output(output, cell) + renderer[funcName] = rendererMock(type) + result = renderer.renderOutput(output, cell) }) it('returns div.output', () => { @@ -288,16 +289,16 @@ describe('built renderer', () => { ) }) - it(`returns element with the output rendered using .${type}() as the only child`, () => { - expect( renderer[type] ).toBeCalledWith(output) - expect( result.children ).toHtmlEqual([mockLastResult(renderer[type])]) + it(`returns element with the output rendered using .${funcName}() as the only child`, () => { + expect( renderer[funcName] ).toBeCalledWith(output) + expect( result.children ).toHtmlEqual([mockLastResult(renderer[funcName])]) }) describe('when the cell has non-null execution_count', () => { const cell = { ...fixtures.CodeCell, execution_count: 2 } it('returns element with attributes data-execution-count and data-prompt-number', () => { - const result = renderer.Output(output, cell) + const result = renderer.renderOutput(output, cell) expect( result.attributes ).toMatchObject({ 'data-execution-count': String(cell.execution_count), @@ -319,7 +320,7 @@ describe('built renderer', () => { } it('returns div with comment "Unsupported output type"', () => { - expect( renderer.Output(output, cell) ).toHtmlEqual( + expect( renderer.renderOutput(output, cell) ).toHtmlEqual(
{{__html: '' }} @@ -331,7 +332,7 @@ describe('built renderer', () => { }) - describe('.DisplayData', () => { + describe('.renderDisplayData', () => { function displayDataWith (data: MimeBundle): DisplayData { return { ...fixtures.DisplayData, data } @@ -360,7 +361,7 @@ describe('built renderer', () => { const displayData = displayDataWith({ 'text/non-sense': 'whaat' }) it('returns div.empty-output', () => { - expect( renderer.DisplayData(displayData) ).toHtmlEqual( + expect( renderer.renderDisplayData(displayData) ).toHtmlEqual(
) }) @@ -372,7 +373,7 @@ describe('built renderer', () => { withMimeData(mimeType, ['aW1hZ2Ug\n', 'ZGF0YQ=='], (output) => { it('returns img.image-output with the data in the src attribute', () => { - expect( renderer.DisplayData(output) ).toHtmlEqual( + expect( renderer.renderDisplayData(output) ).toHtmlEqual( ) }) @@ -390,7 +391,7 @@ describe('built renderer', () => { withMimeData(mimeType, 'data', (output, data) => { it(`returns div${classes.map(x => `.${x}`)} with the data as content`, () => { - expect( renderer.DisplayData(output) ).toHtmlEqual( + expect( renderer.renderDisplayData(output) ).toHtmlEqual(
{{__html: join(data) }}
@@ -402,7 +403,7 @@ describe('built renderer', () => { withMimeData('text/markdown', ['Lorem\n', 'ipsum'], (output, data) => { it('returns div.html-output with the data converted using markdownRenderer() as content', () => { - expect( renderer.DisplayData(output) ).toHtmlEqual( + expect( renderer.renderDisplayData(output) ).toHtmlEqual(
{{__html: mockLastResult(markdownRenderer) }}
@@ -414,7 +415,7 @@ describe('built renderer', () => { withMimeData('text/plain', '>_<', (output) => { it('returns pre.text-output with html-escaped data', () => { - expect( renderer.DisplayData(output) ).toHtmlEqual( + expect( renderer.renderDisplayData(output) ).toHtmlEqual(
{ '>_<' }
) }) @@ -423,7 +424,7 @@ describe('built renderer', () => { withMimeData('application/javascript', 'alert("Hello &!")', (output, data) => { it('returns script with the data', () => { - expect( renderer.DisplayData(output) ).toHtmlEqual( + expect( renderer.renderDisplayData(output) ).toHtmlEqual( ) }) @@ -435,7 +436,7 @@ describe('built renderer', () => { withMimeData('text/custom', 'Lorem ipsum', (output, data) => { it('renders the data using the associated external renderer', () => { - expect( renderer.DisplayData(output) ).toHtmlEqual( + expect( renderer.renderDisplayData(output) ).toHtmlEqual( mockLastResult(dataRenderers['text/custom']) ) expect( dataRenderers['text/custom'] ).toBeCalledWith(join(data)) @@ -452,7 +453,7 @@ describe('built renderer', () => { const output = displayDataWith(mimeBundle) it('renders the data of the MIME type with a higher priority', () => { - expect( renderer.DisplayData(output) ).toHtmlEqual( + expect( renderer.renderDisplayData(output) ).toHtmlEqual(
{{__html: mimeBundle['text/html'] }}
@@ -466,7 +467,7 @@ describe('built renderer', () => { } const output = displayDataWith(mimeBundle) - expect( renderer.DisplayData(output) ).toHtmlEqual( + expect( renderer.renderDisplayData(output) ).toHtmlEqual( mockLastResult(dataRenderers['text/custom']) ) }) @@ -486,19 +487,19 @@ describe('built renderer', () => { const data = 'allons-y!' const output = displayDataWith({ 'text/plain': [data] }) - expect( renderer.DisplayData(output) ).toBe(mockLastResult(dataRenderer)) + expect( renderer.renderDisplayData(output) ).toBe(mockLastResult(dataRenderer)) expect( dataRenderer ).toBeCalledWith(data) }) }) }) - describe('.Error', () => { + describe('.renderError', () => { const error = fixtures.Error const traceback = error.traceback.join('\n') it('returns pre.error.pyerr with inner $traceback converted using ansiCodesRenderer', () => { - expect( renderer.Error(error) ).toHtmlEqual( + expect( renderer.renderError(error) ).toHtmlEqual(
           {{__html: mockLastResult(ansiCodesRenderer) }}
         
@@ -508,12 +509,12 @@ describe('built renderer', () => { }) - describe('.Stream', () => { + describe('.renderStream', () => { eachMultilineVariant(fixtures.Stream, 'text', (stream) => { const text = join(stream.text) it('returns pre.$name with inner $text converted using ansiCodesRenderer', () => { - expect( renderer.Stream(stream) ).toHtmlEqual( + expect( renderer.renderStream(stream) ).toHtmlEqual(
             {{__html: mockLastResult(ansiCodesRenderer) }}
           
From fb539853da4cc709a7672cebd8ca584cf806068a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Dec 2019 00:41:36 +0000 Subject: [PATCH 166/266] Bump handlebars from 4.2.0 to 4.5.3 Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.2.0 to 4.5.3. - [Release notes](https://github.com/wycats/handlebars.js/releases) - [Changelog](https://github.com/wycats/handlebars.js/blob/master/release-notes.md) - [Commits](https://github.com/wycats/handlebars.js/compare/v4.2.0...v4.5.3) Signed-off-by: dependabot[bot] --- yarn.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7fd4154..7779368 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1756,12 +1756,12 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.19.0, commander@~2.20.0: +commander@^2.19.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== -commander@^2.20.0: +commander@^2.20.0, commander@~2.20.3: 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== @@ -2791,9 +2791,9 @@ growly@^1.3.0: integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= handlebars@^4.1.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.2.0.tgz#57ce8d2175b9bbb3d8b3cf3e4217b1aec8ddcb2e" - integrity sha512-Kb4xn5Qh1cxAKvQnzNWZ512DhABzyFNmsaJf3OAkWNa4NkaqWcNI8Tao8Tasi0/F4JD9oyG0YxuFyvyR57d+Gw== + version "4.5.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" + integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== dependencies: neo-async "^2.6.0" optimist "^0.6.1" @@ -6050,11 +6050,11 @@ typescript@~3.6.4: integrity sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg== uglify-js@^3.1.4: - version "3.6.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" - integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== + version "3.7.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.3.tgz#f918fce9182f466d5140f24bb0ff35c2d32dcc6a" + integrity sha512-7tINm46/3puUA4hCkKYo4Xdts+JDaVC9ZPRcG8Xw9R4nhO/gZgUM3TENq8IF4Vatk8qCig4MzP/c8G4u2BkVQg== dependencies: - commander "~2.20.0" + commander "~2.20.3" source-map "~0.6.1" unicode-canonical-property-names-ecmascript@^1.0.4: From 1ccabd4d078ebf77b4eadfc852f62929e02cb9c0 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 23 Jan 2020 12:06:21 +0100 Subject: [PATCH 167/266] Add node_modules/ to .eslintignore I thought that it's by default, but apparently it's not. Maybe only the root node_modules/ is ignored by default? This change speeds up eslint by factor 2. --- .eslintignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintignore b/.eslintignore index d9277b2..006e9d9 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,4 @@ +node_modules/ /.*cache/ /.tmp/ /coverage/ From 049703e14c5bba082665dbd8ca6a61cdc642c1ec Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 23 Jan 2020 11:11:20 +0100 Subject: [PATCH 168/266] Bump highlightjs, katex and source-map-support --- package.json | 2 +- packages/ipynb2html-cli/package.json | 4 +-- packages/ipynb2html/package.json | 4 +-- yarn.lock | 42 +++++++++++++++++----------- 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index be398b0..f744cc3 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "@types/dedent": "^0.7.0", "@types/highlightjs": "^9.12.0", "@types/jest": "^24.0.18", - "@types/katex": "^0.10.2", + "@types/katex": "^0.11.0", "@types/marked": "^0.6.5", "@types/node": "^10.13.0", "@typescript-eslint/eslint-plugin": "^2.4.0", diff --git a/packages/ipynb2html-cli/package.json b/packages/ipynb2html-cli/package.json index 8951076..57dcbd0 100644 --- a/packages/ipynb2html-cli/package.json +++ b/packages/ipynb2html-cli/package.json @@ -45,10 +45,10 @@ "minimist": "^1.2.0", "minimist-options": "^4.0.2", "nodom": "^2.3.0", - "source-map-support": "^0.5.13" + "source-map-support": "^0.5.16" }, "devDependencies": { "@types/minimist": "^1.2.0", - "@types/source-map-support": "^0.5.0" + "@types/source-map-support": "^0.5.1" } } diff --git a/packages/ipynb2html/package.json b/packages/ipynb2html/package.json index 384f25c..919c570 100644 --- a/packages/ipynb2html/package.json +++ b/packages/ipynb2html/package.json @@ -44,9 +44,9 @@ }, "dependencies": { "anser": "^1.4.9", - "highlightjs": "^9.12.0", + "highlightjs": "^9.16.2", "ipynb2html-core": "0.1.0-beta.8", - "katex": "^0.11.0", + "katex": "^0.11.1", "marked": "^0.7.0" }, "peerDependencies": { diff --git a/yarn.lock b/yarn.lock index 7779368..139ffd1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -971,10 +971,10 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/katex@^0.10.2": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@types/katex/-/katex-0.10.2.tgz#322afa83aba5cca4edcea014ebf0be997135dbd9" - integrity sha512-QYTNuhuDU22gouVoL5kLmBTguu2rPvtp7wL5U5fTFsQkM1ojfUgxFPMFrqOSUofrdWwnZEmblcobdlLXj1lVOw== +"@types/katex@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@types/katex/-/katex-0.11.0.tgz#b16c54ee670925ffef0616beae9e90c557e17334" + integrity sha512-27BfE8zASRLYfSBNMk5/+KIjr2CBBrH0i5lhsO04fca4TGirIIMay73v3zNkzqmsaeIa/Mi5kejWDcxPLAmkvA== "@types/marked@^0.6.5": version "0.6.5" @@ -1003,10 +1003,10 @@ dependencies: "@types/node" "*" -"@types/source-map-support@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@types/source-map-support/-/source-map-support-0.5.0.tgz#40f47e68bc0bdf54d19dddad4550f521cdb9968c" - integrity sha512-OrnAz5K5dXDgMdeRRoXIjDAvkodQ9ESvVJCyzrhzUJKmCkXgmYx/KLUBcVFe5eS4FiohfcY7YPxsdkmSwJz9wA== +"@types/source-map-support@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@types/source-map-support/-/source-map-support-0.5.1.tgz#b13e4de5bf2e5858e0dfe33fac90556b0f652dc3" + integrity sha512-VDqnZe9D2zR19qbeRvwYyHSp7AtUtCkTaRVFQ8wzwH9TXw9kKKq/vBhfEnFEXVupO2M0lBMA9mr/XyQ6gEkUOA== dependencies: "@types/node" "*" @@ -2881,10 +2881,10 @@ has@^1.0.1, has@^1.0.3: dependencies: function-bind "^1.1.1" -highlightjs@^9.12.0: - version "9.12.0" - resolved "https://registry.yarnpkg.com/highlightjs/-/highlightjs-9.12.0.tgz#9b84eb42a7aa8488eb69ac79fec44cf495bf72a1" - integrity sha512-eAhWMtDZaOZIQdxIP4UEB1vNp/CVXQPdMSihTSuaExhFIRC0BVpXbtP3mTP1hDoGOyh7nbB3cuC3sOPhG5wGDA== +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.4" @@ -3796,10 +3796,10 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -katex@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/katex/-/katex-0.11.0.tgz#9a870f37dd9a5c90446277754bfc98f905c04bbc" - integrity sha512-RQsU3HSMjLW9AdPpi2zaBwM123goCbUcUbBJfmjcAdA982RgtEUNMmrf+3y8anGjgJLantcNLa/VSK73xztQBg== +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" @@ -5467,7 +5467,15 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.13, source-map-support@^0.5.6, source-map-support@~0.5.12: +source-map-support@^0.5.16: + version "0.5.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.6, source-map-support@~0.5.12: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== From 9e8c3752b0616ebe2f5feea4ffa402b9488ae07e Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 23 Jan 2020 11:59:50 +0100 Subject: [PATCH 169/266] Fix readNotebookTitle to be compatible with marked 0.8.0 --- packages/ipynb2html/src/readNotebookTitle.ts | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/packages/ipynb2html/src/readNotebookTitle.ts b/packages/ipynb2html/src/readNotebookTitle.ts index f4d5046..fa5aad1 100644 --- a/packages/ipynb2html/src/readNotebookTitle.ts +++ b/packages/ipynb2html/src/readNotebookTitle.ts @@ -3,16 +3,14 @@ import marked from 'marked' import { Notebook } from 'ipynb2html-core' -class EmptyRenderer extends marked.Renderer { +class EmptyRenderer extends marked.Renderer {} - constructor (options?: marked.MarkedOptions) { - super(options) - - for (const prop in this) { - if (this[prop] instanceof Function) { - (this as any)[prop] = () => '' - } - } +// Override all the EmptyRenderer's methods inherited from marked.Renderer to +// always return an empty string. +const RendererProto: any = marked.Renderer.prototype +for (const prop of Object.getOwnPropertyNames(RendererProto)) { + if (prop !== 'constructor' && typeof RendererProto[prop] === 'function') { + ;(EmptyRenderer.prototype as any)[prop] = () => '' } } From 1b6d3b2524d1af019c3e9ce00018623fa9b4ba71 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 23 Jan 2020 12:01:42 +0100 Subject: [PATCH 170/266] Bump marked from 0.7.0 to 0.8.0 --- package.json | 2 +- packages/ipynb2html/package.json | 2 +- yarn.lock | 16 ++++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index f744cc3..af1a124 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "@types/highlightjs": "^9.12.0", "@types/jest": "^24.0.18", "@types/katex": "^0.11.0", - "@types/marked": "^0.6.5", + "@types/marked": "^0.7.2", "@types/node": "^10.13.0", "@typescript-eslint/eslint-plugin": "^2.4.0", "@typescript-eslint/parser": "^2.4.0", diff --git a/packages/ipynb2html/package.json b/packages/ipynb2html/package.json index 919c570..07d9715 100644 --- a/packages/ipynb2html/package.json +++ b/packages/ipynb2html/package.json @@ -47,7 +47,7 @@ "highlightjs": "^9.16.2", "ipynb2html-core": "0.1.0-beta.8", "katex": "^0.11.1", - "marked": "^0.7.0" + "marked": "^0.8.0" }, "peerDependencies": { "nodom": "^2.3.0" diff --git a/yarn.lock b/yarn.lock index 139ffd1..67e944e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -976,10 +976,10 @@ resolved "https://registry.yarnpkg.com/@types/katex/-/katex-0.11.0.tgz#b16c54ee670925ffef0616beae9e90c557e17334" integrity sha512-27BfE8zASRLYfSBNMk5/+KIjr2CBBrH0i5lhsO04fca4TGirIIMay73v3zNkzqmsaeIa/Mi5kejWDcxPLAmkvA== -"@types/marked@^0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.6.5.tgz#3cf2a56ef615dad24aaf99784ef90a9eba4e29d8" - integrity sha512-6kBKf64aVfx93UJrcyEZ+OBM5nGv4RLsI6sR1Ar34bpgvGVRoyTgpxn4ZmtxOM5aDTAaaznYuYUH8bUX3Nk3YA== +"@types/marked@^0.7.2": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.7.2.tgz#1393f076773b55cc7078c0fbeb86a497c69db97e" + integrity sha512-A3EDyNaq6OCcpaOia2HQ/tu2QYt8DKuj4ExP21VU3cU3HTo2FLslvbqa2T1vux910RHvuSVqpwKnnykSFcRWOA== "@types/minimist@^1.2.0": version "1.2.0" @@ -4039,10 +4039,10 @@ 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.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" - integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg== +marked@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.8.0.tgz#ec5c0c9b93878dc52dd54be8d0e524097bd81a99" + integrity sha512-MyUe+T/Pw4TZufHkzAfDj6HarCBWia2y27/bhuYkTaiUnfDYFnCP3KUN+9oM7Wi6JA2rymtVYbQu3spE0GCmxQ== mdn-data@2.0.4: version "2.0.4" From 35b26db42b9bd954f9cfd550c1cbf7a81fa888f2 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 23 Jan 2020 14:40:42 +0100 Subject: [PATCH 171/266] Bump common-path-prefix from 2.0.0 to 3.0.0 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index af1a124..e4d736a 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@typescript-eslint/parser": "^2.4.0", "ansi_up": "^4.0.4", "arrify": "^2.0.1", - "common-path-prefix": "^2.0.0", + "common-path-prefix": "^3.0.0", "core-js": "^3.2.1", "csso-cli": "^3.0.0", "dedent": "^0.7.0", diff --git a/yarn.lock b/yarn.lock index 67e944e..896f7a6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1766,10 +1766,10 @@ commander@^2.20.0, commander@~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== -common-path-prefix@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-2.0.0.tgz#25b0265f318bf093a6ec630813aac97b29dea230" - integrity sha512-Lb9qbwwyQdRDmyib0qur7BC9/GHIbviTaQebayFsGC/n77AwFhZINCcJkQx2qVv9LJsA8F5ex65F2qrOfWGUyw== +common-path-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" + integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== commondir@^1.0.1: version "1.0.1" From d863e8cbafa83f2de2f6ec3e26621d96e9f9e782 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 23 Jan 2020 14:44:25 +0100 Subject: [PATCH 172/266] Bump rollup and its plugins --- package.json | 12 +-- patches/rollup-plugin-add-git-msg+1.0.3.patch | 30 ------- yarn.lock | 86 +++++++++---------- 3 files changed, 49 insertions(+), 79 deletions(-) delete mode 100644 patches/rollup-plugin-add-git-msg+1.0.3.patch diff --git a/package.json b/package.json index e4d736a..7e3e495 100644 --- a/package.json +++ b/package.json @@ -48,16 +48,16 @@ "patch-package": "^6.2.0", "postinstall-postinstall": "^2.0.0", "rimraf": "^3.0.0", - "rollup": "^1.23.0", - "rollup-plugin-add-git-msg": "^1.0.3", + "rollup": "^1.29.1", + "rollup-plugin-add-git-msg": "^1.1.0", "rollup-plugin-babel": "^4.3.3", "rollup-plugin-commonjs": "^10.1.0", - "rollup-plugin-executable": "^1.5.1", - "rollup-plugin-node-externals": "^2.0.1", + "rollup-plugin-executable": "^1.5.2", + "rollup-plugin-node-externals": "^2.1.3", "rollup-plugin-node-license": "^0.2.0", "rollup-plugin-node-resolve": "^5.2.0", - "rollup-plugin-terser": "^5.1.2", - "rollup-plugin-typescript2": "^0.24.3", + "rollup-plugin-terser": "^5.2.0", + "rollup-plugin-typescript2": "^0.25.3", "tar": "^5.0.5", "ts-jest": "^24.1.0", "ts-node": "^8.4.1", diff --git a/patches/rollup-plugin-add-git-msg+1.0.3.patch b/patches/rollup-plugin-add-git-msg+1.0.3.patch deleted file mode 100644 index ccce1f2..0000000 --- a/patches/rollup-plugin-add-git-msg+1.0.3.patch +++ /dev/null @@ -1,30 +0,0 @@ -TODO: Remove after https://github.com/oplinjie/rollup-plugin-add-git-msg/pull/1 is merged. - -diff --git a/node_modules/rollup-plugin-add-git-msg/dist/rollup-plugin-add-git-msg.es.js b/node_modules/rollup-plugin-add-git-msg/dist/rollup-plugin-add-git-msg.es.js -index 184a00e..fb3fde4 100644 ---- a/node_modules/rollup-plugin-add-git-msg/dist/rollup-plugin-add-git-msg.es.js -+++ b/node_modules/rollup-plugin-add-git-msg/dist/rollup-plugin-add-git-msg.es.js -@@ -73,7 +73,8 @@ Banner.prototype.getHeaderArray = function getHeaderArray (opt) { - if (opt.showTag) { - var tag = runGitCommand(TAG_COMMAND); - if (tag) { -- gitMsg = gitMsg.concat(("v" + tag + " - ")); -+ var prefix = tag.indexOf("v") === 0 ? "" : "v" -+ gitMsg = gitMsg.concat((prefix + tag + " - ")); - } - } - -diff --git a/node_modules/rollup-plugin-add-git-msg/dist/rollup-plugin-add-git-msg.js b/node_modules/rollup-plugin-add-git-msg/dist/rollup-plugin-add-git-msg.js -index 7d16072..f288638 100644 ---- a/node_modules/rollup-plugin-add-git-msg/dist/rollup-plugin-add-git-msg.js -+++ b/node_modules/rollup-plugin-add-git-msg/dist/rollup-plugin-add-git-msg.js -@@ -77,7 +77,8 @@ Banner.prototype.getHeaderArray = function getHeaderArray (opt) { - if (opt.showTag) { - var tag = runGitCommand(TAG_COMMAND); - if (tag) { -- gitMsg = gitMsg.concat(("v" + tag + " - ")); -+ var prefix = tag.indexOf("v") === 0 ? "" : "v" -+ gitMsg = gitMsg.concat((prefix + tag + " - ")); - } - } - diff --git a/yarn.lock b/yarn.lock index 896f7a6..f2f562b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -649,10 +649,10 @@ js-levenshtein "^1.1.3" semver "^5.5.0" -"@babel/runtime@^7.6.2": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f" - integrity sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA== +"@babel/runtime@^7.7.6": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.3.tgz#0811944f73a6c926bb2ad35e918dcc1bfab279f1" + integrity sha512-fVHx1rzEmwB130VTkLnxR+HmxcTjGzH12LYQcFFoBwakMd3aOMD4OsRN7tGG/UOYE2ektgFrS8uACAoRk1CY0w== dependencies: regenerator-runtime "^0.13.2" @@ -5165,10 +5165,10 @@ rimraf@^3.0.0: dependencies: glob "^7.1.3" -rollup-plugin-add-git-msg@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-add-git-msg/-/rollup-plugin-add-git-msg-1.0.3.tgz#9ec04edb892cf4465d23931176f397ebb126488d" - integrity sha1-nsBO24ks9EZdI5MRdvOX67EmSI0= +rollup-plugin-add-git-msg@^1.1.0: + version "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-babel@^4.3.3: version "4.3.3" @@ -5189,17 +5189,17 @@ rollup-plugin-commonjs@^10.1.0: resolve "^1.11.0" rollup-pluginutils "^2.8.1" -rollup-plugin-executable@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-executable/-/rollup-plugin-executable-1.5.1.tgz#cd06d3d6596795a4d4e5e9fc32e1cc3204593c7b" - integrity sha512-+UAapfjBIJP24/x2qqxQTCNOZq2fRdLOpeXlIaGwOYTvjafBkc35LQrApr3Lg+2izJTUJsQdiW38vaoArS0n+A== +rollup-plugin-executable@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-executable/-/rollup-plugin-executable-1.5.2.tgz#3b755c4220a3a764813e50ec1a8e8019465e3860" + integrity sha512-2wDyEtIDmCOXyGuA1e1vaQO2N/3DSgBrvlHS+EFCee/rkMEONTvuAxtY5duX9vgxSvwu0/qBoZEXU5BjQzg1aQ== dependencies: - "@babel/runtime" "^7.6.2" + "@babel/runtime" "^7.7.6" -rollup-plugin-node-externals@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-externals/-/rollup-plugin-node-externals-2.1.1.tgz#fe7fd5304e6dea9cfb656d49d1d2c89d72f2e992" - integrity sha512-YCDa2LqsvpxraSsJB2p1GozP9CGrp25R3a57baFUcacJgpoI04UnBx18z4ucPCaCCnedvcgeh27BYr9fiEfyXg== +rollup-plugin-node-externals@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-externals/-/rollup-plugin-node-externals-2.1.3.tgz#afd2c9e1268c3174d721efbd68f5ce580582013c" + integrity sha512-un2kG0avWdPl/YuELzrCRFTSBYCjpoG02Bkooj3i73BSDu0zUzBu6kLbsuCNHtWhN1xEDtiVL2SxcmTCaAUa4Q== rollup-plugin-node-license@^0.2.0: version "0.2.0" @@ -5220,21 +5220,21 @@ rollup-plugin-node-resolve@^5.2.0: resolve "^1.11.1" rollup-pluginutils "^2.8.1" -rollup-plugin-terser@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.1.2.tgz#3e41256205cb75f196fc70d4634227d1002c255c" - integrity sha512-sWKBCOS+vUkRtHtEiJPAf+WnBqk/C402fBD9AVHxSIXMqjsY7MnYWKYEUqGixtr0c8+1DjzUEPlNgOYQPVrS1g== +rollup-plugin-terser@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.2.0.tgz#ba758adf769347b7f1eaf9ef35978d2e207dccc7" + integrity sha512-jQI+nYhtDBc9HFRBz8iGttQg7li9klmzR62RG2W2nN6hJ/FI2K2ItYQ7kJ7/zn+vs+BP1AEccmVRjRN989I+Nw== dependencies: - "@babel/code-frame" "^7.0.0" - jest-worker "^24.6.0" - rollup-pluginutils "^2.8.1" - serialize-javascript "^1.7.0" - terser "^4.1.0" + "@babel/code-frame" "^7.5.5" + jest-worker "^24.9.0" + rollup-pluginutils "^2.8.2" + serialize-javascript "^2.1.2" + terser "^4.6.2" -rollup-plugin-typescript2@^0.24.3: - version "0.24.3" - resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.24.3.tgz#276fa33a9d584d500da62d3e5400307f4a46bdf2" - integrity sha512-D7yovQlhnRoz7pG/RF0ni+koxgzEShwfAGuOq6OVqKzcATHOvmUt2ePeYVdc9N0adcW1PcTzklUEM0oNWE/POw== +rollup-plugin-typescript2@^0.25.3: + version "0.25.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.25.3.tgz#a5fb2f0f85488789334ce540abe6c7011cbdf40f" + integrity sha512-ADkSaidKBovJmf5VBnZBZe+WzaZwofuvYdzGAKTN/J4hN7QJCFYAq7IrH9caxlru6T5qhX41PNFS1S4HqhsGQg== dependencies: find-cache-dir "^3.0.0" fs-extra "8.1.0" @@ -5249,17 +5249,17 @@ rollup-pluginutils@2.8.1: dependencies: estree-walker "^0.6.1" -rollup-pluginutils@^2.8.1: +rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: 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@^1.23.0: - version "1.25.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.25.2.tgz#739f508bd8f7ece52bb6c1fcda83466af82b7f6d" - integrity sha512-+7z6Wab/L45QCPcfpuTZKwKiB0tynj05s/+s2U3F2Bi7rOLPr9UcjUwO7/xpjlPNXA/hwnth6jBExFRGyf3tMg== +rollup@^1.29.1: + version "1.29.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.29.1.tgz#8715d0a4ca439be3079f8095989ec8aa60f637bc" + integrity sha512-dGQ+b9d1FOX/gluiggTAVnTvzQZUEkCi/TwZcax7ujugVRHs0nkYJlV9U4hsifGEMojnO+jvEML2CJQ6qXgbHA== dependencies: "@types/estree" "*" "@types/node" "*" @@ -5343,10 +5343,10 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -serialize-javascript@^1.7.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" - integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" @@ -5831,10 +5831,10 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" -terser@^4.1.0: - version "4.3.9" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.9.tgz#e4be37f80553d02645668727777687dad26bbca8" - integrity sha512-NFGMpHjlzmyOtPL+fDw3G7+6Ueh/sz4mkaUYa4lJCxOPTNzd0Uj0aZJOmsDYoSQyfuVoWDMSWTPU3huyOm2zdA== +terser@^4.6.2: + version "4.6.3" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.3.tgz#e33aa42461ced5238d352d2df2a67f21921f8d87" + integrity sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ== dependencies: commander "^2.20.0" source-map "~0.6.1" From bc4d2e1d9aabf8ef96be3836cf425d8f05044a80 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 23 Jan 2020 15:28:22 +0100 Subject: [PATCH 173/266] Bump jest and ts-jest from 24.x to 25.x --- package.json | 6 +- test/support/matchers/toHtmlEqual.ts | 2 +- test/support/matchers/toMatchElement.ts | 2 +- yarn.lock | 2128 +++++++++++++---------- 4 files changed, 1166 insertions(+), 972 deletions(-) diff --git a/package.json b/package.json index 7e3e495..0e0b6bc 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "@babel/preset-env": "^7.6.3", "@types/dedent": "^0.7.0", "@types/highlightjs": "^9.12.0", - "@types/jest": "^24.0.18", + "@types/jest": "^24.9.0", "@types/katex": "^0.11.0", "@types/marked": "^0.7.2", "@types/node": "^10.13.0", @@ -41,7 +41,7 @@ "eslint-plugin-promise": "^4.2.1", "eslint-plugin-standard": "^4.0.0", "fs-extra": "^8.1.0", - "jest": "^24.9.0", + "jest": "^25.1.0", "jest-chain": "^1.1.2", "nodom": "^2.3.0", "npm-run-all": "^4.1.5", @@ -59,7 +59,7 @@ "rollup-plugin-terser": "^5.2.0", "rollup-plugin-typescript2": "^0.25.3", "tar": "^5.0.5", - "ts-jest": "^24.1.0", + "ts-jest": "^25.0.0", "ts-node": "^8.4.1", "ts-transformer-export-default-name": "^0.1.0", "ts-transformer-inline-file": "^0.1.1", diff --git a/test/support/matchers/toHtmlEqual.ts b/test/support/matchers/toHtmlEqual.ts index ade97da..55f9764 100644 --- a/test/support/matchers/toHtmlEqual.ts +++ b/test/support/matchers/toHtmlEqual.ts @@ -6,7 +6,7 @@ type MatcherResult = jest.CustomMatcherResult declare global { // eslint-disable-next-line @typescript-eslint/no-namespace namespace jest { - interface Matchers { + interface Matchers { toHtmlEqual (expected: HTMLElement | string | Array): R, } } diff --git a/test/support/matchers/toMatchElement.ts b/test/support/matchers/toMatchElement.ts index 161144c..ed043a4 100644 --- a/test/support/matchers/toMatchElement.ts +++ b/test/support/matchers/toMatchElement.ts @@ -10,7 +10,7 @@ type Options = { declare global { // eslint-disable-next-line @typescript-eslint/no-namespace namespace jest { - interface Matchers { + interface Matchers { toMatchElement (expected: HTMLElement, opts?: Options): R, } } diff --git a/yarn.lock b/yarn.lock index f2f562b..2a8eaaa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,6 +9,13 @@ dependencies: "@babel/highlight" "^7.0.0" +"@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + dependencies: + "@babel/highlight" "^7.8.3" + "@babel/core@^7.1.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.0.tgz#9b00f73554edd67bebc86df8303ef678be3d7b48" @@ -49,7 +56,28 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.6.0": +"@babel/core@^7.7.5": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.3.tgz#30b0ebb4dd1585de6923a0b4d179e0b9f5d82941" + integrity sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.3" + "@babel/helpers" "^7.8.3" + "@babel/parser" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.0.tgz#e2c21efbfd3293ad819a2359b448f002bfdfda56" integrity sha512-Ms8Mo7YBdMMn1BYuNtKuP/z0TgEIhbcyB8HVR6PPNYp4P61lMsABiS4A3VG1qznjXVCf3r+fVHhm4efTYVsySA== @@ -70,6 +98,16 @@ lodash "^4.17.13" source-map "^0.5.0" +"@babel/generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.3.tgz#0e22c005b0a94c1c74eafe19ef78ce53a4d45c03" + integrity sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug== + dependencies: + "@babel/types" "^7.8.3" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" @@ -120,6 +158,15 @@ "@babel/template" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" + integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + "@babel/helper-get-function-arity@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" @@ -127,6 +174,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== + dependencies: + "@babel/types" "^7.8.3" + "@babel/helper-hoist-variables@^7.4.4": version "7.4.4" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" @@ -172,6 +226,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== +"@babel/helper-plugin-utils@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" + integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== + "@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" @@ -215,6 +274,13 @@ dependencies: "@babel/types" "^7.4.4" +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== + dependencies: + "@babel/types" "^7.8.3" + "@babel/helper-wrap-function@^7.1.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" @@ -243,6 +309,15 @@ "@babel/traverse" "^7.6.2" "@babel/types" "^7.6.0" +"@babel/helpers@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.3.tgz#382fbb0382ce7c4ce905945ab9641d688336ce85" + integrity sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ== + dependencies: + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + "@babel/highlight@^7.0.0": version "7.5.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" @@ -252,7 +327,16 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.6.0": +"@babel/highlight@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" + integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.0.tgz#3e05d0647432a8326cb28d0de03895ae5a57f39b" integrity sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ== @@ -262,6 +346,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A== +"@babel/parser@^7.7.5", "@babel/parser@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.3.tgz#790874091d2001c9be6ec426c2eed47bc7679081" + integrity sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ== + "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" @@ -319,6 +408,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-bigint@^7.0.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + "@babel/plugin-syntax-dynamic-import@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" @@ -656,7 +752,7 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": +"@babel/template@^7.1.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== @@ -665,7 +761,16 @@ "@babel/parser" "^7.6.0" "@babel/types" "^7.6.0" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.6.0": +"@babel/template@^7.7.4", "@babel/template@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" + integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.0.tgz#389391d510f79be7ce2ddd6717be66d3fed4b516" integrity sha512-93t52SaOBgml/xY74lsmt7xOR4ufYvhb5c5qiM6lu4J/dWGMAfAh6eKw4PjLes6DI6nQgearoxnFJk60YchpvQ== @@ -695,7 +800,22 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.6.0": +"@babel/traverse@^7.7.4", "@babel/traverse@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.3.tgz#a826215b011c9b4f73f3a893afbc05151358bf9a" + integrity sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.3" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.8.3" + "@babel/types" "^7.8.3" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.6.0": version "7.6.1" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648" integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g== @@ -713,6 +833,20 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@babel/types@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" + integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "@cnakazawa/watch@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" @@ -721,144 +855,169 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@jest/console@^24.7.1", "@jest/console@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" - integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== +"@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" + integrity sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg== dependencies: - "@jest/source-map" "^24.9.0" - chalk "^2.0.1" - slash "^2.0.0" + camelcase "^5.3.1" + find-up "^4.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" -"@jest/core@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" - integrity sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A== +"@istanbuljs/schema@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + +"@jest/console@^25.1.0": + version "25.1.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.1.0.tgz#1fc765d44a1e11aec5029c08e798246bd37075ab" + integrity sha512-3P1DpqAMK/L07ag/Y9/Jup5iDEG9P4pRAuZiMQnU0JB3UOvCyYCjCoxr7sIA80SeyUCUKrr24fKAxVpmBgQonA== dependencies: - "@jest/console" "^24.7.1" - "@jest/reporters" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - ansi-escapes "^3.0.0" - chalk "^2.0.1" + "@jest/source-map" "^25.1.0" + chalk "^3.0.0" + jest-util "^25.1.0" + slash "^3.0.0" + +"@jest/core@^25.1.0": + version "25.1.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.1.0.tgz#3d4634fc3348bb2d7532915d67781cdac0869e47" + integrity sha512-iz05+NmwCmZRzMXvMo6KFipW7nzhbpEawrKrkkdJzgytavPse0biEnCNr2wRlyCsp3SmKaEY+SGv7YWYQnIdig== + dependencies: + "@jest/console" "^25.1.0" + "@jest/reporters" "^25.1.0" + "@jest/test-result" "^25.1.0" + "@jest/transform" "^25.1.0" + "@jest/types" "^25.1.0" + ansi-escapes "^4.2.1" + chalk "^3.0.0" exit "^0.1.2" - graceful-fs "^4.1.15" - jest-changed-files "^24.9.0" - jest-config "^24.9.0" - jest-haste-map "^24.9.0" - jest-message-util "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-resolve-dependencies "^24.9.0" - jest-runner "^24.9.0" - jest-runtime "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - jest-watcher "^24.9.0" - micromatch "^3.1.10" - p-each-series "^1.0.0" + graceful-fs "^4.2.3" + jest-changed-files "^25.1.0" + jest-config "^25.1.0" + jest-haste-map "^25.1.0" + jest-message-util "^25.1.0" + jest-regex-util "^25.1.0" + jest-resolve "^25.1.0" + jest-resolve-dependencies "^25.1.0" + jest-runner "^25.1.0" + jest-runtime "^25.1.0" + jest-snapshot "^25.1.0" + jest-util "^25.1.0" + jest-validate "^25.1.0" + jest-watcher "^25.1.0" + micromatch "^4.0.2" + p-each-series "^2.1.0" realpath-native "^1.1.0" - rimraf "^2.5.4" - slash "^2.0.0" - strip-ansi "^5.0.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" -"@jest/environment@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" - integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ== +"@jest/environment@^25.1.0": + version "25.1.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.1.0.tgz#4a97f64770c9d075f5d2b662b5169207f0a3f787" + integrity sha512-cTpUtsjU4cum53VqBDlcW0E4KbQF03Cn0jckGPW/5rrE9tb+porD3+hhLtHAwhthsqfyF+bizyodTlsRA++sHg== dependencies: - "@jest/fake-timers" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" + "@jest/fake-timers" "^25.1.0" + "@jest/types" "^25.1.0" + jest-mock "^25.1.0" -"@jest/fake-timers@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" - integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== +"@jest/fake-timers@^25.1.0": + version "25.1.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.1.0.tgz#a1e0eff51ffdbb13ee81f35b52e0c1c11a350ce8" + integrity sha512-Eu3dysBzSAO1lD7cylZd/CVKdZZ1/43SF35iYBNV1Lvvn2Undp3Grwsv8PrzvbLhqwRzDd4zxrY4gsiHc+wygQ== dependencies: - "@jest/types" "^24.9.0" - jest-message-util "^24.9.0" - jest-mock "^24.9.0" + "@jest/types" "^25.1.0" + jest-message-util "^25.1.0" + jest-mock "^25.1.0" + jest-util "^25.1.0" + lolex "^5.0.0" -"@jest/reporters@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" - integrity sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw== +"@jest/reporters@^25.1.0": + version "25.1.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.1.0.tgz#9178ecf136c48f125674ac328f82ddea46e482b0" + integrity sha512-ORLT7hq2acJQa8N+NKfs68ZtHFnJPxsGqmofxW7v7urVhzJvpKZG9M7FAcgh9Ee1ZbCteMrirHA3m5JfBtAaDg== dependencies: - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^25.1.0" + "@jest/environment" "^25.1.0" + "@jest/test-result" "^25.1.0" + "@jest/transform" "^25.1.0" + "@jest/types" "^25.1.0" + chalk "^3.0.0" + collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.2" - istanbul-lib-coverage "^2.0.2" - istanbul-lib-instrument "^3.0.1" - istanbul-lib-report "^2.0.4" - istanbul-lib-source-maps "^3.0.1" - istanbul-reports "^2.2.6" - jest-haste-map "^24.9.0" - jest-resolve "^24.9.0" - jest-runtime "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.6.0" - node-notifier "^5.4.2" - slash "^2.0.0" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.0" + jest-haste-map "^25.1.0" + jest-resolve "^25.1.0" + jest-runtime "^25.1.0" + jest-util "^25.1.0" + jest-worker "^25.1.0" + slash "^3.0.0" source-map "^0.6.0" - string-length "^2.0.0" + string-length "^3.1.0" + terminal-link "^2.0.0" + v8-to-istanbul "^4.0.1" + optionalDependencies: + node-notifier "^6.0.0" -"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" - integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== +"@jest/source-map@^25.1.0": + version "25.1.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.1.0.tgz#b012e6c469ccdbc379413f5c1b1ffb7ba7034fb0" + integrity sha512-ohf2iKT0xnLWcIUhL6U6QN+CwFWf9XnrM2a6ybL9NXxJjgYijjLSitkYHIdzkd8wFliH73qj/+epIpTiWjRtAA== dependencies: callsites "^3.0.0" - graceful-fs "^4.1.15" + graceful-fs "^4.2.3" source-map "^0.6.0" -"@jest/test-result@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" - integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== +"@jest/test-result@^25.1.0": + version "25.1.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.1.0.tgz#847af2972c1df9822a8200457e64be4ff62821f7" + integrity sha512-FZzSo36h++U93vNWZ0KgvlNuZ9pnDnztvaM7P/UcTx87aPDotG18bXifkf1Ji44B7k/eIatmMzkBapnAzjkJkg== dependencies: - "@jest/console" "^24.9.0" - "@jest/types" "^24.9.0" + "@jest/console" "^25.1.0" + "@jest/transform" "^25.1.0" + "@jest/types" "^25.1.0" "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" - integrity sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A== +"@jest/test-sequencer@^25.1.0": + version "25.1.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.1.0.tgz#4df47208542f0065f356fcdb80026e3c042851ab" + integrity sha512-WgZLRgVr2b4l/7ED1J1RJQBOharxS11EFhmwDqknpknE0Pm87HLZVS2Asuuw+HQdfQvm2aXL2FvvBLxOD1D0iw== dependencies: - "@jest/test-result" "^24.9.0" - jest-haste-map "^24.9.0" - jest-runner "^24.9.0" - jest-runtime "^24.9.0" + "@jest/test-result" "^25.1.0" + jest-haste-map "^25.1.0" + jest-runner "^25.1.0" + jest-runtime "^25.1.0" -"@jest/transform@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" - integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ== +"@jest/transform@^25.1.0": + version "25.1.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.1.0.tgz#221f354f512b4628d88ce776d5b9e601028ea9da" + integrity sha512-4ktrQ2TPREVeM+KxB4zskAT84SnmG1vaz4S+51aTefyqn3zocZUnliLLm5Fsl85I3p/kFPN4CRp1RElIfXGegQ== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^24.9.0" - babel-plugin-istanbul "^5.1.0" - chalk "^2.0.1" + "@jest/types" "^25.1.0" + babel-plugin-istanbul "^6.0.0" + chalk "^3.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.15" - jest-haste-map "^24.9.0" - jest-regex-util "^24.9.0" - jest-util "^24.9.0" - micromatch "^3.1.10" + graceful-fs "^4.2.3" + jest-haste-map "^25.1.0" + jest-regex-util "^25.1.0" + jest-util "^25.1.0" + micromatch "^4.0.2" pirates "^4.0.1" realpath-native "^1.1.0" - slash "^2.0.0" + slash "^3.0.0" source-map "^0.6.1" - write-file-atomic "2.4.1" + write-file-atomic "^3.0.0" "@jest/types@^24.9.0": version "24.9.0" @@ -869,6 +1028,23 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" +"@jest/types@^25.1.0": + version "25.1.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.1.0.tgz#b26831916f0d7c381e11dbb5e103a72aed1b4395" + integrity sha512-VpOtt7tCrgvamWZh1reVsGADujKigBUFTi19mlRjqEGsE8qH4r3s+skY33dNdXOwyZIvuftZ5tqdF1IgsMejMA== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + +"@sinonjs/commons@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.0.tgz#f90ffc52a2e519f018b13b6c4da03cbff36ebed6" + integrity sha512-qbk9AP+cZUsKdW1GJsBpxPKFmCJ0T8swwzVje3qFd+AkQb74Q/tiuzrdfFg8AD2g5HH/XbE/I8Uc1KYHVYWfhg== + dependencies: + type-detect "4.0.8" + "@types/babel__core@^7.1.0": version "7.1.3" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30" @@ -902,6 +1078,11 @@ dependencies: "@babel/types" "^7.3.0" +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + "@types/dedent@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@types/dedent/-/dedent-0.7.0.tgz#155f339ca404e6dd90b9ce46a3f78fd69ca9b050" @@ -929,7 +1110,7 @@ dependencies: "@types/highlight.js" "*" -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== @@ -949,17 +1130,12 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" -"@types/jest-diff@*": - version "20.0.1" - resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" - integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== - -"@types/jest@^24.0.18": - version "24.0.18" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.18.tgz#9c7858d450c59e2164a8a9df0905fc5091944498" - integrity sha512-jcDDXdjTcrQzdN06+TSVsPPqxvsZA/5QkYfIZlq1JMw7FdP5AZylbOc+6B/cuDurctRe+MziUMtQ3xQdrbjqyQ== +"@types/jest@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.9.0.tgz#78c6991cd1734cf0d390be24875e310bb0a9fb74" + integrity sha512-dXvuABY9nM1xgsXlOtLQXJKdacxZJd7AtvLsKZ/0b57ruMXDKCOXAC/M75GbllQX6o1pcZ5hAG4JzYy7Z/wM2w== dependencies: - "@types/jest-diff" "*" + jest-diff "^24.3.0" "@types/json-schema@^7.0.3": version "7.0.3" @@ -1027,6 +1203,13 @@ dependencies: "@types/yargs-parser" "*" +"@types/yargs@^15.0.0": + version "15.0.1" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.1.tgz#9266a9d7be68cfcc982568211085a49a277f7c96" + integrity sha512-sYlwNU7zYi6eZbMzFvG6eHD7VsEvFdoDtlD7eI1JTg7YNnuguzmiGsc6MPSq5l8n+h21AsNof0je+9sgOe4+dg== + dependencies: + "@types/yargs-parser" "*" + "@typescript-eslint/eslint-plugin@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.4.0.tgz#aaf6b542ff75b78f4191a8bf1c519184817caa24" @@ -1112,7 +1295,7 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -acorn-globals@^4.1.0: +acorn-globals@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== @@ -1130,11 +1313,6 @@ acorn-walk@^6.0.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== -acorn@^5.5.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== - acorn@^6.0.1: version "6.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" @@ -1172,11 +1350,18 @@ ansi-align@^2.0.0: dependencies: string-width "^2.0.0" -ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: +ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-escapes@^4.2.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" + integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg== + dependencies: + type-fest "^0.8.1" + ansi-regex@^0.2.0, ansi-regex@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" @@ -1197,6 +1382,11 @@ ansi-regex@^4.0.0, ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" @@ -1214,6 +1404,14 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + ansi_up@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/ansi_up/-/ansi_up-4.0.4.tgz#5b8c35f0b02e4476f3f18cf89c3bf48d15d054f6" @@ -1227,7 +1425,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@~3.1.1: +anymatch@^3.0.3, anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== @@ -1235,19 +1433,6 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - arg@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.1.tgz#485f8e7c390ce4c5f78257dbea80d4be11feda4c" @@ -1330,11 +1515,6 @@ 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" @@ -1355,18 +1535,18 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== -babel-jest@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" - integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw== +babel-jest@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.1.0.tgz#206093ac380a4b78c4404a05b3277391278f80fb" + integrity sha512-tz0VxUhhOE2y+g8R2oFrO/2VtVjA1lkJeavlhExuRBg3LdNJY9gwQ+Vcvqt9+cqy71MCTJhewvTB7Qtnnr9SWg== dependencies: - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" + "@jest/transform" "^25.1.0" + "@jest/types" "^25.1.0" "@types/babel__core" "^7.1.0" - babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.9.0" - chalk "^2.4.2" - slash "^2.0.0" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^25.1.0" + chalk "^3.0.0" + slash "^3.0.0" babel-plugin-dynamic-import-node@^2.3.0: version "2.3.0" @@ -1375,30 +1555,32 @@ babel-plugin-dynamic-import-node@^2.3.0: dependencies: object.assign "^4.1.0" -babel-plugin-istanbul@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" - integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw== +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - find-up "^3.0.0" - istanbul-lib-instrument "^3.3.0" - test-exclude "^5.2.3" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" -babel-plugin-jest-hoist@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" - integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw== +babel-plugin-jest-hoist@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.1.0.tgz#fb62d7b3b53eb36c97d1bc7fec2072f9bd115981" + integrity sha512-oIsopO41vW4YFZ9yNYoLQATnnN46lp+MZ6H4VvPKFkcc2/fkl3CfE/NZZSmnEIEsJRmJAgkVEK0R7Zbl50CpTw== dependencies: "@types/babel__traverse" "^7.0.6" -babel-preset-jest@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" - integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg== +babel-preset-jest@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.1.0.tgz#d0aebfebb2177a21cde710996fce8486d34f1d33" + integrity sha512-eCGn64olaqwUMaugXsTtGAM2I0QTahjEtnRu0ql8Ie+gDWAc1N6wqN0k2NilnyTunM69Pad7gJY7LOtwLimoFQ== dependencies: + "@babel/plugin-syntax-bigint" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^24.9.0" + babel-plugin-jest-hoist "^25.1.0" balanced-match@^1.0.0: version "1.0.0" @@ -1472,7 +1654,7 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -braces@~3.0.2: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -1601,6 +1783,14 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4 escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174" @@ -1647,11 +1837,6 @@ chokidar@^3.0.2: optionalDependencies: fsevents "~2.1.1" -chownr@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" - integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== - chownr@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" @@ -1710,14 +1895,14 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" co@^4.6.0: version "4.6.0" @@ -1729,6 +1914,11 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +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" + integrity sha512-VKIhJgvk8E1W28m5avZ2Gv2Ruv5YiF56ug2oclvaG9md69BuZImMG2sk9g7QNKLUbtYAKQjXjYxbYZVUlMMKmQ== + collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -1744,11 +1934,23 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "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: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -1761,7 +1963,7 @@ commander@^2.19.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== -commander@^2.20.0, commander@~2.20.3: +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== @@ -1798,11 +2000,6 @@ configstore@^3.0.0: write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" @@ -1815,6 +2012,13 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0: dependencies: safe-buffer "~5.1.1" +convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -1833,7 +2037,7 @@ core-js@^3.2.1: resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.3.3.tgz#b7048d3c6c1a52b5fe55a729c1d4ccdffe0891bb" integrity sha512-0xmD4vUJRY8nfLyV9zcpC17FtSie5STXzw+HyYw2t8IIvmDnbq7RJUULECCo+NstpJtwK9kx8S+898iyqgeUow== -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= @@ -1865,6 +2069,15 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" @@ -1895,17 +2108,22 @@ csso@^4.0.1: dependencies: css-tree "1.0.0-alpha.37" -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": +cssom@^0.4.1: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" - integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== +cssstyle@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.1.0.tgz#99f50a3aa21d4af16e758ae3e454dcf5940b9122" + integrity sha512-1iwCdymVYhMdQWiZ+9mB7x+urdNLPGTWsIZt6euFk8Yi+dOERK2ccoAUA3Bl8I5vmK5qfz/eLkBRyLbs42ov4A== dependencies: - cssom "0.3.x" + cssom "~0.3.6" dashdash@^1.12.0: version "1.14.1" @@ -1914,7 +2132,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^1.0.0: +data-urls@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== @@ -1930,13 +2148,6 @@ debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: dependencies: ms "2.0.0" -debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" @@ -2008,25 +2219,15 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== dezalgo@^1.0.0: version "1.0.3" @@ -2041,6 +2242,11 @@ diff-sequences@^24.9.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== +diff-sequences@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.1.0.tgz#fd29a46f1c913fd66c22645dc75bffbe43051f32" + integrity sha512-nFIfVk5B/NStCsJ+zaPO4vYuLjlzQ6uFvPxzYyHlejNZ/UGa7G/n7peOXVrVNvRuyfstt+mZQYGpjxg9Z6N8Kw== + diff@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" @@ -2098,6 +2304,11 @@ emoji-regex@^7.0.1: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -2142,12 +2353,12 @@ escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@^1.9.1: - version "1.12.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" - integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== +escodegen@^1.11.1: + version "1.13.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.13.0.tgz#c7adf9bd3f3cc675bb752f202f79a720189cab29" + integrity sha512-eYk2dCkxR07DsHA/X2hRBj0CFAZeri/LyDMc0C8JT1Hqi6JnVpMhJ7XFITbb0+yZS3lVkaPL2oCkZ3AVmeVbMw== dependencies: - esprima "^3.1.3" + esprima "^4.0.1" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" @@ -2313,12 +2524,7 @@ espree@^6.1.1: acorn-jsx "^5.0.2" eslint-visitor-keys "^1.1.0" -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esprima@^4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -2383,6 +2589,22 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^3.2.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -2401,17 +2623,17 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" - integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q== +expect@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-25.1.0.tgz#7e8d7b06a53f7d66ec927278db3304254ee683ee" + integrity sha512-wqHzuoapQkhc3OKPlrpetsfueuEiMf3iWh0R8+duCu9PIjXoP7HgD5aeypwTnXUAjC8aMsiVDaWwlbJ1RlQ38g== dependencies: - "@jest/types" "^24.9.0" - ansi-styles "^3.2.0" - jest-get-type "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-regex-util "^24.9.0" + "@jest/types" "^25.1.0" + ansi-styles "^4.0.0" + jest-get-type "^25.1.0" + jest-matcher-utils "^25.1.0" + jest-message-util "^25.1.0" + jest-regex-util "^25.1.0" extend-shallow@^2.0.1: version "2.0.1" @@ -2535,14 +2757,7 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== @@ -2625,13 +2840,6 @@ fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" - integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== - dependencies: - minipass "^2.2.1" - fs-minipass@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.0.0.tgz#a6415edab02fae4b9e9230bc87ee2e4472003cd1" @@ -2644,13 +2852,10 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.7: - version "1.2.9" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" - integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== - dependencies: - nan "^2.12.1" - node-pre-gyp "^0.12.0" +fsevents@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== fsevents@~2.1.1: version "2.1.1" @@ -2667,19 +2872,10 @@ 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= -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" +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" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== get-caller-file@^1.0.1: version "1.0.3" @@ -2703,6 +2899,13 @@ get-stream@^4.0.0: dependencies: pump "^3.0.0" +get-stream@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -2785,22 +2988,16 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== +graceful-fs@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -handlebars@^4.1.2: - version "4.5.3" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" - integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -2833,16 +3030,16 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -2898,6 +3095,11 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" +html-escaper@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.0.tgz#71e87f931de3fe09e56661ab9a29aadec707b491" + integrity sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig== + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -2907,20 +3109,18 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -ignore-walk@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.2.tgz#99d83a246c196ea5c93ef9315ad7b0819c35069b" - integrity sha512-EXyErtpHbn75ZTsOADsfx6J/FPo6/5cjev46PXrcTpd8z3BoRkXgYu9/JVqrI7tusjmwCZutGeRJeU0Wo1e4Cw== - dependencies: - minimatch "^3.0.4" - ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -2944,13 +3144,13 @@ import-lazy@^2.1.0: resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" imurmurhash@^0.1.4: version "0.1.4" @@ -2965,7 +3165,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@~2.0.3: +inherits@2: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2994,7 +3194,7 @@ inquirer@^6.4.1: strip-ansi "^5.1.0" through "^2.3.6" -invariant@^2.2.2, invariant@^2.2.4: +invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -3006,6 +3206,11 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + 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" @@ -3122,6 +3327,11 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" @@ -3222,6 +3432,11 @@ is-stream@^1.0.0, is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-symbol@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" @@ -3229,7 +3444,7 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.0" -is-typedarray@~1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= @@ -3239,12 +3454,12 @@ is-windows@^1.0.2: resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +is-wsl@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" + integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -3271,108 +3486,107 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" - integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== -istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" - integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== +istanbul-lib-instrument@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.0.tgz#53321a7970f076262fd3292c8f9b2e4ac544aae1" + integrity sha512-Nm4wVHdo7ZXSG30KjZ2Wl5SU/Bw7bDx1PdaiIFzEStdjs0H12mOTncn1GVYuqQSaZxpg87VGBRsVRPGD2cD1AQ== dependencies: - "@babel/generator" "^7.4.0" - "@babel/parser" "^7.4.3" - "@babel/template" "^7.4.0" - "@babel/traverse" "^7.4.3" - "@babel/types" "^7.4.0" - istanbul-lib-coverage "^2.0.5" - semver "^6.0.0" + "@babel/core" "^7.7.5" + "@babel/parser" "^7.7.5" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" -istanbul-lib-report@^2.0.4: - version "2.0.8" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" - integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - supports-color "^6.1.0" + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" -istanbul-lib-source-maps@^3.0.1: - version "3.0.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" - integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== dependencies: debug "^4.1.1" - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - rimraf "^2.6.3" + istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" - integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== +istanbul-reports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.0.tgz#d4d16d035db99581b6194e119bbf36c963c5eb70" + integrity sha512-2osTcC8zcOSUkImzN2EWQta3Vdi4WjjKw99P2yWx5mLnigAM0Rd5uYFn1cf2i/Ois45GkNjaoTqc5CxgMSX80A== dependencies: - handlebars "^4.1.2" + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" jest-chain@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/jest-chain/-/jest-chain-1.1.2.tgz#80a098a4f5e19cd671d705d170bda501777ac3cf" integrity sha512-9C4zfLK7/ZGnEctJbqiv6KDInWtdAqJBVmMePpEmyKlYfZy095At4bytuw5B2UvugPxYEbAHurJsFocn3fkkFw== -jest-changed-files@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" - integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg== +jest-changed-files@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.1.0.tgz#73dae9a7d9949fdfa5c278438ce8f2ff3ec78131" + integrity sha512-bdL1aHjIVy3HaBO3eEQeemGttsq1BDlHgWcOjEOIAcga7OOEGWHD2WSu8HhL7I1F0mFFyci8VKU4tRNk+qtwDA== dependencies: - "@jest/types" "^24.9.0" - execa "^1.0.0" - throat "^4.0.0" + "@jest/types" "^25.1.0" + execa "^3.2.0" + throat "^5.0.0" -jest-cli@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" - integrity sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg== +jest-cli@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.1.0.tgz#75f0b09cf6c4f39360906bf78d580be1048e4372" + integrity sha512-p+aOfczzzKdo3AsLJlhs8J5EW6ffVidfSZZxXedJ0mHPBOln1DccqFmGCoO8JWd4xRycfmwy1eoQkMsF8oekPg== dependencies: - "@jest/core" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" + "@jest/core" "^25.1.0" + "@jest/test-result" "^25.1.0" + "@jest/types" "^25.1.0" + chalk "^3.0.0" exit "^0.1.2" - import-local "^2.0.0" + import-local "^3.0.2" is-ci "^2.0.0" - jest-config "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" + jest-config "^25.1.0" + jest-util "^25.1.0" + jest-validate "^25.1.0" prompts "^2.0.1" realpath-native "^1.1.0" - yargs "^13.3.0" + yargs "^15.0.0" -jest-config@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" - integrity sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ== +jest-config@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.1.0.tgz#d114e4778c045d3ef239452213b7ad3ec1cbea90" + integrity sha512-tLmsg4SZ5H7tuhBC5bOja0HEblM0coS3Wy5LTCb2C8ZV6eWLewHyK+3qSq9Bi29zmWQ7ojdCd3pxpx4l4d2uGw== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^24.9.0" - "@jest/types" "^24.9.0" - babel-jest "^24.9.0" - chalk "^2.0.1" + "@jest/test-sequencer" "^25.1.0" + "@jest/types" "^25.1.0" + babel-jest "^25.1.0" + chalk "^3.0.0" glob "^7.1.1" - jest-environment-jsdom "^24.9.0" - jest-environment-node "^24.9.0" - jest-get-type "^24.9.0" - jest-jasmine2 "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - micromatch "^3.1.10" - pretty-format "^24.9.0" + jest-environment-jsdom "^25.1.0" + jest-environment-node "^25.1.0" + jest-get-type "^25.1.0" + jest-jasmine2 "^25.1.0" + jest-regex-util "^25.1.0" + jest-resolve "^25.1.0" + jest-util "^25.1.0" + jest-validate "^25.1.0" + micromatch "^4.0.2" + pretty-format "^25.1.0" realpath-native "^1.1.0" -jest-diff@^24.9.0: +jest-diff@^24.3.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== @@ -3382,284 +3596,292 @@ jest-diff@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-docblock@^24.3.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" - integrity sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA== +jest-diff@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.1.0.tgz#58b827e63edea1bc80c1de952b80cec9ac50e1ad" + integrity sha512-nepXgajT+h017APJTreSieh4zCqnSHEJ1iT8HDlewu630lSJ4Kjjr9KNzm+kzGwwcpsDE6Snx1GJGzzsefaEHw== dependencies: - detect-newline "^2.1.0" + chalk "^3.0.0" + diff-sequences "^25.1.0" + jest-get-type "^25.1.0" + pretty-format "^25.1.0" -jest-each@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" - integrity sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog== +jest-docblock@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.1.0.tgz#0f44bea3d6ca6dfc38373d465b347c8818eccb64" + integrity sha512-370P/mh1wzoef6hUKiaMcsPtIapY25suP6JqM70V9RJvdKLrV4GaGbfUseUVk4FZJw4oTZ1qSCJNdrClKt5JQA== dependencies: - "@jest/types" "^24.9.0" - chalk "^2.0.1" - jest-get-type "^24.9.0" - jest-util "^24.9.0" - pretty-format "^24.9.0" + detect-newline "^3.0.0" -jest-environment-jsdom@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" - integrity sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA== +jest-each@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.1.0.tgz#a6b260992bdf451c2d64a0ccbb3ac25e9b44c26a" + integrity sha512-R9EL8xWzoPySJ5wa0DXFTj7NrzKpRD40Jy+zQDp3Qr/2QmevJgkN9GqioCGtAJ2bW9P/MQRznQHQQhoeAyra7A== dependencies: - "@jest/environment" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - jest-util "^24.9.0" - jsdom "^11.5.1" + "@jest/types" "^25.1.0" + chalk "^3.0.0" + jest-get-type "^25.1.0" + jest-util "^25.1.0" + pretty-format "^25.1.0" -jest-environment-node@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" - integrity sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA== +jest-environment-jsdom@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.1.0.tgz#6777ab8b3e90fd076801efd3bff8e98694ab43c3" + integrity sha512-ILb4wdrwPAOHX6W82GGDUiaXSSOE274ciuov0lztOIymTChKFtC02ddyicRRCdZlB5YSrv3vzr1Z5xjpEe1OHQ== dependencies: - "@jest/environment" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - jest-util "^24.9.0" + "@jest/environment" "^25.1.0" + "@jest/fake-timers" "^25.1.0" + "@jest/types" "^25.1.0" + jest-mock "^25.1.0" + jest-util "^25.1.0" + jsdom "^15.1.1" + +jest-environment-node@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.1.0.tgz#797bd89b378cf0bd794dc8e3dca6ef21126776db" + integrity sha512-U9kFWTtAPvhgYY5upnH9rq8qZkj6mYLup5l1caAjjx9uNnkLHN2xgZy5mo4SyLdmrh/EtB9UPpKFShvfQHD0Iw== + dependencies: + "@jest/environment" "^25.1.0" + "@jest/fake-timers" "^25.1.0" + "@jest/types" "^25.1.0" + jest-mock "^25.1.0" + jest-util "^25.1.0" jest-get-type@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== -jest-haste-map@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" - integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== +jest-get-type@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.1.0.tgz#1cfe5fc34f148dc3a8a3b7275f6b9ce9e2e8a876" + integrity sha512-yWkBnT+5tMr8ANB6V+OjmrIJufHtCAqI5ic2H40v+tRqxDmE0PGnIiTyvRWFOMtmVHYpwRqyazDbTnhpjsGvLw== + +jest-haste-map@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.1.0.tgz#ae12163d284f19906260aa51fd405b5b2e5a4ad3" + integrity sha512-/2oYINIdnQZAqyWSn1GTku571aAfs8NxzSErGek65Iu5o8JYb+113bZysRMcC/pjE5v9w0Yz+ldbj9NxrFyPyw== dependencies: - "@jest/types" "^24.9.0" - anymatch "^2.0.0" + "@jest/types" "^25.1.0" + anymatch "^3.0.3" fb-watchman "^2.0.0" - graceful-fs "^4.1.15" - invariant "^2.2.4" - jest-serializer "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.9.0" - micromatch "^3.1.10" + graceful-fs "^4.2.3" + jest-serializer "^25.1.0" + jest-util "^25.1.0" + jest-worker "^25.1.0" + micromatch "^4.0.2" sane "^4.0.3" walker "^1.0.7" optionalDependencies: - fsevents "^1.2.7" + fsevents "^2.1.2" -jest-jasmine2@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" - integrity sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw== +jest-jasmine2@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.1.0.tgz#681b59158a430f08d5d0c1cce4f01353e4b48137" + integrity sha512-GdncRq7jJ7sNIQ+dnXvpKO2MyP6j3naNK41DTTjEAhLEdpImaDA9zSAZwDhijjSF/D7cf4O5fdyUApGBZleaEg== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" + "@jest/environment" "^25.1.0" + "@jest/source-map" "^25.1.0" + "@jest/test-result" "^25.1.0" + "@jest/types" "^25.1.0" + chalk "^3.0.0" co "^4.6.0" - expect "^24.9.0" + expect "^25.1.0" is-generator-fn "^2.0.0" - jest-each "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-runtime "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - pretty-format "^24.9.0" - throat "^4.0.0" + jest-each "^25.1.0" + jest-matcher-utils "^25.1.0" + jest-message-util "^25.1.0" + jest-runtime "^25.1.0" + jest-snapshot "^25.1.0" + jest-util "^25.1.0" + pretty-format "^25.1.0" + throat "^5.0.0" -jest-leak-detector@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" - integrity sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA== +jest-leak-detector@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.1.0.tgz#ed6872d15aa1c72c0732d01bd073dacc7c38b5c6" + integrity sha512-3xRI264dnhGaMHRvkFyEKpDeaRzcEBhyNrOG5oT8xPxOyUAblIAQnpiR3QXu4wDor47MDTiHbiFcbypdLcLW5w== dependencies: - jest-get-type "^24.9.0" - pretty-format "^24.9.0" + jest-get-type "^25.1.0" + pretty-format "^25.1.0" -jest-matcher-utils@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" - integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== +jest-matcher-utils@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.1.0.tgz#fa5996c45c7193a3c24e73066fc14acdee020220" + integrity sha512-KGOAFcSFbclXIFE7bS4C53iYobKI20ZWleAdAFun4W1Wz1Kkej8Ng6RRbhL8leaEvIOjGXhGf/a1JjO8bkxIWQ== dependencies: - chalk "^2.0.1" - jest-diff "^24.9.0" - jest-get-type "^24.9.0" - pretty-format "^24.9.0" + chalk "^3.0.0" + jest-diff "^25.1.0" + jest-get-type "^25.1.0" + pretty-format "^25.1.0" -jest-message-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" - integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== +jest-message-util@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.1.0.tgz#702a9a5cb05c144b9aa73f06e17faa219389845e" + integrity sha512-Nr/Iwar2COfN22aCqX0kCVbXgn8IBm9nWf4xwGr5Olv/KZh0CZ32RKgZWMVDXGdOahicM10/fgjdimGNX/ttCQ== dependencies: "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" + "@jest/test-result" "^25.1.0" + "@jest/types" "^25.1.0" "@types/stack-utils" "^1.0.1" - chalk "^2.0.1" - micromatch "^3.1.10" - slash "^2.0.0" + chalk "^3.0.0" + micromatch "^4.0.2" + slash "^3.0.0" stack-utils "^1.0.1" -jest-mock@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" - integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== +jest-mock@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.1.0.tgz#411d549e1b326b7350b2e97303a64715c28615fd" + integrity sha512-28/u0sqS+42vIfcd1mlcg4ZVDmSUYuNvImP4X2lX5hRMLW+CN0BeiKVD4p+ujKKbSPKd3rg/zuhCF+QBLJ4vag== dependencies: - "@jest/types" "^24.9.0" + "@jest/types" "^25.1.0" jest-pnp-resolver@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== -jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" - integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== +jest-regex-util@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.1.0.tgz#efaf75914267741838e01de24da07b2192d16d87" + integrity sha512-9lShaDmDpqwg+xAd73zHydKrBbbrIi08Kk9YryBEBybQFg/lBWR/2BDjjiSE7KIppM9C5+c03XiDaZ+m4Pgs1w== -jest-resolve-dependencies@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" - integrity sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g== +jest-resolve-dependencies@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.1.0.tgz#8a1789ec64eb6aaa77fd579a1066a783437e70d2" + integrity sha512-Cu/Je38GSsccNy4I2vL12ZnBlD170x2Oh1devzuM9TLH5rrnLW1x51lN8kpZLYTvzx9j+77Y5pqBaTqfdzVzrw== dependencies: - "@jest/types" "^24.9.0" - jest-regex-util "^24.3.0" - jest-snapshot "^24.9.0" + "@jest/types" "^25.1.0" + jest-regex-util "^25.1.0" + jest-snapshot "^25.1.0" -jest-resolve@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" - integrity sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ== +jest-resolve@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.1.0.tgz#23d8b6a4892362baf2662877c66aa241fa2eaea3" + integrity sha512-XkBQaU1SRCHj2Evz2Lu4Czs+uIgJXWypfO57L7JYccmAXv4slXA6hzNblmcRmf7P3cQ1mE7fL3ABV6jAwk4foQ== dependencies: - "@jest/types" "^24.9.0" + "@jest/types" "^25.1.0" browser-resolve "^1.11.3" - chalk "^2.0.1" + chalk "^3.0.0" jest-pnp-resolver "^1.2.1" realpath-native "^1.1.0" -jest-runner@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" - integrity sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg== +jest-runner@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.1.0.tgz#fef433a4d42c89ab0a6b6b268e4a4fbe6b26e812" + integrity sha512-su3O5fy0ehwgt+e8Wy7A8CaxxAOCMzL4gUBftSs0Ip32S0epxyZPDov9Znvkl1nhVOJNf4UwAsnqfc3plfQH9w== dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.4.2" + "@jest/console" "^25.1.0" + "@jest/environment" "^25.1.0" + "@jest/test-result" "^25.1.0" + "@jest/types" "^25.1.0" + chalk "^3.0.0" exit "^0.1.2" - graceful-fs "^4.1.15" - jest-config "^24.9.0" - jest-docblock "^24.3.0" - jest-haste-map "^24.9.0" - jest-jasmine2 "^24.9.0" - jest-leak-detector "^24.9.0" - jest-message-util "^24.9.0" - jest-resolve "^24.9.0" - jest-runtime "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.6.0" + graceful-fs "^4.2.3" + jest-config "^25.1.0" + jest-docblock "^25.1.0" + jest-haste-map "^25.1.0" + jest-jasmine2 "^25.1.0" + jest-leak-detector "^25.1.0" + jest-message-util "^25.1.0" + jest-resolve "^25.1.0" + jest-runtime "^25.1.0" + jest-util "^25.1.0" + jest-worker "^25.1.0" source-map-support "^0.5.6" - throat "^4.0.0" + throat "^5.0.0" -jest-runtime@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" - integrity sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw== +jest-runtime@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.1.0.tgz#02683218f2f95aad0f2ec1c9cdb28c1dc0ec0314" + integrity sha512-mpPYYEdbExKBIBB16ryF6FLZTc1Rbk9Nx0ryIpIMiDDkOeGa0jQOKVI/QeGvVGlunKKm62ywcioeFVzIbK03bA== dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.9.0" - "@jest/source-map" "^24.3.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/yargs" "^13.0.0" - chalk "^2.0.1" + "@jest/console" "^25.1.0" + "@jest/environment" "^25.1.0" + "@jest/source-map" "^25.1.0" + "@jest/test-result" "^25.1.0" + "@jest/transform" "^25.1.0" + "@jest/types" "^25.1.0" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.3" - graceful-fs "^4.1.15" - jest-config "^24.9.0" - jest-haste-map "^24.9.0" - jest-message-util "^24.9.0" - jest-mock "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" + graceful-fs "^4.2.3" + jest-config "^25.1.0" + jest-haste-map "^25.1.0" + jest-message-util "^25.1.0" + jest-mock "^25.1.0" + jest-regex-util "^25.1.0" + jest-resolve "^25.1.0" + jest-snapshot "^25.1.0" + jest-util "^25.1.0" + jest-validate "^25.1.0" realpath-native "^1.1.0" - slash "^2.0.0" - strip-bom "^3.0.0" - yargs "^13.3.0" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.0.0" -jest-serializer@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" - integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== +jest-serializer@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.1.0.tgz#73096ba90e07d19dec4a0c1dd89c355e2f129e5d" + integrity sha512-20Wkq5j7o84kssBwvyuJ7Xhn7hdPeTXndnwIblKDR2/sy1SUm6rWWiG9kSCgJPIfkDScJCIsTtOKdlzfIHOfKA== -jest-snapshot@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" - integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew== +jest-snapshot@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.1.0.tgz#d5880bd4b31faea100454608e15f8d77b9d221d9" + integrity sha512-xZ73dFYN8b/+X2hKLXz4VpBZGIAn7muD/DAg+pXtDzDGw3iIV10jM7WiHqhCcpDZfGiKEj7/2HXAEPtHTj0P2A== dependencies: "@babel/types" "^7.0.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" - expect "^24.9.0" - jest-diff "^24.9.0" - jest-get-type "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-resolve "^24.9.0" + "@jest/types" "^25.1.0" + chalk "^3.0.0" + expect "^25.1.0" + jest-diff "^25.1.0" + jest-get-type "^25.1.0" + jest-matcher-utils "^25.1.0" + jest-message-util "^25.1.0" + jest-resolve "^25.1.0" mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^24.9.0" - semver "^6.2.0" + pretty-format "^25.1.0" + semver "^7.1.1" -jest-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" - integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== +jest-util@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.1.0.tgz#7bc56f7b2abd534910e9fa252692f50624c897d9" + integrity sha512-7did6pLQ++87Qsj26Fs/TIwZMUFBXQ+4XXSodRNy3luch2DnRXsSnmpVtxxQ0Yd6WTipGpbhh2IFP1mq6/fQGw== dependencies: - "@jest/console" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/source-map" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - callsites "^3.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.15" + "@jest/types" "^25.1.0" + chalk "^3.0.0" is-ci "^2.0.0" mkdirp "^0.5.1" - slash "^2.0.0" - source-map "^0.6.0" -jest-validate@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" - integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== +jest-validate@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.1.0.tgz#1469fa19f627bb0a9a98e289f3e9ab6a668c732a" + integrity sha512-kGbZq1f02/zVO2+t1KQGSVoCTERc5XeObLwITqC6BTRH3Adv7NZdYqCpKIZLUgpLXf2yISzQ465qOZpul8abXA== dependencies: - "@jest/types" "^24.9.0" + "@jest/types" "^25.1.0" camelcase "^5.3.1" - chalk "^2.0.1" - jest-get-type "^24.9.0" + chalk "^3.0.0" + jest-get-type "^25.1.0" leven "^3.1.0" - pretty-format "^24.9.0" + pretty-format "^25.1.0" -jest-watcher@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" - integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw== +jest-watcher@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.1.0.tgz#97cb4a937f676f64c9fad2d07b824c56808e9806" + integrity sha512-Q9eZ7pyaIr6xfU24OeTg4z1fUqBF/4MP6J801lyQfg7CsnZ/TCzAPvCfckKdL5dlBBEKBeHV0AdyjFZ5eWj4ig== dependencies: - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/yargs" "^13.0.0" - ansi-escapes "^3.0.0" - chalk "^2.0.1" - jest-util "^24.9.0" - string-length "^2.0.0" + "@jest/test-result" "^25.1.0" + "@jest/types" "^25.1.0" + ansi-escapes "^4.2.1" + chalk "^3.0.0" + jest-util "^25.1.0" + string-length "^3.1.0" -jest-worker@^24.6.0, jest-worker@^24.9.0: +jest-worker@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== @@ -3667,13 +3889,22 @@ jest-worker@^24.6.0, jest-worker@^24.9.0: merge-stream "^2.0.0" supports-color "^6.1.0" -jest@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" - integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw== +jest-worker@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.1.0.tgz#75d038bad6fdf58eba0d2ec1835856c497e3907a" + integrity sha512-ZHhHtlxOWSxCoNOKHGbiLzXnl42ga9CxDr27H36Qn+15pQZd3R/F24jrmjDelw9j/iHUIWMWs08/u2QN50HHOg== dependencies: - import-local "^2.0.0" - jest-cli "^24.9.0" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-25.1.0.tgz#b85ef1ddba2fdb00d295deebbd13567106d35be9" + integrity sha512-FV6jEruneBhokkt9MQk0WUFoNTwnF76CLXtwNMfsc0um0TlB/LG2yxUd0KqaFjEJ9laQmVWQWS0sG/t2GsuI0w== + dependencies: + "@jest/core" "^25.1.0" + import-local "^3.0.2" + jest-cli "^25.1.0" js-levenshtein@^1.1.3: version "1.1.6" @@ -3698,36 +3929,36 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdom@^11.5.1: - version "11.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== +jsdom@^15.1.1: + version "15.2.1" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" + integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== dependencies: abab "^2.0.0" - acorn "^5.5.3" - acorn-globals "^4.1.0" + acorn "^7.1.0" + acorn-globals "^4.3.2" array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle "^1.0.0" - data-urls "^1.0.0" + cssom "^0.4.1" + cssstyle "^2.0.0" + data-urls "^1.1.0" domexception "^1.0.1" - escodegen "^1.9.1" + escodegen "^1.11.1" html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" + nwsapi "^2.2.0" + parse5 "5.1.0" pn "^1.1.0" - request "^2.87.0" - request-promise-native "^1.0.5" - sax "^1.2.4" + request "^2.88.0" + request-promise-native "^1.0.7" + saxes "^3.1.9" symbol-tree "^3.2.2" - tough-cookie "^2.3.4" + tough-cookie "^3.0.1" w3c-hr-time "^1.0.1" + w3c-xmlserializer "^1.1.2" webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.1" - ws "^5.2.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^7.0.0" + ws "^7.0.0" xml-name-validator "^3.0.0" jsesc@^2.5.1: @@ -3853,11 +4084,6 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -left-pad@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -3926,14 +4152,6 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -3956,11 +4174,18 @@ lodash.unescape@4.0.1: resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4: +lodash@^4.17.12, 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== +lolex@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" + integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== + dependencies: + "@sinonjs/commons" "^1.7.0" + loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -3995,14 +4220,6 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - make-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" @@ -4066,7 +4283,7 @@ 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== -micromatch@^3.1.10, micromatch@^3.1.4: +micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -4085,6 +4302,14 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + mime-db@1.40.0: version "1.40.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" @@ -4102,6 +4327,11 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -4127,19 +4357,6 @@ minimist@^1.1.1, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= - -minipass@^2.2.1, minipass@^2.3.5: - version "2.5.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.5.1.tgz#cf435a9bf9408796ca3a3525a8b851464279c9b8" - integrity sha512-dmpSnLJtNQioZFI5HfQ55Ad0DzzsMAb+HfokwRTNXwEQjepbTkl5mtIlSVxGIkOkxlpX7wIn5ET/oAd9fZ/Y/Q== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - minipass@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" @@ -4147,13 +4364,6 @@ minipass@^3.0.0: dependencies: yallist "^4.0.0" -minizlib@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.2.tgz#6f0ccc82fa53e1bf2ff145f220d2da9fa6e3a166" - integrity sha512-hR3At21uSrsjjDTWrbu0IMLTpnkpv8IIMFDFaoz43Tmu4LkmAXfH44vNNzpTnf+OAQQCHrb91y/wc2J4x5XgSQ== - dependencies: - minipass "^2.2.1" - minizlib@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3" @@ -4197,11 +4407,6 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== - nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -4224,20 +4429,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - -neo-async@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -4253,32 +4444,16 @@ node-modules-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -node-notifier@^5.4.2: - version "5.4.3" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" - integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== +node-notifier@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" + integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== dependencies: growly "^1.3.0" - is-wsl "^1.1.0" - semver "^5.5.0" + is-wsl "^2.1.1" + semver "^6.3.0" shellwords "^0.1.1" - which "^1.3.0" - -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" + which "^1.3.1" node-releases@^1.1.36: version "1.1.38" @@ -4299,14 +4474,6 @@ nopt@^2.2.0: dependencies: abbrev "1" -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - normalize-package-data@^2.0.0, normalize-package-data@^2.3.2: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -4329,19 +4496,6 @@ 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== -npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== - -npm-packlist@^1.1.6: - version "1.4.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" - integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-run-all@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" @@ -4364,36 +4518,28 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" + path-key "^3.0.0" number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -nwsapi@^2.0.7: - version "2.1.4" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f" - integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw== +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" @@ -4469,13 +4615,12 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" + mimic-fn "^2.1.0" optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" @@ -4489,11 +4634,6 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - os-locale@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" @@ -4503,31 +4643,26 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-each-series@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" - integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= - dependencies: - p-reduce "^1.0.0" +p-each-series@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" + integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -4535,7 +4670,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== @@ -4549,13 +4684,6 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -4563,11 +4691,6 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-reduce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" - integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= - p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -4610,10 +4733,10 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== +parse5@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== pascalcase@^0.1.1: version "0.1.1" @@ -4664,6 +4787,11 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -4693,6 +4821,11 @@ picomatch@^2.0.4: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== +picomatch@^2.0.5: + version "2.2.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" + integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA== + pidtree@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.0.tgz#f6fada10fccc9f99bf50e90d0b23d72c9ebc2e6b" @@ -4727,14 +4860,7 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -4776,16 +4902,21 @@ pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" +pretty-format@^25.1.0: + version "25.1.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.1.0.tgz#ed869bdaec1356fc5ae45de045e2c8ec7b07b0c8" + integrity sha512-46zLRSGLd02Rp+Lhad9zzuNZ+swunitn8zIpfD2B4OPCRLXbM87RJT2aBLBWYOznNUML/2l/ReMyWNC80PJBUQ== + dependencies: + "@jest/types" "^25.1.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + private@^0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -4832,7 +4963,7 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: +rc@^1.0.1, rc@^1.1.6: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -4842,6 +4973,11 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-is@^16.12.0: + version "16.12.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" + integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== + react-is@^16.8.4: version "16.9.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb" @@ -4881,14 +5017,6 @@ read-pkg-up@^2.0.0: find-up "^2.0.0" read-pkg "^2.0.0" -read-pkg-up@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" - integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== - dependencies: - find-up "^3.0.0" - read-pkg "^3.0.0" - read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" @@ -4907,19 +5035,6 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -readable-stream@^2.0.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - 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" @@ -5040,23 +5155,23 @@ repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -request-promise-core@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" - integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== +request-promise-core@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== dependencies: - lodash "^4.17.11" + lodash "^4.17.15" -request-promise-native@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" - integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== +request-promise-native@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" + integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== dependencies: - request-promise-core "1.1.2" + request-promise-core "1.1.3" stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.87.0: +request@^2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -5097,23 +5212,23 @@ 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== -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-from@^3.0.0: +resolve-cwd@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -5151,7 +5266,7 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: +rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -5289,7 +5404,7 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.2: 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.1: +safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -5321,10 +5436,12 @@ 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" + integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== + dependencies: + xmlchars "^2.1.1" semver-diff@^2.0.0: version "2.1.0" @@ -5338,17 +5455,22 @@ semver-diff@^2.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.1.tgz#29104598a197d6cbe4733eeecbe968f7b43a9667" + integrity sha512-WfuG+fl6eh3eZ2qAf6goB7nhiCd7NPXhmyFxigB/TOkQyeLP8w8GsVehvtGNtnNmyboz4TgeK40B1Kbql/8c5A== + serialize-javascript@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -5370,11 +5492,23 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + shell-quote@^1.6.1: version "1.7.2" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" @@ -5405,6 +5539,11 @@ slash@^2.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + slice-ansi@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" @@ -5498,6 +5637,11 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + sourcemap-codec@^1.4.4: version "1.4.6" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz#e30a74f0402bad09807640d39e971090a08ce1e9" @@ -5646,13 +5790,13 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= +string-length@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" + integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA== dependencies: astral-regex "^1.0.0" - strip-ansi "^4.0.0" + strip-ansi "^5.2.0" string-width@^1.0.1: version "1.0.2" @@ -5663,7 +5807,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -5671,7 +5815,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0, string-width@^3.1.0: +string-width@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== @@ -5680,6 +5824,15 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + string.prototype.padend@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" @@ -5705,13 +5858,6 @@ string.prototype.trimright@^2.0.0: define-properties "^1.1.3" function-bind "^1.1.1" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - strip-ansi@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" @@ -5733,23 +5879,40 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: +strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-json-comments@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" @@ -5784,6 +5947,21 @@ supports-color@^6.1.0: 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" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.0.0.tgz#b1b94a159e9df00b0a554b2d5f0e0a89690334b0" + integrity sha512-bFhn0MQ8qefLyJ3K7PpHiPUTuTVPWw6RXfaMeV6xgJLXtBbszyboz1bvGTVv4R0YpQm2DqlXXn0fFHhxUHVE5w== + dependencies: + has-flag "^4.0.0" + supports-color "^7.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" @@ -5799,19 +5977,6 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" -tar@^4: - version "4.4.10" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" - integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.3.5" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - tar@^5.0.5: version "5.0.5" resolved "https://registry.yarnpkg.com/tar/-/tar-5.0.5.tgz#03fcdb7105bc8ea3ce6c86642b9c942495b04f93" @@ -5831,6 +5996,14 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + terser@^4.6.2: version "4.6.3" resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.3.tgz#e33aa42461ced5238d352d2df2a67f21921f8d87" @@ -5840,26 +6013,30 @@ terser@^4.6.2: source-map "~0.6.1" source-map-support "~0.5.12" -test-exclude@^5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" - integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: - glob "^7.1.3" + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" minimatch "^3.0.4" - read-pkg-up "^4.0.0" - require-main-filename "^2.0.0" text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -throat@^4.0.0, throat@^4.1.0: +throat@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + through@2, through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -5927,7 +6104,7 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -tough-cookie@^2.3.3, tough-cookie@^2.3.4: +tough-cookie@^2.3.3: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -5935,6 +6112,15 @@ tough-cookie@^2.3.3, tough-cookie@^2.3.4: psl "^1.1.28" punycode "^2.1.1" +tough-cookie@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== + dependencies: + ip-regex "^2.1.0" + psl "^1.1.28" + punycode "^2.1.1" + tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" @@ -5960,10 +6146,10 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -ts-jest@^24.1.0: - version "24.1.0" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.1.0.tgz#2eaa813271a2987b7e6c3fefbda196301c131734" - integrity sha512-HEGfrIEAZKfu1pkaxB9au17b1d9b56YZSqz5eCVE8mX68+5reOvlM93xGOzzCREIov9mdH7JBG+s0UyNAqr0tQ== +ts-jest@^25.0.0: + version "25.0.0" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.0.0.tgz#d83b266e6ffda0c458a129951b3fe3567f8ce8df" + integrity sha512-F+hZg3j7XYOFpXJteXb4lnqy7vQzTmpTmX7AJT6pvSGeZejyXj1Lk0ArpnrEPOpv6Zu/NugHc5W7FINngC9WZQ== dependencies: bs-logger "0.x" buffer-from "1.x" @@ -6047,24 +6233,33 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + type-fest@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + typescript@~3.6.4: version "3.6.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.4.tgz#b18752bb3792bc1a0281335f7f6ebf1bbfc5b91d" integrity sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg== -uglify-js@^3.1.4: - version "3.7.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.3.tgz#f918fce9182f466d5140f24bb0ff35c2d32dcc6a" - integrity sha512-7tINm46/3puUA4hCkKYo4Xdts+JDaVC9ZPRcG8Xw9R4nhO/gZgUM3TENq8IF4Vatk8qCig4MzP/c8G4u2BkVQg== - dependencies: - commander "~2.20.3" - source-map "~0.6.1" - unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -6163,11 +6358,6 @@ 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" @@ -6191,6 +6381,15 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== +v8-to-istanbul@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.0.1.tgz#d6a2a3823b8ff49bdf2167ff2a45d82dff81d02f" + integrity sha512-x0yZvZAkjJwdD3fPiJzYP37aod0ati4LlmD2RmpKjqewjKAov/u/ytZ8ViIZb07cN4cePKzl9ijiUi7C1LQ8hQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -6215,6 +6414,15 @@ w3c-hr-time@^1.0.1: dependencies: browser-process-hrtime "^0.1.2" +w3c-xmlserializer@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" + integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== + dependencies: + domexception "^1.0.1" + webidl-conversions "^4.0.2" + xml-name-validator "^3.0.0" + walker@^1.0.7, walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -6227,27 +6435,18 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: iconv-lite "0.4.24" -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: +whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url@^6.4.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-url@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" @@ -6262,19 +6461,19 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.9, which@^1.3.0: +which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: - string-width "^1.0.2 || 2" + isexe "^2.0.0" widest-line@^2.0.0: version "2.0.1" @@ -6283,11 +6482,6 @@ widest-line@^2.0.0: dependencies: string-width "^2.1.1" -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= - wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -6301,29 +6495,20 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" - integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - write-file-atomic@^2.0.0: version "2.4.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" @@ -6333,6 +6518,16 @@ write-file-atomic@^2.0.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write-file-atomic@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.1.tgz#558328352e673b5bb192cf86500d60b230667d4b" + integrity sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + write-json-file@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" @@ -6352,12 +6547,10 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" -ws@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== - dependencies: - async-limiter "~1.0.0" +ws@^7.0.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.1.tgz#03ed52423cd744084b2cf42ed197c8b65a936b8e" + integrity sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A== wsrun@^5.0.2: version "5.0.2" @@ -6383,6 +6576,11 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xmlchars@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" @@ -6398,11 +6596,6 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -6415,10 +6608,10 @@ yargs-parser@10.x: dependencies: camelcase "^4.1.0" -yargs-parser@^13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== +yargs-parser@^16.1.0: + version "16.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-16.1.0.tgz#73747d53ae187e7b8dbe333f95714c76ea00ecf1" + integrity sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" @@ -6448,21 +6641,22 @@ yargs@^10.0.3: y18n "^3.2.1" yargs-parser "^8.1.0" -yargs@^13.3.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" - integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== +yargs@^15.0.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.1.0.tgz#e111381f5830e863a89550bd4b136bb6a5f37219" + integrity sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg== dependencies: - cliui "^5.0.0" - find-up "^3.0.0" + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" get-caller-file "^2.0.1" require-directory "^2.1.1" require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^3.0.0" + string-width "^4.2.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^13.1.1" + yargs-parser "^16.1.0" yarn-version-bump@^0.0.3: version "0.0.3" From 7e06fdc664861ccfff744d6fd4ce371cfaaa5856 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 23 Jan 2020 16:23:52 +0100 Subject: [PATCH 174/266] Bump babel from 7.6.3 to 7.8.3 and core-js from 3.2.1 to 3.6.4 --- package.json | 6 +- yarn.lock | 991 ++++++++++++++++++++++++++------------------------- 2 files changed, 510 insertions(+), 487 deletions(-) diff --git a/package.json b/package.json index 0e0b6bc..d30e51f 100644 --- a/package.json +++ b/package.json @@ -17,8 +17,8 @@ "node": ">=10.13.0" }, "devDependencies": { - "@babel/core": "^7.6.3", - "@babel/preset-env": "^7.6.3", + "@babel/core": "^7.8.3", + "@babel/preset-env": "^7.8.3", "@types/dedent": "^0.7.0", "@types/highlightjs": "^9.12.0", "@types/jest": "^24.9.0", @@ -30,7 +30,7 @@ "ansi_up": "^4.0.4", "arrify": "^2.0.1", "common-path-prefix": "^3.0.0", - "core-js": "^3.2.1", + "core-js": "^3.6.4", "csso-cli": "^3.0.0", "dedent": "^0.7.0", "eslint": "^6.5.1", diff --git a/yarn.lock b/yarn.lock index 2a8eaaa..11936e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16,6 +16,15 @@ dependencies: "@babel/highlight" "^7.8.3" +"@babel/compat-data@^7.8.0", "@babel/compat-data@^7.8.1": + version "7.8.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.1.tgz#fc0bbbb7991e4fb2b47e168e60f2cc2c41680be9" + integrity sha512-Z+6ZOXvyOWYxJ50BwxzdhRnRsGST8Y3jaZgxYig575lTjVSs3KtJnmESwZegg6e2Dn0td1eDhoWlp1wI4BTCPw== + dependencies: + browserslist "^4.8.2" + invariant "^2.2.4" + semver "^5.5.0" + "@babel/core@^7.1.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.0.tgz#9b00f73554edd67bebc86df8303ef678be3d7b48" @@ -36,27 +45,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.6.3": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff" - integrity sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.4" - "@babel/helpers" "^7.6.2" - "@babel/parser" "^7.6.4" - "@babel/template" "^7.6.0" - "@babel/traverse" "^7.6.3" - "@babel/types" "^7.6.3" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.7.5": +"@babel/core@^7.7.5", "@babel/core@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.3.tgz#30b0ebb4dd1585de6923a0b4d179e0b9f5d82941" integrity sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA== @@ -88,16 +77,6 @@ source-map "^0.5.0" trim-right "^1.0.1" -"@babel/generator@^7.6.3", "@babel/generator@^7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671" - integrity sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w== - dependencies: - "@babel/types" "^7.6.3" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - "@babel/generator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.3.tgz#0e22c005b0a94c1c74eafe19ef78ce53a4d45c03" @@ -108,46 +87,65 @@ lodash "^4.17.13" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== +"@babel/helper-annotate-as-pure@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" + integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.8.3" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" - integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" + integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-explode-assignable-expression" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-call-delegate@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" - integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== +"@babel/helper-call-delegate@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz#de82619898aa605d409c42be6ffb8d7204579692" + integrity sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/traverse" "^7.4.4" - "@babel/types" "^7.4.4" + "@babel/helper-hoist-variables" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-define-map@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369" - integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg== +"@babel/helper-compilation-targets@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.3.tgz#2deedc816fd41dca7355ef39fd40c9ea69f0719a" + integrity sha512-JLylPCsFjhLN+6uBSSh3iYdxKdeO9MNmoY96PE/99d8kyBFaXLORtAVhqN6iHa+wtPeqxKLghDOZry0+Aiw9Tw== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/types" "^7.5.5" + "@babel/compat-data" "^7.8.1" + browserslist "^4.8.2" + invariant "^2.2.4" + levenary "^1.1.0" + semver "^5.5.0" + +"@babel/helper-create-regexp-features-plugin@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz#c774268c95ec07ee92476a3862b75cc2839beb79" + integrity sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q== + dependencies: + "@babel/helper-regex" "^7.8.3" + regexpu-core "^4.6.0" + +"@babel/helper-define-map@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" + integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== + dependencies: + "@babel/helper-function-name" "^7.8.3" + "@babel/types" "^7.8.3" lodash "^4.17.13" -"@babel/helper-explode-assignable-expression@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" - integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== +"@babel/helper-explode-assignable-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" + integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== dependencies: - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" "@babel/helper-function-name@^7.1.0": version "7.1.0" @@ -181,19 +179,19 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-hoist-variables@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" - integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== +"@babel/helper-hoist-variables@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" + integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== dependencies: - "@babel/types" "^7.4.4" + "@babel/types" "^7.8.3" -"@babel/helper-member-expression-to-functions@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590" - integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA== +"@babel/helper-member-expression-to-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" + integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== dependencies: - "@babel/types" "^7.5.5" + "@babel/types" "^7.8.3" "@babel/helper-module-imports@^7.0.0": version "7.0.0" @@ -202,70 +200,77 @@ dependencies: "@babel/types" "^7.0.0" -"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a" - integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw== +"@babel/helper-module-imports@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" + integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/types" "^7.5.5" + "@babel/types" "^7.8.3" + +"@babel/helper-module-transforms@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz#d305e35d02bee720fbc2c3c3623aa0c316c01590" + integrity sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-simple-access" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" lodash "^4.17.13" -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== +"@babel/helper-optimise-call-expression@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" + integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.8.3" "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== -"@babel/helper-plugin-utils@^7.8.0": +"@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== -"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" - integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== +"@babel/helper-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" + integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== dependencies: lodash "^4.17.13" -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== +"@babel/helper-remap-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" + integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-wrap-function" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-replace-supers@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2" - integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg== +"@babel/helper-replace-supers@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz#91192d25f6abbcd41da8a989d4492574fb1530bc" + integrity sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA== dependencies: - "@babel/helper-member-expression-to-functions" "^7.5.5" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== +"@babel/helper-simple-access@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" + integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" "@babel/helper-split-export-declaration@^7.4.4": version "7.4.4" @@ -281,15 +286,15 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== +"@babel/helper-wrap-function@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" + integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" + "@babel/helper-function-name" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" "@babel/helpers@^7.6.0": version "7.6.0" @@ -300,15 +305,6 @@ "@babel/traverse" "^7.6.0" "@babel/types" "^7.6.0" -"@babel/helpers@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.2.tgz#681ffe489ea4dcc55f23ce469e58e59c1c045153" - integrity sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA== - dependencies: - "@babel/template" "^7.6.0" - "@babel/traverse" "^7.6.2" - "@babel/types" "^7.6.0" - "@babel/helpers@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.3.tgz#382fbb0382ce7c4ce905945ab9641d688336ce85" @@ -341,72 +337,82 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.0.tgz#3e05d0647432a8326cb28d0de03895ae5a57f39b" integrity sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ== -"@babel/parser@^7.6.3", "@babel/parser@^7.6.4": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" - integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A== - "@babel/parser@^7.7.5", "@babel/parser@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.3.tgz#790874091d2001c9be6ec426c2eed47bc7679081" integrity sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ== -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== +"@babel/plugin-proposal-async-generator-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" + integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-dynamic-import@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506" - integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw== +"@babel/plugin-proposal-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" + integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" - integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== +"@babel/plugin-proposal-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" + integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-object-rest-spread@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096" - integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" + integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== +"@babel/plugin-proposal-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz#eb5ae366118ddca67bed583b53d7554cad9951bb" + integrity sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz#05413762894f41bfe42b9a5e80919bd575dcc802" - integrity sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw== +"@babel/plugin-proposal-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" + integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== +"@babel/plugin-proposal-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz#ae10b3214cb25f7adb1f3bc87ba42ca10b7e2543" + integrity sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz#b646c3adea5f98800c9ab45105ac34d06cd4a47f" + integrity sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.0.0": version "7.8.3" @@ -415,334 +421,368 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-dynamic-import@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" - integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== +"@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-json-strings@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" - integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0": +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-object-rest-spread@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== +"@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" - integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-transform-async-to-generator@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e" - integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg== +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" - integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" + integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-block-scoping@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz#6e854e51fbbaa84351b15d4ddafe342f3a5d542a" - integrity sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw== +"@babel/plugin-transform-arrow-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" + integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-async-to-generator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" + integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-remap-async-to-generator" "^7.8.3" + +"@babel/plugin-transform-block-scoped-functions@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" + integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-block-scoping@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" + integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9" - integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg== +"@babel/plugin-transform-classes@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz#46fd7a9d2bb9ea89ce88720477979fe0d71b21b8" + integrity sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.5.5" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" - "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-define-map" "^7.8.3" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" - integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== +"@babel/plugin-transform-computed-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" + integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-destructuring@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" - integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== +"@babel/plugin-transform-destructuring@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz#20ddfbd9e4676906b1056ee60af88590cc7aaa0b" + integrity sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-dotall-regex@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz#44abb948b88f0199a627024e1508acaf8dc9b2f9" - integrity sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA== +"@babel/plugin-transform-dotall-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" + integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-duplicate-keys@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853" - integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ== +"@babel/plugin-transform-duplicate-keys@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" + integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" - integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== +"@babel/plugin-transform-exponentiation-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" + integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-for-of@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" - integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== +"@babel/plugin-transform-for-of@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.3.tgz#15f17bce2fc95c7d59a24b299e83e81cedc22e18" + integrity sha512-ZjXznLNTxhpf4Q5q3x1NsngzGA38t9naWH8Gt+0qYZEJAcvPI9waSStSh56u19Ofjr7QmD0wUsQ8hw8s/p1VnA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-function-name@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" - integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== +"@babel/plugin-transform-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" + integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" - integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== +"@babel/plugin-transform-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" + integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-member-expression-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" - integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== +"@babel/plugin-transform-member-expression-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" + integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-modules-amd@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91" - integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg== +"@babel/plugin-transform-modules-amd@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz#65606d44616b50225e76f5578f33c568a0b876a5" + integrity sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ== dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486" - integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g== +"@babel/plugin-transform-modules-commonjs@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz#df251706ec331bd058a34bdd72613915f82928a5" + integrity sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg== dependencies: - "@babel/helper-module-transforms" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-simple-access" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-systemjs@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249" - integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg== +"@babel/plugin-transform-modules-systemjs@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz#d8bbf222c1dbe3661f440f2f00c16e9bb7d0d420" + integrity sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-hoist-variables" "^7.8.3" + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-umd@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" - integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== +"@babel/plugin-transform-modules-umd@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz#592d578ce06c52f5b98b02f913d653ffe972661a" + integrity sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw== dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-module-transforms" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-named-capturing-groups-regex@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.3.tgz#aaa6e409dd4fb2e50b6e2a91f7e3a3149dbce0cf" - integrity sha512-jTkk7/uE6H2s5w6VlMHeWuH+Pcy2lmdwFoeWCVnvIrDUnB5gQqTVI8WfmEAhF2CDEarGrknZcmSFg1+bkfCoSw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" + integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== dependencies: - regexpu-core "^4.6.0" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" -"@babel/plugin-transform-new-target@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" - integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== +"@babel/plugin-transform-new-target@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" + integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-object-super@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9" - integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ== +"@babel/plugin-transform-object-super@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" + integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.3" -"@babel/plugin-transform-parameters@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" - integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== +"@babel/plugin-transform-parameters@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.3.tgz#7890576a13b17325d8b7d44cb37f21dc3bbdda59" + integrity sha512-/pqngtGb54JwMBZ6S/D3XYylQDFtGjWrnoCF4gXZOUpFV/ujbxnoNGNvDGu6doFWRPBveE72qTx/RRU44j5I/Q== dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-call-delegate" "^7.8.3" + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-property-literals@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" - integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== +"@babel/plugin-transform-property-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" + integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-regenerator@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" - integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== +"@babel/plugin-transform-regenerator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz#b31031e8059c07495bf23614c97f3d9698bc6ec8" + integrity sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA== dependencies: regenerator-transform "^0.14.0" -"@babel/plugin-transform-reserved-words@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" - integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== +"@babel/plugin-transform-reserved-words@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" + integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" - integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== +"@babel/plugin-transform-shorthand-properties@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" + integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-spread@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd" - integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg== +"@babel/plugin-transform-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" + integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" - integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== +"@babel/plugin-transform-sticky-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" + integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-regex" "^7.8.3" -"@babel/plugin-transform-template-literals@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" - integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== +"@babel/plugin-transform-template-literals@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" + integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-annotate-as-pure" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" - integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== +"@babel/plugin-transform-typeof-symbol@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.3.tgz#5cffb216fb25c8c64ba6bf5f76ce49d3ab079f4d" + integrity sha512-3TrkKd4LPqm4jHs6nPtSDI/SV9Cm5PRJkHLUgTcqRQQTMAZ44ZaAdDZJtvWFSaRcvT0a1rTmJ5ZA5tDKjleF3g== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-unicode-regex@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz#b692aad888a7e8d8b1b214be6b9dc03d5031f698" - integrity sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw== +"@babel/plugin-transform-unicode-regex@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" + integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" + "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" -"@babel/preset-env@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.3.tgz#9e1bf05a2e2d687036d24c40e4639dc46cef2271" - integrity sha512-CWQkn7EVnwzlOdR5NOm2+pfgSNEZmvGjOhlCHBDq0J8/EStr+G+FvPEiz9B56dR6MoiUFjXhfE4hjLoAKKJtIQ== +"@babel/preset-env@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.3.tgz#dc0fb2938f52bbddd79b3c861a4b3427dd3a6c54" + integrity sha512-Rs4RPL2KjSLSE2mWAx5/iCH+GC1ikKdxPrhnRS6PfFVaiZeom22VFKN4X8ZthyN61kAaR05tfXTbCvatl9WIQg== dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-dynamic-import" "^7.5.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.6.2" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.6.2" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.5.0" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.6.3" - "@babel/plugin-transform-classes" "^7.5.5" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.6.0" - "@babel/plugin-transform-dotall-regex" "^7.6.2" - "@babel/plugin-transform-duplicate-keys" "^7.5.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.4.4" - "@babel/plugin-transform-function-name" "^7.4.4" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-member-expression-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.5.0" - "@babel/plugin-transform-modules-commonjs" "^7.6.0" - "@babel/plugin-transform-modules-systemjs" "^7.5.0" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.3" - "@babel/plugin-transform-new-target" "^7.4.4" - "@babel/plugin-transform-object-super" "^7.5.5" - "@babel/plugin-transform-parameters" "^7.4.4" - "@babel/plugin-transform-property-literals" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.4.5" - "@babel/plugin-transform-reserved-words" "^7.2.0" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.6.2" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.4.4" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.6.2" - "@babel/types" "^7.6.3" - browserslist "^4.6.0" - core-js-compat "^3.1.1" + "@babel/compat-data" "^7.8.0" + "@babel/helper-compilation-targets" "^7.8.3" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-proposal-async-generator-functions" "^7.8.3" + "@babel/plugin-proposal-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-json-strings" "^7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-object-rest-spread" "^7.8.3" + "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.8.3" + "@babel/plugin-transform-async-to-generator" "^7.8.3" + "@babel/plugin-transform-block-scoped-functions" "^7.8.3" + "@babel/plugin-transform-block-scoping" "^7.8.3" + "@babel/plugin-transform-classes" "^7.8.3" + "@babel/plugin-transform-computed-properties" "^7.8.3" + "@babel/plugin-transform-destructuring" "^7.8.3" + "@babel/plugin-transform-dotall-regex" "^7.8.3" + "@babel/plugin-transform-duplicate-keys" "^7.8.3" + "@babel/plugin-transform-exponentiation-operator" "^7.8.3" + "@babel/plugin-transform-for-of" "^7.8.3" + "@babel/plugin-transform-function-name" "^7.8.3" + "@babel/plugin-transform-literals" "^7.8.3" + "@babel/plugin-transform-member-expression-literals" "^7.8.3" + "@babel/plugin-transform-modules-amd" "^7.8.3" + "@babel/plugin-transform-modules-commonjs" "^7.8.3" + "@babel/plugin-transform-modules-systemjs" "^7.8.3" + "@babel/plugin-transform-modules-umd" "^7.8.3" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.8.3" + "@babel/plugin-transform-object-super" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.8.3" + "@babel/plugin-transform-property-literals" "^7.8.3" + "@babel/plugin-transform-regenerator" "^7.8.3" + "@babel/plugin-transform-reserved-words" "^7.8.3" + "@babel/plugin-transform-shorthand-properties" "^7.8.3" + "@babel/plugin-transform-spread" "^7.8.3" + "@babel/plugin-transform-sticky-regex" "^7.8.3" + "@babel/plugin-transform-template-literals" "^7.8.3" + "@babel/plugin-transform-typeof-symbol" "^7.8.3" + "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/types" "^7.8.3" + browserslist "^4.8.2" + core-js-compat "^3.6.2" invariant "^2.2.2" - js-levenshtein "^1.1.3" + levenary "^1.1.0" semver "^5.5.0" "@babel/runtime@^7.7.6": @@ -752,7 +792,7 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/template@^7.1.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": +"@babel/template@^7.1.0", "@babel/template@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== @@ -785,21 +825,6 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9" - integrity sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.3" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.6.3" - "@babel/types" "^7.6.3" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.3.tgz#a826215b011c9b4f73f3a893afbc05151358bf9a" @@ -824,15 +849,6 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" -"@babel/types@^7.2.0", "@babel/types@^7.5.5", "@babel/types@^7.6.3": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" - integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - "@babel/types@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" @@ -1673,14 +1689,14 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" -browserslist@^4.6.0, browserslist@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.1.tgz#bd400d1aea56538580e8c4d5f1c54ac11b5ab468" - integrity sha512-QtULFqKIAtiyNx7NhZ/p4rB8m3xDozVo/pi5VgTlADLF2tNigz/QH+v0m5qhn7XfHT7u+607NcCNOnC0HZAlMg== +browserslist@^4.8.2, browserslist@^4.8.3: + version "4.8.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.5.tgz#691af4e327ac877b25e7a3f7ee869c4ef36cdea3" + integrity sha512-4LMHuicxkabIB+n9874jZX/az1IaZ5a+EUuvD7KFOu9x/Bd5YHyO0DIz2ls/Kl8g0ItS4X/ilEgf4T1Br0lgSg== dependencies: - caniuse-lite "^1.0.30000999" - electron-to-chromium "^1.3.284" - node-releases "^1.1.36" + caniuse-lite "^1.0.30001022" + electron-to-chromium "^1.3.338" + node-releases "^1.1.46" bs-logger@0.x: version "0.2.6" @@ -1741,10 +1757,10 @@ 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-lite@^1.0.30000999: - version "1.0.30001002" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001002.tgz#ba999a737b1abd5bf0fd47efe43a09b9cadbe9b0" - integrity sha512-pRuxPE8wdrWmVPKcDmJJiGBxr6lFJq4ivdSeo9FTmGj5Rb8NX3Mby2pARG57MXF15hYAhZ0nHV5XxT2ig4bz3g== +caniuse-lite@^1.0.30001022: + version "1.0.30001022" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001022.tgz#9eeffe580c3a8f110b7b1742dcf06a395885e4c6" + integrity sha512-FjwPPtt/I07KyLPkBQ0g7/XuZg6oUkYBVnPHNj3VHJbOjmmJ/GdSo/GUY6MwINEQvjhP6WZVbX8Tvms8xh0D5A== capture-exit@^2.0.0: version "2.0.0" @@ -2024,18 +2040,18 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.1.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.3.3.tgz#82642808cf484a35292b2f8e83ef9376884e760f" - integrity sha512-GNZkENsx5pMnS7Inwv7ZO/s3B68a9WU5kIjxqrD/tkNR8mtfXJRk8fAKRlbvWZSGPc59/TkiOBDYl5Cb65pTVA== +core-js-compat@^3.6.2: + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" + integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA== dependencies: - browserslist "^4.7.1" - semver "^6.3.0" + browserslist "^4.8.3" + semver "7.0.0" -core-js@^3.2.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.3.3.tgz#b7048d3c6c1a52b5fe55a729c1d4ccdffe0891bb" - integrity sha512-0xmD4vUJRY8nfLyV9zcpC17FtSie5STXzw+HyYw2t8IIvmDnbq7RJUULECCo+NstpJtwK9kx8S+898iyqgeUow== +core-js@^3.6.4: + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647" + integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw== core-util-is@1.0.2: version "1.0.2" @@ -2294,10 +2310,10 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.284: - version "1.3.293" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.293.tgz#e52a30026b89276e211be36083a4d7136fd480ea" - integrity sha512-DQSBRuU2Z1vG+CEWUIfCEVMHtuaGlhVojzg39mX5dx7PLSFDJ7DSrGUWzaPFFgWR1jo26hj1nXXRQZvFwk7F8w== +electron-to-chromium@^1.3.338: + version "1.3.340" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.340.tgz#5d4fe78e984d4211194cf5a52e08069543da146f" + integrity sha512-hRFBAglhcj5iVYH+o8QU0+XId1WGoc0VGowJB1cuJAt3exHGrivZvWeAO5BRgBZqwZtwxjm8a5MQeGoT/Su3ww== emoji-regex@^7.0.1: version "7.0.3" @@ -3194,7 +3210,7 @@ inquirer@^6.4.1: strip-ansi "^5.1.0" through "^2.3.6" -invariant@^2.2.2: +invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -3906,11 +3922,6 @@ jest@^25.1.0: import-local "^3.0.2" jest-cli "^25.1.0" -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -4089,6 +4100,13 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== +levenary@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.0.tgz#fc146fe75f32dc483a0a2c64aef720f602cd6210" + integrity sha512-VHcwhO0UTpUW7rLPN2/OiWJdgA1e9BqEDALhrgCe/F+uUJnep6CoUsTzMeP8Rh0NGr9uKquXxqe7lwLZo509nQ== + dependencies: + leven "^3.1.0" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -4455,10 +4473,10 @@ node-notifier@^6.0.0: shellwords "^0.1.1" which "^1.3.1" -node-releases@^1.1.36: - version "1.1.38" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.38.tgz#d81b365df2936654ba37f509ba2fbe91eff2578b" - integrity sha512-/5NZAaOyTj134Oy5Cp/J8mso8OD/D9CSuL+6TOXXsTKO8yjc5e4up75SRPCganCjwFKMj2jbp5tR0dViVdox7g== +node-releases@^1.1.46: + version "1.1.47" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.47.tgz#c59ef739a1fd7ecbd9f0b7cf5b7871e8a8b591e4" + integrity sha512-k4xjVPx5FpwBUj0Gw7uvFOTF4Ep8Hok1I6qjwL3pLfwe7Y0REQSAqOwwv9TWBCUtMHxcXfY4PgRLRozcChvTcA== dependencies: semver "^6.3.0" @@ -5455,6 +5473,11 @@ semver-diff@^2.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" From b7d33396fb0726e35e20be92e4236af86ed249c8 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 23 Jan 2020 17:04:05 +0100 Subject: [PATCH 175/266] Bump typescript from 3.6.4 to 3.7.5, ttypescript and ts-node --- package.json | 6 +++--- yarn.lock | 28 ++++++++++++++-------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index d30e51f..1a0bbcc 100644 --- a/package.json +++ b/package.json @@ -60,11 +60,11 @@ "rollup-plugin-typescript2": "^0.25.3", "tar": "^5.0.5", "ts-jest": "^25.0.0", - "ts-node": "^8.4.1", + "ts-node": "^8.6.2", "ts-transformer-export-default-name": "^0.1.0", "ts-transformer-inline-file": "^0.1.1", - "ttypescript": "^1.5.7", - "typescript": "~3.6.4", + "ttypescript": "^1.5.10", + "typescript": "~3.7.5", "wsrun": "^5.0.2", "yarn-version-bump": "^0.0.3", "yazl": "^2.5.1" diff --git a/yarn.lock b/yarn.lock index 11936e9..ff25155 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6185,16 +6185,16 @@ ts-jest@^25.0.0: semver "^5.5" yargs-parser "10.x" -ts-node@^8.4.1: - version "8.4.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.4.1.tgz#270b0dba16e8723c9fa4f9b4775d3810fd994b4f" - integrity sha512-5LpRN+mTiCs7lI5EtbXmF/HfMeCjzt7DH9CZwtkr6SywStrNQC723wG+aOWFiLNn7zT3kD/RnFqi3ZUfr4l5Qw== +ts-node@^8.6.2: + version "8.6.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.6.2.tgz#7419a01391a818fbafa6f826a33c1a13e9464e35" + integrity sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg== dependencies: arg "^4.1.0" diff "^4.0.1" make-error "^1.1.1" source-map-support "^0.5.6" - yn "^3.0.0" + yn "3.1.1" ts-transformer-export-default-name@^0.1.0: version "0.1.0" @@ -6230,10 +6230,10 @@ tsutils@^3.17.1: dependencies: tslib "^1.8.1" -ttypescript@^1.5.7: - version "1.5.7" - resolved "https://registry.yarnpkg.com/ttypescript/-/ttypescript-1.5.7.tgz#76bb96765b331194b58a4e7d79fae82b886fc29a" - integrity sha512-qloW8S60+xWVC2bQWldYQfESNFkIgDL5/M+vAOOsuLJ1pQu0SG2vQx5DNJO2nlwSrHxD8cDuF2sVDXg6v3GG3Q== +ttypescript@^1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/ttypescript/-/ttypescript-1.5.10.tgz#5045083a91cf09a735ecc95d4711c1f3b83f2059" + integrity sha512-Hk7TRej1hM+p+Fo+Pyb/XK9pe9CAt3Sh5n5YRutxFS8hUgkh2u1Vd2K40kMcNP3WYhiVFBMqXwM/2E8O95Ep6g== dependencies: resolve "^1.9.0" @@ -6278,10 +6278,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@~3.6.4: - version "3.6.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.4.tgz#b18752bb3792bc1a0281335f7f6ebf1bbfc5b91d" - integrity sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg== +typescript@~3.7.5: + version "3.7.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" + integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw== unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -6696,7 +6696,7 @@ yazl@^2.5.1: dependencies: buffer-crc32 "~0.2.3" -yn@^3.0.0: +yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== From fd5d79319cfd47ec401bf3029995db8c9615c5ff Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 23 Jan 2020 17:23:14 +0100 Subject: [PATCH 176/266] Bump eslint and its plugins, fix new code-style violations --- .eslintrc.js | 9 + package.json | 12 +- packages/ipynb2html-cli/src/cli.ts | 2 +- packages/ipynb2html-cli/src/index.ts | 2 +- packages/ipynb2html-core/src/htmlRenderer.ts | 2 +- packages/ipynb2html-core/src/mathExtractor.ts | 2 +- packages/ipynb2html-core/src/renderer.ts | 12 +- .../test/mathExtractor.test.ts | 16 +- packages/ipynb2html/src/browser.ts | 2 +- test/support/matchers/toMatchElement.ts | 2 +- yarn.lock | 418 ++++++++++-------- 11 files changed, 270 insertions(+), 209 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 2d0f905..2ac9470 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -118,6 +118,8 @@ module.exports = { '@typescript-eslint/promise-function-async': ['error', { allowAny: true, }], + // It has too many false positives. + '@typescript-eslint/restrict-template-expressions': 'off', '@typescript-eslint/semi': ['error', 'never'], '@typescript-eslint/strict-boolean-expressions': 'off', }, @@ -127,6 +129,13 @@ module.exports = { rules: { // Allow to format arrays for parametrized tests as tables. 'array-bracket-spacing': 'off', + 'comma-dangle': ['error', { + arrays: 'always-multiline', + objects: 'always-multiline', + imports: 'always-multiline', + exports: 'always-multiline', + functions: 'only-multiline', + }], 'comma-spacing': 'off', 'object-curly-spacing': 'off', 'no-multi-spaces': 'off', diff --git a/package.json b/package.json index 1a0bbcc..17d21b3 100644 --- a/package.json +++ b/package.json @@ -25,19 +25,19 @@ "@types/katex": "^0.11.0", "@types/marked": "^0.7.2", "@types/node": "^10.13.0", - "@typescript-eslint/eslint-plugin": "^2.4.0", - "@typescript-eslint/parser": "^2.4.0", + "@typescript-eslint/eslint-plugin": "^2.17.0", + "@typescript-eslint/parser": "^2.17.0", "ansi_up": "^4.0.4", "arrify": "^2.0.1", "common-path-prefix": "^3.0.0", "core-js": "^3.6.4", "csso-cli": "^3.0.0", "dedent": "^0.7.0", - "eslint": "^6.5.1", - "eslint-config-standard-with-typescript": "^10.0.0", + "eslint": "^6.8.0", + "eslint-config-standard-with-typescript": "^12.0.1", "eslint-import-resolver-ts": "^0.4.0", - "eslint-plugin-import": "^2.18.0", - "eslint-plugin-node": "^10.0.0", + "eslint-plugin-import": "^2.20.0", + "eslint-plugin-node": "^11.0.0", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-standard": "^4.0.0", "fs-extra": "^8.1.0", diff --git a/packages/ipynb2html-cli/src/cli.ts b/packages/ipynb2html-cli/src/cli.ts index 92084fc..d7d0f6f 100644 --- a/packages/ipynb2html-cli/src/cli.ts +++ b/packages/ipynb2html-cli/src/cli.ts @@ -85,7 +85,7 @@ export default (argv: string[]): void => { try { const notebook = JSON.parse(fs.readFileSync(opts.input, 'utf-8')) - const title = ipynb2html.readNotebookTitle(notebook) || 'Notebook' + const title = ipynb2html.readNotebookTitle(notebook) ?? 'Notebook' const renderNotebook = ipynb2html.createRenderer(new Document()) const contents = renderNotebook(notebook).outerHTML diff --git a/packages/ipynb2html-cli/src/index.ts b/packages/ipynb2html-cli/src/index.ts index 7149bad..131417f 100644 --- a/packages/ipynb2html-cli/src/index.ts +++ b/packages/ipynb2html-cli/src/index.ts @@ -3,7 +3,7 @@ import sourceMapSupport from 'source-map-support' import cli from './cli' // Allow to disable sourcemap when running from pkg bundle. -if (!/^(0|disable|false|no|off)$/i.test(process.env.NODE_SOURCEMAP || '')) { +if (!/^(0|disable|false|no|off)$/i.test(process.env.NODE_SOURCEMAP ?? '')) { sourceMapSupport.install({ environment: 'node' }) } diff --git a/packages/ipynb2html-core/src/htmlRenderer.ts b/packages/ipynb2html-core/src/htmlRenderer.ts index 28ac8ff..69c00f5 100644 --- a/packages/ipynb2html-core/src/htmlRenderer.ts +++ b/packages/ipynb2html-core/src/htmlRenderer.ts @@ -16,7 +16,7 @@ export default (opts: Options): DataRenderer => { const { elementCreator: el, mathRenderer: renderMath } = opts return (data: string): TElement => { - const math = (extractMathRx.exec(data) || [])[1] + const math = (extractMathRx.exec(data) ?? [])[1] return math ? el('div', ['latex-output'], renderMath(math)) : el('div', ['html-output'], data) diff --git a/packages/ipynb2html-core/src/mathExtractor.ts b/packages/ipynb2html-core/src/mathExtractor.ts index 2e4b774..88ca4da 100644 --- a/packages/ipynb2html-core/src/mathExtractor.ts +++ b/packages/ipynb2html-core/src/mathExtractor.ts @@ -191,7 +191,7 @@ export function extractMath (text: string): [string, MathExpression[]] { } } if (lastIdx) { - processMath(unescape, math, blocks, startIdx || 0, lastIdx) + processMath(unescape, math, blocks, startIdx ?? 0, lastIdx) startIdx = endDelim = lastIdx = null } return [unescape(blocks.join('')), math.map(parseDelimitedMath)] diff --git a/packages/ipynb2html-core/src/renderer.ts b/packages/ipynb2html-core/src/renderer.ts index 1fec24a..9914444 100644 --- a/packages/ipynb2html-core/src/renderer.ts +++ b/packages/ipynb2html-core/src/renderer.ts @@ -83,7 +83,7 @@ function executionCountAttrs ({ execution_count: count }: CodeCell): { [k: strin } function notebookLanguage ({ metadata: meta }: Notebook): string { - return (meta.language_info && meta.language_info.name) || 'python' + return meta.language_info?.name ?? 'python' } class NbRenderer extends CallableInstance> { @@ -111,9 +111,9 @@ class NbRenderer extends CallableInstance> { super() this.el = elementCreator - this.renderMarkdown = opts.markdownRenderer || identity - this.renderAnsiCodes = opts.ansiCodesRenderer || escapeHTML - this.highlightCode = opts.codeHighlighter || escapeHTML + this.renderMarkdown = opts.markdownRenderer ?? identity + this.renderAnsiCodes = opts.ansiCodesRenderer ?? escapeHTML + this.highlightCode = opts.codeHighlighter ?? escapeHTML const el2 = (tag: string, classes: string[]) => (data: string) => this.el(tag, classes, data) @@ -138,7 +138,7 @@ class NbRenderer extends CallableInstance> { 'text/plain': (data) => this.el('pre', ['text-output'], escapeHTML(data)), ...opts.dataRenderers, } - this.dataTypesPriority = opts.dataTypesPriority || Object.keys(this.dataRenderers) + this.dataTypesPriority = opts.dataTypesPriority ?? Object.keys(this.dataRenderers) } /** @@ -177,7 +177,7 @@ class NbRenderer extends CallableInstance> { ? this.renderSource(cell, notebook) : this.el('div') - const outputs = coalesceStreams(cell.outputs || []) + const outputs = coalesceStreams(cell.outputs ?? []) .map(output => this.renderOutput(output, cell)) return this.el('div', ['cell', 'code-cell'], [source, ...outputs]) diff --git a/packages/ipynb2html-core/test/mathExtractor.test.ts b/packages/ipynb2html-core/test/mathExtractor.test.ts index f5a2825..76a01da 100644 --- a/packages/ipynb2html-core/test/mathExtractor.test.ts +++ b/packages/ipynb2html-core/test/mathExtractor.test.ts @@ -20,7 +20,7 @@ describe('.extractMath', () => { it('extracts and substitutes math expression in the given text', () => { expect( - extractMath(`Let's define ${raw}.`) + extractMath(`Let's define ${raw}.`), ).toEqual(["Let's define @@1@@.", [{ displayMode, raw, value }]]) }) }) @@ -31,7 +31,7 @@ describe('.extractMath', () => { it('extracts and substitutes math expression in the given text', () => { expect( - extractMath(`Let's define ${raw}.`) + extractMath(`Let's define ${raw}.`), ).toEqual(["Let's define @@1@@.", [{ displayMode, raw, value }]]) }) }) @@ -43,7 +43,7 @@ describe('.extractMath', () => { it('extracts and substitutes math expression in the given text', () => { expect( - extractMath(`Let's define ${raw}.`) + extractMath(`Let's define ${raw}.`), ).toEqual(["Let's define @@1@@.", [{ displayMode: true, raw, value: raw }]]) }) }) @@ -52,14 +52,14 @@ describe('.extractMath', () => { it('escapes @@[0-9]+@@ as @@0[0-9]+@@', () => { expect( - extractMath('This @@02@@ is not our marker') + extractMath('This @@02@@ is not our marker'), ).toEqual(['This @@002@@ is not our marker', []]) }) }) it('ignores math delimiters inside `inline code`', () => { expect( - extractMath('`$x$` and ``$`x`$`` is a code, $x$ is not') + extractMath('`$x$` and ``$`x`$`` is a code, $x$ is not'), ).toEqual([ '`$x$` and ``$`x`$`` is a code, @@1@@ is not', [{ displayMode: false, raw: '$x$', value: 'x' }], @@ -68,7 +68,7 @@ describe('.extractMath', () => { it('ignores math delimiters inside `inline code` with line breaks', () => { expect( - extractMath('`$x\n$` and ``\n$`x`$\n`` is a code, `$x$\n\nis` not') + extractMath('`$x\n$` and ``\n$`x`$\n`` is a code, `$x$\n\nis` not'), ).toEqual([ '`$x\n$` and ``\n$`x`$\n`` is a code, `@@1@@\n\nis` not', [{ displayMode: false, raw: '$x$', value: 'x' }], @@ -135,13 +135,13 @@ describe('.restoreMath', () => { repl[21] = 'second' expect( - restoreMath("Let's define @@1@@ and @@22@@.", repl) + restoreMath("Let's define @@1@@ and @@22@@.", repl), ).toEqual("Let's define first and second.") }) it('unescapes marker-like sequences', () => { expect( - restoreMath('This @@001@@ is not our marker, nor @@01@@, but @@1@@ is.', ['this one']) + restoreMath('This @@001@@ is not our marker, nor @@01@@, but @@1@@ is.', ['this one']), ).toEqual('This @@01@@ is not our marker, nor @@1@@, but this one is.') }) }) diff --git a/packages/ipynb2html/src/browser.ts b/packages/ipynb2html/src/browser.ts index 1056f96..977d56b 100644 --- a/packages/ipynb2html/src/browser.ts +++ b/packages/ipynb2html/src/browser.ts @@ -7,7 +7,7 @@ function unescapeHTML (input: string): string { return new DOMParser() .parseFromString(input, 'text/html') .documentElement - .textContent || '' + .textContent ?? '' } /** diff --git a/test/support/matchers/toMatchElement.ts b/test/support/matchers/toMatchElement.ts index ed043a4..fcb8930 100644 --- a/test/support/matchers/toMatchElement.ts +++ b/test/support/matchers/toMatchElement.ts @@ -52,7 +52,7 @@ function clearAttributes (node: Node): void { export function toMatchElement (received: HTMLElement, expected: HTMLElement, opts?: Options): MatcherResult { received = received.cloneNode(true) as HTMLElement - if (opts && opts.ignoreAttrs) { + if (opts?.ignoreAttrs) { clearAttributes(received) } filterWildcardChildren(received, expected) diff --git a/yarn.lock b/yarn.lock index ff25155..7e43727 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1226,75 +1226,48 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.4.0.tgz#aaf6b542ff75b78f4191a8bf1c519184817caa24" - integrity sha512-se/YCk7PUoyMwSm/u3Ii9E+BgDUc736uw/lXCDpXEqRgPGsoBTtS8Mntue/vZX8EGyzGplYuePBuVyhZDM9EpQ== +"@typescript-eslint/eslint-plugin@^2.17.0": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.17.0.tgz#880435a9f9bdd50b45fa286ba63fed723d73c837" + integrity sha512-tg/OMOtPeXlvk0ES8mZzEZ4gd1ruSE03nsKcK+teJhxYv5CPCXK6Mb/OK6NpB4+CqGTHs4MVeoSZXNFqpT1PyQ== dependencies: - "@typescript-eslint/experimental-utils" "2.4.0" - eslint-utils "^1.4.2" + "@typescript-eslint/experimental-utils" "2.17.0" + eslint-utils "^1.4.3" functional-red-black-tree "^1.0.1" - regexpp "^2.0.1" + regexpp "^3.0.0" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.3.2.tgz#e50f31264507e6fec7b33840bb6af260c24f4ea8" - integrity sha512-t+JGdTT6dRbmvKDlhlVkEueoZa0fhJNfG6z2cpnRPLwm3VwYr2BjR//acJGC1Yza0I9ZNcDfRY7ubQEvvfG6Jg== +"@typescript-eslint/experimental-utils@2.17.0": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.17.0.tgz#12ed4a5d656e02ff47a93efc7d1ce1b8f1242351" + integrity sha512-2bNf+mZ/3mj5/3CP56v+ldRK3vFy9jOvmCPs/Gr2DeSJh+asPZrhFniv4QmQsHWQFPJFWhFHgkGgJeRmK4m8iQ== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.3.2" + "@typescript-eslint/typescript-estree" "2.17.0" eslint-scope "^5.0.0" -"@typescript-eslint/experimental-utils@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.4.0.tgz#dd8f3f466be25c3610a06fed22cfb6e6aa17f6d9" - integrity sha512-2cvhNaJoWavgTtnC7e1jUSPZQ7e4U2X9Yoy5sQmkS7lTESuyuZrlRcaoNuFfYEd6hgrmMU7+QoSp8Ad+kT1nfA== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.4.0" - eslint-scope "^5.0.0" - -"@typescript-eslint/parser@^2.0.0": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.3.2.tgz#e9b742e191cd1209930da469cde379591ad0af5b" - integrity sha512-nq1UQeNGdKdqdgF6Ww+Ov2OidWgiL96+JYdXXZ2rkP/OWyc6KMNSbs6MpRCpI8q+PmDa7hBnHNQIo7w/drYccA== +"@typescript-eslint/parser@^2.10.0", "@typescript-eslint/parser@^2.17.0": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.17.0.tgz#627f79586d868edbab55f46a6b183cdc341aea1d" + integrity sha512-k1g3gRQ4fwfJoIfgUpz78AovicSWKFANmvTfkAHP24MgJHjWfZI6ya7tsQZt1sLczvP4G9BE5G5MgADHdmJB/w== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.3.2" - "@typescript-eslint/typescript-estree" "2.3.2" + "@typescript-eslint/experimental-utils" "2.17.0" + "@typescript-eslint/typescript-estree" "2.17.0" eslint-visitor-keys "^1.1.0" -"@typescript-eslint/parser@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.4.0.tgz#fe43ed5fec14af03d3594fce2c3b7ec4c8df0243" - integrity sha512-IouAKi/grJ4MFrwdXIJ1GHAwbPWYgkT3b/x8Q49F378c9nwgxVkO76e0rZeUVpwHMaUuoKG2sUeK0XGkwdlwkw== +"@typescript-eslint/typescript-estree@2.17.0": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.17.0.tgz#2ce1531ec0925ef8d22d7026235917c2638a82af" + integrity sha512-g0eVRULGnEEUakxRfJO0s0Hr1LLQqsI6OrkiCLpdHtdJJek+wyd8mb00vedqAoWldeDcOcP8plqw8/jx9Gr3Lw== dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.4.0" - "@typescript-eslint/typescript-estree" "2.4.0" + debug "^4.1.1" eslint-visitor-keys "^1.1.0" - -"@typescript-eslint/typescript-estree@2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.3.2.tgz#107414aa04e689fe6f7251eb63fb500217f2b7f4" - integrity sha512-eZNEAai16nwyhIVIEaWQlaUgAU3S9CkQ58qvK0+3IuSdLJD3W1PNuehQFMIhW/mTP1oFR9GNoTcLg7gtXz6lzA== - dependencies: - glob "^7.1.4" + glob "^7.1.6" is-glob "^4.0.1" - lodash.unescape "4.0.1" - semver "^6.3.0" - -"@typescript-eslint/typescript-estree@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.4.0.tgz#722c95493e1b7682893edaaaec0e69f36917feef" - integrity sha512-/DzDAtMqF5d9IlXrrvu/Id/uoKjnSxf/3FbtKK679a/T7lbDM8qQuirtGvFy6Uh+x0hALuCMwnMfUf0P24/+Iw== - dependencies: - chokidar "^3.0.2" - glob "^7.1.4" - is-glob "^4.0.1" - lodash.unescape "4.0.1" + lodash "^4.17.15" semver "^6.3.0" + tsutils "^3.17.1" "@yarnpkg/lockfile@^1.1.0": version "1.1.0" @@ -1319,10 +1292,10 @@ acorn-globals@^4.3.2: acorn "^6.0.1" acorn-walk "^6.0.1" -acorn-jsx@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f" - integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw== +acorn-jsx@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" + integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== acorn-walk@^6.0.1: version "6.2.0" @@ -1334,11 +1307,6 @@ acorn@^6.0.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== -acorn@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a" - integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ== - acorn@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" @@ -1366,11 +1334,6 @@ ansi-align@^2.0.0: dependencies: string-width "^2.0.0" -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - ansi-escapes@^4.2.1: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" @@ -1494,6 +1457,14 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.flat@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -1838,21 +1809,6 @@ chokidar@^3.0.0: optionalDependencies: fsevents "~2.1.1" -chokidar@^3.0.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.2.2.tgz#a433973350021e09f2b853a2287781022c0dc935" - integrity sha512-bw3pm7kZ2Wa6+jQWYP/c7bAZy3i4GwiIiMO2EeRjrE48l8vBqC/WvFhSF0xyM8fQiPEGvwMY/5bqDG7sSEOuhg== - 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.2.0" - optionalDependencies: - fsevents "~2.1.1" - chownr@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" @@ -1890,12 +1846,12 @@ cli-boxes@^1.0.0: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: - restore-cursor "^2.0.0" + restore-cursor "^3.1.0" cli-width@^2.0.0: version "2.2.0" @@ -2157,7 +2113,7 @@ data-urls@^1.1.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: +debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2355,6 +2311,23 @@ es-abstract@^1.12.0, es-abstract@^1.4.3, es-abstract@^1.5.1, es-abstract@^1.7.0: string.prototype.trimleft "^2.0.0" string.prototype.trimright "^2.0.0" +es-abstract@^1.17.0-next.1: + version "1.17.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" + integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" @@ -2364,6 +2337,15 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" +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" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -2381,15 +2363,15 @@ escodegen@^1.11.1: optionalDependencies: source-map "~0.6.1" -eslint-config-standard-with-typescript@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-10.0.0.tgz#f96a5aa9ef9dfd76aafdc07c44754fc4067210ed" - integrity sha512-t21JVyToxvoOFgcg69K6HM38SwWM3QADiOHyz7q+4Qz+Iir3nvRCstGpPzRCKnlXBHinP4AM0QtytkE1J6otig== +eslint-config-standard-with-typescript@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-12.0.1.tgz#60f941a3a942b50393715ca336e1c7ba76e3ab04" + integrity sha512-v0DDNzsb36Oun3N04Y27Ca9DfF+S9Orrdtqa5anUUpwIu/MMqCRxYAcKdD0Uao+Gzqz9EjaFYjBKZCPFyXH5jw== dependencies: - "@typescript-eslint/parser" "^2.0.0" - eslint-config-standard "^14.0.0" + "@typescript-eslint/parser" "^2.10.0" + eslint-config-standard "^14.1.0" -eslint-config-standard@^14.0.0: +eslint-config-standard@^14.1.0: version "14.1.0" resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.0.tgz#b23da2b76fe5a2eba668374f246454e7058f15d4" integrity sha512-EF6XkrrGVbvv8hL/kYa/m6vnvmUT+K82pJJc4JJVMM6+Qgqh0pnwprSxdduDLB9p/7bIxD+YV5O0wfb8lmcPbA== @@ -2413,46 +2395,47 @@ eslint-import-resolver-ts@^0.4.0: tiny-glob "^0.2.6" tsconfig-paths "^3.9.0" -eslint-module-utils@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c" - integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw== +eslint-module-utils@^2.4.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz#7878f7504824e1b857dd2505b59a8e5eda26a708" + integrity sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q== dependencies: - debug "^2.6.8" + debug "^2.6.9" pkg-dir "^2.0.0" -eslint-plugin-es@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-2.0.0.tgz#0f5f5da5f18aa21989feebe8a73eadefb3432976" - integrity sha512-f6fceVtg27BR02EYnBhgWLFQfK6bN4Ll0nQFrBHOlCsAyxeZkn0NHns5O0YZOPrV1B3ramd6cgFwaoFLcSkwEQ== +eslint-plugin-es@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.0.tgz#98cb1bc8ab0aa807977855e11ad9d1c9422d014b" + integrity sha512-6/Jb/J/ZvSebydwbBJO1R9E5ky7YeElfK56Veh7e4QGFHCXoIXGH9HhVz+ibJLM3XJ1XjP+T7rKBLUa/Y7eIng== dependencies: - eslint-utils "^1.4.2" + eslint-utils "^2.0.0" regexpp "^3.0.0" -eslint-plugin-import@^2.18.0: - version "2.18.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" - integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== +eslint-plugin-import@^2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.0.tgz#d749a7263fb6c29980def8e960d380a6aa6aecaa" + integrity sha512-NK42oA0mUc8Ngn4kONOPsPB1XhbUvNHqF+g307dPV28aknPoiNnKLFd9em4nkswwepdF5ouieqv5Th/63U7YJQ== dependencies: array-includes "^3.0.3" + array.prototype.flat "^1.2.1" contains-path "^0.1.0" debug "^2.6.9" doctrine "1.5.0" eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.0" + eslint-module-utils "^2.4.1" has "^1.0.3" minimatch "^3.0.4" object.values "^1.1.0" read-pkg-up "^2.0.0" - resolve "^1.11.0" + resolve "^1.12.0" -eslint-plugin-node@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-10.0.0.tgz#fd1adbc7a300cf7eb6ac55cf4b0b6fc6e577f5a6" - integrity sha512-1CSyM/QCjs6PXaT18+zuAXsjXGIGo5Rw630rSKwokSs2jrYURQc4R5JZpoanNCqwNmepg+0eZ9L7YiRUJb8jiQ== +eslint-plugin-node@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.0.0.tgz#365944bb0804c5d1d501182a9bc41a0ffefed726" + integrity sha512-chUs/NVID+sknFiJzxoN9lM7uKSOEta8GC8365hw1nDfwIPIjjpRSwwPvQanWv8dt/pDe9EV4anmVSwdiSndNg== dependencies: - eslint-plugin-es "^2.0.0" - eslint-utils "^1.4.2" + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" ignore "^5.1.1" minimatch "^3.0.4" resolve "^1.10.1" @@ -2476,22 +2459,29 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" - integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== +eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== dependencies: - eslint-visitor-keys "^1.0.0" + eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: +eslint-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd" + integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== -eslint@^6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.5.1.tgz#828e4c469697d43bb586144be152198b91e96ed6" - integrity sha512-32h99BoLYStT1iq1v2P9uwpyznQ4M2jRiFB6acitKz52Gqn+vPaMDUTB1bYi1WN4Nquj2w+t+bimYUG83DC55A== +eslint@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.10.0" @@ -2500,19 +2490,19 @@ eslint@^6.5.1: debug "^4.0.1" doctrine "^3.0.0" eslint-scope "^5.0.0" - eslint-utils "^1.4.2" + eslint-utils "^1.4.3" eslint-visitor-keys "^1.1.0" - espree "^6.1.1" + espree "^6.1.2" esquery "^1.0.1" esutils "^2.0.2" file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" - globals "^11.7.0" + globals "^12.1.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^6.4.1" + inquirer "^7.0.0" is-glob "^4.0.0" js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" @@ -2521,7 +2511,7 @@ eslint@^6.5.1: minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.8.2" + optionator "^0.8.3" progress "^2.0.0" regexpp "^2.0.1" semver "^6.1.2" @@ -2531,13 +2521,13 @@ eslint@^6.5.1: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de" - integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ== +espree@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" + integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== dependencies: - acorn "^7.0.0" - acorn-jsx "^5.0.2" + acorn "^7.1.0" + acorn-jsx "^5.1.0" eslint-visitor-keys "^1.1.0" esprima@^4.0.0, esprima@^4.0.1: @@ -2714,7 +2704,7 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= -fast-levenshtein@~2.0.4: +fast-levenshtein@~2.0.4, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -2726,10 +2716,10 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= +figures@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" + integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== dependencies: escape-string-regexp "^1.0.5" @@ -2960,6 +2950,18 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-dirs@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -2967,11 +2969,18 @@ global-dirs@^0.1.0: dependencies: ini "^1.3.4" -globals@^11.1.0, globals@^11.7.0: +globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^12.1.0: + version "12.3.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13" + integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw== + dependencies: + type-fest "^0.8.1" + globalyzer@^0.1.0: version "0.1.4" resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.4.tgz#bc8e273afe1ac7c24eea8def5b802340c5cc534f" @@ -3056,6 +3065,11 @@ has-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -3191,22 +3205,22 @@ ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -inquirer@^6.4.1: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== +inquirer@^7.0.0: + version "7.0.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.3.tgz#f9b4cd2dff58b9f73e8d43759436ace15bed4567" + integrity sha512-+OiOVeVydu4hnCGLCSX+wedovR/Yzskv9BFqUNNKq9uU2qg7LCcCo3R86S2E7WLo0y/x2pnEZfZe1CoYnORUAw== dependencies: - ansi-escapes "^3.2.0" + ansi-escapes "^4.2.1" chalk "^2.4.2" - cli-cursor "^2.1.0" + cli-cursor "^3.1.0" cli-width "^2.0.0" external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" + rxjs "^6.5.3" + string-width "^4.1.0" strip-ansi "^5.1.0" through "^2.3.6" @@ -3263,6 +3277,11 @@ is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + is-ci@^1.0.10: version "1.2.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" @@ -3438,6 +3457,13 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" +is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + is-retry-allowed@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" @@ -4187,12 +4213,7 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash.unescape@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" - integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= - -lodash@^4.17.12, 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== @@ -4420,10 +4441,10 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nanomatch@^1.2.9: version "1.2.13" @@ -4572,6 +4593,11 @@ object-inspect@^1.6.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -4626,13 +4652,6 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - onetime@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" @@ -4640,7 +4659,7 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -optionator@^0.8.1, optionator@^0.8.2: +optionator@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= @@ -4652,6 +4671,18 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" +optionator@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + os-locale@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" @@ -5264,12 +5295,12 @@ resolve@1.12.0, resolve@1.x, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, dependencies: path-parse "^1.0.6" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: - onetime "^2.0.0" + onetime "^5.1.0" signal-exit "^3.0.2" ret@~0.1.10: @@ -5410,10 +5441,10 @@ run-async@^2.2.0: dependencies: is-promise "^2.1.0" -rxjs@^6.4.0: - version "6.5.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" - integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== +rxjs@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" + integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== dependencies: tslib "^1.9.0" @@ -5830,7 +5861,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -5873,6 +5904,14 @@ string.prototype.trimleft@^2.0.0: define-properties "^1.1.3" function-bind "^1.1.1" +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" + integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + string.prototype.trimright@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" @@ -5881,6 +5920,14 @@ string.prototype.trimright@^2.0.0: define-properties "^1.1.3" function-bind "^1.1.1" +string.prototype.trimright@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" + integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + strip-ansi@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" @@ -6505,6 +6552,11 @@ widest-line@^2.0.0: dependencies: string-width "^2.1.1" +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" From 063847f0c7ca70ce7f54c4e5a92e9ee75a09cee3 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 23 Jan 2020 17:34:28 +0100 Subject: [PATCH 177/266] Bump wsrun from 5.0.2 to 5.2.0 --- package.json | 2 +- yarn.lock | 110 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 68 insertions(+), 44 deletions(-) diff --git a/package.json b/package.json index 17d21b3..9202419 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "ts-transformer-inline-file": "^0.1.1", "ttypescript": "^1.5.10", "typescript": "~3.7.5", - "wsrun": "^5.0.2", + "wsrun": "^5.2.0", "yarn-version-bump": "^0.0.3", "yazl": "^2.5.1" }, diff --git a/yarn.lock b/yarn.lock index 7e43727..0850f0e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3231,10 +3231,10 @@ invariant@^2.2.2, invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== ip-regex@^2.1.0: version "2.1.0" @@ -3577,6 +3577,15 @@ jest-chain@^1.1.2: resolved "https://registry.yarnpkg.com/jest-chain/-/jest-chain-1.1.2.tgz#80a098a4f5e19cd671d705d170bda501777ac3cf" integrity sha512-9C4zfLK7/ZGnEctJbqiv6KDInWtdAqJBVmMePpEmyKlYfZy095At4bytuw5B2UvugPxYEbAHurJsFocn3fkkFw== +jest-changed-files@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" + integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg== + dependencies: + "@jest/types" "^24.9.0" + execa "^1.0.0" + throat "^4.0.0" + jest-changed-files@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.1.0.tgz#73dae9a7d9949fdfa5c278438ce8f2ff3ec78131" @@ -4114,12 +4123,12 @@ latest-version@^3.0.0: dependencies: package-json "^4.0.0" -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== dependencies: - invert-kv "^1.0.0" + invert-kv "^2.0.0" leven@^3.1.0: version "3.1.0" @@ -4278,6 +4287,13 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -4305,12 +4321,14 @@ mdn-data@2.0.4: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== dependencies: - mimic-fn "^1.0.0" + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" memorystream@^0.3.1: version "0.3.1" @@ -4361,12 +4379,7 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.40.0" -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.1.0: +mimic-fn@^2.0.0, mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== @@ -4683,20 +4696,25 @@ optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + p-each-series@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" @@ -4712,6 +4730,11 @@ p-finally@^2.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -6097,7 +6120,7 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -throat@^4.1.0: +throat@^4.0.0, throat@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= @@ -6627,19 +6650,20 @@ ws@^7.0.0: resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.1.tgz#03ed52423cd744084b2cf42ed197c8b65a936b8e" integrity sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A== -wsrun@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/wsrun/-/wsrun-5.0.2.tgz#e7d1ebc8bc861647116608c81184fe7521213002" - integrity sha512-j3vkJUBa1Z35R6yqc04TTsEnPKKlHV0NiMbdM3QiQMQJDpPUoMgq5RegDTCyxx0ZnmsYCbwNxPGX2ps9DSIXaQ== +wsrun@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/wsrun/-/wsrun-5.2.0.tgz#a7c0587cb371ea29352f0b3cad002ea839a25b0f" + integrity sha512-48j1AltgQxEy3dwDrqWJTZIYSNYPGHtkZzTDjQiHPICXv2qtXPXFj+XutE4aZlCCWKZW+Lc+v6dUjBdH3yg8PQ== dependencies: bluebird "^3.5.1" chalk "^2.3.0" glob "^7.1.2" + jest-changed-files "^24.9.0" lodash "^4.17.4" minimatch "^3.0.4" split "^1.0.1" throat "^4.1.0" - yargs "^10.0.3" + yargs "^11.1.1" xdg-basedir@^3.0.0: version "3.0.0" @@ -6691,30 +6715,30 @@ yargs-parser@^16.1.0: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" - integrity sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ== +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= dependencies: camelcase "^4.1.0" -yargs@^10.0.3: - version "10.1.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" - integrity sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig== +yargs@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" + integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== dependencies: cliui "^4.0.0" decamelize "^1.1.1" find-up "^2.1.0" get-caller-file "^1.0.1" - os-locale "^2.0.0" + os-locale "^3.1.0" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" string-width "^2.0.0" which-module "^2.0.0" y18n "^3.2.1" - yargs-parser "^8.1.0" + yargs-parser "^9.0.2" yargs@^15.0.0: version "15.1.0" From f7e794f0fe14eccb3c3da6b2013c511a42a35f15 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 23 Jan 2020 17:47:52 +0100 Subject: [PATCH 178/266] Replace rollup-plugin-commonjs with @rollup/plugin-commonjs --- package.json | 2 +- packages/ipynb2html-cli/rollup.config.js | 2 +- packages/ipynb2html/rollup.config.js | 2 +- yarn.lock | 29 +++++++++++++++--------- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 9202419..682b7ca 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "devDependencies": { "@babel/core": "^7.8.3", "@babel/preset-env": "^7.8.3", + "@rollup/plugin-commonjs": "^11.0.1", "@types/dedent": "^0.7.0", "@types/highlightjs": "^9.12.0", "@types/jest": "^24.9.0", @@ -51,7 +52,6 @@ "rollup": "^1.29.1", "rollup-plugin-add-git-msg": "^1.1.0", "rollup-plugin-babel": "^4.3.3", - "rollup-plugin-commonjs": "^10.1.0", "rollup-plugin-executable": "^1.5.2", "rollup-plugin-node-externals": "^2.1.3", "rollup-plugin-node-license": "^0.2.0", diff --git a/packages/ipynb2html-cli/rollup.config.js b/packages/ipynb2html-cli/rollup.config.js index 55c48e7..bd64608 100644 --- a/packages/ipynb2html-cli/rollup.config.js +++ b/packages/ipynb2html-cli/rollup.config.js @@ -1,5 +1,5 @@ import addGitMsg from 'rollup-plugin-add-git-msg' -import commonjs from 'rollup-plugin-commonjs' +import commonjs from '@rollup/plugin-commonjs' import executable from 'rollup-plugin-executable' import externals from 'rollup-plugin-node-externals' import license from 'rollup-plugin-node-license' diff --git a/packages/ipynb2html/rollup.config.js b/packages/ipynb2html/rollup.config.js index cc63198..fae0087 100644 --- a/packages/ipynb2html/rollup.config.js +++ b/packages/ipynb2html/rollup.config.js @@ -1,6 +1,6 @@ import addGitMsg from 'rollup-plugin-add-git-msg' import babel from 'rollup-plugin-babel' -import commonjs from 'rollup-plugin-commonjs' +import commonjs from '@rollup/plugin-commonjs' import license from 'rollup-plugin-node-license' import resolve from 'rollup-plugin-node-resolve' import { terser } from 'rollup-plugin-terser' diff --git a/yarn.lock b/yarn.lock index 0850f0e..fc0d1e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1054,6 +1054,24 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" +"@rollup/plugin-commonjs@^11.0.1": + version "11.0.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.1.tgz#6056a6757286901cc6c1599123e6680a78cad6c2" + integrity sha512-SaVUoaLDg3KnIXC5IBNIspr1APTYDzk05VaYcI6qz+0XX3ZlSCwAkfAhNSOxfd5GAdcm/63Noi4TowOY9MpcDg== + dependencies: + "@rollup/pluginutils" "^3.0.0" + estree-walker "^0.6.1" + is-reference "^1.1.2" + magic-string "^0.25.2" + resolve "^1.11.0" + +"@rollup/pluginutils@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.0.4.tgz#3a104a41a90f8d1dcf308e18f8fa402d1cc6576e" + integrity sha512-buc0oeq2zqQu2mpMyvZgAaQvitikYjT/4JYhA4EXwxX8/g0ZGHoGiX+0AwmfhrNqH4oJv67gn80sTZFQ/jL1bw== + dependencies: + estree-walker "^0.6.1" + "@sinonjs/commons@^1.7.0": version "1.7.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.0.tgz#f90ffc52a2e519f018b13b6c4da03cbff36ebed6" @@ -5365,17 +5383,6 @@ rollup-plugin-babel@^4.3.3: "@babel/helper-module-imports" "^7.0.0" rollup-pluginutils "^2.8.1" -rollup-plugin-commonjs@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz#417af3b54503878e084d127adf4d1caf8beb86fb" - integrity sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q== - dependencies: - estree-walker "^0.6.1" - is-reference "^1.1.2" - magic-string "^0.25.2" - resolve "^1.11.0" - rollup-pluginutils "^2.8.1" - rollup-plugin-executable@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/rollup-plugin-executable/-/rollup-plugin-executable-1.5.2.tgz#3b755c4220a3a764813e50ec1a8e8019465e3860" From 28735b24c2f38f17887f81030d5e857827c48ded Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 23 Jan 2020 17:48:43 +0100 Subject: [PATCH 179/266] Replace rollup-plugin-node-resolve with @rollup/plugin-node-resolve --- package.json | 2 +- packages/ipynb2html-cli/rollup.config.js | 2 +- packages/ipynb2html/rollup.config.js | 2 +- yarn.lock | 22 +++++++++++----------- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index 682b7ca..c8127cd 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "@babel/core": "^7.8.3", "@babel/preset-env": "^7.8.3", "@rollup/plugin-commonjs": "^11.0.1", + "@rollup/plugin-node-resolve": "^7.0.0", "@types/dedent": "^0.7.0", "@types/highlightjs": "^9.12.0", "@types/jest": "^24.9.0", @@ -55,7 +56,6 @@ "rollup-plugin-executable": "^1.5.2", "rollup-plugin-node-externals": "^2.1.3", "rollup-plugin-node-license": "^0.2.0", - "rollup-plugin-node-resolve": "^5.2.0", "rollup-plugin-terser": "^5.2.0", "rollup-plugin-typescript2": "^0.25.3", "tar": "^5.0.5", diff --git a/packages/ipynb2html-cli/rollup.config.js b/packages/ipynb2html-cli/rollup.config.js index bd64608..e3f45e1 100644 --- a/packages/ipynb2html-cli/rollup.config.js +++ b/packages/ipynb2html-cli/rollup.config.js @@ -3,7 +3,7 @@ import commonjs from '@rollup/plugin-commonjs' import executable from 'rollup-plugin-executable' import externals from 'rollup-plugin-node-externals' import license from 'rollup-plugin-node-license' -import resolve from 'rollup-plugin-node-resolve' +import resolve from '@rollup/plugin-node-resolve' import { terser } from 'rollup-plugin-terser' import typescript from 'rollup-plugin-typescript2' import ttypescript from 'ttypescript' diff --git a/packages/ipynb2html/rollup.config.js b/packages/ipynb2html/rollup.config.js index fae0087..ff5ef36 100644 --- a/packages/ipynb2html/rollup.config.js +++ b/packages/ipynb2html/rollup.config.js @@ -2,7 +2,7 @@ import addGitMsg from 'rollup-plugin-add-git-msg' import babel from 'rollup-plugin-babel' import commonjs from '@rollup/plugin-commonjs' import license from 'rollup-plugin-node-license' -import resolve from 'rollup-plugin-node-resolve' +import resolve from '@rollup/plugin-node-resolve' import { terser } from 'rollup-plugin-terser' import ttypescript from 'ttypescript' import typescript from 'rollup-plugin-typescript2' diff --git a/yarn.lock b/yarn.lock index fc0d1e4..04372bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1065,6 +1065,17 @@ magic-string "^0.25.2" resolve "^1.11.0" +"@rollup/plugin-node-resolve@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.0.0.tgz#cce3826df801538b001972fbf9b6b1c22b69fdf8" + integrity sha512-+vOx2+WMBMFotYKM3yYeDGZxIvcQ7yO4g+SuKDFsjKaq8Lw3EPgfB6qNlp8Z/3ceDCEhHvC9/b+PgBGwDQGbzQ== + dependencies: + "@rollup/pluginutils" "^3.0.0" + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.11.1" + "@rollup/pluginutils@^3.0.0": version "3.0.4" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.0.4.tgz#3a104a41a90f8d1dcf308e18f8fa402d1cc6576e" @@ -5403,17 +5414,6 @@ rollup-plugin-node-license@^0.2.0: license-checker "16.0.0" markdown-table "1.1.3" -rollup-plugin-node-resolve@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz#730f93d10ed202473b1fb54a5997a7db8c6d8523" - integrity sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw== - dependencies: - "@types/resolve" "0.0.8" - builtin-modules "^3.1.0" - is-module "^1.0.0" - resolve "^1.11.1" - rollup-pluginutils "^2.8.1" - rollup-plugin-terser@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.2.0.tgz#ba758adf769347b7f1eaf9ef35978d2e207dccc7" From 0bf96274f9aeb2fc84e8b22355921106f497b3f7 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 23 Jan 2020 17:54:04 +0100 Subject: [PATCH 180/266] Upgrade yarn.lock --- yarn.lock | 717 +++++++++++++++++------------------------------------- 1 file changed, 228 insertions(+), 489 deletions(-) diff --git a/yarn.lock b/yarn.lock index 04372bb..2e21b7d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,14 +2,7 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== @@ -25,27 +18,7 @@ invariant "^2.2.4" semver "^5.5.0" -"@babel/core@^7.1.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.0.tgz#9b00f73554edd67bebc86df8303ef678be3d7b48" - integrity sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.0" - "@babel/helpers" "^7.6.0" - "@babel/parser" "^7.6.0" - "@babel/template" "^7.6.0" - "@babel/traverse" "^7.6.0" - "@babel/types" "^7.6.0" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.7.5", "@babel/core@^7.8.3": +"@babel/core@^7.1.0", "@babel/core@^7.7.5", "@babel/core@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.3.tgz#30b0ebb4dd1585de6923a0b4d179e0b9f5d82941" integrity sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA== @@ -66,17 +39,6 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.0.tgz#e2c21efbfd3293ad819a2359b448f002bfdfda56" - integrity sha512-Ms8Mo7YBdMMn1BYuNtKuP/z0TgEIhbcyB8HVR6PPNYp4P61lMsABiS4A3VG1qznjXVCf3r+fVHhm4efTYVsySA== - dependencies: - "@babel/types" "^7.6.0" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - trim-right "^1.0.1" - "@babel/generator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.3.tgz#0e22c005b0a94c1c74eafe19ef78ce53a4d45c03" @@ -147,15 +109,6 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== - dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - "@babel/helper-function-name@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" @@ -165,13 +118,6 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== - dependencies: - "@babel/types" "^7.0.0" - "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" @@ -193,14 +139,7 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-module-imports@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-imports@^7.8.3": +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== @@ -226,12 +165,7 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== - -"@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== @@ -272,13 +206,6 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== - dependencies: - "@babel/types" "^7.4.4" - "@babel/helper-split-export-declaration@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" @@ -296,15 +223,6 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helpers@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.0.tgz#21961d16c6a3c3ab597325c34c465c0887d31c6e" - integrity sha512-W9kao7OBleOjfXtFGgArGRX6eCP0UEcA2ZWEWNkJdRZnHhW4eEbeswbG3EwaRsnQUAEGWYgMq1HsIXuNNNy2eQ== - dependencies: - "@babel/template" "^7.6.0" - "@babel/traverse" "^7.6.0" - "@babel/types" "^7.6.0" - "@babel/helpers@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.3.tgz#382fbb0382ce7c4ce905945ab9641d688336ce85" @@ -314,15 +232,6 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - "@babel/highlight@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" @@ -332,12 +241,7 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.0.tgz#3e05d0647432a8326cb28d0de03895ae5a57f39b" - integrity sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ== - -"@babel/parser@^7.7.5", "@babel/parser@^7.8.3": +"@babel/parser@^7.1.0", "@babel/parser@^7.7.5", "@babel/parser@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.3.tgz#790874091d2001c9be6ec426c2eed47bc7679081" integrity sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ== @@ -442,14 +346,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-object-rest-spread@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" - integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-object-rest-spread@^7.8.0": +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== @@ -792,15 +689,6 @@ dependencies: regenerator-runtime "^0.13.2" -"@babel/template@^7.1.0", "@babel/template@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" - integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.6.0" - "@babel/types" "^7.6.0" - "@babel/template@^7.7.4", "@babel/template@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" @@ -810,22 +698,7 @@ "@babel/parser" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.0.tgz#389391d510f79be7ce2ddd6717be66d3fed4b516" - integrity sha512-93t52SaOBgml/xY74lsmt7xOR4ufYvhb5c5qiM6lu4J/dWGMAfAh6eKw4PjLes6DI6nQgearoxnFJk60YchpvQ== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.0" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.6.0" - "@babel/types" "^7.6.0" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/traverse@^7.7.4", "@babel/traverse@^7.8.3": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.3.tgz#a826215b011c9b4f73f3a893afbc05151358bf9a" integrity sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg== @@ -840,16 +713,7 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.6.0": - version "7.6.1" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648" - integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@babel/types@^7.8.3": +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== @@ -1102,9 +966,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc" - integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ== + version "7.6.1" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" + integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== dependencies: "@babel/types" "^7.0.0" @@ -1117,9 +981,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.7.tgz#2496e9ff56196cc1429c72034e07eab6121b6f3f" - integrity sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw== + version "7.0.8" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.8.tgz#479a4ee3e291a403a1096106013ec22cf9b64012" + integrity sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw== dependencies: "@babel/types" "^7.3.0" @@ -1138,7 +1002,12 @@ resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== -"@types/estree@*", "@types/estree@0.0.39": +"@types/estree@*": + version "0.0.42" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.42.tgz#8d0c1f480339efedb3e46070e22dd63e0430dd11" + integrity sha512-K1DPVvnBCPxzD+G51/cxVIoc2X8uUVl1zpJeE6iKcgHMj4+tbat5Xu4TjV7v2QSDbIeAfLi2hIk+u2+s0MlpUQ== + +"@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== @@ -1161,9 +1030,9 @@ integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== "@types/istanbul-lib-report@*": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c" - integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg== + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" @@ -1183,9 +1052,9 @@ jest-diff "^24.3.0" "@types/json-schema@^7.0.3": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" - integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== + version "7.0.4" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" + integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== "@types/json5@^0.0.29": version "0.0.29" @@ -1208,14 +1077,14 @@ integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= "@types/node@*": - version "12.11.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.5.tgz#6c3c8dc84988aff11fd2a63d7b5fbf39eaaab7b1" - integrity sha512-LC8ALj/24PhByn39nr5jnTvpE7MujK8y7LQmV74kHYF5iQ0odCPkMH4IZNZw+cobKfSXqaC8GgegcbIsQpffdA== + version "13.1.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.1.8.tgz#1d590429fe8187a02707720ecf38a6fe46ce294b" + integrity sha512-6XzyyNM9EKQW4HKuzbo/CkOIjn/evtCmsU+MUM1xDfJ+3/rNjBttM1NgN7AOQvN6tP1Sl1D1PIKMreTArnxM9A== "@types/node@^10.13.0": - version "10.14.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.18.tgz#b7d45fc950e6ffd7edc685e890d13aa7b8535dce" - integrity sha512-ryO3Q3++yZC/+b8j8BdKd/dn9JlzlHBPdm80656xwYUdmPkpTGTjkAdt6BByiNupGPE8w0FhBgvYy/fX9hRNGQ== + version "10.17.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.13.tgz#ccebcdb990bd6139cd16e84c39dc2fb1023ca90c" + integrity sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg== "@types/resolve@0.0.8": version "0.0.8" @@ -1237,14 +1106,14 @@ integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== "@types/yargs-parser@*": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" - integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg== + version "15.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== "@types/yargs@^13.0.0": - version "13.0.2" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.2.tgz#a64674fc0149574ecd90ba746e932b5a5f7b3653" - integrity sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ== + version "13.0.6" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.6.tgz#6aed913a92c262c13b94d4bca8043237de202124" + integrity sha512-IkltIncDQWv6fcAvnHtJ6KtkmY/vtR3bViOaCzpj/A3yNhlfZAgxNe6AEQD1cQrkYD+YsKVo08DSxvNKEsD7BA== dependencies: "@types/yargs-parser" "*" @@ -1304,9 +1173,9 @@ integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== abab@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.1.tgz#3fa17797032b71410ec372e11668f4b4ffc86a82" - integrity sha512-1zSbbCuoIjafKZ3mblY5ikvAb0ODUbqBnFuUb7f6uLeQhhGJ0vEV4ntmtxKLT2WgXCO94E07BjunsIw1jOMPZw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" + integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== abbrev@1: version "1.1.1" @@ -1332,9 +1201,9 @@ acorn-walk@^6.0.1: integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== acorn@^6.0.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" - integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== + version "6.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" + integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== acorn@^7.1.0: version "7.1.0" @@ -1342,11 +1211,11 @@ acorn@^7.1.0: integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: - version "6.10.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" - integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== + version "6.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.11.0.tgz#c3607cbc8ae392d8a5a536f25b21f8e5f3f87fe9" + integrity sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA== dependencies: - fast-deep-equal "^2.0.1" + fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" @@ -1442,9 +1311,9 @@ anymatch@^3.0.3, anymatch@~3.1.1: picomatch "^2.0.4" arg@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.1.tgz#485f8e7c390ce4c5f78257dbea80d4be11feda4c" - integrity sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw== + version "4.1.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.2.tgz#e70c90579e02c63d80e3ad4e31d8bfdb8bd50064" + integrity sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg== argparse@^1.0.7: version "1.0.10" @@ -1474,12 +1343,13 @@ array-equal@^1.0.0: integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" array-unique@^0.3.2: version "0.3.2" @@ -1536,7 +1406,7 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob@^2.1.1: +atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== @@ -1547,9 +1417,9 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + version "1.9.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== babel-jest@^25.1.0: version "25.1.0" @@ -1629,9 +1499,9 @@ binary-extensions@^2.0.0: integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== bluebird@^3.5.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" - integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== boxen@^1.2.1: version "1.3.0" @@ -1705,10 +1575,10 @@ bs-logger@0.x: dependencies: fast-json-stable-stringify "2.x" -bser@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.0.tgz#65fc784bf7f87c009b973c12db6546902fa9c7b5" - integrity sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg== +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" @@ -1824,9 +1694,9 @@ chardet@^0.7.0: integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== chokidar@^3.0.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.2.3.tgz#b9270a565d14f02f6bfdd537a6a2bbf5549b8c8c" - integrity sha512-GtrxGuRf6bzHQmXWRepvsGnXpkQkVU+D2/9a7dAe4a7v1NhrfZOZ2oKf76M3nOs46fFYL8D+Q8JYA4GYeJ8Cjw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" + integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -1834,9 +1704,9 @@ chokidar@^3.0.0: is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.2.0" + readdirp "~3.3.0" optionalDependencies: - fsevents "~2.1.1" + fsevents "~2.1.2" chownr@^1.1.3: version "1.1.3" @@ -1959,12 +1829,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.19.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== - -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== @@ -2006,14 +1871,7 @@ contains-path@^0.1.0: resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= -convert-source-map@^1.1.0, convert-source-map@^1.4.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== - dependencies: - safe-buffer "~5.1.1" - -convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -2120,9 +1978,9 @@ cssom@~0.3.6: integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== cssstyle@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.1.0.tgz#99f50a3aa21d4af16e758ae3e454dcf5940b9122" - integrity sha512-1iwCdymVYhMdQWiZ+9mB7x+urdNLPGTWsIZt6euFk8Yi+dOERK2ccoAUA3Bl8I5vmK5qfz/eLkBRyLbs42ov4A== + version "2.2.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.2.0.tgz#e4c44debccd6b7911ed617a4395e5754bba59992" + integrity sha512-sEb3XFPx3jNnCAMtqrXPDeSgQr+jojtCeNf8cvMNMh1cG970+lljssvQDzPq6lmmJu2Vhqood/gtEomBiHOGnA== dependencies: cssom "~0.3.6" @@ -2249,9 +2107,9 @@ diff-sequences@^25.1.0: integrity sha512-nFIfVk5B/NStCsJ+zaPO4vYuLjlzQ6uFvPxzYyHlejNZ/UGa7G/n7peOXVrVNvRuyfstt+mZQYGpjxg9Z6N8Kw== diff@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" - integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== doctrine@1.5.0: version "1.5.0" @@ -2311,9 +2169,9 @@ emoji-regex@^8.0.0: integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" @@ -2324,23 +2182,7 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.12.0, es-abstract@^1.4.3, es-abstract@^1.5.1, es-abstract@^1.7.0: - version "1.14.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.2.tgz#7ce108fad83068c8783c3cdf62e504e084d8c497" - integrity sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg== - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.0" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-inspect "^1.6.0" - object-keys "^1.1.1" - string.prototype.trimleft "^2.0.0" - string.prototype.trimright "^2.0.0" - -es-abstract@^1.17.0-next.1: +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: version "1.17.4" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== @@ -2357,15 +2199,6 @@ es-abstract@^1.17.0-next.1: string.prototype.trimleft "^2.1.1" string.prototype.trimright "^2.1.1" -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - 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" @@ -2406,12 +2239,12 @@ eslint-config-standard@^14.1.0: integrity sha512-EF6XkrrGVbvv8hL/kYa/m6vnvmUT+K82pJJc4JJVMM6+Qgqh0pnwprSxdduDLB9p/7bIxD+YV5O0wfb8lmcPbA== eslint-import-resolver-node@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== + version "0.3.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" + integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg== dependencies: debug "^2.6.9" - resolve "^1.5.0" + resolve "^1.13.1" eslint-import-resolver-ts@^0.4.0: version "0.4.2" @@ -2594,9 +2427,9 @@ esutils@^2.0.2: integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== exec-sh@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" - integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== + version "0.3.4" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== execa@^0.7.0: version "0.7.0" @@ -2723,27 +2556,27 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^3.1.1: + version "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-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.4, fast-levenshtein@~2.0.6: +fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== dependencies: - bser "^2.0.0" + bser "2.1.1" figures@^3.0.0: version "3.1.0" @@ -2777,9 +2610,9 @@ fill-range@^7.0.1: to-regex-range "^5.0.1" find-cache-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.0.0.tgz#cd4b7dd97b7185b7e17dbfe2d6e4115ee3eeb8fc" - integrity sha512-t7ulV1fmbxh5G9l/492O1p5+EBbr3uwpt6odhFTMc+nWyhmbloe+ja9BZ8pIBtqFWhOmCWVjx+pTW4zDkFoclw== + version "3.2.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.2.0.tgz#e7fe44c1abc1299f516146e563108fd1006c1874" + integrity sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg== dependencies: commondir "^1.0.1" make-dir "^3.0.0" @@ -2876,9 +2709,9 @@ fs-extra@^7.0.1: universalify "^0.1.0" fs-minipass@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.0.0.tgz#a6415edab02fae4b9e9230bc87ee2e4472003cd1" - integrity sha512-40Qz+LFXmd9tzYVnnBmZvFfvAADfUA14TXPK1s7IfElJTIZ97rA8w4Kin7Wt5JBrC3ShnnFJO/5vPjPEeJIq9A== + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" @@ -2887,17 +2720,12 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^2.1.2: +fsevents@^2.1.2, fsevents@~2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== -fsevents@~2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.1.tgz#74c64e21df71721845d0c44fe54b7f56b82995a9" - integrity sha512-4FRPXWETxtigtJW/gxzEDsX1LVbPAM93VleB83kZB+ellqbHMkyt2aJfuzNLRvFPnGi6bcE5SvfxgbXPeKteJw== - -function-bind@^1.0.2, function-bind@^1.1.1: +function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== @@ -2953,33 +2781,14 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-parent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" - integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== - dependencies: - is-glob "^4.0.1" - -glob-parent@~5.1.0: +glob-parent@^5.0.0, glob-parent@~5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== dependencies: is-glob "^4.0.1" -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.6: +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" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -3037,12 +2846,7 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" - integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== - -graceful-fs@^4.2.3: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== @@ -3089,12 +2893,7 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has-symbols@^1.0.1: +has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== @@ -3130,7 +2929,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1, has@^1.0.3: +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== @@ -3143,9 +2942,9 @@ highlightjs@^9.16.2: integrity sha512-FK1vmMj8BbEipEy8DLIvp71t5UsC7n2D6En/UfM/91PCwmOpj6f2iu0Y0coRC62KSRHHC+dquM2xMULV/X7NFg== hosted-git-info@^2.1.4: - version "2.8.4" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546" - integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ== + version "2.8.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" + integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== html-encoding-sniffer@^1.0.2: version "1.0.2" @@ -3191,9 +2990,9 @@ ignore@^5.1.1: integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== import-fresh@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" - integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -3301,12 +3100,7 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== - -is-callable@^1.1.5: +is-callable@^1.1.4, is-callable@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== @@ -3340,9 +3134,9 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== is-descriptor@^0.1.0: version "0.1.6" @@ -3479,13 +3273,6 @@ is-reference@^1.1.2: dependencies: "@types/estree" "0.0.39" -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - is-regex@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" @@ -3508,12 +3295,17 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== +is-string@^1.0.5: + version "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-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: - has-symbols "^1.0.0" + has-symbols "^1.0.1" is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" @@ -4072,9 +3864,9 @@ json-stringify-safe@~5.0.1: integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= json5@2.x, json5@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" - integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + version "2.1.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" + integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== dependencies: minimist "^1.2.0" @@ -4129,9 +3921,9 @@ kind-of@^5.0.0: integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== klaw-sync@^6.0.0: version "6.0.0" @@ -4284,9 +4076,9 @@ lru-cache@^4.0.1: yallist "^2.1.2" magic-string@^0.25.2: - version "0.25.4" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.4.tgz#325b8a0a79fc423db109b77fd5a19183b7ba5143" - integrity sha512-oycWO9nEVAP2RVPbIoDoA4Y7LFIJ3xRYov93gAyJhZkET1tNuB0u7uWkZS2LpBWTJUWnmau/To8ECWRC+jKNfw== + version "0.25.6" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.6.tgz#5586387d1242f919c6d223579cc938bf1420795e" + integrity sha512-3a5LOMSGoCTH5rbqobC2HuDNRtE2glHZ8J7pK+QZYppyWA36yuNpsX994rIY2nCuyP7CZYy7lQq/X2jygiZ89g== dependencies: sourcemap-codec "^1.4.4" @@ -4396,17 +4188,17 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" -mime-db@1.40.0: - version "1.40.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== +mime-db@1.43.0: + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + version "2.1.26" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== dependencies: - mime-db "1.40.0" + mime-db "1.43.0" mimic-fn@^2.0.0, mimic-fn@^2.1.0: version "2.1.0" @@ -4577,6 +4369,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== +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" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + npm-run-all@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" @@ -4630,11 +4427,6 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" - integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== - object-inspect@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" @@ -4662,13 +4454,13 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= +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.2" - es-abstract "^1.5.1" + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" object.pick@^1.3.0: version "1.3.0" @@ -4678,12 +4470,12 @@ object.pick@^1.3.0: isobject "^3.0.1" object.values@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" - integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== + 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== dependencies: define-properties "^1.1.3" - es-abstract "^1.12.0" + es-abstract "^1.17.0-next.1" function-bind "^1.1.1" has "^1.0.3" @@ -4701,19 +4493,7 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -optionator@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -optionator@^0.8.3: +optionator@^0.8.1, optionator@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -4772,9 +4552,9 @@ p-limit@^1.1.0: p-try "^1.0.0" p-limit@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" - integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + version "2.2.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== dependencies: p-try "^2.0.0" @@ -4917,12 +4697,7 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4: - version "2.0.7" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" - integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== - -picomatch@^2.0.5: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.0.7: version "2.2.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA== @@ -5024,9 +4799,9 @@ progress@^2.0.0: integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== prompts@^2.0.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.2.1.tgz#f901dd2a2dfee080359c0e20059b24188d75ad35" - integrity sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw== + version "2.3.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.0.tgz#a444e968fa4cc7e86689a74050685ac8006c4cc4" + integrity sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg== dependencies: kleur "^3.0.3" sisteransi "^1.0.3" @@ -5037,9 +4812,9 @@ pseudomap@^1.0.2: integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24, psl@^1.1.28: - version "1.4.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" - integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== + version "1.7.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" + integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== pump@^3.0.0: version "3.0.0" @@ -5074,16 +4849,11 @@ rc@^1.0.1, rc@^1.1.6: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-is@^16.12.0: +react-is@^16.12.0, react-is@^16.8.4: version "16.12.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== -react-is@^16.8.4: - version "16.9.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb" - integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw== - read-installed@~4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" @@ -5099,14 +4869,14 @@ read-installed@~4.0.3: graceful-fs "^4.1.2" read-package-json@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.0.tgz#e3d42e6c35ea5ae820d9a03ab0c7291217fc51d5" - integrity sha512-KLhu8M1ZZNkMcrq1+0UJbR8Dii8KZUqB0Sha4mOx/bknfKI/fyrQVrG/YIt2UOtG667sD8+ee4EXMM91W9dC+A== + version "2.1.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== dependencies: glob "^7.1.1" json-parse-better-errors "^1.0.1" normalize-package-data "^2.0.0" - slash "^1.0.0" + npm-normalize-package-bin "^1.0.0" optionalDependencies: graceful-fs "^4.1.2" @@ -5146,12 +4916,12 @@ readdir-scoped-modules@^1.0.0: graceful-fs "^4.1.2" once "^1.3.0" -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== +readdirp@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" + integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== dependencies: - picomatch "^2.0.4" + picomatch "^2.0.7" realpath-native@^1.1.0: version "1.1.0" @@ -5235,9 +5005,9 @@ regjsgen@^0.5.0: integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== + version "0.6.2" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.2.tgz#fd62c753991467d9d1ffe0a9f67f27a529024b96" + integrity sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q== dependencies: jsesc "~0.5.0" @@ -5340,13 +5110,20 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@1.12.0, resolve@1.x, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.9.0: +resolve@1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== dependencies: path-parse "^1.0.6" +resolve@1.x, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2, resolve@^1.9.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.0.tgz#1b7ca96073ebb52e741ffd799f6b39ea462c67f5" + integrity sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw== + dependencies: + path-parse "^1.0.6" + restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -5609,14 +5386,9 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= sisteransi@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.3.tgz#98168d62b79e3a5e758e27ae63c4a053d748f4eb" - integrity sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg== - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + version "1.0.4" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3" + integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig== slash@^2.0.0: version "2.0.0" @@ -5680,17 +5452,17 @@ sort-keys@^2.0.0: is-plain-obj "^1.0.0" source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: - atob "^2.1.1" + atob "^2.1.2" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.16: +source-map-support@^0.5.16, source-map-support@^0.5.6, source-map-support@~0.5.12: version "0.5.16" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== @@ -5698,14 +5470,6 @@ source-map-support@^0.5.16: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.6, source-map-support@~0.5.12: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -5727,9 +5491,9 @@ source-map@^0.7.3: integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== sourcemap-codec@^1.4.4: - version "1.4.6" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz#e30a74f0402bad09807640d39e971090a08ce1e9" - integrity sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg== + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== spdx-compare@^0.1.2: version "0.1.2" @@ -5918,21 +5682,12 @@ string-width@^4.1.0, string-width@^4.2.0: strip-ansi "^6.0.0" string.prototype.padend@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" - integrity sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.4.3" - function-bind "^1.0.2" - -string.prototype.trimleft@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" - integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== + version "3.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" + integrity sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA== dependencies: define-properties "^1.1.3" - function-bind "^1.1.1" + es-abstract "^1.17.0-next.1" string.prototype.trimleft@^2.1.1: version "2.1.1" @@ -5942,14 +5697,6 @@ string.prototype.trimleft@^2.1.1: define-properties "^1.1.3" function-bind "^1.1.1" -string.prototype.trimright@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" - integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== - dependencies: - define-properties "^1.1.3" - function-bind "^1.1.1" - string.prototype.trimright@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" @@ -6241,11 +5988,6 @@ treeify@^1.0.1: resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - ts-jest@^25.0.0: version "25.0.0" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.0.0.tgz#d83b266e6ffda0c458a129951b3fe3567f8ce8df" @@ -6464,17 +6206,19 @@ util-extend@^1.0.1: integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= util.promisify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + 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.2" - object.getownpropertydescriptors "^2.0.3" + 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.3.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" - integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== v8-compile-cache@^2.0.3: version "2.1.0" @@ -6548,9 +6292,9 @@ whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== whatwg-url@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" - integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== dependencies: lodash.sortby "^4.7.0" tr46 "^1.0.1" @@ -6587,11 +6331,6 @@ word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" From 9c452d370c378976d78638414419fae5337a7c63 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 23 Jan 2020 18:03:11 +0100 Subject: [PATCH 181/266] License: Bump year --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index cbde456..ec30c41 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License -Copyright 2019 Jakub Jirutka . +Copyright 2019-2020 Jakub Jirutka . Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From ed62ee01e3f3a5ebed8c2675e9a1e9ff2d8e50c8 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 23 Jan 2020 18:03:26 +0100 Subject: [PATCH 182/266] Release version 0.1.0 --- README.adoc | 2 +- package.json | 2 +- packages/ipynb2html-cli/package.json | 4 ++-- packages/ipynb2html-core/package.json | 2 +- packages/ipynb2html/package.json | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.adoc b/README.adoc index 3aacf9c..3b5185f 100644 --- a/README.adoc +++ b/README.adoc @@ -2,7 +2,7 @@ :npm-name: ipynb2html :gh-name: jirutka/{npm-name} :gh-branch: master -:version: 0.1.0-beta.8 +:version: 0.1.0 :ansiup-version: 4.0.4 :hljs-version: 9.15.10 :katex-version: 0.11.1 diff --git a/package.json b/package.json index c8127cd..d9f6ed4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html-parent", - "version": "0.1.0-beta.8", + "version": "0.1.0", "private": true, "scripts": { "build": "ttsc --build", diff --git a/packages/ipynb2html-cli/package.json b/packages/ipynb2html-cli/package.json index 57dcbd0..223cff5 100644 --- a/packages/ipynb2html-cli/package.json +++ b/packages/ipynb2html-cli/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html-cli", - "version": "0.1.0-beta.8", + "version": "0.1.0", "description": "CLI tool for converting Jupyter Notebooks to static HTML", "author": "Jakub Jirutka ", "license": "MIT", @@ -41,7 +41,7 @@ "node": ">=10.13.0" }, "dependencies": { - "ipynb2html": "0.1.0-beta.8", + "ipynb2html": "0.1.0", "minimist": "^1.2.0", "minimist-options": "^4.0.2", "nodom": "^2.3.0", diff --git a/packages/ipynb2html-core/package.json b/packages/ipynb2html-core/package.json index e6b2587..b656a91 100644 --- a/packages/ipynb2html-core/package.json +++ b/packages/ipynb2html-core/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html-core", - "version": "0.1.0-beta.8", + "version": "0.1.0", "description": "Convert Jupyter Notebook to static HTML", "author": "Jakub Jirutka ", "license": "MIT", diff --git a/packages/ipynb2html/package.json b/packages/ipynb2html/package.json index 07d9715..9caca30 100644 --- a/packages/ipynb2html/package.json +++ b/packages/ipynb2html/package.json @@ -1,6 +1,6 @@ { "name": "ipynb2html", - "version": "0.1.0-beta.8", + "version": "0.1.0", "description": "Convert Jupyter Notebook to static HTML", "author": "Jakub Jirutka ", "license": "MIT", @@ -45,7 +45,7 @@ "dependencies": { "anser": "^1.4.9", "highlightjs": "^9.16.2", - "ipynb2html-core": "0.1.0-beta.8", + "ipynb2html-core": "0.1.0", "katex": "^0.11.1", "marked": "^0.8.0" }, From b886c02ad54b77828e1926bb31c7a4e82ee6ae4a Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 6 Feb 2020 01:00:06 +0100 Subject: [PATCH 183/266] Initial commit From 38048f84de05c877db1de8bee9dc78660cb576c8 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 6 Feb 2020 12:02:55 +0100 Subject: [PATCH 184/266] Replace ESLint rule no-unused-vars-experimental with no-unused-vars The experimental rule leverages the TypeScript compiler's unused variable checks to report. Thus it correctly identifies even import used for compilerOptions.jsxFactory etc. --- .eslintrc.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 2ac9470..8446eda 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -102,9 +102,9 @@ module.exports = { '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-namespace': 'warn', '@typescript-eslint/no-require-imports': 'error', - '@typescript-eslint/no-unused-vars': ['error', { - argsIgnorePattern: '^_', - }], + // Disabled in favour of the next rule. + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-unused-vars-experimental': 'error', '@typescript-eslint/no-use-before-define': ['error', { classes: true, functions: false, From 1e0400a16027cff13ccb85a388af88230d573d53 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 6 Feb 2020 12:08:52 +0100 Subject: [PATCH 185/266] Switch ESLint rule no-non-null-assertion to warn --- .eslintrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index 8446eda..d4bfbe9 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -101,6 +101,7 @@ module.exports = { }], '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/no-namespace': 'warn', + '@typescript-eslint/no-non-null-assertion': 'warn', '@typescript-eslint/no-require-imports': 'error', // Disabled in favour of the next rule. '@typescript-eslint/no-unused-vars': 'off', @@ -144,7 +145,6 @@ module.exports = { 'space-in-parens': 'off', // jest.mock() must be above imports. 'import/first': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', }, }, ], From ddef7d0da59be595a6948747d11accf5c9298855 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 7 Feb 2020 00:58:33 +0100 Subject: [PATCH 186/266] Fix package script "lint" in packages/* --- packages/ipynb2html-cli/package.json | 2 +- packages/ipynb2html-core/package.json | 2 +- packages/ipynb2html/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ipynb2html-cli/package.json b/packages/ipynb2html-cli/package.json index 223cff5..e8e9c41 100644 --- a/packages/ipynb2html-cli/package.json +++ b/packages/ipynb2html-cli/package.json @@ -32,7 +32,7 @@ "build": "ttsc --build", "bundle": "rollup -c && ./scripts/pack-bundle", "clean": "rimraf coverage/ dist/ lib/ .tsbuildinfo", - "lint": "eslint --ext .ts,.tsx,.js .", + "lint": "PKGDIR=$PWD; cd ../../ && eslint --ext .ts,.tsx,.js $PKGDIR", "prepublishOnly": "run-s readme2md", "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 b656a91..b893188 100644 --- a/packages/ipynb2html-core/package.json +++ b/packages/ipynb2html-core/package.json @@ -26,7 +26,7 @@ "scripts": { "build": "ttsc --build", "clean": "rimraf coverage/ lib/ .tsbuildinfo", - "lint": "eslint --ext .ts,.tsx,.js .", + "lint": "PKGDIR=$PWD; cd ../../ && eslint --ext .ts,.tsx,.js $PKGDIR", "prepublishOnly": "run-s readme2md", "test": "jest --detectOpenHandles --coverage --verbose", "readme2md": "../../scripts/adoc2md -a npm-readme ../../README.adoc > README.md", diff --git a/packages/ipynb2html/package.json b/packages/ipynb2html/package.json index 9caca30..8ef3086 100644 --- a/packages/ipynb2html/package.json +++ b/packages/ipynb2html/package.json @@ -32,7 +32,7 @@ "build": "ttsc --build", "bundle": "rollup -c", "clean": "rimraf coverage/ dist/ lib/ .tsbuildinfo", - "lint": "eslint --ext .ts,.tsx,.js .", + "lint": "PKGDIR=$PWD; cd ../../ && eslint --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", "test": "jest --detectOpenHandles --coverage --verbose", From 56608c27040dea7283c1960e148ca188be9ad397 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Fri, 7 Feb 2020 01:03:46 +0100 Subject: [PATCH 187/266] Use ESLint cache --- .gitignore | 1 + package.json | 4 ++-- packages/ipynb2html-cli/package.json | 4 ++-- packages/ipynb2html-core/package.json | 4 ++-- packages/ipynb2html/package.json | 4 ++-- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 7125557..1961eb9 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ /.*cache/ /.tmp/ node_modules/ +.eslintcache .tsbuildinfo tsconfig.tsbuildinfo *.log diff --git a/package.json b/package.json index d9f6ed4..ee20320 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "scripts": { "build": "ttsc --build", "bundle": "wsrun --exclude-missing bundle", - "clean": "rimraf coverage/ dist/ lib/ *.log && wsrun clean", - "lint": "eslint --ext .ts,.tsx,.js .", + "clean": "rimraf coverage/ dist/ lib/ .eslintcache *.log && wsrun clean", + "lint": "eslint --cache --ext .ts,.tsx,.js .", "postinstall": "patch-package && run-s build", "publish-all": "wsrun --serial publish", "test": "jest --detectOpenHandles --coverage --verbose", diff --git a/packages/ipynb2html-cli/package.json b/packages/ipynb2html-cli/package.json index e8e9c41..64f7895 100644 --- a/packages/ipynb2html-cli/package.json +++ b/packages/ipynb2html-cli/package.json @@ -31,8 +31,8 @@ "scripts": { "build": "ttsc --build", "bundle": "rollup -c && ./scripts/pack-bundle", - "clean": "rimraf coverage/ dist/ lib/ .tsbuildinfo", - "lint": "PKGDIR=$PWD; cd ../../ && eslint --ext .ts,.tsx,.js $PKGDIR", + "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-ts": "ttsc --build --watch" diff --git a/packages/ipynb2html-core/package.json b/packages/ipynb2html-core/package.json index b893188..41366a8 100644 --- a/packages/ipynb2html-core/package.json +++ b/packages/ipynb2html-core/package.json @@ -25,8 +25,8 @@ ], "scripts": { "build": "ttsc --build", - "clean": "rimraf coverage/ lib/ .tsbuildinfo", - "lint": "PKGDIR=$PWD; cd ../../ && eslint --ext .ts,.tsx,.js $PKGDIR", + "clean": "rimraf coverage/ lib/ .eslintcache .tsbuildinfo", + "lint": "PKGDIR=$PWD; cd ../../ && eslint --cache --ext .ts,.tsx,.js $PKGDIR", "prepublishOnly": "run-s readme2md", "test": "jest --detectOpenHandles --coverage --verbose", "readme2md": "../../scripts/adoc2md -a npm-readme ../../README.adoc > README.md", diff --git a/packages/ipynb2html/package.json b/packages/ipynb2html/package.json index 8ef3086..f34793a 100644 --- a/packages/ipynb2html/package.json +++ b/packages/ipynb2html/package.json @@ -31,8 +31,8 @@ "scripts": { "build": "ttsc --build", "bundle": "rollup -c", - "clean": "rimraf coverage/ dist/ lib/ .tsbuildinfo", - "lint": "PKGDIR=$PWD; cd ../../ && eslint --ext .ts,.tsx,.js $PKGDIR", + "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", "test": "jest --detectOpenHandles --coverage --verbose", From 4c130844717701b6fb06e6449797ef7c67642161 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Thu, 13 Feb 2020 01:26:01 +0100 Subject: [PATCH 188/266] Create CNAME file with ipynb.js.org --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..a9c1452 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +ipynb.js.org From 7bc17b2fdc350b37efe43033d502d34a8c20d0fb Mon Sep 17 00:00:00 2001 From: jirutka Date: Thu, 13 Feb 2020 00:27:33 +0000 Subject: [PATCH 189/266] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20=20-?= =?UTF-8?q?=2047095a52bad8cf85d102db54a8f54b59c7e17564=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 31 +++++++++++++++++++++++++++++++ ipynb-viewer.00416c66.css | 2 ++ ipynb-viewer.00416c66.css.map | 1 + ipynb-viewer.0112acd3.js | 19 +++++++++++++++++++ ipynb-viewer.0112acd3.js.map | 1 + 5 files changed, 54 insertions(+) create mode 100644 index.html create mode 100644 ipynb-viewer.00416c66.css create mode 100644 ipynb-viewer.00416c66.css.map create mode 100644 ipynb-viewer.0112acd3.js create mode 100644 ipynb-viewer.0112acd3.js.map diff --git a/index.html b/index.html new file mode 100644 index 0000000..3f9b025 --- /dev/null +++ b/index.html @@ -0,0 +1,31 @@ + + + + + + .ipynb viewer + + + + + + + + + + + diff --git a/ipynb-viewer.00416c66.css b/ipynb-viewer.00416c66.css new file mode 100644 index 0000000..83c25dc --- /dev/null +++ b/ipynb-viewer.00416c66.css @@ -0,0 +1,2 @@ +body,html{margin:0;padding:0;color:#2a2a2a;font-family:sans-serif;background-color:#dedede}code,pre{font-size:.85rem}h1,h2,h3,h4,h5,h6{margin-top:1.6em}table{border:1px solid #cfcfcf;border-collapse:collapse}th{font-weight:600}td,th{padding:.2em .4em;border:1px solid #cfcfcf}tbody tr:nth-child(2n),thead tr{background-color:#f7f7f7}tbody tr:hover,thead tr:hover{background-color:#cfcfcf}.dragover{opacity:.5}#header{display:flex;flex-wrap:nowrap;align-items:center;color:#fff;background-color:#24292e}#header .logo{flex-shrink:0;width:7.5rem;height:2rem;margin:0 .6rem;font-size:0;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 31.75 7.94' fill='%23fff'%3E%3Cg aria-label='ipynbviewer'%3E%3Cpath d='M1.52 6.2q-.22 0-.33-.14-.1-.13-.1-.4l.02-.35q.02-.23.08-.55l.13-.75.18-.97-.25-.37q.16-.14.36-.23.2-.09.36-.09.17 0 .24.09.08.09.08.29l-.04.22-.08.41-.1.54-.12.6-.08.59q-.03.27-.03.5 0 .14.03.23.03.1.08.16-.2.21-.43.21zm.41-4.31q-.18 0-.3-.11t-.12-.3q0-.14.08-.26.07-.12.2-.19.12-.06.26-.06.19 0 .3.1.12.11.12.29 0 .15-.07.27-.08.12-.2.19-.12.07-.27.07zm2.33 4.15q-.24 0-.47-.05-.03-.07-.04-.16l-.02-.2q.54 0 .94-.22.4-.22.63-.61.22-.4.22-.92 0-.38-.13-.59-.14-.21-.38-.21-.25 0-.46.28-.22.28-.4.8-.16.53-.3 1.27l.09-2.31.32.22q.17-.47.45-.73t.61-.26q.29 0 .5.18.22.18.33.5.12.33.12.77 0 .48-.15.89-.15.41-.42.71t-.64.47q-.36.17-.8.17zm-.82 1.23q-.2 0-.3-.15-.1-.14-.1-.44l.03-.46.1-.83.15-1.1.18-1.25-.25-.37q.17-.14.36-.23.2-.09.36-.09.18 0 .24.09.08.08.08.28 0 .16-.05.45l-.13.68-.15.84q-.08.45-.13.93-.05.49-.05.98 0 .15.03.26.04.12.1.2-.1.1-.22.15-.12.06-.25.06zm3.58 0q-.36 0-.54-.16-.18-.15-.18-.41 0-.12.05-.24t.1-.19q.06.09.14.17.08.08.2.13.13.05.32.05.18 0 .4-.09.22-.09.46-.28.25-.18.48-.48.22-.3.4-.71.19-.42.3-.96.1-.54.1-1.22v-.17l-.01-.17q.11-.1.22-.14.1-.05.2-.05.15 0 .25.1t.1.33q0 .43-.1.93-.09.5-.27 1-.18.5-.44.96-.25.46-.58.82-.34.36-.73.57-.4.2-.87.2zm1.22-1.08q-.34 0-.54-.15-.19-.16-.28-.43-.09-.27-.12-.6l-.03-.7q0-.36-.02-.7-.01-.34-.08-.62-.06-.28-.22-.45.2-.19.44-.19.23 0 .36.15.13.15.18.4.06.25.07.57v1.28q.02.3.08.56.05.25.18.4.13.15.37.15zm2.8.01q-.23 0-.33-.14-.1-.13-.1-.4l.03-.42q.03-.29.1-.66l.13-.78.15-.76-.24-.37q.15-.13.34-.22.2-.08.36-.08.18 0 .25.09.08.08.08.28 0 .16-.05.36-.04.19-.1.35l.05.03q.28-.57.62-.85.35-.28.76-.28.33 0 .49.2.16.2.16.6 0 .27-.05.57-.05.3-.13.6l-.12.64q-.05.32-.05.63 0 .27.09.4-.2.2-.4.2-.23 0-.34-.13-.1-.13-.1-.4 0-.25.05-.55l.11-.62.12-.58q.04-.27.04-.47 0-.22-.07-.32-.06-.1-.2-.1-.2 0-.39.13-.18.14-.35.39-.17.24-.3.57-.14.33-.21.7-.08.38-.08.78 0 .27.08.4-.2.2-.4.2zm4.26 0q-.24 0-.4-.09-.18-.08-.26-.27-.1-.2-.1-.54 0-.2.04-.5.03-.3.1-.73l.14-.95.2-1.15-.25-.36q.15-.15.35-.23.2-.1.36-.1.17 0 .25.1.07.07.07.27 0 .21-.1.65l-.2.99.05.03q.19-.46.47-.71.3-.26.63-.26.3 0 .5.18.22.17.33.48.12.31.12.74 0 .52-.17.97-.17.44-.48.78-.32.33-.74.51t-.91.18zm-.12-.48q.35-.02.66-.17.3-.15.53-.4.23-.25.35-.57.13-.33.13-.7 0-.38-.13-.59-.14-.21-.38-.21-.22 0-.43.19-.21.18-.38.53-.16.35-.26.84-.1.48-.1 1.08zM19.32 4.18q-.16 0-.25-.08-.08-.06-.12-.24-.03-.17-.03-.47v-.45l-.01-.42q-.01-.2-.06-.37-.04-.16-.14-.28.1-.1.24-.1.14 0 .21.12.08.11.1.37.04.26.04.7v.89h.03q.27-.44.44-.76.16-.32.24-.54.07-.23.07-.36 0-.18-.07-.32l.15-.07.12-.02q.09 0 .14.08.05.07.05.2 0 .12-.05.29-.05.17-.15.4l-.25.51-.35.64.05.11q-.04.05-.1.09-.07.04-.15.05-.08.03-.15.03zm1.88 0q-.1 0-.16-.07-.06-.06-.06-.2l.01-.22.05-.34.09-.5.14-.72-.15-.19q.08-.08.19-.12.1-.04.19-.04.1 0 .13.04.05.05.05.17l-.03.13-.05.27-.08.36-.07.4-.05.39-.02.33v.12l.06.08q-.11.1-.23.1zm.3-2.73q-.1 0-.17-.06-.06-.06-.06-.16 0-.07.04-.14.03-.06.1-.1.07-.04.15-.04.11 0 .17.06.07.05.07.15 0 .08-.04.15-.04.07-.1.1-.07.04-.16.04zm1.44 2.73q-.35 0-.55-.25-.2-.25-.2-.69 0-.32.09-.58.09-.27.25-.47.16-.2.38-.3.22-.11.48-.11t.4.14q.16.15.16.4 0 .28-.17.48-.17.19-.5.29-.32.1-.78.1l.04-.21q.5 0 .77-.17.27-.18.27-.5 0-.13-.07-.2-.06-.09-.18-.09-.15 0-.28.1-.13.1-.24.26-.1.17-.15.4-.06.23-.06.48 0 .3.1.48t.27.18q.22 0 .35-.16.14-.15.15-.42.13 0 .2.06.07.05.07.17 0 .16-.1.3-.11.13-.3.22-.17.09-.4.09zm1.86 0q-.15 0-.2-.1-.05-.1-.05-.39V2.65q-.02-.25-.06-.44-.05-.2-.15-.34.1-.1.23-.1.14 0 .22.12.07.11.1.37t.03.7v.89h.03q.22-.32.36-.6.14-.29.21-.5.08-.22.1-.34l.04-.14q0-.04-.03-.1l-.06-.1-.04-.08.12-.07q.05-.03.1-.03.1 0 .15.08.05.07.05.2t-.04.29l-.13.34-.22.46q-.13.28-.24.46-.1.18-.19.28-.08.1-.17.14-.08.04-.17.04zm1.14 0q-.12 0-.19-.07t-.1-.19l-.03-.28-.1-1.65q.04-.05.1-.07.06-.03.13-.03l.08.23.06 1.73h.03q.23-.44.37-.76.14-.32.2-.54.07-.23.07-.36 0-.18-.06-.32l.14-.07.12-.02q.09 0 .13.08.05.07.05.2 0 .12-.04.29-.04.17-.12.4l-.22.51-.3.64.05.11q-.04.05-.1.09-.06.04-.14.05-.06.03-.13.03zm2.19 0q-.35 0-.55-.25-.2-.25-.2-.69 0-.32.09-.58.09-.27.25-.47.16-.2.38-.3.22-.11.48-.11t.4.14q.16.15.16.4 0 .28-.17.48-.17.19-.5.29-.31.1-.78.1l.04-.21q.5 0 .77-.17.28-.18.28-.5 0-.13-.07-.2-.07-.09-.19-.09-.15 0-.28.1-.13.1-.23.26-.1.17-.16.4t-.06.48q0 .3.1.48t.27.18q.22 0 .35-.16.14-.15.15-.42.13 0 .2.06.07.05.07.17 0 .16-.1.3-.11.13-.3.22-.17.09-.4.09zm1.72 0q-.12 0-.17-.08-.06-.08-.06-.24l.02-.27.07-.43.1-.5.1-.5-.15-.19.17-.13q.09-.05.16-.05.1 0 .14.07.04.06.04.14 0 .13-.04.28l-.1.3.04.03q.1-.29.21-.47.11-.19.22-.28.11-.09.22-.09.1 0 .16.06t.06.17q0 .13-.09.2-.08.08-.22.08-.13 0-.26.14-.13.13-.23.36-.1.22-.16.5-.06.3-.06.59 0 .14.04.2-.1.1-.21.1z'/%3E%3C/g%3E%3C/svg%3E") no-repeat 0/contain}#header .file-input{position:absolute!important;width:1px;height:1px;padding:0;overflow:hidden;white-space:nowrap;border:0;clip:rect(0,0,0,0)}#header .file-label{display:inline-block;flex-shrink:0;width:1.5rem;height:1.5rem;margin:0 .8rem;color:transparent;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 50 50' fill='%23ddd'%3E%3Cpath d='M3 4a3 3 0 00-3 3v26l3.2-16.9c.5-2.6 2.4-4.1 5.2-4.1H47v-1a3 3 0 00-3-3H18c-.2-.1-.8-1-1.1-1.5C16 5.3 15.3 4 14 4zm5.4 10c-1.2 0-2.8.4-3.2 2.5L0 44v.1a3 3 0 003 3h39a3 3 0 003-3l5-26.8V17a3 3 0 00-3-3zm0 0'/%3E%3C/svg%3E") no-repeat 50%/contain;cursor:pointer}#header .url-form{width:100%}#header .url-input{box-sizing:border-box;width:100%;margin:.6rem 0;padding:0 .5em;color:#fff;font-size:.9rem;line-height:2;background-color:hsla(0,0%,100%,.15);border:0;border-radius:.2em}#header .github-link{display:block;flex-shrink:0;width:1.6rem;height:1.6rem;margin:0 1rem;font-size:0;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23eee'%3E%3Cpath fill-rule='evenodd' d='M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z'/%3E%3C/svg%3E") no-repeat 50%/contain}.error{display:table;max-width:28rem;height:6rem;margin:32vh auto 0;padding-left:8.5rem;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M507 426L283 54a31 31 0 00-54 0L5 426a31 31 0 0026 48h450a31 31 0 0026-48zM256 167c13 0 24 8 24 20 0 40-5 96-5 136 0 10-11 14-19 14-10 0-19-4-19-14 0-40-5-96-5-136 0-12 11-20 24-20zm0 244a25 25 0 010-51c14 0 26 12 26 26 0 13-12 25-26 25z'/%3E%3C/svg%3E") no-repeat;background-position:0 0;background-size:6rem 6rem}.error summary{display:block;font-size:1.13em;cursor:pointer}.error summary::-webkit-details-marker{display:none}.error summary:after{display:inline-block;width:.7em;height:.7em;margin-left:.5em;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 444.819 444.819'%3E%3Cpath d='M434 114l-21-21c-8-7-16-11-26-11s-19 4-26 11L222 232 84 93a37 37 0 00-52 0l-21 21c-7 7-11 16-11 26s4 19 11 26l186 186a35 35 0 0052 0l185-186a37 37 0 000-52z'/%3E%3C/svg%3E") no-repeat 50%/contain;content:""}.error details[open] summary:after{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 445 445'%3E%3Cpath d='M434 279L248 93c-7-7-16-11-26-11s-18 4-25 11L11 279c-7 7-11 16-11 26s4 18 11 25l21 22c7 7 16 11 26 11s19-4 26-11l138-139 139 139c7 7 16 11 26 11s19-4 26-11l21-22a35 35 0 000-52z'/%3E%3C/svg%3E") no-repeat 50%/contain}.error details :not(summary){color:#666}.error :first-child{margin-top:0}.fetching{width:12rem;margin:32vh auto 0;font-size:1.13rem;text-align:center}.fetching:before{display:block;width:4rem;height:4rem;margin:0 auto 2rem;border-top:.3rem solid #f37726;border-right:.3rem solid transparent;border-radius:50%;animation:rotation 1s linear infinite;content:""}.nb-notebook{max-width:45rem;margin:1rem auto 2rem;padding:3rem 6rem;background-color:#fff;box-shadow:4px 4px 8px #cfcfcf,-4px -4px 8px #cfcfcf}.nb-output table{font-size:.9em}@keyframes rotation{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@page{size:A4;margin:30mm 15mm 15mm 7mm}@media screen and (max-width:940px){.nb-notebook{max-width:none;margin:0;padding-right:3rem;padding-left:5rem;box-shadow:none}}@media screen and (max-width:768px){.nb-notebook{padding:.1rem 5% 2rem}}@media (max-width:40em){#header .logo{width:3.8rem;margin:0 .2rem 0 .5rem;background-size:6.8rem 1.75rem}#header .file-label{margin:.6rem}#header .github-link{margin:0 .5rem}.error{height:unset;margin:10vh auto 0;padding:8rem 1rem 0;text-align:center;background-position:top}}@media print{body,html{color:#000;background-color:#fff}#header{display:none}.nb-notebook{max-width:none;margin:0;padding:0 0 0 5rem;box-shadow:none}} +/*# sourceMappingURL=ipynb-viewer.00416c66.css.map */ \ No newline at end of file diff --git a/ipynb-viewer.00416c66.css.map b/ipynb-viewer.00416c66.css.map new file mode 100644 index 0000000..3bfa50b --- /dev/null +++ b/ipynb-viewer.00416c66.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["view.pcss","","ipynb-viewer.00416c66.css"],"names":[],"mappings":"AAAA,UAEE,QAAS,CACT,SAAU,CACV,aAAc,CACd,sBAAuB,CACvB,wBAMF,CAEA,SAEE,gBACF,CAEA,kBAME,gBACF,CAEA,MACE,wBAAyB,CACzB,wBACF,CAEA,GACE,eACF,CAEA,MAEE,iBAAoB,CACpB,wBACF,CAEA,gCAEE,wBACF,CAEA,8BAEE,wBACF,CAEA,UACE,UACF,CAEA,QACE,YAAa,CACb,gBAAiB,CACjB,kBAAmB,CACnB,UAAW,CACX,wBA6EF,CAvEE,cACE,aAAc,CACd,YAAa,CACb,WAAY,CACZ,cAAgB,CAChB,WAAY,CACZ,wrJAOF,CAEA,oBACE,2BAA6B,CAC7B,SAAU,CACV,UAAW,CACX,SAAU,CACV,eAAgB,CAChB,kBAAmB,CACnB,QAAS,CACT,kBACF,CAEA,oBACE,oBAAqB,CACrB,aAAc,CACd,YAAa,CACb,aAAc,CACd,cAAgB,CAChB,iBAAkB,CAClB,8XAA+E,CAC/E,cAKF,CAEA,kBACE,UACF,CAEA,mBACE,qBAAsB,CACtB,UAAW,CACX,cAAgB,CAChB,cAAgB,CAChB,UAAW,CACX,eAAiB,CACjB,aAAc,CACd,oCAAyC,CACzC,QAAS,CACT,kBACF,CAEA,qBACE,aAAc,CACd,aAAc,CACd,YAAa,CACb,aAAc,CACd,aAAc,CACd,WAAY,CACZ,6vBAKF,CAGF,OACE,aAAc,CACd,eAAgB,CAChB,WAAY,CACZ,kBAAwB,CACxB,mBAAoB,CACpB,sYAAiD,CACjD,uBAA6B,CAC7B,yBA0CF,CAhCE,eACE,aAAc,CACd,gBAAiB,CACjB,cAeF,CAbE,uCACE,YACF,CAEA,qBAEE,oBAAqB,CACrB,UAAY,CACZ,WAAa,CACb,gBAAkB,CAClB,yUAAyE,CACzE,UACF,CAGF,mCAEE,sVACF,CAEA,6BACE,UACF,CAEA,oBACE,YACF,CAGF,UACE,WAAY,CACZ,kBAAwB,CACxB,iBAAkB,CAClB,iBAcF,CAZE,iBAEE,aAAc,CACd,UAAW,CACX,WAAY,CACZ,kBAAwB,CACxB,8BAAgC,CAChC,oCAAsC,CACtC,iBAAkB,CAClB,qCAAsC,CACtC,UACF,CAGF,aACE,eAAgB,CAChB,qBAA2B,CAC3B,iBAAkB,CAClB,qBAAuB,CACvB,oDAoBF,CAEA,iBACE,cACF,CAEA,oBACE,GACE,sBACF,CAEA,GACE,uBACF,CACF,CAEA,MACE,OAAQ,CACR,yBACF,CCjQA,oCDqNA,aAQI,cAAe,CACf,QAAS,CACT,kBAAmB,CACnB,iBAAkB,CAClB,eAaJ,CEpBA,CD1NA,oCDqNA,aAgBI,qBASJ,CEbA,CDjOA,wBDoEE,cASI,YAAa,CACb,sBAAyB,CACzB,8BAEJ,CAaA,oBAWI,YAEJ,CAmBA,qBAUI,cAEJ,CAGF,OAWI,YAAa,CACb,kBAAwB,CACxB,mBAAyB,CACzB,iBAAkB,CAClB,uBAmCJ,CE2DA,CD1PA,aDAA,UASI,UAAY,CACZ,qBAEJ,CA6CA,QAQI,YA0EJ,CA0EA,aAoBI,cAAe,CACf,QAAS,CACT,kBAAmB,CACnB,eAEJ,CEgCA","file":"ipynb-viewer.00416c66.css","sourcesContent":["html,\nbody {\n margin: 0;\n padding: 0;\n color: #2a2a2a;\n font-family: sans-serif;\n background-color: #dedede;\n\n @media print {\n color: black;\n background-color: white;\n }\n}\n\ncode,\npre {\n font-size: 0.85rem;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 1.6em;\n}\n\ntable {\n border: 1px solid #cfcfcf;\n border-collapse: collapse;\n}\n\nth {\n font-weight: 600;\n}\n\ntd,\nth {\n padding: 0.2em 0.4em;\n border: 1px solid #cfcfcf;\n}\n\nthead tr,\ntbody tr:nth-child(even) {\n background-color: #f7f7f7;\n}\n\nthead tr:hover,\ntbody tr:hover {\n background-color: #cfcfcf;\n}\n\n.dragover {\n opacity: 0.5;\n}\n\n#header {\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n color: #fff;\n background-color: #24292e;\n\n @media print {\n display: none;\n }\n\n & .logo {\n flex-shrink: 0;\n width: 7.5rem;\n height: 2rem;\n margin: 0 0.6rem;\n font-size: 0;\n background: svg-load('icons/logo.svg', fill: #fff) no-repeat left center / contain;\n\n @media (max-width: 40em) {\n width: 3.8rem;\n margin: 0 0.2rem 0 0.5rem;\n background-size: 6.8rem 1.75rem;\n }\n }\n\n & .file-input {\n position: absolute !important;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n white-space: nowrap;\n border: 0;\n clip: rect(0, 0, 0, 0);\n }\n\n & .file-label {\n display: inline-block;\n flex-shrink: 0;\n width: 1.5rem;\n height: 1.5rem;\n margin: 0 0.8rem;\n color: transparent;\n background: svg-load('icons/folder.svg', fill: #ddd) no-repeat center / contain;\n cursor: pointer;\n\n @media (max-width: 40em) {\n margin: 0.6rem;\n }\n }\n\n & .url-form {\n width: 100%;\n }\n\n & .url-input {\n box-sizing: border-box;\n width: 100%;\n margin: 0.6rem 0;\n padding: 0 0.5em;\n color: #fff;\n font-size: 0.9rem;\n line-height: 2;\n background-color: hsla(0, 0%, 100%, 0.15);\n border: 0;\n border-radius: 0.2em;\n }\n\n & .github-link {\n display: block;\n flex-shrink: 0;\n width: 1.6rem;\n height: 1.6rem;\n margin: 0 1rem;\n font-size: 0;\n background: svg-load('icons/github.svg', fill: #eee) no-repeat center / contain;\n\n @media (max-width: 40em) {\n margin: 0 0.5rem;\n }\n }\n}\n\n.error {\n display: table;\n max-width: 28rem;\n height: 6rem;\n margin: 32vh auto 0 auto;\n padding-left: 8.5rem;\n background: svg-load('icons/alert.svg') no-repeat;\n background-position: left top;\n background-size: 6rem 6rem;\n\n @media (max-width: 40em) {\n height: unset;\n margin: 10vh auto 0 auto;\n padding: 8rem 1rem 0 1rem;\n text-align: center;\n background-position: top center;\n }\n\n & summary {\n display: block;\n font-size: 1.13em;\n cursor: pointer;\n\n &::-webkit-details-marker {\n display: none;\n }\n\n &::after {\n /* Expand arrow after the summary text. */\n display: inline-block;\n width: 0.7em;\n height: 0.7em;\n margin-left: 0.5em;\n background: svg-load('icons/chevron-down.svg') no-repeat center / contain;\n content: '';\n }\n }\n\n & details[open] summary::after {\n /* Collapse arrow after the summary text. */\n background: svg-load('icons/chevron-up.svg') no-repeat center / contain;\n }\n\n & details :not(summary) {\n color: #666;\n }\n\n & :first-child {\n margin-top: 0;\n }\n}\n\n.fetching {\n width: 12rem;\n margin: 32vh auto 0 auto;\n font-size: 1.13rem;\n text-align: center;\n\n &::before {\n /* Spinner */\n display: block;\n width: 4rem;\n height: 4rem;\n margin: 0 auto 2rem auto;\n border-top: 0.3rem solid #f37726;\n border-right: 0.3rem solid transparent;\n border-radius: 50%;\n animation: rotation 1s linear infinite;\n content: \"\";\n }\n}\n\n.nb-notebook {\n max-width: 45rem;\n margin: 1rem auto 2rem auto;\n padding: 3rem 6rem;\n background-color: white;\n box-shadow: 4px 4px 8px #cfcfcf, -4px -4px 8px #cfcfcf;\n\n @media screen and (max-width: 940px) {\n max-width: none;\n margin: 0;\n padding-right: 3rem;\n padding-left: 5rem;\n box-shadow: none;\n }\n\n @media screen and (max-width: 768px) {\n padding: 0.1rem 5% 2rem 5%;\n }\n\n @media print {\n max-width: none;\n margin: 0;\n padding: 0 0 0 5rem;\n box-shadow: none;\n }\n}\n\n.nb-output table {\n font-size: 0.9em;\n}\n\n@keyframes rotation {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n}\n\n@page {\n size: A4;\n margin: 30mm 15mm 15mm 7mm;\n}\n",null,"html,\nbody {\n margin: 0;\n padding: 0;\n color: #2a2a2a;\n font-family: sans-serif;\n background-color: #dedede\n}\n\ncode,\npre {\n font-size: 0.85rem;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 1.6em;\n}\n\ntable {\n border: 1px solid #cfcfcf;\n border-collapse: collapse;\n}\n\nth {\n font-weight: 600;\n}\n\ntd,\nth {\n padding: 0.2em 0.4em;\n border: 1px solid #cfcfcf;\n}\n\nthead tr,\ntbody tr:nth-child(even) {\n background-color: #f7f7f7;\n}\n\nthead tr:hover,\ntbody tr:hover {\n background-color: #cfcfcf;\n}\n\n.dragover {\n opacity: 0.5;\n}\n\n#header {\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n color: #fff;\n background-color: #24292e\n}\n\n#header .logo {\n flex-shrink: 0;\n width: 7.5rem;\n height: 2rem;\n margin: 0 0.6rem;\n font-size: 0;\n background: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 31.75 7.94' fill='%23fff'%3E %3Cg aria-label='ipynbviewer'%3E %3Cpath d='M1.52 6.2q-.22 0-.33-.14-.1-.13-.1-.4l.02-.35q.02-.23.08-.55l.13-.75.18-.97-.25-.37q.16-.14.36-.23.2-.09.36-.09.17 0 .24.09.08.09.08.29l-.04.22-.08.41-.1.54-.12.6-.08.59q-.03.27-.03.5 0 .14.03.23.03.1.08.16-.2.21-.43.21zm.41-4.31q-.18 0-.3-.11t-.12-.3q0-.14.08-.26.07-.12.2-.19.12-.06.26-.06.19 0 .3.1.12.11.12.29 0 .15-.07.27-.08.12-.2.19-.12.07-.27.07zM4.26 6.04q-.24 0-.47-.05-.03-.07-.04-.16l-.02-.2q.54 0 .94-.22.4-.22.63-.61.22-.4.22-.92 0-.38-.13-.59-.14-.21-.38-.21-.25 0-.46.28-.22.28-.4.8-.16.53-.3 1.27l.09-2.31.32.22q.17-.47.45-.73t.61-.26q.29 0 .5.18.22.18.33.5.12.33.12.77 0 .48-.15.89-.15.41-.42.71t-.64.47q-.36.17-.8.17zm-.82 1.23q-.2 0-.3-.15-.1-.14-.1-.44l.03-.46.1-.83.15-1.1.18-1.25-.25-.37q.17-.14.36-.23.2-.09.36-.09.18 0 .24.09.08.08.08.28 0 .16-.05.45l-.13.68-.15.84q-.08.45-.13.93-.05.49-.05.98 0 .15.03.26.04.12.1.2-.1.1-.22.15-.12.06-.25.06zM7.02 7.27q-.36 0-.54-.16-.18-.15-.18-.41 0-.12.05-.24t.1-.19q.06.09.14.17.08.08.2.13.13.05.32.05.18 0 .4-.09.22-.09.46-.28.25-.18.48-.48.22-.3.4-.71.19-.42.3-.96.1-.54.1-1.22v-.17l-.01-.17q.11-.1.22-.14.1-.05.2-.05.15 0 .25.1t.1.33q0 .43-.1.93-.09.5-.27 1-.18.5-.44.96-.25.46-.58.82-.34.36-.73.57-.4.2-.87.2zm1.22-1.08q-.34 0-.54-.15-.19-.16-.28-.43-.09-.27-.12-.6l-.03-.7q0-.36-.02-.7-.01-.34-.08-.62-.06-.28-.22-.45.2-.19.44-.19.23 0 .36.15.13.15.18.4.06.25.07.57L8 4.1v.65q.02.3.08.56.05.25.18.4.13.15.37.15zM11.04 6.2q-.23 0-.33-.14-.1-.13-.1-.4l.03-.42q.03-.29.1-.66l.13-.78.15-.76-.24-.37q.15-.13.34-.22.2-.08.36-.08.18 0 .25.09.08.08.08.28 0 .16-.05.36-.04.19-.1.35l.05.03q.28-.57.62-.85.35-.28.76-.28.33 0 .49.2.16.2.16.6 0 .27-.05.57-.05.3-.13.6l-.12.64q-.05.32-.05.63 0 .27.09.4-.2.2-.4.2-.23 0-.34-.13-.1-.13-.1-.4 0-.25.05-.55l.11-.62.12-.58q.04-.27.04-.47 0-.22-.07-.32-.06-.1-.2-.1-.2 0-.39.13-.18.14-.35.39-.17.24-.3.57-.14.33-.21.7-.08.38-.08.78 0 .27.08.4-.2.2-.4.2zM15.3 6.2q-.24 0-.4-.09-.18-.08-.26-.27-.1-.2-.1-.54 0-.2.04-.5.03-.3.1-.73l.14-.95.2-1.15-.25-.36q.15-.15.35-.23.2-.1.36-.1.17 0 .25.1.07.07.07.27 0 .21-.1.65l-.2.99.05.03q.19-.46.47-.71.3-.26.63-.26.3 0 .5.18.22.17.33.48.12.31.12.74 0 .52-.17.97-.17.44-.48.78-.32.33-.74.51t-.91.18zm-.12-.48q.35-.02.66-.17.3-.15.53-.4.23-.25.35-.57.13-.33.13-.7 0-.38-.13-.59-.14-.21-.38-.21-.22 0-.43.19-.21.18-.38.53-.16.35-.26.84-.1.48-.1 1.08z'/%3E %3Cpath d='M19.32 4.18q-.16 0-.25-.08-.08-.06-.12-.24-.03-.17-.03-.47v-.45l-.01-.42q-.01-.2-.06-.37-.04-.16-.14-.28.1-.1.24-.1.14 0 .21.12.08.11.1.37.04.26.04.7V3.85h.03q.27-.44.44-.76.16-.32.24-.54.07-.23.07-.36 0-.18-.07-.32l.15-.07.12-.02q.09 0 .14.08.05.07.05.2 0 .12-.05.29-.05.17-.15.4l-.25.51-.35.64.05.11q-.04.05-.1.09-.07.04-.15.05-.08.03-.15.03zM21.2 4.18q-.1 0-.16-.07-.06-.06-.06-.2l.01-.22.05-.34.09-.5.14-.72-.15-.19q.08-.08.19-.12.1-.04.19-.04.1 0 .13.04.05.05.05.17l-.03.13-.05.27-.08.36-.07.4-.05.39-.02.33v.12l.06.08q-.11.1-.23.1zm.3-2.73q-.1 0-.17-.06-.06-.06-.06-.16 0-.07.04-.14.03-.06.1-.1.07-.04.15-.04.11 0 .17.06.07.05.07.15 0 .08-.04.15-.04.07-.1.1-.07.04-.16.04zM22.94 4.18q-.35 0-.55-.25-.2-.25-.2-.69 0-.32.09-.58.09-.27.25-.47.16-.2.38-.3.22-.11.48-.11t.4.14q.16.15.16.4 0 .28-.17.48-.17.19-.5.29-.32.1-.78.1l.04-.21q.5 0 .77-.17.27-.18.27-.5 0-.13-.07-.2-.06-.09-.18-.09-.15 0-.28.1-.13.1-.24.26-.1.17-.15.4-.06.23-.06.48 0 .3.1.48t.27.18q.22 0 .35-.16.14-.15.15-.42.13 0 .2.06.07.05.07.17 0 .16-.1.3-.11.13-.3.22-.17.09-.4.09zM24.8 4.18q-.15 0-.2-.1-.05-.1-.05-.39v-.54-.5q-.02-.25-.06-.44-.05-.2-.15-.34.1-.1.23-.1.14 0 .22.12.07.11.1.37t.03.7V3.85h.03q.22-.32.36-.6.14-.29.21-.5.08-.22.1-.34l.04-.14q0-.04-.03-.1l-.06-.1-.04-.08.12-.07q.05-.03.1-.03.1 0 .15.08.05.07.05.2t-.04.29l-.13.34-.22.46q-.13.28-.24.46-.1.18-.19.28-.08.1-.17.14-.08.04-.17.04zm1.14 0q-.12 0-.19-.07t-.1-.19l-.03-.28-.1-1.65q.04-.05.1-.07.06-.03.13-.03l.08.23.06 1.73h.03q.23-.44.37-.76.14-.32.2-.54.07-.23.07-.36 0-.18-.06-.32l.14-.07.12-.02q.09 0 .13.08.05.07.05.2 0 .12-.04.29-.04.17-.12.4l-.22.51-.3.64.05.11q-.04.05-.1.09-.06.04-.14.05-.06.03-.13.03zM28.13 4.18q-.35 0-.55-.25-.2-.25-.2-.69 0-.32.09-.58.09-.27.25-.47.16-.2.38-.3.22-.11.48-.11t.4.14q.16.15.16.4 0 .28-.17.48-.17.19-.5.29-.31.1-.78.1l.04-.21q.5 0 .77-.17.28-.18.28-.5 0-.13-.07-.2-.07-.09-.19-.09-.15 0-.28.1-.13.1-.23.26-.1.17-.16.4t-.06.48q0 .3.1.48t.27.18q.22 0 .35-.16.14-.15.15-.42.13 0 .2.06.07.05.07.17 0 .16-.1.3-.11.13-.3.22-.17.09-.4.09zM29.85 4.18q-.12 0-.17-.08-.06-.08-.06-.24l.02-.27.07-.43.1-.5.1-.5-.15-.19.17-.13q.09-.05.16-.05.1 0 .14.07.04.06.04.14 0 .13-.04.28l-.1.3.04.03q.1-.29.21-.47.11-.19.22-.28.11-.09.22-.09.1 0 .16.06t.06.17q0 .13-.09.2-.08.08-.22.08-.13 0-.26.14-.13.13-.23.36-.1.22-.16.5-.06.3-.06.59 0 .14.04.2-.1.1-.21.1z'/%3E %3C/g%3E %3C/svg%3E\") no-repeat left center / contain\n }\n\n#header .file-input {\n position: absolute !important;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n white-space: nowrap;\n border: 0;\n clip: rect(0, 0, 0, 0);\n }\n\n#header .file-label {\n display: inline-block;\n flex-shrink: 0;\n width: 1.5rem;\n height: 1.5rem;\n margin: 0 0.8rem;\n color: transparent;\n background: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 50 50' fill='%23ddd'%3E %3Cpath d='M3 4a3 3 0 00-3 3v26l3.2-16.9c.5-2.6 2.4-4.1 5.2-4.1H47v-1a3 3 0 00-3-3H18c-.2-.1-.8-1-1.1-1.5C16 5.3 15.3 4 14 4zm5.4 10c-1.2 0-2.8.4-3.2 2.5L0 44v.1a3 3 0 003 3h39a3 3 0 003-3l5-26.8V17a3 3 0 00-3-3zm0 0'/%3E %3C/svg%3E\") no-repeat center / contain;\n cursor: pointer\n }\n\n#header .url-form {\n width: 100%;\n }\n\n#header .url-input {\n box-sizing: border-box;\n width: 100%;\n margin: 0.6rem 0;\n padding: 0 0.5em;\n color: #fff;\n font-size: 0.9rem;\n line-height: 2;\n background-color: hsla(0, 0%, 100%, 0.15);\n border: 0;\n border-radius: 0.2em;\n }\n\n#header .github-link {\n display: block;\n flex-shrink: 0;\n width: 1.6rem;\n height: 1.6rem;\n margin: 0 1rem;\n font-size: 0;\n background: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23eee'%3E %3Cpath fill-rule='evenodd' d='M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z'/%3E %3C/svg%3E\") no-repeat center / contain\n }\n\n.error {\n display: table;\n max-width: 28rem;\n height: 6rem;\n margin: 32vh auto 0 auto;\n padding-left: 8.5rem;\n background: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E %3Cpath d='M507 426L283 54a31 31 0 00-54 0L5 426a31 31 0 0026 48h450a31 31 0 0026-48zM256 167c13 0 24 8 24 20 0 40-5 96-5 136 0 10-11 14-19 14-10 0-19-4-19-14 0-40-5-96-5-136 0-12 11-20 24-20zm0 244a25 25 0 010-51c14 0 26 12 26 26 0 13-12 25-26 25z'/%3E %3C/svg%3E\") no-repeat;\n background-position: left top;\n background-size: 6rem 6rem\n}\n\n.error summary {\n display: block;\n font-size: 1.13em;\n cursor: pointer\n }\n\n.error summary::-webkit-details-marker {\n display: none;\n }\n\n.error summary::after {\n /* Expand arrow after the summary text. */\n display: inline-block;\n width: 0.7em;\n height: 0.7em;\n margin-left: 0.5em;\n background: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 444.819 444.819'%3E %3Cpath d='M434 114l-21-21c-8-7-16-11-26-11s-19 4-26 11L222 232 84 93a37 37 0 00-52 0l-21 21c-7 7-11 16-11 26s4 19 11 26l186 186a35 35 0 0052 0l185-186a37 37 0 000-52z'/%3E %3C/svg%3E\") no-repeat center / contain;\n content: '';\n }\n\n.error details[open] summary::after {\n /* Collapse arrow after the summary text. */\n background: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 445 445'%3E %3Cpath d='M434 279L248 93c-7-7-16-11-26-11s-18 4-25 11L11 279c-7 7-11 16-11 26s4 18 11 25l21 22c7 7 16 11 26 11s19-4 26-11l138-139 139 139c7 7 16 11 26 11s19-4 26-11l21-22a35 35 0 000-52z'/%3E %3C/svg%3E\") no-repeat center / contain;\n }\n\n.error details :not(summary) {\n color: #666;\n }\n\n.error :first-child {\n margin-top: 0;\n }\n\n.fetching {\n width: 12rem;\n margin: 32vh auto 0 auto;\n font-size: 1.13rem;\n text-align: center\n}\n\n.fetching::before {\n /* Spinner */\n display: block;\n width: 4rem;\n height: 4rem;\n margin: 0 auto 2rem auto;\n border-top: 0.3rem solid #f37726;\n border-right: 0.3rem solid transparent;\n border-radius: 50%;\n animation: rotation 1s linear infinite;\n content: \"\";\n }\n\n.nb-notebook {\n max-width: 45rem;\n margin: 1rem auto 2rem auto;\n padding: 3rem 6rem;\n background-color: white;\n box-shadow: 4px 4px 8px #cfcfcf, -4px -4px 8px #cfcfcf\n}\n\n.nb-output table {\n font-size: 0.9em;\n}\n\n@keyframes rotation {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n}\n\n@page {\n size: A4;\n margin: 30mm 15mm 15mm 7mm;\n}\n\n@media screen and (max-width: 940px) {\n\n.nb-notebook {\n max-width: none;\n margin: 0;\n padding-right: 3rem;\n padding-left: 5rem;\n box-shadow: none\n}\n}\n\n@media screen and (max-width: 768px) {\n\n.nb-notebook {\n padding: 0.1rem 5% 2rem 5%\n}\n}\n\n@media (max-width: 40em) {\n\n#header .logo {\n width: 3.8rem;\n margin: 0 0.2rem 0 0.5rem;\n background-size: 6.8rem 1.75rem\n }\n\n#header .file-label {\n margin: 0.6rem\n }\n\n#header .github-link {\n margin: 0 0.5rem\n }\n\n.error {\n height: unset;\n margin: 10vh auto 0 auto;\n padding: 8rem 1rem 0 1rem;\n text-align: center;\n background-position: top center\n}\n}\n\n@media print {\n\nhtml,\nbody {\n color: black;\n background-color: white\n}\n\n#header {\n display: none\n}\n\n.nb-notebook {\n max-width: none;\n margin: 0;\n padding: 0 0 0 5rem;\n box-shadow: none\n}\n}\n\n/*# sourceMappingURL=ipynb-viewer.00416c66.css.map */"]} \ No newline at end of file diff --git a/ipynb-viewer.0112acd3.js b/ipynb-viewer.0112acd3.js new file mode 100644 index 0000000..88e1d6a --- /dev/null +++ b/ipynb-viewer.0112acd3.js @@ -0,0 +1,19 @@ +/*! +* ${ipynb2html-viewer} ${47095a52bad8cf85d102db54a8f54b59c7e17564} +* +* Copyright 2020 by Jakub Jirutka +* This project is licensed under the terms of the MIT license. +* +* Date: 2020-02-13 +* */ +/*! + * Bundled npm packages + * + * | Name | Version | License(s) | Publisher | Source | + * | ---------------- | ------- | ---------- | ------------- | ---------------------------------------- | + * | @hyperapp/events | 0.0.4 | MIT | Jorge Bucaran | jorgebucaran/hyperapp/lib/events | + * | core-js | 3.6.4 | MIT | | https://github.com/zloirock/core-js | + * | hyperapp | 2.0.4 | MIT | Jorge Bucaran | https://github.com/jorgebucaran/hyperapp | + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("ipynb2html")):"function"==typeof define&&define.amd?define(["ipynb2html"],t):(e=e||self).init=t(e.ipynb2html)}(this,(function(e){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function n(e,t){return e(t={exports:{}},t.exports),t.exports}var r=function(e){return e&&e.Math==Math&&e},o=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof t&&t)||Function("return this")(),i=function(e){try{return!!e()}catch(e){return!0}},a=!i((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),u={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,l={f:c&&!u.call({1:2},1)?function(e){var t=c(this,e);return!!t&&t.enumerable}:u},f=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},s={}.toString,h=function(e){return s.call(e).slice(8,-1)},p="".split,v=i((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==h(e)?p.call(e,""):Object(e)}:Object,d=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e},y=function(e){return v(d(e))},g=function(e){return"object"==typeof e?null!==e:"function"==typeof e},m=function(e,t){if(!g(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!g(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!g(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!g(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")},b={}.hasOwnProperty,w=function(e,t){return b.call(e,t)},S=o.document,E=g(S)&&g(S.createElement),x=function(e){return E?S.createElement(e):{}},k=!a&&!i((function(){return 7!=Object.defineProperty(x("div"),"a",{get:function(){return 7}}).a})),R=Object.getOwnPropertyDescriptor,A={f:a?R:function(e,t){if(e=y(e),t=m(t,!0),k)try{return R(e,t)}catch(e){}if(w(e,t))return f(!l.f.call(e,t),e[t])}},L=function(e){if(!g(e))throw TypeError(String(e)+" is not an object");return e},O=Object.defineProperty,j={f:a?O:function(e,t,n){if(L(e),t=m(t,!0),L(n),k)try{return O(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},T=a?function(e,t,n){return j.f(e,t,f(1,n))}:function(e,t,n){return e[t]=n,e},P=function(e,t){try{T(o,e,t)}catch(n){o[e]=t}return t},U=o["__core-js_shared__"]||P("__core-js_shared__",{}),I=Function.toString;"function"!=typeof U.inspectSource&&(U.inspectSource=function(e){return I.call(e)});var C,_,N,B=U.inspectSource,F=o.WeakMap,M="function"==typeof F&&/native code/.test(B(F)),q=n((function(e){(e.exports=function(e,t){return U[e]||(U[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.6.4",mode:"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})})),D=0,G=Math.random(),H=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++D+G).toString(36)},V=q("keys"),z=function(e){return V[e]||(V[e]=H(e))},W={},K=o.WeakMap;if(M){var $=new K,J=$.get,Y=$.has,Q=$.set;C=function(e,t){return Q.call($,e,t),t},_=function(e){return J.call($,e)||{}},N=function(e){return Y.call($,e)}}else{var X=z("state");W[X]=!0,C=function(e,t){return T(e,X,t),t},_=function(e){return w(e,X)?e[X]:{}},N=function(e){return w(e,X)}}var Z,ee,te={set:C,get:_,has:N,enforce:function(e){return N(e)?_(e):C(e,{})},getterFor:function(e){return function(t){var n;if(!g(t)||(n=_(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}},ne=n((function(e){var t=te.get,n=te.enforce,r=String(String).split("String");(e.exports=function(e,t,i,a){var u=!!a&&!!a.unsafe,c=!!a&&!!a.enumerable,l=!!a&&!!a.noTargetGet;"function"==typeof i&&("string"!=typeof t||w(i,"name")||T(i,"name",t),n(i).source=r.join("string"==typeof t?t:"")),e!==o?(u?!l&&e[t]&&(c=!0):delete e[t],c?e[t]=i:T(e,t,i)):c?e[t]=i:P(t,i)})(Function.prototype,"toString",(function(){return"function"==typeof this&&t(this).source||B(this)}))})),re=o,oe=function(e){return"function"==typeof e?e:void 0},ie=function(e,t){return arguments.length<2?oe(re[e])||oe(o[e]):re[e]&&re[e][t]||o[e]&&o[e][t]},ae=Math.ceil,ue=Math.floor,ce=function(e){return isNaN(e=+e)?0:(e>0?ue:ae)(e)},le=Math.min,fe=function(e){return e>0?le(ce(e),9007199254740991):0},se=Math.max,he=Math.min,pe=function(e,t){var n=ce(e);return n<0?se(n+t,0):he(n,t)},ve=function(e){return function(t,n,r){var o,i=y(t),a=fe(i.length),u=pe(r,a);if(e&&n!=n){for(;a>u;)if((o=i[u++])!=o)return!0}else for(;a>u;u++)if((e||u in i)&&i[u]===n)return e||u||0;return!e&&-1}},de={includes:ve(!0),indexOf:ve(!1)}.indexOf,ye=function(e,t){var n,r=y(e),o=0,i=[];for(n in r)!w(W,n)&&w(r,n)&&i.push(n);for(;t.length>o;)w(r,n=t[o++])&&(~de(i,n)||i.push(n));return i},ge=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],me=ge.concat("length","prototype"),be={f:Object.getOwnPropertyNames||function(e){return ye(e,me)}},we={f:Object.getOwnPropertySymbols},Se=ie("Reflect","ownKeys")||function(e){var t=be.f(L(e)),n=we.f;return n?t.concat(n(e)):t},Ee=function(e,t){for(var n=Se(t),r=j.f,o=A.f,i=0;i=74)&&(Z=He.match(/Chrome\/(\d+)/))&&(ee=Z[1]);var Ke=ee&&+ee,$e=qe("species"),Je=function(e){return Ke>=51||!i((function(){var t=[];return(t.constructor={})[$e]=function(){return{foo:1}},1!==t[e](Boolean).foo}))},Ye=qe("isConcatSpreadable"),Qe=Ke>=51||!i((function(){var e=[];return e[Ye]=!1,e.concat()[0]!==e})),Xe=Je("concat"),Ze=function(e){if(!g(e))return!1;var t=e[Ye];return void 0!==t?!!t:Ue(e)};Pe({target:"Array",proto:!0,forced:!Qe||!Xe},{concat:function(e){var t,n,r,o,i,a=Ie(this),u=Ge(a,0),c=0;for(t=-1,r=arguments.length;t9007199254740991)throw TypeError("Maximum allowed index exceeded");for(n=0;n=9007199254740991)throw TypeError("Maximum allowed index exceeded");Ce(u,c++,i)}return u.length=c,u}});var et=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e},tt=function(e,t,n){if(et(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}},nt=[].push,rt=function(e){var t=1==e,n=2==e,r=3==e,o=4==e,i=6==e,a=5==e||i;return function(u,c,l,f){for(var s,h,p=Ie(u),d=v(p),y=tt(c,l,3),g=fe(d.length),m=0,b=f||Ge,w=t?b(u,g):n?b(u,0):void 0;g>m;m++)if((a||m in d)&&(h=y(s=d[m],m,p),e))if(t)w[m]=h;else if(h)switch(e){case 3:return!0;case 5:return s;case 6:return m;case 2:nt.call(w,s)}else if(o)return!1;return i?-1:r||o?o:w}},ot={forEach:rt(0),map:rt(1),filter:rt(2),some:rt(3),every:rt(4),find:rt(5),findIndex:rt(6)},it=Object.defineProperty,at={},ut=function(e){throw e},ct=function(e,t){if(w(at,e))return at[e];t||(t={});var n=[][e],r=!!w(t,"ACCESSORS")&&t.ACCESSORS,o=w(t,0)?t[0]:ut,u=w(t,1)?t[1]:void 0;return at[e]=!!n&&!i((function(){if(r&&!a)return!0;var e={length:-1};r?it(e,1,{enumerable:!0,get:ut}):e[1]=1,n.call(e,o,u)}))},lt=ot.map,ft=Je("map"),st=ct("map");Pe({target:"Array",proto:!0,forced:!ft||!st},{map:function(e){return lt(this,e,arguments.length>1?arguments[1]:void 0)}});var ht=function(e){return function(t,n,r,o){et(n);var i=Ie(t),a=v(i),u=fe(i.length),c=e?u-1:0,l=e?-1:1;if(r<2)for(;;){if(c in a){o=a[c],c+=l;break}if(c+=l,e?c<0:u<=c)throw TypeError("Reduce of empty array with no initial value")}for(;e?c>=0:u>c;c+=l)c in a&&(o=n(o,a[c],c,i));return o}},pt={left:ht(!1),right:ht(!0)}.left,vt=function(e,t){var n=[][e];return!!n&&i((function(){n.call(null,t||function(){throw 1},1)}))}("reduce"),dt=ct("reduce",{1:0});Pe({target:"Array",proto:!0,forced:!vt||!dt},{reduce:function(e){return pt(this,e,arguments.length,arguments.length>1?arguments[1]:void 0)}});var yt=Je("slice"),gt=ct("slice",{ACCESSORS:!0,0:0,1:2}),mt=qe("species"),bt=[].slice,wt=Math.max;Pe({target:"Array",proto:!0,forced:!yt||!gt},{slice:function(e,t){var n,r,o,i=y(this),a=fe(i.length),u=pe(e,a),c=pe(void 0===t?a:t,a);if(Ue(i)&&("function"!=typeof(n=i.constructor)||n!==Array&&!Ue(n.prototype)?g(n)&&null===(n=n[mt])&&(n=void 0):n=void 0,n===Array||void 0===n))return bt.call(i,u,c);for(r=new(void 0===n?Array:n)(wt(c-u,0)),o=0;u0)for(var r,o=0;o2;)r.push(arguments[i]);for(;r.length>0;)if(Tt(n=r.pop()))for(i=n.length;i-- >0;)r.push(n[i]);else!1===n||!0===n||null==n||o.push(Mt(n));return t=t||Lt,"function"==typeof e?e(t,o):Dt(e,t,o,void 0,t.key)},zt=function(e){var t={},n=!1,r=e.view,o=e.node,i=o&&function e(t){return 3===t.nodeType?Gt(t.nodeValue,t):Dt(t.nodeName.toLowerCase(),Lt,jt.call(t.childNodes,e),t,void 0,1)}(o),a=e.subscriptions,u=[],c=function(e){f(this.actions[e.type],e)},l=function(e){return t!==e&&(t=e,a&&(u=function(e,t,n){for(var r,o,i=0,a=[];ig)for(;y<=m;)n.insertBefore(Bt(v[y]=qt(v[y++]),i,a),(c=p[d])&&c.node);else if(y>m)for(;d<=g;)n.removeChild(p[d++].node);else{b=d;for(var w={},S={};b<=g;b++)null!=(l=p[b].key)&&(w[l]=p[b]);for(;y<=m;)l=Ft(c=p[d]),f=Ft(v[y]=qt(v[y],c)),S[l]||null!=f&&f===Ft(p[d+1])?(null==l&&n.removeChild(c.node),d++):null==f||1===r.type?(null==l&&(e(n,c&&c.node,c,v[y],i,a),y++),d++):(l===f?(e(n,c.node,c,v[y],i,a),S[f]=!0,d++):null!=(u=w[f])?(e(n,n.insertBefore(u.node,c&&c.node),u,v[y],i,a),S[f]=!0):e(n,c&&c.node,null,v[y],i,a),y++);for(;d<=g;)null==Ft(c=p[d++])&&n.removeChild(c.node);for(var b in w)null==S[b]&&n.removeChild(w[b].node)}}return o.node=n}(o.parentNode,o,i,i=Mt(r(t)),c)};f(e.init)},Wt=function(e){return t=e,function(e){return function(t){return[e,{action:t}]}}((function(e,n){var r=function(t){e(n.action,t)};return addEventListener(t,r),function(){removeEventListener(t,r)}}));var t},Kt=function(e){return function(t){return[e,t]}}((function(e,t){t.preventDefault&&t.event.preventDefault(),t.stopPropagation&&t.event.stopPropagation(),null!=t.action&&e(t.action,t.event)})),$t=function(e){return function(t,n){return[t,Kt({preventDefault:!0,action:e,event:n})]}},Jt=function(e){return e.target.value},Yt=Object.keys||function(e){return ye(e,ge)},Qt=a?Object.defineProperties:function(e,t){L(e);for(var n,r=Yt(t),o=r.length,i=0;o>i;)j.f(e,n=r[i++],t[n]);return e},Xt=ie("document","documentElement"),Zt=z("IE_PROTO"),en=function(){},tn=function(e){return" - +