From 15373eb95190a34c502f2248a7dc267b3fb57d09 Mon Sep 17 00:00:00 2001 From: "Alex.V" Date: Mon, 29 Jun 2020 20:25:43 +0200 Subject: [PATCH] feat(docs-gen): Typedoc generator (#769) --- docs-gen/.gitignore | 1 + docs-gen/LICENSE | 22 + docs-gen/README.md | 50 + docs-gen/THEMES.md | 151 + docs-gen/jest.config.js | 10 + docs-gen/package.json | 60 +- docs-gen/src/CubejsGroupPlugin.ts | 236 + docs-gen/src/__snapshots__/theme.spec.ts.snap | 2585 ++++++++++ .../front-matter.component.spec.ts.snap | 27 + .../helpers.component.spec.ts.snap | 27 + .../components/front-matter.component.spec.ts | 130 + .../src/components/front-matter.component.ts | 78 + .../src/components/helpers.component.spec.ts | 59 + docs-gen/src/components/helpers.component.ts | 230 + docs-gen/src/components/options.component.ts | 31 + docs-gen/src/index.ts | 68 + docs-gen/src/plugin.ts | 65 + .../__snapshots__/_helpers.spec.ts.snap | 60 + .../src/resources/helpers/_helpers.spec.ts | 185 + docs-gen/src/resources/helpers/breadcrumbs.ts | 7 + docs-gen/src/resources/helpers/comment.ts | 5 + .../resources/helpers/declaration-title.ts | 28 + docs-gen/src/resources/helpers/heading.ts | 3 + .../src/resources/helpers/hierarchy-level.ts | 9 + .../src/resources/helpers/if-breadcrumbs.ts | 10 + .../helpers/if-has-type-declarations.ts | 21 + docs-gen/src/resources/helpers/if-indexes.ts | 5 + .../resources/helpers/if-is-literal-type.ts | 9 + .../src/resources/helpers/if-named-anchors.ts | 5 + .../resources/helpers/if-parent-is-module.ts | 9 + .../helpers/if-parent-is-object-literal.ts | 9 + docs-gen/src/resources/helpers/if-sources.ts | 5 + docs-gen/src/resources/helpers/literal.ts | 53 + .../src/resources/helpers/member-symbol.ts | 22 + .../src/resources/helpers/member-title.ts | 11 + docs-gen/src/resources/helpers/new-line.ts | 3 + .../helpers/parameter-name-and-type.ts | 20 + .../src/resources/helpers/parameter-table.ts | 55 + .../src/resources/helpers/reflection-title.ts | 14 + .../src/resources/helpers/relative-url.ts | 5 + .../src/resources/helpers/signature-title.ts | 44 + docs-gen/src/resources/helpers/spaces.ts | 3 + .../resources/helpers/strip-line-breaks.ts | 3 + .../src/resources/helpers/type-and-parent.ts | 38 + docs-gen/src/resources/helpers/type.ts | 99 + docs-gen/src/resources/layouts/default.hbs | 1 + docs-gen/src/resources/partials/comment.hbs | 37 + docs-gen/src/resources/partials/header.hbs | 5 + docs-gen/src/resources/partials/hierarchy.hbs | 23 + docs-gen/src/resources/partials/index.hbs | 31 + docs-gen/src/resources/partials/main.hbs | 11 + .../resources/partials/member.declaration.hbs | 17 + .../partials/member.getterSetter.hbs | 19 + docs-gen/src/resources/partials/member.hbs | 67 + .../partials/member.indexSignatures.hbs | 17 + .../resources/partials/member.signature.hbs | 101 + .../src/resources/partials/member.sources.hbs | 39 + .../src/resources/partials/members.group.hbs | 37 + docs-gen/src/resources/partials/members.hbs | 9 + docs-gen/src/resources/partials/parameter.hbs | 75 + .../src/resources/partials/typeParameters.hbs | 7 + docs-gen/src/resources/templates/index.hbs | 9 + .../src/resources/templates/reflection.hbs | 101 + docs-gen/src/subthemes/bitbucket/theme.ts | 22 + .../subthemes/docusaurus/partials/header.hbs | 3 + docs-gen/src/subthemes/docusaurus/theme.ts | 96 + .../subthemes/docusaurus2/partials/header.hbs | 3 + docs-gen/src/subthemes/docusaurus2/theme.ts | 99 + .../src/subthemes/gitbook/partials/header.hbs | 1 + docs-gen/src/subthemes/gitbook/theme.ts | 41 + .../subthemes/vuepress/partials/header.hbs | 1 + .../src/subthemes/vuepress/partials/main.hbs | 1 + docs-gen/src/subthemes/vuepress/theme.ts | 118 + docs-gen/src/theme.spec.ts | 160 + docs-gen/src/theme.ts | 372 ++ docs-gen/tasks/fixtures.js | 44 + docs-gen/tasks/link-plugin.js | 7 + docs-gen/test/options.json | 8 + docs-gen/test/stubs/README.md | 1 + docs-gen/test/stubs/inc/README.md | 1 + docs-gen/test/stubs/inc/class-example.hbs | 1 + docs-gen/test/stubs/inc/class-example.md | 5 + docs-gen/test/stubs/media/logo.png | Bin 0 -> 1294 bytes docs-gen/test/stubs/src/categories.ts | 72 + docs-gen/test/stubs/src/classes.ts | 291 ++ docs-gen/test/stubs/src/comments.ts | 61 + docs-gen/test/stubs/src/destrucuting.ts | 32 + docs-gen/test/stubs/src/functions.ts | 148 + docs-gen/test/stubs/src/literals.ts | 27 + docs-gen/test/stubs/src/variables.ts | 15 + docs-gen/test/stubs/tsconfig.json | 13 + docs-gen/tsconfig.json | 17 + docs-gen/tslint.json | 21 + docs-gen/yarn.lock | 4552 ++++++++++++++--- packages/cubejs-client-core/dist/index.d.ts | 165 - packages/cubejs-client-core/index.d.ts | 597 +++ 96 files changed, 11201 insertions(+), 970 deletions(-) create mode 100644 docs-gen/.gitignore create mode 100644 docs-gen/LICENSE create mode 100644 docs-gen/README.md create mode 100644 docs-gen/THEMES.md create mode 100644 docs-gen/jest.config.js create mode 100644 docs-gen/src/CubejsGroupPlugin.ts create mode 100644 docs-gen/src/__snapshots__/theme.spec.ts.snap create mode 100644 docs-gen/src/components/__snapshots__/front-matter.component.spec.ts.snap create mode 100644 docs-gen/src/components/__snapshots__/helpers.component.spec.ts.snap create mode 100644 docs-gen/src/components/front-matter.component.spec.ts create mode 100644 docs-gen/src/components/front-matter.component.ts create mode 100644 docs-gen/src/components/helpers.component.spec.ts create mode 100644 docs-gen/src/components/helpers.component.ts create mode 100644 docs-gen/src/components/options.component.ts create mode 100644 docs-gen/src/index.ts create mode 100644 docs-gen/src/plugin.ts create mode 100644 docs-gen/src/resources/helpers/__snapshots__/_helpers.spec.ts.snap create mode 100644 docs-gen/src/resources/helpers/_helpers.spec.ts create mode 100644 docs-gen/src/resources/helpers/breadcrumbs.ts create mode 100644 docs-gen/src/resources/helpers/comment.ts create mode 100644 docs-gen/src/resources/helpers/declaration-title.ts create mode 100644 docs-gen/src/resources/helpers/heading.ts create mode 100644 docs-gen/src/resources/helpers/hierarchy-level.ts create mode 100644 docs-gen/src/resources/helpers/if-breadcrumbs.ts create mode 100644 docs-gen/src/resources/helpers/if-has-type-declarations.ts create mode 100644 docs-gen/src/resources/helpers/if-indexes.ts create mode 100644 docs-gen/src/resources/helpers/if-is-literal-type.ts create mode 100644 docs-gen/src/resources/helpers/if-named-anchors.ts create mode 100644 docs-gen/src/resources/helpers/if-parent-is-module.ts create mode 100644 docs-gen/src/resources/helpers/if-parent-is-object-literal.ts create mode 100644 docs-gen/src/resources/helpers/if-sources.ts create mode 100644 docs-gen/src/resources/helpers/literal.ts create mode 100644 docs-gen/src/resources/helpers/member-symbol.ts create mode 100644 docs-gen/src/resources/helpers/member-title.ts create mode 100644 docs-gen/src/resources/helpers/new-line.ts create mode 100644 docs-gen/src/resources/helpers/parameter-name-and-type.ts create mode 100644 docs-gen/src/resources/helpers/parameter-table.ts create mode 100644 docs-gen/src/resources/helpers/reflection-title.ts create mode 100644 docs-gen/src/resources/helpers/relative-url.ts create mode 100644 docs-gen/src/resources/helpers/signature-title.ts create mode 100644 docs-gen/src/resources/helpers/spaces.ts create mode 100644 docs-gen/src/resources/helpers/strip-line-breaks.ts create mode 100644 docs-gen/src/resources/helpers/type-and-parent.ts create mode 100644 docs-gen/src/resources/helpers/type.ts create mode 100755 docs-gen/src/resources/layouts/default.hbs create mode 100755 docs-gen/src/resources/partials/comment.hbs create mode 100644 docs-gen/src/resources/partials/header.hbs create mode 100755 docs-gen/src/resources/partials/hierarchy.hbs create mode 100755 docs-gen/src/resources/partials/index.hbs create mode 100644 docs-gen/src/resources/partials/main.hbs create mode 100755 docs-gen/src/resources/partials/member.declaration.hbs create mode 100755 docs-gen/src/resources/partials/member.getterSetter.hbs create mode 100644 docs-gen/src/resources/partials/member.hbs create mode 100644 docs-gen/src/resources/partials/member.indexSignatures.hbs create mode 100644 docs-gen/src/resources/partials/member.signature.hbs create mode 100755 docs-gen/src/resources/partials/member.sources.hbs create mode 100755 docs-gen/src/resources/partials/members.group.hbs create mode 100755 docs-gen/src/resources/partials/members.hbs create mode 100644 docs-gen/src/resources/partials/parameter.hbs create mode 100755 docs-gen/src/resources/partials/typeParameters.hbs create mode 100644 docs-gen/src/resources/templates/index.hbs create mode 100755 docs-gen/src/resources/templates/reflection.hbs create mode 100644 docs-gen/src/subthemes/bitbucket/theme.ts create mode 100644 docs-gen/src/subthemes/docusaurus/partials/header.hbs create mode 100644 docs-gen/src/subthemes/docusaurus/theme.ts create mode 100644 docs-gen/src/subthemes/docusaurus2/partials/header.hbs create mode 100644 docs-gen/src/subthemes/docusaurus2/theme.ts create mode 100644 docs-gen/src/subthemes/gitbook/partials/header.hbs create mode 100644 docs-gen/src/subthemes/gitbook/theme.ts create mode 100644 docs-gen/src/subthemes/vuepress/partials/header.hbs create mode 100644 docs-gen/src/subthemes/vuepress/partials/main.hbs create mode 100644 docs-gen/src/subthemes/vuepress/theme.ts create mode 100644 docs-gen/src/theme.spec.ts create mode 100644 docs-gen/src/theme.ts create mode 100644 docs-gen/tasks/fixtures.js create mode 100644 docs-gen/tasks/link-plugin.js create mode 100644 docs-gen/test/options.json create mode 100644 docs-gen/test/stubs/README.md create mode 100644 docs-gen/test/stubs/inc/README.md create mode 100755 docs-gen/test/stubs/inc/class-example.hbs create mode 100755 docs-gen/test/stubs/inc/class-example.md create mode 100755 docs-gen/test/stubs/media/logo.png create mode 100644 docs-gen/test/stubs/src/categories.ts create mode 100644 docs-gen/test/stubs/src/classes.ts create mode 100755 docs-gen/test/stubs/src/comments.ts create mode 100644 docs-gen/test/stubs/src/destrucuting.ts create mode 100644 docs-gen/test/stubs/src/functions.ts create mode 100644 docs-gen/test/stubs/src/literals.ts create mode 100644 docs-gen/test/stubs/src/variables.ts create mode 100644 docs-gen/test/stubs/tsconfig.json create mode 100644 docs-gen/tsconfig.json create mode 100644 docs-gen/tslint.json delete mode 100644 packages/cubejs-client-core/dist/index.d.ts create mode 100644 packages/cubejs-client-core/index.d.ts diff --git a/docs-gen/.gitignore b/docs-gen/.gitignore new file mode 100644 index 0000000000000..53c37a16608c0 --- /dev/null +++ b/docs-gen/.gitignore @@ -0,0 +1 @@ +dist \ No newline at end of file diff --git a/docs-gen/LICENSE b/docs-gen/LICENSE new file mode 100644 index 0000000000000..f01a4a4b3ff2e --- /dev/null +++ b/docs-gen/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2020 Cube Dev, Inc. +Copyright (c) 2016 Thomas Grey + +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/docs-gen/README.md b/docs-gen/README.md new file mode 100644 index 0000000000000..84f19261a8a36 --- /dev/null +++ b/docs-gen/README.md @@ -0,0 +1,50 @@ +# typedoc-plugin-markdown + +A plugin for [TypeDoc](https://github.com/TypeStrong/typedoc) that enables TypeScript API documentation to be generated in Markdown. + +[![npm](https://img.shields.io/npm/v/typedoc-plugin-markdown.svg)](https://www.npmjs.com/package/typedoc-plugin-markdown) +[![Build Status](https://travis-ci.org/tgreyuk/typedoc-plugin-markdown.svg?branch=master)](https://travis-ci.org/tgreyuk/typedoc-plugin-markdown) + +## What it does? + +The plugin will replace the default HTML theme with a built-in Markdown theme, and expose some additional arguments. + +By default, the Markdown theme will attempt to render standard CommonMark, suitable for the majority of Markdown engines. +It follows the same structure and file patterns as the default HTML theme. + +## Installation + +```bash +npm install --save-dev typedoc typedoc-plugin-markdown +``` + +## Usage + +```bash +$ npx typedoc --plugin typedoc-plugin-markdown [args] +``` + +### Note: + +- The `--plugin` arg is optional - if omitted all installed plugins will run. +- If using with the default HTML theme or other themes, use `--plugin none` to switch the plugin off. +- The plugin needs to be executed from the same location as `typedoc`. Either run as an npm script or make sure to run `npx typedoc`. + +## Arguments + +The following arguments can be used in addition to the default [TypeDoc arguments](https://github.com/TypeStrong/typedoc#arguments). + +- `--theme `
+ Specify the theme that should be used. Defaults to `markdown`. Please read [Markdown Themes](https://github.com/tgreyuk/typedoc-plugin-markdown/blob/master/THEMES.md) for further details. +- `--namedAnchors`
+ Use HTML named anchors as fragment identifiers for engines that do not automatically assign header ids. +- `--hideSources`
+ Do not print source file link rendering. +- `--hideBreadcrumbs`
+ Do not print breadcrumbs. +- `--skipSidebar`
+ Do not update the `sidebar.json` file when used with `docusaurus` or `docusaurus2` theme. + +## License + +[MIT](https://github.com/tgreyuk/typedoc-plugin-markdown/blob/master/LICENSE) diff --git a/docs-gen/THEMES.md b/docs-gen/THEMES.md new file mode 100644 index 0000000000000..52bf6889d4fa4 --- /dev/null +++ b/docs-gen/THEMES.md @@ -0,0 +1,151 @@ +# Markdown Themes + +By default, the Markdown theme will attempt to render standard CommonMark, suitable for the majority of Markdown engines. +It follows the same structure and file patterns as the default HTML theme (see [typedoc-default-themes](https://github.com/TypeStrong/typedoc-default-themes)). + +The plugin also comes packaged with some additional built-in themes and can also be extended with a custom theme. + +- [Built-in themes](#built-in-themes) +- [Writing a custom Markdown theme](#writing-a-custom-markdown-theme) + +## Writing a custom markdown theme + +The Markdown theme packaged with the plugin can also be extended with a custom Markdown theme using the standard TypeDoc theming pattern as per https://typedoc.org/guides/themes/. + +### Create a theme.js class + +As per the theme docs create a `theme.js` file which TypeDoc will then attempt to load from a given location. + +_mytheme/custom-theme.js_ + +```js +const MarkdownTheme = require('typedoc-plugin-markdown/dist/theme'); + +class CustomMarkdownTheme extends MarkdownTheme.default { + constructor(renderer, basePath) { + super(renderer, basePath); + } +} + +exports.default = CustomMarkdownTheme; +``` + +### Theme resources + +By default the theme will inherit the resources of the Markdown theme (https://github.com/tgreyuk/typedoc-plugin-markdown/tree/master/src/resources). + +These can be replaced and updated as required. + +### Building the theme + +#### CLI + +``` +npx typedoc ./src --plugin typedoc-plugin-markdown --theme ./mytheme/custom-theme --out docs +``` + +#### API + +```js +const { Application } = require('typedoc'); +const path = require('path'); + +const app = new Application(); +app.bootstrap({ + module: 'CommonJS', + target: 'ES5', + readme: 'none', + theme: path.join(__dirname, 'mytheme', 'custom-theme'), + plugin: 'typedoc-plugin-markdown', +}); + +app.generateDocs(app.expandInputFiles(['./src']), 'docs'); +``` + +See https://typedoc.org/guides/installation/#node-module + +## Built-in themes + +### `docusaurus` / `docusaurus2` + +The --out path is assumed be a Docusaurus docs directory. + +- Adds Front Matter to pages to support Docusaurus [Markdown Headers](https://docusaurus.io/docs/en/doc-markdown#markdown-headers). +- Appends releavant JSON to website/sidebars.json|sidebars.js, to support [sidebar navigation](https://docusaurus.io/docs/en/navigation). + +#### Output + +``` +root-directory +├── docs +│ ├── myapi +│ | ├── classes +│ │ ├── enums +│ │ ├── interfaces +│ │ ├── index.md +│ │ +└── website + ├── sidebars.json + +``` + +#### Adding links in siteconfig + +Manually add the index page to headerLinks in the [siteConfig.js](https://docusaurus.io/docs/en/site-config) to access the api from header. + +```js +headerLinks: [ + { doc: "myapi/index", label: "My API" }, +], +``` + +### `vuepress` + +- Adds Front Matter to pages. +- The --out path is assumed be a Vuepress docs directory. +- Will create: + + - `.vuepress/api-sidebar.json` to be used with [sidebar](https://vuepress.vuejs.org/default-theme-config/#sidebar). + - `.vuepress/api-sidebar-relative.json` to be used with [multiple sidebars](https://vuepress.vuejs.org/default-theme-config/#multiple-sidebars). + - `.vuepress/config.json` + +#### Examples + +```js +const apiSideBar = require('./api-sidebar.json'); + +// Without groups +module.exports = { + themeConfig: { + sidebar: ['some-content', ...apiSideBar], + }, +}; + +// With groups +module.exports = { + themeConfig: { + sidebar: ['some-content', { title: 'API', children: apiSideBar }], + }, +}; +``` + +```js +const apiSideBarRelative = require('./api-sidebar-relative.json'); + +// Multiple sidebars +module.exports = { + themeConfig: { + sidebar: { + '/guide/': ['some-content'], + '/api/': apiSideBarRelative, + '/': ['other'], + }, + }, +}; +``` + +### `bitbucket` + +_Note: this theme applicable to Bitbucket Cloud. If using Bitbucket Server please use the `--namedAnchors` argument to fix anchor links._ + +- Parses internal anchor links to support Bitbucket's internal anchor linking. diff --git a/docs-gen/jest.config.js b/docs-gen/jest.config.js new file mode 100644 index 0000000000000..80a03151d7198 --- /dev/null +++ b/docs-gen/jest.config.js @@ -0,0 +1,10 @@ +module.exports = { + modulePaths: ['/dist'], + transform: { + '^.+\\.tsx?$': 'ts-jest', + }, + verbose: true, + collectCoverage: true, + coverageReporters: ['text-summary'], + collectCoverageFrom: ['/dist/**/*js'], +}; diff --git a/docs-gen/package.json b/docs-gen/package.json index 210d6e74af2d5..fe870ab8f19de 100644 --- a/docs-gen/package.json +++ b/docs-gen/package.json @@ -1,20 +1,50 @@ { - "name": "docs-gen", + "name": "cubejs-typedoc-plugin", "version": "0.0.1", - "dependencies": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.2", - "@babel/preset-env": "^7.3.4", - "@babel/preset-react": "^7.0.0", - "@babel/standalone": "^7.3.4", - "@babel/traverse": "^7.4.0", - "@babel/types": "^7.4.0", - "fs-extra": "^8.1.0", - "inflection": "^1.12.0", - "jsdoc": "^3.6.3" - }, + "description": "A plugin for TypeDoc that enables TypeScript API documentation to be generated in Markdown.", + "main": "dist/index.js", + "files": [ + "dist/" + ], "scripts": { - "generate": "jsdoc -t template ../packages/cubejs-client-core/src/*.js -d ../docs/Cube.js-Frontend/@cubejs-client-core.md" + "lint": "tslint --project ./tsconfig.json", + "generate": "yarn build && typedoc --excludeExternals --includeDeclarations --plugin ../docs-gen/dist/index.js --hideSources --hideIndexes --out ../docs/Cube.js-Frontend --name @cubejs-client-core ../packages/cubejs-client-core/index.d.ts", + "dev-generate": "copyfiles --up 1 ./src/**/*.hbs ./dist/ && yarn generate", + "build": "rm -rf dist && tsc --sourceMap false --declaration false && copyfiles --up 1 ./src/**/*.hbs ./dist/", + "watch": "tsc-watch", + "prepublishOnly": "yarn test", + "pretest": "yarn lint && yarn build", + "test": "jest", + "compile": "tsc src/index.ts", + "test:updateSnapshot": "jest --updateSnapshot", + "fixtures": "rm -rf ./test/fixtures && node ./tasks/fixtures.js", + "examples": "yarn build && rm -rf out && node ./tasks/link-plugin.js && yarn examples:html && yarn examples:md", + "examples:html": "typedoc --tsconfig ./test/stubs/tsconfig.json --options ./test/options.json --plugin none --out ./out/html", + "examples:md": "typedoc --tsconfig ./test/stubs/tsconfig.json --options ./test/options.json --out ./out/md" + }, + "author": "Cube Dev, Inc.", + "license": "MIT", + "engines": { + "node": ">= 8.0.0" }, - "license": "MIT" + "peerDependencies": { + "typedoc": ">=0.17.0" + }, + "devDependencies": { + "@types/fs-extra": "^9.0.1", + "@types/jest": "^25.2.3", + "@types/node": "^14.0.9", + "copyfiles": "^2.3.0", + "jest": "^26.0.1", + "ts-jest": "^26.1.0", + "tsc-watch": "^4.2.9", + "tslint": "^6.1.2", + "typedoc": "0.17.7", + "typescript": "3.9.x" + }, + "dependencies": { + "fs-extra": "^9.0.0", + "handlebars": "^4.7.6", + "inflection": "^1.12.0" + } } diff --git a/docs-gen/src/CubejsGroupPlugin.ts b/docs-gen/src/CubejsGroupPlugin.ts new file mode 100644 index 0000000000000..238ac6d835aeb --- /dev/null +++ b/docs-gen/src/CubejsGroupPlugin.ts @@ -0,0 +1,236 @@ +import { ReflectionKind, Reflection, ContainerReflection, DeclarationReflection } from 'typedoc'; +// import { CubejsGroupPlugin } from 'typedoc/dist/lib/converter/plugins'; +import { Component } from 'typedoc/dist/lib/utils'; +import { Converter, Context } from 'typedoc/dist/lib/converter'; +import { SourceDirectory, ReflectionGroup } from 'typedoc/dist/lib/models'; +import {ConverterComponent} from 'typedoc/dist/lib/converter/components'; + +@Component({ name: 'cubejs-group' }) +export default class CubejsGroupPlugin extends ConverterComponent { + /** + * Define the sort order of reflections. + */ + static WEIGHTS = [ + ReflectionKind.Class, + ReflectionKind.Global, + ReflectionKind.Module, + ReflectionKind.Namespace, + ReflectionKind.Interface, + ReflectionKind.Enum, + ReflectionKind.EnumMember, + ReflectionKind.TypeAlias, + + ReflectionKind.Constructor, + ReflectionKind.Event, + ReflectionKind.Property, + ReflectionKind.Variable, + ReflectionKind.Function, + ReflectionKind.Accessor, + ReflectionKind.Method, + ReflectionKind.ObjectLiteral, + + ReflectionKind.Parameter, + ReflectionKind.TypeParameter, + ReflectionKind.TypeLiteral, + ReflectionKind.CallSignature, + ReflectionKind.ConstructorSignature, + ReflectionKind.IndexSignature, + ReflectionKind.GetSignature, + ReflectionKind.SetSignature, + ]; + + /** + * Define the singular name of individual reflection kinds. + */ + static SINGULARS = (function () { + const singulars = {}; + singulars[ReflectionKind.Enum] = 'Enumeration'; + singulars[ReflectionKind.EnumMember] = 'Enumeration member'; + return singulars; + })(); + + /** + * Define the plural name of individual reflection kinds. + */ + static PLURALS = (function () { + const plurals = {}; + plurals[ReflectionKind.Class] = 'Classes'; + plurals[ReflectionKind.Property] = 'Properties'; + plurals[ReflectionKind.Enum] = 'Enumerations'; + plurals[ReflectionKind.EnumMember] = 'Enumeration members'; + plurals[ReflectionKind.TypeAlias] = 'Type aliases'; + return plurals; + })(); + + /** + * Create a new CubejsGroupPlugin instance. + */ + initialize() { + this.listenTo(this.owner, { + [Converter.EVENT_RESOLVE]: this.onResolve, + [Converter.EVENT_RESOLVE_END]: this.onEndResolve, + }, null, 1); + } + + private onResolve(context: Context, reflection: ContainerReflection) { + reflection.kindString = CubejsGroupPlugin.getKindSingular(reflection.kind); + + // if (reflection instanceof ContainerReflection) { + + if (reflection.children && reflection.children.length > 0) { + reflection.children.sort(CubejsGroupPlugin.sortCallback); + reflection.groups = CubejsGroupPlugin.getReflectionGroups(reflection.children); + } + // } + } + + /** + * Triggered when the converter has finished resolving a project. + * + * @param context The context object describing the current state the converter is in. + */ + private onEndResolve(context: Context) { + function walkDirectory(directory: SourceDirectory) { + directory.groups = CubejsGroupPlugin.getReflectionGroups(directory.getAllReflections()); + + for (const key in directory.directories) { + if (!directory.directories.hasOwnProperty(key)) { + continue; + } + walkDirectory(directory.directories[key]); + } + } + + const project = context.project; + if (project.children && project.children.length > 0) { + project.children.sort(CubejsGroupPlugin.sortCallback); + project.groups = CubejsGroupPlugin.getReflectionGroups(project.children); + } + + walkDirectory(project.directory); + project.files.forEach((file) => { + file.groups = CubejsGroupPlugin.getReflectionGroups(file.reflections); + }); + } + + /** + * Create a grouped representation of the given list of reflections. + * + * Reflections are grouped by kind and sorted by weight and name. + * + * @param reflections The reflections that should be grouped. + * @returns An array containing all children of the given reflection grouped by their kind. + */ + static getReflectionGroups(reflections: Reflection[]): ReflectionGroup[] { + const groups: ReflectionGroup[] = []; + reflections.forEach((child) => { + for (let i = 0; i < groups.length; i++) { + const group = groups[i]; + if (group.kind !== child.kind) { + continue; + } + + group.children.push(child); + return; + } + + const group = new ReflectionGroup(CubejsGroupPlugin.getKindPlural(child.kind), child.kind); + group.children.push(child); + groups.push(group); + }); + + groups.forEach((group) => { + let someExported = false, + allInherited = true, + allPrivate = true, + allProtected = true, + allExternal = true; + group.children.forEach((child) => { + someExported = child.flags.isExported || someExported; + allPrivate = child.flags.isPrivate && allPrivate; + allProtected = (child.flags.isPrivate || child.flags.isProtected) && allProtected; + allExternal = child.flags.isExternal && allExternal; + + if (child instanceof DeclarationReflection) { + allInherited = !!child.inheritedFrom && allInherited; + } else { + allInherited = false; + } + }); + + group.someChildrenAreExported = someExported; + group.allChildrenAreInherited = allInherited; + group.allChildrenArePrivate = allPrivate; + group.allChildrenAreProtectedOrPrivate = allProtected; + group.allChildrenAreExternal = allExternal; + }); + + return groups; + } + + /** + * Transform the internal typescript kind identifier into a human readable version. + * + * @param kind The original typescript kind identifier. + * @returns A human readable version of the given typescript kind identifier. + */ + private static getKindString(kind: ReflectionKind): string { + let str = ReflectionKind[kind]; + str = str.replace(/(.)([A-Z])/g, (m, a, b) => a + ' ' + b.toLowerCase()); + return str; + } + + /** + * Return the singular name of a internal typescript kind identifier. + * + * @param kind The original internal typescript kind identifier. + * @returns The singular name of the given internal typescript kind identifier + */ + static getKindSingular(kind: ReflectionKind): string { + if (CubejsGroupPlugin.SINGULARS[kind]) { + return CubejsGroupPlugin.SINGULARS[kind]; + } else { + return CubejsGroupPlugin.getKindString(kind); + } + } + + /** + * Return the plural name of a internal typescript kind identifier. + * + * @param kind The original internal typescript kind identifier. + * @returns The plural name of the given internal typescript kind identifier + */ + static getKindPlural(kind: ReflectionKind): string { + if (CubejsGroupPlugin.PLURALS[kind]) { + return CubejsGroupPlugin.PLURALS[kind]; + } else { + return this.getKindString(kind) + 's'; + } + } + + /** + * Callback used to sort reflections by weight defined by ´CubejsGroupPlugin.WEIGHTS´ and name. + * + * @param a The left reflection to sort. + * @param b The right reflection to sort. + * @returns The sorting weight. + */ + static sortCallback(a: Reflection, b: Reflection): number { + const aWeight = CubejsGroupPlugin.WEIGHTS.indexOf(a.kind); + const bWeight = CubejsGroupPlugin.WEIGHTS.indexOf(b.kind); + if (aWeight === bWeight) { + if (a.flags.isStatic && !b.flags.isStatic) { + return 1; + } + if (!a.flags.isStatic && b.flags.isStatic) { + return -1; + } + if (a.name === b.name) { + return 0; + } + return a.name > b.name ? 1 : -1; + } else { + return aWeight - bWeight; + } + } +} diff --git a/docs-gen/src/__snapshots__/theme.spec.ts.snap b/docs-gen/src/__snapshots__/theme.spec.ts.snap new file mode 100644 index 0000000000000..9fcfa7fdc1bf1 --- /dev/null +++ b/docs-gen/src/__snapshots__/theme.spec.ts.snap @@ -0,0 +1,2585 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`MarkdownTheme getUrls should get navigation 1`] = ` +NavigationItem { + "children": Array [ + NavigationItem { + "children": Array [ + NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA1", + "url": "interfaces/_categories_.categoryinterfacea1.md", + }, + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA2", + "url": "interfaces/_categories_.categoryinterfacea2.md", + }, + NavigationItem { + "parent": [Circular], + "title": "OtherInterfaceA", + "url": "interfaces/_categories_.otherinterfacea.md", + }, + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA1", + "url": "interfaces/_categories_.categoryinterfacea1.md", + }, + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA2", + "url": "interfaces/_categories_.categoryinterfacea2.md", + }, + NavigationItem { + "parent": [Circular], + "title": "OtherInterfaceA", + "url": "interfaces/_categories_.otherinterfacea.md", + }, + ], + "parent": undefined, + "title": "categories", + "url": "modules/_categories_.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + [Circular], + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA2", + "url": "interfaces/_categories_.categoryinterfacea2.md", + }, + NavigationItem { + "parent": [Circular], + "title": "OtherInterfaceA", + "url": "interfaces/_categories_.otherinterfacea.md", + }, + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA1", + "url": "interfaces/_categories_.categoryinterfacea1.md", + }, + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA2", + "url": "interfaces/_categories_.categoryinterfacea2.md", + }, + NavigationItem { + "parent": [Circular], + "title": "OtherInterfaceA", + "url": "interfaces/_categories_.otherinterfacea.md", + }, + ], + "parent": undefined, + "title": "categories", + "url": "modules/_categories_.md", + }, + "title": "CategoryInterfaceA1", + "url": "interfaces/_categories_.categoryinterfacea1.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA1", + "url": "interfaces/_categories_.categoryinterfacea1.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "OtherInterfaceA", + "url": "interfaces/_categories_.otherinterfacea.md", + }, + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA1", + "url": "interfaces/_categories_.categoryinterfacea1.md", + }, + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA2", + "url": "interfaces/_categories_.categoryinterfacea2.md", + }, + NavigationItem { + "parent": [Circular], + "title": "OtherInterfaceA", + "url": "interfaces/_categories_.otherinterfacea.md", + }, + ], + "parent": undefined, + "title": "categories", + "url": "modules/_categories_.md", + }, + "title": "CategoryInterfaceA2", + "url": "interfaces/_categories_.categoryinterfacea2.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA1", + "url": "interfaces/_categories_.categoryinterfacea1.md", + }, + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA2", + "url": "interfaces/_categories_.categoryinterfacea2.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA1", + "url": "interfaces/_categories_.categoryinterfacea1.md", + }, + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA2", + "url": "interfaces/_categories_.categoryinterfacea2.md", + }, + NavigationItem { + "parent": [Circular], + "title": "OtherInterfaceA", + "url": "interfaces/_categories_.otherinterfacea.md", + }, + ], + "parent": undefined, + "title": "categories", + "url": "modules/_categories_.md", + }, + "title": "OtherInterfaceA", + "url": "interfaces/_categories_.otherinterfacea.md", + }, + NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + [Circular], + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": undefined, + "title": "comments", + "url": "modules/_comments_.md", + }, + NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "I", + "url": "interfaces/_destrucuting_.i.md", + }, + NavigationItem { + "parent": [Circular], + "title": "I", + "url": "interfaces/_destrucuting_.i.md", + }, + ], + "parent": undefined, + "title": "destrucuting", + "url": "modules/_destrucuting_.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + [Circular], + NavigationItem { + "parent": [Circular], + "title": "I", + "url": "interfaces/_destrucuting_.i.md", + }, + ], + "parent": undefined, + "title": "destrucuting", + "url": "modules/_destrucuting_.md", + }, + "title": "I", + "url": "interfaces/_destrucuting_.i.md", + }, + NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "moduleFunction", + "url": "modules/_functions_.modulefunction.md", + }, + NavigationItem { + "parent": [Circular], + "title": "moduleFunction", + "url": "modules/_functions_.modulefunction.md", + }, + ], + "parent": undefined, + "title": "functions", + "url": "modules/_functions_.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + [Circular], + NavigationItem { + "parent": [Circular], + "title": "moduleFunction", + "url": "modules/_functions_.modulefunction.md", + }, + ], + "parent": undefined, + "title": "functions", + "url": "modules/_functions_.md", + }, + "title": "moduleFunction", + "url": "modules/_functions_.modulefunction.md", + }, + NavigationItem { + "parent": undefined, + "title": "literals", + "url": "modules/_literals_.md", + }, + NavigationItem { + "parent": undefined, + "title": "variables", + "url": "modules/_variables_.md", + }, + ], + "isLabel": true, + "parent": undefined, + "title": "Modules", + "url": "", + }, + NavigationItem { + "children": Array [ + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + ], + "isLabel": true, + "parent": undefined, + "title": "Classes", + "url": "", + }, + NavigationItem { + "children": Array [ + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA1", + "url": "interfaces/_categories_.categoryinterfacea1.md", + }, + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA2", + "url": "interfaces/_categories_.categoryinterfacea2.md", + }, + NavigationItem { + "parent": [Circular], + "title": "OtherInterfaceA", + "url": "interfaces/_categories_.otherinterfacea.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA2", + "url": "interfaces/_categories_.categoryinterfacea2.md", + }, + NavigationItem { + "parent": [Circular], + "title": "OtherInterfaceA", + "url": "interfaces/_categories_.otherinterfacea.md", + }, + ], + "parent": undefined, + "title": "categories", + "url": "modules/_categories_.md", + }, + "title": "CategoryInterfaceA1", + "url": "interfaces/_categories_.categoryinterfacea1.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA1", + "url": "interfaces/_categories_.categoryinterfacea1.md", + }, + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA2", + "url": "interfaces/_categories_.categoryinterfacea2.md", + }, + NavigationItem { + "parent": [Circular], + "title": "OtherInterfaceA", + "url": "interfaces/_categories_.otherinterfacea.md", + }, + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA1", + "url": "interfaces/_categories_.categoryinterfacea1.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "OtherInterfaceA", + "url": "interfaces/_categories_.otherinterfacea.md", + }, + ], + "parent": undefined, + "title": "categories", + "url": "modules/_categories_.md", + }, + "title": "CategoryInterfaceA2", + "url": "interfaces/_categories_.categoryinterfacea2.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA1", + "url": "interfaces/_categories_.categoryinterfacea1.md", + }, + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA2", + "url": "interfaces/_categories_.categoryinterfacea2.md", + }, + NavigationItem { + "parent": [Circular], + "title": "OtherInterfaceA", + "url": "interfaces/_categories_.otherinterfacea.md", + }, + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA1", + "url": "interfaces/_categories_.categoryinterfacea1.md", + }, + NavigationItem { + "parent": [Circular], + "title": "CategoryInterfaceA2", + "url": "interfaces/_categories_.categoryinterfacea2.md", + }, + [Circular], + ], + "parent": undefined, + "title": "categories", + "url": "modules/_categories_.md", + }, + "title": "OtherInterfaceA", + "url": "interfaces/_categories_.otherinterfacea.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + [Circular], + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "BaseClass", + "url": "classes/_classes_.baseclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "GenericClass", + "url": "classes/_classes_.genericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "InternalClass", + "url": "classes/_classes_.internalclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "NonGenericClass", + "url": "classes/_classes_.nongenericclass.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassA", + "url": "classes/_classes_.subclassa.md", + }, + NavigationItem { + "parent": [Circular], + "title": "SubClassB", + "url": "classes/_classes_.subclassb.md", + }, + NavigationItem { + "parent": [Circular], + "title": "INameInterface", + "url": "interfaces/_classes_.inameinterface.md", + }, + NavigationItem { + "parent": [Circular], + "title": "IPrintInterface", + "url": "interfaces/_classes_.iprintinterface.md", + }, + [Circular], + ], + "parent": undefined, + "title": "classes", + "url": "modules/_classes_.md", + }, + "title": "IPrintNameInterface", + "url": "interfaces/_classes_.iprintnameinterface.md", + }, + NavigationItem { + "parent": NavigationItem { + "children": Array [ + NavigationItem { + "parent": [Circular], + "title": "I", + "url": "interfaces/_destrucuting_.i.md", + }, + [Circular], + ], + "parent": undefined, + "title": "destrucuting", + "url": "modules/_destrucuting_.md", + }, + "title": "I", + "url": "interfaces/_destrucuting_.i.md", + }, + ], + "isLabel": true, + "parent": undefined, + "title": "Interfaces", + "url": "", + }, + ], + "parent": undefined, + "title": "typedoc-plugin-markdown", + "url": "README.md", +} +`; + +exports[`MarkdownTheme getUrls should getUrls when readme is defined 1`] = ` +Array [ + "globals.md", + "modules/_categories_.md", + "modules/_classes_.md", + "modules/_comments_.md", + "modules/_destrucuting_.md", + "modules/_functions_.md", + "modules/_literals_.md", + "modules/_variables_.md", + "README.md", + "modules/_categories_.md", + "modules/_classes_.md", + "modules/_comments_.md", + "modules/_destrucuting_.md", + "modules/_functions_.md", + "modules/_literals_.md", + "modules/_variables_.md", + "modules/_categories_.md", + "interfaces/_categories_.categoryinterfacea1.md", + "interfaces/_categories_.categoryinterfacea2.md", + "interfaces/_categories_.otherinterfacea.md", + "modules/_categories_.md#let-categoryvariablea1", + "modules/_categories_.md#let-categoryvariablea2", + "modules/_categories_.md#let-categoryvariableb1", + "modules/_categories_.md#let-othervariablea", + "modules/_categories_.md#let-othervariableb", + "modules/_categories_.md#categoryfunctiona1", + "modules/_categories_.md#categoryfunctiona2", + "modules/_categories_.md#categoryfunctiona3", + "modules/_categories_.md#categoryfunctionb2", + "modules/_categories_.md#otherfunctiona", + "modules/_categories_.md#otherfunctionb", + "interfaces/_categories_.categoryinterfacea1.md", + "interfaces/_categories_.categoryinterfacea1.md#value", + "interfaces/_categories_.categoryinterfacea2.md", + "interfaces/_categories_.categoryinterfacea2.md#value", + "interfaces/_categories_.otherinterfacea.md", + "interfaces/_categories_.otherinterfacea.md#value", + "modules/_classes_.md", + "classes/_classes_.baseclass.md", + "classes/_classes_.genericclass.md", + "classes/_classes_.internalclass.md", + "classes/_classes_.nongenericclass.md", + "classes/_classes_.subclassa.md", + "classes/_classes_.subclassb.md", + "interfaces/_classes_.inameinterface.md", + "interfaces/_classes_.iprintinterface.md", + "interfaces/_classes_.iprintnameinterface.md", + "classes/_classes_.baseclass.md", + "classes/_classes_.baseclass.md#constructor", + "classes/_classes_.baseclass.md#private-internalclass", + "classes/_classes_.baseclass.md#protected-kind", + "classes/_classes_.baseclass.md#name", + "classes/_classes_.baseclass.md#static-instance", + "classes/_classes_.baseclass.md#static-instances", + "classes/_classes_.baseclass.md#abstract-abstractmethod", + "classes/_classes_.baseclass.md#arrowfunction", + "classes/_classes_.baseclass.md#private-checkname", + "classes/_classes_.baseclass.md#getname", + "classes/_classes_.baseclass.md#setname", + "classes/_classes_.baseclass.md#static-catest", + "classes/_classes_.baseclass.md#static-getinstance", + "classes/_classes_.baseclass.md#static-getname", + "classes/_classes_.genericclass.md", + "classes/_classes_.genericclass.md#constructor", + "classes/_classes_.genericclass.md#protected-p2", + "classes/_classes_.genericclass.md#p3", + "classes/_classes_.genericclass.md#private-p4", + "classes/_classes_.genericclass.md#readonly-p5", + "classes/_classes_.genericclass.md#value", + "classes/_classes_.genericclass.md#getvalue", + "classes/_classes_.genericclass.md#setvalue", + "classes/_classes_.internalclass.md", + "classes/_classes_.internalclass.md#constructor", + "classes/_classes_.nongenericclass.md", + "classes/_classes_.nongenericclass.md#constructor", + "classes/_classes_.nongenericclass.md#protected-p2", + "classes/_classes_.nongenericclass.md#p3", + "classes/_classes_.nongenericclass.md#readonly-p5", + "classes/_classes_.nongenericclass.md#value", + "classes/_classes_.nongenericclass.md#getvalue", + "classes/_classes_.nongenericclass.md#setvalue", + "classes/_classes_.subclassa.md", + "classes/_classes_.subclassa.md#constructor", + "classes/_classes_.subclassa.md#protected-kind", + "classes/_classes_.subclassa.md#name", + "classes/_classes_.subclassa.md#static-instance", + "classes/_classes_.subclassa.md#static-instances", + "classes/_classes_.subclassa.md#nameproperty", + "classes/_classes_.subclassa.md#readonlynameproperty", + "classes/_classes_.subclassa.md#writeonlynameproperty", + "classes/_classes_.subclassa.md#abstractmethod", + "classes/_classes_.subclassa.md#arrowfunction", + "classes/_classes_.subclassa.md#getname", + "classes/_classes_.subclassa.md#print", + "classes/_classes_.subclassa.md#printname", + "classes/_classes_.subclassa.md#setname", + "classes/_classes_.subclassa.md#static-catest", + "classes/_classes_.subclassa.md#static-getinstance", + "classes/_classes_.subclassa.md#static-getname", + "classes/_classes_.subclassb.md", + "classes/_classes_.subclassb.md#constructor", + "classes/_classes_.subclassb.md#protected-kind", + "classes/_classes_.subclassb.md#name", + "classes/_classes_.subclassb.md#static-instance", + "classes/_classes_.subclassb.md#static-instances", + "classes/_classes_.subclassb.md#abstractmethod", + "classes/_classes_.subclassb.md#arrowfunction", + "classes/_classes_.subclassb.md#dosomething", + "classes/_classes_.subclassb.md#getname", + "classes/_classes_.subclassb.md#setname", + "classes/_classes_.subclassb.md#static-catest", + "classes/_classes_.subclassb.md#static-getinstance", + "classes/_classes_.subclassb.md#static-getname", + "interfaces/_classes_.inameinterface.md", + "interfaces/_classes_.inameinterface.md#name", + "interfaces/_classes_.inameinterface.md#getname", + "interfaces/_classes_.iprintinterface.md", + "interfaces/_classes_.iprintinterface.md#print", + "interfaces/_classes_.iprintnameinterface.md", + "interfaces/_classes_.iprintnameinterface.md#name", + "interfaces/_classes_.iprintnameinterface.md#getname", + "interfaces/_classes_.iprintnameinterface.md#print", + "interfaces/_classes_.iprintnameinterface.md#printname", + "modules/_comments_.md", + "modules/_comments_.md#let-commentswithfencedblock", + "modules/_comments_.md#let-commentswithincludes", + "modules/_comments_.md#let-commentswithsymbollinks", + "modules/_comments_.md#let-commentswithtags", + "modules/_comments_.md#commentsinreturn", + "modules/_comments_.md#functionwithdoclink", + "modules/_destrucuting_.md", + "interfaces/_destrucuting_.i.md", + "modules/_destrucuting_.md#destructarraya", + "modules/_destrucuting_.md#destructarrayb", + "modules/_destrucuting_.md#destructarrayc", + "modules/_destrucuting_.md#destructarraywithignoresa", + "modules/_destrucuting_.md#destructarraywithignoresrest", + "modules/_destrucuting_.md#destructarraywithrest", + "modules/_destrucuting_.md#destructarraywithresta", + "modules/_destrucuting_.md#destructarraywithrestb", + "modules/_destrucuting_.md#destructobjecta", + "modules/_destrucuting_.md#destructobjectb", + "modules/_destrucuting_.md#destructobjectc", + "modules/_destrucuting_.md#drawtext", + "interfaces/_destrucuting_.i.md", + "interfaces/_destrucuting_.i.md#name", + "modules/_functions_.md", + "modules/_functions_.modulefunction.md", + "modules/_functions_.md#buildname", + "modules/_functions_.md#exportedfunction", + "modules/_functions_.md#functionwithdefaults", + "modules/_functions_.md#functionwithoptionalvalue", + "modules/_functions_.md#functionwithparameters", + "modules/_functions_.md#functionwithrest", + "modules/_functions_.md#internalfunction", + "modules/_functions_.md#multiplesignatures", + "modules/_functions_.md#const-variablefunction", + "modules/_functions_.modulefunction.md", + "modules/_functions_.modulefunction.md#let-functionvariable", + "modules/_functions_.modulefunction.md#append", + "modules/_functions_.modulefunction.md#prepend", + "modules/_literals_.md", + "modules/_literals_.md#let-typeliteral", + "modules/_literals_.md#const-objectliteral", + "modules/_variables_.md", + "modules/_variables_.md#let-color", + "modules/_variables_.md#let-decimal", + "modules/_variables_.md#let-isdone", + "modules/_variables_.md#let-list", + "modules/_variables_.md#let-n", + "modules/_variables_.md#let-notsure", + "modules/_variables_.md#let-u", + "modules/_variables_.md#let-x", +] +`; + +exports[`MarkdownTheme getUrls should getUrls' 1`] = ` +Array [ + "README.md", + "modules/_categories_.md", + "modules/_classes_.md", + "modules/_comments_.md", + "modules/_destrucuting_.md", + "modules/_functions_.md", + "modules/_literals_.md", + "modules/_variables_.md", + "modules/_categories_.md", + "interfaces/_categories_.categoryinterfacea1.md", + "interfaces/_categories_.categoryinterfacea2.md", + "interfaces/_categories_.otherinterfacea.md", + "modules/_categories_.md#let-categoryvariablea1", + "modules/_categories_.md#let-categoryvariablea2", + "modules/_categories_.md#let-categoryvariableb1", + "modules/_categories_.md#let-othervariablea", + "modules/_categories_.md#let-othervariableb", + "modules/_categories_.md#categoryfunctiona1", + "modules/_categories_.md#categoryfunctiona2", + "modules/_categories_.md#categoryfunctiona3", + "modules/_categories_.md#categoryfunctionb2", + "modules/_categories_.md#otherfunctiona", + "modules/_categories_.md#otherfunctionb", + "interfaces/_categories_.categoryinterfacea1.md", + "interfaces/_categories_.categoryinterfacea1.md#value", + "interfaces/_categories_.categoryinterfacea2.md", + "interfaces/_categories_.categoryinterfacea2.md#value", + "interfaces/_categories_.otherinterfacea.md", + "interfaces/_categories_.otherinterfacea.md#value", + "modules/_classes_.md", + "classes/_classes_.baseclass.md", + "classes/_classes_.genericclass.md", + "classes/_classes_.internalclass.md", + "classes/_classes_.nongenericclass.md", + "classes/_classes_.subclassa.md", + "classes/_classes_.subclassb.md", + "interfaces/_classes_.inameinterface.md", + "interfaces/_classes_.iprintinterface.md", + "interfaces/_classes_.iprintnameinterface.md", + "classes/_classes_.baseclass.md", + "classes/_classes_.baseclass.md#constructor", + "classes/_classes_.baseclass.md#private-internalclass", + "classes/_classes_.baseclass.md#protected-kind", + "classes/_classes_.baseclass.md#name", + "classes/_classes_.baseclass.md#static-instance", + "classes/_classes_.baseclass.md#static-instances", + "classes/_classes_.baseclass.md#abstract-abstractmethod", + "classes/_classes_.baseclass.md#arrowfunction", + "classes/_classes_.baseclass.md#private-checkname", + "classes/_classes_.baseclass.md#getname", + "classes/_classes_.baseclass.md#setname", + "classes/_classes_.baseclass.md#static-catest", + "classes/_classes_.baseclass.md#static-getinstance", + "classes/_classes_.baseclass.md#static-getname", + "classes/_classes_.genericclass.md", + "classes/_classes_.genericclass.md#constructor", + "classes/_classes_.genericclass.md#protected-p2", + "classes/_classes_.genericclass.md#p3", + "classes/_classes_.genericclass.md#private-p4", + "classes/_classes_.genericclass.md#readonly-p5", + "classes/_classes_.genericclass.md#value", + "classes/_classes_.genericclass.md#getvalue", + "classes/_classes_.genericclass.md#setvalue", + "classes/_classes_.internalclass.md", + "classes/_classes_.internalclass.md#constructor", + "classes/_classes_.nongenericclass.md", + "classes/_classes_.nongenericclass.md#constructor", + "classes/_classes_.nongenericclass.md#protected-p2", + "classes/_classes_.nongenericclass.md#p3", + "classes/_classes_.nongenericclass.md#readonly-p5", + "classes/_classes_.nongenericclass.md#value", + "classes/_classes_.nongenericclass.md#getvalue", + "classes/_classes_.nongenericclass.md#setvalue", + "classes/_classes_.subclassa.md", + "classes/_classes_.subclassa.md#constructor", + "classes/_classes_.subclassa.md#protected-kind", + "classes/_classes_.subclassa.md#name", + "classes/_classes_.subclassa.md#static-instance", + "classes/_classes_.subclassa.md#static-instances", + "classes/_classes_.subclassa.md#nameproperty", + "classes/_classes_.subclassa.md#readonlynameproperty", + "classes/_classes_.subclassa.md#writeonlynameproperty", + "classes/_classes_.subclassa.md#abstractmethod", + "classes/_classes_.subclassa.md#arrowfunction", + "classes/_classes_.subclassa.md#getname", + "classes/_classes_.subclassa.md#print", + "classes/_classes_.subclassa.md#printname", + "classes/_classes_.subclassa.md#setname", + "classes/_classes_.subclassa.md#static-catest", + "classes/_classes_.subclassa.md#static-getinstance", + "classes/_classes_.subclassa.md#static-getname", + "classes/_classes_.subclassb.md", + "classes/_classes_.subclassb.md#constructor", + "classes/_classes_.subclassb.md#protected-kind", + "classes/_classes_.subclassb.md#name", + "classes/_classes_.subclassb.md#static-instance", + "classes/_classes_.subclassb.md#static-instances", + "classes/_classes_.subclassb.md#abstractmethod", + "classes/_classes_.subclassb.md#arrowfunction", + "classes/_classes_.subclassb.md#dosomething", + "classes/_classes_.subclassb.md#getname", + "classes/_classes_.subclassb.md#setname", + "classes/_classes_.subclassb.md#static-catest", + "classes/_classes_.subclassb.md#static-getinstance", + "classes/_classes_.subclassb.md#static-getname", + "interfaces/_classes_.inameinterface.md", + "interfaces/_classes_.inameinterface.md#name", + "interfaces/_classes_.inameinterface.md#getname", + "interfaces/_classes_.iprintinterface.md", + "interfaces/_classes_.iprintinterface.md#print", + "interfaces/_classes_.iprintnameinterface.md", + "interfaces/_classes_.iprintnameinterface.md#name", + "interfaces/_classes_.iprintnameinterface.md#getname", + "interfaces/_classes_.iprintnameinterface.md#print", + "interfaces/_classes_.iprintnameinterface.md#printname", + "modules/_comments_.md", + "modules/_comments_.md#let-commentswithfencedblock", + "modules/_comments_.md#let-commentswithincludes", + "modules/_comments_.md#let-commentswithsymbollinks", + "modules/_comments_.md#let-commentswithtags", + "modules/_comments_.md#commentsinreturn", + "modules/_comments_.md#functionwithdoclink", + "modules/_destrucuting_.md", + "interfaces/_destrucuting_.i.md", + "modules/_destrucuting_.md#destructarraya", + "modules/_destrucuting_.md#destructarrayb", + "modules/_destrucuting_.md#destructarrayc", + "modules/_destrucuting_.md#destructarraywithignoresa", + "modules/_destrucuting_.md#destructarraywithignoresrest", + "modules/_destrucuting_.md#destructarraywithrest", + "modules/_destrucuting_.md#destructarraywithresta", + "modules/_destrucuting_.md#destructarraywithrestb", + "modules/_destrucuting_.md#destructobjecta", + "modules/_destrucuting_.md#destructobjectb", + "modules/_destrucuting_.md#destructobjectc", + "modules/_destrucuting_.md#drawtext", + "interfaces/_destrucuting_.i.md", + "interfaces/_destrucuting_.i.md#name", + "modules/_functions_.md", + "modules/_functions_.modulefunction.md", + "modules/_functions_.md#buildname", + "modules/_functions_.md#exportedfunction", + "modules/_functions_.md#functionwithdefaults", + "modules/_functions_.md#functionwithoptionalvalue", + "modules/_functions_.md#functionwithparameters", + "modules/_functions_.md#functionwithrest", + "modules/_functions_.md#internalfunction", + "modules/_functions_.md#multiplesignatures", + "modules/_functions_.md#const-variablefunction", + "modules/_functions_.modulefunction.md", + "modules/_functions_.modulefunction.md#let-functionvariable", + "modules/_functions_.modulefunction.md#append", + "modules/_functions_.modulefunction.md#prepend", + "modules/_literals_.md", + "modules/_literals_.md#let-typeliteral", + "modules/_literals_.md#const-objectliteral", + "modules/_variables_.md", + "modules/_variables_.md#let-color", + "modules/_variables_.md#let-decimal", + "modules/_variables_.md#let-isdone", + "modules/_variables_.md#let-list", + "modules/_variables_.md#let-n", + "modules/_variables_.md#let-notsure", + "modules/_variables_.md#let-u", + "modules/_variables_.md#let-x", +] +`; diff --git a/docs-gen/src/components/__snapshots__/front-matter.component.spec.ts.snap b/docs-gen/src/components/__snapshots__/front-matter.component.spec.ts.snap new file mode 100644 index 0000000000000..9dd83d215f253 --- /dev/null +++ b/docs-gen/src/components/__snapshots__/front-matter.component.spec.ts.snap @@ -0,0 +1,27 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`FrontMatterComponent should set correct label for globals file 1`] = `"Globals"`; + +exports[`FrontMatterComponent should compile set correct label for index without a README 1`] = `"Globals"`; + +exports[`FrontMatterComponent should parse a quoted string 1`] = `"xyx\\\\'s \\"quoted\\" title"`; + +exports[`FrontMatterComponent should prepend YAML block to start of page 1`] = ` +"--- +id: \\"_access_access_\\" +title: \\"Page title\\" +sidebar_label: \\"Page title\\" +--- + +[CONTENT]" +`; + +exports[`FrontMatterComponent should set correct label for index with a README 1`] = `"README"`; + +exports[`FrontMatterComponent should set correct title for index page 1`] = `"Project name"`; + +exports[`FrontMatterComponent should set correct title for index page if packageInfo label available 1`] = `"Package Label"`; + +exports[`FrontMatterComponent should set correct title for pages without a navigation match 1`] = `"Project name"`; + +exports[`FrontMatterComponent should set id 1`] = `"_access_access_"`; diff --git a/docs-gen/src/components/__snapshots__/helpers.component.spec.ts.snap b/docs-gen/src/components/__snapshots__/helpers.component.spec.ts.snap new file mode 100644 index 0000000000000..76f3e10d81f93 --- /dev/null +++ b/docs-gen/src/components/__snapshots__/helpers.component.spec.ts.snap @@ -0,0 +1,27 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`HelpersComponent should build @link references' 1`] = ` +"Taken from http://usejsdoc.org/tags-inline-link.html. +" +`; + +exports[`HelpersComponent should convert comments with includes' 1`] = ` +"This is a simple example on how to use include. + +![My image alt text](../media/logo.png) + +![My not found image](media://VOID.png) + + +This is an example of handlebars include + +This is a simple example on a handlebars file. +" +`; + +exports[`HelpersComponent should convert symbols brackets to symbol links' 1`] = ` +"- Link to an external reflection: [BaseClass](../classes/_classes_.baseclass.md) +- Link to an internal reflection: [commentsInReturn](_comments_.md#commentsinreturn) +- Link to an undefined reflection: [[VOID]] +" +`; diff --git a/docs-gen/src/components/front-matter.component.spec.ts b/docs-gen/src/components/front-matter.component.spec.ts new file mode 100644 index 0000000000000..25fe1486cd084 --- /dev/null +++ b/docs-gen/src/components/front-matter.component.spec.ts @@ -0,0 +1,130 @@ +import * as path from 'path'; +import { Application } from 'typedoc'; + +const { FrontMatterComponent } = require('components/front-matter.component'); +describe(`FrontMatterComponent`, () => { + let frontMatterComponent; + let app; + + beforeAll(() => { + app = new Application(); + app.bootstrap({ + mode: 'file', + module: 'CommonJS', + target: 'ES5', + readme: 'none', + theme: 'markdown', + logger: 'none', + plugin: path.join(__dirname, '../../../dist/index'), + }); + app.convert(['./test/stubs/functions.ts']); + app.renderer.addComponent('frontmatter', new FrontMatterComponent(app.renderer)); + frontMatterComponent = app.renderer.getComponent('frontmatter'); + }); + + test(`should prepend YAML block to start of page`, () => { + expect(true).toBeTruthy(); + }); + + test(`should prepend YAML block to start of page`, () => { + const spy = jest.spyOn(frontMatterComponent, 'getTitleFromNavigation').mockReturnValue('Page title'); + const page = { + contents: '[CONTENT]', + url: 'modules/_access_access_.md', + model: { name: '"access/access"' }, + project: { url: 'index.md' }, + }; + frontMatterComponent.onPageEnd(page); + expect(page.contents).toMatchSnapshot(); + spy.mockRestore(); + }); + + test(`should set id`, () => { + const page = { url: 'modules/_access_access_.md' }; + expect(frontMatterComponent.getId(page)).toMatchSnapshot(); + }); + + test(`should set correct title for index page`, () => { + const page = { + url: 'index.md', + project: { url: 'index.md', name: 'Project name' }, + }; + expect(frontMatterComponent.getTitle(page)).toMatchSnapshot(); + }); + + test(`should set correct title for pages without a navigation match`, () => { + const spy = jest.spyOn(frontMatterComponent, 'getTitleFromNavigation').mockReturnValue(null); + const page = { + url: 'index.md', + project: { url: 'page.md', name: 'Project name' }, + }; + expect(frontMatterComponent.getTitle(page)).toMatchSnapshot(); + spy.mockRestore(); + }); + + test(`should set correct title for index page if packageInfo label available`, () => { + const page = { + url: 'index.md', + project: { url: 'index.md', packageInfo: { label: 'Package Label' } }, + }; + expect(frontMatterComponent.getTitle(page)).toMatchSnapshot(); + }); + + test(`should compile set correct label for index without a README`, () => { + const spy = jest.spyOn(frontMatterComponent, 'getTitleFromNavigation').mockReturnValue(null); + const page = { + url: 'index.md', + project: { url: 'index.md' }, + }; + expect(frontMatterComponent.getLabel(page)).toMatchSnapshot(); + spy.mockRestore(); + }); + + test(`should set correct label for index with a README`, () => { + const spy = jest.spyOn(frontMatterComponent, 'getTitleFromNavigation').mockReturnValue(null); + const page = { + url: 'index.md', + project: { url: 'index.md', readme: 'README' }, + }; + expect(frontMatterComponent.getLabel(page)).toMatchSnapshot(); + spy.mockRestore(); + }); + + test(`should set correct label for globals file`, () => { + const page = { + url: 'globals.md', + project: { url: 'index.md' }, + }; + expect(frontMatterComponent.getLabel(page)).toMatchSnapshot(); + }); + + test(`should parse a quoted string`, () => { + expect(frontMatterComponent.escapeYAMLString(`xyx's "quoted" title`)).toMatchSnapshot(); + }); + + test(`should find title from navigation object`, () => { + const page = { + navigation: { + children: [ + { + url: 'urla', + title: 'titlea', + children: [ + { url: 'urla1', title: 'titlea1' }, + { + url: 'urlb2', + title: 'titleb2', + children: [{ url: 'urlc1', title: 'titlec1' }], + }, + ], + }, + { url: 'urlb', title: 'titleb' }, + ], + }, + }; + expect(frontMatterComponent.getTitleFromNavigation(page, 'urlb')).toEqual('titleb'); + expect(frontMatterComponent.getTitleFromNavigation(page, 'urla1')).toEqual('titlea1'); + expect(frontMatterComponent.getTitleFromNavigation(page, 'urlc1')).toEqual('titlec1'); + expect(frontMatterComponent.getTitleFromNavigation(page, 'url')).toEqual(null); + }); +}); diff --git a/docs-gen/src/components/front-matter.component.ts b/docs-gen/src/components/front-matter.component.ts new file mode 100644 index 0000000000000..02e46c09014b4 --- /dev/null +++ b/docs-gen/src/components/front-matter.component.ts @@ -0,0 +1,78 @@ +import * as path from 'path'; +import { NavigationItem } from 'typedoc'; +import { Component, ContextAwareRendererComponent } from 'typedoc/dist/lib/output/components'; +import { PageEvent } from 'typedoc/dist/lib/output/events'; + +@Component({ name: 'frontmatter' }) +export class FrontMatterComponent extends ContextAwareRendererComponent { + initialize() { + super.initialize(); + + this.listenTo(this.application.renderer, { + [PageEvent.END]: this.onPageEnd, + }); + } + + onPageEnd(page: PageEvent) { + page.contents = page.contents.replace(/^/, this.getYamlString(page) + '\n\n').replace(/[\r\n]{3,}/g, '\n\n'); + } + + getYamlString(page: PageEvent) { + const yaml = `--- +id: "${this.escapeYAMLString(this.getId(page))}" +title: "${this.escapeYAMLString(this.getTitle(page))}" +sidebar_label: "${this.escapeYAMLString(this.getLabel(page))}" +---`; + return yaml; + } + + getId(page: PageEvent) { + return this.stripExt(page.url); + } + + getTitle(page: PageEvent) { + if (page.url === page.project.url) { + return this.getProjectName(page); + } + return this.getTitleFromNavigation(page, page.url) || this.getProjectName(page); + } + + getLabel(page: PageEvent) { + if (this.stripExt(page.url) === 'globals') { + return 'Globals'; + } + const title = this.getTitleFromNavigation(page, page.url); + return title ? title : !!page.project.readme ? 'README' : 'Globals'; + } + + // prettier-ignore + escapeYAMLString(str: string) { + return str.replace(/([^\\])'/g, '$1\\\''); + } + + getProjectName(page: PageEvent) { + return (page.project.packageInfo && page.project.packageInfo.label) || page.project.name; + } + + getTitleFromNavigation(page: PageEvent, url: string) { + const item = this.findNavigationItem(page.navigation.children, url, null); + return item ? item.title : null; + } + + findNavigationItem(navigation: NavigationItem[], url, item: NavigationItem) { + navigation.forEach(navigationChild => { + if (navigationChild.url === url) { + item = navigationChild; + return; + } + if (navigationChild.children) { + item = this.findNavigationItem(navigationChild.children, url, item); + } + }); + return item; + } + + stripExt(url: string) { + return path.basename(url, path.extname(url)); + } +} diff --git a/docs-gen/src/components/helpers.component.spec.ts b/docs-gen/src/components/helpers.component.spec.ts new file mode 100644 index 0000000000000..9738e4d26cf59 --- /dev/null +++ b/docs-gen/src/components/helpers.component.spec.ts @@ -0,0 +1,59 @@ +import * as fs from 'fs-extra'; +import * as Handlebars from 'handlebars'; +import * as path from 'path'; +import { Application } from 'typedoc'; + +describe(`HelpersComponent`, () => { + let app; + let project; + let pluginInstance; + const out = path.join(__dirname, 'tmp'); + beforeAll(() => { + app = new Application(); + app.bootstrap({ + module: 'CommonJS', + target: 'ES5', + readme: 'none', + theme: 'markdown', + logger: 'none', + includes: './test/stubs/inc/', + media: './test/stubs/media/', + listInvalidSymbolLinks: true, + plugin: path.join(__dirname, '../../dist/index'), + }); + project = app.convert(app.expandInputFiles(['./test/stubs/'])); + app.generateDocs(project, out); + pluginInstance = app.renderer.getComponent('helpers'); + }); + + afterAll(() => { + fs.removeSync(out); + }); + + test(`should define helper'`, () => { + const helpers = Handlebars.helpers; + expect(helpers.comment).toBeDefined(); + }); + + test(`should convert symbols brackets to symbol links'`, () => { + expect( + Handlebars.helpers.comment.call(project.findReflectionByName('commentsWithSymbolLinks').comment.text), + ).toMatchSnapshot(); + }); + + test(`should set warnings if symbol not found'`, () => { + expect(pluginInstance.warnings.length > 0).toBeTruthy(); + }); + + test(`should convert comments with includes'`, () => { + expect( + Handlebars.helpers.comment.call(project.findReflectionByName('commentsWithIncludes').comment.text), + ).toMatchSnapshot(); + }); + + test(`should build @link references'`, () => { + expect( + Handlebars.helpers.comment.call(project.findReflectionByName('functionWithDocLink').signatures[0].comment.text), + ).toMatchSnapshot(); + }); +}); diff --git a/docs-gen/src/components/helpers.component.ts b/docs-gen/src/components/helpers.component.ts new file mode 100644 index 0000000000000..9025769988300 --- /dev/null +++ b/docs-gen/src/components/helpers.component.ts @@ -0,0 +1,230 @@ +import * as fs from 'fs-extra'; +import * as Handlebars from 'handlebars'; +import * as path from 'path'; +import { MarkedLinksPlugin, ProjectReflection, Reflection } from 'typedoc'; +import { Component, ContextAwareRendererComponent } from 'typedoc/dist/lib/output/components'; +import { PageEvent, RendererEvent } from 'typedoc/dist/lib/output/events'; +import * as Util from 'util'; + +import MarkdownTheme from '../theme'; + +/** + * This component is essentially a combination of TypeDoc's 'MarkedPlugin' and 'MarkedLinksPlugin'. + * The options are unchanged , but strips out all of the html configs. + */ + +@Component({ name: 'helpers' }) +export class ContextAwareHelpersComponent extends ContextAwareRendererComponent { + /** + * The path referenced files are located in. + */ + private includes?: string; + + /** + * Path to the output media directory. + */ + private mediaDirectory?: string; + + /** + * The pattern used to find references in markdown. + */ + private includePattern: RegExp = /\[\[include:([^\]]+?)\]\]/g; + + /** + * The pattern used to find media links. + */ + private mediaPattern: RegExp = /media:\/\/([^ "\)\]\}]+)/g; + + /** + * Regular expression for detecting bracket links. + */ + private brackets: RegExp = /\[\[([^\]]+)\]\]/g; + + /** + * Regular expression for detecting inline tags like {@link ...}. + */ + private inlineTag: RegExp = /(?:\[(.+?)\])?\{@(link|linkcode|linkplain)\s+((?:.|\n)+?)\}/gi; + + private listInvalidSymbolLinks: boolean; + + private warnings: string[] = []; + + initialize() { + super.initialize(); + + this.includes = this.application.options.getValue('includes'); + this.mediaDirectory = this.application.options.getValue('media'); + this.listInvalidSymbolLinks = this.application.options.getValue('listInvalidSymbolLinks'); + + this.listenTo( + this.owner, + { + [RendererEvent.END]: this.onEndRenderer, + }, + undefined, + 100, + ); + + const component = this; + + MarkdownTheme.handlebars.registerHelper('comment', function(this: string) { + return component.parseComments(this); + }); + + MarkdownTheme.handlebars.registerHelper('breadcrumbs', function(this: PageEvent) { + return component.breadcrumb(this.model, this.project, []); + }); + + MarkdownTheme.handlebars.registerHelper('relativeURL', (url: string) => { + return url ? this.getRelativeUrl(url) : url; + }); + } + + public breadcrumb(model: Reflection, project: ProjectReflection, md: string[]) { + const theme = this.application.renderer.theme as MarkdownTheme; + if (model && model.parent) { + this.breadcrumb(model.parent, project, md); + if (model.url) { + md.push(`[${model.name}](${this.getRelativeUrl(model.url)})`); + } else { + md.push(model.url); + } + } else { + if (!!project.readme) { + md.push(`[${project.name}](${this.getRelativeUrl(theme.indexName + theme.fileExt)})`); + } + md.push(`[${project.readme ? 'Globals' : project.name}](${this.getRelativeUrl(project.url)})`); + } + return md.join(' › '); + } + + /** + * Parse the given comemnts string and return the resulting html. + * + * @param text The markdown string that should be parsed. + * @param context The current handlebars context. + * @returns The resulting html string. + */ + public parseComments(text: string) { + const context = Object.assign(text, ''); + + if (this.includes) { + text = text.replace(this.includePattern, (match: string, includesPath: string) => { + includesPath = path.join(this.includes!, includesPath.trim()); + if (fs.existsSync(includesPath) && fs.statSync(includesPath).isFile()) { + const contents = fs.readFileSync(includesPath, 'utf-8'); + if (includesPath.substr(-4).toLocaleLowerCase() === '.hbs') { + const template = Handlebars.compile(contents); + return template(context); + } else { + return contents; + } + } else { + return ''; + } + }); + } + + if (this.mediaDirectory) { + text = text.replace(this.mediaPattern, (match: string, mediaPath: string) => { + if (fs.existsSync(path.join(this.mediaDirectory!, mediaPath))) { + return this.getRelativeUrl('media') + '/' + mediaPath; + } else { + return match; + } + }); + } + + return this.replaceInlineTags(this.replaceBrackets(text)); + } + + /** + * Find all references to symbols within the given text and transform them into a link. + * + * This function is aware of the current context and will try to find the symbol within the + * current reflection. It will walk up the reflection chain till the symbol is found or the + * root reflection is reached. As a last resort the function will search the entire project + * for the given symbol. + * + * @param text The text that should be parsed. + * @returns The text with symbol references replaced by links. + */ + private replaceBrackets(text: string): string { + return text.replace(this.brackets, (match: string, content: string): string => { + const split = MarkedLinksPlugin.splitLinkText(content); + return this.buildLink(match, split.target, split.caption); + }); + } + + /** + * Find symbol {@link ...} strings in text and turn into html links + * + * @param text The string in which to replace the inline tags. + * @return The updated string. + */ + private replaceInlineTags(text: string): string { + return text.replace(this.inlineTag, (match: string, leading: string, tagName: string, content: string): string => { + const split = MarkedLinksPlugin.splitLinkText(content); + const target = split.target; + const caption = leading || split.caption; + const monospace = tagName === 'linkcode'; + + return this.buildLink(match, target, caption, monospace); + }); + } + + /** + * Format a link with the given text and target. + * + * @param original The original link string, will be returned if the target cannot be resolved.. + * @param target The link target. + * @param caption The caption of the link. + * @param monospace Whether to use monospace formatting or not. + * @returns A html link tag. + */ + private buildLink(original: string, target: string, caption: string, monospace?: boolean): string { + if (!this.urlPrefix.test(target)) { + let reflection: Reflection | undefined; + if (this.reflection) { + reflection = this.reflection.findReflectionByName(target); + } else if (this.project) { + reflection = this.project.findReflectionByName(target); + } + + if (reflection && reflection.url) { + if (this.urlPrefix.test(reflection.url)) { + target = reflection.url; + } else { + target = this.getRelativeUrl(reflection.url); + } + } else { + const fullName = (this.reflection || this.project)!.getFullName(); + this.warnings.push(`In ${fullName}: ${original}`); + return original; + } + } + + if (monospace) { + caption = '`' + caption + '`'; + } + + return Util.format('[%s](%s)', caption, target); + } + + /** + * Triggered when [[Renderer]] is finished + */ + onEndRenderer(event: RendererEvent) { + if (this.listInvalidSymbolLinks && this.warnings.length > 0) { + this.application.logger.write(''); + this.application.logger.warn( + 'Found invalid symbol reference(s) in JSDocs, ' + + 'they will not render as links in the generated documentation.', + ); + + for (const warning of this.warnings) { + this.application.logger.write(' ' + warning); + } + } + } +} diff --git a/docs-gen/src/components/options.component.ts b/docs-gen/src/components/options.component.ts new file mode 100644 index 0000000000000..d938ce4569f4d --- /dev/null +++ b/docs-gen/src/components/options.component.ts @@ -0,0 +1,31 @@ +import { Component, ContextAwareRendererComponent } from 'typedoc/dist/lib/output/components'; + +import MarkdownTheme from '../theme'; + +@Component({ name: 'options' }) +export class OptionsComponent extends ContextAwareRendererComponent { + initialize() { + super.initialize(); + + const namedAnchors = this.application.options.getValue('namedAnchors'); + const hideBreadcrumbs = this.application.options.getValue('hideBreadcrumbs'); + const hideIndexes = this.application.options.getValue('hideIndexes'); + const hideSourceFiles = this.application.options.getValue('hideSources'); + + MarkdownTheme.handlebars.registerHelper('ifNamedAnchors', function(options) { + return namedAnchors ? options.fn(this) : options.inverse(this); + }); + + MarkdownTheme.handlebars.registerHelper('ifBreadcrumbs', function(options) { + return hideBreadcrumbs ? options.inverse(this) : options.fn(this); + }); + + MarkdownTheme.handlebars.registerHelper('ifIndexes', function(options) { + return hideIndexes ? options.inverse(this) : options.fn(this); + }); + + MarkdownTheme.handlebars.registerHelper('ifSources', function(options) { + return hideSourceFiles ? options.inverse(this) : options.fn(this); + }); + } +} diff --git a/docs-gen/src/index.ts b/docs-gen/src/index.ts new file mode 100644 index 0000000000000..7f3ae454a5bcc --- /dev/null +++ b/docs-gen/src/index.ts @@ -0,0 +1,68 @@ +import { Application } from 'typedoc/dist/lib/application'; +import { ParameterType } from 'typedoc/dist/lib/utils/options/declaration'; + +import { MarkdownPlugin } from './plugin'; +import CubejsGroupPlugin from './CubejsGroupPlugin'; + +export = (PluginHost: Application) => { + const app = PluginHost.owner; + if (app.converter.hasComponent('markdown')) { + return; + } + + app.options.addDeclaration({ + help: 'Markdown Plugin: Deprecated in favour of theme.', + name: 'platform', + type: ParameterType.String, + }); + + app.options.addDeclaration({ + help: 'Markdown Plugin: Deprecated.', + name: 'hideProjectTitle', + type: ParameterType.Boolean, + }); + + app.options.addDeclaration({ + help: 'Markdown Plugin: Do not print source file link rendering.', + name: 'hideSources', + type: ParameterType.Boolean, + }); + + app.options.addDeclaration({ + help: 'Markdown Plugin: Do not print breadcrumbs.', + name: 'hideBreadcrumbs', + type: ParameterType.Boolean, + }); + + app.options.addDeclaration({ + help: 'Markdown Plugin: Do not print indexes.', + name: 'hideIndexes', + type: ParameterType.Boolean, + }); + + app.options.addDeclaration({ + help: + 'Markdown Plugin: Use HTML named anchors as fragment identifiers for engines that do not automatically assign header ids.', + name: 'namedAnchors', + type: ParameterType.Boolean, + }); + + app.options.addDeclaration({ + help: + 'Markdown Plugin: Use long navigation title instead of default short one (applicable to navigation / front-matter only).', + name: 'longTitle', + type: ParameterType.Boolean, + }); + + app.options.addDeclaration({ + help: 'Skips updating of the sidebar.json file when used with docusaurus or docusaurus2 theme', + name: 'skipSidebar', + type: ParameterType.Boolean, + + }); + + app.converter.addComponent('markdown', new MarkdownPlugin(app.converter)); + + app.converter.removeComponent('group'); + app.converter.addComponent('cubejs-group', new CubejsGroupPlugin(app.converter)) +}; diff --git a/docs-gen/src/plugin.ts b/docs-gen/src/plugin.ts new file mode 100644 index 0000000000000..727ed83127a09 --- /dev/null +++ b/docs-gen/src/plugin.ts @@ -0,0 +1,65 @@ +import * as path from 'path'; +import * as fs from 'fs'; +import { Renderer } from 'typedoc'; +import { Converter } from 'typedoc/dist/lib/converter'; +import { Component, ConverterComponent } from 'typedoc/dist/lib/converter/components'; + +@Component({ name: 'markdown' }) +export class MarkdownPlugin extends ConverterComponent { + initialize() { + this.listenTo(this.owner, { + [Converter.EVENT_BEGIN]: this.onBegin, + [Converter.EVENT_RESOLVE_BEGIN]: this.onResolveBegin, + [Converter.EVENT_END]: this.onEnd, + }); + } + + /** + * Overide the default assets for any custom themes to inherit + */ + onBegin() { + Renderer.getDefaultTheme = () => path.join(__dirname, 'resources'); + } + + /** + * Read the theme option and load the paths of any recognised built in themes + * Otherwise pass the path through to the Renderer + */ + onResolveBegin() { + const options = this.application.options; + const theme = (options.getValue('platform') as string) || (options.getValue('theme') as string); + + // if the theme is 'default' or 'markdown' load the base markdown theme + if (theme === 'default' || theme === 'markdown') { + options.setValue('theme', path.join(__dirname)); + } + + // load any built in sub themes + const subThemes = ['docusaurus', 'docusaurus2', 'vuepress', 'gitbook', 'bitbucket']; + if (subThemes.includes(theme)) { + options.setValue('theme', path.join(__dirname, 'subthemes', theme)); + } + + options.setValue('out', options.getValue('out') + '/__tmp__'); + } + + onEnd() { + const { options } = this.application; + const tmpOut = options.getValue('out'); + + setImmediate(() => { + if (fs.existsSync(tmpOut)) { + fs.readdirSync(tmpOut).map((fileName) => { + const pathArr = tmpOut.split('/'); + pathArr.splice(-1, 1); + const out = path.join(...pathArr); + const currentPath = path.join(out, fileName); + + fs.copyFileSync(path.join(tmpOut, fileName), currentPath); + }); + + fs.rmdirSync(tmpOut, { recursive: true }); + } + }) + } +} diff --git a/docs-gen/src/resources/helpers/__snapshots__/_helpers.spec.ts.snap b/docs-gen/src/resources/helpers/__snapshots__/_helpers.spec.ts.snap new file mode 100644 index 0000000000000..3debe740cde71 --- /dev/null +++ b/docs-gen/src/resources/helpers/__snapshots__/_helpers.spec.ts.snap @@ -0,0 +1,60 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Helpers declarationTitle helper should compi;e 1`] = `"**color**: *string* = \\"blue\\""`; + +exports[`Helpers literal helper should compile object literal 1`] = ` +"!spaces* **valueA**: *number* = 100 + +!spaces* **valueB**: *boolean* = true + +!spaces* **valueZ**: *string* = \\"foo\\" + +!spaces* **valueY**(): *string* + + +!spaces* **valueX**: *object* + +!spaces * **valueA**: *number[]* = [100, 200, 300] + +!spaces * **valueZ**: *string* = \\"foo\\" + +!spaces * **valueY**(\`z\`: string): *object* + + +!spaces * **a**: *string* = \\"test\\" + +!spaces * **b**: *string* = z + + +" +`; + +exports[`Helpers literal helper should compile type literal 1`] = ` +" +" +`; + +exports[`Helpers parameterNameAndType helper sould compile 1`] = `"▪\`Const\` **objectLiteral**: *object*"`; + +exports[`Helpers parameterTable helper should compile 1`] = ` +" +Name | Type | Default | Description | +------ | ------ | ------ | ------ | +\`valueA\` | string | \\"defaultValue\\" | A parameter with a default string value. | +\`valueB\` | number | 100 | A parameter with a default numeric value. | +\`valueC\` | number | Number.NaN | A parameter with a default NaN value. | +\`valueD\` | boolean | true | A parameter with a default boolean value. | +\`valueE\` | boolean | null | A parameter with a default null value. | +" +`; + +exports[`Helpers signatureTitle helper should compile 1`] = ` +"**functionWithParameters**(\`paramZ\`: string, \`paramG\`: any, \`paramA\`: Object): *number* +" +`; + +exports[`Helpers type helper should compile intrinsic type 1`] = `"string"`; + +exports[`Helpers typeAndParent helper should compile 1`] = `"[INameInterface](../interfaces/_classes_.inameinterface.md).[name](../interfaces/_classes_.inameinterface.md#name)"`; + +exports[`Helpers utils helpers should compile stripLineBreaks helper: line 1 line2 1`] = `"line 1 line2 "`; diff --git a/docs-gen/src/resources/helpers/_helpers.spec.ts b/docs-gen/src/resources/helpers/_helpers.spec.ts new file mode 100644 index 0000000000000..9f2d99e498fe8 --- /dev/null +++ b/docs-gen/src/resources/helpers/_helpers.spec.ts @@ -0,0 +1,185 @@ +import * as fs from 'fs-extra'; +import * as Handlebars from 'handlebars'; +import * as path from 'path'; +import { Application } from 'typedoc'; + +const handlebarsHelpersOptionsStub = { + fn: () => 'true', + inverse: () => 'false', + hash: {}, +}; + +describe(`Helpers`, () => { + let app; + let project: any; + const out = path.join(__dirname, 'tmp'); + + beforeAll(() => { + app = new Application(); + app.bootstrap({ + module: 'CommonJS', + target: 'ES5', + readme: 'none', + theme: 'markdown', + logger: 'none', + plugin: path.join(__dirname, '../../../dist/index'), + }); + project = app.convert(app.expandInputFiles(['./test/stubs/'])); + app.generateDocs(project, out); + }); + + afterAll(() => { + fs.removeSync(out); + }); + + describe(`utils helpers`, () => { + test(`should compile headings helper`, () => { + expect(Handlebars.helpers.heading.call(this, 2)).toEqual('##'); + }); + test(`should compile stripLineBreaks helper`, () => { + const result = Handlebars.helpers.stripLineBreaks.call('line 1\n line2\n'); + expect(result).toMatchSnapshot('line 1 line2'); + }); + test(`should compile spaces helper`, () => { + const result = Handlebars.helpers.spaces.call(this, 3); + expect(result).toEqual('!spaces '); + }); + }); + + describe(`declarationTitle helper`, () => { + test(`should compi;e`, () => { + expect(Handlebars.helpers.declarationTitle.call(project.findReflectionByName('color'))).toMatchSnapshot(); + }); + }); + + describe(`ifHasTypeDeclarations helper`, () => { + test(`should return true if ifHasTypeDeclarations is true and expectation is truthy`, () => { + const result = Handlebars.helpers.ifHasTypeDeclarations.call( + project.findReflectionByName('drawText').signatures[0], + true, + handlebarsHelpersOptionsStub, + ); + expect(result).toEqual('true'); + }); + + test(`should return true if ifHasTypeDeclarations is false and expectation is truthy`, () => { + const data = project.findReflectionByName('exportedFunction'); + const result = Handlebars.helpers.ifHasTypeDeclarations.call( + data.signatures[0], + true, + handlebarsHelpersOptionsStub, + ); + expect(result).toEqual('false'); + }); + + test(`should return true if ifHasTypeDeclarations is false and expectation is falsey`, () => { + const data = project.findReflectionByName('exportedFunction'); + const result = Handlebars.helpers.ifHasTypeDeclarations.call( + data.signatures[0], + false, + handlebarsHelpersOptionsStub, + ); + expect(result).toEqual('true'); + }); + }); + + describe(`ifIsLiteralType helper`, () => { + test(`should return true if isLiteralType is is true and expectation is truthy`, () => { + const data = project.findReflectionByName('objectLiteral'); + const result = Handlebars.helpers.ifIsLiteralType.call(data, true, handlebarsHelpersOptionsStub); + expect(result).toEqual('true'); + }); + + test(`should return false if isLiteralType is is true and expectation is falsey`, () => { + const data = project.findReflectionByName('objectLiteral'); + const result = Handlebars.helpers.ifIsLiteralType.call(data, false, handlebarsHelpersOptionsStub); + expect(result).toEqual('false'); + }); + + test(`should return true if isLiteralType is is false and expectation is falsey`, () => { + const data = project.findReflectionByName('color'); + const result = Handlebars.helpers.ifIsLiteralType.call(data, false, handlebarsHelpersOptionsStub); + expect(result).toEqual('true'); + }); + }); + + describe(`ifParentIsObjectLiteral helper`, () => { + test(`should return true if ifParentIsObjectLiteral is is true and expectation is truthy`, () => { + const data = { + parent: { + parent: { + kind: 2097152, + }, + }, + }; + const result = Handlebars.helpers.ifParentIsObjectLiteral.call(data, true, handlebarsHelpersOptionsStub); + expect(result).toEqual('true'); + }); + + test(`should return false if ifParentIsObjectLiteral is is false and expectation is truthy`, () => { + const data = {}; + const result = Handlebars.helpers.ifParentIsObjectLiteral.call(data, true, handlebarsHelpersOptionsStub); + expect(result).toEqual('false'); + }); + + test(`should return true if ifParentIsObjectLiteral is is false and expectation is falsey`, () => { + const data = {}; + const result = Handlebars.helpers.ifParentIsObjectLiteral.call(data, false, handlebarsHelpersOptionsStub); + expect(result).toEqual('true'); + }); + }); + + describe(`literal helper`, () => { + test(`should compile object literal`, () => { + const data = project.findReflectionByName('objectLiteral'); + const result = Handlebars.helpers.literal.call(data); + expect(result).toMatchSnapshot(); + }); + + test(`should compile type literal`, () => { + const data = project.findReflectionByName('typeLiteral'); + const result = Handlebars.helpers.literal.call(data); + expect(result).toMatchSnapshot(); + }); + }); + + describe(`parameterNameAndType helper`, () => { + test(`sould compile`, () => { + const data = project.findReflectionByName('objectLiteral'); + const result = Handlebars.helpers.parameterNameAndType.call(data); + expect(result).toMatchSnapshot(); + }); + }); + + describe(`parameterTable helper`, () => { + test(`should compile`, () => { + const data = project.findReflectionByName('functionWithDefaults'); + const result = Handlebars.helpers.parameterTable.call(data.signatures[0].parameters); + expect(result).toMatchSnapshot(); + }); + }); + + describe(`signatureTitle helper`, () => { + test(`should compile`, () => { + const data = project.findReflectionByName('functionWithParameters'); + const result = Handlebars.helpers.signatureTitle.call(data.signatures[0]); + expect(result).toMatchSnapshot(); + }); + }); + + describe(`typeAndParent helper`, () => { + test(`should compile`, () => { + const data = project.findReflectionByName('BaseClass'); + const result = Handlebars.helpers.typeAndParent.call(data.children[3].implementationOf); + expect(result).toMatchSnapshot(); + }); + }); + + describe(`type helper`, () => { + test(`should compile intrinsic type`, () => { + const data = project.findReflectionByName('color'); + const result = Handlebars.helpers.type.call(data.type); + expect(result).toMatchSnapshot(); + }); + }); +}); diff --git a/docs-gen/src/resources/helpers/breadcrumbs.ts b/docs-gen/src/resources/helpers/breadcrumbs.ts new file mode 100644 index 0000000000000..d456a2d83cabd --- /dev/null +++ b/docs-gen/src/resources/helpers/breadcrumbs.ts @@ -0,0 +1,7 @@ +import { PageEvent } from 'typedoc/dist/lib/output/events'; + +import MarkdownTheme from '../../theme'; + +export function breadcrumbs(this: PageEvent) { + return MarkdownTheme.handlebars.helpers.breadcrumbs.call(this); +} diff --git a/docs-gen/src/resources/helpers/comment.ts b/docs-gen/src/resources/helpers/comment.ts new file mode 100644 index 0000000000000..a5ac2330a348f --- /dev/null +++ b/docs-gen/src/resources/helpers/comment.ts @@ -0,0 +1,5 @@ +import MarkdownTheme from '../../theme'; + +export function comment(this: string) { + return MarkdownTheme.handlebars.helpers.comment.call(this); +} diff --git a/docs-gen/src/resources/helpers/declaration-title.ts b/docs-gen/src/resources/helpers/declaration-title.ts new file mode 100644 index 0000000000000..7b2db0fcd160b --- /dev/null +++ b/docs-gen/src/resources/helpers/declaration-title.ts @@ -0,0 +1,28 @@ +import { DeclarationReflection, ReflectionKind } from 'typedoc'; +import { heading } from './heading'; +import { memberSymbol } from './member-symbol'; +import { type } from './type'; + +export function declarationTitle(this: DeclarationReflection, showSymbol: boolean) { + const isOptional = this.flags.map(flag => flag).includes('Optional'); + + const md = []; + + if (this.parent && this.parent.kind !== ReflectionKind.ObjectLiteral && this.kind === ReflectionKind.ObjectLiteral) { + md.push(heading(3)); + } + + if (showSymbol) { + md.push(memberSymbol.call(this)); + } + + md.push(`**${this.name}**${isOptional ? '? ' : ''}:`); + + if (this.type) { + md.push(`*${type.call(this.type)}*`); + } + if (this.defaultValue) { + md.push(`= ${this.defaultValue}`); + } + return md.join(' '); +} diff --git a/docs-gen/src/resources/helpers/heading.ts b/docs-gen/src/resources/helpers/heading.ts new file mode 100644 index 0000000000000..6916dc07ec722 --- /dev/null +++ b/docs-gen/src/resources/helpers/heading.ts @@ -0,0 +1,3 @@ +export function heading(level: number) { + return [...Array(level)].map(() => '#').join(''); +} diff --git a/docs-gen/src/resources/helpers/hierarchy-level.ts b/docs-gen/src/resources/helpers/hierarchy-level.ts new file mode 100644 index 0000000000000..4c0ca9a5e90c3 --- /dev/null +++ b/docs-gen/src/resources/helpers/hierarchy-level.ts @@ -0,0 +1,9 @@ +import { DeclarationReflection, ReferenceType } from 'typedoc/dist/lib/models'; + +import { spaces } from './spaces'; + +export function hierachyLevel(this: ReferenceType) { + const reflection = this.reflection as DeclarationReflection; + const symbol = reflection && reflection.extendedTypes ? `${spaces(2)}↳` : '*'; + return symbol; +} diff --git a/docs-gen/src/resources/helpers/if-breadcrumbs.ts b/docs-gen/src/resources/helpers/if-breadcrumbs.ts new file mode 100644 index 0000000000000..599a9371e642f --- /dev/null +++ b/docs-gen/src/resources/helpers/if-breadcrumbs.ts @@ -0,0 +1,10 @@ +import { PageEvent } from 'typedoc/dist/lib/output/events'; + +import MarkdownTheme from '../../theme'; + +export function ifBreadcrumbs(this: PageEvent, options) { + if (MarkdownTheme.isSingleFile) { + return options.inverse(this); + } + return MarkdownTheme.handlebars.helpers.ifBreadcrumbs.call(this, options); +} diff --git a/docs-gen/src/resources/helpers/if-has-type-declarations.ts b/docs-gen/src/resources/helpers/if-has-type-declarations.ts new file mode 100644 index 0000000000000..32e82f9a4fa91 --- /dev/null +++ b/docs-gen/src/resources/helpers/if-has-type-declarations.ts @@ -0,0 +1,21 @@ +import { ReflectionType, SignatureReflection } from 'typedoc/dist/lib/models'; + +export function ifHasTypeDeclarations(this: SignatureReflection, truthy: boolean, options: any) { + const parameterDeclarations = + this.parameters && + this.parameters.map(parameter => { + const type = parameter.type as ReflectionType; + return ( + parameter.type && + type.declaration && + ((type.declaration.children && type.declaration.children.length > 0) || + (type.declaration.signatures && type.declaration.signatures.length > 0)) + ); + }); + const hasTypeDeclarations = parameterDeclarations && parameterDeclarations.some(parameterDeclaration => parameterDeclaration); + + if (hasTypeDeclarations && truthy) { + return options.fn(this); + } + return !hasTypeDeclarations && !truthy ? options.fn(this) : options.inverse(this); +} diff --git a/docs-gen/src/resources/helpers/if-indexes.ts b/docs-gen/src/resources/helpers/if-indexes.ts new file mode 100644 index 0000000000000..40ca5be5d8200 --- /dev/null +++ b/docs-gen/src/resources/helpers/if-indexes.ts @@ -0,0 +1,5 @@ +import MarkdownTheme from '../../theme'; + +export function ifIndexes(options) { + return MarkdownTheme.handlebars.helpers.ifIndexes.call(this, options); +} diff --git a/docs-gen/src/resources/helpers/if-is-literal-type.ts b/docs-gen/src/resources/helpers/if-is-literal-type.ts new file mode 100644 index 0000000000000..28cbfeffb7113 --- /dev/null +++ b/docs-gen/src/resources/helpers/if-is-literal-type.ts @@ -0,0 +1,9 @@ +import { DeclarationReflection, ReflectionKind } from 'typedoc'; + +export function ifIsLiteralType(this: DeclarationReflection, truthy: boolean, options: any) { + const isLiteralType = this.kind === ReflectionKind.ObjectLiteral || this.kind === ReflectionKind.TypeLiteral; + if (isLiteralType && truthy) { + return options.fn(this); + } + return !isLiteralType && !truthy ? options.fn(this) : options.inverse(this); +} diff --git a/docs-gen/src/resources/helpers/if-named-anchors.ts b/docs-gen/src/resources/helpers/if-named-anchors.ts new file mode 100644 index 0000000000000..ca90cab321838 --- /dev/null +++ b/docs-gen/src/resources/helpers/if-named-anchors.ts @@ -0,0 +1,5 @@ +import MarkdownTheme from '../../theme'; + +export function ifNamedAnchors(options) { + return MarkdownTheme.handlebars.helpers.ifNamedAnchors.call(this, options); +} diff --git a/docs-gen/src/resources/helpers/if-parent-is-module.ts b/docs-gen/src/resources/helpers/if-parent-is-module.ts new file mode 100644 index 0000000000000..9bb810c1789dc --- /dev/null +++ b/docs-gen/src/resources/helpers/if-parent-is-module.ts @@ -0,0 +1,9 @@ +import { DeclarationReflection, ReflectionKind } from 'typedoc'; + +export function ifParentIsModule(this: DeclarationReflection, truthy: boolean, options: any) { + const parentIsModule = this.parent && this.parent.kind === ReflectionKind.Module; + if (parentIsModule && truthy) { + return options.fn(this); + } + return !parentIsModule && !truthy ? options.fn(this) : options.inverse(this); +} diff --git a/docs-gen/src/resources/helpers/if-parent-is-object-literal.ts b/docs-gen/src/resources/helpers/if-parent-is-object-literal.ts new file mode 100644 index 0000000000000..35ef7b7e550d1 --- /dev/null +++ b/docs-gen/src/resources/helpers/if-parent-is-object-literal.ts @@ -0,0 +1,9 @@ +import { DeclarationReflection, ReflectionKind } from 'typedoc'; + +export function ifParentIsObjectLiteral(this: DeclarationReflection, truthy: boolean, options: any) { + const parentIsObjectLiteral = this.parent && this.parent.parent && this.parent.parent.kind === ReflectionKind.ObjectLiteral; + if (parentIsObjectLiteral && truthy) { + return options.fn(this); + } + return !parentIsObjectLiteral && !truthy ? options.fn(this) : options.inverse(this); +} diff --git a/docs-gen/src/resources/helpers/if-sources.ts b/docs-gen/src/resources/helpers/if-sources.ts new file mode 100644 index 0000000000000..19a5ba9f11ce4 --- /dev/null +++ b/docs-gen/src/resources/helpers/if-sources.ts @@ -0,0 +1,5 @@ +import MarkdownTheme from '../../theme'; + +export function ifSources(options) { + return MarkdownTheme.handlebars.helpers.ifSources.call(this, options); +} diff --git a/docs-gen/src/resources/helpers/literal.ts b/docs-gen/src/resources/helpers/literal.ts new file mode 100644 index 0000000000000..56e7863537868 --- /dev/null +++ b/docs-gen/src/resources/helpers/literal.ts @@ -0,0 +1,53 @@ +import { DeclarationReflection } from 'typedoc'; +import { ReflectionKind, ReflectionType } from 'typedoc/dist/lib/models'; +import { declarationTitle } from './declaration-title'; +import { signatureTitle } from './signature-title'; +import { spaces } from './spaces'; + +export function literal(this: DeclarationReflection) { + const md = []; + + if (this.children) { + this.children.forEach(child => { + md.push(objectProperty(md, 0, child)); + }); + } + return md.join('') + '\n'; +} + +function objectProperty(md: any[], spaceLength: number, property: DeclarationReflection) { + if (property.type instanceof ReflectionType) { + md.push(`${spaces(spaceLength)}* ${signatureTitle.call(property, false)}\n\n`); + if (property.type.declaration) { + md.push(objectProperty(md, spaceLength + 2, property.type.declaration)); + } + if (property.type.declaration && property.type.declaration.signatures) { + property.type.declaration.signatures.forEach(signature => { + if (signature.kind !== ReflectionKind.CallSignature) { + md.push(`${spaces(spaceLength)}* ${signatureTitle.call(signature, false)}\n\n`); + if (signature.type instanceof ReflectionType) { + md.push(objectProperty(md, spaceLength + 2, signature.type.declaration)); + } + } + }); + } + } else { + if (property.signatures) { + property.signatures.forEach(signature => { + md.push(`${spaces(spaceLength)}* ${signatureTitle.call(signature, false)}\n\n`); + if (signature.type instanceof ReflectionType) { + md.push(objectProperty(md, spaceLength + 2, signature.type.declaration)); + } + }); + } else { + if (property.kind !== ReflectionKind.TypeLiteral) { + md.push(`${spaces(spaceLength)}* ${declarationTitle.call(property, false)}\n\n`); + } + } + } + if (property.children) { + property.children.forEach(child => { + md.push(objectProperty(md, property.kind === ReflectionKind.TypeLiteral ? spaceLength : spaceLength + 2, child)); + }); + } +} diff --git a/docs-gen/src/resources/helpers/member-symbol.ts b/docs-gen/src/resources/helpers/member-symbol.ts new file mode 100644 index 0000000000000..de929fab5864f --- /dev/null +++ b/docs-gen/src/resources/helpers/member-symbol.ts @@ -0,0 +1,22 @@ +import { DeclarationReflection, ReflectionKind } from 'typedoc'; + +export function memberSymbol(this: DeclarationReflection) { + const isStatic = this.flags.map(flag => flag).includes('Static'); + const symbol = '•'; + if (this.kind === ReflectionKind.ConstructorSignature) { + return '\\+'; + } + if (this.kind === ReflectionKind.CallSignature) { + return '▸'; + } + if (this.kind === ReflectionKind.TypeAlias) { + return 'Ƭ'; + } + if (this.kind === ReflectionKind.ObjectLiteral) { + return '▪'; + } + if (this.kind === ReflectionKind.Property && isStatic) { + return '▪'; + } + return symbol; +} diff --git a/docs-gen/src/resources/helpers/member-title.ts b/docs-gen/src/resources/helpers/member-title.ts new file mode 100644 index 0000000000000..c03e09e9a91e5 --- /dev/null +++ b/docs-gen/src/resources/helpers/member-title.ts @@ -0,0 +1,11 @@ +import { DeclarationReflection } from 'typedoc'; + +export function memberTitle(this: DeclarationReflection) { + const md = []; + + if (this.flags) { + md.push(this.flags.map(flag => `\`${flag}\``).join(' ')); + } + md.push(this.name); + return md.join(' '); +} diff --git a/docs-gen/src/resources/helpers/new-line.ts b/docs-gen/src/resources/helpers/new-line.ts new file mode 100644 index 0000000000000..ff762e35d080f --- /dev/null +++ b/docs-gen/src/resources/helpers/new-line.ts @@ -0,0 +1,3 @@ +export function newline() { + return '\n'; +} diff --git a/docs-gen/src/resources/helpers/parameter-name-and-type.ts b/docs-gen/src/resources/helpers/parameter-name-and-type.ts new file mode 100644 index 0000000000000..3394f6bcc95cb --- /dev/null +++ b/docs-gen/src/resources/helpers/parameter-name-and-type.ts @@ -0,0 +1,20 @@ +import { ParameterReflection } from 'typedoc'; +import { type } from './type'; + +export function parameterNameAndType(this: ParameterReflection, displaySymbol = true) { + const md = []; + if (displaySymbol) { + md.push('-'); + } + if (this.flags && !this.flags.isRest) { + md.push(this.flags.map(flag => `\`${flag}\` `)); + } + md.push(`${this.flags.isRest ? '...' : ''} **${this.name}**`); + if (this.type) { + md.push(`: *${type.call(this.type)}*`); + } + if (this.defaultValue) { + md.push(`= ${this.defaultValue}`); + } + return md.join(''); +} diff --git a/docs-gen/src/resources/helpers/parameter-table.ts b/docs-gen/src/resources/helpers/parameter-table.ts new file mode 100644 index 0000000000000..345f462db4600 --- /dev/null +++ b/docs-gen/src/resources/helpers/parameter-table.ts @@ -0,0 +1,55 @@ +import { ParameterReflection } from 'typedoc'; + +import MarkdownTheme from '../../theme'; +import { stripLineBreaks } from './strip-line-breaks'; +import { type } from './type'; + +export function parameterTable(this: ParameterReflection[]) { + const defaultValues = this.map((param) => !!param.defaultValue); + const hasDefaultValues = !defaultValues.every((value) => !value); + + const comments = this.map( + (param) => (param.comment && !!param.comment.text) || (param.comment && !!param.comment.shortText), + ); + const hasComments = !comments.every((value) => !value); + + const headers = ['Name', 'Type']; + + if (hasDefaultValues) { + headers.push('Default'); + } + + if (hasComments) { + headers.push('Description'); + } + + const rows = this.map((parameter) => { + const isOptional = parameter.flags.includes('Optional'); + const typeOut = type.call(parameter.type); + + const row = [ + `\`${parameter.flags.isRest ? '...' : ''}${parameter.name}${isOptional ? '?' : ''}\``, + typeOut ? typeOut.toString().replace(/\|/g, '|') : '', + ]; + if (hasDefaultValues) { + row.push(parameter.defaultValue ? parameter.defaultValue : '-'); + } + if (hasComments) { + const commentsText = []; + if (parameter.comment && parameter.comment.shortText) { + commentsText.push( + MarkdownTheme.handlebars.helpers.comment.call(stripLineBreaks.call(parameter.comment.shortText)), + ); + } + if (parameter.comment && parameter.comment.text) { + commentsText.push(MarkdownTheme.handlebars.helpers.comment.call(stripLineBreaks.call(parameter.comment.text))); + } + row.push(commentsText.length > 0 ? commentsText.join(' ') : '-'); + } + return `${row.join(' | ')} |\n`; + }); + + const output = `\n${headers.join(' | ')} |\n${headers.map(() => '------').join(' | ')} |\n${rows.join('')}`; + + return output; +} diff --git a/docs-gen/src/resources/helpers/reflection-title.ts b/docs-gen/src/resources/helpers/reflection-title.ts new file mode 100644 index 0000000000000..5893f23cef905 --- /dev/null +++ b/docs-gen/src/resources/helpers/reflection-title.ts @@ -0,0 +1,14 @@ +import { PageEvent } from 'typedoc/dist/lib/output/events'; + +export function reflectionTitle(this: PageEvent) { + const title = []; + if (this.model.kindString) { + title.push(`${this.model.kindString}:`); + } + title.push(this.model.name); + if (this.model.typeParameters) { + const typeParameters = this.model.typeParameters.map((typeParameter) => typeParameter.name).join(', '); + title.push(`‹**${typeParameters}**›`); + } + return title.join(' '); +} diff --git a/docs-gen/src/resources/helpers/relative-url.ts b/docs-gen/src/resources/helpers/relative-url.ts new file mode 100644 index 0000000000000..8d8d4b4a28623 --- /dev/null +++ b/docs-gen/src/resources/helpers/relative-url.ts @@ -0,0 +1,5 @@ +import MarkdownTheme from '../../theme'; + +export function relativeURL(url: string) { + return MarkdownTheme.handlebars.helpers.relativeURL(url); +} diff --git a/docs-gen/src/resources/helpers/signature-title.ts b/docs-gen/src/resources/helpers/signature-title.ts new file mode 100644 index 0000000000000..02ba5eea5a258 --- /dev/null +++ b/docs-gen/src/resources/helpers/signature-title.ts @@ -0,0 +1,44 @@ +import { SignatureReflection } from 'typedoc'; + +import { memberSymbol } from './member-symbol'; +import { type } from './type'; + +export function signatureTitle(this: SignatureReflection, showSymbol: boolean) { + const md = []; + + if (showSymbol) { + md.push(`${memberSymbol.call(this)} `); + } + + if (this.name === '__get') { + md.push(`**get ${this.parent.name}**`); + } else if (this.name === '__set') { + md.push(`**set ${this.parent.name}**`); + } else if (this.name !== '__call') { + md.push(`**${this.name}**`); + } + if (this.typeParameters) { + md.push(`‹${this.typeParameters.map((typeParameter) => `**${typeParameter.name}**`).join(', ')}›`); + } + const params = this.parameters + ? this.parameters + .map((param) => { + const paramsmd = []; + if (param.flags.isRest) { + paramsmd.push('...'); + } + paramsmd.push(`\`${param.name}`); + if (param.flags.isOptional) { + paramsmd.push('?'); + } + paramsmd.push(`\`: ${type.call(param.type)}`); + return paramsmd.join(''); + }) + .join(', ') + : ''; + md.push(`(${params})`); + if (this.type) { + md.push(`: *${type.call(this.type)}*`); + } + return md.join('') + '\n'; +} diff --git a/docs-gen/src/resources/helpers/spaces.ts b/docs-gen/src/resources/helpers/spaces.ts new file mode 100644 index 0000000000000..414df8f9a0530 --- /dev/null +++ b/docs-gen/src/resources/helpers/spaces.ts @@ -0,0 +1,3 @@ +export function spaces(length: number) { + return `!spaces${[...Array(length)].map(() => ' ').join('')}`; +} diff --git a/docs-gen/src/resources/helpers/strip-line-breaks.ts b/docs-gen/src/resources/helpers/strip-line-breaks.ts new file mode 100644 index 0000000000000..23f592c540314 --- /dev/null +++ b/docs-gen/src/resources/helpers/strip-line-breaks.ts @@ -0,0 +1,3 @@ +export function stripLineBreaks(this: string) { + return this.replace(/\n/g, ' '); +} diff --git a/docs-gen/src/resources/helpers/type-and-parent.ts b/docs-gen/src/resources/helpers/type-and-parent.ts new file mode 100644 index 0000000000000..c75dcfca77326 --- /dev/null +++ b/docs-gen/src/resources/helpers/type-and-parent.ts @@ -0,0 +1,38 @@ +import { SignatureReflection } from 'typedoc'; +import { ArrayType, ReferenceType } from 'typedoc/dist/lib/models/types'; + +import MarkdownTheme from '../../theme'; + +export function typeAndParent(this: ArrayType | ReferenceType) { + if (this instanceof ReferenceType && this.reflection) { + const md = []; + if (this.reflection instanceof SignatureReflection) { + if (this.reflection.parent.parent.url) { + md.push( + `[${this.reflection.parent.parent.name}](${MarkdownTheme.handlebars.helpers.relativeURL( + this.reflection.parent.parent.url, + )})`, + ); + } else { + md.push(this.reflection.parent.parent.name); + } + } else { + if (this.reflection.parent.url) { + md.push( + `[${this.reflection.parent.name}](${MarkdownTheme.handlebars.helpers.relativeURL( + this.reflection.parent.url, + )})`, + ); + } else { + md.push(this.reflection.parent.name); + } + if (this.reflection.url) { + md.push(`[${this.reflection.name}](${MarkdownTheme.handlebars.helpers.relativeURL(this.reflection.url)})`); + } else { + md.push(this.reflection.name); + } + } + return md.join('.'); + } + return 'void'; +} diff --git a/docs-gen/src/resources/helpers/type.ts b/docs-gen/src/resources/helpers/type.ts new file mode 100644 index 0000000000000..5744761cbedf7 --- /dev/null +++ b/docs-gen/src/resources/helpers/type.ts @@ -0,0 +1,99 @@ +import { + ArrayType, + IntersectionType, + IntrinsicType, + ReferenceType, + ReflectionType, + StringLiteralType, + TupleType, + TypeOperatorType, + UnionType, +} from 'typedoc/dist/lib/models/types'; +import { dasherize, underscore } from 'inflection'; + +import MarkdownTheme from '../../theme'; + +export function type( + this: + | ArrayType + | IntersectionType + | IntrinsicType + | ReferenceType + | StringLiteralType + | TupleType + | UnionType + | TypeOperatorType +) { + if (this instanceof ReferenceType && (this.reflection || (this.name && this.typeArguments))) { + return getReferenceType(this); + } + + if (this instanceof ArrayType && this.elementType) { + return getArrayType(this); + } + + if (this instanceof UnionType && this.types) { + return getUnionType(this); + } + + if (this instanceof IntersectionType && this.types) { + return getIntersectionType(this); + } + + if (this instanceof TupleType && this.elements) { + return getTupleType(this); + } + + if (this instanceof IntrinsicType && this.name) { + return getIntrinsicType(this); + } + + if (this instanceof StringLiteralType && this.value) { + return getStringLiteralType(this); + } + + if (this instanceof TypeOperatorType || this instanceof ReflectionType) { + return this; + } + + return this; +} + + +function anchorName(link) { + return '#' + dasherize(underscore(link.replace(/#/g, '-'))); +} + +function getReferenceType(model: ReferenceType) { + const reflection = model.reflection + ? [`[${model.reflection.name}](${MarkdownTheme.handlebars.helpers.relativeURL(anchorName(model.reflection.name))})`] + : [model.name]; + if (model.typeArguments) { + reflection.push(`‹${model.typeArguments.map((typeArgument) => `${type.call(typeArgument)}`).join(', ')}›`); + } + return reflection.join(''); +} + +function getArrayType(model: ArrayType) { + return `${type.call(model.elementType)}[]`; +} + +function getUnionType(model: UnionType) { + return model.types.map((unionType) => type.call(unionType)).join(' | '); +} + +function getIntersectionType(model: IntersectionType) { + return model.types.map((intersectionType) => type.call(intersectionType)).join(' & '); +} + +function getTupleType(model: TupleType) { + return `[${model.elements.map((element) => type.call(element)).join(', ')}]`; +} + +function getIntrinsicType(model: IntrinsicType) { + return model.name; +} + +function getStringLiteralType(model: StringLiteralType) { + return `"${model.value}"`; +} diff --git a/docs-gen/src/resources/layouts/default.hbs b/docs-gen/src/resources/layouts/default.hbs new file mode 100755 index 0000000000000..4fdf50b11e9a6 --- /dev/null +++ b/docs-gen/src/resources/layouts/default.hbs @@ -0,0 +1 @@ +{{{contents}}} \ No newline at end of file diff --git a/docs-gen/src/resources/partials/comment.hbs b/docs-gen/src/resources/partials/comment.hbs new file mode 100755 index 0000000000000..a4555b42b7ae1 --- /dev/null +++ b/docs-gen/src/resources/partials/comment.hbs @@ -0,0 +1,37 @@ +{{#with comment}} + +{{#if hasVisibleComponent}} + +{{#if shortText}} + +{{#with shortText}} + +{{{comment}}} + +{{/with}} + +{{/if}} + +{{#if text}} + +{{#with text}} + +{{{comment}}} + +{{/with}} + +{{/if}} + +{{#if tags}} + +{{#each tags}} + +**`{{tagName}}`** {{#if text}}{{#with text}}{{{comment}}}{{/with}}{{/if}} + +{{/each}} + +{{/if}} + +{{/if}} + +{{/with}} \ No newline at end of file diff --git a/docs-gen/src/resources/partials/header.hbs b/docs-gen/src/resources/partials/header.hbs new file mode 100644 index 0000000000000..9a2f133bf36bd --- /dev/null +++ b/docs-gen/src/resources/partials/header.hbs @@ -0,0 +1,5 @@ +{{#ifBreadcrumbs}} +{{{breadcrumbs}}} +{{/ifBreadcrumbs}} + +{{heading 1}} {{{reflectionTitle}}} \ No newline at end of file diff --git a/docs-gen/src/resources/partials/hierarchy.hbs b/docs-gen/src/resources/partials/hierarchy.hbs new file mode 100755 index 0000000000000..3e9084b6c49c1 --- /dev/null +++ b/docs-gen/src/resources/partials/hierarchy.hbs @@ -0,0 +1,23 @@ +{{#each types}} + +{{#if ../isTarget}} + +{{hierachyLevel}} **{{this}}** + +{{else}} + +{{hierachyLevel}} {{{type}}} + +{{/if}} + +{{#if @last}} + +{{#with ../next}} + +{{> hierarchy}} + +{{/with}} + +{{/if}} + +{{/each}} \ No newline at end of file diff --git a/docs-gen/src/resources/partials/index.hbs b/docs-gen/src/resources/partials/index.hbs new file mode 100755 index 0000000000000..73bb574836a09 --- /dev/null +++ b/docs-gen/src/resources/partials/index.hbs @@ -0,0 +1,31 @@ +{{#if groups}} + +{{heading 2}} Index + +{{#each groups}} + +{{#if categories}} + +{{#each categories}} + +{{heading 3}} {{title}} {{../title}} + +{{#each children}} +* [{{{name}}}]({{relativeURL url}}) +{{/each}} + +{{/each}} + +{{else}} + +{{heading 3}} {{title}} + +{{#each children}} +* [{{{name}}}]({{relativeURL url}}) +{{/each}} + +{{/if}} + +{{/each}} + +{{/if}} \ No newline at end of file diff --git a/docs-gen/src/resources/partials/main.hbs b/docs-gen/src/resources/partials/main.hbs new file mode 100644 index 0000000000000..c5ad3146db4bc --- /dev/null +++ b/docs-gen/src/resources/partials/main.hbs @@ -0,0 +1,11 @@ +{{#ifCond kindString '==' 'Module'}} +{{> index}} + +{{> members}} +{{else}} +{{#ifIndexes}} +{{> index}} + +{{/ifIndexes}} +{{> members}} +{{/ifCond}} \ No newline at end of file diff --git a/docs-gen/src/resources/partials/member.declaration.hbs b/docs-gen/src/resources/partials/member.declaration.hbs new file mode 100755 index 0000000000000..3043dc840e544 --- /dev/null +++ b/docs-gen/src/resources/partials/member.declaration.hbs @@ -0,0 +1,17 @@ +{{{declarationTitle true}}} + +{{> member.sources}} + +{{> comment}} + +{{#if type.declaration}} + +{{heading 4}} Type declaration: + +{{#with type.declaration}} + +{{> parameter}} + +{{/with}} + +{{/if}} \ No newline at end of file diff --git a/docs-gen/src/resources/partials/member.getterSetter.hbs b/docs-gen/src/resources/partials/member.getterSetter.hbs new file mode 100755 index 0000000000000..86f120171a281 --- /dev/null +++ b/docs-gen/src/resources/partials/member.getterSetter.hbs @@ -0,0 +1,19 @@ +{{#if getSignature}} + +{{#with getSignature}} + +{{> member.signature }} + +{{/with}} + +{{/if}} + +{{#if setSignature}} + +{{#with setSignature}} + +{{> member.signature }} + +{{/with}} + +{{/if}} \ No newline at end of file diff --git a/docs-gen/src/resources/partials/member.hbs b/docs-gen/src/resources/partials/member.hbs new file mode 100644 index 0000000000000..65842fdbf9c89 --- /dev/null +++ b/docs-gen/src/resources/partials/member.hbs @@ -0,0 +1,67 @@ +{{#if name}} + +{{#ifParentIsModule true}} + +{{heading 2}}{{{ memberTitle }}} + +{{else}} + +{{heading 3}}{{{ memberTitle }}} + +{{/ifParentIsModule}} + +{{/if}} + +{{#if signatures}} + +{{#each signatures}} + +{{> member.signature }} + +{{/each}} + +{{else}} + +{{#if hasGetterOrSetter}} + +{{> member.getterSetter}} + +{{else}} + +{{> member.declaration}} + +{{/if}} + +{{/if}} + +{{#each groups}} + +{{#each children}} + +{{#unless hasOwnDocument}} + +{{#ifIsLiteralType true}} + +{{> member.declaration}} + +{{{literal}}} + +{{/ifIsLiteralType}} + +{{#ifIsLiteralType false}} + +{{> member hideHr=true}} + +{{/ifIsLiteralType}} + +{{/unless}} + +{{/each}} + +{{/each}} + +{{#unless @last}} +{{#unless hideHr}} +___ +{{/unless}} +{{/unless}} \ No newline at end of file diff --git a/docs-gen/src/resources/partials/member.indexSignatures.hbs b/docs-gen/src/resources/partials/member.indexSignatures.hbs new file mode 100644 index 0000000000000..10489c8689ade --- /dev/null +++ b/docs-gen/src/resources/partials/member.indexSignatures.hbs @@ -0,0 +1,17 @@ +* \[{{#each indexSignature.parameters}}{{parameterNameAndType false}}{{/each}}\]: {{#with indexSignature.type}}{{{type}}}{{/with}} + +{{#with indexSignature}} + +{{> comment}} + +{{/with}} + +{{#if indexSignature.type.declaration}} + +{{#with indexSignature.type.declaration}} + +{{> parameter}} + +{{/with}} + +{{/if}} \ No newline at end of file diff --git a/docs-gen/src/resources/partials/member.signature.hbs b/docs-gen/src/resources/partials/member.signature.hbs new file mode 100644 index 0000000000000..4d5594a623157 --- /dev/null +++ b/docs-gen/src/resources/partials/member.signature.hbs @@ -0,0 +1,101 @@ +{{{signatureTitle true }}} + +{{#unless hideSources}} + +{{> member.sources}} + +{{/unless}} + +{{> comment}} + +{{#if typeParameters}} + +**Type parameters:** + +{{> typeParameters}} + +{{/if}} + +{{#if parameters}} + +**Parameters:** + +{{#ifHasTypeDeclarations true}} + +{{#each parameters}} + +{{{parameterNameAndType}}} + +{{> comment}} + +{{#if type.declaration}} + +{{#if type.declaration.children}} + +{{#with type.declaration.children}} + +{{{parameterTable}}} + +{{/with}} + +{{/if}} + +{{#if type.declaration.signatures}} + +{{#with type.declaration}} + +{{> parameter}} + +{{/with}} + +{{/if}} + +{{/if}} + +{{/each}} + +{{/ifHasTypeDeclarations}} + +{{#ifHasTypeDeclarations false}} + +{{#each parameters}} + +{{{parameterNameAndType}}} + +{{> comment}} + +{{/each}} + +{{/ifHasTypeDeclarations}} + +{{/if}} + +{{#if type}} + +{{#unless hideSources}} + +**Returns:** {{#with type}}*{{{type}}}*{{/with}} + +{{#if comment.returns}} + +{{#with comment.returns}} + +{{{comment}}} + +{{/with}} + +{{/if}} + +{{/unless}} + +{{#if type.declaration}} + +{{#with type.declaration}} + +{{> parameter}} + +{{/with}} + +{{/if}} + +{{/if}} \ No newline at end of file diff --git a/docs-gen/src/resources/partials/member.sources.hbs b/docs-gen/src/resources/partials/member.sources.hbs new file mode 100755 index 0000000000000..d095579f66554 --- /dev/null +++ b/docs-gen/src/resources/partials/member.sources.hbs @@ -0,0 +1,39 @@ +{{#if implementationOf}} + +*Implementation of {{#with implementationOf}}{{typeAndParent}}{{/with}}* + +{{/if}} + +{{#if inheritedFrom}} + +*Inherited from {{#with inheritedFrom}}{{{typeAndParent}}}{{/with}}* + +{{/if}} + +{{#if overwrites}} + +*Overrides {{#with overwrites}}{{typeAndParent}}{{/with}}* + +{{/if}} + +{{#ifSources}} + +{{#if sources}} + +{{#each sources}} + +{{#if url}} + +*Defined in [{{fileName}}:{{line}}]({{url}})* + +{{else}} + +Defined in {{fileName}}:{{line}} + +{{/if}} + +{{/each}} + +{{/if}} + +{{/ifSources}} \ No newline at end of file diff --git a/docs-gen/src/resources/partials/members.group.hbs b/docs-gen/src/resources/partials/members.group.hbs new file mode 100755 index 0000000000000..869616b435b72 --- /dev/null +++ b/docs-gen/src/resources/partials/members.group.hbs @@ -0,0 +1,37 @@ +{{#if categories}} + +{{#each categories}} + +{{#unless @first}} +___ +{{/unless}} + +{{heading 2}} {{title}} {{../title}} + +{{#each children}} + +{{#unless hasOwnDocument}} + +{{> member}} + +{{/unless}} + +{{/each}} + +{{/each}} + +{{else}} + +{{heading 2}} {{title}} + +{{#each children}} + +{{#unless hasOwnDocument}} + +{{> member}} + +{{/unless}} + +{{/each}} + +{{/if}} \ No newline at end of file diff --git a/docs-gen/src/resources/partials/members.hbs b/docs-gen/src/resources/partials/members.hbs new file mode 100755 index 0000000000000..0123b04be668d --- /dev/null +++ b/docs-gen/src/resources/partials/members.hbs @@ -0,0 +1,9 @@ +{{#each groups}} + +{{#unless allChildrenHaveOwnDocument}} + +{{> members.group}} + +{{/unless}} + +{{/each}} \ No newline at end of file diff --git a/docs-gen/src/resources/partials/parameter.hbs b/docs-gen/src/resources/partials/parameter.hbs new file mode 100644 index 0000000000000..30e5608374ad5 --- /dev/null +++ b/docs-gen/src/resources/partials/parameter.hbs @@ -0,0 +1,75 @@ +{{#if signatures}} + +{{#each signatures}} + +{{> member.signature hideSources=true }} + +{{/each}} + +{{/if}} + +{{#if indexSignature}} + +{{> member.indexSignatures}} + +{{/if}} + +{{#ifIsLiteralType true}} + +{{{literal}}} + +{{/ifIsLiteralType}} + +{{#ifIsLiteralType false}} + +{{#each children}} + +{{#if signatures}} + +{{#if flags.isRest}}...{{/if}} {{{ name}}} {{#if isOptional}}?{{/if}}: function + +{{#each signatures}} + +{{> member.signature}} + +{{/each}} + +{{else}} + +{{{parameterNameAndType}}} + +{{> comment}} + +{{#if children}} + +{{> parameter}} + +{{/if}} + +{{#if type.declaration}} + +{{#with type.declaration}} + +## type.declaration + +{{#ifIsLiteralType true}} + +{{{literal}}} + +{{/ifIsLiteralType}} + +{{#ifIsLiteralType false}} + +{{> parameter}} + +{{/ifIsLiteralType}} + +{{/with}} + +{{/if}} + +{{/if}} + +{{/each}} + +{{/ifIsLiteralType}} \ No newline at end of file diff --git a/docs-gen/src/resources/partials/typeParameters.hbs b/docs-gen/src/resources/partials/typeParameters.hbs new file mode 100755 index 0000000000000..78dccf34b607a --- /dev/null +++ b/docs-gen/src/resources/partials/typeParameters.hbs @@ -0,0 +1,7 @@ +{{#each typeParameters}} + +{{{parameterNameAndType}}} + +{{> comment}} + +{{/each}} \ No newline at end of file diff --git a/docs-gen/src/resources/templates/index.hbs b/docs-gen/src/resources/templates/index.hbs new file mode 100644 index 0000000000000..b4e7f01c51be5 --- /dev/null +++ b/docs-gen/src/resources/templates/index.hbs @@ -0,0 +1,9 @@ +{{#if model.readme}} + +{{#with model.readme}} + +{{{comment}}} + +{{/with}} + +{{/if}} \ No newline at end of file diff --git a/docs-gen/src/resources/templates/reflection.hbs b/docs-gen/src/resources/templates/reflection.hbs new file mode 100755 index 0000000000000..c56e9b56b455f --- /dev/null +++ b/docs-gen/src/resources/templates/reflection.hbs @@ -0,0 +1,101 @@ +{{!-- {{#if model.displayReadme}} + +{{#if model.readme}} + +{{#with model.readme}} + +{{{comment}}} + +{{/with}} + +{{/if}} + +{{/if}} + +{{#with model}} + +{{#if hasComment}} + +{{> comment}} + +{{/if}} + +{{/with}} + +{{#if model.typeParameters}} + +{{heading 2}} Type parameters + +{{#with model}} +{{> typeParameters}} +{{/with}} + +{{/if}} + +{{#if model.typeHierarchy}} + +{{heading 2}} Hierarchy + +{{#with model.typeHierarchy}} + +{{> hierarchy}} + +{{/with}} + +{{/if}} + +{{#if model.implementedTypes}} + +{{heading 2}} Implements + +{{#each model.implementedTypes}} +* {{{type}}} +{{/each}} + +{{/if}} + +{{#if model.implementedBy}} + +{{heading 2}} Implemented by + +{{#each model.implementedBy}} +* {{{type}}} +{{/each}} + +{{/if}} + +00000end + +{{#if model.signatures}} + +{{{heading 2}}} Callable + +{{#with model}} + +{{#each signatures}} + +{{> member.signature }} + +{{/each}} + +{{/with}} + +{{/if}} + +{{#if model.indexSignature}} + +{{heading 2}} Indexable + +{{#with model}} + +{{> member.indexSignatures}} + +{{/with}} + +{{/if}} --}} + +{{#with model}} + +{{> main}} + +{{/with}} \ No newline at end of file diff --git a/docs-gen/src/subthemes/bitbucket/theme.ts b/docs-gen/src/subthemes/bitbucket/theme.ts new file mode 100644 index 0000000000000..7ea51c49e17ab --- /dev/null +++ b/docs-gen/src/subthemes/bitbucket/theme.ts @@ -0,0 +1,22 @@ +import { Reflection } from 'typedoc/dist/lib/models'; +import { Renderer } from 'typedoc/dist/lib/output/renderer'; + +import MarkdownTheme from '../../theme'; + +export default class BitbucketTheme extends MarkdownTheme { + constructor(renderer: Renderer, basePath: string) { + super(renderer, basePath); + } + + toAnchorRef(reflection: Reflection) { + function parseAnchorRef(ref: string) { + return ref.replace(/"/g, '').replace(/ /g, '-'); + } + let anchorPrefix = ''; + reflection.flags.forEach(flag => (anchorPrefix += `${flag}-`)); + const prefixRef = parseAnchorRef(anchorPrefix); + const reflectionRef = parseAnchorRef(reflection.name); + const anchorRef = prefixRef + reflectionRef; + return 'markdown-header-' + anchorRef.toLowerCase(); + } +} diff --git a/docs-gen/src/subthemes/docusaurus/partials/header.hbs b/docs-gen/src/subthemes/docusaurus/partials/header.hbs new file mode 100644 index 0000000000000..54846b2f6472a --- /dev/null +++ b/docs-gen/src/subthemes/docusaurus/partials/header.hbs @@ -0,0 +1,3 @@ +{{#ifBreadcrumbs}} +{{{breadcrumbs}}} +{{/ifBreadcrumbs}} \ No newline at end of file diff --git a/docs-gen/src/subthemes/docusaurus/theme.ts b/docs-gen/src/subthemes/docusaurus/theme.ts new file mode 100644 index 0000000000000..abb43712626ee --- /dev/null +++ b/docs-gen/src/subthemes/docusaurus/theme.ts @@ -0,0 +1,96 @@ +import * as fs from 'fs-extra'; +import * as path from 'path'; +import { RendererEvent } from 'typedoc/dist/lib/output/events'; +import { Renderer } from 'typedoc/dist/lib/output/renderer'; + +import { FrontMatterComponent } from '../../components/front-matter.component'; +import MarkdownTheme from '../../theme'; + +export default class DocusaurusTheme extends MarkdownTheme { + constructor(renderer: Renderer, basePath: string) { + super(renderer, basePath); + this.indexName = 'index'; + renderer.addComponent('frontmatter', new FrontMatterComponent(renderer)); + this.listenTo(renderer, RendererEvent.END, this.onRendererEnd, 1024); + } + + onRendererEnd(renderer: RendererEvent) { + if (!this.application.options.getValue('skipSidebar')) { + const docusarusRoot = this.findDocusaurusRoot(renderer.outputDirectory); + if (docusarusRoot === null) { + this.application.logger.warn( + `[typedoc-markdown-plugin] sidebars.json not written as could not locate docusaurus root directory. In order to to implemnent sidebars.json functionality, the output directory must be a child of a 'docs' directory.`, + ); + return; + } + this.writeSideBar(renderer, docusarusRoot); + } + } + + writeSideBar(renderer: RendererEvent, docusarusRoot: string) { + const childDirectory = renderer.outputDirectory.split(docusarusRoot + 'docs/')[1]; + const docsRoot = childDirectory ? childDirectory + '/' : ''; + const websitePath = docusarusRoot + 'website'; + const packageName = renderer.project.packageInfo.name; + const navObject = this.getNavObject(renderer, docsRoot); + const sidebarPath = websitePath + '/sidebars.json'; + let contents: any; + if (!fs.existsSync(sidebarPath)) { + contents = '{}'; + if (!fs.existsSync(websitePath)) { + fs.mkdirSync(websitePath); + } + } else { + contents = fs.readFileSync(sidebarPath); + } + const jsonContent = JSON.parse(contents.toString()); + const update = { + ...jsonContent, + [packageName]: navObject, + }; + try { + fs.writeFileSync(sidebarPath, JSON.stringify(update, null, 2)); + this.application.logger.write(`[typedoc-plugin-markdown] sidebars.json updated at ${sidebarPath}`); + } catch (e) { + this.application.logger.write(`[typedoc-plugin-markdown] failed to update sidebars.json at ${sidebarPath}`); + } + } + + getNavObject(renderer: RendererEvent, docsRoot: string) { + const projectUrls = [docsRoot + this.indexName.replace('.md', '')]; + if (renderer.project.url === 'globals.md') { + projectUrls.push(docsRoot + 'globals'); + } + const navObject = { + ['Introduction']: projectUrls, + }; + + this.getNavigation(renderer.project).children.forEach(rootNavigation => { + navObject[rootNavigation.title] = rootNavigation.children.map(item => { + return docsRoot + item.url.replace('.md', ''); + }); + }); + + return navObject; + } + + findDocusaurusRoot(outputDirectory: string) { + const docsName = 'docs'; + function splitPath(dir: string) { + const parts = dir.split(/(\/|\\)/); + if (!parts.length) { + return parts; + } + return !parts[0].length ? parts.slice(1) : parts; + } + function testDir(parts) { + if (parts.length === 0) { + return null; + } + const p = parts.join(''); + const itdoes = fs.existsSync(path.join(p, docsName)); + return itdoes ? p : testDir(parts.slice(0, -1)); + } + return testDir(splitPath(outputDirectory)); + } +} diff --git a/docs-gen/src/subthemes/docusaurus2/partials/header.hbs b/docs-gen/src/subthemes/docusaurus2/partials/header.hbs new file mode 100644 index 0000000000000..54846b2f6472a --- /dev/null +++ b/docs-gen/src/subthemes/docusaurus2/partials/header.hbs @@ -0,0 +1,3 @@ +{{#ifBreadcrumbs}} +{{{breadcrumbs}}} +{{/ifBreadcrumbs}} \ No newline at end of file diff --git a/docs-gen/src/subthemes/docusaurus2/theme.ts b/docs-gen/src/subthemes/docusaurus2/theme.ts new file mode 100644 index 0000000000000..c2fb6be7d7ada --- /dev/null +++ b/docs-gen/src/subthemes/docusaurus2/theme.ts @@ -0,0 +1,99 @@ +import * as fs from 'fs-extra'; +import * as path from 'path'; +import { RendererEvent } from 'typedoc/dist/lib/output/events'; +import { Renderer } from 'typedoc/dist/lib/output/renderer'; + +import { FrontMatterComponent } from '../../components/front-matter.component'; +import MarkdownTheme from '../../theme'; + +export default class Docusaurus2Theme extends MarkdownTheme { + sidebarName: string; + constructor(renderer: Renderer, basePath: string) { + super(renderer, basePath); + this.indexName = 'index'; + this.sidebarName = 'sidebars.js'; + renderer.addComponent('frontmatter', new FrontMatterComponent(renderer)); + this.listenTo(renderer, RendererEvent.END, this.onRendererEnd, 1024); + } + + onRendererEnd(renderer: RendererEvent) { + if (!this.application.options.getValue('skipSidebar')) { + const docusarusRoot = this.findDocusaurus2Root(renderer.outputDirectory); + if (docusarusRoot === null) { + this.application.logger.warn( + `[typedoc-markdown-plugin] ${this.sidebarName} not written as could not locate docusaurus root directory. In order to to implemnent ${this.sidebarName} functionality, the output directory must be a child of a 'docs' directory.`, + ); + return; + } + this.writeSideBar(renderer, docusarusRoot); + } + } + + writeSideBar(renderer: RendererEvent, docusarusRoot: string) { + const childDirectory = renderer.outputDirectory.split(docusarusRoot + 'docs/')[1]; + const docsRoot = childDirectory ? childDirectory + '/' : ''; + const websitePath = docusarusRoot; + const navObject = this.getNavObject(renderer, docsRoot); + const sidebarPath = websitePath + this.sidebarName; + let jsonContent: any; + if (!fs.existsSync(sidebarPath)) { + if (!fs.existsSync(websitePath)) { + fs.mkdirSync(websitePath); + } + jsonContent = JSON.parse('{}'); + } else { + jsonContent = require(sidebarPath); + } + let firstKey = Object.keys(jsonContent)[0]; + if (!firstKey) { + firstKey = 'docs'; + } + jsonContent[firstKey] = Object.assign({}, jsonContent[firstKey], navObject); + try { + fs.writeFileSync(sidebarPath, 'module.exports = ' + JSON.stringify(jsonContent, null, 2) + ';'); + this.application.logger.write(`[typedoc-plugin-markdown] ${this.sidebarName} updated at ${sidebarPath}`); + } catch (e) { + this.application.logger.write(`[typedoc-plugin-markdown] failed to update ${this.sidebarName} at ${sidebarPath}`); + } + } + + getNavObject(renderer: RendererEvent, docsRoot: string) { + const navObject = {}; + let url = ''; + let navKey = ''; + this.getNavigation(renderer.project).children.forEach(rootNavigation => { + rootNavigation.children.map(item => { + url = item.url.replace('.md', ''); + navKey = url.substr(0, url.indexOf('/')); + if (navKey !== undefined && navKey.length) { + navKey = navKey[0].toUpperCase() + navKey.slice(1); + } + if (navObject[navKey] === undefined) { + navObject[navKey] = []; + } + navObject[navKey].push(docsRoot + url); + }); + }); + return navObject; + } + + findDocusaurus2Root(outputDirectory: string) { + const docsName = 'docs'; + function splitPath(dir: string) { + const parts = dir.split(/(\/|\\)/); + if (!parts.length) { + return parts; + } + return !parts[0].length ? parts.slice(1) : parts; + } + function testDir(parts) { + if (parts.length === 0) { + return null; + } + const p = parts.join(''); + const itdoes = fs.existsSync(path.join(p, docsName)); + return itdoes ? p : testDir(parts.slice(0, -1)); + } + return testDir(splitPath(outputDirectory)); + } +} diff --git a/docs-gen/src/subthemes/gitbook/partials/header.hbs b/docs-gen/src/subthemes/gitbook/partials/header.hbs new file mode 100644 index 0000000000000..ee818e8652f0b --- /dev/null +++ b/docs-gen/src/subthemes/gitbook/partials/header.hbs @@ -0,0 +1 @@ +{{heading 1}} {{{reflectionTitle}}} \ No newline at end of file diff --git a/docs-gen/src/subthemes/gitbook/theme.ts b/docs-gen/src/subthemes/gitbook/theme.ts new file mode 100644 index 0000000000000..f64ad6a351e62 --- /dev/null +++ b/docs-gen/src/subthemes/gitbook/theme.ts @@ -0,0 +1,41 @@ +import * as fs from 'fs-extra'; +import { RendererEvent } from 'typedoc/dist/lib/output/events'; +import { Renderer } from 'typedoc/dist/lib/output/renderer'; + +import MarkdownTheme from '../../theme'; + +export default class GitbookTheme extends MarkdownTheme { + constructor(renderer: Renderer, basePath: string) { + super(renderer, basePath); + this.listenTo(renderer, RendererEvent.END, this.writeSummary, 1024); + } + + writeSummary(renderer: RendererEvent) { + const outputDirectory = renderer.outputDirectory; + const summaryMarkdown = this.getSummaryMarkdown(renderer); + try { + fs.writeFileSync(`${outputDirectory}/SUMMARY.md`, summaryMarkdown); + this.application.logger.write(`[typedoc-plugin-markdown] SUMMARY.md written to ${outputDirectory}`); + } catch (e) { + this.application.logger.write(`[typedoc-plugin-markdown] failed to write SUMMARY at ${outputDirectory}`); + } + } + + getSummaryMarkdown(renderer: RendererEvent) { + const md = []; + md.push(`* [Globals](globals.md)`); + this.getNavigation(renderer.project).children.forEach(rootNavigation => { + if (rootNavigation.children) { + md.push(`* [${rootNavigation.title}](${rootNavigation.url})`); + rootNavigation.children.forEach(item => { + md.push(` * [${item.title}](${item.url})`); + }); + } + }); + return md.join('\n'); + } + + allowedDirectoryListings() { + return ['README.md', 'globals.md', 'classes', 'enums', 'interfaces', 'modules', 'media', '.DS_Store', 'SUMMARY.md']; + } +} diff --git a/docs-gen/src/subthemes/vuepress/partials/header.hbs b/docs-gen/src/subthemes/vuepress/partials/header.hbs new file mode 100644 index 0000000000000..ee818e8652f0b --- /dev/null +++ b/docs-gen/src/subthemes/vuepress/partials/header.hbs @@ -0,0 +1 @@ +{{heading 1}} {{{reflectionTitle}}} \ No newline at end of file diff --git a/docs-gen/src/subthemes/vuepress/partials/main.hbs b/docs-gen/src/subthemes/vuepress/partials/main.hbs new file mode 100644 index 0000000000000..b13ea23b23e09 --- /dev/null +++ b/docs-gen/src/subthemes/vuepress/partials/main.hbs @@ -0,0 +1 @@ +{{> members}} \ No newline at end of file diff --git a/docs-gen/src/subthemes/vuepress/theme.ts b/docs-gen/src/subthemes/vuepress/theme.ts new file mode 100644 index 0000000000000..4d96cd1aadffb --- /dev/null +++ b/docs-gen/src/subthemes/vuepress/theme.ts @@ -0,0 +1,118 @@ +import * as fs from 'fs-extra'; +import * as path from 'path'; +import { RendererEvent } from 'typedoc/dist/lib/output/events'; +import { Renderer } from 'typedoc/dist/lib/output/renderer'; + +import MarkdownTheme from '../../theme'; + +/** + * Creates `api-sidebar.json` in `.vuepress` directory. + * May be used in `.vuepress/config.json` as follows: + * @example + * const apiSideBar = require("./api-sidebar.json"); + * const apiSideBarRelative = require('./api-sidebar-relative.json'); + * + * // Without groups + * module.exports = { + * themeConfig: { + * sidebar: ["some-content", ...apiSideBar] + * } + * }; + * + * // With groups + * module.exports = { + * themeConfig: { + * sidebar: ["some-content", { title: "API", children: apiSideBar }] + * } + * }; + * + * // Multiple Sidebar + * module.exports = { + * themeConfig: { + * sidebar: { + * '/guide/': ['some-content'], + * '/api/': apiSideBarRelative, + * '/': ['other'], + * }, + * }, + * }; + */ +export default class VuePressTheme extends MarkdownTheme { + constructor(renderer: Renderer, basePath: string) { + super(renderer, basePath); + this.listenTo(renderer, RendererEvent.END, this.onRendererEnd, 1024); + } + + onRendererEnd(renderer: RendererEvent) { + const root = this.findRoot(renderer.outputDirectory); + if (root === null) { + this.application.logger.warn( + `[typedoc-markdown-plugin] sidebars.json not written as could not locate VuePress root directory. In order to to implemnent sidebars.json functionality, the output directory must be a child of a 'docs' directory.`, + ); + return; + } + this.writeSideBar(renderer, root); + } + + writeSideBar(renderer: RendererEvent, root: string) { + const childDirectory = renderer.outputDirectory.split(root + 'docs/')[1]; + const docsRoot = childDirectory ? childDirectory + '/' : ''; + const vuePressRoot = root + 'docs/.vuepress'; + const navObject = this.getNavObject(renderer, docsRoot); + const sidebarPath = vuePressRoot + '/api-sidebar.json'; + const relativeNavObject = this.getNavObject(renderer); + const relativeSidebarPath = vuePressRoot + '/api-sidebar-relative.json'; + + if (!fs.existsSync(vuePressRoot)) { + fs.mkdirSync(vuePressRoot); + } + + try { + fs.writeFileSync(sidebarPath, JSON.stringify(navObject, null, 2)); + fs.writeFileSync(relativeSidebarPath, JSON.stringify(relativeNavObject, null, 2)); + this.application.logger.write(`[typedoc-plugin-markdown] sidebars.json updated at ${sidebarPath}`); + } catch (e) { + this.application.logger.write(`[typedoc-plugin-markdown] failed to update sidebars.json at ${sidebarPath}`); + } + } + + getNavObject(renderer: RendererEvent, docsRoot: string = '') { + const projectUrls = [docsRoot + this.indexName.replace('.md', '')]; + if (renderer.project.url === 'globals.md') { + projectUrls.push(docsRoot + 'globals'); + } + + // const packageName = MarkdownPlugin.project.packageInfo.name; + const navObject = []; // [{ title: packageName, children: projectUrls }] + + this.getNavigation(renderer.project).children.forEach(rootNavigation => { + navObject.push({ + title: rootNavigation.title, + children: rootNavigation.children.map(item => { + return docsRoot + item.url.replace('.md', ''); + }), + }); + }); + return navObject; + } + + findRoot(outputDirectory: string) { + const docsName = 'docs'; + function splitPath(dir: string) { + const parts = dir.split(/(\/|\\)/); + if (!parts.length) { + return parts; + } + return !parts[0].length ? parts.slice(1) : parts; + } + function testDir(parts) { + if (parts.length === 0) { + return null; + } + const p = parts.join(''); + const itdoes = fs.existsSync(path.join(p, docsName)); + return itdoes ? p : testDir(parts.slice(0, -1)); + } + return testDir(splitPath(outputDirectory)); + } +} diff --git a/docs-gen/src/theme.spec.ts b/docs-gen/src/theme.spec.ts new file mode 100644 index 0000000000000..a557555f6a285 --- /dev/null +++ b/docs-gen/src/theme.spec.ts @@ -0,0 +1,160 @@ +import * as fs from 'fs-extra'; +import * as path from 'path'; +import { Application, UrlMapping } from 'typedoc'; + +describe(`MarkdownTheme`, () => { + function getExpectedUrls(urlMappings: UrlMapping[]) { + const expectedUrls = []; + urlMappings.forEach(urlMapping => { + expectedUrls.push(urlMapping.url); + urlMapping.model.children.forEach(reflection => { + expectedUrls.push(reflection.url); + }); + }); + return expectedUrls; + } + + let app; + let project; + let theme; + const out = path.join(__dirname, 'tmp'); + beforeAll(() => { + app = new Application(); + app.bootstrap({ + module: 'CommonJS', + target: 'ES5', + readme: 'none', + theme: 'markdown', + logger: 'none', + plugin: path.join(__dirname, '../dist/index'), + }); + project = app.convert(app.expandInputFiles(['./test/stubs/'])); + app.generateDocs(project, out); + theme = app.renderer.theme; + }); + + afterAll(() => { + fs.removeSync(out); + }); + + describe(`getUrls`, () => { + test(`should getUrls'`, () => { + const urlMappings = theme.getUrls(project); + expect(getExpectedUrls(urlMappings)).toMatchSnapshot(); + }); + + test(`should getUrls when readme is defined`, () => { + const spy = jest.spyOn(app.options, 'getValue').mockReturnValue('./README.md'); + const urlMappings = theme.getUrls(project); + expect(getExpectedUrls(urlMappings)).toMatchSnapshot(); + spy.mockRestore(); + }); + + test(`should get navigation`, () => { + expect(theme.getNavigation(project)).toMatchSnapshot(); + }); + }); + + describe(`output directory`, () => { + let directoryListingSpy; + + beforeAll(() => { + directoryListingSpy = jest.spyOn(fs, 'readdirSync'); + }); + + test(`should test output directory true with all allowed files and directories`, () => { + directoryListingSpy.mockReturnValue([ + '.DS_Store', + 'README.md', + 'globals.md', + 'classes', + 'enums', + 'interfaces', + 'media', + 'modules', + ]); + expect(theme.isOutputDirectory('/path')).toBeTruthy(); + }); + + test(`should test output directory true with some files directories`, () => { + directoryListingSpy.mockReturnValue(['README.md', 'classes', 'media', 'modules']); + expect(theme.isOutputDirectory('/path')).toBeTruthy(); + }); + + test(`should test output directory true with just index`, () => { + directoryListingSpy.mockReturnValue(['README.md']); + expect(theme.isOutputDirectory('/path')).toBeTruthy(); + }); + + test(`should test output directory false with unkown index`, () => { + directoryListingSpy.mockReturnValue(['Unrecognised.md', 'classes', 'enums', 'interfaces', 'media', 'modules']); + expect(theme.isOutputDirectory('/path')).toBeFalsy(); + }); + + test(`should test output directory false with hidden files`, () => { + directoryListingSpy.mockReturnValue(['.git', 'classes', 'enums', 'interfaces', 'media', 'modules']); + expect(theme.isOutputDirectory('/path')).toBeFalsy(); + }); + + test(`should test output directory false without an index`, () => { + directoryListingSpy.mockReturnValue(['globals.md', 'classes', 'enums', 'interfaces', 'media', 'modules']); + expect(theme.isOutputDirectory('/path')).toBeFalsy(); + }); + + test(`should test output directory false with unknown folder`, () => { + directoryListingSpy.mockReturnValue(['README.md', 'folder']); + expect(theme.isOutputDirectory('/path')).toBeFalsy(); + }); + }); + + describe(`output directory`, () => { + let directoryListingSpy; + beforeAll(() => { + directoryListingSpy = jest.spyOn(fs, 'readdirSync'); + }); + + test(`should test output directory true with all allowed files and directories`, () => { + directoryListingSpy.mockReturnValue([ + '.DS_Store', + 'README.md', + 'globals.md', + 'classes', + 'enums', + 'interfaces', + 'media', + 'modules', + ]); + expect(theme.isOutputDirectory('/path')).toBeTruthy(); + }); + + test(`should test output directory true with some files directories`, () => { + directoryListingSpy.mockReturnValue(['README.md', 'classes', 'media', 'modules']); + expect(theme.isOutputDirectory('/path')).toBeTruthy(); + }); + + test(`should test output directory true with just index`, () => { + directoryListingSpy.mockReturnValue(['README.md']); + expect(theme.isOutputDirectory('/path')).toBeTruthy(); + }); + + test(`should test output directory false with unkown index`, () => { + directoryListingSpy.mockReturnValue(['Unrecognised.md', 'classes', 'enums', 'interfaces', 'media', 'modules']); + expect(theme.isOutputDirectory('/path')).toBeFalsy(); + }); + + test(`should test output directory false with hidden files`, () => { + directoryListingSpy.mockReturnValue(['.git', 'classes', 'enums', 'interfaces', 'media', 'modules']); + expect(theme.isOutputDirectory('/path')).toBeFalsy(); + }); + + test(`should test output directory false without an index`, () => { + directoryListingSpy.mockReturnValue(['globals.md', 'classes', 'enums', 'interfaces', 'media', 'modules']); + expect(theme.isOutputDirectory('/path')).toBeFalsy(); + }); + + test(`should test output directory false with unknown folder`, () => { + directoryListingSpy.mockReturnValue(['README.md', 'folder']); + expect(theme.isOutputDirectory('/path')).toBeFalsy(); + }); + }); +}); diff --git a/docs-gen/src/theme.ts b/docs-gen/src/theme.ts new file mode 100644 index 0000000000000..44df5b601ca03 --- /dev/null +++ b/docs-gen/src/theme.ts @@ -0,0 +1,372 @@ +import * as Handlebars from 'handlebars'; +import { + ContainerReflection, + DeclarationReflection, + NavigationItem, + ProjectReflection, + Reflection, + ReflectionKind, + Renderer, + UrlMapping, +} from 'typedoc'; +import { PageEvent } from 'typedoc/dist/lib/output/events'; +import { Theme } from 'typedoc/dist/lib/output/theme'; +import { TemplateMapping } from 'typedoc/dist/lib/output/themes/DefaultTheme'; + +import { ContextAwareHelpersComponent } from './components/helpers.component'; +import { OptionsComponent } from './components/options.component'; + +/** + * The MarkdownTheme is based on TypeDoc's DefaultTheme @see https://github.com/TypeStrong/typedoc/blob/master/src/lib/output/themes/DefaultTheme.ts. + * - html specific components are removed from the renderer + * - markdown specefic components have been added + */ + +export default class MarkdownTheme extends Theme { + /** + * @See DefaultTheme.MAPPINGS + */ + static MAPPINGS: TemplateMapping[] = [ + { + kind: [ReflectionKind.Class], + isLeaf: false, + directory: 'classes', + template: 'reflection.hbs', + }, + { + kind: [ReflectionKind.Interface], + isLeaf: false, + directory: 'interfaces', + template: 'reflection.hbs', + }, + { + kind: [ReflectionKind.Enum], + isLeaf: false, + directory: 'enums', + template: 'reflection.hbs', + }, + { + kind: [ReflectionKind.Namespace, ReflectionKind.Module], + isLeaf: false, + directory: 'modules', + template: 'reflection.hbs' + }, + ]; + + /** + * @See DefaultTheme.URL_PREFIX + */ + static URL_PREFIX: RegExp = /^(http|ftp)s?:\/\//; + + // creates an isolated Handlebars environment to store context aware helpers + static handlebars = Handlebars.create(); + + // is documentation generated as a single output file + static isSingleFile = false; + + // the root of generated docs + indexName = ''; + + // the file extension of the generated docs + fileExt = '.md'; + + constructor(renderer: Renderer, basePath: string) { + super(renderer, basePath); + this.listenTo(renderer, PageEvent.END, this.onPageEnd, 1024); + + // cleanup html specific components + renderer.removeComponent('assets'); + renderer.removeComponent('javascript-index'); + renderer.removeComponent('toc'); + renderer.removeComponent('pretty-print'); + + // add markdown related componenets + renderer.addComponent('helpers', new ContextAwareHelpersComponent(renderer)); + renderer.addComponent('options', new OptionsComponent(renderer)); + + this.indexName = this.application.options.getValue('name'); + + if (!this.indexName) { + throw new Error('`--name` must be provided') + } + } + + /** + * Test if directory is output directory + * @param outputDirectory + */ + isOutputDirectory(outputDirectory: string) { + return true; + } + + /** + * This method is essentially a copy of the TypeDocs DefaultTheme.getUrls with extensions swapped out to .md + * Map the models of the given project to the desired output files. + * + * @param project The project whose urls should be generated. + * @returns A list of [[UrlMapping]] instances defining which models + * should be rendered to which files. + */ + getUrls(project: ProjectReflection): UrlMapping[] { + const urls: UrlMapping[] = []; + const entryPoint = this.getEntryPoint(project); + const inlineGroupTitles = ['Functions', 'Variables', 'Object literals']; + + if (project.groups) { + MarkdownTheme.isSingleFile = + project.groups && project.groups.every((group) => inlineGroupTitles.includes(group.title)); + } + + + entryPoint.url = this.indexName + this.fileExt; + urls.push( + new UrlMapping( + this.indexName + this.fileExt, + { ...entryPoint, displayReadme: MarkdownTheme.isSingleFile }, + 'reflection.hbs', + ), + ); + + + if (entryPoint.children) { + entryPoint.children.forEach((child: Reflection) => { + if (child instanceof DeclarationReflection) { + this.buildUrls(child, urls); + } + }); + } + + return urls; + } + + /** + * This is mostly a copy of the TypeDoc DefaultTheme.buildUrls method with .html ext switched to .md + * Builds the url for the the given reflection and all of its children. + * + * @param reflection The reflection the url should be created for. + * @param urls The array the url should be appended to. + * @returns The altered urls array. + */ + + buildUrls(reflection: DeclarationReflection, urls: UrlMapping[]): UrlMapping[] { + return []; + const mapping = MarkdownTheme.getMapping(reflection); + if (mapping) { + if (!reflection.url || !MarkdownTheme.URL_PREFIX.test(reflection.url)) { + const url = this.toUrl(mapping, reflection); + urls.push(new UrlMapping(url, reflection, mapping.template)); + reflection.url = url; + reflection.hasOwnDocument = true; + } + for (const child of reflection.children || []) { + if (mapping.isLeaf) { + this.applyAnchorUrl(child, reflection); + } else { + this.buildUrls(child, urls); + } + } + } else if (reflection.parent) { + this.applyAnchorUrl(reflection, reflection.parent); + } + return urls; + } + + /** + * Returns the full url of a given mapping and reflection + * @param mapping + * @param reflection + */ + toUrl(mapping: TemplateMapping, reflection: DeclarationReflection) { + return mapping.directory + '/' + this.getUrl(reflection) + this.fileExt; + } + + /** + * @see DefaultTheme.getUrl + * Return a url for the given reflection. + * + * @param reflection The reflection the url should be generated for. + * @param relative The parent reflection the url generation should stop on. + * @param separator The separator used to generate the url. + * @returns The generated url. + */ + getUrl(reflection: Reflection, relative?: Reflection, separator: string = '.'): string { + let url = reflection.getAlias(); + + if (reflection.parent && reflection.parent !== relative && !(reflection.parent instanceof ProjectReflection)) { + url = this.getUrl(reflection.parent, relative, separator) + separator + url; + } + + return url; + } + + /** + * Similar to DefaultTheme.applyAnchorUrl method with added but the anchors are computed from the reflection structure + * Generate an anchor url for the given reflection and all of its children. + * + * @param reflection The reflection an anchor url should be created for. + * @param container The nearest reflection having an own document. + */ + applyAnchorUrl(reflection: Reflection, container: Reflection) { + if (!reflection.url || !MarkdownTheme.URL_PREFIX.test(reflection.url)) { + const anchor = this.toAnchorRef(reflection); + reflection.url = container.url + '#' + anchor; + reflection.anchor = anchor; + reflection.hasOwnDocument = false; + } + reflection.traverse((child) => { + if (child instanceof DeclarationReflection) { + this.applyAnchorUrl(child, container); + } + }); + } + + /** + * Converts a reflection to anchor ref + * @param reflection + */ + toAnchorRef(reflection: Reflection) { + function parseAnchorRef(ref: string) { + return ref.replace(/["\$]/g, '').replace(/ /g, '-'); + } + let anchorPrefix = ''; + reflection.flags.forEach((flag) => (anchorPrefix += `${flag}-`)); + const prefixRef = parseAnchorRef(anchorPrefix); + const reflectionRef = parseAnchorRef(reflection.name); + const anchorRef = prefixRef + reflectionRef; + return anchorRef.toLowerCase(); + } + + /** + * Copy of default theme DefaultTheme.getEntryPoint + * @param project + */ + getEntryPoint(project: ProjectReflection): ContainerReflection { + const entryPoint = this.owner.entryPoint; + if (entryPoint) { + const reflection = project.getChildByName(entryPoint); + if (reflection) { + if (reflection instanceof ContainerReflection) { + return reflection; + } else { + this.application.logger.warn('The given entry point `%s` is not a container.', entryPoint); + } + } else { + this.application.logger.warn('The entry point `%s` could not be found.', entryPoint); + } + } + return project; + } + + getNavigation(project: ProjectReflection) { + function createNavigationGroup(name: string, url = null) { + const navigationGroup = new NavigationItem(name, url); + navigationGroup.children = []; + delete navigationGroup.cssClasses; + delete navigationGroup.reflection; + return navigationGroup; + } + + function getNavigationGroup(reflection: DeclarationReflection) { + if (reflection.kind === ReflectionKind.Namespace) { + return namespacesNavigation; + } + if (reflection.kind === ReflectionKind.Module) { + return modulesNavigation; + } + if (reflection.kind === ReflectionKind.Class) { + return classesNavigation; + } + if (reflection.kind === ReflectionKind.Enum) { + return enumsNavigation; + } + if (reflection.kind === ReflectionKind.Interface) { + return interfacesNavigation; + } + return null; + } + + function addNavigationItem( + longTitle: boolean, + reflection: DeclarationReflection, + parentNavigationItem?: NavigationItem, + group?, + ) { + let navigationGroup: NavigationItem; + if (group) { + navigationGroup = group; + } else { + navigationGroup = getNavigationGroup(reflection); + } + let titlePrefix = ''; + if (longTitle && parentNavigationItem && parentNavigationItem.title) { + titlePrefix = parentNavigationItem.title.replace(/\"/g, '') + '.'; + } + + const title = titlePrefix + reflection.name.replace(/\"/g, ''); + const url = reflection.url; + const nav = new NavigationItem(title, url, parentNavigationItem); + nav.parent = parentNavigationItem; + + navigationGroup.children.push(nav); + if (reflection.children) { + reflection.children.forEach((reflectionChild) => { + if (reflectionChild.hasOwnDocument) { + addNavigationItem(longTitle, reflectionChild as DeclarationReflection, nav, navigationGroup); + } + }); + } + delete nav.cssClasses; + delete nav.reflection; + return nav; + } + const isModules = this.application.options.getValue('mode') === 1; + const isLongTitle = this.application.options.getValue('longTitle') as boolean; + const navigation = createNavigationGroup(project.name, this.indexName + this.fileExt); + const externalModulesNavigation = createNavigationGroup('External Modules'); + const modulesNavigation = createNavigationGroup('Modules'); + const namespacesNavigation = createNavigationGroup('Namespaces'); + const classesNavigation = createNavigationGroup('Classes'); + const enumsNavigation = createNavigationGroup('Enums'); + const interfacesNavigation = createNavigationGroup('Interfaces'); + + if (project.groups) { + if (!isModules) { + project.groups.forEach((group) => { + group.children.forEach((reflection) => { + if (reflection.hasOwnDocument) { + addNavigationItem(isLongTitle, reflection as DeclarationReflection); + } + }); + }); + } + } + + navigation.children = []; + + return navigation; + } + + private onPageEnd(page: PageEvent) { + page.contents = page.contents ? MarkdownTheme.formatContents(page.contents) : ''; + } + + /** + * @see DefaultTheme.getMapping + * Return the template mapping for the given reflection. + * + * @param reflection The reflection whose mapping should be resolved. + * @returns The found mapping or undefined if no mapping could be found. + */ + static getMapping(reflection: DeclarationReflection): TemplateMapping | undefined { + return MarkdownTheme.MAPPINGS.find((mapping) => reflection.kindOf(mapping.kind)); + } + + static formatContents(contents: string) { + return ( + contents + .replace(/[\r\n]{3,}/g, '\n\n') + .replace(/!spaces/g, '') + .replace(/^\s+|\s+$/g, '') + '\n' + ); + } +} diff --git a/docs-gen/tasks/fixtures.js b/docs-gen/tasks/fixtures.js new file mode 100644 index 0000000000000..de3d1d8ceeb86 --- /dev/null +++ b/docs-gen/tasks/fixtures.js @@ -0,0 +1,44 @@ +const fs = require('fs'); +const path = require('path'); +const { Application } = require('typedoc'); + +const app = new Application({ + mode: 'Modules', + module: 'CommonJS', + experimentalDecorators: true, + jsx: true, + target: 'es2015', +}); + +const fixturesDir = './test/fixtures'; +const inputFiles = app.expandInputFiles(['./test/stubs']); + +if (!fs.existsSync(fixturesDir)) { + fs.mkdirSync(fixturesDir); +} + +inputFiles.forEach(file => { + const result = app.convert(app.expandInputFiles([file])); + fs.writeFileSync(`${fixturesDir}/${path.basename(file)}.json`, JSON.stringify(result, replacer)); + console.log(`[typedoc-plugin-markdown(task:fixtures)] writing ${path.basename(file)}.json fixture`); +}); + +function replacer(key, value) { + if ( + key === 'parent' || + key === 'reflection' || + key === 'reflections' || + key === 'symbolMapping' || + key === 'file' || + key === 'cssClasses' || + key === '_alias' || + key === '_aliases' || + key === 'directory' || + key === 'packageInfo' || + key === 'files' || + key === 'readme' + ) { + return null; + } + return value; +} diff --git a/docs-gen/tasks/link-plugin.js b/docs-gen/tasks/link-plugin.js new file mode 100644 index 0000000000000..e108e4d9e4771 --- /dev/null +++ b/docs-gen/tasks/link-plugin.js @@ -0,0 +1,7 @@ +const fs = require('fs'); +const { join } = require('path'); +// symlink to self for running local examples/tests +const pluginPath = join(__dirname, '..', 'node_modules/typedoc-plugin-markdown'); +if (!fs.existsSync(pluginPath)) { + fs.symlinkSync(join(__dirname, '..'), pluginPath); +} diff --git a/docs-gen/test/options.json b/docs-gen/test/options.json new file mode 100644 index 0000000000000..8aa2a00cbf7aa --- /dev/null +++ b/docs-gen/test/options.json @@ -0,0 +1,8 @@ +{ + "inputFiles": "./test/stubs/src", + "target": "ES5", + "name": "My API", + "readme": "none", + "includes": "./test/stubs/inc/", + "media": "./test/stubs/media/" +} diff --git a/docs-gen/test/stubs/README.md b/docs-gen/test/stubs/README.md new file mode 100644 index 0000000000000..a380dbf8c1e03 --- /dev/null +++ b/docs-gen/test/stubs/README.md @@ -0,0 +1 @@ +MY README diff --git a/docs-gen/test/stubs/inc/README.md b/docs-gen/test/stubs/inc/README.md new file mode 100644 index 0000000000000..e845566c06f9b --- /dev/null +++ b/docs-gen/test/stubs/inc/README.md @@ -0,0 +1 @@ +README diff --git a/docs-gen/test/stubs/inc/class-example.hbs b/docs-gen/test/stubs/inc/class-example.hbs new file mode 100755 index 0000000000000..ad06e87b1cfe5 --- /dev/null +++ b/docs-gen/test/stubs/inc/class-example.hbs @@ -0,0 +1 @@ +This is a simple example on a handlebars file. \ No newline at end of file diff --git a/docs-gen/test/stubs/inc/class-example.md b/docs-gen/test/stubs/inc/class-example.md new file mode 100755 index 0000000000000..def04801d72c9 --- /dev/null +++ b/docs-gen/test/stubs/inc/class-example.md @@ -0,0 +1,5 @@ +This is a simple example on how to use include. + +![My image alt text](media://logo.png) + +![My not found image](media://VOID.png) diff --git a/docs-gen/test/stubs/media/logo.png b/docs-gen/test/stubs/media/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..120c55ad67864cc4ef9a0231ebe19d718878ae36 GIT binary patch literal 1294 zcmc(eYg1Ea6oucDle-X)Tr}c9P7qLvK&lwLq!T zML@+G)IcPST;vXEwH<6i0jZ)wg-+2KC8!00mmuIEDt#OKC;DOS_3Zs=&ze~$q;Vo= zrUw%M;4BeGCODkOAAAjKvJP-bVa9^|2GdSIEl``1> zaHwyd(EE(oOSg4d^-gx{Znqnmi+)$J26CB?kJD^L=u8;}I^Mp>gqOOYjs!HCD8jR4$g+?8`at>Dc!Ri25eG1m{V66t$g}}O8Sg(Q&>tUk;Hig0F zG}y8kw(f#$BG{G)f86ph6OE-;=7=d+l@PZL01U%$9Ovj(g;R+*_!#; zO;NRmD~}#2{E~(asTV$0J^VS?f~*5H`Bi&v#Y7>hq^`D8@$P^tUjbwBp~eue(@vZu z4=1ei5N|2{w3_3-lx*Gjk7^77_saaU_JZ0}{`LvR^$m-sGed=|>u)D4Aq368)c{3Im_JAcW&J(O91?Am*aUYyk6DJj9Ww`WsC|I|=`Ofzs zfn1%4N=4a?b;zxL-QFkiexu?FxiP zpSQ&TpBnX~J5Ftu#O5%;EJpcbA6QGoGJ6M5wq|_h4RC3kMmExFkh6YCvaMkD;v!8l z!Utgqb0X0~jNCDB4N=aDv6KaDbSTXvI4peD({dnr_sboW6uiJtQ^c2~>q8!v?P;Kl zaH;Mm@KzU}XK>Tz<{bXjyRYWe>$`VV4LNgZmRPT0WSLfrT9^O*L#eC$w}66%o-y>g zM4Jzu9Q70mhoiqkXI3!CPJ0>TQ{`mR&F67G*3s8w{3jRE2?j)+vlAVUd(MbW2@4N#F&p3+VkEpa1UL^~l?CA<*U{h8|a-r6C#VNFoO* zO)B@2#+t)q+Flb8^?G{lSH*qgi|%9&doQ;lIztFHU;1)EG zwZs?SuyJK)m$>n|oun5;8%D(496Ub8`+QkDQq{cbY2|Ub$n2fA^RssFYICe4YQwFv z6|N3}C{##xsF1`!(om*gvEQ z^v|@t?Ri-}wG8K!KRI|`(kWmNi`AY-JOTaMe(+bvbRo^=lTyKw2l}Vl3V^Yc*W?d0 ymhn)EWuzd>!8%P&ATr6%oa=n5Po|9nPb>O-$sFt34~jHLV}T?pF0wH~uKpKvqB-UO literal 0 HcmV?d00001 diff --git a/docs-gen/test/stubs/src/categories.ts b/docs-gen/test/stubs/src/categories.ts new file mode 100644 index 0000000000000..33778a7dbf0db --- /dev/null +++ b/docs-gen/test/stubs/src/categories.ts @@ -0,0 +1,72 @@ +/** + * @category CategoryA + */ +let categoryVariableA1 = true; + +/** + * @category CategoryA + */ +let categoryVariableA2 = true; + +/** + * @category CategoryA + */ +function categoryFunctionA1() { + return true; +} + +/** + * @category CategoryA + */ +function categoryFunctionA2() { + return true; +} + +/** + * @category CategoryA + */ +function categoryFunctionA3() { + return true; +} + +/** + * @category CategoryA + */ +interface CategoryInterfaceA1 { + value: string; +} + +/** + * @category CategoryA + */ +interface CategoryInterfaceA2 { + value: string; +} + +/** + * @category CategoryB + */ +let categoryVariableB1 = true; + +/** + * @category CategoryB + */ +function categoryFunctionB2() { + return true; +} + +let otherVariableA = true; + +function otherFunctionA() { + return true; +} + +let otherVariableB = true; + +function otherFunctionB() { + return true; +} + +interface OtherInterfaceA { + value: string; +} diff --git a/docs-gen/test/stubs/src/classes.ts b/docs-gen/test/stubs/src/classes.ts new file mode 100644 index 0000000000000..1b9b293842880 --- /dev/null +++ b/docs-gen/test/stubs/src/classes.ts @@ -0,0 +1,291 @@ +/** + * This is a simple interface. + */ +export interface INameInterface { + /** + * This is a interface member of INameInterface. + * + * It should be inherited by all subinterfaces. + */ + name: string; + + /** + * This is a interface function of INameInterface. + * + * It should be inherited by all subinterfaces. + */ + getName(): string; +} + +/** + * This is a simple interface. + */ +export interface IPrintInterface { + /** + * This is a interface function of IPrintInterface + * + * It should be inherited by all subinterfaces. + */ + print(value: string): void; +} + +/** + * This is a interface inheriting from two other interfaces. + */ +export interface IPrintNameInterface extends INameInterface, IPrintInterface { + /** + * This is a interface function of IPrintNameInterface + */ + printName(): void; +} + +/** + * This is a simple base class. + * + * [[include:class-example.md]] + */ +export abstract class BaseClass implements INameInterface { + /** + * This is a simple public member. + */ + public name: string; + + /** + * This is a simple protected member. + */ + protected kind: number; + + /** + * This is a static member. + * + * Static members should not be inherited. + */ + static instance: BaseClass; + static instances: BaseClass[]; + + /** + * This is an instance member of an internal class. + */ + private internalClass: InternalClass; + + constructor(name: string); + constructor(source: BaseClass); + constructor() { + if (arguments.length > 0) { + if (typeof arguments[0] == 'string') { + this.name = arguments[0]; + } else if (arguments[0] instanceof BaseClass) { + this.name = arguments[0].name; + } + } + + this.checkName(); + } + + public abstract abstractMethod(): void; + + /** + * This is a simple member function. + * + * It should be inherited by all subclasses. This class has a static + * member with the same name, both should be documented. + * + * @returns Return the name. + */ + public getName(): string { + return this.name; + } + + /** + * This is a simple static member function. + * + * Static functions should not be inherited. This class has a + * member with the same name, both should be documented. + * + * @returns Return the name. + */ + static getName(): string { + return 'A name'; + } + + /** + * This is a simple member function. + * + * It should be inherited by all subclasses. + * + * @param name The new name. + */ + public setName(name: string) { + this.name = name; + this.checkName(); + } + + /** + * This is a simple fat arrow function. + * + * @param param1 The first parameter needed by this function. + * @param param2 The second parameter needed by this function. + * @see https://github.com/sebastian-lenz/typedoc/issues/37 + */ + public arrowFunction = (param2: string, param1: number): void => {}; + + /** + * This is a private function. + */ + private checkName() { + return true; + } + + /** + * This is a static function. + * + * Static functions should not be inherited. + * + * @returns An instance of BaseClass. + */ + static getInstance(): BaseClass { + return BaseClass.instance; + } + + /** + * @see https://github.com/sebastian-lenz/typedoc/issues/42 + */ + public static caTest( + originalValues: BaseClass, + newRecord: any, + fieldNames: string[], + mandatoryFields: string[], + ): string { + var returnval = ''; + var updates: string[] = []; + var allFields: string[] = fieldNames; + for (var j = 0; j < allFields.length; j++) { + var field = allFields[j]; + var oldValue = originalValues[field]; + var newValue = newRecord[field]; + } + return returnval; + } +} + +/** + * This is an internal class, it is not exported. + */ +class InternalClass { + constructor(options: { name: string }) {} +} + +/** + * This is a class that extends another class. + * + * This class has no own constructor, so its constructor should be inherited + * from BaseClass. + */ +export class SubClassA extends BaseClass implements IPrintNameInterface { + public name: string; + + /** + * This is a simple interface function. + */ + public print(value: string): void {} + + /** + * @inheritdoc + */ + public printName(): void { + this.print(this.getName()); + } + + /** + * Returns the name. See [[BaseClass.name]]. + * + * @returns The return value. + */ + public get nameProperty(): string { + return this.name; + } + + /** + * Sets the name. See [[BaseClass.name]]. + * + * @param value The new name. + * @returns The return value. + */ + public set nameProperty(value: string) { + this.name = value; + } + + /** + * Returns the name. See [[BaseClass.name]]. + * + * @returns The return value. + */ + public get readOnlyNameProperty(): string { + return this.name; + } + + /** + * Sets the name. See [[BaseClass.name]]. + * + * @param value The new name. + * @returns The return value. + */ + public set writeOnlyNameProperty(value: string) { + this.name = value; + } + + public abstractMethod(): void {} +} + +/** + * This is a class that extends another class. + * + * The constructor of the original class should be overwritten. + */ +export class SubClassB extends BaseClass { + public name: string; + + constructor(name: string) { + super(name); + } + + abstractMethod(): void {} + + doSomething(value: [string, SubClassA, SubClassB]) {} +} + +/** + * This is a generic class. + * + * @param T This a type parameter. + */ +export class GenericClass { + public value: T; + + /** + * Constructor short text. + * + * @param p1 Constructor param + * @param p2 Private string property + * @param p3 Public number property + * @param p4 Public implicit any property + * @param p5 Readonly property + */ + constructor(p1, protected p2: T, public p3: number, private p4: number, readonly p5: string) {} + + /** + * @param value [[getValue]] is the counterpart. + */ + public setValue(value: T) { + this.value = value; + } + + public getValue(): T { + return this.value; + } +} + +/** + * This a non generic class derived from a [[GenericClass|generic class]]. + */ +export class NonGenericClass extends GenericClass {} diff --git a/docs-gen/test/stubs/src/comments.ts b/docs-gen/test/stubs/src/comments.ts new file mode 100755 index 0000000000000..26e77eb3d13e3 --- /dev/null +++ b/docs-gen/test/stubs/src/comments.ts @@ -0,0 +1,61 @@ +/** + * Additionally you can link to other classes, members or functions using double square brackets. + * + * - Link to an external reflection: [[BaseClass]] + * - Link to an internal reflection: [[commentsInReturn]] + * - Link to an undefined reflection: [[VOID]] + */ + +export let commentsWithSymbolLinks = true; + +/** + * This is an example of include + * + * [[include:class-example.md]] [[include:VOID]] + * + * This is an example of handlebars include + * + * [[include:class-example.hbs]] + */ +export let commentsWithIncludes = true; + +/** + * @name Tag description on same line + * @description + * Tag description on new line + * - Tag description on another line + * + * @deprecated + * Another tag description + */ +export let commentsWithTags = true; + +/** + * Some comments with fence blocks + * ```typescript + * someFunction() + * ``` + * ```js + * anotherFunction() + * ``` + */ +export let commentsWithFencedBlock = true; + +/** + * Comments with a return definition + * @returns Return comments + */ +export function commentsInReturn() { + return; +} + +/** + * See {@linkcode INameInterface} and [INameInterface's name property]{@link INameInterface.name}. + * Also, check out {@link https://www.google.com|Google} and + * {@link https://github.com GitHub}. + * + * Taken from http://usejsdoc.org/tags-inline-link.html. + */ +export function functionWithDocLink() { + return; +} diff --git a/docs-gen/test/stubs/src/destrucuting.ts b/docs-gen/test/stubs/src/destrucuting.ts new file mode 100644 index 0000000000000..22d6a99831d88 --- /dev/null +++ b/docs-gen/test/stubs/src/destrucuting.ts @@ -0,0 +1,32 @@ +/** + * Destructuring objects. + */ +const { destructObjectA, destructObjectB, destructObjectC } = { + destructObjectA: 0, + destructObjectB: 'string', + destructObjectC: 0, +}; + +/** + * Destructuring arrays. + */ +const [destructArrayA, destructArrayB, destructArrayC = 10] = [0, 'string', 0]; + +/** + * Array Destructuring with rest + */ +const [destructArrayWithRestA, destructArrayWithRestB, ...destructArrayWithRest] = [1, 2, 3, 4]; + +/** + * Array Destructuring with ignores + */ +const [destructArrayWithIgnoresA, , ...destructArrayWithIgnoresRest] = [1, 2, 3, 4]; + +/** + * Destructuring function parameters. + */ +function drawText({ text = '', location: [x, y] = [0, 0], bold = false }) {} + +interface I { + name: string; +} diff --git a/docs-gen/test/stubs/src/functions.ts b/docs-gen/test/stubs/src/functions.ts new file mode 100644 index 0000000000000..438c96cb393d9 --- /dev/null +++ b/docs-gen/test/stubs/src/functions.ts @@ -0,0 +1,148 @@ +export function buildName(firstName: string, lastName?: string) { + if (lastName) { + return firstName + ' ' + lastName; + } else { + return firstName; + } +} + +/** + * This is an internal function. + */ +export function internalFunction(): void {} + +/** + * This is a simple exported function. + */ +export function exportedFunction(): void {} + +/** + * This is a function with multiple arguments and a return value. + * + * @param paramZ - This is a string parameter. + * @param paramG - This is a parameter flagged with any. + * This sentence is placed in the next line. + * + * @param paramA + * This is a **parameter** pointing to an interface. + * + * ~~~ + * const value:BaseClass = new BaseClass('test'); + * functionWithArguments('arg', 0, value); + * ~~~ + * + * @returns This is the return value of the function. + */ +export function functionWithParameters(paramZ: string, paramG: any, paramA: Object): number { + return 0; +} + +/** + * This is a function that is assigned to a variable. + * + * @param someParam This is some numeric parameter. + * @return This is the return value of the function. + */ +export const variableFunction = function(someParam: number): number { + return 0; +}; + +/** + * This is a function with a parameter that is optional. + * + * @param requiredParam A normal parameter. + * @param optionalParam An optional parameter. + */ +export function functionWithOptionalValue(requiredParam: string, optionalParam?: string) {} + +/** + * This is a function with a parameter that has a default value. + * + * @param valueA A parameter with a default string value. + * @param valueB A parameter with a default numeric value. + * @param valueC A parameter with a default NaN value. + * @param valueD A parameter with a default boolean value. + * @param valueE A parameter with a default null value. + * @return This is the return value of the function. + */ +export function functionWithDefaults( + valueA: string = 'defaultValue', + valueB: number = 100, + valueC: number = Number.NaN, + valueD: boolean = true, + valueE: boolean = null, +): string { + return valueA; +} + +/** + * This is a function with rest parameter. + * + * @param rest The rest parameter. + * @return This is the return value of the function. + */ +export function functionWithRest(...rest: string[]): string { + return rest.join(', '); +} + +/** + * This is the first signature of a function with multiple signatures. + * + * @param value The name value. + */ +export function multipleSignatures(value: string): string; + +/** + * This is the second signature of a function with multiple signatures. + * + * @param value An object containing the name value. + * @param value.name A value of the object. + */ +export function multipleSignatures(value: { name: string }): string; + +/** + * This is the actual implementation, this comment will not be visible + * in the generated documentation. + * + * @return This is the return value of the function. + */ +export function multipleSignatures(): string { + if (arguments.length > 0) { + if (typeof arguments[0] == 'object') { + return arguments[0].name; + } else { + return arguments[0]; + } + } + + return ''; +} + +/** + * This is a function that is extended by a module. + * + * @param arg An argument. + */ +export function moduleFunction(arg: string): string { + return ''; +} + +/** + * This is the module extending the function moduleFunction(). + */ +export module moduleFunction { + /** + * This variable is appended to a function. + */ + export let functionVariable: string; + + /** + * This function is appended to another function. + */ + export function append() {} + + /** + * This function is appended to another function. + */ + export function prepend() {} +} diff --git a/docs-gen/test/stubs/src/literals.ts b/docs-gen/test/stubs/src/literals.ts new file mode 100644 index 0000000000000..0c615b0376349 --- /dev/null +++ b/docs-gen/test/stubs/src/literals.ts @@ -0,0 +1,27 @@ +const objectLiteral = { + valueZ: 'foo', + valueY: function() { + return 'foo'; + }, + valueX: { + valueZ: 'foo', + valueY: (z: string) => { + return { a: 'test', b: z }; + }, + valueA: [100, 200, 300], + }, + valueA: 100, + valueB: true, +}; + +let typeLiteral: { + valueZ: string; + valueY: { (): string }; + valueX: { + valueZ: string; + valueY: { (z: string): { a: string; b: string } }; + valueA: number[]; + }; + valueA?: number; + valueB?: boolean; +}; diff --git a/docs-gen/test/stubs/src/variables.ts b/docs-gen/test/stubs/src/variables.ts new file mode 100644 index 0000000000000..a3e8e6b3a8d4e --- /dev/null +++ b/docs-gen/test/stubs/src/variables.ts @@ -0,0 +1,15 @@ +let isDone: boolean = false; + +let decimal: number = 6; + +let color: string = 'blue'; + +let list: number[] = [1, 2, 3]; + +let x: [string, number]; + +let notSure: any = 4; + +let u: undefined; + +let n: null = null; diff --git a/docs-gen/test/stubs/tsconfig.json b/docs-gen/test/stubs/tsconfig.json new file mode 100644 index 0000000000000..6bc28569a0aca --- /dev/null +++ b/docs-gen/test/stubs/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "experimentalDecorators": true, + "lib": ["es2016", "dom"], + "module": "commonjs", + "moduleResolution": "node", + "noImplicitAny": false, + "noUnusedLocals": false, + "noUnusedParameters": false, + "strictNullChecks": false, + "target": "es2015" + } +} diff --git a/docs-gen/tsconfig.json b/docs-gen/tsconfig.json new file mode 100644 index 0000000000000..6363e21e5c07b --- /dev/null +++ b/docs-gen/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "declaration": true, + "experimentalDecorators": true, + "lib": ["es2016", "dom"], + "module": "commonjs", + "moduleResolution": "node", + "noImplicitAny": false, + "noUnusedLocals": false, + "outDir": "./dist", + "removeComments": true, + "sourceMap": true, + "strictNullChecks": false, + "target": "es2015", + }, + "exclude": ["./dist", "./test", "**/*.spec.ts"] +} diff --git a/docs-gen/tslint.json b/docs-gen/tslint.json new file mode 100644 index 0000000000000..c50f67a4622dd --- /dev/null +++ b/docs-gen/tslint.json @@ -0,0 +1,21 @@ +{ + "extends": "tslint:recommended", + "rules": { + "quotemark": [true, "single"], + "interface-over-type-literal": false, + "no-string-literal": false, + "no-console": false, + "no-var-requires": false, + "max-line-length": [true, 1140], + "no-submodule-imports": false, + "align": false, + "no-unused-expression": false, + "interface-name": false, + "object-literal-sort-keys": false, + "arrow-parens": false, + "member-ordering": false, + "member-access": false, + "object-literal-key-quotes": false, + "max-classes-per-file": false + } +} diff --git a/docs-gen/yarn.lock b/docs-gen/yarn.lock index a6fe406d0998d..6e5e966a7e6ab 100644 --- a/docs-gen/yarn.lock +++ b/docs-gen/yarn.lock @@ -9,7 +9,46 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.6.2": +"@babel/code-frame@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.3.tgz#324bcfd8d35cd3d47dae18cde63d752086435e9a" + integrity sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg== + dependencies: + "@babel/highlight" "^7.10.3" + +"@babel/core@^7.1.0", "@babel/core@^7.7.5": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.3.tgz#73b0e8ddeec1e3fdd7a2de587a60e17c440ec77e" + integrity sha512-5YqWxYE3pyhIi84L84YcwjeEgS+fa7ZjK6IBVGTjDVfm64njkR2lfDhVR5OudLk8x2GK59YoSyVv+L/03k1q9w== + dependencies: + "@babel/code-frame" "^7.10.3" + "@babel/generator" "^7.10.3" + "@babel/helper-module-transforms" "^7.10.1" + "@babel/helpers" "^7.10.1" + "@babel/parser" "^7.10.3" + "@babel/template" "^7.10.3" + "@babel/traverse" "^7.10.3" + "@babel/types" "^7.10.3" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.3.tgz#32b9a0d963a71d7a54f5f6c15659c3dbc2a523a5" + integrity sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA== + dependencies: + "@babel/types" "^7.10.3" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/generator@^7.6.2": version "7.6.2" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.2.tgz#dac8a3c2df118334c2a29ff3446da1636a8f8c03" integrity sha512-j8iHaIW4gGPnViaIHI7e9t/Hl8qLjERI6DcV9kEpAIDJsAOrcnXqRS7t+QbhL76pwbtqP+QCQLL0z1CyVmtjjQ== @@ -19,55 +58,6 @@ 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-builder-react-jsx@^7.3.0": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4" - integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw== - dependencies: - "@babel/types" "^7.3.0" - esutils "^2.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" @@ -77,6 +67,15 @@ "@babel/template" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-function-name@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz#79316cd75a9fa25ba9787ff54544307ed444f197" + integrity sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw== + dependencies: + "@babel/helper-get-function-arity" "^7.10.3" + "@babel/template" "^7.10.3" + "@babel/types" "^7.10.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" @@ -84,86 +83,81 @@ 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== +"@babel/helper-get-function-arity@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz#3a28f7b28ccc7719eacd9223b659fdf162e4c45e" + integrity sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg== dependencies: - "@babel/types" "^7.4.4" + "@babel/types" "^7.10.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.10.1": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.3.tgz#bc3663ac81ac57c39148fef4c69bf48a77ba8dd6" + integrity sha512-q7+37c4EPLSjNb2NmWOjNwj0+BOyYlssuQ58kHEWk1Z78K5i8vTUsteq78HMieRPQSl/NtpQyJfdjt3qZ5V2vw== dependencies: - "@babel/types" "^7.5.5" + "@babel/types" "^7.10.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== +"@babel/helper-module-imports@^7.10.1": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.3.tgz#766fa1d57608e53e5676f23ae498ec7a95e1b11a" + integrity sha512-Jtqw5M9pahLSUWA+76nhK9OG8nwYXzhQzVIGFoNaHnXF/r4l7kz4Fl0UAW7B6mqC5myoJiBP5/YQlXQTMfHI9w== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.10.3" -"@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-transforms@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz#24e2f08ee6832c60b157bb0936c86bef7210c622" + integrity sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg== 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/helper-module-imports" "^7.10.1" + "@babel/helper-replace-supers" "^7.10.1" + "@babel/helper-simple-access" "^7.10.1" + "@babel/helper-split-export-declaration" "^7.10.1" + "@babel/template" "^7.10.1" + "@babel/types" "^7.10.1" 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.10.1": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz#f53c4b6783093195b0f69330439908841660c530" + integrity sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg== dependencies: - "@babel/types" "^7.0.0" + "@babel/types" "^7.10.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-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-plugin-utils@^7.10.1", "@babel/helper-plugin-utils@^7.8.0": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz#aac45cccf8bc1873b99a85f34bceef3beb5d3244" + integrity sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g== -"@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-replace-supers@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz#ec6859d20c5d8087f6a2dc4e014db7228975f13d" + integrity sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A== 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-member-expression-to-functions" "^7.10.1" + "@babel/helper-optimise-call-expression" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" -"@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-simple-access@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz#08fb7e22ace9eb8326f7e3920a1c2052f13d851e" + integrity sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw== 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/template" "^7.10.1" + "@babel/types" "^7.10.1" -"@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-split-export-declaration@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz#c6f4be1cbc15e3a868e4c64a17d5d31d754da35f" + integrity sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g== dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/types" "^7.10.1" "@babel/helper-split-export-declaration@^7.4.4": version "7.4.4" @@ -172,15 +166,19 @@ 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== +"@babel/helper-validator-identifier@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz#60d9847f98c4cea1b279e005fdb7c28be5412d15" + integrity sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw== + +"@babel/helpers@^7.10.1": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.1.tgz#a6827b7cb975c9d9cef5fd61d919f60d8844a973" + integrity sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw== dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" + "@babel/template" "^7.10.1" + "@babel/traverse" "^7.10.1" + "@babel/types" "^7.10.1" "@babel/highlight@^7.0.0": version "7.5.0" @@ -191,541 +189,902 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.4.2", "@babel/parser@^7.4.4", "@babel/parser@^7.6.0", "@babel/parser@^7.6.2": +"@babel/highlight@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.3.tgz#c633bb34adf07c5c13156692f5922c81ec53f28d" + integrity sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw== + dependencies: + "@babel/helper-validator-identifier" "^7.10.3" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.3.tgz#7e71d892b0d6e7d04a1af4c3c79d72c1f10f5315" + integrity sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA== + +"@babel/parser@^7.6.0", "@babel/parser@^7.6.2": version "7.6.2" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.2.tgz#205e9c95e16ba3b8b96090677a67c9d6075b70a1" integrity sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg== -"@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== +"@babel/plugin-syntax-async-generators@^7.8.4": + 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.0.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/helper-plugin-utils" "^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-syntax-bigint@^7.8.3": + 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.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/helper-plugin-utils" "^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-syntax-class-properties@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz#d5bc0645913df5b17ad7eda0fa2308330bde34c5" + integrity sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/helper-plugin-utils" "^7.10.1" -"@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-syntax-import-meta@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.1.tgz#3e59120ed8b3c2ccc5abb1cfc7aaa3ea01cd36b6" + integrity sha512-ypC4jwfIVF72og0dgvEcFRdOM2V9Qm1tu7RGmdZOlhsccyK0wisXmMObGuWEOd5jQ+K9wcIgSNftCpk2vkjUfQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" + "@babel/helper-plugin-utils" "^7.10.1" -"@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-syntax-json-strings@^7.8.3": + 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-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-logical-assignment-operators@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.1.tgz#fffee77b4934ce77f3b427649ecdddbec1958550" + integrity sha512-XyHIFa9kdrgJS91CUH+ccPVTnJShr8nLGc5bG2IhGXv5p1Rd+8BleGE5yzIg2Nc1QZAdHDa0Qp4m6066OL96Iw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.1" -"@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-nullish-coalescing-operator@^7.8.3": + 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.0.0" + "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" - integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz#25761ee7410bc8cf97327ba741ee94e4a61b7d99" + integrity sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-plugin-utils" "^7.10.1" -"@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== +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + 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-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-optional-catch-binding@^7.8.3": + 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-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-chaining@^7.8.3": + 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-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/template@^7.1.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/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.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/template@^7.10.1", "@babel/template@^7.10.3", "@babel/template@^7.3.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.3.tgz#4d13bc8e30bf95b0ce9d175d30306f42a2c9a7b8" + integrity sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@babel/code-frame" "^7.10.3" + "@babel/parser" "^7.10.3" + "@babel/types" "^7.10.3" -"@babel/plugin-transform-block-scoping@^7.6.2": +"@babel/traverse@^7.1.0": version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.2.tgz#96c33ab97a9ae500cc6f5b19e04a7e6553360a79" - integrity sha512-zZT8ivau9LOQQaOGC7bQLQOT4XPkPXgN2ERfUgk1X8ql+mVkLc4E8eKk+FO3o0154kxzqenWCorfmEXpEZcrSQ== - 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== + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.2.tgz#b0e2bfd401d339ce0e6c05690206d1e11502ce2c" + integrity sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.5.5" + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.2" "@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/parser" "^7.6.2" + "@babel/types" "^7.6.0" + debug "^4.1.0" globals "^11.1.0" + lodash "^4.17.13" -"@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/traverse@^7.10.1", "@babel/traverse@^7.10.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.3.tgz#0b01731794aa7b77b214bcd96661f18281155d7e" + integrity sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug== + dependencies: + "@babel/code-frame" "^7.10.3" + "@babel/generator" "^7.10.3" + "@babel/helper-function-name" "^7.10.3" + "@babel/helper-split-export-declaration" "^7.10.1" + "@babel/parser" "^7.10.3" + "@babel/types" "^7.10.3" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" -"@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/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: - "@babel/helper-plugin-utils" "^7.0.0" + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.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== +"@babel/types@^7.10.1", "@babel/types@^7.10.3", "@babel/types@^7.3.3": + version "7.10.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.3.tgz#6535e3b79fea86a6b09e012ea8528f935099de8e" + integrity sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" + "@babel/helper-validator-identifier" "^7.10.3" + lodash "^4.17.13" + to-fast-properties "^2.0.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" +"@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== -"@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== +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + exec-sh "^0.3.2" + minimist "^1.2.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== +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.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" +"@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@^26.1.0": + version "26.1.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.1.0.tgz#f67c89e4f4d04dbcf7b052aed5ab9c74f915b954" + integrity sha512-+0lpTHMd/8pJp+Nd4lyip+/Iyf2dZJvcCqrlkeZQoQid+JlThA4M9vxHtheyrQ99jJTMQam+es4BcvZ5W5cC3A== + dependencies: + "@jest/types" "^26.1.0" + chalk "^4.0.0" + jest-message-util "^26.1.0" + jest-util "^26.1.0" + slash "^3.0.0" + +"@jest/core@^26.1.0": + version "26.1.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.1.0.tgz#4580555b522de412a7998b3938c851e4f9da1c18" + integrity sha512-zyizYmDJOOVke4OO/De//aiv8b07OwZzL2cfsvWF3q9YssfpcKfcnZAwDY8f+A76xXSMMYe8i/f/LPocLlByfw== + dependencies: + "@jest/console" "^26.1.0" + "@jest/reporters" "^26.1.0" + "@jest/test-result" "^26.1.0" + "@jest/transform" "^26.1.0" + "@jest/types" "^26.1.0" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^26.1.0" + jest-config "^26.1.0" + jest-haste-map "^26.1.0" + jest-message-util "^26.1.0" + jest-regex-util "^26.0.0" + jest-resolve "^26.1.0" + jest-resolve-dependencies "^26.1.0" + jest-runner "^26.1.0" + jest-runtime "^26.1.0" + jest-snapshot "^26.1.0" + jest-util "^26.1.0" + jest-validate "^26.1.0" + jest-watcher "^26.1.0" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^26.1.0": + version "26.1.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.1.0.tgz#378853bcdd1c2443b4555ab908cfbabb851e96da" + integrity sha512-86+DNcGongbX7ai/KE/S3/NcUVZfrwvFzOOWX/W+OOTvTds7j07LtC+MgGydH5c8Ri3uIrvdmVgd1xFD5zt/xA== + dependencies: + "@jest/fake-timers" "^26.1.0" + "@jest/types" "^26.1.0" + jest-mock "^26.1.0" + +"@jest/fake-timers@^26.1.0": + version "26.1.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.1.0.tgz#9a76b7a94c351cdbc0ad53e5a748789f819a65fe" + integrity sha512-Y5F3kBVWxhau3TJ825iuWy++BAuQzK/xEa+wD9vDH3RytW9f2DbMVodfUQC54rZDX3POqdxCgcKdgcOL0rYUpA== + dependencies: + "@jest/types" "^26.1.0" + "@sinonjs/fake-timers" "^6.0.1" + jest-message-util "^26.1.0" + jest-mock "^26.1.0" + jest-util "^26.1.0" + +"@jest/globals@^26.1.0": + version "26.1.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.1.0.tgz#6cc5d7cbb79b76b120f2403d7d755693cf063ab1" + integrity sha512-MKiHPNaT+ZoG85oMaYUmGHEqu98y3WO2yeIDJrs2sJqHhYOy3Z6F7F/luzFomRQ8SQ1wEkmahFAz2291Iv8EAw== + dependencies: + "@jest/environment" "^26.1.0" + "@jest/types" "^26.1.0" + expect "^26.1.0" + +"@jest/reporters@^26.1.0": + version "26.1.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.1.0.tgz#08952e90c90282e14ff49e927bdf1873617dae78" + integrity sha512-SVAysur9FOIojJbF4wLP0TybmqwDkdnFxHSPzHMMIYyBtldCW9gG+Q5xWjpMFyErDiwlRuPyMSJSU64A67Pazg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.1.0" + "@jest/test-result" "^26.1.0" + "@jest/transform" "^26.1.0" + "@jest/types" "^26.1.0" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.1.0" + jest-resolve "^26.1.0" + jest-util "^26.1.0" + jest-worker "^26.1.0" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^4.1.3" + optionalDependencies: + node-notifier "^7.0.0" + +"@jest/source-map@^26.1.0": + version "26.1.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.1.0.tgz#a6a020d00e7d9478f4b690167c5e8b77e63adb26" + integrity sha512-XYRPYx4eEVX15cMT9mstnO7hkHP3krNtKfxUYd8L7gbtia8JvZZ6bMzSwa6IQJENbudTwKMw5R1BePRD+bkEmA== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^26.1.0": + version "26.1.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.1.0.tgz#a93fa15b21ad3c7ceb21c2b4c35be2e407d8e971" + integrity sha512-Xz44mhXph93EYMA8aYDz+75mFbarTV/d/x0yMdI3tfSRs/vh4CqSxgzVmCps1fPkHDCtn0tU8IH9iCKgGeGpfw== + dependencies: + "@jest/console" "^26.1.0" + "@jest/types" "^26.1.0" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^26.1.0": + version "26.1.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.1.0.tgz#41a6fc8b850c3f33f48288ea9ea517c047e7f14e" + integrity sha512-Z/hcK+rTq56E6sBwMoQhSRDVjqrGtj1y14e2bIgcowARaIE1SgOanwx6gvY4Q9gTKMoZQXbXvptji+q5GYxa6Q== + dependencies: + "@jest/test-result" "^26.1.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.1.0" + jest-runner "^26.1.0" + jest-runtime "^26.1.0" + +"@jest/transform@^26.1.0": + version "26.1.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.1.0.tgz#697f48898c2a2787c9b4cb71d09d7e617464e509" + integrity sha512-ICPm6sUXmZJieq45ix28k0s+d/z2E8CHDsq+WwtWI6kW8m7I8kPqarSEcUN86entHQ570ZBRci5OWaKL0wlAWw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.1.0" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.1.0" + jest-regex-util "^26.0.0" + jest-util "^26.1.0" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" + integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + +"@jest/types@^26.1.0": + version "26.1.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.1.0.tgz#f8afaaaeeb23b5cad49dd1f7779689941dcb6057" + integrity sha512-GXigDDsp6ZlNMhXQDeuy/iYCDsRIHJabWtDzvnn36+aqFfG14JmFV0e/iXxY4SP9vbXSiPNOWdehU5MeqrYHBQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@sinonjs/commons@^1.7.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.0.tgz#c8d68821a854c555bba172f3b06959a0039b236d" + integrity sha512-wEj54PfsZ5jGSwMX68G8ZXFawcSglQSXqCftWX3ec8MDUzQdHgcKvw97awHbY0efQEL5iKUOAmmVtoYgmrSG4Q== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + version "7.1.9" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d" + integrity sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" -"@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== +"@types/babel__generator@*": + 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/helper-plugin-utils" "^7.0.0" + "@babel/types" "^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== +"@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/helper-plugin-utils" "^7.0.0" + "@babel/parser" "^7.1.0" + "@babel/types" "^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== +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.12.tgz#22f49a028e69465390f87bb103ebd61bd086b8f5" + integrity sha512-t4CoEokHTfcyfb4hUaF9oOHu9RmmNWnm1CP0YmMqOOfClKascOmvlEM736vlqeScuGvBDsHkf8R2INd4DWreQA== dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/types" "^7.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" +"@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== -"@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== +"@types/fs-extra@^9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.1.tgz#91c8fc4c51f6d5dbe44c2ca9ab09310bd00c7918" + integrity sha512-B42Sxuaz09MhC3DDeW5kubRcQ5by4iuVQ0cRRWM2lggLzAa/KVom0Aft/208NgMvNQQZ86s5rVcqDdn/SH0/mg== dependencies: - "@babel/helper-hoist-variables" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - babel-plugin-dynamic-import-node "^2.3.0" + "@types/node" "*" -"@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== +"@types/graceful-fs@^4.1.2": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f" + integrity sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ== dependencies: - "@babel/helper-module-transforms" "^7.1.0" - "@babel/helper-plugin-utils" "^7.0.0" + "@types/node" "*" -"@babel/plugin-transform-named-capturing-groups-regex@^7.6.2": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.2.tgz#c1ca0bb84b94f385ca302c3932e870b0fb0e522b" - integrity sha512-xBdB+XOs+lgbZc2/4F5BVDVcDNS4tcSKQc96KmlqLEAwz6tpYPEvPdmDfvVG0Ssn8lAhronaRs6Z6KSexIpK5g== - dependencies: - regexpu-core "^4.6.0" +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== -"@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== +"@types/istanbul-lib-report@*": + 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: - "@babel/helper-plugin-utils" "^7.0.0" + "@types/istanbul-lib-coverage" "*" -"@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== +"@types/istanbul-reports@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.5.5" + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" -"@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== +"@types/jest@^25.2.3": + version "25.2.3" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.3.tgz#33d27e4c4716caae4eced355097a47ad363fdcaf" + integrity sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw== dependencies: - "@babel/helper-call-delegate" "^7.4.4" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + jest-diff "^25.2.1" + pretty-format "^25.2.1" -"@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== +"@types/node@*", "@types/node@^14.0.9": + version "14.0.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.14.tgz#24a0b5959f16ac141aeb0c5b3cd7a15b7c64cbce" + integrity sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/prettier@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.0.1.tgz#b6e98083f13faa1e5231bfa3bdb1b0feff536b6d" + integrity sha512-boy4xPNEtiw6N3abRhBi/e7hNvy3Tt8E9ZRAQrwAGzoCGZS/1wjo9KY7JHhnfnEsG5wSjDbymCozUM9a3ea7OQ== + +"@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 "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@^15.0.0": + version "15.0.5" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" + integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + "@types/yargs-parser" "*" -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" - integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A== +abab@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" + integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" + acorn "^7.1.1" + acorn-walk "^7.1.1" -"@babel/plugin-transform-react-jsx-self@^7.0.0": +acorn-walk@^7.1.1: version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" - integrity sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -"@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz#583b10c49cf057e237085bcbd8cc960bd83bd96b" - integrity sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" +acorn@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" + integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== -"@babel/plugin-transform-react-jsx@^7.0.0": - version "7.3.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290" - integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg== +ajv@^6.5.5: + version "6.12.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" + integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== dependencies: - "@babel/helper-builder-react-jsx" "^7.3.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" -"@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== +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== dependencies: - regenerator-transform "^0.14.0" + type-fest "^0.11.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== +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@^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: - "@babel/helper-plugin-utils" "^7.0.0" + color-convert "^1.9.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== +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: - "@babel/helper-plugin-utils" "^7.0.0" + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" -"@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== +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: - "@babel/helper-plugin-utils" "^7.0.0" + micromatch "^3.1.4" + normalize-path "^2.1.1" -"@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== +anymatch@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" + normalize-path "^3.0.0" + picomatch "^2.0.4" -"@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== +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: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" + sprintf-js "~1.0.2" -"@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== +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-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: - "@babel/helper-plugin-utils" "^7.0.0" + safer-buffer "~2.1.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== +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= + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + 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.10.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" + integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== + +babel-jest@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.1.0.tgz#b20751185fc7569a0f135730584044d1cb934328" + integrity sha512-Nkqgtfe7j6PxLO6TnCQQlkMm8wdTdnIF8xrdpooHCuD5hXRzVEPbPneTJKknH5Dsv3L8ip9unHDAp48YQ54Dkg== + dependencies: + "@jest/transform" "^26.1.0" + "@jest/types" "^26.1.0" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.1.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +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" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.6.0" + "@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@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.1.0.tgz#c6a774da08247a28285620a64dfadbd05dd5233a" + integrity sha512-qhqLVkkSlqmC83bdMhM8WW4Z9tB+JkjqAqlbbohS9sJLT5Ha2vfzuKqg5yenXrAjOPG2YC0WiXdH3a9PvB+YYw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz#b4b547acddbf963cba555ba9f9cbbb70bfd044da" + integrity sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +babel-preset-jest@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.1.0.tgz#612f714e5b457394acfd863793c564cbcdb7d1c1" + integrity sha512-na9qCqFksknlEj5iSdw1ehMVR06LCCTkZLGKeEtxDDdhg8xpUF09m29Kvh1pRbZ07h7AQ5ttLYUwpXL4tO6w7w== + dependencies: + babel-plugin-jest-hoist "^26.1.0" + babel-preset-current-node-syntax "^0.1.2" + +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" + +braces@^3.0.1: + 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@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -"@babel/preset-env@^7.3.4": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.2.tgz#abbb3ed785c7fe4220d4c82a53621d71fc0c75d3" - integrity sha512-Ru7+mfzy9M1/YTEtlDS8CD45jd22ngb9tXnn64DvQK3ooyqSw9K4K9DUWmYknTTVk4TqygL9dqCrZgm1HMea/Q== +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: - "@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.2" - "@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.2" - "@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.0" - browserslist "^4.6.0" - core-js-compat "^3.1.1" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.5.0" + fast-json-stable-stringify "2.x" -"@babel/preset-react@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" - integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w== +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: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" + node-int64 "^0.4.0" -"@babel/standalone@^7.3.4": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.6.2.tgz#484fb4fc7b9cec3dfbb6c012f0c81340596adb09" - integrity sha512-bfrGoJA6bHD3zJdTM8DANDKM2MjuhH7SLTeHuQMyfCn4VQgJlwe9MByqiTTKWZ1dAD0HrC7WDaL60WV+9HUXnQ== +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== -"@babel/template@^7.1.0", "@babel/template@^7.4.4": - 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" +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= -"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.2.tgz#b0e2bfd401d339ce0e6c05690206d1e11502ce2c" - integrity sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ== +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@^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== + +camelcase@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" + integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== + +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: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.6.2" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.6.2" - "@babel/types" "^7.6.0" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" + rsvp "^4.8.4" -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@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" +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -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== +chalk@^2.0.0, chalk@^2.3.0: + 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: - color-convert "^1.9.0" + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" -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== +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: - sprintf-js "~1.0.2" + ansi-styles "^4.1.0" + supports-color "^7.1.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== +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== dependencies: - object.assign "^4.1.0" + ansi-styles "^4.1.0" + supports-color "^7.1.0" -bluebird@^3.5.4: - version "3.7.0" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.0.tgz#56a6a886e03f6ae577cffedeb524f8f2450293cf" - integrity sha512-aBQ1FxIa7kSWCcmKHlcHFlT2jt6J/l4FzC7KcPELkOJOsPOb/bccdhmIrKDfXhwFrmc7vDoDrrepFvGqjyXGJg== +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -browserslist@^4.6.0, browserslist@^4.6.6: - version "4.7.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17" - integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA== - dependencies: - caniuse-lite "^1.0.30000989" - electron-to-chromium "^1.3.247" - node-releases "^1.1.29" +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== -caniuse-lite@^1.0.30000989: - version "1.0.30000999" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000999.tgz#427253a69ad7bea4aa8d8345687b8eec51ca0e43" - integrity sha512-1CUyKyecPeksKwXZvYw0tEoaMCo/RwBlXmEtN5vVnabvO0KPd9RQLcaAuR9/1F+KDMv6esmOFWlsXuzDk+8rxg== +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" -catharsis@^0.8.11: - version "0.8.11" - resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.11.tgz#d0eb3d2b82b7da7a3ce2efb1a7b00becc6643468" - integrity sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g== +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: - lodash "^4.17.14" + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== +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= + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +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: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" + map-visit "^1.0.0" + object-visit "^1.0.0" color-convert@^1.9.0: version "1.9.3" @@ -734,42 +1093,251 @@ 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= -core-js-compat@^3.1.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.2.1.tgz#0cbdbc2e386e8e00d3b85dc81c848effec5b8150" - integrity sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A== +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" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: - browserslist "^4.6.6" - semver "^6.3.0" + delayed-stream "~1.0.0" + +commander@^2.12.1: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +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= + +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== + 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= + +copyfiles@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.3.0.tgz#1c26ebbe3d46bba2d309a3fd8e3aaccf53af8c76" + integrity sha512-73v7KFuDFJ/ofkQjZBMjMBFWGgkS76DzXvBMUh7djsMOE5EELWtAO/hRB6Wr5Vj5Zg+YozvoHemv0vnXpqxmOQ== + dependencies: + glob "^7.0.5" + minimatch "^3.0.3" + mkdirp "^1.0.4" + noms "0.0.0" + through2 "^2.0.1" + yargs "^15.3.1" + +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: + 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" + +cross-spawn@^7.0.0, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cssom@^0.4.4: + 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@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +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" -debug@^4.1.0: +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +debug@^2.2.0, debug@^2.3.3: + 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@^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" -define-properties@^1.1.2: - 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== +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decimal.js@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.0.tgz#39466113a9e036111d02f82489b5fd6b0b5ed231" + integrity sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw== + +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-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= + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +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: - object-keys "^1.0.12" + is-descriptor "^0.1.0" -electron-to-chromium@^1.3.247: - version "1.3.277" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.277.tgz#38b7b297f9b3f67ea900a965c1b11a555de526ec" - integrity sha512-Czmsrgng89DOgJlIknnw9bn5431QdtnUwGp5YYiPwU1DbZQUxCLF+rc1ZC09VNAdalOPcvH6AE8BaA0H5HjI/w== +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" -entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== +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= + +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== + +diff-sequences@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" + integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== + +diff-sequences@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.0.0.tgz#0760059a5c287637b842bd7085311db7060e88a6" + integrity sha512-JC/eHYEC3aSS0vZGjuoc4vHA0yAQTzhQQldXMeMF+JlxLGJlCO38Gma82NV9gk1jGFz8mDzUMeaKXvjRRdJ2dg== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +duplexer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + +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@^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.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" + +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" escape-string-regexp@^1.0.5: version "1.0.5" @@ -781,11 +1349,231 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -esutils@^2.0.0, esutils@^2.0.2: +escodegen@^1.14.1: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +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== + +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== +event-stream@=3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE= + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + +exec-sh@^0.3.2: + 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@^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" + +execa@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.2.tgz#ad87fb7b2d9d564f70d2b62d511bee41d5cbb240" + integrity sha512-QI2zLa6CjGWdiQsmSkZoGtDx2N+cQIGb3yNolGTdjSQzydzLgYYf8LRuagp7S7fPimjcrzUDSUFd/MgzELMi4Q== + 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" + 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" + 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@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.1.0.tgz#8c62e31d0f8d5a8ebb186ee81473d15dd2fbf7c8" + integrity sha512-QbH4LZXDsno9AACrN9eM0zfnby9G+OsdNgZUohjg/P0mLy1O+/bzTAJGT6VSIjVCe8yKM6SzEl/ckEOFBT7Vnw== + dependencies: + "@jest/types" "^26.1.0" + ansi-styles "^4.0.0" + jest-get-type "^26.0.0" + jest-matcher-utils "^26.1.0" + jest-message-util "^26.1.0" + jest-regex-util "^26.0.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== + +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@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +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.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.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" + +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@^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== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +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" + +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -795,267 +1583,2005 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -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== +fs-extra@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +fs.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@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +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@^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-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +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-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" + 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@^7.0.0, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + 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" 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== -graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: +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.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +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.7.6: + version "4.7.6" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" + integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + 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.3: + 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: +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-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-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + 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" -inflection@^1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" - integrity sha1-ogCTVlbW9fa8TcdQLhrstwMihBY= +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= -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== +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: - loose-envify "^1.0.0" + is-number "^3.0.0" + kind-of "^4.0.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== +highlight.js@^10.0.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.1.1.tgz#691a2148a8d922bf12e52a294566a0d993b94c57" + integrity sha512-b4L09127uVa+9vkMgPpdUQP78ickGbHEQTWeBrQFTJZ4/n2aihWOGS0ZoUqAwjVmfjhq/C76HRzkqwZhK4sBbg== -"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== +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== -js2xmlparser@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-4.0.0.tgz#ae14cc711b2892083eed6e219fbc993d858bc3a5" - integrity sha512-WuNgdZOXVmBk5kUPMcTcVUpbGRzLfNkv7+7APq7WiDihpXVKrgxo6wwRpRl9OQeEBgKCVk9mR7RbzrnNWC8oBw== +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== dependencies: - xmlcreate "^2.0.0" + whatwg-encoding "^1.0.5" -jsdoc@^3.6.3: - version "3.6.3" - resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-3.6.3.tgz#dccea97d0e62d63d306b8b3ed1527173b5e2190d" - integrity sha512-Yf1ZKA3r9nvtMWHO1kEuMZTlHOF8uoQ0vyo5eH7SQy5YeIiHM+B0DgKnn+X6y6KDYZcF7G2SPkKF+JORCXWE/A== - dependencies: - "@babel/parser" "^7.4.4" - bluebird "^3.5.4" - catharsis "^0.8.11" - escape-string-regexp "^2.0.0" - js2xmlparser "^4.0.0" - klaw "^3.0.0" - markdown-it "^8.4.2" - markdown-it-anchor "^5.0.2" - marked "^0.7.0" - mkdirp "^0.5.1" - requizzle "^0.2.3" - strip-json-comments "^3.0.1" - taffydb "2.6.2" - underscore "~1.9.1" +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +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" -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +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== -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" +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" -klaw@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146" - integrity sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g== +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: - graceful-fs "^4.1.9" + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" -linkify-it@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" - integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw== +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflection@^1.12.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" + integrity sha1-ogCTVlbW9fa8TcdQLhrstwMihBY= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: - uc.micro "^1.0.1" + once "^1.3.0" + wrappy "1" -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== +inherits@2, inherits@^2.0.1, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -loose-envify@^1.0.0: +interpret@^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" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -markdown-it-anchor@^5.0.2: - version "5.2.4" - resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-5.2.4.tgz#d39306fe4c199705b4479d3036842cf34dcba24f" - integrity sha512-n8zCGjxA3T+Mx1pG8HEgbJbkB8JFUuRkeTZQuIM8iPY6oQ8sWOPRZJDFC9a/pNg2QkHEjjGkhBEl/RSyzaDZ3A== +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= -markdown-it@^8.4.2: - version "8.4.2" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54" - integrity sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ== +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: - argparse "^1.0.7" - entities "~1.1.1" - linkify-it "^2.0.0" - mdurl "^1.0.1" - uc.micro "^1.0.5" + kind-of "^3.0.2" -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== +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" -mdurl@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= +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= -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= +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== -mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= +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: - minimist "0.0.8" + ci-info "^2.0.0" -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== +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" -node-releases@^1.1.29: - version "1.1.34" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.34.tgz#ced4655ee1ba9c3a2c5dcbac385e19434155fd40" - integrity sha512-fNn12JTEfniTuCqo0r9jXgl44+KxRH/huV7zM/KAGOKxDKrHr6EbT7SSs4B+DNxyBE2mks28AD+Jw6PkfY5uwA== +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: - semver "^6.3.0" + kind-of "^6.0.0" -object-keys@^1.0.11, object-keys@^1.0.12: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== +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" -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== +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: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" -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== +is-docker@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" + integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ== -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== +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: - regenerate "^1.4.0" + is-plain-object "^2.0.4" -regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== +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== -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" +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== -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.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" - integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== - -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== +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: - jsesc "~0.5.0" + kind-of "^3.0.2" -requizzle@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.3.tgz#4675c90aacafb2c036bd39ba2daa4a1cb777fded" - integrity sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ== +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" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: - lodash "^4.17.14" + isobject "^3.0.1" -semver@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +is-potential-custom-element-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" + integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= -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== +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= -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= +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== -sprintf-js@~1.0.2: +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= + +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@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +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@^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@^4.0.0, istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +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 "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +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 "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.1.0.tgz#de66b0f30453bca2aff98e9400f75905da495305" + integrity sha512-HS5MIJp3B8t0NRKGMCZkcDUZo36mVRvrDETl81aqljT1S9tqiHRSpyoOvWg9ZilzZG9TDisDNaN1IXm54fLRZw== + dependencies: + "@jest/types" "^26.1.0" + execa "^4.0.0" + throat "^5.0.0" + +jest-cli@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.1.0.tgz#eb9ec8a18cf3b6aa556d9deaa9e24be12b43ad87" + integrity sha512-Imumvjgi3rU7stq6SJ1JUEMaV5aAgJYXIs0jPqdUnF47N/Tk83EXfmtvNKQ+SnFVI6t6mDOvfM3aA9Sg6kQPSw== + dependencies: + "@jest/core" "^26.1.0" + "@jest/test-result" "^26.1.0" + "@jest/types" "^26.1.0" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^26.1.0" + jest-util "^26.1.0" + jest-validate "^26.1.0" + prompts "^2.0.1" + yargs "^15.3.1" + +jest-config@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.1.0.tgz#9074f7539acc185e0113ad6d22ed589c16a37a73" + integrity sha512-ONTGeoMbAwGCdq4WuKkMcdMoyfs5CLzHEkzFOlVvcDXufZSaIWh/OXMLa2fwKXiOaFcqEw8qFr4VOKJQfn4CVw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.1.0" + "@jest/types" "^26.1.0" + babel-jest "^26.1.0" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.1.0" + jest-environment-node "^26.1.0" + jest-get-type "^26.0.0" + jest-jasmine2 "^26.1.0" + jest-regex-util "^26.0.0" + jest-resolve "^26.1.0" + jest-util "^26.1.0" + jest-validate "^26.1.0" + micromatch "^4.0.2" + pretty-format "^26.1.0" + +jest-diff@^25.2.1: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" + integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== + dependencies: + chalk "^3.0.0" + diff-sequences "^25.2.6" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + +jest-diff@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.1.0.tgz#00a549bdc936c9691eb4dc25d1fbd78bf456abb2" + integrity sha512-GZpIcom339y0OXznsEKjtkfKxNdg7bVbEofK8Q6MnevTIiR1jNhDWKhRX6X0SDXJlwn3dy59nZ1z55fLkAqPWg== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.0.0" + jest-get-type "^26.0.0" + pretty-format "^26.1.0" + +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== + dependencies: + detect-newline "^3.0.0" + +jest-each@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.1.0.tgz#e35449875009a22d74d1bda183b306db20f286f7" + integrity sha512-lYiSo4Igr81q6QRsVQq9LIkJW0hZcKxkIkHzNeTMPENYYDw/W/Raq28iJ0sLlNFYz2qxxeLnc5K2gQoFYlu2bA== + dependencies: + "@jest/types" "^26.1.0" + chalk "^4.0.0" + jest-get-type "^26.0.0" + jest-util "^26.1.0" + pretty-format "^26.1.0" + +jest-environment-jsdom@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.1.0.tgz#9dc7313ffe1b59761dad1fedb76e2503e5d37c5b" + integrity sha512-dWfiJ+spunVAwzXbdVqPH1LbuJW/kDL+FyqgA5YzquisHqTi0g9hquKif9xKm7c1bKBj6wbmJuDkeMCnxZEpUw== + dependencies: + "@jest/environment" "^26.1.0" + "@jest/fake-timers" "^26.1.0" + "@jest/types" "^26.1.0" + jest-mock "^26.1.0" + jest-util "^26.1.0" + jsdom "^16.2.2" + +jest-environment-node@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.1.0.tgz#8bb387b3eefb132eab7826f9a808e4e05618960b" + integrity sha512-DNm5x1aQH0iRAe9UYAkZenuzuJ69VKzDCAYISFHQ5i9e+2Tbeu2ONGY7YStubCLH8a1wdKBgqScYw85+ySxqxg== + dependencies: + "@jest/environment" "^26.1.0" + "@jest/fake-timers" "^26.1.0" + "@jest/types" "^26.1.0" + jest-mock "^26.1.0" + jest-util "^26.1.0" + +jest-get-type@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" + integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== + +jest-get-type@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.0.0.tgz#381e986a718998dbfafcd5ec05934be538db4039" + integrity sha512-zRc1OAPnnws1EVfykXOj19zo2EMw5Hi6HLbFCSjpuJiXtOWAYIjNsHVSbpQ8bDX7L5BGYGI8m+HmKdjHYFF0kg== + +jest-haste-map@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.1.0.tgz#ef31209be73f09b0d9445e7d213e1b53d0d1476a" + integrity sha512-WeBS54xCIz9twzkEdm6+vJBXgRBQfdbbXD0dk8lJh7gLihopABlJmIQFdWSDDtuDe4PRiObsjZSUjbJ1uhWEpA== + dependencies: + "@jest/types" "^26.1.0" + "@types/graceful-fs" "^4.1.2" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-serializer "^26.1.0" + jest-util "^26.1.0" + jest-worker "^26.1.0" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + which "^2.0.2" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.1.0.tgz#4dfe349b2b2d3c6b3a27c024fd4cb57ac0ed4b6f" + integrity sha512-1IPtoDKOAG+MeBrKvvuxxGPJb35MTTRSDglNdWWCndCB3TIVzbLThRBkwH9P081vXLgiJHZY8Bz3yzFS803xqQ== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.1.0" + "@jest/source-map" "^26.1.0" + "@jest/test-result" "^26.1.0" + "@jest/types" "^26.1.0" + chalk "^4.0.0" + co "^4.6.0" + expect "^26.1.0" + is-generator-fn "^2.0.0" + jest-each "^26.1.0" + jest-matcher-utils "^26.1.0" + jest-message-util "^26.1.0" + jest-runtime "^26.1.0" + jest-snapshot "^26.1.0" + jest-util "^26.1.0" + pretty-format "^26.1.0" + throat "^5.0.0" + +jest-leak-detector@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.1.0.tgz#039c3a07ebcd8adfa984b6ac015752c35792e0a6" + integrity sha512-dsMnKF+4BVOZwvQDlgn3MG+Ns4JuLv8jNvXH56bgqrrboyCbI1rQg6EI5rs+8IYagVcfVP2yZFKfWNZy0rK0Hw== + dependencies: + jest-get-type "^26.0.0" + pretty-format "^26.1.0" + +jest-matcher-utils@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.1.0.tgz#cf75a41bd413dda784f022de5a65a2a5c73a5c92" + integrity sha512-PW9JtItbYvES/xLn5mYxjMd+Rk+/kIt88EfH3N7w9KeOrHWaHrdYPnVHndGbsFGRJ2d5gKtwggCvkqbFDoouQA== + dependencies: + chalk "^4.0.0" + jest-diff "^26.1.0" + jest-get-type "^26.0.0" + pretty-format "^26.1.0" + +jest-message-util@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.1.0.tgz#52573fbb8f5cea443c4d1747804d7a238a3e233c" + integrity sha512-dY0+UlldiAJwNDJ08SF0HdF32g9PkbF2NRK/+2iMPU40O6q+iSn1lgog/u0UH8ksWoPv0+gNq8cjhYO2MFtT0g== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.1.0" + "@types/stack-utils" "^1.0.1" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-mock@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.1.0.tgz#80d8286da1f05a345fbad1bfd6fa49a899465d3d" + integrity sha512-1Rm8EIJ3ZFA8yCIie92UbxZWj9SuVmUGcyhLHyAhY6WI3NIct38nVcfOPWhJteqSn8V8e3xOMha9Ojfazfpovw== + dependencies: + "@jest/types" "^26.1.0" + +jest-pnp-resolver@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-resolve-dependencies@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.1.0.tgz#1ce36472f864a5dadf7dc82fa158e1c77955691b" + integrity sha512-fQVEPHHQ1JjHRDxzlLU/buuQ9om+hqW6Vo928aa4b4yvq4ZHBtRSDsLdKQLuCqn5CkTVpYZ7ARh2fbA8WkRE6g== + dependencies: + "@jest/types" "^26.1.0" + jest-regex-util "^26.0.0" + jest-snapshot "^26.1.0" + +jest-resolve@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.1.0.tgz#a530eaa302b1f6fa0479079d1561dd69abc00e68" + integrity sha512-KsY1JV9FeVgEmwIISbZZN83RNGJ1CC+XUCikf/ZWJBX/tO4a4NvA21YixokhdR9UnmPKKAC4LafVixJBrwlmfg== + dependencies: + "@jest/types" "^26.1.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.1" + jest-util "^26.1.0" + read-pkg-up "^7.0.1" + resolve "^1.17.0" + slash "^3.0.0" + +jest-runner@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.1.0.tgz#457f7fc522afe46ca6db1dccf19f87f500b3288d" + integrity sha512-elvP7y0fVDREnfqit0zAxiXkDRSw6dgCkzPCf1XvIMnSDZ8yogmSKJf192dpOgnUVykmQXwYYJnCx641uLTgcw== + dependencies: + "@jest/console" "^26.1.0" + "@jest/environment" "^26.1.0" + "@jest/test-result" "^26.1.0" + "@jest/types" "^26.1.0" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^26.1.0" + jest-docblock "^26.0.0" + jest-haste-map "^26.1.0" + jest-jasmine2 "^26.1.0" + jest-leak-detector "^26.1.0" + jest-message-util "^26.1.0" + jest-resolve "^26.1.0" + jest-runtime "^26.1.0" + jest-util "^26.1.0" + jest-worker "^26.1.0" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.1.0.tgz#45a37af42115f123ed5c51f126c05502da2469cb" + integrity sha512-1qiYN+EZLmG1QV2wdEBRf+Ci8i3VSfIYLF02U18PiUDrMbhfpN/EAMMkJtT02jgJUoaEOpHAIXG6zS3QRMzRmA== + dependencies: + "@jest/console" "^26.1.0" + "@jest/environment" "^26.1.0" + "@jest/fake-timers" "^26.1.0" + "@jest/globals" "^26.1.0" + "@jest/source-map" "^26.1.0" + "@jest/test-result" "^26.1.0" + "@jest/transform" "^26.1.0" + "@jest/types" "^26.1.0" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^26.1.0" + jest-haste-map "^26.1.0" + jest-message-util "^26.1.0" + jest-mock "^26.1.0" + jest-regex-util "^26.0.0" + jest-resolve "^26.1.0" + jest-snapshot "^26.1.0" + jest-util "^26.1.0" + jest-validate "^26.1.0" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.3.1" + +jest-serializer@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.1.0.tgz#72a394531fc9b08e173dc7d297440ac610d95022" + integrity sha512-eqZOQG/0+MHmr25b2Z86g7+Kzd5dG9dhCiUoyUNJPgiqi38DqbDEOlHcNijyfZoj74soGBohKBZuJFS18YTJ5w== + dependencies: + graceful-fs "^4.2.4" + +jest-snapshot@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.1.0.tgz#c36ed1e0334bd7bd2fe5ad07e93a364ead7e1349" + integrity sha512-YhSbU7eMTVQO/iRbNs8j0mKRxGp4plo7sJ3GzOQ0IYjvsBiwg0T1o0zGQAYepza7lYHuPTrG5J2yDd0CE2YxSw== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.1.0" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.1.0" + graceful-fs "^4.2.4" + jest-diff "^26.1.0" + jest-get-type "^26.0.0" + jest-haste-map "^26.1.0" + jest-matcher-utils "^26.1.0" + jest-message-util "^26.1.0" + jest-resolve "^26.1.0" + natural-compare "^1.4.0" + pretty-format "^26.1.0" + semver "^7.3.2" + +jest-util@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.1.0.tgz#80e85d4ba820decacf41a691c2042d5276e5d8d8" + integrity sha512-rNMOwFQevljfNGvbzNQAxdmXQ+NawW/J72dmddsK0E8vgxXCMtwQ/EH0BiWEIxh0hhMcTsxwAxINt7Lh46Uzbg== + dependencies: + "@jest/types" "^26.1.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + +jest-validate@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.1.0.tgz#942c85ad3d60f78250c488a7f85d8f11a29788e7" + integrity sha512-WPApOOnXsiwhZtmkDsxnpye+XLb/tUISP+H6cHjfUIXvlG+eKwP+isnivsxlHCPaO9Q5wvbhloIBkdF3qUn+Nw== + dependencies: + "@jest/types" "^26.1.0" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.0.0" + leven "^3.1.0" + pretty-format "^26.1.0" + +jest-watcher@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.1.0.tgz#99812a0cd931f0cb3d153180426135ab83e4d8f2" + integrity sha512-ffEOhJl2EvAIki613oPsSG11usqnGUzIiK7MMX6hE4422aXOcVEG3ySCTDFLn1+LZNXGPE8tuJxhp8OBJ1pgzQ== + dependencies: + "@jest/test-result" "^26.1.0" + "@jest/types" "^26.1.0" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.1.0" + string-length "^4.0.1" + +jest-worker@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.1.0.tgz#65d5641af74e08ccd561c240e7db61284f82f33d" + integrity sha512-Z9P5pZ6UC+kakMbNJn+tA2RdVdNX5WH1x+5UCBZ9MxIK24pjYtFt96fK+UwBTrjLYm232g1xz0L3eTh51OW+yQ== + dependencies: + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@^26.0.1: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.1.0.tgz#2f3aa7bcffb9bfd025473f83bbbf46a3af026263" + integrity sha512-LIti8jppw5BcQvmNJe4w2g1N/3V68HUfAv9zDVm7v+VAtQulGhH0LnmmiVkbNE4M4I43Bj2fXPiBGKt26k9tHw== + dependencies: + "@jest/core" "^26.1.0" + import-local "^3.0.2" + jest-cli "^26.1.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.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + 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@^16.2.2: + version "16.2.2" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.2.2.tgz#76f2f7541646beb46a938f5dc476b88705bedf2b" + integrity sha512-pDFQbcYtKBHxRaP55zGXCJWgFHkDAYbKcsXEK/3Icu9nKYZkutUXfLBwbD+09XDutkYSHcgfQLZ0qvpAAm9mvg== + dependencies: + abab "^2.0.3" + acorn "^7.1.1" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.2.0" + data-urls "^2.0.0" + decimal.js "^10.2.0" + domexception "^2.0.1" + escodegen "^1.14.1" + html-encoding-sniffer "^2.0.1" + is-potential-custom-element-name "^1.0.0" + nwsapi "^2.2.0" + parse5 "5.1.1" + request "^2.88.2" + request-promise-native "^1.0.8" + saxes "^5.0.0" + symbol-tree "^3.2.4" + tough-cookie "^3.0.1" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.0.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + ws "^7.2.3" + 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-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.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +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" + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + 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.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +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== + +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: + 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" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +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" + 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@^4.17.13, lodash@^4.17.15: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +lunr@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.8.tgz#a8b89c31f30b5a044b97d2d28e2da191b6ba2072" + integrity sha512-oxMeX/Y35PNFuZoHp+jUj5OSEmLCaIH4KTFJh7a93cHBoFmpw2IoPs22VIz7vyO2YUnx2Tn9dzIwO2P/4quIRg== + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@1.x: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +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-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ= + +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" + +marked@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-1.0.0.tgz#d35784245a04871e5988a491e28867362e941693" + integrity sha512-Wo+L1pWTVibfrSr+TTtMuiMfNzmZWiOPeO7rZsQUY5bgsxpHesBEcIWJloWVTFnrMXnf/TL30eTFSGJddmQAng== + +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@4.x, 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" + +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.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.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== + +minimatch@^3.0.0, minimatch@^3.0.3, 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@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +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@1.x, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^0.5.3: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + 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== + +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= + +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-cleanup@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c" + integrity sha1-esGavSl+Caf3KnFUXZUbUX5N3iw= + +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@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-7.0.1.tgz#a355e33e6bebacef9bf8562689aed0f4230ca6f9" + integrity sha512-VkzhierE7DBmQEElhTGJIoiZa1oqRijOtgOlsXg32KrJRXsPy0NXFBqWGW/wTswnJlDCs5viRYaqWguqzsKcmg== + dependencies: + growly "^1.3.0" + is-wsl "^2.1.1" + semver "^7.2.1" + shellwords "^0.1.1" + uuid "^7.0.3" + which "^2.0.2" + +noms@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" + integrity sha1-2o69nzr51nYJGbJ9nNyAkqczKFk= + dependencies: + inherits "^2.0.1" + readable-stream "~1.0.31" + +normalize-package-data@^2.5.0: + 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" + +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-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" + +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: + path-key "^3.0.0" + +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-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-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.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" + +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@^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: + mimic-fn "^2.1.0" + +optionator@^0.8.1: + 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" + +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-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^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-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== + +parse-json@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" + integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + lines-and-columns "^1.1.6" + +parse5@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +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@^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" + 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-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" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= + dependencies: + through "~2.3" + +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= + +picomatch@^2.0.4, picomatch@^2.0.5: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +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@^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== + dependencies: + find-up "^4.0.0" + +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@^25.2.1, pretty-format@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" + integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== + dependencies: + "@jest/types" "^25.5.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + +pretty-format@^26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.1.0.tgz#272b9cd1f1a924ab5d443dc224899d7a65cb96ec" + integrity sha512-GmeO1PEYdM+non4BKCj+XsPJjFOJIPnsLewqhDVoqY1xo0yNmDas7tC2XwpMrRAHR3MaE2hPo37deX5OisJ2Wg== + dependencies: + "@jest/types" "^26.1.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + +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.3: + 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.3.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" + integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.4" + +ps-tree@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" + integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== + dependencies: + event-stream "=3.3.4" + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +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@^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== + +react-is@^16.12.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +readable-stream@~1.0.31: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + 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" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.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" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.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" + 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.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.15" + +request-promise-native@^1.0.8: + 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.3" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + 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.3" + 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.5.0" + 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@^3.0.0: + version "3.0.0" + 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@^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" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.17.0, resolve@^1.3.2: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +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@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + 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== + +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +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" + +saxes@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.x, semver@^7.2.1, semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +semver@^6.0.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== + +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-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== + +shelljs@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +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.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +sisteransi@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +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.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.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.6: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + 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== + +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== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + 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" + +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= + 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" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -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== +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@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" + integrity sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg== + dependencies: + escape-string-regexp "^2.0.0" + +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= + +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ= + dependencies: + duplexer "~0.1.1" + +string-argv@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.1.2.tgz#c5b7bc03fb2b11983ba3a72333dd0559e77e4738" + integrity sha512-mBqPGEOMNJKXRo7z0keX0wlAhbBAjilUdPW13nN0PecVryZxdHIeM7TqbsSUA7VYuS00HGC6mojP7DlQzfa9ZA== + +string-length@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" + integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.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_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +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@^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@^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== supports-color@^5.3.0: version "5.5.0" @@ -1064,55 +3590,501 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -taffydb@2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268" - integrity sha1-fLy2S1oUG2ou/CxdLGe04VCyomg= +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.1.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +symbol-tree@^3.2.4: + 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== + +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" + +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: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +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== + +through2@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@2, through@~2.3, through@~2.3.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +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= -uc.micro@^1.0.1, uc.micro@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" - integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== +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" -underscore@~1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" - integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== +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" -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== +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" -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== +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: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" -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== +tough-cookie@^2.3.3, tough-cookie@~2.5.0: + 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" -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== +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" + +tr46@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" + integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== + dependencies: + punycode "^2.1.1" + +ts-jest@^26.1.0: + version "26.1.1" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.1.1.tgz#b98569b8a4d4025d966b3d40c81986dd1c510f8d" + integrity sha512-Lk/357quLg5jJFyBQLnSbhycnB3FPe+e9i7ahxokyXxAYoB0q1pPmqxxRPYr4smJic1Rjcf7MXDBhZWgxlli0A== + 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" + micromatch "4.x" + mkdirp "1.x" + semver "7.x" + yargs-parser "18.x" + +tsc-watch@^4.2.9: + version "4.2.9" + resolved "https://registry.yarnpkg.com/tsc-watch/-/tsc-watch-4.2.9.tgz#d93fc74233ca4ef7ee6b12d08c0fe6aca3e19044" + integrity sha512-DlTaoDs74+KUpyWr7dCGhuscAUKCz6CiFduBN7R9RbLJSSN1moWdwoCLASE7+zLgGvV5AwXfYDiEMAsPGaO+Vw== + dependencies: + cross-spawn "^7.0.3" + node-cleanup "^2.1.2" + ps-tree "^1.2.0" + string-argv "^0.1.1" + strip-ansi "^6.0.0" + +tslib@^1.10.0, tslib@^1.8.1: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + +tslint@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.2.tgz#2433c248512cc5a7b2ab88ad44a6b1b34c6911cf" + integrity sha512-UyNrLdK3E0fQG/xWNqAFAC5ugtFyPO4JJR1KyyfQAyzR8W0fTRrC91A8Wej4BntFzcvETdCSDa/4PnNYJQLYiA== + dependencies: + "@babel/code-frame" "^7.0.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^4.0.1" + glob "^7.1.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + mkdirp "^0.5.3" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.10.0" + tsutils "^2.29.0" + +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== + 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" + +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.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +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" + +typedoc-default-themes@^0.10.1: + version "0.10.2" + resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.10.2.tgz#743380a80afe62c5ef92ca1bd4abe2ac596be4d2" + integrity sha512-zo09yRj+xwLFE3hyhJeVHWRSPuKEIAsFK5r2u47KL/HBKqpwdUSanoaz5L34IKiSATFrjG5ywmIu98hPVMfxZg== + dependencies: + lunr "^2.3.8" + +typedoc@0.17.7: + version "0.17.7" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.17.7.tgz#70797401140403a5f91589ed3f4f24c03841bf7a" + integrity sha512-PEnzjwQAGjb0O8a6VDE0lxyLAadqNujN5LltsTUhZETolRMiIJv6Ox+Toa8h0XhKHqAOh8MOmB0eBVcWz6nuAw== + dependencies: + fs-extra "^8.1.0" + handlebars "^4.7.6" + highlight.js "^10.0.0" + lodash "^4.17.15" + lunr "^2.3.8" + marked "1.0.0" + minimatch "^3.0.0" + progress "^2.0.3" + shelljs "^0.8.4" + typedoc-default-themes "^0.10.1" + +typescript@3.9.x: + version "3.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.5.tgz#586f0dba300cde8be52dd1ac4f7e1009c1b13f36" + integrity sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ== + +uglify-js@^3.1.4: + version "3.10.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.10.0.tgz#397a7e6e31ce820bfd1cb55b804ee140c587a9e7" + integrity sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA== + +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" 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== -xmlcreate@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-2.0.1.tgz#2ec38bd7b708d213fd1a90e2431c4af9c09f6a52" - integrity sha512-MjGsXhKG8YjTKrDCXseFo3ClbMGvUD4en29H2Cev1dv4P/chlpw6KdYmlCWDkhosBVKRDjM836+3e3pm1cBNJA== +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +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= + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" + integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== + +v8-to-istanbul@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" + integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== + 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" + 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.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + 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" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +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.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@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.1.0.tgz#c628acdcf45b82274ce7281ee31dd3c839791771" + integrity sha512-vEIkwNi9Hqt4TV9RdnaBPNt+E2Sgmo3gePebCRgZ1R7g6d23+53zCTnuB0amKI4AXq6VM8jj2DUAa0S1vjJxkw== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^5.0.0" + +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: + 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" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +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" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +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 "^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@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.2.3: + version "7.3.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd" + integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w== + +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.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +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== + +yargs-parser@18.x, yargs-parser@^18.1.1: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^15.3.1: + version "15.3.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" + integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== + dependencies: + 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 "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.1" diff --git a/packages/cubejs-client-core/dist/index.d.ts b/packages/cubejs-client-core/dist/index.d.ts deleted file mode 100644 index c7dc5db838229..0000000000000 --- a/packages/cubejs-client-core/dist/index.d.ts +++ /dev/null @@ -1,165 +0,0 @@ -export interface TransportInterface { - request(method: string, params: any): () => Promise; -} - -export type CubeJSApiOptions = { - apiUrl: string; - headers?: Record; - pollInterval?: number; - transport?: TransportInterface; -}; - -export type LoadMethodOptions = { - mutexKey?: string; - mutexObj?: {}; - progressCallback?(result: ProgressResult): void; - subscribe?: boolean; -}; - -export type LoadMethodCallback = (error: Error | null, resultSet: T) => void; - -export type QueryOrder = 'asc' | 'desc'; - -export type Annotation = { - title: string; - shortTitle: string; - type: string; - format?: 'currency' | 'percentage'; -}; - -export type QueryAnnotations = { - dimensions: Record; - measures: Record; - timeDimensions: Record; -}; - -export type LoadResponse = { - annotation: QueryAnnotations; - lastRefreshTime: string; - query: Query; - data: T[]; -}; - -export type PivotConfig = { - x?: string[]; - y?: string[]; - fillMissingDates?: boolean | null; -}; - -export type Column = { - key: string; - title: string; -} - -export class ResultSet { - static measureFromAxis(axisValues: string[]): string; - - loadResponse: LoadResponse; - - new(loadResponse: LoadResponse): ResultSet; - - series(pivotConfig?: PivotConfig): T[]; - seriesNames(pivotConfig?: PivotConfig): Column[]; - - chartPivot(pivotConfig?: PivotConfig): T[]; - - tablePivot(pivotConfig?: PivotConfig): T[]; - tableColumns(pivotConfig?: PivotConfig): Column[]; -} - -export type Filter = { - dimension?: string; - member?: string; - operator: string; - values?: string[]; -}; - -export enum TimeDimensionGranularities { - HOUR = 'hour', - DAY = 'day', - WEEK = 'week', - MONTH = 'month', - YEAR = 'year', -} - -export type TimeDimension = { - dimension: string; - dateRange?: string | string[]; - granularity?: TimeDimensionGranularities; -}; - -export type Query = { - measures?: string[]; - dimensions?: string[]; - filters?: Filter[]; - timeDimensions?: TimeDimension[]; - segments?: string[]; - limit?: number; - offset?: number; - order?: { - [key: string]: QueryOrder; - }; - timezone?: string; - renewQuery?: boolean; - ungrouped?: boolean; -}; - -export type ProgressResponse = { - stage: string; - timeElapsed: number; -} - -export class ProgressResult { - new(progressResponse: ProgressResponse): ProgressResult; - - stage(): string; - timeElapsed(): string; -} - -type PrimitiveValue = boolean | string | number; -export type SqlQueryTuple = [string, PrimitiveValue]; - -export type SqlData = { - aliasNameToMember: Record; - cacheKeyQueries: { - queries: SqlQueryTuple[]; - }; - dataSource: boolean; - external: boolean; - sql: SqlQueryTuple; -}; - -export type SqlApiResponse = { - sql: SqlData; -} - -export class SqlQuery { - new(sqlQuery: SqlApiResponse): SqlQuery; - - rawQuery(): SqlData; - sql(): string; -} - -export class Meta { - new(metaResponse: {}): Meta; -} - -export class CubejsApi { - new(apiToken: string, options: CubeJSApiOptions): CubejsApi; - - load(query: Query, options?: LoadMethodOptions): Promise; - load(query: Query, options?: LoadMethodOptions, callback?: LoadMethodCallback): void; - - sql(query: Query, options?: LoadMethodOptions): Promise; - sql(query: Query, options?: LoadMethodOptions, callback?: LoadMethodCallback): void; - - meta(options?: LoadMethodOptions): Promise; - meta(options?: LoadMethodOptions, callback?: LoadMethodCallback): void; -} - -declare function cubejs( - apiToken: string, - options: CubeJSApiOptions, -): CubejsApi; - -export default cubejs; diff --git a/packages/cubejs-client-core/index.d.ts b/packages/cubejs-client-core/index.d.ts new file mode 100644 index 0000000000000..c5aa0b2213fdb --- /dev/null +++ b/packages/cubejs-client-core/index.d.ts @@ -0,0 +1,597 @@ +/** + * Vanilla JavaScript Cube.js client. + */ +declare module '@cubejs-client/core' { + export interface TransportInterface { + request(method: string, params: any): () => Promise; + } + + export type CubeJSApiOptions = { + apiUrl: string; + headers?: Record; + pollInterval?: number; + transport?: TransportInterface; + }; + + export type LoadMethodOptions = { + mutexKey?: string; + mutexObj?: {}; + progressCallback?(result: ProgressResult): void; + subscribe?: boolean; + }; + + export type LoadMethodCallback = (error: Error | null, resultSet: T) => void; + + export type QueryOrder = 'asc' | 'desc'; + + export type Annotation = { + title: string; + shortTitle: string; + type: string; + format?: 'currency' | 'percentage'; + }; + + export type QueryAnnotations = { + dimensions: Record; + measures: Record; + timeDimensions: Record; + }; + + export type LoadResponse = { + annotation: QueryAnnotations; + lastRefreshTime: string; + query: Query; + data: T[]; + }; + + /** + * Configuration object that contains information about pivot axes and other options. + * + * Let's apply `pivotConfig` and see how it affects the axes + * ```js + * // Example query + * { + * measures: ['Orders.count'], + * dimensions: ['Users.country', 'Users.gender'] + * } + * ``` + * If we put the `Users.gender` dimension on **y** axis + * ```js + * resultSet.tablePivot({ + * x: ['Users.country'], + * y: ['Users.gender', 'measures'] + * }) + * ``` + * + * The resulting table will look the following way + * + * | Users Country | male, Orders.count | female, Orders.count | + * | ------------- | ------------------ | -------------------- | + * | Australia | 3 | 27 | + * | Germany | 10 | 12 | + * | US | 5 | 7 | + * + * Now let's put the `Users.country` dimension on **y** axis instead + * ```js + * resultSet.tablePivot({ + * x: ['Users.gender'], + * y: ['Users.country', 'measures'], + * }); + * ``` + * + * in this case the `Users.country` values will be laid out on **y** or **columns** axis + * + * | Users Gender | Australia, Orders.count | Germany, Orders.count | US, Orders.count | + * | ------------ | ----------------------- | --------------------- | ---------------- | + * | male | 3 | 10 | 5 | + * | female | 27 | 12 | 7 | + * + * It's also possible to put the `measures` on **x** axis. But in either case it should always be the last item of the array. + * ```js + * resultSet.tablePivot({ + * x: ['Users.gender', 'measures'], + * y: ['Users.country'], + * }); + * ``` + * + * | Users Gender | measures | Australia | Germany | US | + * | ------------ | ------------ | --------- | ------- | --- | + * | male | Orders.count | 3 | 10 | 5 | + * | female | Orders.count | 27 | 12 | 7 | + */ + export type PivotConfig = { + /** + * Dimensions to put on **x** or **rows** axis. + */ + x?: string[]; + /** + * Dimensions to put on **y** or **columns** axis. + */ + y?: string[]; + /** + * If `true` missing dates on the time dimensions will be filled with `0` for all measures.Note: the `fillMissingDates` option set to `true` will override any **order** applied to the query + */ + fillMissingDates?: boolean | null; + }; + + export type DrillDownLocator = { + xValues: string[]; + yValues?: string[]; + }; + + export type Series = { + key: string; + title: string; + series: T[]; + }; + + export type Column = { + key: string; + title: string; + series: []; + }; + + export type SeriesNamesColumn = { + key: string; + title: string; + yValues: string[]; + }; + + export type ChartPivotRow = { + x: string; + xValues: string[]; + [key: string]: any; + }; + + export type TableColumn = { + key: string; + dataIndex: string; + meta: any; + type: string | number; + title: string; + shortTitle: string; + format: undefined; + children?: TableColumn[]; + }; + + export type PivotRow = { + xValues: Array; + yValuesArray: Array<[string[], number]>; + }; + + /** + * Provides a convenient interface for data manipulation. + */ + export class ResultSet { + static measureFromAxis(axisValues: string[]): string; + static getNormalizedPivotConfig(query: Query, pivotConfig?: Partial): PivotConfig; + + constructor(loadResponse: LoadResponse, options?: Object); + + loadResponse: LoadResponse; + + normalizePivotConfig(pivotConfig?: PivotConfig): PivotConfig; + + /** + * Returns a measure drill down query. + * + * Provided you have a measure with the defined `drillMemebers` on the `Orders` cube + * ```js + * measures: { + * count: { + * type: `count`, + * drillMembers: [Orders.status, Users.city, count], + * }, + * // ... + * } + * ``` + * + * Then you can use the `drillDown` method to see the rows that contribute to that metric + * ```js + * resultSet.drillDown( + * { + * xValues, + * yValues, + * }, + * // you should pass the `pivotConfig` if you have used it for axes manipulation + * pivotConfig + * ) + * ``` + * + * the result will be a query with the required filters applied and the dimensions/measures filled out + * ```js + * { + * measures: ['Orders.count'], + * dimensions: ['Orders.status', 'Users.city'], + * filters: [ + * // dimension and measure filters + * ], + * timeDimensions: [ + * //... + * ] + * } + * ``` + * @returns Drill down query + */ + drillDown(drillDownLocator: DrillDownLocator, pivotConfig?: PivotConfig): Query | null; + + /** + * Returns an array of series with key, title and series data. + * ```js + * // For the query + * { + * measures: ['Stories.count'], + * timeDimensions: [{ + * dimension: 'Stories.time', + * dateRange: ['2015-01-01', '2015-12-31'], + * granularity: 'month' + * }] + * } + * + * // ResultSet.series() will return + * [ + * { + * key: 'Stories.count', + * title: 'Stories Count', + * series: [ + * { x: '2015-01-01T00:00:00', value: 27120 }, + * { x: '2015-02-01T00:00:00', value: 25861 }, + * { x: '2015-03-01T00:00:00', value: 29661 }, + * //... + * ], + * }, + * ] + * ``` + */ + series(pivotConfig?: PivotConfig): Series[]; + + /** + * Returns an array of series objects, containing `key` and `title` parameters. + * ```js + * // For query + * { + * measures: ['Stories.count'], + * timeDimensions: [{ + * dimension: 'Stories.time', + * dateRange: ['2015-01-01', '2015-12-31'], + * granularity: 'month' + * }] + * } + * + * // ResultSet.seriesNames() will return + * [ + * { + * key: 'Stories.count', + * title: 'Stories Count', + * yValues: ['Stories.count'], + * }, + * ] + * ``` + * @returns An array of series names + */ + seriesNames(pivotConfig?: PivotConfig): SeriesNamesColumn[]; + + /** + * Base method for pivoting [ResultSet](#result-set) data. + * Most of the times shouldn't be used directly and [chartPivot](#result-set-chart-pivot) + * or (tablePivot)[#table-pivot] should be used instead. + * + * You can find the examples of using the `pivotConfig` [here](#pivot-config) + * ```js + * // For query + * { + * measures: ['Stories.count'], + * timeDimensions: [{ + * dimension: 'Stories.time', + * dateRange: ['2015-01-01', '2015-03-31'], + * granularity: 'month' + * }] + * } + * + * // ResultSet.pivot({ x: ['Stories.time'], y: ['measures'] }) will return + * [ + * { + * xValues: ["2015-01-01T00:00:00"], + * yValuesArray: [ + * [['Stories.count'], 27120] + * ] + * }, + * { + * xValues: ["2015-02-01T00:00:00"], + * yValuesArray: [ + * [['Stories.count'], 25861] + * ] + * }, + * { + * xValues: ["2015-03-01T00:00:00"], + * yValuesArray: [ + * [['Stories.count'], 29661] + * ] + * } + * ] + * ``` + * @returns An array of pivoted rows. + */ + pivot(pivotConfig?: PivotConfig): PivotRow[]; + + /** + * Returns normalized query result data in the following format. + * + * You can find the examples of using the `pivotConfig` [here](#pivot-config) + * ```js + * // For the query + * { + * measures: ['Stories.count'], + * timeDimensions: [{ + * dimension: 'Stories.time', + * dateRange: ['2015-01-01', '2015-12-31'], + * granularity: 'month' + * }] + * } + * + * // ResultSet.chartPivot() will return + * [ + * { "x":"2015-01-01T00:00:00", "Stories.count": 27120, "xValues": ["2015-01-01T00:00:00"] }, + * { "x":"2015-02-01T00:00:00", "Stories.count": 25861, "xValues": ["2015-02-01T00:00:00"] }, + * { "x":"2015-03-01T00:00:00", "Stories.count": 29661, "xValues": ["2015-03-01T00:00:00"] }, + * //... + * ] + * ``` + */ + chartPivot(pivotConfig?: PivotConfig): ChartPivotRow[]; + + /** + * Returns normalized query result data prepared for visualization in the table format. + * + * You can find the examples of using the `pivotConfig` [here](#pivot-config) + * + * For example: + * ```js + * // For the query + * { + * measures: ['Stories.count'], + * timeDimensions: [{ + * dimension: 'Stories.time', + * dateRange: ['2015-01-01', '2015-12-31'], + * granularity: 'month' + * }] + * } + * + * // ResultSet.tablePivot() will return + * [ + * { "Stories.time": "2015-01-01T00:00:00", "Stories.count": 27120 }, + * { "Stories.time": "2015-02-01T00:00:00", "Stories.count": 25861 }, + * { "Stories.time": "2015-03-01T00:00:00", "Stories.count": 29661 }, + * //... + * ] + * ``` + * @returns An array of pivoted rows + */ + tablePivot(pivotConfig?: PivotConfig): Array<{ [key: string]: string | number | boolean }>; + + /** + * Returns array of column definitions for `tablePivot`. + * + * For example: + * ```js + * // For the query + * { + * measures: ['Stories.count'], + * timeDimensions: [{ + * dimension: 'Stories.time', + * dateRange: ['2015-01-01', '2015-12-31'], + * granularity: 'month' + * }] + * } + * + * // ResultSet.tableColumns() will return + * [ + * { + * key: 'Stories.time', + * dataIndex: 'Stories.time', + * title: 'Stories Time', + * shortTitle: 'Time', + * type: 'time', + * format: undefined, + * }, + * { + * key: 'Stories.count', + * dataIndex: 'Stories.count', + * title: 'Stories Count', + * shortTitle: 'Count', + * type: 'count', + * format: undefined, + * }, + * //... + * ] + * ``` + * + * In case we want to pivot the table axes + * ```js + * // Let's take this query as an example + * { + * measures: ['Orders.count'], + * dimensions: ['Users.country', 'Users.gender'] + * } + * + * // and put the dimensions on `y` axis + * resultSet.tableColumns({ + * x: [], + * y: ['Users.country', 'Users.gender', 'measures'] + * }) + * ``` + * + * then `tableColumns` will group the table head and return + * ```js + * { + * key: 'Germany', + * type: 'string', + * title: 'Users Country Germany', + * shortTitle: 'Germany', + * meta: undefined, + * format: undefined, + * children: [ + * { + * key: 'male', + * type: 'string', + * title: 'Users Gender male', + * shortTitle: 'male', + * meta: undefined, + * format: undefined, + * children: [ + * { + * // ... + * dataIndex: 'Germany.male.Orders.count', + * shortTitle: 'Count', + * }, + * ], + * }, + * { + * // ... + * shortTitle: 'female', + * children: [ + * { + * // ... + * dataIndex: 'Germany.female.Orders.count', + * shortTitle: 'Count', + * }, + * ], + * }, + * ], + * }, + * // ... + * ``` + * @returns An array of columns + */ + tableColumns(pivotConfig?: PivotConfig): TableColumn[]; + + query(): Query; + rawData(): T[]; + } + + export type Filter = { + dimension?: string; + member?: string; + operator: string; + values?: string[]; + }; + + export enum TimeDimensionGranularities { + HOUR = 'hour', + DAY = 'day', + WEEK = 'week', + MONTH = 'month', + YEAR = 'year', + } + + export type TimeDimension = { + dimension: string; + dateRange?: string | string[]; + granularity?: TimeDimensionGranularities; + }; + + export type Query = { + measures?: string[]; + dimensions?: string[]; + filters?: Filter[]; + timeDimensions?: TimeDimension[]; + segments?: string[]; + limit?: number; + offset?: number; + order?: { + [key: string]: QueryOrder; + }; + timezone?: string; + renewQuery?: boolean; + ungrouped?: boolean; + }; + + export type ProgressResponse = { + stage: string; + timeElapsed: number; + }; + + export class ProgressResult { + constructor(progressResponse: ProgressResponse); + + stage(): string; + timeElapsed(): string; + } + + export type SqlQueryTuple = [string, boolean | string | number]; + + export type SqlData = { + aliasNameToMember: Record; + cacheKeyQueries: { + queries: SqlQueryTuple[]; + }; + dataSource: boolean; + external: boolean; + sql: SqlQueryTuple; + }; + + export type SqlApiResponse = { + sql: SqlData; + }; + + export class SqlQuery { + constructor(sqlQuery: SqlApiResponse); + + rawQuery(): SqlData; + sql(): string; + } + + export type MemberType = 'measures' | 'dimensions' | 'segments'; + + /** + * Contains information about available cubes and it's members. + */ + export class Meta { + constructor(metaResponse: Object); + + /** + * Get all members of a specific type for a given query. + * If empty query is provided no filtering is done based on query context and all available members are retrieved. + * @param query - context query to provide filtering of members available to add to this query + * @param memberType - `measures`, `dimensions` or `segments` + */ + membersForQuery(query: Query, memberType: MemberType); + + /** + * Get meta information for member of a cube + * Member meta information contains: + * ```javascript + * { + * name, + * title, + * shortTitle, + * type, + * description, + * format + * } + * ``` + * @param memberName - Fully qualified member name in a form `Cube.memberName` + * @return An object containing meta information about member + */ + resolveMember(memberName: string, memberType: MemberType): Object; + defaultTimeDimensionNameFor(memberName: string): string; + filterOperatorsForMember(memberName: string, memberType: MemberType): any; + } + + export class CubejsApi { + constructor(apiToken: string, options: CubeJSApiOptions); + + load(query: Query, options?: LoadMethodOptions): Promise; + load(query: Query, options?: LoadMethodOptions, callback?: LoadMethodCallback): void; + + sql(query: Query, options?: LoadMethodOptions): Promise; + sql(query: Query, options?: LoadMethodOptions, callback?: LoadMethodCallback): void; + + meta(options?: LoadMethodOptions): Promise; + meta(options?: LoadMethodOptions, callback?: LoadMethodCallback): void; + } + + function cubejs(apiToken: string, options: CubeJSApiOptions): CubejsApi; + + export default cubejs; +}