diff --git a/.babelrc b/.babelrc deleted file mode 100644 index c298bca39..000000000 --- a/.babelrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "presets": ["flow"], - "plugins": [ - "transform-es2015-modules-commonjs" - ] -} diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..a52e518d8 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,35 @@ +workflows: + version: 2 + node-multi-build: + jobs: + - node-v12 + +version: 2 +jobs: + node-base: &node-base + docker: + - image: node + steps: + - checkout + - restore_cache: + name: Restore Yarn Package Cache + keys: + - yarn-packages-{{ .Branch }}-{{ checksum "yarn.lock" }} + - yarn-packages-{{ .Branch }} + - yarn-packages-master + - yarn-packages- + - run: + name: Install dependencies + command: yarn --frozen-lockfile + - run: + name: Test + command: yarn test-ci + - save_cache: + name: Save Yarn Package Cache + key: yarn-packages-{{ .Branch }}-{{ checksum "yarn.lock" }} + paths: + - node_modules/ + node-v12: + <<: *node-base + docker: + - image: node:12 diff --git a/.editorconfig b/.editorconfig index 443b276cc..597e75449 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,4 +1,4 @@ -[**.js] +[*.{js,css}] indent_style = space indent_size = 2 trim_trailing_whitespace = true diff --git a/.eslintrc b/.eslintrc index 9eff1ecc7..2bf300124 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,13 +1,12 @@ { "root": true, - "parser": "babel-eslint", "parserOptions": { - "sourceType": "module" + "sourceType": "module", + "ecmaVersion": 2020 }, - "plugins": [ - "flowtype" - ], "rules": { + "no-var": 2, + "prefer-const": 2, "no-use-before-define": [2, "nofunc"], "camelcase": 2, "no-lonely-if": 2, @@ -25,15 +24,9 @@ "no-eq-null": 2, "strict": [2, "global"], "no-shadow": 0, - "no-undef": 2, - "flowtype/define-flow-type": 1, - "flowtype/use-flow-type": 1 + "no-undef": 2 }, - "extends": [ - "eslint:recommended", - "plugin:flowtype/recommended", - "prettier" - ], + "extends": ["eslint:recommended", "prettier"], "env": { "node": true, "es6": true diff --git a/.flowconfig b/.flowconfig deleted file mode 100644 index 3af8ba9da..000000000 --- a/.flowconfig +++ /dev/null @@ -1,13 +0,0 @@ -[ignore] -.*node_modules/.cache/.* -.*node_modules/conventional-changelog-core/test/fixtures/.* -.*/__tests__/fixture/.* -./lib/.* - -[include] - -[libs] -declarations/ - -[options] -module.ignore_non_literal_requires=true diff --git a/.gitignore b/.gitignore index da0121316..b7cc0fe92 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -/lib coverage .nyc_output /node_modules diff --git a/.npmignore b/.npmignore index 8c48b804a..7c3ebf56a 100644 --- a/.npmignore +++ b/.npmignore @@ -6,4 +6,10 @@ .nyc_output circle.yml coverage -test +__tests__ +.circleci +.github +.prettierignore +.prettierrc +CODE_OF_CONDUCT.md +ISSUE_TEMPLATE.md diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..d826961de --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +__tests__/fixture diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..b0a179d48 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "singleQuote": true, + "trailingComma": "none", + "arrowParens": "avoid" +} diff --git a/CHANGELOG.md b/CHANGELOG.md index ee3f77036..db5de4589 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,720 @@ -# Change Log +# Changelog All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [13.2.5](https://github.com/documentationjs/documentation/compare/v13.2.4...v13.2.5) (2021-04-24) + + +### Bug Fixes + +* add gfm format for remark fixed [#1374](https://github.com/documentationjs/documentation/issues/1374) ([#1375](https://github.com/documentationjs/documentation/issues/1375)) ([6b5bc25](https://github.com/documentationjs/documentation/commit/6b5bc2548db23fdab3fd8d29ac1aeedea7ad3a47)) +* jsx should be included for tsx files but not for ts fixed [#1359](https://github.com/documentationjs/documentation/issues/1359) ([#1373](https://github.com/documentationjs/documentation/issues/1373)) ([00d434f](https://github.com/documentationjs/documentation/commit/00d434f8576969b00d53a20efebb52a880acf350)) + +### [13.2.4](https://github.com/documentationjs/documentation/compare/v13.2.3...v13.2.4) (2021-04-21) + + +### Bug Fixes + +* add support Vue 3 fixed [#1339](https://github.com/documentationjs/documentation/issues/1339) ([#1372](https://github.com/documentationjs/documentation/issues/1372)) ([cd7d123](https://github.com/documentationjs/documentation/commit/cd7d12366cc499ae8d40a64905354c3479f802f6)) + +### [13.2.3](https://github.com/documentationjs/documentation/compare/v13.2.2...v13.2.3) (2021-04-20) + +### [13.2.2](https://github.com/documentationjs/documentation/compare/v13.2.1...v13.2.2) (2021-04-20) + + +### Bug Fixes + +* [@see](https://github.com/see) tags incorrectly formatted in markdown ouput fixed [#1337](https://github.com/documentationjs/documentation/issues/1337) ([5d8d450](https://github.com/documentationjs/documentation/commit/5d8d4504d52a5bb0a0432bf399bbd82d9e5ea7fc)) + +### [13.2.1](https://github.com/documentationjs/documentation/compare/v13.2.0...v13.2.1) (2021-04-06) + +## [13.2.0](https://github.com/documentationjs/documentation/compare/v13.1.1...v13.2.0) (2021-03-13) + + +### Features + +* Support import.meta ([d449e7c](https://github.com/documentationjs/documentation/commit/d449e7c3ca0abb7379ea4159b0ef0281059077eb)), closes [#1345](https://github.com/documentationjs/documentation/issues/1345) + +### [13.1.1](https://github.com/documentationjs/documentation/compare/v13.1.0...v13.1.1) (2021-01-19) + +## [13.1.0](https://github.com/documentationjs/documentation/compare/v13.0.2...v13.1.0) (2020-10-24) + + +### Features + +* Add event members to md output ([#1336](https://github.com/documentationjs/documentation/issues/1336)) ([bc3233f](https://github.com/documentationjs/documentation/commit/bc3233fe7e414e65756cf50450ebad069e37506a)) + +### [13.0.2](https://github.com/documentationjs/documentation/compare/v13.0.1...v13.0.2) (2020-07-02) + + +### Bug Fixes + +* Additional safety around detecting functions in HTML output ([a8b6ce1](https://github.com/documentationjs/documentation/commit/a8b6ce144ea380ad21ba99f03574f6258be10666)) + +### [13.0.1](https://github.com/documentationjs/documentation/compare/v13.0.0...v13.0.1) (2020-06-04) + + +### Bug Fixes + +* 🐛 Error with flow opaque type and readme command ([78db9a4](https://github.com/documentationjs/documentation/commit/78db9a443a65bbe8ff202083351655e0cfa60004)), closes [#1322](https://github.com/documentationjs/documentation/issues/1322) +* 🐛 Fixes an issue when using object spread and $Exact ([106945c](https://github.com/documentationjs/documentation/commit/106945c6354f0b70335adf737c7b7fa296952cc3)), closes [#1324](https://github.com/documentationjs/documentation/issues/1324) + + +# [13.0.0](https://github.com/documentationjs/documentation/compare/v12.3.0...v13.0.0) (2020-05-09) + + +### Chores + +* Update Node minimum version to 10 ([45a5257](https://github.com/documentationjs/documentation/commit/45a5257)) + + +### BREAKING CHANGES + +* documentation.js will now require node 10 or later. + + + + +# [12.3.0](https://github.com/documentationjs/documentation/compare/v12.2.0...v12.3.0) (2020-04-07) + + +### Features + +* upgrade babel dependencies ([d0ec029](https://github.com/documentationjs/documentation/commit/d0ec029)) + + + + +# [12.2.0](https://github.com/documentationjs/documentation/compare/v12.1.4...v12.2.0) (2020-03-31) + + +### Features + +* support for the [@see](https://github.com/see) tag in Markdown & HTML ([48bb7a2](https://github.com/documentationjs/documentation/commit/48bb7a2)) + + + + +## [12.1.4](https://github.com/documentationjs/documentation/compare/v12.1.3...v12.1.4) (2019-11-15) + + + + +## [12.1.3](https://github.com/documentationjs/documentation/compare/v12.1.2...v12.1.3) (2019-11-04) + + +### Bug Fixes + +* upgrade git-url-parse to fix a parsing issue ([#1296](https://github.com/documentationjs/documentation/issues/1296)) ([344e804](https://github.com/documentationjs/documentation/commit/344e804)) + + + + +## [12.1.2](https://github.com/documentationjs/documentation/compare/v12.1.1...v12.1.2) (2019-09-09) + + +### Bug Fixes + +* check for empty diff ([#1273](https://github.com/documentationjs/documentation/issues/1273)) ([3e0958b](https://github.com/documentationjs/documentation/commit/3e0958b)) + + + + +## [12.1.1](https://github.com/documentationjs/documentation/compare/v12.1.0...v12.1.1) (2019-08-01) + + +### Bug Fixes + +* Git submodule support for repo names with a dot ([#1271](https://github.com/documentationjs/documentation/issues/1271)) ([27a29be](https://github.com/documentationjs/documentation/commit/27a29be)) + + + + +# [12.1.0](https://github.com/documentationjs/documentation/compare/v12.0.3...v12.1.0) (2019-07-31) + + +### Features + +* Add git submodules support to github linking ([#1270](https://github.com/documentationjs/documentation/issues/1270)) ([ec36b41](https://github.com/documentationjs/documentation/commit/ec36b41)) + + + + +## [12.0.3](https://github.com/documentationjs/documentation/compare/v12.0.2...v12.0.3) (2019-07-22) + + +### Bug Fixes + +* Allow skipped array arguments in destructuring. Fixes [#1247](https://github.com/documentationjs/documentation/issues/1247) ([#1266](https://github.com/documentationjs/documentation/issues/1266)) ([f9039e9](https://github.com/documentationjs/documentation/commit/f9039e9)) + + + + +## [12.0.2](https://github.com/documentationjs/documentation/compare/v12.0.1...v12.0.2) (2019-07-16) + + + + +## [12.0.1](https://github.com/documentationjs/documentation/compare/v12.0.0...v12.0.1) (2019-07-10) + + +### Bug Fixes + +* Crash when called with no inputs. yargs now variadic positional arguments undefined instead of [] ([821a15e](https://github.com/documentationjs/documentation/commit/821a15e)) + + + + +# [12.0.0](https://github.com/documentationjs/documentation/compare/v11.0.1...v12.0.0) (2019-07-10) + + +* Formatted with Prettier ([8f36e75](https://github.com/documentationjs/documentation/commit/8f36e75)) + + +### BREAKING CHANGES + +* The next release will require Node 8 + + + + +## [11.0.1](https://github.com/documentationjs/documentation/compare/v11.0.0...v11.0.1) (2019-06-12) + + +### Bug Fixes + +* toc with children getting displayed as "note" ([#1253](https://github.com/documentationjs/documentation/issues/1253)) ([14298bb](https://github.com/documentationjs/documentation/commit/14298bb)) + + + + +# [11.0.0](https://github.com/documentationjs/documentation/compare/v10.1.0...v11.0.0) (2019-05-08) + + +### Bug Fixes + +* Fix parsing of optional parameters with annotations ([ca17de5](https://github.com/documentationjs/documentation/commit/ca17de5)) + + +### Features + +* Enable all parser plugins ([fa1b0b5](https://github.com/documentationjs/documentation/commit/fa1b0b5)) +* Support exportNamespaceFrom in parser ([8fa141d](https://github.com/documentationjs/documentation/commit/8fa141d)) + + +### BREAKING CHANGES + +* this removes support for legacy decorators, because +in one place we had legacy and in another we didn't. + + + + +# [10.1.0](https://github.com/documentationjs/documentation/compare/v10.0.0...v10.1.0) (2019-04-25) + + +### Features + +* TypeScript support & inference ([3773e02](https://github.com/documentationjs/documentation/commit/3773e02)) + + + + +# [10.0.0](https://github.com/documentationjs/documentation/compare/v10.0.0-alpha.0...v10.0.0) (2019-04-18) + + +### Features + +* Add flow inference for generators ([7947e97](https://github.com/documentationjs/documentation/commit/7947e97)) +* Support async functions ([d31c3b7](https://github.com/documentationjs/documentation/commit/d31c3b7)) +* Support classPrivateProperties in parser ([64ef671](https://github.com/documentationjs/documentation/commit/64ef671)), closes [#1216](https://github.com/documentationjs/documentation/issues/1216) +* Support generator functions ([8e3cd47](https://github.com/documentationjs/documentation/commit/8e3cd47)) + + + + +# [10.0.0-alpha.0](https://github.com/documentationjs/documentation/compare/v9.3.1...v10.0.0-alpha.0) (2019-03-12) + + +### Features + +* Support custom babel config ([#1205](https://github.com/documentationjs/documentation/issues/1205)) ([746d0a9](https://github.com/documentationjs/documentation/commit/746d0a9)) + + +### BREAKING CHANGES + +* this may change babel configuration loading, and is a +major change to the documentation.js approach to Babel. + + + + +## [9.3.1](https://github.com/documentationjs/documentation/compare/v9.3.0...v9.3.1) (2019-03-12) + + + + +# [9.3.0](https://github.com/documentationjs/documentation/compare/v9.2.1...v9.3.0) (2019-02-27) + + +### Features + +* Add inner section ([#1212](https://github.com/documentationjs/documentation/issues/1212)) ([64c9ca6](https://github.com/documentationjs/documentation/commit/64c9ca6)) + + + + +## [9.2.1](https://github.com/documentationjs/documentation/compare/v9.2.0...v9.2.1) (2019-02-26) + + + + +# [9.2.0](https://github.com/documentationjs/documentation/compare/v9.1.1...v9.2.0) (2019-02-22) + + +### Bug Fixes + +* **default theme:** only render either note or section (fixes [#1113](https://github.com/documentationjs/documentation/issues/1113)) ([#1206](https://github.com/documentationjs/documentation/issues/1206)) ([fb0a27f](https://github.com/documentationjs/documentation/commit/fb0a27f)) + + +### Features + +* Add favicon option ([#1207](https://github.com/documentationjs/documentation/issues/1207)) ([5b045f2](https://github.com/documentationjs/documentation/commit/5b045f2)) + + + + +## [9.1.1](https://github.com/documentationjs/documentation/compare/v9.1.0...v9.1.1) (2018-12-21) + + +### Bug Fixes + +* inferred properties duplicating explicitly specified ones ([2d0bd0e](https://github.com/documentationjs/documentation/commit/2d0bd0e)) + + + + +# [9.1.0](https://github.com/documentationjs/documentation/compare/v9.0.0...v9.1.0) (2018-12-17) + + +### Features + +* support spead types ([ca5a681](https://github.com/documentationjs/documentation/commit/ca5a681)) + + + + +# [9.0.0](https://github.com/documentationjs/documentation/compare/v9.0.0-alpha.1...v9.0.0) (2018-12-10) + + +### Features + +* Support for the logical assignment operator ([58d2a2f](https://github.com/documentationjs/documentation/commit/58d2a2f)), closes [#1172](https://github.com/documentationjs/documentation/issues/1172) + + + + +# [9.0.0-alpha.1](https://github.com/documentationjs/documentation/compare/v9.0.0-alpha.0...v9.0.0-alpha.1) (2018-10-24) + + +### Bug Fixes + +* **package:** update [@babel](https://github.com/babel)/parser to version 7.1.3 ([4dbb406](https://github.com/documentationjs/documentation/commit/4dbb406)), closes [#1145](https://github.com/documentationjs/documentation/issues/1145) +* add node-resolve to module-deps ([a033547](https://github.com/documentationjs/documentation/commit/a033547)) +* add tests ([a4107dc](https://github.com/documentationjs/documentation/commit/a4107dc)) + + +### Features + +* add support for node resolve algo ([ddd675d](https://github.com/documentationjs/documentation/commit/ddd675d)) + + + + +# [9.0.0-alpha.0](https://github.com/documentationjs/documentation/compare/v8.1.2...v9.0.0-alpha.0) (2018-09-21) + + +### Features + +* Babel 7 support ([49c0f72](https://github.com/documentationjs/documentation/commit/49c0f72)) + + +### BREAKING CHANGES + +* This moves documentation.js to Babel 7. From now on, +documentation.js will only support Babel 7: please stick to older +releases if you need to support Babel 6. Additionally, this work +temporarily disables support for following dynamic imports. + + + + +## [8.1.2](https://github.com/documentationjs/documentation/compare/v8.1.1...v8.1.2) (2018-08-23) + + +### Bug Fixes + +* membership infering for methods ([#1122](https://github.com/documentationjs/documentation/issues/1122)) ([40b1783](https://github.com/documentationjs/documentation/commit/40b1783)) + + + + +## [8.1.1](https://github.com/documentationjs/documentation/compare/v8.1.0...v8.1.1) (2018-08-17) + + +### Bug Fixes + +* Serve on correct port ([4d59f6f](https://github.com/documentationjs/documentation/commit/4d59f6f)) + + + + +# [8.1.0](https://github.com/documentationjs/documentation/compare/v8.0.2...v8.1.0) (2018-08-03) + + +### Bug Fixes + +* **package:** update get-port to version 4.0.0 ([9ca8c06](https://github.com/documentationjs/documentation/commit/9ca8c06)) + + +### Features + +* added project description ([45a9ea9](https://github.com/documentationjs/documentation/commit/45a9ea9)) + + + + +## [8.0.2](https://github.com/documentationjs/documentation/compare/v8.0.1...v8.0.2) (2018-07-20) + + +### Bug Fixes + +* **package:** update git-url-parse to version 10.0.1 ([91ade89](https://github.com/documentationjs/documentation/commit/91ade89)) + + + + +## [8.0.1](https://github.com/documentationjs/documentation/compare/v8.0.0...v8.0.1) (2018-07-16) + + +### Bug Fixes + +* **package:** update read-pkg-up to version 4.0.0 ([c700d3f](https://github.com/documentationjs/documentation/commit/c700d3f)) + + + + +# [8.0.0](https://github.com/documentationjs/documentation/compare/v7.1.0...v8.0.0) (2018-06-04) + + +### Features + +* Semantic markdown headings ([#1087](https://github.com/documentationjs/documentation/issues/1087)) ([ca6217f](https://github.com/documentationjs/documentation/commit/ca6217f)) + + +### BREAKING CHANGES + +* changes Markdown output + + + + +# [7.1.0](https://github.com/documentationjs/documentation/compare/v7.0.0...v7.1.0) (2018-05-26) + + +### Features + +* support flow comment types ([85d50f9](https://github.com/documentationjs/documentation/commit/85d50f9)) + + + + +# [7.0.0](https://github.com/documentationjs/documentation/compare/v6.3.3...v7.0.0) (2018-05-22) + + +### Features + +* Auto-detect readme filename ([4fd776b](https://github.com/documentationjs/documentation/commit/4fd776b)) + + +### BREAKING CHANGES + +* the --readme-file option now has a smart default value + + + + +## [6.3.3](https://github.com/documentationjs/documentation/compare/v6.3.2...v6.3.3) (2018-05-14) + + + + +## [6.3.2](https://github.com/documentationjs/documentation/compare/v6.3.1...v6.3.2) (2018-04-24) + + +### Bug Fixes + +* **vue:** Make vue parser tolerant of components that don't contain scripts ([#1061](https://github.com/documentationjs/documentation/issues/1061)) ([8f9bc7b](https://github.com/documentationjs/documentation/commit/8f9bc7b)), closes [#1060](https://github.com/documentationjs/documentation/issues/1060) + + + + +## [6.3.1](https://github.com/documentationjs/documentation/compare/v6.3.0...v6.3.1) (2018-04-23) + + +### Bug Fixes + +* adding vue support broke tests that are not file based ([#1058](https://github.com/documentationjs/documentation/issues/1058)) ([9d7bd2e](https://github.com/documentationjs/documentation/commit/9d7bd2e)), closes [#1057](https://github.com/documentationjs/documentation/issues/1057) + + + + +# [6.3.0](https://github.com/documentationjs/documentation/compare/v6.2.0...v6.3.0) (2018-04-20) + + +### Bug Fixes + +* **package:** update git-url-parse to version 9.0.0 ([94a1fb6](https://github.com/documentationjs/documentation/commit/94a1fb6)) + + +### Features + +* Vue Support ([f60d90c](https://github.com/documentationjs/documentation/commit/f60d90c)) + + + + +# [6.2.0](https://github.com/documentationjs/documentation/compare/v6.1.0...v6.2.0) (2018-04-11) + + +### Bug Fixes + +* get rid of shelljs dependency ([630625d](https://github.com/documentationjs/documentation/commit/630625d)) + + +### Features + +* **doctrine:** Support decorator syntax in examples ([b309d39](https://github.com/documentationjs/documentation/commit/b309d39)), closes [#1016](https://github.com/documentationjs/documentation/issues/1016) +* **inferTypes:** Support class properties ([22d8740](https://github.com/documentationjs/documentation/commit/22d8740)), closes [#1043](https://github.com/documentationjs/documentation/issues/1043) + + + + +# [6.1.0](https://github.com/documentationjs/documentation/compare/v6.0.0...v6.1.0) (2018-03-08) + + +### Bug Fixes + +* lends with object property using literal key ([#1035](https://github.com/documentationjs/documentation/issues/1035)) ([99ad49b](https://github.com/documentationjs/documentation/commit/99ad49b)) + + +### Features + +* Support class property [@type](https://github.com/type) tag ([#1028](https://github.com/documentationjs/documentation/issues/1028)) ([4ed5edf](https://github.com/documentationjs/documentation/commit/4ed5edf)) + + + + +# [6.0.0](https://github.com/documentationjs/documentation/compare/v5.5.0...v6.0.0) (2018-03-02) + + +### Features + +* documentation.js now requires node v6 or newer. ([#1034](https://github.com/documentationjs/documentation/issues/1034)) ([ccce516](https://github.com/documentationjs/documentation/commit/ccce516)) + + +### BREAKING CHANGES + +* documentation.js requires node v6 or newer. + + + + +# [5.5.0](https://github.com/documentationjs/documentation/compare/v5.4.0...v5.5.0) (2018-03-02) + + +### Bug Fixes + +* github links for [@typedef](https://github.com/typedef) comments should link to comment, not context ([#1024](https://github.com/documentationjs/documentation/issues/1024)) ([37a91b2](https://github.com/documentationjs/documentation/commit/37a91b2)) +* Make documentation.js compatible with node 4.x for one more version ([#1033](https://github.com/documentationjs/documentation/issues/1033)) ([5067ee0](https://github.com/documentationjs/documentation/commit/5067ee0)) + + +### Features + +* Support `--shallow` argument for `lint` command. Closes [#956](https://github.com/documentationjs/documentation/issues/956) ([#995](https://github.com/documentationjs/documentation/issues/995)) ([64f660d](https://github.com/documentationjs/documentation/commit/64f660d)) +* Support the .mjs extension by default. ([#1023](https://github.com/documentationjs/documentation/issues/1023)) ([b8a7e0d](https://github.com/documentationjs/documentation/commit/b8a7e0d)) +* use reference links for Markdown output, improving brevity ([ab494dd](https://github.com/documentationjs/documentation/commit/ab494dd)) + + + + +# [5.4.0](https://github.com/documentationjs/documentation/compare/v5.3.5...v5.4.0) (2018-02-10) + + +### Bug Fixes + +* **package:** update remark-toc to version 5.0.0 ([0bb3d0d](https://github.com/documentationjs/documentation/commit/0bb3d0d)) + + +### Features + +* add support for class param declarations at the constructor ([#1013](https://github.com/documentationjs/documentation/issues/1013)) ([05c5279](https://github.com/documentationjs/documentation/commit/05c5279)) + + + + +## [5.3.5](https://github.com/documentationjs/documentation/compare/v5.3.4...v5.3.5) (2017-12-12) + + +### Bug Fixes + +* **globals-docs:** Remove en-US from MDN links. ([#973](https://github.com/documentationjs/documentation/issues/973)) ([aa661ff](https://github.com/documentationjs/documentation/commit/aa661ff)), closes [#964](https://github.com/documentationjs/documentation/issues/964) + + + + +## [5.3.4](https://github.com/documentationjs/documentation/compare/v5.3.3...v5.3.4) (2017-12-12) + + +### Bug Fixes + +* **package:** update babelify to version 8.0.0 ([10dff6f](https://github.com/documentationjs/documentation/commit/10dff6f)) +* **package:** update read-pkg-up to version 3.0.0 ([d8fbf2c](https://github.com/documentationjs/documentation/commit/d8fbf2c)) +* **package:** update remark-html to version 7.0.0 ([9842814](https://github.com/documentationjs/documentation/commit/9842814)) +* **package:** update vinyl-fs to version 3.0.0 ([#966](https://github.com/documentationjs/documentation/issues/966)) ([1d6fe80](https://github.com/documentationjs/documentation/commit/1d6fe80)) + + + + +## [5.3.3](https://github.com/documentationjs/documentation/compare/v5.3.2...v5.3.3) (2017-10-12) + + +### Bug Fixes + +* **html:** Display all levels of parameter properties. ([#933](https://github.com/documentationjs/documentation/issues/933)) ([7a548eb](https://github.com/documentationjs/documentation/commit/7a548eb)) +* **package:** update github-slugger to version 1.2.0 ([2b74956](https://github.com/documentationjs/documentation/commit/2b74956)) +* Fix the split in HTML at 33/67% instead of calculating percentages ([#939](https://github.com/documentationjs/documentation/issues/939)) ([e4781eb](https://github.com/documentationjs/documentation/commit/e4781eb)), closes [#927](https://github.com/documentationjs/documentation/issues/927) + + + + +## [5.3.2](https://github.com/documentationjs/documentation/compare/v5.3.1...v5.3.2) (2017-09-15) + + +### Bug Fixes + +* special property names in flowtypes ([7fc6ca8](https://github.com/documentationjs/documentation/commit/7fc6ca8)) + + + + +## [5.3.1](https://github.com/documentationjs/documentation/compare/v5.3.0...v5.3.1) (2017-09-07) + + +### Bug Fixes + +* cover more hideconstructor cases ([5bdbf1f](https://github.com/documentationjs/documentation/commit/5bdbf1f)) +* Enable dynamicImport plugin to support import() syntax ([#903](https://github.com/documentationjs/documentation/issues/903)) ([b97241f](https://github.com/documentationjs/documentation/commit/b97241f)), closes [#902](https://github.com/documentationjs/documentation/issues/902) +* regression in toc causing crash ([125a577](https://github.com/documentationjs/documentation/commit/125a577)) + + + + +# [5.3.0](https://github.com/documentationjs/documentation/compare/v5.2.2...v5.3.0) (2017-09-04) + + +### Bug Fixes + +* [@name](https://github.com/name) tag disconnects comment ([#897](https://github.com/documentationjs/documentation/issues/897)) ([a04b6fd](https://github.com/documentationjs/documentation/commit/a04b6fd)) + + +### Features + +* groups in toc ([#895](https://github.com/documentationjs/documentation/issues/895)) ([c94412a](https://github.com/documentationjs/documentation/commit/c94412a)) +* implement [@hideconstructor](https://github.com/hideconstructor) ([#898](https://github.com/documentationjs/documentation/issues/898)) ([7a07d51](https://github.com/documentationjs/documentation/commit/7a07d51)) + + + + +## [5.2.2](https://github.com/documentationjs/documentation/compare/v5.2.1...v5.2.2) (2017-08-22) + + +### Bug Fixes + +* **$compile:** prevent babel from transpiling non-module scripts in default_theme's assets ([1286a1f](https://github.com/documentationjs/documentation/commit/1286a1f)) + + + + +## [5.2.1](https://github.com/documentationjs/documentation/compare/v5.2.0...v5.2.1) (2017-08-12) + + + + +# [5.2.0](https://github.com/documentationjs/documentation/compare/v5.1.1...v5.2.0) (2017-08-09) + + +### Bug Fixes + +* alphabetical sort and add flow notation to sort file ([#861](https://github.com/documentationjs/documentation/issues/861)) ([aa3496a](https://github.com/documentationjs/documentation/commit/aa3496a)), closes [#838](https://github.com/documentationjs/documentation/issues/838) +* make html and markdown second option optional ([#871](https://github.com/documentationjs/documentation/issues/871)) ([0324865](https://github.com/documentationjs/documentation/commit/0324865)), closes [#869](https://github.com/documentationjs/documentation/issues/869) + + +### Features + +* convert Flow's ThisTypeAnnotation to a doctrine NameExpression ([#870](https://github.com/documentationjs/documentation/issues/870)) ([23aa981](https://github.com/documentationjs/documentation/commit/23aa981)) + + + + +## [5.1.1](https://github.com/documentationjs/documentation/compare/v5.1.0...v5.1.1) (2017-08-04) + + +### Bug Fixes + +* **theme:** Remove dead stepsibling navigation code ([dccb151](https://github.com/documentationjs/documentation/commit/dccb151)) +* cli options should override package.json options ([ecf16bd](https://github.com/documentationjs/documentation/commit/ecf16bd)), closes [#845](https://github.com/documentationjs/documentation/issues/845) + + + + +# [5.1.0](https://github.com/documentationjs/documentation/compare/v5.0.1...v5.1.0) (2017-07-31) + + +### Bug Fixes + +* **scripts:** Remove changelog package.json task ([dddac19](https://github.com/documentationjs/documentation/commit/dddac19)) + + +### Features + +* **theme:** Flexible sidebar for default theme ([6509ae8](https://github.com/documentationjs/documentation/commit/6509ae8)) + + + + +## [5.0.1](https://github.com/documentationjs/documentation/compare/v5.0.0...v5.0.1) (2017-07-28) + + + + +# [5.0.0](https://github.com/documentationjs/documentation/compare/v4.0.0...v5.0.0) (2017-07-27) + + +### Reverts + +* **polyglot:** Remove polyglot mode ([5b373ff](https://github.com/documentationjs/documentation/commit/5b373ff)), closes [#850](https://github.com/documentationjs/documentation/issues/850) [#731](https://github.com/documentationjs/documentation/issues/731) [#702](https://github.com/documentationjs/documentation/issues/702) [#132](https://github.com/documentationjs/documentation/issues/132) + + +### BREAKING CHANGES + +* **polyglot:** I'd like to still support C++ and other languages in the future! But I'm much +happier doing so by separating the extraction & input phases to the degree that documentation.js can +read the output of another module that extracts JSDoc comments from C++ code, rather than having CPP +support in it. + + + # [4.0.0](https://github.com/documentationjs/documentation/compare/v4.0.0-rc.1...v4.0.0) (2017-07-27) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 65c05c574..c06638aef 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,22 +1,76 @@ -# Contributor Code of Conduct +# Contributor Covenant Code of Conduct -As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. +## Our Pledge -We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality. +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to make participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery -* Personal attacks -* Trolling or insulting/derogatory comments +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment -* Publishing other's private information, such as physical or electronic addresses, without explicit permission -* Other unethical or unprofessional conduct. +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies within all project spaces, and it also applies when +an individual is representing the project or its community in public spaces. +Examples of representing a project or community include using an official +project e-mail address, posting via an official social media account, or acting +as an appointed representative at an online or offline event. Representation of +a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team. All complaints will be reviewed and +investigated and will result in a response that is deemed necessary and appropriate +to the circumstances. The project team is obligated to maintain confidentiality with +regard to the reporter of an incident. Further details of specific enforcement +policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team. +## Attribution -This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers. +[homepage]: https://www.contributor-covenant.org -This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0, available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/) \ No newline at end of file +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/README.md b/README.md index 2392408bc..0f3aa1288 100644 --- a/README.md +++ b/README.md @@ -6,24 +6,24 @@ The documentation system for modern JavaScript

-[![Greenkeeper badge](https://badges.greenkeeper.io/documentationjs/documentation.svg)](https://greenkeeper.io/) [![Circle CI](https://circleci.com/gh/documentationjs/documentation/tree/master.svg?style=shield)](https://circleci.com/gh/documentationjs/documentation/tree/master) [![npm version](https://badge.fury.io/js/documentation.svg)](http://badge.fury.io/js/documentation) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/documentationjs/documentation?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![David](https://david-dm.org/documentationjs/documentation.svg)](https://david-dm.org/documentationjs/documentation) -[![Coverage Status](https://coveralls.io/repos/github/documentationjs/documentation/badge.svg?branch=master)](https://coveralls.io/github/documentationjs/documentation?branch=master) [![Inline docs](http://inch-ci.org/github/documentationjs/documentation.svg?branch=master&style=flat-square)](http://inch-ci.org/github/documentationjs/documentation) -* Supports modern JavaScript: ES5, ES2017, JSX, and [Flow](http://flowtype.org/) type annotations. +[:date: Current maintenance status](https://github.com/documentationjs/documentation/wiki/Current-maintenance-status) + +* Supports modern JavaScript: ES5, ES2017, JSX, Vue and [Flow](https://flow.org/) type annotations. * Infers parameters, types, membership, and more. Write less documentation: let the computer write it for you. * Integrates with GitHub to link directly from documentation to the code it refers to. * Customizable output: HTML, JSON, Markdown, and more ## Examples -- [HTML output with default template](http://documentation.js.org/html-example/) +- [HTML output with default template](https://documentation.js.org/html-example/) - [Markdown](https://github.com/documentationjs/documentation/blob/master/docs/NODE_API.md) -- [JSON](http://documentation.js.org/html-example/index.json) +- [JSON](https://documentation.js.org/html-example/index.json) ## Documentation @@ -47,35 +47,38 @@ $ npm install -g documentation This installs a command called `documentation` in your path, that you can point at [JSDoc](http://usejsdoc.org/)-annotated source code to generate -human-readable documentation. First run `documentation` with the `-h` +human-readable documentation. First, run `documentation` with the `--help` option for help: ```sh Usage: # generate markdown docs for index.js and files it references -bin/documentation.js build index.js -f md +documentation build index.js -f md -# generate html docs for all files in src -bin/documentation.js build src/** -f html -o docs +# generate html docs for all files in src, and include links to source files in github +documentation build src/** -f html --github -o docs # document index.js, ignoring any files it requires or imports -bin/documentation.js build index.js -f md --shallow +documentation build index.js -f md --shallow -# build and serve html docs for app.js -bin/documentation.js serve app.js +# build and serve HTML docs for app.js +documentation serve app.js -# build, serve, and live-update html docs for app.js -bin/documentation.js serve --watch app.js +# build, serve, and live-update HTML docs for app.js +documentation serve --watch app.js # validate JSDoc syntax in util.js -bin/documentation.js lint util.js +documentation lint util.js # update the API section of README.md with docs from index.js -bin/documentation.js readme index.js --section=API +documentation readme index.js --section=API # build docs for all values exported by index.js -bin/documentation.js build --document-exported index.js +documentation build --document-exported index.js + +# build html docs for a TypeScript project +documentation build index.ts --parse-extension ts -f html -o docs Commands: serve [input..] generate, update, and display HTML documentation diff --git a/__tests__/__snapshots__/bin-readme.js.snap b/__tests__/__snapshots__/bin-readme.js.snap index efa5e3a23..d5272a090 100644 --- a/__tests__/__snapshots__/bin-readme.js.snap +++ b/__tests__/__snapshots__/bin-readme.js.snap @@ -1,5 +1,41 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`readme autodetection of different filenames updates readme.markdown 1`] = ` +"# A title + +# API + + + +### Table of Contents + +* [foo](#foo) + * [Parameters](#parameters) +* [bar](#bar) + * [Parameters](#parameters-1) + +## foo + +A function with documentation. + +### Parameters + +* \`a\` {string} blah + +Returns **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** answer + +## bar + +A second function with docs + +### Parameters + +* \`b\` + +# Another section +" +`; + exports[`readme command --readme-file 1`] = ` "# A title @@ -7,23 +43,30 @@ exports[`readme command --readme-file 1`] = ` +### Table of Contents + +* [foo](#foo) + * [Parameters](#parameters) +* [bar](#bar) + * [Parameters](#parameters-1) + ## foo A function with documentation. -**Parameters** +### Parameters -- \`a\` {string} blah +* \`a\` {string} blah -Returns **[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** answer +Returns **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** answer ## bar A second function with docs -**Parameters** +### Parameters -- \`b\` +* \`b\` # Another section " @@ -36,23 +79,30 @@ exports[`readme command updates README.md 1`] = ` +### Table of Contents + +* [foo](#foo) + * [Parameters](#parameters) +* [bar](#bar) + * [Parameters](#parameters-1) + ## foo A function with documentation. -**Parameters** +### Parameters -- \`a\` {string} blah +* \`a\` {string} blah -Returns **[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** answer +Returns **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** answer ## bar A second function with docs -**Parameters** +### Parameters -- \`b\` +* \`b\` # Another section " diff --git a/__tests__/__snapshots__/bin.js.snap b/__tests__/__snapshots__/bin.js.snap index 094c73747..04c9b6fcc 100644 --- a/__tests__/__snapshots__/bin.js.snap +++ b/__tests__/__snapshots__/bin.js.snap @@ -5,19 +5,20 @@ exports[`--config 1`] = ` - documentation 4.0.0-rc.1 | Documentation + documentation | Documentation + + - -
-
-
+ +
+

documentation

-
4.0.0-rc.1
+
+
  • + #withDeepOptions +
  • + @@ -215,21 +222,54 @@ exports[`--config 1`] = `
    -
    +
    -
    +
    +
    + +

    + Highlighted section +

    + + +

    The public key is a base64 encoded string of a protobuf containing an RSA DER +buffer. This uses a node buffer to pass the base64 encoded public key protobuf +to the multihash for ID generation.

    +
    var PeerId = require('peer-id')
    +
    +PeerId.create({ bits: 1024 }, (err, id) => {
    +  console.log(JSON.stringify(id.toJSON(), null, 2)
    +})
    +
    {
    +  \\"id\\": \\"Qma9T5YraSnpRDZqRR4krcSJabThc8nwZuJV3LercPHufi\\",
    +  \\"privKey\\": \\"CAAS4AQwggJcAgEAAoGBAMBgbIqyOL26oV3nGPBYrdpbv..\\",
    +  \\"pubKey\\": \\"CAASogEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMBgbIqyOL26oV3nGPBYrdpbvzCY...\\"
    +}
    +
    -

    - Highlighted section -

    + +
    +
    + +
    -

    The public key is a base64 encoded string of a protobuf containing an RSA DER +

    + +

    + Highlighted section +

    + + +
    + + +

    The public key is a base64 encoded string of a protobuf containing an RSA DER buffer. This uses a node buffer to pass the base64 encoded public key protobuf to the multihash for ID generation.

    var PeerId = require('peer-id')
    @@ -244,13 +284,38 @@ PeerId.create({ bits: 
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    -
    - + -
    +
    @@ -265,8 +330,10 @@ PeerId.create({ bits: Creates a new Klass

    - -
    new Klass(foo: any)
    + + +
    new Klass(foo: any)
    +

    @@ -327,8 +394,10 @@ PeerId.create({ bits: Klass This is a [link to something that does not exist]DoesNot

    - -
    isClass(other: Object, also: any): boolean
    + + +
    isClass(other: Object, also: any): boolean
    + @@ -345,7 +414,7 @@ This is a [link to something that does not exist]DoesNot @@ -367,7 +436,7 @@ This is a [link to something that does not exist]DoesNotReturns
    - boolean: + boolean: whether the other thing is a Klass @@ -403,8 +472,10 @@ This is a [link to something that does not exist]DoesNotA function that triggers the case where the autolinker doesn't find the referenced class type

    - -
    + + +
    isWeird(other: Weird): boolean
    + @@ -435,7 +506,7 @@ the referenced class type

    Returns
    - boolean: + boolean: whether the other thing is a Klass @@ -470,8 +541,10 @@ the referenced class type

    This method takes a Buffer object that will be linked to nodejs.org

    - -
    isBuffer(buf: (Buffer | string), size: number): boolean
    + + +
    isBuffer(buf: (Buffer | string), size: number): boolean
    + @@ -488,7 +561,7 @@ the referenced class type

    - buf ((Buffer | string)) + buf ((Buffer | string))
    @@ -496,7 +569,7 @@ the referenced class type

    - size (number + size (number = 0) size @@ -512,7 +585,7 @@ the referenced class type

    Returns
    - boolean: + boolean: whether the other thing is a Klass @@ -547,8 +620,10 @@ the referenced class type

    This method takes an array of buffers and counts them

    - -
    isArrayOfBuffers(buffers: Array<Buffer>): number
    + + +
    isArrayOfBuffers(buffers: Array<Buffer>): number
    + @@ -565,7 +640,7 @@ the referenced class type

    - buffers (Array<Buffer>) + buffers (Array<Buffer>) some buffers
    @@ -580,7 +655,7 @@ the referenced class type

    Returns
    - number: + number: how many @@ -622,8 +697,10 @@ k.isArrayOfBuffers();

    A magic number that identifies this Klass.

    - -
    MAGIC_NUMBER
    + + +
    MAGIC_NUMBER
    + @@ -676,8 +753,10 @@ k.isArrayOfBuffers();

    Get this Klass's foo

    - -
    getFoo(): Number
    + + +
    getFoo(): Number
    + @@ -695,7 +774,7 @@ k.isArrayOfBuffers();
    Returns
    - Number: + Number: foo @@ -737,8 +816,10 @@ k.isArrayOfBuffers();

    A function with an options parameter

    - -
    withOptions(options: Object, otherOptions: number?)
    + + +
    withOptions(options: Object, otherOptions: number?)
    + @@ -755,7 +836,7 @@ k.isArrayOfBuffers();
    - options (Object) + options (Object)
    @@ -773,16 +854,20 @@ k.isArrayOfBuffers(); - options.foo string - - - + options.foo string + + + + + - options.bar number - - - + options.bar number + + + + + @@ -791,7 +876,7 @@ k.isArrayOfBuffers();
    - otherOptions (number?) + otherOptions (number?)
    @@ -813,6 +898,109 @@ k.isArrayOfBuffers(); +
    + +
    +
    + +
    +
    +
    + + withDeepOptions(options) +
    +
    +
    +
    + + + +

    A function with a deep options parameter

    + + + +
    withDeepOptions(options: Object)
    + + + + + + + + + + + + +
    Parameters
    +
    + +
    +
    + options (Object) + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameDescription
    options.foo string +
    options.bar Object +
    options.bar.buz string +
    + +
    + +
    + + + + + + + + + + + + + + +
    @@ -840,8 +1028,10 @@ k.isArrayOfBuffers();

    Klass event

    - -
    event
    + + +
    event
    + @@ -877,10 +1067,9 @@ k.isArrayOfBuffers(); - -
    +
    @@ -895,8 +1084,10 @@ k.isArrayOfBuffers();

    a typedef with nested properties

    - -
    CustomError(other: any, also: any)
    + + +
    CustomError
    + @@ -908,45 +1099,24 @@ k.isArrayOfBuffers(); -
    Parameters
    -
    - -
    -
    - other (any) - -
    - -
    - -
    -
    - also (any) - -
    - -
    - -
    -
    Properties
    - error (object) + error (object) : An error
      -
    • error.code string +
    • error.code string

      The error's code

    • -
    • error.description string +
    • error.description string

      The error's description

    • @@ -971,10 +1141,9 @@ k.isArrayOfBuffers();
    - -
    +
    @@ -991,8 +1160,10 @@ k.isArrayOfBuffers(); a klass instance multiword, like a klass

    - -
    bar(): Klass
    + + +
    bar(): Klass
    + @@ -1028,10 +1199,9 @@ like a klass

    - -
    +
    @@ -1046,8 +1216,10 @@ like a klass

    Rest property function

    - -
    bar(toys: ...Number): undefined
    + + +
    bar(toys: ...Number): undefined
    + @@ -1064,7 +1236,7 @@ like a klass

    - toys (...Number) + toys (...Number)
    @@ -1078,7 +1250,7 @@ like a klass

    Returns
    - undefined: + undefined: nothing @@ -1096,10 +1268,9 @@ like a klass

    - -
    +
    @@ -1114,10 +1285,12 @@ like a klass

    Get an instance of Klass. Will make a klass instance multiword, -like a klass. This needs a number input.

    - +like a klass. This needs a number input.

    -
    bar(): undefined
    + + +
    bar(): undefined
    + @@ -1135,7 +1308,7 @@ like a klass. This needs a Returns
    - undefined: + undefined: nothing @@ -1153,10 +1326,9 @@ like a klass. This needs a - -
    +
    -
    + @@ -1385,51 +1563,13 @@ Array [ Object { "children": Array [ Object { - "position": Object { - "end": Object { - "column": 19, - "line": 1, - "offset": 18, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "text", "value": "Bananas are yellow", }, ], - "position": Object { - "end": Object { - "column": 19, - "line": 1, - "offset": 18, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "paragraph", }, ], - "position": Object { - "end": Object { - "column": 19, - "line": 1, - "offset": 18, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "root", }, "examples": Array [], @@ -1487,51 +1627,13 @@ Array [ Object { "children": Array [ Object { - "position": Object { - "end": Object { - "column": 20, - "line": 1, - "offset": 19, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "text", "value": "Carrots are awesome", }, ], - "position": Object { - "end": Object { - "column": 20, - "line": 1, - "offset": 19, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "paragraph", }, ], - "position": Object { - "end": Object { - "column": 20, - "line": 1, - "offset": 19, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "root", }, "examples": Array [], @@ -1589,51 +1691,13 @@ Array [ Object { "children": Array [ Object { - "position": Object { - "end": Object { - "column": 15, - "line": 1, - "offset": 14, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "text", "value": "Apples are red", }, ], - "position": Object { - "end": Object { - "column": 15, - "line": 1, - "offset": 14, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "paragraph", }, ], - "position": Object { - "end": Object { - "column": 15, - "line": 1, - "offset": 14, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "root", }, "examples": Array [], @@ -1679,36 +1743,44 @@ exports[`build --document-exported 1`] = ` ### Table of Contents -- [z](#z) - - [zMethod](#zmethod) -- [x](#x) -- [Class](#class) - - [classMethod](#classmethod) - - [classGetter](#classgetter) - - [classSetter](#classsetter) - - [staticMethod](#staticmethod) - - [staticGetter](#staticgetter) - - [staticSetter](#staticsetter) -- [T5](#t5) -- [y2Default](#y2default) -- [y4](#y4) -- [object](#object) - - [method](#method) - - [getter](#getter) - - [setter](#setter) - - [prop](#prop) - - [func](#func) -- [f1](#f1) -- [f3](#f3) -- [T](#t) -- [T2](#t2) -- [T4](#t4) -- [f4](#f4) -- [o1](#o1) - - [om1](#om1) -- [f5](#f5) -- [o2](#o2) - - [om2](#om2) +- [z][1] + - [zMethod][2] +- [x][3] + - [Parameters][4] +- [Class][5] + - [Parameters][6] + - [classMethod][7] + - [classGetter][8] + - [classSetter][9] + - [Parameters][10] + - [staticMethod][11] + - [staticGetter][12] + - [staticSetter][13] + - [Parameters][14] +- [T5][15] +- [y2Default][16] +- [y4][17] + - [Parameters][18] +- [object][19] + - [method][20] + - [getter][21] + - [setter][22] + - [Parameters][23] + - [prop][24] + - [func][25] +- [f1][26] +- [f3][27] +- [T][28] +- [T2][29] +- [T4][30] +- [f4][31] + - [Parameters][32] +- [o1][33] + - [om1][34] +- [f5][35] + - [Parameters][36] +- [o2][37] + - [om2][38] ## z @@ -1716,15 +1788,15 @@ exports[`build --document-exported 1`] = ` ## x -**Parameters** +### Parameters - \`yparam\` ## Class -**Parameters** +### Parameters -- \`a\` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** +- \`a\` **[string][39]** ### classMethod @@ -1732,7 +1804,7 @@ exports[`build --document-exported 1`] = ` ### classSetter -**Parameters** +#### Parameters - \`v\` @@ -1742,13 +1814,13 @@ exports[`build --document-exported 1`] = ` ### staticSetter -**Parameters** +#### Parameters - \`v\` ## T5 -Type: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean) +Type: [boolean][40] ## y2Default @@ -1756,9 +1828,9 @@ Type: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Referenc Description of y3 -**Parameters** +### Parameters -- \`p\` **[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** +- \`p\` **[number][41]** Returns **void** @@ -1770,7 +1842,7 @@ Returns **void** ### setter -**Parameters** +#### Parameters - \`v\` @@ -1784,19 +1856,19 @@ Returns **void** ## T -Type: [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number) +Type: [number][41] ## T2 -Type: [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) +Type: [string][39] ## T4 -Type: [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) +Type: [string][39] ## f4 -**Parameters** +### Parameters - \`x\` **X** @@ -1808,19 +1880,101 @@ Type: [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference f5 comment -**Parameters** +### Parameters - \`y\` **Y** ## o2 ### om2 + +[1]: #z + +[2]: #zmethod + +[3]: #x + +[4]: #parameters + +[5]: #class + +[6]: #parameters-1 + +[7]: #classmethod + +[8]: #classgetter + +[9]: #classsetter + +[10]: #parameters-2 + +[11]: #staticmethod + +[12]: #staticgetter + +[13]: #staticsetter + +[14]: #parameters-3 + +[15]: #t5 + +[16]: #y2default + +[17]: #y4 + +[18]: #parameters-4 + +[19]: #object + +[20]: #method + +[21]: #getter + +[22]: #setter + +[23]: #parameters-5 + +[24]: #prop + +[25]: #func + +[26]: #f1 + +[27]: #f3 + +[28]: #t + +[29]: #t2 + +[30]: #t4 + +[31]: #f4 + +[32]: #parameters-6 + +[33]: #o1 + +[34]: #om1 + +[35]: #f5 + +[36]: #parameters-7 + +[37]: #o2 + +[38]: #om2 + +[39]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String + +[40]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean + +[41]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number " `; exports[`lint command generates lint output 1`] = `""`; -exports[`polyglot mode 1`] = ` +exports[`should use browser resolve 1`] = ` Array [ Object { "augments": Array [], @@ -1828,12 +1982,12 @@ Array [ "file": "[path]", "loc": Object { "end": Object { - "column": 3, - "line": 40, + "column": 2, + "line": 10, }, "start": Object { - "column": 1, - "line": 35, + "column": 0, + "line": 8, }, }, }, @@ -1842,62 +1996,25 @@ Array [ Object { "children": Array [ Object { - "position": Object { - "end": Object { - "column": 35, - "line": 1, - "offset": 34, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "text", - "value": "This method moves a hex to a color", + "value": "test", }, ], - "position": Object { - "end": Object { - "column": 35, - "line": 1, - "offset": 34, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "paragraph", }, ], - "position": Object { - "end": Object { - "column": 35, - "line": 1, - "offset": 34, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "root", }, "examples": Array [], + "kind": "function", "loc": Object { "end": Object { "column": 3, - "line": 40, + "line": 7, }, "start": Object { - "column": 1, - "line": 35, + "column": 0, + "line": 3, }, }, "members": Object { @@ -1907,82 +2024,116 @@ Array [ "instance": Array [], "static": Array [], }, - "name": "hexToUInt32Color", - "namespace": "hexToUInt32Color", - "params": Array [ + "name": "index", + "namespace": "index", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "index", + }, + ], + "properties": Array [], + "returns": Array [ Object { - "lineNumber": 3, - "name": "hex", - "title": "param", + "description": Object { + "children": Array [], + "type": "root", + }, + "title": "returns", "type": Object { "name": "string", "type": "NameExpression", }, }, ], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 2, + "title": "returns", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + }, +] +`; + +exports[`should use node resolve 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "file": "[path]", + "loc": Object { + "end": Object { + "column": 2, + "line": 10, + }, + "start": Object { + "column": 0, + "line": 8, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "test", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "examples": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 7, + }, + "start": Object { + "column": 0, + "line": 3, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "index", + "namespace": "index", + "params": Array [], "path": Array [ Object { - "name": "hexToUInt32Color", + "kind": "function", + "name": "index", }, ], "properties": Array [], "returns": Array [ Object { "description": Object { - "children": Array [ - Object { - "children": Array [ - Object { - "position": Object { - "end": Object { - "column": 6, - "line": 1, - "offset": 5, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, - "type": "text", - "value": "color", - }, - ], - "position": Object { - "end": Object { - "column": 6, - "line": 1, - "offset": 5, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, - "type": "paragraph", - }, - ], - "position": Object { - "end": Object { - "column": 6, - "line": 1, - "offset": 5, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, + "children": Array [], "type": "root", }, "title": "returns", "type": Object { - "name": "number", + "name": "string", "type": "NameExpression", }, }, @@ -1992,25 +2143,95 @@ Array [ Object { "description": null, "lineNumber": 2, - "name": "hexToUInt32Color", - "title": "name", + "title": "returns", + "type": Object { + "name": "string", + "type": "NameExpression", + }, }, + ], + "throws": Array [], + "todos": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "file": "[path]", + "loc": Object { + "end": Object { + "column": 2, + "line": 8, + }, + "start": Object { + "column": 0, + "line": 6, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "test", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "examples": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 5, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "node", + "namespace": "node", + "params": Array [], + "path": Array [ Object { - "description": null, - "lineNumber": 3, - "name": "hex", - "title": "param", + "kind": "function", + "name": "node", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [], + "type": "root", + }, + "title": "returns", "type": Object { "name": "string", "type": "NameExpression", }, }, + ], + "sees": Array [], + "tags": Array [ Object { - "description": "color", - "lineNumber": 4, + "description": null, + "lineNumber": 2, "title": "returns", "type": Object { - "name": "number", + "name": "string", "type": "NameExpression", }, }, diff --git a/__tests__/__snapshots__/index.js.snap b/__tests__/__snapshots__/index.js.snap new file mode 100644 index 000000000..bd494ced1 --- /dev/null +++ b/__tests__/__snapshots__/index.js.snap @@ -0,0 +1,126 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`build 1`] = ` +Array [ + Object { + "augments": Array [], + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "hi", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": SourceLocation { + "end": Position { + "column": 9, + "line": 1, + }, + "filename": undefined, + "identifierName": undefined, + "start": Position { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "name", + "namespace": "name", + "params": Array [], + "path": Array [ + Object { + "kind": undefined, + "name": "name", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`build 2`] = ` +" + +## name + +hi +" +`; + +exports[`build 3`] = ` +"[ + { + \\"description\\": { + \\"type\\": \\"root\\", + \\"children\\": [ + { + \\"type\\": \\"paragraph\\", + \\"children\\": [ + { + \\"type\\": \\"text\\", + \\"value\\": \\"hi\\" + } + ] + } + ] + }, + \\"tags\\": [], + \\"loc\\": { + \\"start\\": { + \\"line\\": 1, + \\"column\\": 0 + }, + \\"end\\": { + \\"line\\": 1, + \\"column\\": 9 + } + }, + \\"augments\\": [], + \\"examples\\": [], + \\"implements\\": [], + \\"params\\": [], + \\"properties\\": [], + \\"returns\\": [], + \\"sees\\": [], + \\"throws\\": [], + \\"todos\\": [], + \\"yields\\": [], + \\"name\\": \\"name\\", + \\"members\\": { + \\"global\\": [], + \\"inner\\": [], + \\"instance\\": [], + \\"events\\": [], + \\"static\\": [] + }, + \\"path\\": [ + { + \\"name\\": \\"name\\" + } + ], + \\"namespace\\": \\"name\\" + } +]" +`; diff --git a/__tests__/__snapshots__/test.js.snap b/__tests__/__snapshots__/test.js.snap index e32dfb8c0..62b30a73e 100644 --- a/__tests__/__snapshots__/test.js.snap +++ b/__tests__/__snapshots__/test.js.snap @@ -1,40 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`config 1`] = ` -" - -## MyClass - -This is my class, a demo thing. - -**Properties** - -- \`howMany\` **[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** how many things it contains - -### getFoo - -Get the number 42 - -**Parameters** - -- \`getIt\` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** whether to get the number - -Returns **[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** forty-two - -### getUndefined - -Get undefined - -Returns **[undefined](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined)** does not return anything. - -## Hello - -World - -" -`; - -exports[`external modules option 1`] = ` +exports[`Use Source attribute only 1`] = ` Array [ Object { "augments": Array [], @@ -42,11 +8,13 @@ Array [ "loc": SourceLocation { "end": Position { "column": 1, - "line": 12, + "line": 18, }, + "filename": undefined, + "identifierName": undefined, "start": Position { "column": 0, - "line": 10, + "line": 6, }, }, }, @@ -55,98 +23,32 @@ Array [ Object { "children": Array [ Object { - "position": Position { - "end": Object { - "column": 9, - "line": 1, - "offset": 8, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, - "type": "text", - "value": "I am in ", - }, - Object { - "position": Position { - "end": Object { - "column": 28, - "line": 1, - "offset": 27, - }, - "indent": Array [], - "start": Object { - "column": 9, - "line": 1, - "offset": 8, - }, - }, - "type": "inlineCode", - "value": "external.input.js", - }, - Object { - "position": Position { - "end": Object { - "column": 29, - "line": 1, - "offset": 28, - }, - "indent": Array [], - "start": Object { - "column": 28, - "line": 1, - "offset": 27, - }, - }, "type": "text", - "value": ".", + "value": "This Vue Component is a test", }, ], - "position": Position { - "end": Object { - "column": 29, - "line": 1, - "offset": 28, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "paragraph", }, ], - "position": Object { - "end": Object { - "column": 29, - "line": 1, - "offset": 28, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "root", }, - "errors": Array [], + "errors": Array [ + Object { + "message": "could not determine @name for hierarchy", + }, + ], "examples": Array [], - "kind": "function", + "implements": Array [], "loc": SourceLocation { "end": Position { "column": 3, - "line": 9, + "line": 5, }, + "filename": undefined, + "identifierName": undefined, "start": Position { "column": 0, - "line": 7, + "line": 2, }, }, "members": Object { @@ -156,33 +58,68 @@ Array [ "instance": Array [], "static": Array [], }, - "name": "foo", - "namespace": "foo", + "name": "", + "namespace": "", "params": Array [], "path": Array [ Object { - "kind": "function", - "name": "foo", + "kind": undefined, + "name": "", }, ], "properties": Array [], - "returns": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "vue-tested component", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "vue-tested", + "type": "NameExpression", + }, + }, + ], "sees": Array [], - "tags": Array [], + "tags": Array [ + Object { + "description": "vue-tested component", + "lineNumber": 2, + "title": "returns", + "type": Object { + "name": "vue-tested", + "type": "NameExpression", + }, + }, + ], "throws": Array [], "todos": Array [], + "yields": Array [], }, Object { "augments": Array [], "context": Object { "loc": SourceLocation { "end": Position { - "column": 2, - "line": 10, + "column": 5, + "line": 16, }, + "filename": undefined, + "identifierName": undefined, "start": Position { - "column": 0, - "line": 7, + "column": 4, + "line": 13, }, }, }, @@ -191,66 +128,36 @@ Array [ Object { "children": Array [ Object { - "position": Position { - "end": Object { - "column": 38, - "line": 1, - "offset": 37, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "text", - "value": "This function returns the number one.", + "value": "This is a number", }, ], - "position": Position { - "end": Object { - "column": 38, - "line": 1, - "offset": 37, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "paragraph", }, ], - "position": Object { - "end": Object { - "column": 38, - "line": 1, - "offset": 37, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "root", }, - "errors": Array [], + "errors": Array [ + Object { + "commentLineNumber": 0, + "message": "@memberof reference to .props not found", + }, + ], "examples": Array [], - "kind": "function", + "implements": Array [], "loc": SourceLocation { "end": Position { - "column": 3, - "line": 6, + "column": 7, + "line": 12, }, + "filename": undefined, + "identifierName": undefined, "start": Position { - "column": 0, - "line": 3, + "column": 4, + "line": 10, }, }, + "memberof": ".props", "members": Object { "events": Array [], "global": Array [], @@ -258,103 +165,43 @@ Array [ "instance": Array [], "static": Array [], }, - "name": "main", - "namespace": "main", + "name": "myNumber", + "namespace": ".myNumber", "params": Array [], "path": Array [ Object { - "kind": "function", - "name": "main", + "kind": undefined, + "name": "myNumber", + "scope": "static", }, ], "properties": Array [], - "returns": Array [ - Object { - "description": Object { - "children": Array [ - Object { - "children": Array [ - Object { - "position": Position { - "end": Object { - "column": 10, - "line": 1, - "offset": 9, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, - "type": "text", - "value": "numberone", - }, - ], - "position": Position { - "end": Object { - "column": 10, - "line": 1, - "offset": 9, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, - "type": "paragraph", - }, - ], - "position": Object { - "end": Object { - "column": 10, - "line": 1, - "offset": 9, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, - "type": "root", - }, - "title": "returns", - "type": Object { - "name": "Number", - "type": "NameExpression", - }, - }, - ], + "returns": Array [], + "scope": "static", "sees": Array [], - "tags": Array [ - Object { - "description": "numberone", - "lineNumber": 2, - "title": "returns", - "type": Object { - "name": "Number", - "type": "NameExpression", - }, - }, - ], + "tags": Array [], "throws": Array [], "todos": Array [], + "yields": Array [], }, +] +`; + +exports[`Vue file 1`] = ` +Array [ Object { "augments": Array [], "context": Object { "loc": SourceLocation { "end": Position { - "column": 2, - "line": 8, + "column": 1, + "line": 20, }, + "filename": undefined, + "identifierName": undefined, "start": Position { "column": 0, - "line": 5, + "line": 7, }, }, }, @@ -363,64 +210,28 @@ Array [ Object { "children": Array [ Object { - "position": Position { - "end": Object { - "column": 38, - "line": 1, - "offset": 37, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "text", - "value": "This function returns the number one.", + "value": "This Vue Component is a test", }, ], - "position": Position { - "end": Object { - "column": 38, - "line": 1, - "offset": 37, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "paragraph", }, ], - "position": Object { - "end": Object { - "column": 38, - "line": 1, - "offset": 37, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "root", }, "errors": Array [], "examples": Array [], - "kind": "function", + "implements": Array [], "loc": SourceLocation { "end": Position { "column": 3, - "line": 4, + "line": 6, }, + "filename": undefined, + "identifierName": undefined, "start": Position { "column": 0, - "line": 1, + "line": 3, }, }, "members": Object { @@ -430,13 +241,13 @@ Array [ "instance": Array [], "static": Array [], }, - "name": "index", - "namespace": "index", + "name": "vue.input", + "namespace": "vue.input", "params": Array [], "path": Array [ Object { - "kind": "function", - "name": "index", + "kind": undefined, + "name": "vue.input", }, ], "properties": Array [], @@ -447,56 +258,18 @@ Array [ Object { "children": Array [ Object { - "position": Position { - "end": Object { - "column": 10, - "line": 1, - "offset": 9, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "text", - "value": "numberone", + "value": "vue-tested component", }, ], - "position": Position { - "end": Object { - "column": 10, - "line": 1, - "offset": 9, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "paragraph", }, ], - "position": Object { - "end": Object { - "column": 10, - "line": 1, - "offset": 9, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "root", }, "title": "returns", "type": Object { - "name": "Number", + "name": "vue-tested", "type": "NameExpression", }, }, @@ -504,35 +277,32 @@ Array [ "sees": Array [], "tags": Array [ Object { - "description": "numberone", + "description": "vue-tested component", "lineNumber": 2, - "title": "return", + "title": "returns", "type": Object { - "name": "Number", + "name": "vue-tested", "type": "NameExpression", }, }, ], "throws": Array [], "todos": Array [], + "yields": Array [], }, -] -`; - -exports[`git option 1`] = ` -Array [ Object { "augments": Array [], "context": Object { - "github": "[github]", "loc": SourceLocation { "end": Position { - "column": 2, - "line": 8, + "column": 1, + "line": 19, }, + "filename": undefined, + "identifierName": undefined, "start": Position { "column": 0, - "line": 5, + "line": 10, }, }, }, @@ -541,209 +311,242 @@ Array [ Object { "children": Array [ Object { - "position": Position { - "end": Object { - "column": 38, - "line": 1, - "offset": 37, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "text", - "value": "This function returns the number one.", + "value": "props", }, ], - "position": Position { - "end": Object { - "column": 38, - "line": 1, - "offset": 37, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "paragraph", }, ], - "position": Object { - "end": Object { - "column": 38, - "line": 1, - "offset": 37, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "root", }, - "errors": Array [], + "errors": Array [ + Object { + "commentLineNumber": 0, + "message": "@memberof reference to vue.input not found", + }, + ], "examples": Array [], - "kind": "function", + "implements": Array [], "loc": SourceLocation { "end": Position { - "column": 3, - "line": 4, + "column": 12, + "line": 9, }, + "filename": undefined, + "identifierName": undefined, "start": Position { "column": 0, - "line": 1, + "line": 9, }, }, + "memberof": "vue.input", "members": Object { "events": Array [], "global": Array [], "inner": Array [], "instance": Array [], - "static": Array [], - }, - "name": "simple.input", - "namespace": "simple.input", - "params": Array [], - "path": Array [ - Object { - "kind": "function", - "name": "simple.input", - }, - ], - "properties": Array [], - "returns": Array [ - Object { - "description": Object { - "children": Array [ - Object { - "children": Array [ - Object { - "position": Position { - "end": Object { - "column": 10, - "line": 1, - "offset": 9, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, - "type": "text", - "value": "numberone", - }, - ], - "position": Position { - "end": Object { - "column": 10, - "line": 1, - "offset": 9, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, + "static": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": SourceLocation { + "end": Position { + "column": 3, + "line": 18, + }, + "filename": undefined, + "identifierName": undefined, + "start": Position { + "column": 2, + "line": 15, }, - "type": "paragraph", }, - ], - "position": Object { - "end": Object { - "column": 10, - "line": 1, - "offset": 9, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is a number", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": SourceLocation { + "end": Position { + "column": 5, + "line": 14, }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, + "filename": undefined, + "identifierName": undefined, + "start": Position { + "column": 2, + "line": 12, }, }, - "type": "root", - }, - "title": "returns", - "type": Object { - "name": "number", - "type": "NameExpression", + "memberof": "vue.input.props", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "myNumber", + "namespace": ".props.myNumber", + "params": Array [], + "path": Array [ + Object { + "kind": undefined, + "name": "props", + "scope": "static", + }, + Object { + "kind": undefined, + "name": "myNumber", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], }, - }, - ], - "sees": Array [], - "tags": Array [ + ], + }, + "name": "props", + "namespace": ".props", + "params": Array [], + "path": Array [ Object { - "description": "numberone", - "lineNumber": 2, - "title": "returns", - "type": Object { - "name": "number", - "type": "NameExpression", - }, + "kind": undefined, + "name": "props", + "scope": "static", }, ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], "throws": Array [], "todos": Array [], + "yields": Array [], }, ] `; -exports[`git option 2`] = ` +exports[`Vue file 2`] = `Array []`; + +exports[`config 1`] = ` " -## simple.input +## MyClass -[undefined:5-8](<> \\"Source code on GitHub\\") +This is my class, a demo thing. -This function returns the number one. +### Properties + +* \`howMany\` **[number][1]** how many things it contains + +### getFoo + +Get the number 42 + +#### Parameters -Returns **[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** numberone +* \`getIt\` **[boolean][2]** whether to get the number + +Returns **[number][1]** forty-two + +### getUndefined + +Get undefined + +Returns **[undefined][3]** does not return anything. + +## Hello + +World + +[1]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number + +[2]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean + +[3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined " `; -exports[`highlightAuto md output 1`] = ` +exports[`config with nested sections 1`] = ` " -## multilanguage.input +## Alpha -**Extends Foo, Bar** -This function returns the number one. -**Examples** +### third -\`\`\`js -var myFoo = new Foo('[data-foo]'); -myFoo.foo(42); -\`\`\` +This function is third -\`\`\`html -

    Data-Foo Element in the dom

    -\`\`\` +### first -\`\`\`css -[data-foo] { - background-color: red; -} -\`\`\` +This function is first + +### first + +forgot a memberof here... sure hope that doesn't crash anything! + +## Bravo + +Contains a subsection! -- Throws **[Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error)** if you give it something -- Throws **[TypeError](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError)** if you give it something else +### Charlie -Returns **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** numberone +Second is in here + +#### second + +This class has some members + +##### foo + +second::foo + +###### Parameters + +* \`pork\` + +##### bar + +second::bar + +###### Parameters + +* \`beans\` +* \`rice\` + +## AClass + +### second + +shares a name with a top level item referenced in the TOC... sure hope +that doesn't crash anything! " `; -exports[`multi-file input 1`] = ` +exports[`external modules option 1`] = ` Array [ Object { "augments": Array [], @@ -751,11 +554,13 @@ Array [ "loc": SourceLocation { "end": Position { "column": 1, - "line": 13, + "line": 10, }, + "filename": undefined, + "identifierName": undefined, "start": Position { "column": 0, - "line": 10, + "line": 8, }, }, }, @@ -764,69 +569,37 @@ Array [ Object { "children": Array [ Object { - "position": Position { - "end": Object { - "column": 43, - "line": 1, - "offset": 42, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "text", - "value": "This function returns the number plus two.", + "value": "I am in ", }, - ], - "position": Position { - "end": Object { - "column": 43, - "line": 1, - "offset": 42, + Object { + "type": "inlineCode", + "value": "external.input.js", }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, + Object { + "type": "text", + "value": ".", }, - }, + ], "type": "paragraph", }, ], - "position": Object { - "end": Object { - "column": 43, - "line": 1, - "offset": 42, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "root", }, "errors": Array [], - "examples": Array [ - Object { - "description": "var result = returnTwo(4); -// result is 6", - }, - ], + "examples": Array [], + "implements": Array [], "kind": "function", "loc": SourceLocation { "end": Position { "column": 3, - "line": 9, + "line": 7, }, + "filename": undefined, + "identifierName": undefined, "start": Position { "column": 0, - "line": 1, + "line": 5, }, }, "members": Object { @@ -836,130 +609,100 @@ Array [ "instance": Array [], "static": Array [], }, - "name": "returnTwo", - "namespace": "returnTwo", - "params": Array [ - Object { - "description": Object { - "children": Array [ - Object { - "children": Array [ - Object { - "position": Position { - "end": Object { - "column": 11, - "line": 1, - "offset": 10, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, - "type": "text", - "value": "the number", - }, - ], - "position": Position { - "end": Object { - "column": 11, - "line": 1, - "offset": 10, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, - "type": "paragraph", - }, - ], - "position": Object { - "end": Object { - "column": 11, - "line": 1, - "offset": 10, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, - "type": "root", - }, - "lineNumber": 3, - "name": "a", - "title": "param", - "type": Object { - "name": "Number", - "type": "NameExpression", - }, - }, - ], + "name": "foo", + "namespace": "foo", + "params": Array [], "path": Array [ Object { "kind": "function", - "name": "returnTwo", + "name": "foo", }, ], "properties": Array [], - "returns": Array [ - Object { - "description": Object { - "children": Array [ - Object { - "children": Array [ - Object { - "position": Position { - "end": Object { - "column": 10, - "line": 1, - "offset": 9, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, - "type": "text", - "value": "numbertwo", - }, - ], - "position": Position { - "end": Object { - "column": 10, - "line": 1, - "offset": 9, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": SourceLocation { + "end": Position { + "column": 2, + "line": 10, + }, + "filename": undefined, + "identifierName": undefined, + "start": Position { + "column": 0, + "line": 7, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": SourceLocation { + "end": Position { + "column": 3, + "line": 6, + }, + "filename": undefined, + "identifierName": undefined, + "start": Position { + "column": 0, + "line": 3, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "main", + "namespace": "main", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "main", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", }, - }, + ], "type": "paragraph", }, ], - "position": Object { - "end": Object { - "column": 10, - "line": 1, - "offset": 9, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "root", }, "title": "returns", @@ -972,42 +715,140 @@ Array [ "sees": Array [], "tags": Array [ Object { - "description": "the number", - "lineNumber": 3, - "name": "a", - "title": "param", + "description": "numberone", + "lineNumber": 2, + "title": "returns", "type": Object { "name": "Number", "type": "NameExpression", }, }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": SourceLocation { + "end": Position { + "column": 2, + "line": 8, + }, + "filename": undefined, + "identifierName": undefined, + "start": Position { + "column": 0, + "line": 5, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": SourceLocation { + "end": Position { + "column": 3, + "line": 4, + }, + "filename": undefined, + "identifierName": undefined, + "start": Position { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "index", + "namespace": "index", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "index", + }, + ], + "properties": Array [], + "returns": Array [ Object { - "description": "numbertwo", - "lineNumber": 4, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, "title": "returns", "type": Object { "name": "Number", "type": "NameExpression", }, }, + ], + "sees": Array [], + "tags": Array [ Object { - "description": "var result = returnTwo(4); -// result is 6", - "lineNumber": 5, - "title": "example", + "description": "numberone", + "lineNumber": 2, + "title": "return", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, }, ], "throws": Array [], "todos": Array [], + "yields": Array [], }, +] +`; + +exports[`git option 1`] = ` +Array [ Object { "augments": Array [], "context": Object { + "github": Object { + "path": "[github]", + "url": "[github]", + }, "loc": SourceLocation { "end": Position { "column": 2, "line": 8, }, + "filename": undefined, + "identifierName": undefined, "start": Position { "column": 0, "line": 5, @@ -1019,61 +860,26 @@ Array [ Object { "children": Array [ Object { - "position": Position { - "end": Object { - "column": 38, - "line": 1, - "offset": 37, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "text", "value": "This function returns the number one.", }, ], - "position": Position { - "end": Object { - "column": 38, - "line": 1, - "offset": 37, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "paragraph", }, ], - "position": Object { - "end": Object { - "column": 38, - "line": 1, - "offset": 37, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "root", }, "errors": Array [], "examples": Array [], + "implements": Array [], "kind": "function", "loc": SourceLocation { "end": Position { "column": 3, "line": 4, }, + "filename": undefined, + "identifierName": undefined, "start": Position { "column": 0, "line": 1, @@ -1103,51 +909,13 @@ Array [ Object { "children": Array [ Object { - "position": Position { - "end": Object { - "column": 10, - "line": 1, - "offset": 9, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "text", "value": "numberone", }, ], - "position": Position { - "end": Object { - "column": 10, - "line": 1, - "offset": 9, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "paragraph", }, ], - "position": Object { - "end": Object { - "column": 10, - "line": 1, - "offset": 9, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "root", }, "title": "returns", @@ -1171,6 +939,30627 @@ Array [ ], "throws": Array [], "todos": Array [], + "yields": Array [], }, ] `; + +exports[`git option 2`] = ` +" + +## simple.input + +[\\\\[github\\\\]:5-8][1] + +This function returns the number one. + +Returns **[number][2]** numberone + +[1]: [github] \\"Source code on GitHub\\" + +[2]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number +" +`; + +exports[`highlightAuto md output 1`] = ` +" + +## multilanguage.input + +**Extends Foo, Bar** + +This function returns the number one. + +### Examples + +\`\`\`js +var myFoo = new Foo('[data-foo]'); +myFoo.foo(42); +\`\`\` + +\`\`\`html +

    Data-Foo Element in the dom

    +\`\`\` + +\`\`\`css +[data-foo] { + background-color: red; +} +\`\`\` + +* Throws **[Error][1]** if you give it something +* Throws **[TypeError][2]** if you give it something else + +Returns **[Number][3]** numberone + +[1]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Error + +[2]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/TypeError + +[3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number +" +`; + +exports[`html nested.input.js 1`] = ` +" + + + + | Documentation + + + + + + + + +
    +
    +
    +

    documentation

    +
    + +
    + +
    + +
    +
    +
    + + +
    + + +
    + +

    + Klass +

    + + +
    + + +

    Creates a new Klass

    + +
    new Klass(foo: any)
    + + +

    + Extends + + Stream.Writable + +

    + + + + + + + + + + +
    Parameters
    +
    + +
    +
    + foo (any) + +
    + +
    + +
    + + + + + + + + + + + + + +
    Static Members
    +
    + +
    +
    +
    + + isClass(other, also) +
    +
    +
    +
    + + + +

    Decide whether an object is a Klass instance +This is a [klasssic]Klass +This is a [link to something that does not exist]DoesNot

    + +
    isClass(other: Object, also: any): boolean
    + + + + + + + + + + + +
    Parameters
    +
    + +
    +
    + other (Object) + +
    + +
    + +
    +
    + also (any) + +
    + +
    + +
    + + + + + + +
    Returns
    + boolean: + whether the other thing is a Klass + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    +
    +
    + + isWeird(other) +
    +
    +
    +
    + + + +

    A function that triggers the case where the autolinker doesn't find +the referenced class type

    + +
    isWeird(other: Weird): boolean
    + + + + + + + + + + + +
    Parameters
    +
    + +
    +
    + other (Weird) + +
    + +
    + +
    + + + + + + +
    Returns
    + boolean: + whether the other thing is a Klass + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    +
    +
    + + isBuffer(buf, size) +
    +
    +
    +
    + + + +

    This method takes a Buffer object that will be linked to nodejs.org

    + +
    isBuffer(buf: (Buffer | string), size: number): boolean
    + + + + + + + + + + + +
    Parameters
    +
    + +
    +
    + buf ((Buffer | string)) + +
    + +
    + +
    +
    + size (number + = 0) + size + +
    + +
    + +
    + + + + + + +
    Returns
    + boolean: + whether the other thing is a Klass + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    +
    +
    + + isArrayOfBuffers(buffers) +
    +
    +
    +
    + + + +

    This method takes an array of buffers and counts them

    + +
    isArrayOfBuffers(buffers: Array<Buffer>): number
    + + + + + + + + + + + +
    Parameters
    +
    + +
    +
    + buffers (Array<Buffer>) + some buffers + +
    + +
    + +
    + + + + + + +
    Returns
    + number: + how many + + + + + + + + + + +
    Example
    + + +
    var k = new Klass();
    +k.isArrayOfBuffers();
    + + + + + + + + + + +
    + +
    +
    + +
    +
    +
    + + MAGIC_NUMBER +
    +
    +
    +
    + + + +

    A magic number that identifies this Klass.

    + +
    MAGIC_NUMBER
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    + + + + +
    Instance Members
    +
    + +
    +
    +
    + + getFoo() +
    +
    +
    +
    + + + +

    Get this Klass's foo

    + +
    getFoo(): Number
    + + + + + + + + + + + + + + + + +
    Returns
    + Number: + foo + + + + + + + + + + +
    Example
    + +

    this shows you how to getFoo

    +

    +
    var x = foo.getFoo();
    + + + + + + + + + + +
    + +
    +
    + +
    +
    +
    + + withOptions(options, otherOptions) +
    +
    +
    +
    + + + +

    A function with an options parameter

    + +
    withOptions(options: Object, otherOptions: number?)
    + + + + + + + + + + + +
    Parameters
    +
    + +
    +
    + options (Object) + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameDescription
    options.foo string +
    options.bar number +
    + +
    + +
    +
    + otherOptions (number?) + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    +
    +
    + + withDeepOptions(options) +
    +
    +
    +
    + + + +

    A function with a deep options parameter

    + +
    withDeepOptions(options: Object)
    + + + + + + + + + + + +
    Parameters
    +
    + +
    +
    + options (Object) + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameDescription
    options.foo string +
    options.bar Object +
    options.bar.buz string +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    + + + + + + +
    Events
    +
    + +
    +
    +
    + + event +
    +
    +
    +
    + + + +

    Klass event

    + +
    event
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +
    + + + + +
    + + +
    + +

    + CustomError +

    + + +
    + + +

    a typedef with nested properties

    + +
    CustomError
    + + + + + + + + + + + + + +
    Properties
    +
    + +
    + error (object) + : An error + + +
      + +
    • error.code string + +

      The error's code

      +
    • + +
    • error.description string + +

      The error's description

      +
    • + +
    + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + + +
    + + +
    + +

    + bar +

    + + +
    + + +

    Get an instance of Klass. Will make +a klass instance multiword, +like a klass

    + +
    bar(): Klass
    + + + + + + + + + + + + + + + + +
    Returns
    + Klass: + that class + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + +
    + +

    + bar2 +

    + + +
    + + +

    Rest property function

    + +
    bar2(toys: ...Number): undefined
    + + + + + + + + + + + +
    Parameters
    +
    + +
    +
    + toys (...Number) + +
    + +
    + +
    + + + + + + +
    Returns
    + undefined: + nothing + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + +
    + +

    + bar3 +

    + + +
    + + +

    Get an instance of Klass. Will make +a klass instance multiword, +like a klass. This needs a number input.

    + +
    bar3(): undefined
    + + + + + + + + + + + + + + + + +
    Returns
    + undefined: + nothing + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + +
    + +

    + Foo +

    + + +
    + + +

    This is Foo

    + +
    new Foo()
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Instance Members
    +
    + +
    +
    +
    + + bar +
    +
    +
    +
    + + + +

    This is bar

    + +
    bar
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    + + + + + + +
    + + + + +
    + + +
    + +

    + customStreams +

    + + +
    + + +

    I am the container of stream types

    + +
    customStreams
    + + + + + + + + + + + + + + + + + + + + + + + +
    Static Members
    +
    + +
    +
    +
    + + new passthrough() +
    +
    +
    +
    + + + +

    I am a passthrough stream that belongs to customStreams

    + +
    new passthrough()
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    + + + + + + + + +
    + + + + +
    + + +
    + +

    + tableObj +

    + + +
    + + + + + + + + + + + + + + + + + + + + + + +
    Col 1Col 2Col 3
    Dat 1Dat 2Dat 3
    Dat 4Dat 5Dat 6
    + +
    tableObj
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    + + + + + +" +`; + +exports[`multi-file input 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": SourceLocation { + "end": Position { + "column": 1, + "line": 13, + }, + "filename": undefined, + "identifierName": undefined, + "start": Position { + "column": 0, + "line": 10, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number plus two.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [ + Object { + "description": "var result = returnTwo(4); +// result is 6", + }, + ], + "implements": Array [], + "kind": "function", + "loc": SourceLocation { + "end": Position { + "column": 3, + "line": 9, + }, + "filename": undefined, + "identifierName": undefined, + "start": Position { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "returnTwo", + "namespace": "returnTwo", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "the number", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 3, + "name": "a", + "title": "param", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "returnTwo", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "numbertwo", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "the number", + "lineNumber": 3, + "name": "a", + "title": "param", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + Object { + "description": "numbertwo", + "lineNumber": 4, + "title": "returns", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + Object { + "description": "var result = returnTwo(4); +// result is 6", + "lineNumber": 5, + "title": "example", + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": SourceLocation { + "end": Position { + "column": 2, + "line": 8, + }, + "filename": undefined, + "identifierName": undefined, + "start": Position { + "column": 0, + "line": 5, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": SourceLocation { + "end": Position { + "column": 3, + "line": 4, + }, + "filename": undefined, + "identifierName": undefined, + "start": Position { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "simple.input", + "namespace": "simple.input", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "simple.input", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "numberone", + "lineNumber": 2, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs boolean-literal-type.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 2, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 6, + "line": 1, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "f", + "namespace": "f", + "params": Array [ + Object { + "lineNumber": 2, + "name": "t", + "title": "param", + "type": Object { + "type": "BooleanLiteralType", + "value": true, + }, + }, + Object { + "lineNumber": 2, + "name": "f", + "title": "param", + "type": Object { + "type": "BooleanLiteralType", + "value": false, + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "f", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "title": "returns", + "type": Object { + "elements": Array [ + Object { + "type": "BooleanLiteralType", + "value": true, + }, + Object { + "type": "BooleanLiteralType", + "value": false, + }, + ], + "type": "ArrayType", + }, + }, + ], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs boolean-literal-type.input.js markdown 1`] = ` +" + +### Table of Contents + +* [f][1] + * [Parameters][2] + +## f + +### Parameters + +* \`t\` **\`true\`** +* \`f\` **\`false\`** + +Returns **\\\\[\`true\`, \`false\`]** + +[1]: #f + +[2]: #parameters +" +`; + +exports[`outputs boolean-literal-type.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "f", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "t", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "true", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "f", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "false", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "[", + }, + Object { + "type": "inlineCode", + "value": "true", + }, + Object { + "type": "text", + "value": ", ", + }, + Object { + "type": "inlineCode", + "value": "false", + }, + Object { + "type": "text", + "value": "]", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", +} +`; + +exports[`outputs class.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 9, + }, + "start": Object { + "column": 0, + "line": 7, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is my class, a demo thing.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [ + Object { + "description": null, + "lineNumber": 3, + "name": "MyInterface", + "title": "implements", + "type": Object { + "name": "MyInterface", + "type": "NameExpression", + }, + }, + ], + "kind": "class", + "loc": Object { + "end": Object { + "column": 3, + "line": 6, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 18, + }, + "start": Object { + "column": 0, + "line": 16, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Get the number 42", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 15, + }, + "start": Object { + "column": 0, + "line": 11, + }, + }, + "memberof": "MyClass", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "getFoo", + "namespace": "MyClass#getFoo", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "whether to get the number", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 2, + "name": "getIt", + "title": "param", + "type": Object { + "name": "boolean", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "MyClass", + }, + Object { + "kind": "function", + "name": "getFoo", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "forty-two", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "scope": "instance", + "sees": Array [], + "tags": Array [ + Object { + "description": "whether to get the number", + "lineNumber": 2, + "name": "getIt", + "title": "param", + "type": Object { + "name": "boolean", + "type": "NameExpression", + }, + }, + Object { + "description": "forty-two", + "lineNumber": 3, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 47, + "line": 24, + }, + "start": Object { + "column": 0, + "line": 24, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Get undefined", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 23, + }, + "start": Object { + "column": 0, + "line": 20, + }, + }, + "memberof": "MyClass", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "getUndefined", + "namespace": "MyClass#getUndefined", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "MyClass", + }, + Object { + "kind": "function", + "name": "getUndefined", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "does not return anything.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "type": "UndefinedLiteral", + }, + }, + ], + "scope": "instance", + "sees": Array [], + "tags": Array [ + Object { + "description": "does not return anything.", + "lineNumber": 2, + "title": "returns", + "type": Object { + "type": "UndefinedLiteral", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + "static": Array [], + }, + "name": "MyClass", + "namespace": "MyClass", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "MyClass", + }, + ], + "properties": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "how many things it contains", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 4, + "name": "howMany", + "title": "property", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 2, + "name": "MyClass", + "title": "class", + "type": null, + }, + Object { + "description": null, + "lineNumber": 3, + "name": "MyInterface", + "title": "implements", + "type": Object { + "name": "MyInterface", + "type": "NameExpression", + }, + }, + Object { + "description": "how many things it contains", + "lineNumber": 4, + "name": "howMany", + "title": "property", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs class.input.js markdown 1`] = ` +" + +### Table of Contents + +* [MyClass][1] + * [Properties][2] + * [getFoo][3] + * [Parameters][4] + * [getUndefined][5] + +## MyClass + +This is my class, a demo thing. + +### Properties + +* \`howMany\` **[number][6]** how many things it contains + +### getFoo + +Get the number 42 + +#### Parameters + +* \`getIt\` **[boolean][7]** whether to get the number + +Returns **[number][6]** forty-two + +### getUndefined + +Get undefined + +Returns **[undefined][8]** does not return anything. + +[1]: #myclass + +[2]: #properties + +[3]: #getfoo + +[4]: #parameters + +[5]: #getundefined + +[6]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number + +[7]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean + +[8]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined +" +`; + +exports[`outputs class.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "MyClass", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is my class, a demo thing.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Properties", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "howMany", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "how many things it contains", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "getFoo", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Get the number 42", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 4, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "getIt", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "boolean", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "whether to get the number", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "forty-two", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "getUndefined", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Get undefined", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "undefined", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "does not return anything.", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean", + }, + Object { + "identifier": "3", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined", + }, + ], + "type": "root", +} +`; + +exports[`outputs default-export-function.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 5, + }, + "start": Object { + "column": 0, + "line": 2, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "i am foo", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 15, + "line": 1, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "default-export-function.input", + "namespace": "default-export-function.input", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "default-export-function.input", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 22, + "line": 4, + }, + "start": Object { + "column": 2, + "line": 4, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "i am foo's son", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [ + Object { + "commentLineNumber": 0, + "message": "@memberof reference to default-export-function.input not found", + }, + ], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 23, + "line": 3, + }, + "start": Object { + "column": 2, + "line": 3, + }, + }, + "memberof": "default-export-function.input", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "bar", + "namespace": ".bar", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "bar", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs default-export-function.input.js markdown 1`] = ` +" + +### Table of Contents + +* [default-export-function.input][1] +* [bar][2] + +## default-export-function.input + +i am foo + +## bar + +i am foo's son + +[1]: #default-export-functioninput + +[2]: #bar +" +`; + +exports[`outputs default-export-function.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "default-export-function.input", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "i am foo", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "bar", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "i am foo's son", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", +} +`; + +exports[`outputs document-exported.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 28, + "line": 1, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 28, + "line": 1, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "x", + "namespace": "x", + "params": Array [ + Object { + "lineNumber": 1, + "name": "yparam", + "title": "param", + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "x", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 1, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 14, + "line": 2, + }, + "start": Object { + "column": 2, + "line": 2, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 14, + "line": 2, + }, + "start": Object { + "column": 2, + "line": 2, + }, + }, + "memberof": "z", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "zMethod", + "namespace": "z#zMethod", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "z", + }, + Object { + "kind": "function", + "name": "zMethod", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + "static": Array [], + }, + "name": "z", + "namespace": "z", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "z", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 11, + }, + "start": Object { + "column": 0, + "line": 3, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 1, + "line": 11, + }, + "start": Object { + "column": 0, + "line": 3, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 18, + "line": 5, + }, + "start": Object { + "column": 2, + "line": 5, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 18, + "line": 5, + }, + "start": Object { + "column": 2, + "line": 5, + }, + }, + "memberof": "Class", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "classMethod", + "namespace": "Class#classMethod", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Class", + }, + Object { + "kind": "function", + "name": "classMethod", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 22, + "line": 6, + }, + "start": Object { + "column": 2, + "line": 6, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "member", + "loc": Object { + "end": Object { + "column": 22, + "line": 6, + }, + "start": Object { + "column": 2, + "line": 6, + }, + }, + "memberof": "Class", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "classGetter", + "namespace": "Class#classGetter", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Class", + }, + Object { + "kind": "member", + "name": "classGetter", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 23, + "line": 7, + }, + "start": Object { + "column": 2, + "line": 7, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "member", + "loc": Object { + "end": Object { + "column": 23, + "line": 7, + }, + "start": Object { + "column": 2, + "line": 7, + }, + }, + "memberof": "Class", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "classSetter", + "namespace": "Class#classSetter", + "params": Array [ + Object { + "lineNumber": 7, + "name": "v", + "title": "param", + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "Class", + }, + Object { + "kind": "member", + "name": "classSetter", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + "static": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 26, + "line": 8, + }, + "start": Object { + "column": 2, + "line": 8, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 26, + "line": 8, + }, + "start": Object { + "column": 2, + "line": 8, + }, + }, + "memberof": "Class", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "staticMethod", + "namespace": "Class.staticMethod", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Class", + }, + Object { + "kind": "function", + "name": "staticMethod", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 30, + "line": 9, + }, + "start": Object { + "column": 2, + "line": 9, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "member", + "loc": Object { + "end": Object { + "column": 30, + "line": 9, + }, + "start": Object { + "column": 2, + "line": 9, + }, + }, + "memberof": "Class", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "staticGetter", + "namespace": "Class.staticGetter", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Class", + }, + Object { + "kind": "member", + "name": "staticGetter", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 31, + "line": 10, + }, + "start": Object { + "column": 2, + "line": 10, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "member", + "loc": Object { + "end": Object { + "column": 31, + "line": 10, + }, + "start": Object { + "column": 2, + "line": 10, + }, + }, + "memberof": "Class", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "staticSetter", + "namespace": "Class.staticSetter", + "params": Array [ + Object { + "lineNumber": 10, + "name": "v", + "title": "param", + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "Class", + }, + Object { + "kind": "member", + "name": "staticSetter", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + }, + "name": "Class", + "namespace": "Class", + "params": Array [ + Object { + "lineNumber": 4, + "name": "a", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "Class", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 25, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 3, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "typedef", + "loc": Object { + "end": Object { + "column": 25, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 3, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "T5", + "namespace": "T5", + "params": Array [], + "path": Array [ + Object { + "kind": "typedef", + "name": "T5", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "type": Object { + "name": "boolean", + "type": "NameExpression", + }, + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 18, + "line": 5, + }, + "start": Object { + "column": 0, + "line": 5, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 18, + "line": 5, + }, + "start": Object { + "column": 0, + "line": 5, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "y2Default", + "namespace": "y2Default", + "params": Array [], + "path": Array [ + Object { + "name": "y2Default", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 31, + "line": 8, + }, + "start": Object { + "column": 0, + "line": 8, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Description of y3", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 24, + "line": 7, + }, + "start": Object { + "column": 0, + "line": 7, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "y4", + "namespace": "y4", + "params": Array [ + Object { + "lineNumber": 8, + "name": "p", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "y4", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "title": "returns", + "type": Object { + "type": "VoidLiteral", + }, + }, + ], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 19, + }, + "start": Object { + "column": 0, + "line": 13, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 2, + "line": 19, + }, + "start": Object { + "column": 0, + "line": 13, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 13, + "line": 14, + }, + "start": Object { + "column": 2, + "line": 14, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 13, + "line": 14, + }, + "start": Object { + "column": 2, + "line": 14, + }, + }, + "memberof": "object", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "method", + "namespace": "object.method", + "params": Array [], + "path": Array [ + Object { + "name": "object", + }, + Object { + "kind": "function", + "name": "method", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 17, + "line": 15, + }, + "start": Object { + "column": 2, + "line": 15, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "member", + "loc": Object { + "end": Object { + "column": 17, + "line": 15, + }, + "start": Object { + "column": 2, + "line": 15, + }, + }, + "memberof": "object", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "getter", + "namespace": "object.getter", + "params": Array [], + "path": Array [ + Object { + "name": "object", + }, + Object { + "kind": "member", + "name": "getter", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 18, + "line": 16, + }, + "start": Object { + "column": 2, + "line": 16, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "member", + "loc": Object { + "end": Object { + "column": 18, + "line": 16, + }, + "start": Object { + "column": 2, + "line": 16, + }, + }, + "memberof": "object", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "setter", + "namespace": "object.setter", + "params": Array [ + Object { + "lineNumber": 16, + "name": "v", + "title": "param", + }, + ], + "path": Array [ + Object { + "name": "object", + }, + Object { + "kind": "member", + "name": "setter", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 10, + "line": 17, + }, + "start": Object { + "column": 2, + "line": 17, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 10, + "line": 17, + }, + "start": Object { + "column": 2, + "line": 17, + }, + }, + "memberof": "object", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "prop", + "namespace": "object.prop", + "params": Array [], + "path": Array [ + Object { + "name": "object", + }, + Object { + "name": "prop", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 21, + "line": 18, + }, + "start": Object { + "column": 2, + "line": 18, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 21, + "line": 18, + }, + "start": Object { + "column": 2, + "line": 18, + }, + }, + "memberof": "object", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "func", + "namespace": "object.func", + "params": Array [], + "path": Array [ + Object { + "name": "object", + }, + Object { + "kind": "function", + "name": "func", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + }, + "name": "object", + "namespace": "object", + "params": Array [], + "path": Array [ + Object { + "name": "object", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 16, + "line": 55, + }, + "start": Object { + "column": 0, + "line": 55, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 16, + "line": 55, + }, + "start": Object { + "column": 0, + "line": 55, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "f1", + "namespace": "f1", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "f1", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 16, + "line": 56, + }, + "start": Object { + "column": 0, + "line": 56, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 16, + "line": 56, + }, + "start": Object { + "column": 0, + "line": 56, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "f3", + "namespace": "f3", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "f3", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 23, + "line": 60, + }, + "start": Object { + "column": 0, + "line": 60, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "typedef", + "loc": Object { + "end": Object { + "column": 23, + "line": 60, + }, + "start": Object { + "column": 0, + "line": 60, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "T", + "namespace": "T", + "params": Array [], + "path": Array [ + Object { + "kind": "typedef", + "name": "T", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "type": Object { + "name": "number", + "type": "NameExpression", + }, + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 17, + "line": 61, + }, + "start": Object { + "column": 0, + "line": 61, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "typedef", + "loc": Object { + "end": Object { + "column": 17, + "line": 61, + }, + "start": Object { + "column": 0, + "line": 61, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "T2", + "namespace": "T2", + "params": Array [], + "path": Array [ + Object { + "kind": "typedef", + "name": "T2", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "type": Object { + "name": "string", + "type": "NameExpression", + }, + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 17, + "line": 62, + }, + "start": Object { + "column": 0, + "line": 62, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "typedef", + "loc": Object { + "end": Object { + "column": 17, + "line": 62, + }, + "start": Object { + "column": 0, + "line": 62, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "T4", + "namespace": "T4", + "params": Array [], + "path": Array [ + Object { + "kind": "typedef", + "name": "T4", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "type": Object { + "name": "string", + "type": "NameExpression", + }, + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 34, + "line": 68, + }, + "start": Object { + "column": 0, + "line": 68, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 34, + "line": 68, + }, + "start": Object { + "column": 0, + "line": 68, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "f4", + "namespace": "f4", + "params": Array [ + Object { + "lineNumber": 68, + "name": "x", + "title": "param", + "type": Object { + "name": "X", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "f4", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 74, + }, + "start": Object { + "column": 0, + "line": 72, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 2, + "line": 74, + }, + "start": Object { + "column": 0, + "line": 72, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 10, + "line": 73, + }, + "start": Object { + "column": 2, + "line": 73, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 10, + "line": 73, + }, + "start": Object { + "column": 2, + "line": 73, + }, + }, + "memberof": "o1", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "om1", + "namespace": "o1.om1", + "params": Array [], + "path": Array [ + Object { + "name": "o1", + }, + Object { + "kind": "function", + "name": "om1", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + }, + "name": "o1", + "namespace": "o1", + "params": Array [], + "path": Array [ + Object { + "name": "o1", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 4, + "line": 80, + }, + "start": Object { + "column": 0, + "line": 77, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "f5 comment", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 17, + "line": 76, + }, + "start": Object { + "column": 0, + "line": 76, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "f5", + "namespace": "f5", + "params": Array [ + Object { + "lineNumber": 77, + "name": "y", + "title": "param", + "type": Object { + "name": "Y", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "f5", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 3, + "line": 80, + }, + "start": Object { + "column": 2, + "line": 78, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 3, + "line": 80, + }, + "start": Object { + "column": 2, + "line": 78, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 12, + "line": 79, + }, + "start": Object { + "column": 4, + "line": 79, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 12, + "line": 79, + }, + "start": Object { + "column": 4, + "line": 79, + }, + }, + "memberof": "o2", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "om2", + "namespace": "o2.om2", + "params": Array [], + "path": Array [ + Object { + "name": "o2", + }, + Object { + "kind": "function", + "name": "om2", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + }, + "name": "o2", + "namespace": "o2", + "params": Array [], + "path": Array [ + Object { + "name": "o2", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs document-exported.input.js markdown 1`] = ` +" + +### Table of Contents + +* [x][1] + * [Parameters][2] +* [z][3] + * [zMethod][4] +* [Class][5] + * [Parameters][6] + * [classMethod][7] + * [classGetter][8] + * [classSetter][9] + * [Parameters][10] + * [staticMethod][11] + * [staticGetter][12] + * [staticSetter][13] + * [Parameters][14] +* [T5][15] +* [y2Default][16] +* [y4][17] + * [Parameters][18] +* [object][19] + * [method][20] + * [getter][21] + * [setter][22] + * [Parameters][23] + * [prop][24] + * [func][25] +* [f1][26] +* [f3][27] +* [T][28] +* [T2][29] +* [T4][30] +* [f4][31] + * [Parameters][32] +* [o1][33] + * [om1][34] +* [f5][35] + * [Parameters][36] +* [o2][37] + * [om2][38] + +## x + +### Parameters + +* \`yparam\` + +## z + +### zMethod + +## Class + +### Parameters + +* \`a\` **[string][39]** + +### classMethod + +### classGetter + +### classSetter + +#### Parameters + +* \`v\` + +### staticMethod + +### staticGetter + +### staticSetter + +#### Parameters + +* \`v\` + +## T5 + +Type: [boolean][40] + +## y2Default + +## y4 + +Description of y3 + +### Parameters + +* \`p\` **[number][41]** + +Returns **void** + +## object + +### method + +### getter + +### setter + +#### Parameters + +* \`v\` + +### prop + +### func + +## f1 + +## f3 + +## T + +Type: [number][41] + +## T2 + +Type: [string][39] + +## T4 + +Type: [string][39] + +## f4 + +### Parameters + +* \`x\` **X** + +## o1 + +### om1 + +## f5 + +f5 comment + +### Parameters + +* \`y\` **Y** + +## o2 + +### om2 + +[1]: #x + +[2]: #parameters + +[3]: #z + +[4]: #zmethod + +[5]: #class + +[6]: #parameters-1 + +[7]: #classmethod + +[8]: #classgetter + +[9]: #classsetter + +[10]: #parameters-2 + +[11]: #staticmethod + +[12]: #staticgetter + +[13]: #staticsetter + +[14]: #parameters-3 + +[15]: #t5 + +[16]: #y2default + +[17]: #y4 + +[18]: #parameters-4 + +[19]: #object + +[20]: #method + +[21]: #getter + +[22]: #setter + +[23]: #parameters-5 + +[24]: #prop + +[25]: #func + +[26]: #f1 + +[27]: #f3 + +[28]: #t + +[29]: #t2 + +[30]: #t4 + +[31]: #f4 + +[32]: #parameters-6 + +[33]: #o1 + +[34]: #om1 + +[35]: #f5 + +[36]: #parameters-7 + +[37]: #o2 + +[38]: #om2 + +[39]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String + +[40]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean + +[41]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number +" +`; + +exports[`outputs document-exported.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "x", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "yparam", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "z", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "zMethod", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Class", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "a", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "classMethod", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "classGetter", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "classSetter", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 4, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "v", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "staticMethod", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "staticGetter", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "staticSetter", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 4, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "v", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "T5", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "boolean", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "y2Default", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "y4", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Description of y3", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "p", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "void", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "object", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "method", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "getter", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "setter", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 4, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "v", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "prop", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "func", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "f1", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "f3", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "T", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "T2", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "T4", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "f4", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "x", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "X", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "o1", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "om1", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "f5", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "f5 comment", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "y", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Y", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "o2", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "om2", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean", + }, + Object { + "identifier": "3", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + ], + "type": "root", +} +`; + +exports[`outputs document-exported-export-default-object.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 5, + }, + "start": Object { + "column": 0, + "line": 3, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 2, + "line": 5, + }, + "start": Object { + "column": 0, + "line": 3, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "document-exported-export-default-object.input", + "namespace": "document-exported-export-default-object.input", + "params": Array [], + "path": Array [ + Object { + "name": "document-exported-export-default-object.input", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 7, + "line": 4, + }, + "start": Object { + "column": 2, + "line": 4, + }, + }, + }, + "description": "", + "errors": Array [ + Object { + "commentLineNumber": 0, + "message": "@memberof reference to document-exported-export-default-object.input not found", + }, + ], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 7, + "line": 4, + }, + "start": Object { + "column": 2, + "line": 4, + }, + }, + "memberof": "document-exported-export-default-object.input", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "x", + "namespace": ".x", + "params": Array [], + "path": Array [ + Object { + "name": "x", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs document-exported-export-default-object.input.js markdown 1`] = ` +" + +### Table of Contents + +* [document-exported-export-default-object.input][1] +* [x][2] + +## document-exported-export-default-object.input + +## x + +[1]: #document-exported-export-default-objectinput + +[2]: #x +" +`; + +exports[`outputs document-exported-export-default-object.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "document-exported-export-default-object.input", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "x", + }, + ], + "depth": 2, + "type": "heading", + }, + ], + "type": "root", +} +`; + +exports[`outputs document-exported-export-default-value.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 18, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 3, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 18, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 3, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "document-exported-export-default-value.input", + "namespace": "document-exported-export-default-value.input", + "params": Array [], + "path": Array [ + Object { + "name": "document-exported-export-default-value.input", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs document-exported-export-default-value.input.js markdown 1`] = ` +" + +### Table of Contents + +* [document-exported-export-default-value.input][1] + +## document-exported-export-default-value.input + +[1]: #document-exported-export-default-valueinput +" +`; + +exports[`outputs document-exported-export-default-value.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "document-exported-export-default-value.input", + }, + ], + "depth": 2, + "type": "heading", + }, + ], + "type": "root", +} +`; + +exports[`outputs es6.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 10, + "line": 9, + }, + "start": Object { + "column": 0, + "line": 5, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function destructures with defaults. It should not +have any parameter descriptions.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "destructure", + "namespace": "destructure", + "params": Array [ + Object { + "anonymous": true, + "default": "{}", + "name": "$0", + "properties": Array [ + Object { + "default": "[]", + "lineNumber": 6, + "name": "$0.phoneNumbers", + "title": "param", + }, + Object { + "default": "[]", + "lineNumber": 7, + "name": "$0.emailAddresses", + "title": "param", + }, + Object { + "lineNumber": 8, + "name": "$0.params", + "title": "param", + "type": Object { + "type": "RestType", + }, + }, + ], + "title": "param", + "type": Object { + "name": "Object", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "destructure", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 37, + "line": 16, + }, + "start": Object { + "column": 0, + "line": 16, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Similar, but with an array", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [ + Object { + "description": "destructure2([0, 1, 2, 3])", + }, + ], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 15, + }, + "start": Object { + "column": 0, + "line": 11, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "destructure2", + "namespace": "destructure2", + "params": Array [ + Object { + "anonymous": true, + "name": "$0", + "properties": Array [ + Object { + "name": "$0.0", + "title": "param", + }, + Object { + "lineNumber": 16, + "name": "$0.1", + "title": "param", + }, + Object { + "lineNumber": 16, + "name": "$0.2", + "title": "param", + }, + Object { + "lineNumber": 16, + "name": "$0.3", + "title": "param", + }, + ], + "title": "param", + "type": Object { + "name": "Array", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "destructure2", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": "destructure2([0, 1, 2, 3])", + "lineNumber": 2, + "title": "example", + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 31, + "line": 23, + }, + "start": Object { + "column": 0, + "line": 23, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 22, + }, + "start": Object { + "column": 0, + "line": 18, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "multiply", + "namespace": "multiply", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "an array of numbers", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 2, + "name": "a", + "title": "param", + "type": Object { + "applications": Array [ + Object { + "name": "Number", + "type": "NameExpression", + }, + ], + "expression": Object { + "name": "Array", + "type": "NameExpression", + }, + "type": "TypeApplication", + }, + }, + Object { + "lineNumber": 23, + "name": "b", + "title": "param", + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "multiply", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "an array of numbers", + "lineNumber": 2, + "name": "a", + "title": "param", + "type": Object { + "applications": Array [ + Object { + "name": "Number", + "type": "NameExpression", + }, + ], + "expression": Object { + "name": "Array", + "type": "NameExpression", + }, + "type": "TypeApplication", + }, + }, + Object { + "description": "numberone", + "lineNumber": 3, + "title": "returns", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 75, + }, + "start": Object { + "column": 0, + "line": 36, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is a sink", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [ + Object { + "description": "@abc +class A { + @bind + say() {} +}", + }, + ], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 3, + "line": 35, + }, + "start": Object { + "column": 0, + "line": 25, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 18, + "line": 45, + }, + "start": Object { + "column": 2, + "line": 45, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is a property of the sink.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "member", + "loc": Object { + "end": Object { + "column": 5, + "line": 44, + }, + "start": Object { + "column": 2, + "line": 42, + }, + }, + "memberof": "Sink", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "staticProp", + "namespace": "Sink#staticProp", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Sink", + }, + Object { + "kind": "member", + "name": "staticProp", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 3, + "line": 52, + }, + "start": Object { + "column": 2, + "line": 50, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Is it empty", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 5, + "line": 49, + }, + "start": Object { + "column": 2, + "line": 47, + }, + }, + "memberof": "Sink", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "empty", + "namespace": "Sink#empty", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Sink", + }, + Object { + "kind": "function", + "name": "empty", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 4, + "line": 59, + }, + "start": Object { + "column": 2, + "line": 57, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This uses the class property transform", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "member", + "loc": Object { + "end": Object { + "column": 5, + "line": 56, + }, + "start": Object { + "column": 2, + "line": 54, + }, + }, + "memberof": "Sink", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "classprop", + "namespace": "Sink#classprop", + "params": Array [ + Object { + "lineNumber": 57, + "name": "a", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "Sink", + }, + Object { + "kind": "member", + "name": "classprop", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "title": "returns", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 3, + "line": 74, + }, + "start": Object { + "column": 2, + "line": 72, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is a getter method: it should be documented +as a property.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "member", + "loc": Object { + "end": Object { + "column": 5, + "line": 71, + }, + "start": Object { + "column": 2, + "line": 68, + }, + }, + "memberof": "Sink", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "aGetter", + "namespace": "Sink#aGetter", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Sink", + }, + Object { + "kind": "member", + "name": "aGetter", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + "static": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 3, + "line": 66, + }, + "start": Object { + "column": 2, + "line": 64, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This method says hello", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 5, + "line": 63, + }, + "start": Object { + "column": 2, + "line": 61, + }, + }, + "memberof": "Sink", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "hello", + "namespace": "Sink.hello", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Sink", + }, + Object { + "kind": "function", + "name": "hello", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + }, + "name": "Sink", + "namespace": "Sink", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "the height of the thing", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 2, + "name": "height", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "the width of the thing", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 3, + "name": "width", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "Sink", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": "the height of the thing", + "lineNumber": 2, + "name": "height", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "description": "the width of the thing", + "lineNumber": 3, + "name": "width", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "description": "@abc +class A { + @bind + say() {} +}", + "lineNumber": 4, + "title": "example", + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 25, + "line": 82, + }, + "start": Object { + "column": 0, + "line": 82, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This method returns a basket. The type should not be linked.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 81, + }, + "start": Object { + "column": 0, + "line": 77, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "makeABasket", + "namespace": "makeABasket", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "makeABasket", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "a basket", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "Basket", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "a basket", + "lineNumber": 3, + "title": "returns", + "type": Object { + "name": "Basket", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 23, + "line": 90, + }, + "start": Object { + "column": 0, + "line": 90, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This method returns a ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "sink", + }, + ], + "jsdoc": true, + "title": null, + "type": "link", + "url": "Sink", + }, + Object { + "type": "text", + "value": ". The type should be linked. +It takes a ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "jsdoc": true, + "title": null, + "type": "link", + "url": "number", + }, + Object { + "type": "text", + "value": " which should also be linked.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 89, + }, + "start": Object { + "column": 0, + "line": 84, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "makeASink", + "namespace": "makeASink", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "makeASink", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "a sink", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "Sink", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "a sink", + "lineNumber": 4, + "title": "returns", + "type": Object { + "name": "Sink", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 43, + "line": 95, + }, + "start": Object { + "column": 0, + "line": 95, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function takes rest params", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 94, + }, + "start": Object { + "column": 0, + "line": 92, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "functionWithRest", + "namespace": "functionWithRest", + "params": Array [ + Object { + "lineNumber": 95, + "name": "someParams", + "title": "param", + "type": Object { + "type": "RestType", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "functionWithRest", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 107, + }, + "start": Object { + "column": 0, + "line": 100, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "So does this one, with types", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 99, + }, + "start": Object { + "column": 0, + "line": 97, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "functionWithRestAndType", + "namespace": "functionWithRestAndType", + "params": Array [ + Object { + "lineNumber": 100, + "name": "someParams", + "title": "param", + "type": Object { + "expression": Object { + "name": "number", + "type": "NameExpression", + }, + "type": "RestType", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "functionWithRestAndType", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "async": true, + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 23, + "line": 114, + }, + "start": Object { + "column": 0, + "line": 114, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is an async method", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 113, + }, + "start": Object { + "column": 0, + "line": 111, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "foo", + "namespace": "foo", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "foo", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 36, + "line": 122, + }, + "start": Object { + "column": 0, + "line": 122, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 121, + }, + "start": Object { + "column": 0, + "line": 118, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "es6.input", + "namespace": "es6.input", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "es6.input", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "numberone", + "lineNumber": 2, + "title": "returns", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 129, + }, + "start": Object { + "column": 0, + "line": 127, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This tests our support of optional parameters in ES6", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 126, + }, + "start": Object { + "column": 0, + "line": 124, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "veryImportantTransform", + "namespace": "veryImportantTransform", + "params": Array [ + Object { + "default": "'bar'", + "lineNumber": 127, + "name": "foo", + "title": "param", + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "veryImportantTransform", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "access": "protected", + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 26, + "line": 143, + }, + "start": Object { + "column": 0, + "line": 143, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "A protected function", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 142, + }, + "start": Object { + "column": 0, + "line": 139, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "iAmProtected", + "namespace": "iAmProtected", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "iAmProtected", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 2, + "title": "protected", + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "access": "public", + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 23, + "line": 149, + }, + "start": Object { + "column": 0, + "line": 149, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "A public function", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 148, + }, + "start": Object { + "column": 0, + "line": 145, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "iAmPublic", + "namespace": "iAmPublic", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "iAmPublic", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 2, + "title": "public", + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 42, + "line": 160, + }, + "start": Object { + "column": 0, + "line": 160, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is re-exported", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 3, + "line": 159, + }, + "start": Object { + "column": 0, + "line": 157, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "execute", + "namespace": "execute", + "params": Array [], + "path": Array [ + Object { + "name": "execute", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 169, + }, + "start": Object { + "column": 0, + "line": 163, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Regression check for #498", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 32, + "line": 162, + }, + "start": Object { + "column": 0, + "line": 162, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "isArrayEqualWith", + "namespace": "isArrayEqualWith", + "params": Array [ + Object { + "lineNumber": 164, + "name": "array1", + "title": "param", + "type": Object { + "applications": Array [ + Object { + "name": "T", + "type": "NameExpression", + }, + ], + "expression": Object { + "name": "Array", + "type": "NameExpression", + }, + "type": "TypeApplication", + }, + }, + Object { + "lineNumber": 165, + "name": "array2", + "title": "param", + "type": Object { + "applications": Array [ + Object { + "name": "T", + "type": "NameExpression", + }, + ], + "expression": Object { + "name": "Array", + "type": "NameExpression", + }, + "type": "TypeApplication", + }, + }, + Object { + "default": "(a:T,b:T):boolean=>a===b", + "lineNumber": 166, + "name": "compareFunction", + "title": "param", + "type": Object { + "params": Array [ + Object { + "expression": Object { + "name": "T", + "type": "NameExpression", + }, + "name": "a", + "type": "ParameterType", + }, + Object { + "expression": Object { + "name": "T", + "type": "NameExpression", + }, + "name": "b", + "type": "ParameterType", + }, + ], + "result": Object { + "name": "boolean", + "type": "NameExpression", + }, + "type": "FunctionType", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "isArrayEqualWith", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "title": "returns", + "type": Object { + "name": "boolean", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 174, + }, + "start": Object { + "column": 0, + "line": 172, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Regression check for #749", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 32, + "line": 171, + }, + "start": Object { + "column": 0, + "line": 171, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "paramWithMemberType", + "namespace": "paramWithMemberType", + "params": Array [ + Object { + "lineNumber": 172, + "name": "a", + "title": "param", + "type": Object { + "name": "atype.property", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "paramWithMemberType", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "title": "returns", + "type": Object { + "name": "boolean", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 189, + }, + "start": Object { + "column": 0, + "line": 177, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "babel parser plugins", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 27, + "line": 176, + }, + "start": Object { + "column": 0, + "line": 176, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "A", + "namespace": "A", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "A", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs es6.input.js markdown 1`] = ` +" + +### Table of Contents + +* [destructure][1] + * [Parameters][2] +* [destructure2][3] + * [Parameters][4] + * [Examples][5] +* [multiply][6] + * [Parameters][7] +* [Sink][8] + * [Parameters][9] + * [Examples][10] + * [staticProp][11] + * [empty][12] + * [classprop][13] + * [Parameters][14] + * [aGetter][15] + * [hello][16] +* [makeABasket][17] +* [makeASink][18] +* [functionWithRest][19] + * [Parameters][20] +* [functionWithRestAndType][21] + * [Parameters][22] +* [foo][23] +* [es6.input][24] +* [veryImportantTransform][25] + * [Parameters][26] +* [iAmProtected][27] +* [iAmPublic][28] +* [execute][29] +* [isArrayEqualWith][30] + * [Parameters][31] +* [paramWithMemberType][32] + * [Parameters][33] +* [A][34] + +## destructure + +This function destructures with defaults. It should not +have any parameter descriptions. + +### Parameters + +* \`$0\` **[Object][35]** (optional, default \`{}\`) + + * \`$0.phoneNumbers\` (optional, default \`[]\`) + * \`$0.emailAddresses\` (optional, default \`[]\`) + * \`$0.params\` **...any** + +## destructure2 + +Similar, but with an array + +### Parameters + +* \`$0\` **[Array][36]** + + * \`$0.0\` + * \`$0.1\` + * \`$0.2\` + * \`$0.3\` + +### Examples + +\`\`\`javascript +destructure2([0, 1, 2, 3]) +\`\`\` + +## multiply + +This function returns the number one. + +### Parameters + +* \`a\` **[Array][36]<[Number][37]>** an array of numbers +* \`b\` + +Returns **[Number][37]** numberone + +## Sink + +This is a sink + +### Parameters + +* \`height\` **[number][37]** the height of the thing +* \`width\` **[number][37]** the width of the thing + +### Examples + +\`\`\`javascript +@abc +class A { + @bind + say() {} +} +\`\`\` + +### staticProp + +This is a property of the sink. + +### empty + +Is it empty + +### classprop + +This uses the class property transform + +#### Parameters + +* \`a\` **[number][37]** + +Returns **[string][38]** + +### aGetter + +This is a getter method: it should be documented +as a property. + +### hello + +This method says hello + +## makeABasket + +This method returns a basket. The type should not be linked. + +Returns **Basket** a basket + +## makeASink + +This method returns a [sink][8]. The type should be linked. +It takes a [number][39] which should also be linked. + +Returns **[Sink][40]** a sink + +## functionWithRest + +This function takes rest params + +### Parameters + +* \`someParams\` **...any** + +## functionWithRestAndType + +So does this one, with types + +### Parameters + +* \`someParams\` **...[number][37]** + +## foo + +This is an async method + +## es6.input + +This function returns the number one. + +Returns **[Number][37]** numberone + +## veryImportantTransform + +This tests our support of optional parameters in ES6 + +### Parameters + +* \`foo\` (optional, default \`'bar'\`) + +## iAmProtected + +A protected function + +## iAmPublic + +A public function + +## execute + +This is re-exported + +## isArrayEqualWith + +Regression check for #498 + +### Parameters + +* \`array1\` **[Array][36]\\\\** +* \`array2\` **[Array][36]\\\\** +* \`compareFunction\` **function (a: T, b: T): [boolean][41]** (optional, default \`(a:T,b:T):boolean=>a===b\`) + +Returns **[boolean][41]** + +## paramWithMemberType + +Regression check for #749 + +### Parameters + +* \`a\` **atype.property** + +Returns **[boolean][41]** + +## A + +babel parser plugins + +[1]: #destructure + +[2]: #parameters + +[3]: #destructure2 + +[4]: #parameters-1 + +[5]: #examples + +[6]: #multiply + +[7]: #parameters-2 + +[8]: #sink + +[9]: #parameters-3 + +[10]: #examples-1 + +[11]: #staticprop + +[12]: #empty + +[13]: #classprop + +[14]: #parameters-4 + +[15]: #agetter + +[16]: #hello + +[17]: #makeabasket + +[18]: #makeasink + +[19]: #functionwithrest + +[20]: #parameters-5 + +[21]: #functionwithrestandtype + +[22]: #parameters-6 + +[23]: #foo + +[24]: #es6input + +[25]: #veryimportanttransform + +[26]: #parameters-7 + +[27]: #iamprotected + +[28]: #iampublic + +[29]: #execute + +[30]: #isarrayequalwith + +[31]: #parameters-8 + +[32]: #paramwithmembertype + +[33]: #parameters-9 + +[34]: #a + +[35]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object + +[36]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array + +[37]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number + +[38]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String + +[39]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number + +[40]: #sink + +[41]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean +" +`; + +exports[`outputs es6.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "destructure", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function destructures with defaults. It should not +have any parameter descriptions.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "$0", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Object", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": " (optional, default ", + }, + Object { + "type": "inlineCode", + "value": "{}", + }, + Object { + "type": "text", + "value": ")", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "$0.phoneNumbers", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": " (optional, default ", + }, + Object { + "type": "inlineCode", + "value": "[]", + }, + Object { + "type": "text", + "value": ")", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "$0.emailAddresses", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": " (optional, default ", + }, + Object { + "type": "inlineCode", + "value": "[]", + }, + Object { + "type": "text", + "value": ")", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "$0.params", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "...", + }, + Object { + "type": "text", + "value": "any", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "destructure2", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Similar, but with an array", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "$0", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Array", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "$0.0", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "$0.1", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "$0.2", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "$0.3", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Examples", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "lang": "javascript", + "type": "code", + "value": "destructure2([0, 1, 2, 3])", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "multiply", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "a", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Array", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "<", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Number", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": ">", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "an array of numbers", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "b", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Number", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Sink", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is a sink", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "height", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "the height of the thing", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "width", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "the width of the thing", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Examples", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "lang": "javascript", + "type": "code", + "value": "@abc +class A { + @bind + say() {} +}", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "staticProp", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is a property of the sink.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "empty", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Is it empty", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "classprop", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This uses the class property transform", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 4, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "a", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "4", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "aGetter", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is a getter method: it should be documented +as a property.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "hello", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This method says hello", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "makeABasket", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This method returns a basket. The type should not be linked.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Basket", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "a basket", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "makeASink", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This method returns a ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "sink", + }, + ], + "identifier": "5", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": ". The type should be linked. +It takes a ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "6", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": " which should also be linked.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Sink", + }, + ], + "identifier": "7", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "a sink", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "functionWithRest", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function takes rest params", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "someParams", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "...", + }, + Object { + "type": "text", + "value": "any", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "functionWithRestAndType", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "So does this one, with types", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "someParams", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "...", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "foo", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is an async method", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "es6.input", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Number", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "veryImportantTransform", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This tests our support of optional parameters in ES6", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "foo", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": " (optional, default ", + }, + Object { + "type": "inlineCode", + "value": "'bar'", + }, + Object { + "type": "text", + "value": ")", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "iAmProtected", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "A protected function", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "iAmPublic", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "A public function", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "execute", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is re-exported", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "isArrayEqualWith", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Regression check for #498", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "array1", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Array", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "<", + }, + Object { + "type": "text", + "value": "T", + }, + Object { + "type": "text", + "value": ">", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "array2", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Array", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "<", + }, + Object { + "type": "text", + "value": "T", + }, + Object { + "type": "text", + "value": ">", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "compareFunction", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "function (", + }, + Object { + "type": "text", + "value": "a: ", + }, + Object { + "type": "text", + "value": "T", + }, + Object { + "type": "text", + "value": ", ", + }, + Object { + "type": "text", + "value": "b: ", + }, + Object { + "type": "text", + "value": "T", + }, + Object { + "type": "text", + "value": ")", + }, + Object { + "type": "text", + "value": ": ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "boolean", + }, + ], + "identifier": "8", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": " (optional, default ", + }, + Object { + "type": "inlineCode", + "value": "(a:T,b:T):boolean=>a===b", + }, + Object { + "type": "text", + "value": ")", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "boolean", + }, + ], + "identifier": "8", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "paramWithMemberType", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Regression check for #749", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "a", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "atype.property", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "boolean", + }, + ], + "identifier": "8", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "A", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "babel parser plugins", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array", + }, + Object { + "identifier": "3", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + Object { + "identifier": "4", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String", + }, + Object { + "identifier": "5", + "title": null, + "type": "definition", + "url": "#sink", + }, + Object { + "identifier": "6", + "title": null, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + Object { + "identifier": "7", + "title": undefined, + "type": "definition", + "url": "#sink", + }, + Object { + "identifier": "8", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean", + }, + ], + "type": "root", +} +`; + +exports[`outputs es6.input.js no markdown TOC 1`] = `"[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"`; + +exports[`outputs es6-class.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [ + Object { + "name": "React.Component", + "title": "augments", + }, + ], + "context": Object { + "loc": Object { + "end": Object { + "column": 36, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 4, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is my component. This is from issue #458", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 3, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "Foo", + "namespace": "Foo", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Foo", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 18, + }, + "start": Object { + "column": 0, + "line": 10, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Does nothing. This is from issue #556", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 3, + "line": 9, + }, + "start": Object { + "column": 0, + "line": 6, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 18, + "line": 16, + }, + "start": Object { + "column": 4, + "line": 16, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "A useless property", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 7, + "line": 15, + }, + "start": Object { + "column": 4, + "line": 12, + }, + }, + "memberof": "Bar", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "bar", + "namespace": "Bar#bar", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Bar", + }, + Object { + "name": "bar", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 2, + "title": "type", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "type": Object { + "name": "string", + "type": "NameExpression", + }, + "yields": Array [], + }, + ], + "static": Array [], + }, + "name": "Bar", + "namespace": "Bar", + "params": Array [ + Object { + "lineNumber": 2, + "name": "str", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "Bar", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 2, + "name": "str", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 25, + }, + "start": Object { + "column": 0, + "line": 23, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This class has fully inferred constructor parameters.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 3, + "line": 22, + }, + "start": Object { + "column": 0, + "line": 20, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "Baz", + "namespace": "Baz", + "params": Array [ + Object { + "lineNumber": 24, + "name": "n", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "lineNumber": 24, + "name": "l", + "title": "param", + "type": Object { + "applications": Array [ + Object { + "name": "string", + "type": "NameExpression", + }, + ], + "expression": Object { + "name": "Array", + "type": "NameExpression", + }, + "type": "TypeApplication", + }, + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "Baz", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs es6-class.input.js markdown 1`] = ` +" + +### Table of Contents + +* [Foo][1] +* [Bar][2] + * [Parameters][3] + * [bar][4] +* [Baz][5] + * [Parameters][6] + +## Foo + +**Extends React.Component** + +This is my component. This is from issue #458 + +## Bar + +Does nothing. This is from issue #556 + +### Parameters + +* \`str\` **[string][7]** + +### bar + +A useless property + +Type: [string][7] + +## Baz + +This class has fully inferred constructor parameters. + +### Parameters + +* \`n\` **[number][8]** +* \`l\` **[Array][9]<[string][7]>** + +[1]: #foo + +[2]: #bar + +[3]: #parameters + +[4]: #bar-1 + +[5]: #baz + +[6]: #parameters-1 + +[7]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String + +[8]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number + +[9]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array +" +`; + +exports[`outputs es6-class.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Foo", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Extends ", + }, + Object { + "type": "text", + "value": "React.Component", + }, + ], + "type": "strong", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is my component. This is from issue #458", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Bar", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Does nothing. This is from issue #556", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "str", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "bar", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "A useless property", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Baz", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This class has fully inferred constructor parameters.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "n", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "l", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Array", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "<", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": ">", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + Object { + "identifier": "3", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array", + }, + ], + "type": "root", +} +`; + +exports[`outputs es6-class-property.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 25, + }, + "start": Object { + "column": 0, + "line": 4, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is for issue 906.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 3, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 3, + "line": 11, + }, + "start": Object { + "column": 2, + "line": 9, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is a read-write property.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "member", + "loc": Object { + "end": Object { + "column": 5, + "line": 8, + }, + "start": Object { + "column": 2, + "line": 5, + }, + }, + "memberof": "Issue906", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "readWriteProp", + "namespace": "Issue906#readWriteProp", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Issue906", + }, + Object { + "kind": "member", + "name": "readWriteProp", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 2, + "title": "type", + "type": Object { + "name": "boolean", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "type": Object { + "name": "boolean", + "type": "NameExpression", + }, + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 3, + "line": 24, + }, + "start": Object { + "column": 2, + "line": 22, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is a read-only property.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "member", + "loc": Object { + "end": Object { + "column": 5, + "line": 21, + }, + "start": Object { + "column": 2, + "line": 17, + }, + }, + "memberof": "Issue906", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "readOnlyProp", + "namespace": "Issue906#readOnlyProp", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Issue906", + }, + Object { + "kind": "member", + "name": "readOnlyProp", + "scope": "instance", + }, + ], + "properties": Array [], + "readonly": true, + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 2, + "title": "type", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + Object { + "description": null, + "lineNumber": 3, + "title": "readonly", + }, + ], + "throws": Array [], + "todos": Array [], + "type": Object { + "name": "string", + "type": "NameExpression", + }, + "yields": Array [], + }, + ], + "static": Array [], + }, + "name": "Issue906", + "namespace": "Issue906", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Issue906", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs es6-class-property.input.js markdown 1`] = ` +" + +### Table of Contents + +* [Issue906][1] + * [readWriteProp][2] + * [readOnlyProp][3] + +## Issue906 + +This is for issue 906. + +### readWriteProp + +This is a read-write property. + +Type: [boolean][4] + +### readOnlyProp + +This is a read-only property. + +Type: [string][5] + +[1]: #issue906 + +[2]: #readwriteprop + +[3]: #readonlyprop + +[4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean + +[5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String +" +`; + +exports[`outputs es6-class-property.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Issue906", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is for issue 906.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "readWriteProp", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is a read-write property.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "boolean", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "readOnlyProp", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is a read-only property.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String", + }, + ], + "type": "root", +} +`; + +exports[`outputs es6-default2.input.js JSON 1`] = ` +Array [ + Object { + "access": "public", + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 39, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 4, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "es6-default2.input", + "namespace": "es6-default2.input", + "params": Array [ + Object { + "lineNumber": 4, + "name": "thisIsTheArgument", + "title": "param", + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "es6-default2.input", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 1, + "title": "public", + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs es6-default2.input.js markdown 1`] = ` +" + +### Table of Contents + +* [es6-default2.input][1] + * [Parameters][2] + +## es6-default2.input + +### Parameters + +* \`thisIsTheArgument\` + +[1]: #es6-default2input + +[2]: #parameters +" +`; + +exports[`outputs es6-default2.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "es6-default2.input", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "thisIsTheArgument", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + ], + "type": "root", +} +`; + +exports[`outputs es6-import.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 41, + "line": 14, + }, + "start": Object { + "column": 0, + "line": 14, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 13, + }, + "start": Object { + "column": 0, + "line": 10, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "multiplyTwice", + "namespace": "multiplyTwice", + "params": Array [ + Object { + "lineNumber": 14, + "name": "a", + "title": "param", + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "multiplyTwice", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "numberone", + "lineNumber": 2, + "title": "returns", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 18, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 4, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is the default export frogs!", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 3, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "es6-ext", + "namespace": "es6-ext", + "params": Array [], + "path": Array [ + Object { + "name": "es6-ext", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 8, + }, + "start": Object { + "column": 0, + "line": 5, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "simple.input", + "namespace": "simple.input", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "simple.input", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "numberone", + "lineNumber": 2, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs es6-import.input.js markdown 1`] = ` +" + +### Table of Contents + +* [multiplyTwice][1] + * [Parameters][2] +* [es6-ext][3] +* [simple.input][4] + +## multiplyTwice + +This function returns the number one. + +### Parameters + +* \`a\` + +Returns **[Number][5]** numberone + +## es6-ext + +This is the default export frogs! + +## simple.input + +This function returns the number one. + +Returns **[number][5]** numberone + +[1]: #multiplytwice + +[2]: #parameters + +[3]: #es6-ext + +[4]: #simpleinput + +[5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number +" +`; + +exports[`outputs es6-import.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "multiplyTwice", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "a", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "es6-ext", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is the default export frogs!", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "simple.input", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + ], + "type": "root", +} +`; + +exports[`outputs event.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 0, + "line": 9, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Mouse event", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "event", + "loc": Object { + "end": Object { + "column": 3, + "line": 8, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "Map#mousemove", + "namespace": ".event:Map#mousemove", + "params": Array [], + "path": Array [ + Object { + "kind": "event", + "name": "Map#mousemove", + }, + ], + "properties": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "the pixel location of the event", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 5, + "name": "point", + "title": "property", + "type": Object { + "name": "Point", + "type": "NameExpression", + }, + }, + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "the original DOM event", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 6, + "name": "originalEvent", + "title": "property", + "type": Object { + "name": "Event", + "type": "NameExpression", + }, + }, + ], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": "Map#mousemove", + "lineNumber": 3, + "title": "event", + }, + Object { + "description": null, + "lineNumber": 4, + "title": "type", + "type": Object { + "name": "Object", + "type": "NameExpression", + }, + }, + Object { + "description": "the pixel location of the event", + "lineNumber": 5, + "name": "point", + "title": "property", + "type": Object { + "name": "Point", + "type": "NameExpression", + }, + }, + Object { + "description": "the original DOM event", + "lineNumber": 6, + "name": "originalEvent", + "title": "property", + "type": Object { + "name": "Event", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "type": Object { + "name": "Object", + "type": "NameExpression", + }, + "yields": Array [], + }, +] +`; + +exports[`outputs event.input.js markdown 1`] = ` +" + +### Table of Contents + +* [Map#mousemove][1] + * [Properties][2] + +## Map#mousemove + +Mouse event + +Type: [Object][3] + +### Properties + +* \`point\` **Point** the pixel location of the event +* \`originalEvent\` **[Event][4]** the original DOM event + +[1]: #mapmousemove + +[2]: #properties + +[3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object + +[4]: https://developer.mozilla.org/docs/Web/API/Event +" +`; + +exports[`outputs event.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Map#mousemove", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Mouse event", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Object", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Properties", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "point", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Point", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "the pixel location of the event", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "originalEvent", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Event", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "the original DOM event", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/API/Event", + }, + ], + "type": "root", +} +`; + +exports[`outputs example-caption.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 10, + }, + "start": Object { + "column": 0, + "line": 7, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [ + Object { + "caption": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "demonstrates how to run foo", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "description": "foo(1);", + }, + ], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 6, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "foo", + "namespace": "foo", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "foo", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "numberone", + "lineNumber": 2, + "title": "returns", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + Object { + "caption": "demonstrates how to run foo", + "description": "foo(1);", + "lineNumber": 3, + "title": "example", + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs example-caption.input.js markdown 1`] = ` +" + +### Table of Contents + +* [foo][1] + * [Examples][2] + +## foo + +This function returns the number one. + +### Examples + +demonstrates how to run foo + +\`\`\`javascript +foo(1); +\`\`\` + +Returns **[Number][3]** numberone + +[1]: #foo + +[2]: #examples + +[3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number +" +`; + +exports[`outputs example-caption.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "foo", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Examples", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "demonstrates how to run foo", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + ], + "type": "paragraph", + }, + Object { + "lang": "javascript", + "type": "code", + "value": "foo(1);", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + ], + "type": "root", +} +`; + +exports[`outputs external.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 10, + }, + "start": Object { + "column": 0, + "line": 8, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "I am in ", + }, + Object { + "type": "inlineCode", + "value": "external.input.js", + }, + Object { + "type": "text", + "value": ".", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 7, + }, + "start": Object { + "column": 0, + "line": 5, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "foo", + "namespace": "foo", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "foo", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs external.input.js markdown 1`] = ` +" + +### Table of Contents + +* [foo][1] + +## foo + +I am in \`external.input.js\`. + +[1]: #foo +" +`; + +exports[`outputs external.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "foo", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "I am in ", + }, + Object { + "type": "inlineCode", + "value": "external.input.js", + }, + Object { + "type": "text", + "value": ".", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", +} +`; + +exports[`outputs factory.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 18, + }, + "start": Object { + "column": 0, + "line": 5, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "an area chart generator", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "area", + "namespace": "area", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "area", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "chart", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "area", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "chart", + "lineNumber": 2, + "title": "returns", + "type": Object { + "name": "area", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 37, + "line": 9, + }, + "start": Object { + "column": 2, + "line": 9, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 5, + "line": 8, + }, + "start": Object { + "column": 2, + "line": 6, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "area", + "namespace": "area", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "area", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 1, + "name": "area", + "title": "class", + "type": null, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 30, + "line": 15, + }, + "start": Object { + "column": 2, + "line": 15, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Sets the chart data.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [ + Object { + "commentLineNumber": 0, + "message": "@memberof reference to chart not found", + }, + ], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 5, + "line": 14, + }, + "start": Object { + "column": 2, + "line": 11, + }, + }, + "memberof": "chart", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "data", + "namespace": ".data", + "params": Array [ + Object { + "lineNumber": 15, + "name": "_", + "title": "param", + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "data", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 2, + "name": null, + "title": "function", + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs factory.input.js markdown 1`] = ` +" + +### Table of Contents + +* [area][1] +* [area][2] +* [data][3] + * [Parameters][4] + +## area + +an area chart generator + +Returns **[area][5]** chart + +## area + +## data + +Sets the chart data. + +### Parameters + +* \`_\` + +[1]: #area + +[2]: #area-1 + +[3]: #data + +[4]: #parameters + +[5]: #area +" +`; + +exports[`outputs factory.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "area", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "an area chart generator", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "area", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "chart", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "area", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "data", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Sets the chart data.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "_", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "#area", + }, + ], + "type": "root", +} +`; + +exports[`outputs flow-exported-opaque-type.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 48, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 4, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "MyOpaqueType Description Here", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 36, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 3, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "MyOpaqueType", + "namespace": "MyOpaqueType", + "params": Array [], + "path": Array [ + Object { + "name": "MyOpaqueType", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs flow-exported-opaque-type.input.js markdown 1`] = ` +" + +### Table of Contents + +* [MyOpaqueType][1] + +## MyOpaqueType + +MyOpaqueType Description Here + +[1]: #myopaquetype +" +`; + +exports[`outputs flow-exported-opaque-type.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "MyOpaqueType", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "MyOpaqueType Description Here", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", +} +`; + +exports[`outputs flow-optional-chaining.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 74, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 4, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "foo", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "constant", + "loc": Object { + "end": Object { + "column": 10, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 3, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "foo", + "namespace": "foo", + "params": Array [], + "path": Array [ + Object { + "kind": "constant", + "name": "foo", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "type": Object { + "fields": Array [ + Object { + "key": "prop1", + "type": "FieldType", + "value": Object { + "expression": Object { + "fields": Array [ + Object { + "key": "prop2", + "type": "FieldType", + "value": Object { + "expression": Object { + "name": "string", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, + ], + "type": "RecordType", + }, + "type": "OptionalType", + }, + }, + ], + "type": "RecordType", + }, + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 32, + "line": 6, + }, + "start": Object { + "column": 0, + "line": 6, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "value", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "constant", + "loc": Object { + "end": Object { + "column": 12, + "line": 5, + }, + "start": Object { + "column": 0, + "line": 5, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "value", + "namespace": "value", + "params": Array [], + "path": Array [ + Object { + "kind": "constant", + "name": "value", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs flow-optional-chaining.input.js markdown 1`] = ` +" + +### Table of Contents + +* [foo][1] +* [value][2] + +## foo + +foo + +Type: {prop1: {prop2: [string][3]?}?} + +## value + +value + +[1]: #foo + +[2]: #value + +[3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String +" +`; + +exports[`outputs flow-optional-chaining.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "foo", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "foo", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "type": "text", + "value": "{", + }, + Object { + "type": "text", + "value": "prop1: ", + }, + Object { + "type": "text", + "value": "{", + }, + Object { + "type": "text", + "value": "prop2: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "?", + }, + Object { + "type": "text", + "value": "}", + }, + Object { + "type": "text", + "value": "?", + }, + Object { + "type": "text", + "value": "}", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "value", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "value", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String", + }, + ], + "type": "root", +} +`; + +exports[`outputs flow-unnamed-params.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 19, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 4, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "x", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 8, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 3, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "x", + "namespace": "x", + "params": Array [], + "path": Array [ + Object { + "name": "x", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "type": Object { + "params": Array [ + Object { + "expression": Object { + "name": "T", + "type": "NameExpression", + }, + "name": "", + "type": "ParameterType", + }, + ], + "result": Object { + "name": "string", + "type": "NameExpression", + }, + "type": "FunctionType", + }, + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 25, + "line": 7, + }, + "start": Object { + "column": 0, + "line": 7, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "x2", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 9, + "line": 6, + }, + "start": Object { + "column": 0, + "line": 6, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "x2", + "namespace": "x2", + "params": Array [], + "path": Array [ + Object { + "name": "x2", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "type": Object { + "params": Array [ + Object { + "expression": Object { + "name": "T", + "type": "NameExpression", + }, + "name": "a", + "type": "ParameterType", + }, + ], + "result": Object { + "name": "string", + "type": "NameExpression", + }, + "type": "FunctionType", + }, + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 39, + "line": 10, + }, + "start": Object { + "column": 0, + "line": 10, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "T", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "typedef", + "loc": Object { + "end": Object { + "column": 8, + "line": 9, + }, + "start": Object { + "column": 0, + "line": 9, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "T", + "namespace": "T", + "params": Array [], + "path": Array [ + Object { + "kind": "typedef", + "name": "T", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "type": Object { + "params": Array [ + Object { + "expression": Object { + "applications": Array [ + Object { + "name": "string", + "type": "NameExpression", + }, + ], + "expression": Object { + "name": "Array", + "type": "NameExpression", + }, + "type": "TypeApplication", + }, + "name": "", + "type": "ParameterType", + }, + ], + "result": Object { + "fields": Array [ + Object { + "key": "num", + "type": "FieldType", + "value": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "type": "RecordType", + }, + "type": "FunctionType", + }, + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 43, + "line": 13, + }, + "start": Object { + "column": 0, + "line": 13, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "T2", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "typedef", + "loc": Object { + "end": Object { + "column": 9, + "line": 12, + }, + "start": Object { + "column": 0, + "line": 12, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "T2", + "namespace": "T2", + "params": Array [], + "path": Array [ + Object { + "kind": "typedef", + "name": "T2", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "type": Object { + "params": Array [ + Object { + "expression": Object { + "applications": Array [ + Object { + "name": "string", + "type": "NameExpression", + }, + ], + "expression": Object { + "name": "Array", + "type": "NameExpression", + }, + "type": "TypeApplication", + }, + "name": "a", + "type": "ParameterType", + }, + ], + "result": Object { + "fields": Array [ + Object { + "key": "num", + "type": "FieldType", + "value": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "type": "RecordType", + }, + "type": "FunctionType", + }, + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 42, + "line": 16, + }, + "start": Object { + "column": 0, + "line": 16, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "T3", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "typedef", + "loc": Object { + "end": Object { + "column": 9, + "line": 15, + }, + "start": Object { + "column": 0, + "line": 15, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "T3", + "namespace": "T3", + "params": Array [], + "path": Array [ + Object { + "kind": "typedef", + "name": "T3", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "type": Object { + "params": Array [ + Object { + "expression": Object { + "name": "string", + "type": "NameExpression", + }, + "name": "a", + "type": "ParameterType", + }, + ], + "result": Object { + "fields": Array [ + Object { + "key": "num", + "type": "FieldType", + "value": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "type": "RecordType", + }, + "type": "FunctionType", + }, + "yields": Array [], + }, +] +`; + +exports[`outputs flow-unnamed-params.input.js markdown 1`] = ` +" + +### Table of Contents + +* [x][1] +* [x2][2] +* [T][3] +* [T2][4] +* [T3][5] + +## x + +x + +Type: function ([T][6]): [string][7] + +## x2 + +x2 + +Type: function (a: [T][6]): [string][7] + +## T + +T + +Type: function ([Array][8]<[string][7]>): {num: [number][9]} + +## T2 + +T2 + +Type: function (a: [Array][8]<[string][7]>): {num: [number][9]} + +## T3 + +T3 + +Type: function (a: [string][7]): {num: [number][9]} + +[1]: #x + +[2]: #x2 + +[3]: #t + +[4]: #t2 + +[5]: #t3 + +[6]: #t + +[7]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String + +[8]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array + +[9]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number +" +`; + +exports[`outputs flow-unnamed-params.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "x", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "x", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "type": "text", + "value": "function (", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "T", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": ")", + }, + Object { + "type": "text", + "value": ": ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "x2", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "x2", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "type": "text", + "value": "function (", + }, + Object { + "type": "text", + "value": "a: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "T", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": ")", + }, + Object { + "type": "text", + "value": ": ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "T", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "T", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "type": "text", + "value": "function (", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Array", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "<", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": ">", + }, + Object { + "type": "text", + "value": ")", + }, + Object { + "type": "text", + "value": ": ", + }, + Object { + "type": "text", + "value": "{", + }, + Object { + "type": "text", + "value": "num: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "4", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "}", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "T2", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "T2", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "type": "text", + "value": "function (", + }, + Object { + "type": "text", + "value": "a: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Array", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "<", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": ">", + }, + Object { + "type": "text", + "value": ")", + }, + Object { + "type": "text", + "value": ": ", + }, + Object { + "type": "text", + "value": "{", + }, + Object { + "type": "text", + "value": "num: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "4", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "}", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "T3", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "T3", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "type": "text", + "value": "function (", + }, + Object { + "type": "text", + "value": "a: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": ")", + }, + Object { + "type": "text", + "value": ": ", + }, + Object { + "type": "text", + "value": "{", + }, + Object { + "type": "text", + "value": "num: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "4", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "}", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "#t", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String", + }, + Object { + "identifier": "3", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array", + }, + Object { + "identifier": "4", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + ], + "type": "root", +} +`; + +exports[`outputs import.meta.input.js JSON 1`] = `Array []`; + +exports[`outputs import.meta.input.js markdown 1`] = ` +" + +### Table of Contents +" +`; + +exports[`outputs import.meta.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + ], + "type": "root", +} +`; + +exports[`outputs infer-private.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 14, + }, + "start": Object { + "column": 0, + "line": 9, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "C description", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 20, + "line": 8, + }, + "start": Object { + "column": 0, + "line": 8, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 8, + "line": 11, + }, + "start": Object { + "column": 2, + "line": 11, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "m description", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 22, + "line": 10, + }, + "start": Object { + "column": 2, + "line": 10, + }, + }, + "memberof": "C", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "m", + "namespace": "C#m", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "C", + }, + Object { + "kind": "function", + "name": "m", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + "static": Array [], + }, + "name": "C", + "namespace": "C", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "C", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs infer-private.input.js markdown 1`] = ` +" + +### Table of Contents + +* [C][1] + * [m][2] + +## C + +C description + +### m + +m description + +[1]: #c + +[2]: #m +" +`; + +exports[`outputs infer-private.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "C", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "C description", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "m", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "m description", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", +} +`; + +exports[`outputs inheritance.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [ + Object { + "name": "Array", + "title": "augments", + }, + ], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 6, + }, + "start": Object { + "column": 0, + "line": 4, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "With ES6, built-in types are extensible!", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 3, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "SpecialArray", + "namespace": "SpecialArray", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "SpecialArray", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 42, + "line": 9, + }, + "start": Object { + "column": 0, + "line": 9, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 17, + "line": 8, + }, + "start": Object { + "column": 0, + "line": 8, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "Foo", + "namespace": "Foo", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Foo", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 0, + "name": "Foo", + "title": "class", + "type": null, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs inheritance.input.js markdown 1`] = ` +" + +### Table of Contents + +* [SpecialArray][1] +* [Foo][2] + +## SpecialArray + +**Extends Array** + +With ES6, built-in types are extensible! + +## Foo + +[1]: #specialarray + +[2]: #foo +" +`; + +exports[`outputs inheritance.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "SpecialArray", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Extends ", + }, + Object { + "type": "text", + "value": "Array", + }, + ], + "type": "strong", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "With ES6, built-in types are extensible!", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Foo", + }, + ], + "depth": 2, + "type": "heading", + }, + ], + "type": "root", +} +`; + +exports[`outputs inline-link.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 8, + }, + "start": Object { + "column": 0, + "line": 6, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Adds one to a number", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 5, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "addOne", + "namespace": "addOne", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "the input", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 2, + "name": "a", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "addOne", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "the output", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "the input", + "lineNumber": 2, + "name": "a", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "description": "the output", + "lineNumber": 3, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 23, + }, + "start": Object { + "column": 0, + "line": 21, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one. Internally, this uses +", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "addOne", + }, + ], + "jsdoc": true, + "title": null, + "type": "link", + "url": "addOne", + }, + Object { + "type": "text", + "value": " to do the math. This demonstrates +", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Addition", + }, + ], + "jsdoc": true, + "title": null, + "type": "link", + "url": "https://en.wikipedia.org/wiki/Addition", + }, + Object { + "type": "text", + "value": " +and ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "https://en.wikipedia.org/wiki/Addition", + }, + ], + "jsdoc": true, + "title": null, + "type": "link", + "url": "https://en.wikipedia.org/wiki/Addition", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This link refers to nothing: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "nothing", + }, + ], + "jsdoc": true, + "title": null, + "type": "link", + "url": "nothing", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 20, + }, + "start": Object { + "column": 0, + "line": 10, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "inline-link.input", + "namespace": "inline-link.input", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "the input", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 8, + "name": "a", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "inline-link.input", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "the input", + "lineNumber": 8, + "name": "a", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "description": "numberone", + "lineNumber": 9, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs inline-link.input.js markdown 1`] = ` +" + +### Table of Contents + +* [addOne][1] + * [Parameters][2] +* [inline-link.input][3] + * [Parameters][4] + +## addOne + +Adds one to a number + +### Parameters + +* \`a\` **[number][5]** the input + +Returns **[number][5]** the output + +## inline-link.input + +This function returns the number one. Internally, this uses +[addOne][1] to do the math. This demonstrates +[Addition][6] +and [https://en.wikipedia.org/wiki/Addition][6] + +This link refers to nothing: [nothing][7] + +### Parameters + +* \`a\` **[number][5]** the input + +Returns **[number][5]** numberone + +[1]: #addone + +[2]: #parameters + +[3]: #inline-linkinput + +[4]: #parameters-1 + +[5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number + +[6]: https://en.wikipedia.org/wiki/Addition + +[7]: nothing +" +`; + +exports[`outputs inline-link.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "addOne", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Adds one to a number", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "a", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "the input", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "the output", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "inline-link.input", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one. Internally, this uses +", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "addOne", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": " to do the math. This demonstrates +", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Addition", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": " +and ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "https://en.wikipedia.org/wiki/Addition", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This link refers to nothing: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "nothing", + }, + ], + "identifier": "4", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "a", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "the input", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + Object { + "identifier": "2", + "title": null, + "type": "definition", + "url": "#addone", + }, + Object { + "identifier": "3", + "title": null, + "type": "definition", + "url": "https://en.wikipedia.org/wiki/Addition", + }, + Object { + "identifier": "4", + "title": null, + "type": "definition", + "url": "nothing", + }, + ], + "type": "root", +} +`; + +exports[`outputs interface.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [ + Object { + "name": "Bar", + "title": "extends", + }, + Object { + "name": "Baz", + "title": "extends", + }, + ], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 9, + }, + "start": Object { + "column": 0, + "line": 4, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is my interface.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "interface", + "loc": Object { + "end": Object { + "column": 3, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 15, + "line": 6, + }, + "start": Object { + "column": 2, + "line": 6, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is prop 1", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "member", + "loc": Object { + "end": Object { + "column": 23, + "line": 5, + }, + "start": Object { + "column": 2, + "line": 5, + }, + }, + "memberof": "Foo", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "prop1", + "namespace": "Foo#prop1", + "params": Array [], + "path": Array [ + Object { + "kind": "interface", + "name": "Foo", + }, + Object { + "kind": "member", + "name": "prop1", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "type": Object { + "name": "number", + "type": "NameExpression", + }, + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 15, + "line": 8, + }, + "start": Object { + "column": 2, + "line": 8, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is prop 2", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "member", + "loc": Object { + "end": Object { + "column": 23, + "line": 7, + }, + "start": Object { + "column": 2, + "line": 7, + }, + }, + "memberof": "Foo", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "prop2", + "namespace": "Foo#prop2", + "params": Array [], + "path": Array [ + Object { + "kind": "interface", + "name": "Foo", + }, + Object { + "kind": "member", + "name": "prop2", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "type": Object { + "name": "string", + "type": "NameExpression", + }, + "yields": Array [], + }, + ], + "static": Array [], + }, + "name": "Foo", + "namespace": "Foo", + "params": Array [], + "path": Array [ + Object { + "kind": "interface", + "name": "Foo", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs interface.input.js markdown 1`] = ` +" + +### Table of Contents + +* [Foo][1] + * [prop1][2] + * [prop2][3] + +## Foo + +**Extends Bar, Baz** + +This is my interface. + +### prop1 + +This is prop 1 + +Type: [number][4] + +### prop2 + +This is prop 2 + +Type: [string][5] + +[1]: #foo + +[2]: #prop1 + +[3]: #prop2 + +[4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number + +[5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String +" +`; + +exports[`outputs interface.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Foo", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Extends ", + }, + Object { + "type": "text", + "value": "Bar, Baz", + }, + ], + "type": "strong", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is my interface.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "prop1", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is prop 1", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "prop2", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is prop 2", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String", + }, + ], + "type": "root", +} +`; + +exports[`outputs internal.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 10, + }, + "start": Object { + "column": 0, + "line": 8, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "I am in ", + }, + Object { + "type": "inlineCode", + "value": "external.input.js", + }, + Object { + "type": "text", + "value": ".", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 7, + }, + "start": Object { + "column": 0, + "line": 5, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "foo", + "namespace": "foo", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "foo", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs internal.input.js markdown 1`] = ` +" + +### Table of Contents + +* [foo][1] + +## foo + +I am in \`external.input.js\`. + +[1]: #foo +" +`; + +exports[`outputs internal.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "foo", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "I am in ", + }, + Object { + "type": "inlineCode", + "value": "external.input.js", + }, + Object { + "type": "text", + "value": ".", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", +} +`; + +exports[`outputs lends.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [ + Object { + "description": null, + "lineNumber": 3, + "name": "Augmented", + "title": "augments", + "type": null, + }, + ], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 28, + }, + "start": Object { + "column": 0, + "line": 6, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "A neat layout view", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 3, + "line": 5, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 20, + "line": 10, + }, + "start": Object { + "column": 4, + "line": 10, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "My field", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 19, + "line": 9, + }, + "start": Object { + "column": 4, + "line": 9, + }, + }, + "memberof": "TheClass", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "my-field", + "namespace": "TheClass#my-field", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "TheClass", + }, + Object { + "name": "my-field", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 5, + "line": 18, + }, + "start": Object { + "column": 4, + "line": 16, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "My neat function", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 7, + "line": 15, + }, + "start": Object { + "column": 4, + "line": 11, + }, + }, + "memberof": "TheClass", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "foo", + "namespace": "TheClass#foo", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "your word", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 2, + "name": "word", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "TheClass", + }, + Object { + "kind": "function", + "name": "foo", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "your word but one better", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "scope": "instance", + "sees": Array [], + "tags": Array [ + Object { + "description": "your word", + "lineNumber": 2, + "name": "word", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + Object { + "description": "your word but one better", + "lineNumber": 3, + "title": "returns", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 5, + "line": 26, + }, + "start": Object { + "column": 4, + "line": 24, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "My neat function", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 7, + "line": 23, + }, + "start": Object { + "column": 4, + "line": 19, + }, + }, + "memberof": "TheClass", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "bar", + "namespace": "TheClass#bar", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "your word", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 2, + "name": "word", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "TheClass", + }, + Object { + "kind": "function", + "name": "bar", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "your word but one better", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "scope": "instance", + "sees": Array [], + "tags": Array [ + Object { + "description": "your word", + "lineNumber": 2, + "name": "word", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + Object { + "description": "your word but one better", + "lineNumber": 3, + "title": "returns", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + "static": Array [], + }, + "name": "TheClass", + "namespace": "TheClass", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "TheClass", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 2, + "name": "TheClass", + "title": "class", + "type": null, + }, + Object { + "description": null, + "lineNumber": 3, + "name": "Augmented", + "title": "augments", + "type": null, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs lends.input.js markdown 1`] = ` +" + +### Table of Contents + +* [TheClass][1] + * [my-field][2] + * [foo][3] + * [Parameters][4] + * [bar][5] + * [Parameters][6] + +## TheClass + +**Extends Augmented** + +A neat layout view + +### my-field + +My field + +### foo + +My neat function + +#### Parameters + +* \`word\` **[string][7]** your word + +Returns **[string][7]** your word but one better + +### bar + +My neat function + +#### Parameters + +* \`word\` **[string][7]** your word + +Returns **[string][7]** your word but one better + +[1]: #theclass + +[2]: #my-field + +[3]: #foo + +[4]: #parameters + +[5]: #bar + +[6]: #parameters-1 + +[7]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String +" +`; + +exports[`outputs lends.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "TheClass", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Extends ", + }, + Object { + "type": "text", + "value": "Augmented", + }, + ], + "type": "strong", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "A neat layout view", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "my-field", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "My field", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "foo", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "My neat function", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 4, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "word", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "your word", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "your word but one better", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "bar", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "My neat function", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 4, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "word", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "your word", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "your word but one better", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String", + }, + ], + "type": "root", +} +`; + +exports[`outputs literal_types.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 16, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 4, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "f", + "namespace": "f", + "params": Array [ + Object { + "lineNumber": 1, + "name": "x", + "title": "param", + "type": Object { + "elements": Array [ + Object { + "type": "StringLiteralType", + "value": "a", + }, + Object { + "type": "StringLiteralType", + "value": "b", + }, + Object { + "type": "StringLiteralType", + "value": "", + }, + Object { + "type": "NumericLiteralType", + "value": 0, + }, + Object { + "type": "NumericLiteralType", + "value": -42, + }, + Object { + "type": "NumericLiteralType", + "value": 3.14, + }, + ], + "type": "UnionType", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "f", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 1, + "name": "x", + "title": "param", + "type": Object { + "elements": Array [ + Object { + "type": "StringLiteralType", + "value": "a", + }, + Object { + "type": "StringLiteralType", + "value": "b", + }, + Object { + "type": "StringLiteralType", + "value": "", + }, + Object { + "type": "NumericLiteralType", + "value": 0, + }, + Object { + "type": "NumericLiteralType", + "value": -42, + }, + Object { + "type": "NumericLiteralType", + "value": 3.14, + }, + ], + "type": "UnionType", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 49, + "line": 7, + }, + "start": Object { + "column": 0, + "line": 7, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 6, + "line": 6, + }, + "start": Object { + "column": 0, + "line": 6, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "g", + "namespace": "g", + "params": Array [ + Object { + "lineNumber": 7, + "name": "x", + "title": "param", + "type": Object { + "elements": Array [ + Object { + "type": "StringLiteralType", + "value": "a", + }, + Object { + "type": "StringLiteralType", + "value": "b", + }, + Object { + "type": "StringLiteralType", + "value": "", + }, + Object { + "type": "NumericLiteralType", + "value": 0, + }, + Object { + "type": "NumericLiteralType", + "value": -42, + }, + Object { + "type": "NumericLiteralType", + "value": 3.14, + }, + ], + "type": "UnionType", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "g", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs literal_types.input.js markdown 1`] = ` +" + +### Table of Contents + +* [f][1] + * [Parameters][2] +* [g][3] + * [Parameters][4] + +## f + +### Parameters + +* \`x\` **(\`\\"a\\"\` | \`\\"b\\"\` | \`\\"\\"\` | \`0\` | \`-42\` | \`3.14\`)** + +## g + +### Parameters + +* \`x\` **(\`\\"a\\"\` | \`\\"b\\"\` | \`\\"\\"\` | \`0\` | \`-42\` | \`3.14\`)** + +[1]: #f + +[2]: #parameters + +[3]: #g + +[4]: #parameters-1 +" +`; + +exports[`outputs literal_types.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "f", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "x", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "(", + }, + Object { + "type": "inlineCode", + "value": "\\"a\\"", + }, + Object { + "type": "text", + "value": " | ", + }, + Object { + "type": "inlineCode", + "value": "\\"b\\"", + }, + Object { + "type": "text", + "value": " | ", + }, + Object { + "type": "inlineCode", + "value": "\\"\\"", + }, + Object { + "type": "text", + "value": " | ", + }, + Object { + "type": "inlineCode", + "value": "0", + }, + Object { + "type": "text", + "value": " | ", + }, + Object { + "type": "inlineCode", + "value": "-42", + }, + Object { + "type": "text", + "value": " | ", + }, + Object { + "type": "inlineCode", + "value": "3.14", + }, + Object { + "type": "text", + "value": ")", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "g", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "x", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "(", + }, + Object { + "type": "inlineCode", + "value": "\\"a\\"", + }, + Object { + "type": "text", + "value": " | ", + }, + Object { + "type": "inlineCode", + "value": "\\"b\\"", + }, + Object { + "type": "text", + "value": " | ", + }, + Object { + "type": "inlineCode", + "value": "\\"\\"", + }, + Object { + "type": "text", + "value": " | ", + }, + Object { + "type": "inlineCode", + "value": "0", + }, + Object { + "type": "text", + "value": " | ", + }, + Object { + "type": "inlineCode", + "value": "-42", + }, + Object { + "type": "text", + "value": " | ", + }, + Object { + "type": "inlineCode", + "value": "3.14", + }, + Object { + "type": "text", + "value": ")", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + ], + "type": "root", +} +`; + +exports[`outputs memberedclass.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 28, + }, + "start": Object { + "column": 0, + "line": 7, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is my class, a demo thing.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [ + Object { + "commentLineNumber": 4, + "message": "@memberof reference to com.Test not found", + }, + ], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 3, + "line": 6, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "memberof": "com.Test", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 3, + "line": 20, + }, + "start": Object { + "column": 2, + "line": 18, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Get the number 42", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 7, + "line": 17, + }, + "start": Object { + "column": 2, + "line": 12, + }, + }, + "memberof": "com.Test.MyClass", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "getFoo", + "namespace": "MyClass#getFoo", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "whether to get the number", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 3, + "name": "getIt", + "title": "param", + "type": Object { + "name": "boolean", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "MyClass", + }, + Object { + "kind": "function", + "name": "getFoo", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "forty-two", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "scope": "instance", + "sees": Array [], + "tags": Array [ + Object { + "description": "whether to get the number", + "lineNumber": 3, + "name": "getIt", + "title": "param", + "type": Object { + "name": "boolean", + "type": "NameExpression", + }, + }, + Object { + "description": "forty-two", + "lineNumber": 4, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + "static": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 26, + "line": 27, + }, + "start": Object { + "column": 2, + "line": 27, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Get undefined", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 7, + "line": 26, + }, + "start": Object { + "column": 2, + "line": 22, + }, + }, + "memberof": "com.Test.MyClass", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "getUndefined", + "namespace": "MyClass.getUndefined", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "MyClass", + }, + Object { + "kind": "function", + "name": "getUndefined", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "does not return anything.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "type": "UndefinedLiteral", + }, + }, + ], + "scope": "static", + "sees": Array [], + "tags": Array [ + Object { + "description": "does not return anything.", + "lineNumber": 3, + "title": "returns", + "type": Object { + "type": "UndefinedLiteral", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + }, + "name": "MyClass", + "namespace": "MyClass", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "MyClass", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 3, + "name": "MyClass", + "title": "class", + "type": null, + }, + Object { + "description": "com.Test", + "lineNumber": 4, + "title": "memberof", + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs memberedclass.input.js markdown 1`] = ` +" + +### Table of Contents + +* [MyClass][1] + * [getFoo][2] + * [Parameters][3] + * [getUndefined][4] + +## MyClass + +This is my class, a demo thing. + +### getFoo + +Get the number 42 + +#### Parameters + +* \`getIt\` **[boolean][5]** whether to get the number + +Returns **[number][6]** forty-two + +### getUndefined + +Get undefined + +Returns **[undefined][7]** does not return anything. + +[1]: #myclass + +[2]: #getfoo + +[3]: #parameters + +[4]: #getundefined + +[5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean + +[6]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number + +[7]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined +" +`; + +exports[`outputs memberedclass.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "MyClass", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is my class, a demo thing.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "getFoo", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Get the number 42", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 4, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "getIt", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "boolean", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "whether to get the number", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "forty-two", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "getUndefined", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Get undefined", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "undefined", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "does not return anything.", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + Object { + "identifier": "3", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined", + }, + ], + "type": "root", +} +`; + +exports[`outputs merge-infered-type.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 9, + }, + "start": Object { + "column": 0, + "line": 7, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Add five to ", + }, + Object { + "type": "inlineCode", + "value": "x", + }, + Object { + "type": "text", + "value": ".", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 6, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "addFive", + "namespace": "addFive", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "The number to add five to.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 3, + "name": "x", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "addFive", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "x plus five.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "The number to add five to.", + "lineNumber": 3, + "name": "x", + "title": "param", + "type": null, + }, + Object { + "description": "x plus five.", + "lineNumber": 4, + "title": "returns", + "type": null, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs merge-infered-type.input.js markdown 1`] = ` +" + +### Table of Contents + +* [addFive][1] + * [Parameters][2] + +## addFive + +Add five to \`x\`. + +### Parameters + +* \`x\` **[number][3]** The number to add five to. + +Returns **[number][3]** x plus five. + +[1]: #addfive + +[2]: #parameters + +[3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number +" +`; + +exports[`outputs merge-infered-type.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "addFive", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Add five to ", + }, + Object { + "type": "inlineCode", + "value": "x", + }, + Object { + "type": "text", + "value": ".", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "x", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "The number to add five to.", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "x plus five.", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + ], + "type": "root", +} +`; + +exports[`outputs meta.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 14, + }, + "start": Object { + "column": 0, + "line": 11, + }, + }, + }, + "copyright": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Tom MacWright", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "license": "BSD", + "loc": Object { + "end": Object { + "column": 3, + "line": 10, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "meta.input", + "namespace": "meta.input", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "meta.input", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "sees": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "markdown link", + }, + ], + "title": null, + "type": "link", + "url": "http://foo.com/", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "sees", + }, + ], + "since": "2.0.0", + "tags": Array [ + Object { + "description": "numberone", + "lineNumber": 2, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "description": "This function returns the number one.", + "lineNumber": 3, + "title": "description", + }, + Object { + "description": "[markdown link](http://foo.com/)", + "lineNumber": 4, + "title": "see", + }, + Object { + "description": "1.0.0", + "lineNumber": 5, + "title": "version", + }, + Object { + "description": "2.0.0", + "lineNumber": 6, + "title": "since", + }, + Object { + "description": "Tom MacWright", + "lineNumber": 7, + "title": "copyright", + }, + Object { + "description": "BSD", + "lineNumber": 8, + "title": "license", + }, + ], + "throws": Array [], + "todos": Array [], + "version": "1.0.0", + "yields": Array [], + }, +] +`; + +exports[`outputs meta.input.js markdown 1`] = ` +" + +### Table of Contents + +* [meta.input][1] + +## meta.input + +* **See**: [markdown link][2] + +This function returns the number one. + +Returns **[number][3]** numberone + +**Meta** + +* **version**: 1.0.0 +* **since**: 2.0.0 +* **copyright**: Tom MacWright +* **license**: BSD + +[1]: #metainput + +[2]: http://foo.com/ + +[3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number +" +`; + +exports[`outputs meta.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "meta.input", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "See", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": ": ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "markdown link", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Meta", + }, + ], + "type": "strong", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "version", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": ": ", + }, + Object { + "type": "text", + "value": "1.0.0", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "since", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": ": ", + }, + Object { + "type": "text", + "value": "2.0.0", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "copyright", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": ": ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Tom MacWright", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "license", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": ": ", + }, + Object { + "type": "text", + "value": "BSD", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "identifier": "1", + "title": null, + "type": "definition", + "url": "http://foo.com/", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + ], + "type": "root", +} +`; + +exports[`outputs multisignature.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 19, + }, + "start": Object { + "column": 0, + "line": 13, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Get the time", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 6, + }, + "start": Object { + "column": 0, + "line": 3, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "getTheTime", + "namespace": "getTheTime", + "params": Array [ + Object { + "lineNumber": 13, + "name": "time", + "title": "param", + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "getTheTime", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "the current date", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "Date", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "the current date", + "lineNumber": 2, + "title": "returns", + "type": Object { + "name": "Date", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 19, + }, + "start": Object { + "column": 0, + "line": 13, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Set the time", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 12, + }, + "start": Object { + "column": 0, + "line": 8, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "getTheTime", + "namespace": "getTheTime", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "the current time", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 2, + "name": "time", + "title": "param", + "type": Object { + "name": "Date", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "getTheTime", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "nothing", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "type": "UndefinedLiteral", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "the current time", + "lineNumber": 2, + "name": "time", + "title": "param", + "type": Object { + "name": "Date", + "type": "NameExpression", + }, + }, + Object { + "description": "nothing", + "lineNumber": 3, + "title": "returns", + "type": Object { + "type": "UndefinedLiteral", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs multisignature.input.js markdown 1`] = ` +" + +### Table of Contents + +* [getTheTime][1] + * [Parameters][2] +* [getTheTime][3] + * [Parameters][4] + +## getTheTime + +Get the time + +### Parameters + +* \`time\` + +Returns **[Date][5]** the current date + +## getTheTime + +Set the time + +### Parameters + +* \`time\` **[Date][5]** the current time + +Returns **[undefined][6]** nothing + +[1]: #getthetime + +[2]: #parameters + +[3]: #getthetime-1 + +[4]: #parameters-1 + +[5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date + +[6]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined +" +`; + +exports[`outputs multisignature.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "getTheTime", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Get the time", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "time", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Date", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "the current date", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "getTheTime", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Set the time", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "time", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Date", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "the current time", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "undefined", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "nothing", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Date", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined", + }, + ], + "type": "root", +} +`; + +exports[`outputs nearby_params.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 3, + "line": 13, + }, + "start": Object { + "column": 0, + "line": 10, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Attempt to establish a cookie-based session in exchange for credentials.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 9, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "sessions.create", + "namespace": "sessions.create", + "params": Array [ + Object { + "lineNumber": 3, + "name": "credentials", + "properties": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Login username. Also accepted as ", + }, + Object { + "type": "inlineCode", + "value": "username", + }, + Object { + "type": "text", + "value": " or ", + }, + Object { + "type": "inlineCode", + "value": "email", + }, + Object { + "type": "text", + "value": ".", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 4, + "name": "credentials.name", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Login password", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 5, + "name": "credentials.password", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "title": "param", + "type": Object { + "name": "object", + "type": "NameExpression", + }, + }, + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Gets passed ", + }, + Object { + "type": "inlineCode", + "value": "(err, { success:Boolean })", + }, + Object { + "type": "text", + "value": ".", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 6, + "name": "callback", + "title": "param", + "type": Object { + "expression": Object { + "name": "function", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "sessions.create", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "promise, to be resolved on success or rejected on failure", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "Promise", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 1, + "name": null, + "title": "function", + }, + Object { + "description": null, + "lineNumber": 2, + "name": "sessions.create", + "title": "name", + }, + Object { + "description": null, + "lineNumber": 3, + "name": "credentials", + "title": "param", + "type": Object { + "name": "object", + "type": "NameExpression", + }, + }, + Object { + "description": "Login username. Also accepted as \`username\` or \`email\`.", + "lineNumber": 4, + "name": "credentials.name", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + Object { + "description": "Login password", + "lineNumber": 5, + "name": "credentials.password", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + Object { + "description": "Gets passed \`(err, { success:Boolean })\`.", + "lineNumber": 6, + "name": "callback", + "title": "param", + "type": Object { + "expression": Object { + "name": "function", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, + Object { + "description": "promise, to be resolved on success or rejected on failure", + "lineNumber": 7, + "title": "returns", + "type": Object { + "name": "Promise", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs nearby_params.input.js markdown 1`] = ` +" + +### Table of Contents + +* [sessions.create][1] + * [Parameters][2] + +## sessions.create + +Attempt to establish a cookie-based session in exchange for credentials. + +### Parameters + +* \`credentials\` **[object][3]** + + * \`credentials.name\` **[string][4]** Login username. Also accepted as \`username\` or \`email\`. + * \`credentials.password\` **[string][4]** Login password +* \`callback\` **[function][5]?** Gets passed \`(err, { success:Boolean })\`. + +Returns **[Promise][6]** promise, to be resolved on success or rejected on failure + +[1]: #sessionscreate + +[2]: #parameters + +[3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object + +[4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String + +[5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function + +[6]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise +" +`; + +exports[`outputs nearby_params.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "sessions.create", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Attempt to establish a cookie-based session in exchange for credentials.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "credentials", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "object", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "credentials.name", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Login username. Also accepted as ", + }, + Object { + "type": "inlineCode", + "value": "username", + }, + Object { + "type": "text", + "value": " or ", + }, + Object { + "type": "inlineCode", + "value": "email", + }, + Object { + "type": "text", + "value": ".", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "credentials.password", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Login password", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "callback", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "function", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "?", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Gets passed ", + }, + Object { + "type": "inlineCode", + "value": "(err, { success:Boolean })", + }, + Object { + "type": "text", + "value": ".", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Promise", + }, + ], + "identifier": "4", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "promise, to be resolved on success or rejected on failure", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String", + }, + Object { + "identifier": "3", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function", + }, + Object { + "identifier": "4", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise", + }, + ], + "type": "root", +} +`; + +exports[`outputs nest_events.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 6, + "line": 13, + }, + "start": Object { + "column": 0, + "line": 13, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Klass description", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 3, + "line": 5, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 6, + "line": 13, + }, + "start": Object { + "column": 0, + "line": 13, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Klass event", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "event", + "loc": Object { + "end": Object { + "column": 3, + "line": 12, + }, + "start": Object { + "column": 1, + "line": 8, + }, + }, + "memberof": "Klass", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "bar", + "namespace": "Klass.event:bar", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Klass", + }, + Object { + "kind": "event", + "name": "bar", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": "bar", + "lineNumber": 2, + "title": "event", + }, + Object { + "description": "Klass", + "lineNumber": 3, + "title": "memberof", + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "Klass", + "namespace": "Klass", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Klass", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 3, + "name": "Klass", + "title": "class", + "type": null, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs nest_events.input.js markdown 1`] = ` +" + +### Table of Contents + +* [Klass][1] + * [bar][2] + +## Klass + +Klass description + +### bar + +Klass event + +[1]: #klass + +[2]: #bar +" +`; + +exports[`outputs nest_events.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Klass", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Klass description", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "bar", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Klass event", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", +} +`; + +exports[`outputs nest_params.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 32, + "line": 7, + }, + "start": Object { + "column": 0, + "line": 7, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 6, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "foo", + "namespace": "foo", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "The employees who are responsible for the project.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 1, + "name": "employees", + "properties": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "The name of an employee.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 2, + "name": "employees[].name", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "The employee's department.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 3, + "name": "employees[].department", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "title": "param", + "type": Object { + "applications": Array [ + Object { + "name": "Object", + "type": "NameExpression", + }, + ], + "expression": Object { + "name": "Array", + "type": "NameExpression", + }, + "type": "TypeApplication", + }, + }, + Object { + "default": "minion", + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "The employee's type.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 4, + "name": "type", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "foo", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": "The employees who are responsible for the project.", + "lineNumber": 1, + "name": "employees", + "title": "param", + "type": Object { + "applications": Array [ + Object { + "name": "Object", + "type": "NameExpression", + }, + ], + "expression": Object { + "name": "Array", + "type": "NameExpression", + }, + "type": "TypeApplication", + }, + }, + Object { + "description": "The name of an employee.", + "lineNumber": 2, + "name": "employees[].name", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + Object { + "description": "The employee's department.", + "lineNumber": 3, + "name": "employees[].department", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + Object { + "default": "minion", + "description": "The employee's type.", + "lineNumber": 4, + "name": "type", + "title": "param", + "type": Object { + "expression": Object { + "name": "string", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 32, + "line": 7, + }, + "start": Object { + "column": 0, + "line": 7, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 3, + "line": 19, + }, + "start": Object { + "column": 0, + "line": 9, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "foo", + "namespace": "foo", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "some options", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 2, + "name": "options", + "properties": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "how much", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 3, + "name": "options.much", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "title": "param", + "type": Object { + "name": "Object", + "type": "NameExpression", + }, + }, + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "something else", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 4, + "name": "bar", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "name": "foo", + }, + ], + "properties": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "the current time", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 5, + "name": "theTime", + "properties": Array [ + Object { + "lineNumber": 6, + "name": "theTime.hours", + "title": "property", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "lineNumber": 7, + "name": "theTime.minutes", + "title": "property", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "lineNumber": 8, + "name": "theTime.seconds", + "title": "property", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "title": "property", + "type": Object { + "name": "Object", + "type": "NameExpression", + }, + }, + ], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "foo something else", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "Object", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 1, + "name": "foo", + "title": "name", + }, + Object { + "description": "some options", + "lineNumber": 2, + "name": "options", + "title": "param", + "type": Object { + "name": "Object", + "type": "NameExpression", + }, + }, + Object { + "description": "how much", + "lineNumber": 3, + "name": "options.much", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "description": "something else", + "lineNumber": 4, + "name": "bar", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "description": "the current time", + "lineNumber": 5, + "name": "theTime", + "title": "property", + "type": Object { + "name": "Object", + "type": "NameExpression", + }, + }, + Object { + "description": null, + "lineNumber": 6, + "name": "theTime.hours", + "title": "property", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "description": null, + "lineNumber": 7, + "name": "theTime.minutes", + "title": "property", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "description": null, + "lineNumber": 8, + "name": "theTime.seconds", + "title": "property", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "description": "foo something else", + "lineNumber": 9, + "title": "returns", + "type": Object { + "name": "Object", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs nest_params.input.js markdown 1`] = ` +" + +### Table of Contents + +* [foo][1] + * [Parameters][2] +* [foo][3] + * [Parameters][4] + * [Properties][5] + +## foo + +### Parameters + +* \`employees\` **[Array][6]<[Object][7]>** The employees who are responsible for the project. + + * \`employees[].name\` **[string][8]** The name of an employee. + * \`employees[].department\` **[string][8]** The employee's department. +* \`type\` **[string][8]** The employee's type. (optional, default \`minion\`) + +## foo + +### Parameters + +* \`options\` **[Object][7]** some options + + * \`options.much\` **[number][9]** how much +* \`bar\` **[number][9]** something else + +### Properties + +* \`theTime\` **[Object][7]** the current time + + * \`theTime.hours\` **[number][9]** + * \`theTime.minutes\` **[number][9]** + * \`theTime.seconds\` **[number][9]** + +Returns **[Object][7]** foo something else + +[1]: #foo + +[2]: #parameters + +[3]: #foo-1 + +[4]: #parameters-1 + +[5]: #properties + +[6]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array + +[7]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object + +[8]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String + +[9]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number +" +`; + +exports[`outputs nest_params.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "foo", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "employees", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Array", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "<", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Object", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": ">", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "The employees who are responsible for the project.", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "employees[].name", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "The name of an employee.", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "employees[].department", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "The employee's department.", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "type", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "The employee's type.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": " (optional, default ", + }, + Object { + "type": "inlineCode", + "value": "minion", + }, + Object { + "type": "text", + "value": ")", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "foo", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "options", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Object", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "some options", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "options.much", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "4", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "how much", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "bar", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "4", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "something else", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Properties", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "theTime", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Object", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "the current time", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "theTime.hours", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "4", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "theTime.minutes", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "4", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "theTime.seconds", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "4", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Object", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "foo something else", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object", + }, + Object { + "identifier": "3", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String", + }, + Object { + "identifier": "4", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + ], + "type": "root", +} +`; + +exports[`outputs newline-in-description.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 0, + "line": 7, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "A function.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [ + Object { + "message": "could not determine @name for hierarchy", + }, + ], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 3, + "line": 6, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "namespace": "", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "The input to the function. +I should be able to continue the description on a new line, and have it +still work in the markdown table.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 2, + "name": "a", + "title": "param", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "path": Array [], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": "The input to the function. +I should be able to continue the description on a new line, and have it +still work in the markdown table.", + "lineNumber": 2, + "name": "a", + "title": "param", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs newline-in-description.input.js markdown 1`] = ` +" + +### Table of Contents + +* [Parameters][1] + +## + +A function. + +### Parameters + +* \`a\` **[Number][2]** The input to the function. + I should be able to continue the description on a new line, and have it + still work in the markdown table. + +[1]: #parameters + +[2]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number +" +`; + +exports[`outputs newline-in-description.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "A function.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "a", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "The input to the function. +I should be able to continue the description on a new line, and have it +still work in the markdown table.", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + ], + "type": "root", +} +`; + +exports[`outputs no-name.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 0, + "line": 5, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Set the time", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [ + Object { + "message": "could not determine @name for hierarchy", + }, + ], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 3, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "namespace": "", + "params": Array [ + Object { + "lineNumber": 2, + "name": "bar", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "path": Array [], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 2, + "name": "bar", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs no-name.input.js markdown 1`] = ` +" + +### Table of Contents + +* [Parameters][1] + +## + +Set the time + +### Parameters + +* \`bar\` **[number][2]** + +[1]: #parameters + +[2]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number +" +`; + +exports[`outputs no-name.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Set the time", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "bar", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + ], + "type": "root", +} +`; + +exports[`outputs optional-record-field-type.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 5, + }, + "start": Object { + "column": 0, + "line": 2, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "typedef", + "loc": Object { + "end": Object { + "column": 6, + "line": 1, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "Record", + "namespace": "Record", + "params": Array [], + "path": Array [ + Object { + "kind": "typedef", + "name": "Record", + }, + ], + "properties": Array [ + Object { + "lineNumber": 3, + "name": "opt", + "title": "property", + "type": Object { + "expression": Object { + "name": "number", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, + Object { + "lineNumber": 4, + "name": "req", + "title": "property", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs optional-record-field-type.input.js markdown 1`] = ` +" + +### Table of Contents + +* [Record][1] + * [Properties][2] + +## Record + +### Properties + +* \`opt\` **[number][3]?** +* \`req\` **[string][4]** + +[1]: #record + +[2]: #properties + +[3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number + +[4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String +" +`; + +exports[`outputs optional-record-field-type.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Record", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Properties", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "opt", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "?", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "req", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String", + }, + ], + "type": "root", +} +`; + +exports[`outputs params.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 7, + }, + "start": Object { + "column": 0, + "line": 5, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "addThem", + "namespace": "addThem", + "params": Array [ + Object { + "lineNumber": 5, + "name": "a", + "title": "param", + }, + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "the second param", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 2, + "name": "b", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "lineNumber": 5, + "name": "c", + "title": "param", + }, + Object { + "anonymous": true, + "name": "$3", + "properties": Array [ + Object { + "lineNumber": 5, + "name": "$3.d", + "title": "param", + }, + Object { + "lineNumber": 5, + "name": "$3.e", + "title": "param", + }, + Object { + "lineNumber": 5, + "name": "$3.f", + "title": "param", + }, + ], + "title": "param", + "type": Object { + "name": "Object", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "addThem", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": "the second param", + "lineNumber": 2, + "name": "b", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 16, + }, + "start": Object { + "column": 0, + "line": 14, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This method has partially inferred params", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 13, + }, + "start": Object { + "column": 0, + "line": 9, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "fishesAndFoxes", + "namespace": "fishesAndFoxes", + "params": Array [ + Object { + "lineNumber": 2, + "name": "options", + "properties": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number of kinds of fish", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 3, + "name": "options.fishes", + "title": "param", + "type": Object { + "name": "String", + "type": "NameExpression", + }, + }, + Object { + "lineNumber": 14, + "name": "options.foxes", + "title": "param", + }, + ], + "title": "param", + "type": Object { + "name": "Object", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "fishesAndFoxes", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 2, + "name": "options", + "title": "param", + "type": Object { + "name": "Object", + "type": "NameExpression", + }, + }, + Object { + "description": "number of kinds of fish", + "lineNumber": 3, + "name": "options.fishes", + "title": "param", + "type": Object { + "name": "String", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 24, + }, + "start": Object { + "column": 0, + "line": 22, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This method has a type in the description and a default in the code", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 21, + }, + "start": Object { + "column": 0, + "line": 18, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "withDefault", + "namespace": "withDefault", + "params": Array [ + Object { + "default": "2", + "lineNumber": 2, + "name": "x", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "withDefault", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 2, + "name": "x", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 35, + }, + "start": Object { + "column": 0, + "line": 29, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is foo's documentation", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 3, + "line": 28, + }, + "start": Object { + "column": 0, + "line": 26, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 14, + "line": 34, + }, + "start": Object { + "column": 2, + "line": 34, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "The method", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 5, + "line": 33, + }, + "start": Object { + "column": 2, + "line": 30, + }, + }, + "memberof": "Foo", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "method", + "namespace": "Foo#method", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Param to method", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 2, + "name": "x", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "Foo", + }, + Object { + "kind": "function", + "name": "method", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [ + Object { + "description": "Param to method", + "lineNumber": 2, + "name": "x", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + "static": Array [], + }, + "name": "Foo", + "namespace": "Foo", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Foo", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 47, + }, + "start": Object { + "column": 0, + "line": 40, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Traditional object", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 3, + "line": 39, + }, + "start": Object { + "column": 0, + "line": 37, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 3, + "line": 46, + }, + "start": Object { + "column": 2, + "line": 44, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This method should acquire the param x", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 5, + "line": 43, + }, + "start": Object { + "column": 2, + "line": 41, + }, + }, + "memberof": "TraditionalObject", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "traditionalMethod", + "namespace": "TraditionalObject.traditionalMethod", + "params": Array [ + Object { + "lineNumber": 44, + "name": "x", + "title": "param", + }, + ], + "path": Array [ + Object { + "name": "TraditionalObject", + }, + Object { + "kind": "function", + "name": "traditionalMethod", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + }, + "name": "TraditionalObject", + "namespace": "TraditionalObject", + "params": Array [], + "path": Array [ + Object { + "name": "TraditionalObject", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 22, + "line": 61, + }, + "start": Object { + "column": 0, + "line": 61, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Represents an IPv6 address", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This tests our support of optional parameters", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [ + Object { + "description": "var address = new Address6('2001::/32');", + }, + ], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 3, + "line": 60, + }, + "start": Object { + "column": 0, + "line": 49, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "Address6", + "namespace": "Address6", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "An IPv6 address string", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 5, + "name": "address", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + Object { + "default": "8", + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "How many octets to parse", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 6, + "name": "groups", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "A third argument", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 7, + "name": "third", + "title": "param", + "type": Object { + "expression": Object { + "name": "number", + "type": "NameExpression", + }, + "prefix": true, + "type": "NullableType", + }, + }, + Object { + "default": "[1]", + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "to properly be parsed", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 8, + "name": "foo", + "title": "param", + "type": Object { + "name": "Array", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "Address6", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 4, + "name": "Address6", + "title": "class", + "type": null, + }, + Object { + "description": "An IPv6 address string", + "lineNumber": 5, + "name": "address", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + Object { + "default": "8", + "description": "How many octets to parse", + "lineNumber": 6, + "name": "groups", + "title": "param", + "type": Object { + "expression": Object { + "name": "number", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, + Object { + "description": "A third argument", + "lineNumber": 7, + "name": "third", + "title": "param", + "type": Object { + "expression": Object { + "name": "number", + "type": "NameExpression", + }, + "prefix": true, + "type": "NullableType", + }, + }, + Object { + "default": "[1]", + "description": "to properly be parsed", + "lineNumber": 8, + "name": "foo", + "title": "param", + "type": Object { + "expression": Object { + "name": "Array", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, + Object { + "description": "var address = new Address6('2001::/32');", + "lineNumber": 9, + "title": "example", + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 77, + }, + "start": Object { + "column": 0, + "line": 75, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Create a GeoJSON data source instance given an options object", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This tests our support of nested parameters", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 3, + "line": 74, + }, + "start": Object { + "column": 0, + "line": 63, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "GeoJSONSource", + "namespace": "GeoJSONSource", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "optional options", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 5, + "name": "options", + "properties": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "A GeoJSON data object or URL to it. +The latter is preferable in case of large GeoJSON files.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 6, + "name": "options.data", + "title": "param", + "type": Object { + "elements": Array [ + Object { + "name": "Object", + "type": "NameExpression", + }, + Object { + "name": "string", + "type": "NameExpression", + }, + ], + "type": "UnionType", + }, + }, + Object { + "default": "14", + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Maximum zoom to preserve detail at.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 8, + "name": "options.maxzoom", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Tile buffer on each side.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 9, + "name": "options.buffer", + "title": "param", + "type": Object { + "expression": Object { + "name": "number", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Simplification tolerance (higher means simpler).", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 10, + "name": "options.tolerance", + "title": "param", + "type": Object { + "expression": Object { + "name": "number", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, + ], + "title": "param", + "type": Object { + "expression": Object { + "name": "Object", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "GeoJSONSource", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 4, + "name": "GeoJSONSource", + "title": "class", + "type": null, + }, + Object { + "description": "optional options", + "lineNumber": 5, + "name": "options", + "title": "param", + "type": Object { + "expression": Object { + "name": "Object", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, + Object { + "description": "A GeoJSON data object or URL to it. +The latter is preferable in case of large GeoJSON files.", + "lineNumber": 6, + "name": "options.data", + "title": "param", + "type": Object { + "elements": Array [ + Object { + "name": "Object", + "type": "NameExpression", + }, + Object { + "name": "string", + "type": "NameExpression", + }, + ], + "type": "UnionType", + }, + }, + Object { + "default": "14", + "description": "Maximum zoom to preserve detail at.", + "lineNumber": 8, + "name": "options.maxzoom", + "title": "param", + "type": Object { + "expression": Object { + "name": "number", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, + Object { + "description": "Tile buffer on each side.", + "lineNumber": 9, + "name": "options.buffer", + "title": "param", + "type": Object { + "expression": Object { + "name": "number", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, + Object { + "description": "Simplification tolerance (higher means simpler).", + "lineNumber": 10, + "name": "options.tolerance", + "title": "param", + "type": Object { + "expression": Object { + "name": "number", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 37, + "line": 87, + }, + "start": Object { + "column": 0, + "line": 87, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This tests our support for parameters with explicit types but with default +values specified in code.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "constant", + "loc": Object { + "end": Object { + "column": 3, + "line": 86, + }, + "start": Object { + "column": 0, + "line": 79, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "myfunc", + "namespace": "myfunc", + "params": Array [ + Object { + "default": "123", + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "an argument", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 4, + "name": "x", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "constant", + "name": "myfunc", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "some", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "an argument", + "lineNumber": 4, + "name": "x", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + Object { + "description": "some", + "lineNumber": 6, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 97, + }, + "start": Object { + "column": 0, + "line": 95, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This tests our support of JSDoc param tags without type information, +or any type information we could infer from annotations.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 94, + }, + "start": Object { + "column": 0, + "line": 89, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "foo", + "namespace": "foo", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "An IPv6 address string", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 4, + "name": "address", + "title": "param", + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "foo", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": "An IPv6 address string", + "lineNumber": 4, + "name": "address", + "title": "param", + "type": null, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 111, + }, + "start": Object { + "column": 0, + "line": 109, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This tests our support for iterator rest inside an +iterator destructure (RestElement)", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 108, + }, + "start": Object { + "column": 0, + "line": 99, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "rotate", + "namespace": "rotate", + "params": Array [ + Object { + "lineNumber": 4, + "name": "input", + "properties": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "head of iterator", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 5, + "name": "input.0", + "title": "param", + "type": Object { + "name": "any", + "type": "NameExpression", + }, + }, + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "body of iterator", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 6, + "name": "input.xs", + "title": "param", + "type": Object { + "expression": Object { + "name": "any", + "type": "NameExpression", + }, + "type": "RestType", + }, + }, + ], + "title": "param", + "type": Object { + "name": "Array", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "rotate", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "rotated such that the last element was the first", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "applications": Array [ + Object { + "name": "any", + "type": "NameExpression", + }, + ], + "expression": Object { + "name": "Array", + "type": "NameExpression", + }, + "type": "TypeApplication", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 4, + "name": "input", + "title": "param", + "type": Object { + "name": "Array", + "type": "NameExpression", + }, + }, + Object { + "description": "head of iterator", + "lineNumber": 5, + "name": "input.0", + "title": "param", + "type": Object { + "name": "any", + "type": "NameExpression", + }, + }, + Object { + "description": "body of iterator", + "lineNumber": 6, + "name": "input.xs", + "title": "param", + "type": Object { + "expression": Object { + "name": "any", + "type": "NameExpression", + }, + "type": "RestType", + }, + }, + Object { + "description": "rotated such that the last element was the first", + "lineNumber": 8, + "title": "returns", + "type": Object { + "applications": Array [ + Object { + "name": "any", + "type": "NameExpression", + }, + ], + "expression": Object { + "name": "Array", + "type": "NameExpression", + }, + "type": "TypeApplication", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs params.input.js markdown 1`] = ` +" + +### Table of Contents + +* [addThem][1] + * [Parameters][2] +* [fishesAndFoxes][3] + * [Parameters][4] +* [withDefault][5] + * [Parameters][6] +* [Foo][7] + * [method][8] + * [Parameters][9] +* [TraditionalObject][10] + * [traditionalMethod][11] + * [Parameters][12] +* [Address6][13] + * [Parameters][14] + * [Examples][15] +* [GeoJSONSource][16] + * [Parameters][17] +* [myfunc][18] + * [Parameters][19] +* [foo][20] + * [Parameters][21] +* [rotate][22] + * [Parameters][23] + +## addThem + +This function returns the number one. + +### Parameters + +* \`a\` +* \`b\` **[number][24]** the second param +* \`c\` +* \`$3\` **[Object][25]** + + * \`$3.d\` + * \`$3.e\` + * \`$3.f\` + +## fishesAndFoxes + +This method has partially inferred params + +### Parameters + +* \`options\` **[Object][25]** + + * \`options.fishes\` **[String][26]** number of kinds of fish + * \`options.foxes\` + +## withDefault + +This method has a type in the description and a default in the code + +### Parameters + +* \`x\` **[number][24]** (optional, default \`2\`) + +## Foo + +This is foo's documentation + +### method + +The method + +#### Parameters + +* \`x\` **[number][24]** Param to method + +## TraditionalObject + +Traditional object + +### traditionalMethod + +This method should acquire the param x + +#### Parameters + +* \`x\` + +## Address6 + +Represents an IPv6 address + +This tests our support of optional parameters + +### Parameters + +* \`address\` **[string][26]** An IPv6 address string +* \`groups\` **[number][24]** How many octets to parse (optional, default \`8\`) +* \`third\` **[number][24]?** A third argument +* \`foo\` **[Array][27]** to properly be parsed (optional, default \`[1]\`) + +### Examples + +\`\`\`javascript +var address = new Address6('2001::/32'); +\`\`\` + +## GeoJSONSource + +Create a GeoJSON data source instance given an options object + +This tests our support of nested parameters + +### Parameters + +* \`options\` **[Object][25]?** optional options + + * \`options.data\` **([Object][25] | [string][26])** A GeoJSON data object or URL to it. + The latter is preferable in case of large GeoJSON files. + * \`options.maxzoom\` **[number][24]** Maximum zoom to preserve detail at. (optional, default \`14\`) + * \`options.buffer\` **[number][24]?** Tile buffer on each side. + * \`options.tolerance\` **[number][24]?** Simplification tolerance (higher means simpler). + +## myfunc + +This tests our support for parameters with explicit types but with default +values specified in code. + +### Parameters + +* \`x\` **[number][24]** an argument (optional, default \`123\`) + +Returns **[number][24]** some + +## foo + +This tests our support of JSDoc param tags without type information, +or any type information we could infer from annotations. + +### Parameters + +* \`address\` An IPv6 address string + +## rotate + +This tests our support for iterator rest inside an +iterator destructure (RestElement) + +### Parameters + +* \`input\` **[Array][27]** + + * \`input.0\` **any** head of iterator + * \`input.xs\` **...any** body of iterator + +Returns **[Array][27]\\\\** rotated such that the last element was the first + +[1]: #addthem + +[2]: #parameters + +[3]: #fishesandfoxes + +[4]: #parameters-1 + +[5]: #withdefault + +[6]: #parameters-2 + +[7]: #foo + +[8]: #method + +[9]: #parameters-3 + +[10]: #traditionalobject + +[11]: #traditionalmethod + +[12]: #parameters-4 + +[13]: #address6 + +[14]: #parameters-5 + +[15]: #examples + +[16]: #geojsonsource + +[17]: #parameters-6 + +[18]: #myfunc + +[19]: #parameters-7 + +[20]: #foo-1 + +[21]: #parameters-8 + +[22]: #rotate + +[23]: #parameters-9 + +[24]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number + +[25]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object + +[26]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String + +[27]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array +" +`; + +exports[`outputs params.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "addThem", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "a", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "b", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "the second param", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "c", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "$3", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Object", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "$3.d", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "$3.e", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "$3.f", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "fishesAndFoxes", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This method has partially inferred params", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "options", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Object", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "options.fishes", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "String", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "number of kinds of fish", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "options.foxes", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "withDefault", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This method has a type in the description and a default in the code", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "x", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": " (optional, default ", + }, + Object { + "type": "inlineCode", + "value": "2", + }, + Object { + "type": "text", + "value": ")", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Foo", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This is foo's documentation", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "method", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "The method", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 4, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "x", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Param to method", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "TraditionalObject", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Traditional object", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "traditionalMethod", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This method should acquire the param x", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 4, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "x", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Address6", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Represents an IPv6 address", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This tests our support of optional parameters", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "address", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "An IPv6 address string", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "groups", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "How many octets to parse", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": " (optional, default ", + }, + Object { + "type": "inlineCode", + "value": "8", + }, + Object { + "type": "text", + "value": ")", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "third", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "?", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "A third argument", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "foo", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Array", + }, + ], + "identifier": "4", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "to properly be parsed", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": " (optional, default ", + }, + Object { + "type": "inlineCode", + "value": "[1]", + }, + Object { + "type": "text", + "value": ")", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Examples", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "lang": "javascript", + "type": "code", + "value": "var address = new Address6('2001::/32');", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "GeoJSONSource", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Create a GeoJSON data source instance given an options object", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This tests our support of nested parameters", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "options", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Object", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "?", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "optional options", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "options.data", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "(", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Object", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": " | ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": ")", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "A GeoJSON data object or URL to it. +The latter is preferable in case of large GeoJSON files.", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "options.maxzoom", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Maximum zoom to preserve detail at.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": " (optional, default ", + }, + Object { + "type": "inlineCode", + "value": "14", + }, + Object { + "type": "text", + "value": ")", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "options.buffer", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "?", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Tile buffer on each side.", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "options.tolerance", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "?", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Simplification tolerance (higher means simpler).", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "myfunc", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This tests our support for parameters with explicit types but with default +values specified in code.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "x", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "an argument", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": " (optional, default ", + }, + Object { + "type": "inlineCode", + "value": "123", + }, + Object { + "type": "text", + "value": ")", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "some", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "foo", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This tests our support of JSDoc param tags without type information, +or any type information we could infer from annotations.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "address", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "An IPv6 address string", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "rotate", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This tests our support for iterator rest inside an +iterator destructure (RestElement)", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "input", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Array", + }, + ], + "identifier": "4", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "input.0", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "any", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "head of iterator", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "input.xs", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "...", + }, + Object { + "type": "text", + "value": "any", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "body of iterator", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Array", + }, + ], + "identifier": "4", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "<", + }, + Object { + "type": "text", + "value": "any", + }, + Object { + "type": "text", + "value": ">", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "rotated such that the last element was the first", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object", + }, + Object { + "identifier": "3", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String", + }, + Object { + "identifier": "4", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array", + }, + ], + "type": "root", +} +`; + +exports[`outputs react-jsx.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 20, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 4, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "apples", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "apples", + "namespace": "apples", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "apples", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs react-jsx.input.js markdown 1`] = ` +" + +### Table of Contents + +* [apples][1] + +## apples + +apples + +[1]: #apples +" +`; + +exports[`outputs react-jsx.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "apples", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "apples", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", +} +`; + +exports[`outputs require-json.input.js JSON 1`] = `Array []`; + +exports[`outputs require-json.input.js markdown 1`] = ` +" + +### Table of Contents +" +`; + +exports[`outputs require-json.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + ], + "type": "root", +} +`; + +exports[`outputs require-json-no-extension.input.js JSON 1`] = `Array []`; + +exports[`outputs require-json-no-extension.input.js markdown 1`] = ` +" + +### Table of Contents +" +`; + +exports[`outputs require-json-no-extension.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + ], + "type": "root", +} +`; + +exports[`outputs sections.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 19, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 4, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function is first", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "first", + "namespace": "first", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "first", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 16, + "line": 12, + }, + "start": Object { + "column": 2, + "line": 12, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "forgot a memberof here... sure hope that doesn't crash anything!", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 5, + "line": 11, + }, + "start": Object { + "column": 2, + "line": 8, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "first", + "namespace": "first", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "first", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 2, + "name": "first", + "title": "method", + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 19, + }, + "start": Object { + "column": 0, + "line": 7, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 6, + "line": 6, + }, + "start": Object { + "column": 0, + "line": 6, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 13, + "line": 18, + }, + "start": Object { + "column": 2, + "line": 18, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "shares a name with a top level item referenced in the TOC... sure hope +that doesn't crash anything!", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 5, + "line": 17, + }, + "start": Object { + "column": 2, + "line": 14, + }, + }, + "memberof": "AClass", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "second", + "namespace": "AClass#second", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "AClass", + }, + Object { + "kind": "function", + "name": "second", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + "static": Array [], + }, + "name": "AClass", + "namespace": "AClass", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "AClass", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 20, + "line": 24, + }, + "start": Object { + "column": 0, + "line": 24, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This class has some members", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 23, + }, + "start": Object { + "column": 0, + "line": 21, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 41, + "line": 29, + }, + "start": Object { + "column": 0, + "line": 29, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "second::foo", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 28, + }, + "start": Object { + "column": 0, + "line": 26, + }, + }, + "memberof": "second", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "foo", + "namespace": "second#foo", + "params": Array [ + Object { + "lineNumber": 29, + "name": "pork", + "title": "param", + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "second", + }, + Object { + "kind": "function", + "name": "foo", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 48, + "line": 34, + }, + "start": Object { + "column": 0, + "line": 34, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "second::bar", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 33, + }, + "start": Object { + "column": 0, + "line": 31, + }, + }, + "memberof": "second", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "bar", + "namespace": "second#bar", + "params": Array [ + Object { + "lineNumber": 34, + "name": "beans", + "title": "param", + }, + Object { + "lineNumber": 34, + "name": "rice", + "title": "param", + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "second", + }, + Object { + "kind": "function", + "name": "bar", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + "static": Array [], + }, + "name": "second", + "namespace": "second", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "second", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 19, + "line": 39, + }, + "start": Object { + "column": 0, + "line": 39, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function is third", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 38, + }, + "start": Object { + "column": 0, + "line": 36, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "third", + "namespace": "third", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "third", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs sections.input.js markdown 1`] = ` +" + +### Table of Contents + +* [first][1] +* [first][2] +* [AClass][3] + * [second][4] +* [second][5] + * [foo][6] + * [Parameters][7] + * [bar][8] + * [Parameters][9] +* [third][10] + +## first + +This function is first + +## first + +forgot a memberof here... sure hope that doesn't crash anything! + +## AClass + +### second + +shares a name with a top level item referenced in the TOC... sure hope +that doesn't crash anything! + +## second + +This class has some members + +### foo + +second::foo + +#### Parameters + +* \`pork\` + +### bar + +second::bar + +#### Parameters + +* \`beans\` +* \`rice\` + +## third + +This function is third + +[1]: #first + +[2]: #first-1 + +[3]: #aclass + +[4]: #second + +[5]: #second-1 + +[6]: #foo + +[7]: #parameters + +[8]: #bar + +[9]: #parameters-1 + +[10]: #third +" +`; + +exports[`outputs sections.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "first", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function is first", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "first", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "forgot a memberof here... sure hope that doesn't crash anything!", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "AClass", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "second", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "shares a name with a top level item referenced in the TOC... sure hope +that doesn't crash anything!", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "second", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This class has some members", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "foo", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "second::foo", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 4, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "pork", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "bar", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "second::bar", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 4, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "beans", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "rice", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "third", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function is third", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", +} +`; + +exports[`outputs simple.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 8, + }, + "start": Object { + "column": 0, + "line": 5, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "simple.input", + "namespace": "simple.input", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "simple.input", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "numberone", + "lineNumber": 2, + "title": "returns", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs simple.input.js markdown 1`] = ` +" + +### Table of Contents + +* [simple.input][1] + +## simple.input + +This function returns the number one. + +Returns **[number][2]** numberone + +[1]: #simpleinput + +[2]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number +" +`; + +exports[`outputs simple.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "simple.input", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + ], + "type": "root", +} +`; + +exports[`outputs simple-callback.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 10, + }, + "start": Object { + "column": 0, + "line": 8, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This takes a number and a callback and calls the callback with the number +plus 3.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 7, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "takesSimpleCallback", + "namespace": "takesSimpleCallback", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "The number.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 4, + "name": "n", + "title": "param", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "The callback.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 5, + "name": "cb", + "title": "param", + "type": Object { + "name": "simpleCallback", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "takesSimpleCallback", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": "The number.", + "lineNumber": 4, + "name": "n", + "title": "param", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + Object { + "description": "The callback.", + "lineNumber": 5, + "name": "cb", + "title": "param", + "type": Object { + "name": "simpleCallback", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 10, + }, + "start": Object { + "column": 0, + "line": 8, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This callback takes an error and a number.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "typedef", + "loc": Object { + "end": Object { + "column": 3, + "line": 18, + }, + "start": Object { + "column": 0, + "line": 12, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "simpleCallback", + "namespace": "simpleCallback", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "The error.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 4, + "name": "err", + "title": "param", + "type": Object { + "expression": Object { + "name": "Error", + "type": "NameExpression", + }, + "prefix": true, + "type": "NullableType", + }, + }, + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "The number.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 5, + "name": "n", + "title": "param", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "typedef", + "name": "simpleCallback", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": "simpleCallback", + "lineNumber": 3, + "title": "callback", + }, + Object { + "description": "The error.", + "lineNumber": 4, + "name": "err", + "title": "param", + "type": Object { + "expression": Object { + "name": "Error", + "type": "NameExpression", + }, + "prefix": true, + "type": "NullableType", + }, + }, + Object { + "description": "The number.", + "lineNumber": 5, + "name": "n", + "title": "param", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "type": Object { + "name": "Function", + "type": "NameExpression", + }, + "yields": Array [], + }, +] +`; + +exports[`outputs simple-callback.input.js markdown 1`] = ` +" + +### Table of Contents + +* [takesSimpleCallback][1] + * [Parameters][2] +* [simpleCallback][3] + * [Parameters][4] + +## takesSimpleCallback + +This takes a number and a callback and calls the callback with the number +plus 3. + +### Parameters + +* \`n\` **[Number][5]** The number. +* \`cb\` **[simpleCallback][6]** The callback. + +## simpleCallback + +This callback takes an error and a number. + +Type: [Function][7] + +### Parameters + +* \`err\` **[Error][8]?** The error. +* \`n\` **[Number][5]** The number. + +[1]: #takessimplecallback + +[2]: #parameters + +[3]: #simplecallback + +[4]: #parameters-1 + +[5]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number + +[6]: #simplecallback + +[7]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function + +[8]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Error +" +`; + +exports[`outputs simple-callback.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "takesSimpleCallback", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This takes a number and a callback and calls the callback with the number +plus 3.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "n", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "The number.", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "cb", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "simpleCallback", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "The callback.", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "simpleCallback", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This callback takes an error and a number.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Type: ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Function", + }, + ], + "identifier": "3", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "err", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Error", + }, + ], + "identifier": "4", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "?", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "The error.", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "n", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "The number.", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "#simplecallback", + }, + Object { + "identifier": "3", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function", + }, + Object { + "identifier": "4", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Error", + }, + ], + "type": "root", +} +`; + +exports[`outputs simple-hashbang.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 10, + }, + "start": Object { + "column": 0, + "line": 7, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 6, + }, + "start": Object { + "column": 0, + "line": 3, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "simple-hashbang.input", + "namespace": "simple-hashbang.input", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "simple-hashbang.input", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "numberone", + "lineNumber": 2, + "title": "returns", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs simple-hashbang.input.js markdown 1`] = ` +" + +### Table of Contents + +* [simple-hashbang.input][1] + +## simple-hashbang.input + +This function returns the number one. + +Returns **[Number][2]** numberone + +[1]: #simple-hashbanginput + +[2]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number +" +`; + +exports[`outputs simple-hashbang.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "simple-hashbang.input", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number one.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "numberone", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + ], + "type": "root", +} +`; + +exports[`outputs simple-private.input.js JSON 1`] = `Array []`; + +exports[`outputs simple-private.input.js markdown 1`] = ` +" + +### Table of Contents +" +`; + +exports[`outputs simple-private.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + ], + "type": "root", +} +`; + +exports[`outputs simple-singlestar.input.js JSON 1`] = `Array []`; + +exports[`outputs simple-singlestar.input.js markdown 1`] = ` +" + +### Table of Contents +" +`; + +exports[`outputs simple-singlestar.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + ], + "type": "root", +} +`; + +exports[`outputs simple-triplestar.input.js JSON 1`] = `Array []`; + +exports[`outputs simple-triplestar.input.js markdown 1`] = ` +" + +### Table of Contents +" +`; + +exports[`outputs simple-triplestar.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + ], + "type": "root", +} +`; + +exports[`outputs simple-two.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 13, + }, + "start": Object { + "column": 0, + "line": 10, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number plus two.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [ + Object { + "description": "var result = returnTwo(4); +// result is 6", + }, + ], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 3, + "line": 9, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "returnTwo", + "namespace": "returnTwo", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "the number", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 3, + "name": "a", + "title": "param", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "returnTwo", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "numbertwo", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "title": "returns", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [ + Object { + "description": "the number", + "lineNumber": 3, + "name": "a", + "title": "param", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + Object { + "description": "numbertwo", + "lineNumber": 4, + "title": "returns", + "type": Object { + "name": "Number", + "type": "NameExpression", + }, + }, + Object { + "description": "var result = returnTwo(4); +// result is 6", + "lineNumber": 5, + "title": "example", + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs simple-two.input.js markdown 1`] = ` +" + +### Table of Contents + +* [returnTwo][1] + * [Parameters][2] + * [Examples][3] + +## returnTwo + +This function returns the number plus two. + +### Parameters + +* \`a\` **[Number][4]** the number + +### Examples + +\`\`\`javascript +var result = returnTwo(4); +// result is 6 +\`\`\` + +Returns **[Number][4]** numbertwo + +[1]: #returntwo + +[2]: #parameters + +[3]: #examples + +[4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number +" +`; + +exports[`outputs simple-two.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "returnTwo", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "This function returns the number plus two.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "a", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "the number", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Examples", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "lang": "javascript", + "type": "code", + "value": "var result = returnTwo(4); +// result is 6", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "numbertwo", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + ], + "type": "root", +} +`; + +exports[`outputs sort-order-alpha.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 19, + }, + "start": Object { + "column": 0, + "line": 10, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 6, + "line": 9, + }, + "start": Object { + "column": 0, + "line": 9, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 8, + "line": 18, + }, + "start": Object { + "column": 2, + "line": 18, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 8, + "line": 17, + }, + "start": Object { + "column": 2, + "line": 17, + }, + }, + "memberof": "C", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "A", + "namespace": "C#A", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "C", + }, + Object { + "kind": "function", + "name": "A", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 8, + "line": 16, + }, + "start": Object { + "column": 2, + "line": 16, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 8, + "line": 15, + }, + "start": Object { + "column": 2, + "line": 15, + }, + }, + "memberof": "C", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "a", + "namespace": "C#a", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "C", + }, + Object { + "kind": "function", + "name": "a", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 8, + "line": 14, + }, + "start": Object { + "column": 2, + "line": 14, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 8, + "line": 13, + }, + "start": Object { + "column": 2, + "line": 13, + }, + }, + "memberof": "C", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "B", + "namespace": "C#B", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "C", + }, + Object { + "kind": "function", + "name": "B", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 8, + "line": 12, + }, + "start": Object { + "column": 2, + "line": 12, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 8, + "line": 11, + }, + "start": Object { + "column": 2, + "line": 11, + }, + }, + "memberof": "C", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "b", + "namespace": "C#b", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "C", + }, + Object { + "kind": "function", + "name": "b", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + "static": Array [], + }, + "name": "C", + "namespace": "C", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "C", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 1, + "line": 31, + }, + "start": Object { + "column": 0, + "line": 22, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 6, + "line": 21, + }, + "start": Object { + "column": 0, + "line": 21, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 8, + "line": 30, + }, + "start": Object { + "column": 2, + "line": 30, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 8, + "line": 29, + }, + "start": Object { + "column": 2, + "line": 29, + }, + }, + "memberof": "D", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "A", + "namespace": "D#A", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "D", + }, + Object { + "kind": "function", + "name": "A", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 8, + "line": 28, + }, + "start": Object { + "column": 2, + "line": 28, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 8, + "line": 27, + }, + "start": Object { + "column": 2, + "line": 27, + }, + }, + "memberof": "D", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "a", + "namespace": "D#a", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "D", + }, + Object { + "kind": "function", + "name": "a", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 8, + "line": 26, + }, + "start": Object { + "column": 2, + "line": 26, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 8, + "line": 25, + }, + "start": Object { + "column": 2, + "line": 25, + }, + }, + "memberof": "D", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "B", + "namespace": "D#B", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "D", + }, + Object { + "kind": "function", + "name": "B", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 8, + "line": 24, + }, + "start": Object { + "column": 2, + "line": 24, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 8, + "line": 23, + }, + "start": Object { + "column": 2, + "line": 23, + }, + }, + "memberof": "D", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "b", + "namespace": "D#b", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "D", + }, + Object { + "kind": "function", + "name": "b", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + "static": Array [], + }, + "name": "D", + "namespace": "D", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "D", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 15, + "line": 7, + }, + "start": Object { + "column": 0, + "line": 7, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 6, + "line": 6, + }, + "start": Object { + "column": 0, + "line": 6, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "a", + "namespace": "a", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "a", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 15, + "line": 4, + }, + "start": Object { + "column": 0, + "line": 4, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 6, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 3, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "b", + "namespace": "b", + "params": Array [], + "path": Array [ + Object { + "kind": "function", + "name": "b", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs sort-order-alpha.input.js markdown 1`] = ` +" + +### Table of Contents + +* [C][1] + * [A][2] + * [a][3] + * [B][4] + * [b][5] +* [D][6] + * [A][7] + * [a][8] + * [B][9] + * [b][10] +* [a][11] +* [b][12] + +## C + +### A + +### a + +### B + +### b + +## D + +### A + +### a + +### B + +### b + +## a + +## b + +[1]: #c + +[2]: #a + +[3]: #a-1 + +[4]: #b + +[5]: #b-1 + +[6]: #d + +[7]: #a-2 + +[8]: #a-3 + +[9]: #b-2 + +[10]: #b-3 + +[11]: #a-4 + +[12]: #b-4 +" +`; + +exports[`outputs sort-order-alpha.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "C", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "A", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "a", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "B", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "b", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "D", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "A", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "a", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "B", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "b", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "a", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "b", + }, + ], + "depth": 2, + "type": "heading", + }, + ], + "type": "root", +} +`; + +exports[`outputs string-literal-key.input.js JSON 1`] = ` +Array [ + Object { + "alias": "MyContainerObject", + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 11, + }, + "start": Object { + "column": 0, + "line": 4, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "constant", + "loc": Object { + "end": Object { + "column": 3, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "MyContainerObject", + "namespace": "MyContainerObject", + "params": Array [], + "path": Array [ + Object { + "kind": "constant", + "name": "MyContainerObject", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 1, + "name": "MyContainerObject", + "title": "alias", + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 3, + "line": 10, + }, + "start": Object { + "column": 2, + "line": 8, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "The foo property", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [ + Object { + "commentLineNumber": 0, + "message": "@memberof reference to obj not found", + }, + ], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 5, + "line": 7, + }, + "start": Object { + "column": 2, + "line": 5, + }, + }, + "memberof": "obj", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "foo", + "namespace": ".foo", + "params": Array [], + "path": Array [ + Object { + "name": "foo", + "scope": "static", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "static", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs string-literal-key.input.js markdown 1`] = ` +" + +### Table of Contents + +* [MyContainerObject][1] +* [foo][2] + +## MyContainerObject + +## foo + +The foo property + +[1]: #mycontainerobject + +[2]: #foo +" +`; + +exports[`outputs string-literal-key.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "MyContainerObject", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "foo", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "The foo property", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", +} +`; + +exports[`outputs this-class.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 7, + }, + "start": Object { + "column": 0, + "line": 4, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "module", + "loc": Object { + "end": Object { + "column": 24, + "line": 1, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "bookshelf", + "namespace": "bookshelf", + "params": Array [], + "path": Array [ + Object { + "kind": "module", + "name": "bookshelf", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 0, + "name": "bookshelf", + "title": "module", + "type": null, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 7, + }, + "start": Object { + "column": 0, + "line": 4, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 13, + "line": 3, + }, + "start": Object { + "column": 0, + "line": 3, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 21, + "line": 6, + }, + "start": Object { + "column": 2, + "line": 6, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "The title of the book.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 31, + "line": 5, + }, + "start": Object { + "column": 2, + "line": 5, + }, + }, + "memberof": "Book", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "title", + "namespace": "Book#title", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "Book", + }, + Object { + "name": "title", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + "static": Array [], + }, + "name": "Book", + "namespace": "Book", + "params": Array [ + Object { + "lineNumber": 4, + "name": "title", + "title": "param", + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "Book", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 0, + "name": null, + "title": "class", + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 2, + "line": 13, + }, + "start": Object { + "column": 0, + "line": 10, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 13, + "line": 9, + }, + "start": Object { + "column": 0, + "line": 9, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 21, + "line": 12, + }, + "start": Object { + "column": 2, + "line": 12, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "The title of the bookshelf.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "loc": Object { + "end": Object { + "column": 36, + "line": 11, + }, + "start": Object { + "column": 2, + "line": 11, + }, + }, + "memberof": "BookShelf", + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "title", + "namespace": "BookShelf#title", + "params": Array [], + "path": Array [ + Object { + "kind": "class", + "name": "BookShelf", + }, + Object { + "name": "title", + "scope": "instance", + }, + ], + "properties": Array [], + "returns": Array [], + "scope": "instance", + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, + ], + "static": Array [], + }, + "name": "BookShelf", + "namespace": "BookShelf", + "params": Array [ + Object { + "lineNumber": 10, + "name": "title", + "title": "param", + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "BookShelf", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 0, + "name": null, + "title": "class", + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs this-class.input.js markdown 1`] = ` +" + +### Table of Contents + +* [bookshelf][1] +* [Book][2] + * [Parameters][3] + * [title][4] +* [BookShelf][5] + * [Parameters][6] + * [title][7] + +## bookshelf + +## Book + +### Parameters + +* \`title\` + +### title + +The title of the book. + +## BookShelf + +### Parameters + +* \`title\` + +### title + +The title of the bookshelf. + +[1]: #bookshelf + +[2]: #book + +[3]: #parameters + +[4]: #title + +[5]: #bookshelf-1 + +[6]: #parameters-1 + +[7]: #title-1 +" +`; + +exports[`outputs this-class.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "bookshelf", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Book", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "title", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "title", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "The title of the book.", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "BookShelf", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "title", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "title", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "The title of the bookshelf.", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", +} +`; + +exports[`outputs type_application.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 0, + "line": 6, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + }, + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Represents an IPv6 address", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "class", + "loc": Object { + "end": Object { + "column": 3, + "line": 5, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "Address6", + "namespace": "Address6", + "params": Array [ + Object { + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "An IPv6 address string", + }, + ], + "type": "paragraph", + }, + ], + "type": "root", + }, + "lineNumber": 3, + "name": "address", + "title": "param", + "type": Object { + "applications": Array [ + Object { + "name": "string", + "type": "NameExpression", + }, + ], + "expression": Object { + "name": "Array", + "type": "NameExpression", + }, + "type": "TypeApplication", + }, + }, + ], + "path": Array [ + Object { + "kind": "class", + "name": "Address6", + }, + ], + "properties": Array [], + "returns": Array [], + "sees": Array [], + "tags": Array [ + Object { + "description": null, + "lineNumber": 2, + "name": "Address6", + "title": "class", + "type": null, + }, + Object { + "description": "An IPv6 address string", + "lineNumber": 3, + "name": "address", + "title": "param", + "type": Object { + "applications": Array [ + Object { + "name": "string", + "type": "NameExpression", + }, + ], + "expression": Object { + "name": "Array", + "type": "NameExpression", + }, + "type": "TypeApplication", + }, + }, + ], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs type_application.input.js markdown 1`] = ` +" + +### Table of Contents + +* [Address6][1] + * [Parameters][2] + +## Address6 + +Represents an IPv6 address + +### Parameters + +* \`address\` **[Array][3]<[string][4]>** An IPv6 address string + +[1]: #address6 + +[2]: #parameters + +[3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array + +[4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String +" +`; + +exports[`outputs type_application.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Address6", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Represents an IPv6 address", + }, + ], + "type": "paragraph", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "address", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "Array", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": "<", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "string", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + Object { + "type": "text", + "value": ">", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "An IPv6 address string", + }, + ], + "type": "paragraph", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String", + }, + ], + "type": "root", +} +`; + +exports[`outputs var-function-param-return.input.js JSON 1`] = ` +Array [ + Object { + "augments": Array [], + "context": Object { + "loc": Object { + "end": Object { + "column": 40, + "line": 2, + }, + "start": Object { + "column": 0, + "line": 2, + }, + }, + }, + "description": "", + "errors": Array [], + "examples": Array [], + "implements": Array [], + "kind": "function", + "loc": Object { + "end": Object { + "column": 6, + "line": 1, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "members": Object { + "events": Array [], + "global": Array [], + "inner": Array [], + "instance": Array [], + "static": Array [], + }, + "name": "f", + "namespace": "f", + "params": Array [ + Object { + "lineNumber": 2, + "name": "x", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, + ], + "path": Array [ + Object { + "kind": "function", + "name": "f", + }, + ], + "properties": Array [], + "returns": Array [ + Object { + "title": "returns", + "type": Object { + "name": "boolean", + "type": "NameExpression", + }, + }, + ], + "sees": Array [], + "tags": Array [], + "throws": Array [], + "todos": Array [], + "yields": Array [], + }, +] +`; + +exports[`outputs var-function-param-return.input.js markdown 1`] = ` +" + +### Table of Contents + +* [f][1] + * [Parameters][2] + +## f + +### Parameters + +* \`x\` **[number][3]** + +Returns **[boolean][4]** + +[1]: #f + +[2]: #parameters + +[3]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number + +[4]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean +" +`; + +exports[`outputs var-function-param-return.input.js markdown AST 1`] = ` +Object { + "children": Array [ + Object { + "type": "html", + "value": "", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "f", + }, + ], + "depth": 2, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Parameters", + }, + ], + "depth": 3, + "type": "heading", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "inlineCode", + "value": "x", + }, + Object { + "type": "text", + "value": " ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "number", + }, + ], + "identifier": "1", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + ], + "type": "listItem", + }, + ], + "ordered": false, + "spread": false, + "type": "list", + }, + Object { + "children": Array [ + Object { + "type": "text", + "value": "Returns ", + }, + Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "boolean", + }, + ], + "identifier": "2", + "referenceType": "full", + "type": "linkReference", + }, + ], + "type": "strong", + }, + Object { + "type": "text", + "value": " ", + }, + ], + "type": "paragraph", + }, + Object { + "identifier": "1", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number", + }, + Object { + "identifier": "2", + "title": undefined, + "type": "definition", + "url": "https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean", + }, + ], + "type": "root", +} +`; diff --git a/__tests__/bin-readme.js b/__tests__/bin-readme.js index 052f4e393..e147ff579 100644 --- a/__tests__/bin-readme.js +++ b/__tests__/bin-readme.js @@ -1,8 +1,8 @@ -var path = require('path'), - os = require('os'), - exec = require('child_process').exec, - tmp = require('tmp'), - fs = require('fs-extra'); +const path = require('path'); +const os = require('os'); +const exec = require('child_process').exec; +const tmp = require('tmp'); +const fs = require('fs-extra'); function documentation(args, options, parseJSON) { return new Promise((resolve, reject) => { @@ -22,14 +22,37 @@ function documentation(args, options, parseJSON) { }); } -describe('readme command', function() { - var fixtures = path.join(__dirname, 'fixture/readme'); - var sourceFile = path.join(fixtures, 'index.js'); - var d; - var removeCallback; +describe('readme autodetection of different filenames', function () { + const fixtures = path.join(__dirname, 'fixture/readme'); + const sourceFile = path.join(fixtures, 'index.js'); + let d; + let removeCallback; beforeEach(() => { - var dirEntry = tmp.dirSync({ unsafeCleanup: true }); + const dirEntry = tmp.dirSync({ unsafeCleanup: true }); + d = dirEntry.name; + fs.copySync( + path.join(fixtures, 'README.input.md'), + path.join(d, 'readme.markdown') + ); + fs.copySync(path.join(fixtures, 'index.js'), path.join(d, 'index.js')); + }); + + test('updates readme.markdown', async function () { + await documentation(['readme index.js -s API'], { cwd: d }); + const outputPath = path.join(d, 'readme.markdown'); + expect(fs.readFileSync(outputPath, 'utf-8')).toMatchSnapshot(); + }); +}); + +describe('readme command', function () { + const fixtures = path.join(__dirname, 'fixture/readme'); + const sourceFile = path.join(fixtures, 'index.js'); + let d; + let removeCallback; + + beforeEach(() => { + const dirEntry = tmp.dirSync({ unsafeCleanup: true }); d = dirEntry.name; fs.copySync( path.join(fixtures, 'README.input.md'), @@ -40,27 +63,27 @@ describe('readme command', function() { // run tests after setting up temp dir - test('--diff-only: changes needed', async function() { - var before = fs.readFileSync(path.join(d, 'README.md'), 'utf-8'); + test('--diff-only: changes needed', async function () { + const before = fs.readFileSync(path.join(d, 'README.md'), 'utf-8'); try { await documentation(['readme index.js --diff-only -s API'], { cwd: d }); } catch (err) { - var after = fs.readFileSync(path.join(d, 'README.md'), 'utf-8'); + const after = fs.readFileSync(path.join(d, 'README.md'), 'utf-8'); expect(err).toBeTruthy(); expect(err.code).not.toBe(0); expect(after).toEqual(before); } }); - test('updates README.md', async function() { + test('updates README.md', async function () { await documentation(['readme index.js -s API'], { cwd: d }); - var outputPath = path.join(d, 'README.md'); + const outputPath = path.join(d, 'README.md'); expect(fs.readFileSync(outputPath, 'utf-8')).toMatchSnapshot(); }); - test('--readme-file', async function() { + test('--readme-file', async function () { fs.copySync( path.join(fixtures, 'README.input.md'), path.join(d, 'other.md') @@ -68,11 +91,11 @@ describe('readme command', function() { await documentation(['readme index.js -s API --readme-file other.md'], { cwd: d }); - var actual = fs.readFileSync(path.join(d, 'other.md'), 'utf8'); + const actual = fs.readFileSync(path.join(d, 'other.md'), 'utf8'); expect(actual).toMatchSnapshot(); }); - test('--diff-only: changes NOT needed', function() { + test('--diff-only: changes NOT needed', function () { fs.copySync( path.join(fixtures, 'README.output.md'), path.join(d, 'uptodate.md') @@ -85,7 +108,7 @@ describe('readme command', function() { }); }); - test('-s: not found', async function() { + test('-s: not found', async function () { fs.copySync( path.join(fixtures, 'README.output.md'), path.join(d, 'uptodate.md') @@ -100,7 +123,7 @@ describe('readme command', function() { } }); - test('requires -s option', async function() { + test('requires -s option', async function () { try { await documentation(['readme index.js'], { cwd: d }); } catch (err) { @@ -110,8 +133,8 @@ describe('readme command', function() { } }); - var badFixturePath = path.join(__dirname, 'fixture/bad/syntax.input'); - test('errors on invalid syntax', async function() { + const badFixturePath = path.join(__dirname, 'fixture/bad/syntax.input'); + test('errors on invalid syntax', async function () { try { await documentation( ['readme ' + badFixturePath + ' -s API --parseExtension input'], diff --git a/__tests__/bin-watch-serve.js b/__tests__/bin-watch-serve.js index 33c2e401f..57e071a32 100644 --- a/__tests__/bin-watch-serve.js +++ b/__tests__/bin-watch-serve.js @@ -1,9 +1,9 @@ -var path = require('path'); -var os = require('os'); -var get = require('./utils').get; -var spawn = require('child_process').spawn; -var fs = require('fs'); -var pEvent = require('p-event'); +const path = require('path'); +const os = require('os'); +const get = require('./utils').get; +const spawn = require('child_process').spawn; +const fs = require('fs'); +const pEvent = require('p-event'); function documentation(args, options) { if (!options) { @@ -14,13 +14,13 @@ function documentation(args, options) { } options.maxBuffer = 1024 * 1024; - args.unshift(path.join(__dirname, '..', 'bin', 'documentation.js')); + args.unshift(path.resolve(__dirname, '..', 'bin', 'documentation.js')); return spawn('node', args, options); } function normalize(result) { - result.forEach(function(item) { + result.forEach(function (item) { item.context.file = '[path]'; }); return result; @@ -28,22 +28,22 @@ function normalize(result) { const timeout = 20000; -test('harness', function() { - var docProcess = documentation(['serve', 'fixture/simple.input.js']); +test.skip('harness', function () { + const docProcess = documentation(['serve', 'fixture/simple.input.js']); expect(docProcess).toBeTruthy(); docProcess.kill(); }); -test( +test.skip( 'provides index.html', - function() { - var docProcess = documentation(['serve', 'fixture/simple.input.js']); - return pEvent(docProcess.stdout, 'data').then(function(data) { - var portNumber = data + function () { + const docProcess = documentation(['serve', 'fixture/simple.input.js']); + return pEvent(docProcess.stdout, 'data').then(function (data) { + const portNumber = data .toString() .match(/documentation.js serving on port (\d+)/); expect(portNumber).toBeTruthy(); - return get(`http://localhost:${portNumber[1]}/`).then(function(text) { + return get(`http://localhost:${portNumber[1]}/`).then(function (text) { expect(text.match(//)).toBeTruthy(); docProcess.kill(); }); @@ -52,20 +52,20 @@ test( timeout ); -test( +test.skip( 'accepts port argument', - function() { - var docProcess = documentation([ + function () { + const docProcess = documentation([ 'serve', 'fixture/simple.input.js', '--port=4004' ]); - return pEvent(docProcess.stdout, 'data').then(function(data) { - var portNumber = data + return pEvent(docProcess.stdout, 'data').then(function (data) { + const portNumber = data .toString() - .match(/documentation.js serving on port (\d+)/); + .match(/documentation.js serving on port 4004/); expect(portNumber).toBeTruthy(); - return get(`http://localhost:${portNumber[1]}/`).then(function(text) { + return get(`http://localhost:4004/`).then(function (text) { expect(text.match(//)).toBeTruthy(); docProcess.kill(); }); @@ -74,22 +74,22 @@ test( timeout ); -test( +test.skip( '--watch', - function(done) { - var tmpFile = path.join(os.tmpdir(), '/simple.js'); + function (done) { + const tmpFile = path.join(os.tmpdir(), '/simple.js'); fs.writeFileSync(tmpFile, '/** a function */function apples() {}'); - var docProcess = documentation(['serve', tmpFile, '--watch']); - pEvent(docProcess.stdout, 'data').then(function(data) { - var portNumber = data + const docProcess = documentation(['serve', tmpFile, '--watch']); + pEvent(docProcess.stdout, 'data').then(function (data) { + const portNumber = data .toString() .match(/documentation.js serving on port (\d+)/); expect(portNumber).toBeTruthy(); - return get(`http://localhost:${portNumber[1]}/`).then(function(text) { + return get(`http://localhost:${portNumber[1]}/`).then(function (text) { expect(text.match(/apples/)).toBeTruthy(); fs.writeFileSync(tmpFile, '/** a function */function bananas() {}'); function doGet() { - get(`http://localhost:${portNumber[1]}/`).then(function(text) { + get(`http://localhost:${portNumber[1]}/`).then(function (text) { if (text.match(/bananas/)) { docProcess.kill(); done(); @@ -105,25 +105,25 @@ test( timeout ); -test( +test.skip( '--watch', - function(done) { - var tmpDir = os.tmpdir(); - var a = path.join(tmpDir, '/simple.js'); - var b = path.join(tmpDir, '/required.js'); + function (done) { + const tmpDir = os.tmpdir(); + const a = path.join(tmpDir, '/simple.js'); + const b = path.join(tmpDir, '/required.js'); fs.writeFileSync(a, 'require("./required")'); fs.writeFileSync(b, '/** soup */function soup() {}'); - var docProcess = documentation(['serve', a, '--watch']); - docProcess.stdout.once('data', function(data) { - var portNumber = data + const docProcess = documentation(['serve', a, '--watch']); + docProcess.stdout.once('data', function (data) { + const portNumber = data .toString() .match(/documentation.js serving on port (\d+)/); expect(portNumber).toBeTruthy(); - get(`http://localhost:${portNumber[1]}/`).then(function(text) { + get(`http://localhost:${portNumber[1]}/`).then(function (text) { expect(text.match(/soup/)).toBeTruthy(); fs.writeFileSync(b, '/** nuts */function nuts() {}'); function doGet() { - get(`http://localhost:${portNumber[1]}/`).then(function(text) { + get(`http://localhost:${portNumber[1]}/`).then(function (text) { if (text.match(/nuts/)) { docProcess.kill(); done(); @@ -139,19 +139,19 @@ test( timeout ); -test( +test.skip( 'error page', - function() { - var tmpDir = os.tmpdir(); - var a = path.join(tmpDir, '/simple.js'); + function () { + const tmpDir = os.tmpdir(); + const a = path.join(tmpDir, '/simple.js'); fs.writeFileSync(a, '**'); - var docProcess = documentation(['serve', a, '--watch']); - return pEvent(docProcess.stdout, 'data').then(function(data) { - var portNumber = data + const docProcess = documentation(['serve', a, '--watch']); + return pEvent(docProcess.stdout, 'data').then(function (data) { + const portNumber = data .toString() .match(/documentation.js serving on port (\d+)/); expect(portNumber).toBeTruthy(); - return get(`http://localhost:${portNumber[1]}/`).then(function(text) { + return get(`http://localhost:${portNumber[1]}/`).then(function (text) { expect(text.match(/Unexpected token/)).toBeTruthy(); docProcess.kill(); }); diff --git a/__tests__/bin.js b/__tests__/bin.js index dcb43e8c6..399553875 100644 --- a/__tests__/bin.js +++ b/__tests__/bin.js @@ -1,10 +1,10 @@ /* global jasmine */ -var path = require('path'), - os = require('os'), - exec = require('child_process').exec, - tmp = require('tmp'), - fs = require('fs-extra'); +const path = require('path'); +const os = require('os'); +const exec = require('child_process').exec; +const tmp = require('tmp'); +const fs = require('fs-extra'); jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; @@ -21,7 +21,7 @@ function documentation(args, options, parseJSON) { args.unshift('node ' + path.join(__dirname, '..', 'bin', 'documentation.js')); return new Promise((resolve, reject) => { - exec(args.join(' '), options, function(err, stdout, stderr) { + exec(args.join(' '), options, function (err, stdout, stderr) { if (err) { err.stderr = stderr; return reject(err); @@ -40,39 +40,32 @@ function documentation(args, options, parseJSON) { } function normalize(result) { - result.forEach(function(item) { + result.forEach(function (item) { item.context.file = '[path]'; }); return result; } -test('documentation binary', async function() { +test.skip('documentation binary', async function () { const data = await documentation(['build fixture/simple.input.js'], {}); expect(data.length).toBe(1); }); -test('defaults to parsing package.json main', async function() { +test.skip('defaults to parsing package.json main', async function () { const data = await documentation(['build'], { cwd: path.join(__dirname, '..') }); expect(data.length).toBeTruthy(); }); -test('polyglot mode', async function() { - const data = await documentation([ - 'build fixture/polyglot/blend.cpp --polyglot' - ]); - expect(normalize(data)).toMatchSnapshot(); -}); - -test('accepts config file', async function() { +test.skip('accepts config file', async function () { const data = await documentation([ 'build fixture/sorting/input.js -c fixture/config.json' ]); expect(normalize(data)).toMatchSnapshot(); }); -test('accepts config file - reports failures', async function() { +test.skip('accepts config file - reports failures', async function () { try { await documentation( ['build fixture/sorting/input.js -c fixture/config-bad.yml'], @@ -84,7 +77,7 @@ test('accepts config file - reports failures', async function() { } }); -test('accepts config file - reports parse failures', async function() { +test.skip('accepts config file - reports parse failures', async function () { try { await documentation( ['build fixture/sorting/input.js -c fixture/config-malformed.json'], @@ -96,14 +89,14 @@ test('accepts config file - reports parse failures', async function() { } }); -test('--shallow option', async function() { +test.skip('--shallow option', async function () { const data = await documentation([ 'build --shallow fixture/internal.input.js' ]); expect(data.length).toBe(0); }); -test('external modules option', async function() { +test.skip('external modules option', async function () { const data = await documentation([ 'build fixture/external.input.js ' + '--external=external --external=external/node_modules' @@ -111,14 +104,14 @@ test('external modules option', async function() { expect(data.length).toBe(2); }); -test('when a file is specified both in a glob and explicitly, it is only documented once', async function() { +test.skip('when a file is specified both in a glob and explicitly, it is only documented once', async function () { const data = await documentation([ 'build fixture/simple.input.js fixture/simple.input.*' ]); expect(data.length).toBe(1); }); -test('extension option', async function() { +test.skip('extension option', async function () { const data = await documentation([ 'build fixture/extension/index.otherextension ' + '--requireExtension=otherextension --parseExtension=otherextension' @@ -126,23 +119,12 @@ test('extension option', async function() { expect(data.length).toBe(1); }); -/* - * This tests that parseExtension adds extensions to smartGlob's - * look through directories. - */ -test('polyglot + parseExtension + smartGlob', async function() { - const data = await documentation([ - 'build fixture/polyglot ' + '--polyglot --parseExtension=cpp' - ]); - expect(data.length).toBe(1); -}); - -test('extension option', function() { +test.skip('extension option', function () { return documentation(['build fixture/extension.jsx']); }); -test('invalid arguments', function() { - test('bad -f option', async function() { +describe('invalid arguments', function () { + test.skip('bad -f option', async function () { try { await documentation( ['build -f DOES-NOT-EXIST fixture/internal.input.js'], @@ -154,10 +136,10 @@ test('invalid arguments', function() { } }); - test('html with no destination', function() { - return documentation(['build -f html fixture/internal.input.js'], function( - err - ) { + test.skip('html with no destination', async function () { + try { + await documentation(['build -f html fixture/internal.input.js']); + } catch (err) { expect( err .toString() @@ -165,10 +147,10 @@ test('invalid arguments', function() { /The HTML output mode requires a destination directory set with -o/ ) ).toBeTruthy(); - }); + } }); - test('bad command', async function() { + test.skip('bad command', async function () { try { await documentation(['-f html fixture/internal.input.js'], {}, false); } catch (err) { @@ -177,14 +159,11 @@ test('invalid arguments', function() { }); }); -test('--config', async function() { - var dst = path.join(os.tmpdir(), (Date.now() + Math.random()).toString()); +const semver = /\bv?(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)(?:-[\da-z-]+(?:\.[\da-z-]+)*)?(?:\+[\da-z-]+(?:\.[\da-z-]+)*)?\b/gi; +test.skip('--config', async function () { + const dst = path.join(os.tmpdir(), (Date.now() + Math.random()).toString()); fs.mkdirSync(dst); - var outputIndex = path.join(dst, 'index.html'); - var expectedOutputPath = path.join( - __dirname, - 'fixture/html/nested.config-output.html' - ); + const outputIndex = path.join(dst, 'index.html'); const data = await documentation( [ 'build -c fixture/html/documentation.yml -f html fixture/html/nested.input.js -o ' + @@ -193,26 +172,28 @@ test('--config', async function() { {}, false ); - var output = fs.readFileSync(outputIndex, 'utf8'); + let output = fs.readFileSync(outputIndex, 'utf8'); + const version = require('../package.json').version; + output = output.replace(new RegExp(version.replace(/\./g, '\\.'), 'g'), ''); expect(output).toMatchSnapshot(); }); -test('--version', async function() { +test.skip('--version', async function () { const output = await documentation(['--version'], {}, false); expect(output).toBeTruthy(); }); -describe('lint command', function() { - test('generates lint output', async function() { +describe('lint command', function () { + test.skip('generates lint output', async function () { try { await documentation(['lint fixture/lint/lint.input.js'], {}, false); } catch (err) { - var data = err.stderr.toString().split('\n').slice(2).join('\n'); + const data = err.stderr.toString().split('\n').slice(2).join('\n'); expect(data).toMatchSnapshot(); } }); - test('generates no output on a good file', async function() { + test.skip('generates no output on a good file', async function () { const data = await documentation( ['lint fixture/simple.input.js'], {}, @@ -221,7 +202,7 @@ describe('lint command', function() { expect(data).toBe(''); }); - test('exposes syntax error on a bad file', async function() { + test.skip('exposes syntax error on a bad file', async function () { try { await documentation( ['lint fixture/bad/syntax.input', '--parseExtension input'], @@ -233,7 +214,7 @@ describe('lint command', function() { } }); - test('lint with no inputs', async function() { + test.skip('lint with no inputs', async function () { try { await documentation( ['lint'], @@ -246,9 +227,18 @@ describe('lint command', function() { expect(err.code > 0).toBeTruthy(); } }); + + test.skip('generates lint output with shallow', async function () { + const data = await documentation( + ['lint fixture/lint/lint.input.shallow.js --shallow'], + {}, + false + ); + expect(data).toBe(''); + }); }); -test('given no files', async function() { +test.skip('given no files', async function () { try { await documentation(['build']); } catch (err) { @@ -262,7 +252,7 @@ test('given no files', async function() { } }); -test('with an invalid command', async function() { +test.skip('with an invalid command', async function () { try { await documentation(['invalid'], {}, false); } catch (err) { @@ -270,7 +260,7 @@ test('with an invalid command', async function() { } }); -test('--access flag', async function() { +test.skip('--access flag', async function () { const data = await documentation( ['build --shallow fixture/internal.input.js -a public'], {}, @@ -279,7 +269,7 @@ test('--access flag', async function() { expect(data).toBe('[]'); }); -test('--private flag', async function() { +test.skip('--private flag', async function () { const data = await documentation( ['build fixture/internal.input.js --private'], {}, @@ -288,25 +278,25 @@ test('--private flag', async function() { expect(data.length > 2).toBeTruthy(); }); -test('--infer-private flag', async function() { +test.skip('--infer-private flag', async function () { const data = await documentation( ['build fixture/infer-private.input.js --infer-private ^_'], {}, false ); // This uses JSON.parse with a reviver used as a visitor. - JSON.parse(data, function(n, v) { + JSON.parse(data, function (n, v) { // Make sure we do not see any names that match `^_`. if (n === 'name') { expect(typeof v).toBe('string'); - expect(!/_$/.test(v)).toBeTruthy(); + expect(!/_$/.test.skip(v)).toBeTruthy(); } return v; }); }); -test('write to file', async function() { - var dst = path.join(os.tmpdir(), (Date.now() + Math.random()).toString()); +test.skip('write to file', async function () { + const dst = path.join(os.tmpdir(), (Date.now() + Math.random()).toString()); const data = await documentation( ['build --shallow fixture/internal.input.js -o ' + dst], @@ -317,8 +307,11 @@ test('write to file', async function() { expect(fs.existsSync(dst)).toBeTruthy(); }); -test('write to html', async function() { - var dstDir = path.join(os.tmpdir(), (Date.now() + Math.random()).toString()); +test.skip('write to html', async function () { + const dstDir = path.join( + os.tmpdir(), + (Date.now() + Math.random()).toString() + ); fs.mkdirSync(dstDir); const data = await documentation( @@ -330,8 +323,11 @@ test('write to html', async function() { expect(fs.existsSync(path.join(dstDir, 'index.html'))).toBeTruthy(); }); -test('write to html with custom theme', async function() { - var dstDir = path.join(os.tmpdir(), (Date.now() + Math.random()).toString()); +test.skip('write to html with custom theme', async function () { + const dstDir = path.join( + os.tmpdir(), + (Date.now() + Math.random()).toString() + ); fs.mkdirSync(dstDir); const data = await documentation( @@ -346,10 +342,13 @@ test('write to html with custom theme', async function() { expect(fs.readFileSync(path.join(dstDir, 'index.html'), 'utf8')).toBeTruthy(); }); -test('write to html, highlightAuto', function() { - var fixture = 'fixture/auto_lang_hljs/multilanguage.input.js', - config = 'fixture/auto_lang_hljs/config.yml', - dstDir = path.join(os.tmpdir(), (Date.now() + Math.random()).toString()); +test.skip('write to html, highlightAuto', function () { + const fixture = 'fixture/auto_lang_hljs/multilanguage.input.js'; + const config = 'fixture/auto_lang_hljs/config.yml'; + const dstDir = path.join( + os.tmpdir(), + (Date.now() + Math.random()).toString() + ); fs.mkdirSync(dstDir); @@ -358,7 +357,7 @@ test('write to html, highlightAuto', function() { {}, false ).then(() => { - var result = fs.readFileSync(path.join(dstDir, 'index.html'), 'utf8'); + const result = fs.readFileSync(path.join(dstDir, 'index.html'), 'utf8'); expect( result.indexOf('42') > 0 ).toBeTruthy(); @@ -371,7 +370,7 @@ test('write to html, highlightAuto', function() { }); }); -test('fatal error', async function() { +test.skip('fatal error', async function () { try { await documentation( ['build --shallow fixture/bad/syntax.input --parseExtension input'], @@ -383,7 +382,7 @@ test('fatal error', async function() { } }); -test('build --document-exported', async function() { +test.skip('build --document-exported', async function () { const data = await documentation( ['build fixture/document-exported.input.js --document-exported -f md'], {}, @@ -392,11 +391,11 @@ test('build --document-exported', async function() { expect(data).toMatchSnapshot(); }); -test('build large file without error (no deoptimized styling error)', function() { - var dstFile = +test.skip('build large file without error (no deoptimized styling error)', function () { + const dstFile = path.join(os.tmpdir(), (Date.now() + Math.random()).toString()) + '.js'; - var contents = ''; - for (var i = 0; i < 4e4; i++) { + let contents = ''; + for (let i = 0; i < 4e4; i++) { contents += '/* - */\n'; } fs.writeFileSync(dstFile, contents, 'utf8'); @@ -405,3 +404,15 @@ test('build large file without error (no deoptimized styling error)', function() fs.unlinkSync(dstFile); }); }); + +test.skip('should use browser resolve', async function () { + const data = await documentation(['build fixture/resolve/index.js']); + expect(normalize(data)).toMatchSnapshot(); +}); + +test.skip('should use node resolve', async function () { + const data = await documentation([ + 'build fixture/resolve/index.js --resolve node' + ]); + expect(normalize(data)).toMatchSnapshot(); +}); diff --git a/__tests__/fixture/auto_lang_hljs/multilanguage.input.js b/__tests__/fixture/auto_lang_hljs/multilanguage.input.js index 5d16141fd..a14bb7835 100644 --- a/__tests__/fixture/auto_lang_hljs/multilanguage.input.js +++ b/__tests__/fixture/auto_lang_hljs/multilanguage.input.js @@ -5,7 +5,7 @@ * var myFoo = new Foo('[data-foo]'); * myFoo.foo(42); * @example - *

    Data-Foo Element in the dom

    + *

    Data-Foo Element in the dom

    * @example * [data-foo] { * background-color: red; diff --git a/__tests__/fixture/class.input.js b/__tests__/fixture/class.input.js index df1268ee7..15fed4af0 100644 --- a/__tests__/fixture/class.input.js +++ b/__tests__/fixture/class.input.js @@ -1,6 +1,7 @@ /** * This is my class, a demo thing. * @class MyClass + * @implements {MyInterface} * @property {number} howMany how many things it contains */ function MyClass() { diff --git a/__tests__/fixture/es6-class-property.input.js b/__tests__/fixture/es6-class-property.input.js new file mode 100644 index 000000000..ee201c725 --- /dev/null +++ b/__tests__/fixture/es6-class-property.input.js @@ -0,0 +1,25 @@ +/** + * This is for issue 906. + */ +export class Issue906 { + /** + * This is a read-write property. + * @type {boolean} + */ + get readWriteProp() { + return this._rw; + } + + set readWriteProp(value) { + this._rw = value; + } + + /** + * This is a read-only property. + * @type {string} + * @readonly + */ + get readOnlyProp() { + return 'foo'; + } +} diff --git a/__tests__/fixture/es6-import.input.js b/__tests__/fixture/es6-import.input.js index 51fe5fca6..84b28789f 100644 --- a/__tests__/fixture/es6-import.input.js +++ b/__tests__/fixture/es6-import.input.js @@ -2,6 +2,11 @@ import hasEx6 from './es6-ext'; import multiply from './simple.input.js'; import * as foo from 'some-other-module'; +// Disable dynamic imports for now until +// https://github.com/thgreasi/babel-plugin-system-import-transformer +// can be updated to support babel 7. +// import('./simple.input.js').then(() => {}); + /** * This function returns the number one. * @returns {Number} numberone diff --git a/__tests__/fixture/es6.input.js b/__tests__/fixture/es6.input.js index ea5f1a6ed..05ac68689 100644 --- a/__tests__/fixture/es6.input.js +++ b/__tests__/fixture/es6.input.js @@ -2,16 +2,18 @@ * This function destructures with defaults. It should not * have any parameter descriptions. */ -function destructure( - { phoneNumbers = [], emailAddresses = [], ...params } = {} -) {} +function destructure({ + phoneNumbers = [], + emailAddresses = [], + ...params +} = {}) {} /** * Similar, but with an array * @example - * destructure([1, 2, 3]) + * destructure2([0, 1, 2, 3]) */ -function destructure([a, b, c]) {} +function destructure2([, a, b, c]) {} /** * This function returns the number one. @@ -24,6 +26,12 @@ var multiply = (a, b) => a * b; * This is a sink * @param {number} height the height of the thing * @param {number} width the width of the thing + * @example + * \@abc + * class A { + * \@bind + * say() {} + * } */ class Sink { constructor(height, width) { @@ -43,6 +51,13 @@ class Sink { return 1; } + /** + * This uses the class property transform + */ + classprop = (a: number): string => { + return 'hi'; + }; + /** * This method says hello */ @@ -157,3 +172,18 @@ export function isArrayEqualWith( export function paramWithMemberType(a: atype.property): boolean { return true; } + +/** babel parser plugins */ +class A { + // classPrivateProperties + #b = 1; + // classPrivateMethods + #c(a, b) { + // numericSeparator + let y = 100_000; + // nullishCoalescingOperator + let x = a ?? b; + // logicalAssignment + return (x &&= b?.b |> String.fromCharCode); + } +} diff --git a/__tests__/fixture/external.input.js b/__tests__/fixture/external.input.js index aa034223a..bfa5dbf15 100644 --- a/__tests__/fixture/external.input.js +++ b/__tests__/fixture/external.input.js @@ -1,8 +1,6 @@ require('external'); require('external2'); require('module-not-found'); -// non-js require -require('./polyglot/blend.cpp'); /** * I am in `external.input.js`. diff --git a/__tests__/fixture/flow-exported-opaque-type.input.js b/__tests__/fixture/flow-exported-opaque-type.input.js new file mode 100644 index 000000000..9bcf2e647 --- /dev/null +++ b/__tests__/fixture/flow-exported-opaque-type.input.js @@ -0,0 +1,4 @@ +// @flow + +/** MyOpaqueType Description Here */ +export opaque type MyOpaqueType: string = string \ No newline at end of file diff --git a/__tests__/fixture/flow-optional-chaining.input.js b/__tests__/fixture/flow-optional-chaining.input.js new file mode 100644 index 000000000..ce93158b2 --- /dev/null +++ b/__tests__/fixture/flow-optional-chaining.input.js @@ -0,0 +1,6 @@ +// @flow + +/** foo */ +const foo: { prop1?: { prop2?: string } } = { prop1: { prop2: 'value' } }; +/** value */ +const value = foo?.prop1?.prop2; diff --git a/__tests__/fixture/flow-unnamed-params.input.js b/__tests__/fixture/flow-unnamed-params.input.js index 113e2968e..f99d777ae 100644 --- a/__tests__/fixture/flow-unnamed-params.input.js +++ b/__tests__/fixture/flow-unnamed-params.input.js @@ -11,3 +11,6 @@ type T = (string[]) => { num: number }; /** T2 */ type T2 = (a: string[]) => { num: number }; + +/** T3 */ +type T3 = (a?: string) => { num: number }; diff --git a/__tests__/fixture/flow/comment-types.js b/__tests__/fixture/flow/comment-types.js new file mode 100644 index 000000000..fd04ae12b --- /dev/null +++ b/__tests__/fixture/flow/comment-types.js @@ -0,0 +1,17 @@ +// @flow + +/*:: +type Foo = { + foo: number, + bar: boolean, + baz: string +}; +*/ + +class MyClass { + /*:: prop: Foo; */ + + method(value /*: Foo */) /*: boolean */ { + return value.bar; + } +} diff --git a/__tests__/fixture/html/nested.config-output.html b/__tests__/fixture/html/nested.config-output.html deleted file mode 100644 index e08471d15..000000000 --- a/__tests__/fixture/html/nested.config-output.html +++ /dev/null @@ -1,1359 +0,0 @@ - - - - - documentation 4.0.0-rc.0 | Documentation - - - - - - -
    -
    -
    -
    -

    documentation

    -
    4.0.0-rc.0
    - -
    - -
    - -
    -
    -
    - - -
    - -

    - Highlighted section -

    - - -

    The public key is a base64 encoded string of a protobuf containing an RSA DER -buffer. This uses a node buffer to pass the base64 encoded public key protobuf -to the multihash for ID generation.

    -
    var PeerId = require('peer-id')
    -
    -PeerId.create({ bits: 1024 }, (err, id) => {
    -  console.log(JSON.stringify(id.toJSON(), null, 2)
    -})
    -
    {
    -  "id": "Qma9T5YraSnpRDZqRR4krcSJabThc8nwZuJV3LercPHufi",
    -  "privKey": "CAAS4AQwggJcAgEAAoGBAMBgbIqyOL26oV3nGPBYrdpbv..",
    -  "pubKey": "CAASogEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMBgbIqyOL26oV3nGPBYrdpbvzCY..."
    -}
    -
    - - -
    -
    - - - -
    - - -
    - -

    - Klass -

    - - -
    - - -

    Creates a new Klass

    - - -
    new Klass(foo: any)
    - - -

    - Extends - - Stream.Writable - -

    - - - - - - - - - - -
    Parameters
    -
    - -
    -
    - foo (any) - -
    - -
    - -
    - - - - - - - - - - - -
    Static Members
    -
    - -
    -
    -
    - - isClass(other, also) -
    -
    - -
    - -
    -
    -
    - - isWeird(other) -
    -
    - -
    - -
    -
    -
    - - isBuffer(buf, size) -
    -
    - -
    - -
    -
    -
    - - isArrayOfBuffers(buffers) -
    -
    - -
    - -
    -
    -
    - - MAGIC_NUMBER -
    -
    - -
    - -
    - - - - -
    Instance Members
    -
    - -
    -
    -
    - - getFoo() -
    -
    - -
    - -
    -
    -
    - - withOptions(options, otherOptions) -
    -
    - -
    - -
    - - - - -
    Events
    -
    - -
    -
    -
    - - event -
    -
    - -
    - -
    - - -
    - - - - -
    - - -
    - -

    - CustomError -

    - - -
    - - -

    a typedef with nested properties

    - - -
    CustomError(other: any, also: any)
    - - - - - - - - - - - -
    Parameters
    -
    - -
    -
    - other (any) - -
    - -
    - -
    -
    - also (any) - -
    - -
    - -
    - - - -
    Properties
    -
    - -
    - error (object) - : An error - - -
      - -
    • error.code string - -

      The error's code

      -
    • - -
    • error.description string - -

      The error's description

      -
    • - -
    - -
    - -
    - - - - - - - - - - - - - -
    - - - - -
    - - -
    - -

    - bar -

    - - -
    - - -

    Get an instance of Klass. Will make -a klass instance multiword, -like a klass

    - - -
    bar(): Klass
    - - - - - - - - - - - - - - - - -
    Returns
    - Klass: - that class - - - - - - - - - - - - - - -
    - - - - -
    - - -
    - -

    - bar -

    - - -
    - - -

    Rest property function

    - - -
    bar(toys: ...Number): undefined
    - - - - - - - - - - - -
    Parameters
    -
    - -
    -
    - toys (...Number) - -
    - -
    - -
    - - - - - - -
    Returns
    - undefined: - nothing - - - - - - - - - - - - - - -
    - - - - -
    - - -
    - -

    - bar -

    - - -
    - - -

    Get an instance of Klass. Will make -a klass instance multiword, -like a klass. This needs a number input.

    - - -
    bar(): undefined
    - - - - - - - - - - - - - - - - -
    Returns
    - undefined: - nothing - - - - - - - - - - - - - - -
    - - - - -
    - - -
    - -

    - Foo -

    - - -
    - - -

    This is Foo

    - - -
    new Foo()
    - - - - - - - - - - - - - - - - - - - - - - - -
    Instance Members
    -
    - -
    -
    -
    - - bar -
    -
    - -
    - -
    - - - - -
    - - - - -
    - - -
    - -

    - customStreams -

    - - -
    - - -

    I am the container of stream types

    - - -
    customStreams
    - - - - - - - - - - - - - - - - - - - - - -
    Static Members
    -
    - -
    -
    -
    - - new passthrough() -
    -
    - -
    - -
    - - - - - - -
    - - - -
    -
    -
    - - - - diff --git a/__tests__/fixture/html/nested.input.js b/__tests__/fixture/html/nested.input.js index 47c443f52..a428bc2fd 100644 --- a/__tests__/fixture/html/nested.input.js +++ b/__tests__/fixture/html/nested.input.js @@ -26,6 +26,15 @@ Klass.prototype.getFoo = function() { */ Klass.prototype.withOptions = function(options, otherOptions) {}; +/** + * A function with a deep options parameter + * @param {Object} options + * @param {string} options.foo + * @param {Object} options.bar + * @param {string} options.bar.buz + */ +Klass.prototype.withDeepOptions = function(options) {}; + /** * @typedef CustomError * @name CustomError @@ -103,7 +112,7 @@ function bar() { * Rest property function * @returns {undefined} nothing */ -function bar(...toys: Number) { +function bar2(...toys: Number) { return undefined; } @@ -114,7 +123,7 @@ function bar(...toys: Number) { * * @returns {undefined} nothing */ -function bar() { +function bar3() { return undefined; } @@ -149,3 +158,11 @@ var customStreams = {}; customStreams.passthrough = function() { this.custom = true; }; + +/** + * | Col 1 | Col 2 | Col 3 | + * |-------|-------|-------| + * | Dat 1 | Dat 2 | Dat 3 | + * | Dat 4 | Dat 5 | Dat 6 | + */ + var tableObj = {}; \ No newline at end of file diff --git a/__tests__/fixture/import.meta.input.js b/__tests__/fixture/import.meta.input.js new file mode 100644 index 000000000..a2fd80604 --- /dev/null +++ b/__tests__/fixture/import.meta.input.js @@ -0,0 +1,4 @@ +import x from "y"; + + +console.log(import.meta.url); \ No newline at end of file diff --git a/__tests__/fixture/interface.input.js b/__tests__/fixture/interface.input.js index 9bc49bbba..092060378 100644 --- a/__tests__/fixture/interface.input.js +++ b/__tests__/fixture/interface.input.js @@ -2,6 +2,8 @@ * This is my interface. */ interface Foo extends Bar, Baz { + /** This is prop 1 */ prop1: number, + /** This is prop 2 */ prop2: string } diff --git a/__tests__/fixture/lends.input.js b/__tests__/fixture/lends.input.js index 3e4f6b7f9..8561b2301 100644 --- a/__tests__/fixture/lends.input.js +++ b/__tests__/fixture/lends.input.js @@ -6,6 +6,8 @@ export default TheClass( /** @lends TheClass.prototype */ { + /** My field */ + 'my-field': true, /** * My neat function * @param {string} word your word diff --git a/__tests__/fixture/lint/lint.input.dependency.js b/__tests__/fixture/lint/lint.input.dependency.js new file mode 100644 index 000000000..b4ff5d4d8 --- /dev/null +++ b/__tests__/fixture/lint/lint.input.dependency.js @@ -0,0 +1,19 @@ +/** + * @param {String} foo bar + * @returns {object} bad object return type + * @type {Array} bad object type + * @memberof notfound + */ + +/** + * @param {String} baz bar + * @property {String} bad property + * @private + */ + +/** + * @param {number} c explicit but not found + */ +function add(a, b) {} + +module.exports.add = add; diff --git a/__tests__/fixture/lint/lint.input.shallow.js b/__tests__/fixture/lint/lint.input.shallow.js new file mode 100644 index 000000000..aa404f37e --- /dev/null +++ b/__tests__/fixture/lint/lint.input.shallow.js @@ -0,0 +1,7 @@ +var dep = require('./lint.input.dependency'); + +/** + * @param {string} a + * @param {boolean} b + */ +function add(a, b) {} diff --git a/__tests__/fixture/meta.input.js b/__tests__/fixture/meta.input.js index 6a390e06c..e5b61603d 100644 --- a/__tests__/fixture/meta.input.js +++ b/__tests__/fixture/meta.input.js @@ -2,8 +2,6 @@ * This description is ignored because the method has a tagged description. * @returns {number} numberone * @description This function returns the number one. - * @see {@link http://github.com/|github} - * @see TestCase * @see [markdown link](http://foo.com/) * @version 1.0.0 * @since 2.0.0 diff --git a/__tests__/fixture/nest_events.input.js b/__tests__/fixture/nest_events.input.js new file mode 100644 index 000000000..ce842eb14 --- /dev/null +++ b/__tests__/fixture/nest_events.input.js @@ -0,0 +1,13 @@ +/** + * Klass description + * + * @class Klass + */ + + + /** + * Klass event + * @event bar + * @memberof Klass + */ +bar(); \ No newline at end of file diff --git a/__tests__/fixture/polyglot/blend.cpp b/__tests__/fixture/polyglot/blend.cpp deleted file mode 100644 index a285feb9c..000000000 --- a/__tests__/fixture/polyglot/blend.cpp +++ /dev/null @@ -1,675 +0,0 @@ -#include -#include -#include - -#include "zlib.h" - -#if defined(HAVE_PNG) -#include -#endif - -#if defined(HAVE_JPEG) -#define XMD_H -#include -#undef XMD_H -#endif - -#if defined(HAVE_WEBP) -#include -#endif - -#include "mapnik_palette.hpp" -#include "blend.hpp" -#include "tint.hpp" - -#include -#include -#include -#include - -using namespace v8; -using namespace node; - -namespace node_mapnik { - -/** - * This method moves a hex to a color - * @name hexToUInt32Color - * @param {string} hex - * @returns {number} color - */ -static bool hexToUInt32Color(char *hex, unsigned int & value) { - if (!hex) return false; - int len_original = strlen(hex); - // Return is the length of the string is less then six - // otherwise the line after this could go to some other - // pointer in memory, resulting in strange behaviours. - if (len_original < 6) return false; - if (hex[0] == '#') hex++; - int len = strlen(hex); - if (len != 6 && len != 8) return false; - - unsigned int color = 0; - std::stringstream ss; - ss << std::hex << hex; - ss >> color; - - if (len == 8) { - // Circular shift to get from RGBA to ARGB. - value = (color << 24) | ((color & 0xFF00) << 8) | ((color & 0xFF0000) >> 8) | ((color & 0xFF000000) >> 24); - return true; - } else { - value = 0xFF000000 | ((color & 0xFF) << 16) | (color & 0xFF00) | ((color & 0xFF0000) >> 16); - return true; - } -} - -NAN_METHOD(rgb2hsl) { - NanScope(); - if (args.Length() != 3) { - NanThrowTypeError("Please pass r,g,b integer values as three arguments"); - NanReturnUndefined(); - } - if (!args[0]->IsNumber() || !args[1]->IsNumber() || !args[2]->IsNumber()) { - NanThrowTypeError("Please pass r,g,b integer values as three arguments"); - NanReturnUndefined(); - } - unsigned r,g,b; - r = args[0]->IntegerValue(); - g = args[1]->IntegerValue(); - b = args[2]->IntegerValue(); - Local hsl = NanNew(3); - double h,s,l; - rgb_to_hsl(r,g,b,h,s,l); - hsl->Set(0,NanNew(h)); - hsl->Set(1,NanNew(s)); - hsl->Set(2,NanNew(l)); - NanReturnValue(hsl); -} - -NAN_METHOD(hsl2rgb) { - NanScope(); - if (args.Length() != 3) { - NanThrowTypeError("Please pass hsl fractional values as three arguments"); - NanReturnUndefined(); - } - if (!args[0]->IsNumber() || !args[1]->IsNumber() || !args[2]->IsNumber()) { - NanThrowTypeError("Please pass hsl fractional values as three arguments"); - NanReturnUndefined(); - } - double h,s,l; - h = args[0]->NumberValue(); - s = args[1]->NumberValue(); - l = args[2]->NumberValue(); - Local rgb = NanNew(3); - unsigned r,g,b; - hsl_to_rgb(h,s,l,r,g,b); - rgb->Set(0,NanNew(r)); - rgb->Set(1,NanNew(g)); - rgb->Set(2,NanNew(b)); - NanReturnValue(rgb); -} - -static void parseTintOps(Local const& tint, Tinter & tinter, std::string & msg) { - NanScope(); - Local hue = tint->Get(NanNew("h")); - if (!hue.IsEmpty() && hue->IsArray()) { - Local val_array = Local::Cast(hue); - if (val_array->Length() != 2) { - msg = "h array must be a pair of values"; - } - tinter.h0 = val_array->Get(0)->NumberValue(); - tinter.h1 = val_array->Get(1)->NumberValue(); - } - Local sat = tint->Get(NanNew("s")); - if (!sat.IsEmpty() && sat->IsArray()) { - Local val_array = Local::Cast(sat); - if (val_array->Length() != 2) { - msg = "s array must be a pair of values"; - } - tinter.s0 = val_array->Get(0)->NumberValue(); - tinter.s1 = val_array->Get(1)->NumberValue(); - } - Local light = tint->Get(NanNew("l")); - if (!light.IsEmpty() && light->IsArray()) { - Local val_array = Local::Cast(light); - if (val_array->Length() != 2) { - msg = "l array must be a pair of values"; - } - tinter.l0 = val_array->Get(0)->NumberValue(); - tinter.l1 = val_array->Get(1)->NumberValue(); - } - Local alpha = tint->Get(NanNew("a")); - if (!alpha.IsEmpty() && alpha->IsArray()) { - Local val_array = Local::Cast(alpha); - if (val_array->Length() != 2) { - msg = "a array must be a pair of values"; - } - tinter.a0 = val_array->Get(0)->NumberValue(); - tinter.a1 = val_array->Get(1)->NumberValue(); - } -} - -static inline void Blend_CompositePixel(unsigned int& target, unsigned int const& source) { - if (source <= 0x00FFFFFF) { - // Top pixel is fully transparent. - // - } else if (source >= 0xFF000000 || target <= 0x00FFFFFF) { - // Top pixel is fully opaque or bottom pixel is fully transparent. - target = source; - } else { - // Both pixels have transparency. - // From http://trac.mapnik.org/browser/trunk/include/mapnik/graphics.hpp#L337 - long a1 = (source >> 24) & 0xff; - long r1 = source & 0xff; - long g1 = (source >> 8) & 0xff; - long b1 = (source >> 16) & 0xff; - - long a0 = (target >> 24) & 0xff; - long r0 = (target & 0xff) * a0; - long g0 = ((target >> 8) & 0xff) * a0; - long b0 = ((target >> 16) & 0xff) * a0; - - a0 = ((a1 + a0) << 8) - a0 * a1; - r0 = ((((r1 << 8) - r0) * a1 + (r0 << 8)) / a0); - g0 = ((((g1 << 8) - g0) * a1 + (g0 << 8)) / a0); - b0 = ((((b1 << 8) - b0) * a1 + (b0 << 8)) / a0); - a0 = a0 >> 8; - target = (a0 << 24) | (b0 << 16) | (g0 << 8) | (r0); - } -} - -static inline void TintPixel(unsigned & r, - unsigned & g, - unsigned & b, - Tinter const& tint) { - double h; - double s; - double l; - rgb_to_hsl(r,g,b,h,s,l); - double h2 = tint.h0 + (h * (tint.h1 - tint.h0)); - double s2 = tint.s0 + (s * (tint.s1 - tint.s0)); - double l2 = tint.l0 + (l * (tint.l1 - tint.l0)); - if (h2 > 1) h2 = 1; - if (h2 < 0) h2 = 0; - if (s2 > 1) s2 = 1; - if (s2 < 0) s2 = 0; - if (l2 > 1) l2 = 1; - if (l2 < 0) l2 = 0; - hsl_to_rgb(h2,s2,l2,r,g,b); -} - - -static void Blend_Composite(unsigned int *target, BlendBaton *baton, BImage *image) { - const unsigned int *source = image->im_ptr->data(); - - int sourceX = std::max(0, -image->x); - int sourceY = std::max(0, -image->y); - int sourcePos = sourceY * image->width + sourceX; - - int width = image->width - sourceX - std::max(0, image->x + image->width - baton->width); - int height = image->height - sourceY - std::max(0, image->y + image->height - baton->height); - - int targetX = std::max(0, image->x); - int targetY = std::max(0, image->y); - int targetPos = targetY * baton->width + targetX; - bool tinting = !image->tint.is_identity(); - bool set_alpha = !image->tint.is_alpha_identity(); - if (tinting || set_alpha) { - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - unsigned int const& source_pixel = source[sourcePos + x]; - unsigned a = (source_pixel >> 24) & 0xff; - if (set_alpha) { - double a2 = image->tint.a0 + (a/255.0 * (image->tint.a1 - image->tint.a0)); - if (a2 < 0) a2 = 0; - a = static_cast(std::floor((a2 * 255.0)+.5)); - if (a > 255) a = 255; - } - unsigned r = source_pixel & 0xff; - unsigned g = (source_pixel >> 8 ) & 0xff; - unsigned b = (source_pixel >> 16) & 0xff; - if (a > 1 && tinting) { - TintPixel(r,g,b,image->tint); - } - unsigned int new_pixel = (a << 24) | (b << 16) | (g << 8) | (r); - Blend_CompositePixel(target[targetPos + x], new_pixel); - } - sourcePos += image->width; - targetPos += baton->width; - } - } else { - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - Blend_CompositePixel(target[targetPos + x], source[sourcePos + x]); - } - sourcePos += image->width; - targetPos += baton->width; - } - } -} - -static void Blend_Encode(mapnik::image_rgba8 const& image, BlendBaton* baton, bool alpha) { - try { - if (baton->format == BLEND_FORMAT_JPEG) { -#if defined(HAVE_JPEG) - if (baton->quality == 0) baton->quality = 85; - mapnik::save_as_jpeg(baton->stream, baton->quality, image); -#else - baton->message = "Mapnik not built with jpeg support"; -#endif - } else if (baton->format == BLEND_FORMAT_WEBP) { -#if defined(HAVE_WEBP) - if (baton->quality == 0) baton->quality = 80; - WebPConfig config; - // Default values set here will be lossless=0 and quality=75 (as least as of webp v0.3.1) - if (!WebPConfigInit(&config)) { - /* LCOV_EXCL_START */ - baton->message = "WebPConfigInit failed: version mismatch"; - /* LCOV_EXCL_END */ - } else { - // see for more details: https://github.com/mapnik/mapnik/wiki/Image-IO#webp-output-options - config.quality = baton->quality; - if (baton->compression > 0) { - config.method = baton->compression; - } - mapnik::save_as_webp(baton->stream,image,config,alpha); - } -#else - baton->message = "Mapnik not built with webp support"; -#endif - } else { - // Save as PNG. -#if defined(HAVE_PNG) - mapnik::png_options opts; - opts.compression = baton->compression; - if (baton->encoder == BLEND_ENCODER_MINIZ) opts.use_miniz = true; - if (baton->palette && baton->palette->valid()) { - mapnik::save_as_png8_pal(baton->stream, image, *baton->palette, opts); - } else if (baton->quality > 0) { - opts.colors = baton->quality; - // Paletted PNG. - if (alpha && baton->mode == BLEND_MODE_HEXTREE) { - mapnik::save_as_png8_hex(baton->stream, image, opts); - } else { - mapnik::save_as_png8_oct(baton->stream, image, opts); - } - } else { - mapnik::save_as_png(baton->stream, image, opts); - } -#else - baton->message = "Mapnik not built with png support"; -#endif - } - } catch (const std::exception& ex) { - baton->message = ex.what(); - } -} - -void Work_Blend(uv_work_t* req) { - BlendBaton* baton = static_cast(req->data); - - int total = baton->images.size(); - bool alpha = true; - int size = 0; - - // Iterate from the last to first image because we potentially don't have - // to decode all images if there's an opaque one. - Images::reverse_iterator rit = baton->images.rbegin(); - Images::reverse_iterator rend = baton->images.rend(); - for (int index = total - 1; rit != rend; rit++, index--) { - // If an image that is higher than the current is opaque, stop alltogether. - if (!alpha) break; - - BImage *image = &**rit; - std::unique_ptr image_reader; - try { - image_reader = std::unique_ptr(mapnik::get_image_reader(image->data, image->dataLength)); - } catch (std::exception const& ex) { - baton->message = ex.what(); - return; - } - - if (!image_reader || !image_reader.get()) { - // Not quite sure anymore how the pointer would not be returned - // from the reader and can't find a way to make this fail. - // So removing from coverage - /* LCOV_EXCL_START */ - baton->message = "Unknown image format"; - return; - /* LCOV_EXCL_END */ - } - - unsigned layer_width = image_reader->width(); - unsigned layer_height = image_reader->height(); - // Error out on invalid images. - if (layer_width == 0 || layer_height == 0) { - // No idea how to create a zero height or width image - // so removing from coverage, because I am fairly certain - // it is not possible in almost every image format. - /* LCOV_EXCL_START */ - baton->message = "zero width/height image encountered"; - return; - /* LCOV_EXCL_END */ - } - - int visibleWidth = (int)layer_width + image->x; - int visibleHeight = (int)layer_height + image->y; - // The first image that is in the viewport sets the width/height, if not user supplied. - if (baton->width <= 0) baton->width = std::max(0, visibleWidth); - if (baton->height <= 0) baton->height = std::max(0, visibleHeight); - - // Skip images that are outside of the viewport. - if (visibleWidth <= 0 || visibleHeight <= 0 || image->x >= baton->width || image->y >= baton->height) { - // Remove this layer from the list of layers we consider blending. - continue; - } - - bool layer_has_alpha = image_reader->has_alpha(); - - // Short-circuit when we're not reencoding. - if (size == 0 && !layer_has_alpha && !baton->reencode && - image->x == 0 && image->y == 0 && - (int)layer_width == baton->width && (int)layer_height == baton->height) - { - baton->stream.write((char *)image->data, image->dataLength); - return; - } - - // allocate image for decoded pixels - std::unique_ptr im_ptr(new mapnik::image_rgba8(layer_width,layer_height)); - // actually decode pixels now - try { - image_reader->read(0,0,*im_ptr); - } catch (std::exception const&) { - baton->message = "Could not decode image"; - return; - } - - bool coversWidth = image->x <= 0 && visibleWidth >= baton->width; - bool coversHeight = image->y <= 0 && visibleHeight >= baton->height; - if (!layer_has_alpha && coversWidth && coversHeight && image->tint.is_alpha_identity()) { - // Skip decoding more layers. - alpha = false; - } - - // Convenience aliases. - image->width = layer_width; - image->height = layer_height; - image->im_ptr = std::move(im_ptr); - size++; - - } - - // Now blend images. - int pixels = baton->width * baton->height; - if (pixels <= 0) { - std::ostringstream msg; - msg << "Image dimensions " << baton->width << "x" << baton->height << " are invalid"; - baton->message = msg.str(); - return; - } - - mapnik::image_rgba8 target(baton->width, baton->height); - // When we don't actually have transparent pixels, we don't need to set the matte. - if (alpha) { - target.set(baton->matte); - } - for (auto image_ptr : baton->images) - { - if (image_ptr && image_ptr->im_ptr.get()) - { - Blend_Composite(target.data(), baton, &*image_ptr); - } - } - Blend_Encode(target, baton, alpha); -} - -void Work_AfterBlend(uv_work_t* req) { - NanScope(); - BlendBaton* baton = static_cast(req->data); - - if (!baton->message.length()) { - std::string result = baton->stream.str(); - Local argv[] = { - NanNull(), - NanNewBufferHandle((char *)result.data(), result.length()), - }; - NanMakeCallback(NanGetCurrentContext()->Global(), NanNew(baton->callback), 2, argv); - } else { - Local argv[] = { - NanError(baton->message.c_str()) - }; - NanMakeCallback(NanGetCurrentContext()->Global(), NanNew(baton->callback), 1, argv); - } - delete baton; -} - -NAN_METHOD(Blend) { - NanScope(); - std::unique_ptr baton(new BlendBaton()); - - Local options; - if (args.Length() == 0 || !args[0]->IsArray()) { - NanThrowTypeError("First argument must be an array of Buffers."); - NanReturnUndefined(); - } else if (args.Length() == 1) { - NanThrowTypeError("Second argument must be a function"); - NanReturnUndefined(); - } else if (args.Length() == 2) { - // No options provided. - if (!args[1]->IsFunction()) { - NanThrowTypeError("Second argument must be a function."); - NanReturnUndefined(); - } - NanAssignPersistent(baton->callback,args[1].As()); - } else if (args.Length() >= 3) { - if (!args[1]->IsObject()) { - NanThrowTypeError("Second argument must be a an options object."); - NanReturnUndefined(); - } - options = Local::Cast(args[1]); - - if (!args[2]->IsFunction()) { - NanThrowTypeError("Third argument must be a function."); - NanReturnUndefined(); - } - NanAssignPersistent(baton->callback,args[2].As()); - } - - // Validate options - if (!options.IsEmpty()) { - baton->quality = options->Get(NanNew("quality"))->Int32Value(); - - Local format_val = options->Get(NanNew("format")); - if (!format_val.IsEmpty() && format_val->IsString()) { - if (strcmp(*String::Utf8Value(format_val), "jpeg") == 0 || - strcmp(*String::Utf8Value(format_val), "jpg") == 0) { - baton->format = BLEND_FORMAT_JPEG; - if (baton->quality == 0) baton->quality = 85; // 85 is same default as mapnik core jpeg - else if (baton->quality < 0 || baton->quality > 100) { - NanThrowTypeError("JPEG quality is range 0-100."); - NanReturnUndefined(); - } - } else if (strcmp(*String::Utf8Value(format_val), "png") == 0) { - if (baton->quality == 1 || baton->quality > 256) { - NanThrowTypeError("PNG images must be quantized between 2 and 256 colors."); - NanReturnUndefined(); - } - } else if (strcmp(*String::Utf8Value(format_val), "webp") == 0) { - baton->format = BLEND_FORMAT_WEBP; - if (baton->quality == 0) baton->quality = 80; - else if (baton->quality < 0 || baton->quality > 100) { - NanThrowTypeError("WebP quality is range 0-100."); - NanReturnUndefined(); - } - } else { - NanThrowTypeError("Invalid output format."); - NanReturnUndefined(); - } - } - - baton->reencode = options->Get(NanNew("reencode"))->BooleanValue(); - baton->width = options->Get(NanNew("width"))->Int32Value(); - baton->height = options->Get(NanNew("height"))->Int32Value(); - - Local matte_val = options->Get(NanNew("matte")); - if (!matte_val.IsEmpty() && matte_val->IsString()) { - if (!hexToUInt32Color(*String::Utf8Value(matte_val->ToString()), baton->matte)) - { - NanThrowTypeError("Invalid batte provided."); - NanReturnUndefined(); - } - - // Make sure we're reencoding in the case of single alpha PNGs - if (baton->matte && !baton->reencode) { - baton->reencode = true; - } - } - - Local palette_val = options->Get(NanNew("palette")); - if (!palette_val.IsEmpty() && palette_val->IsObject()) { - baton->palette = node::ObjectWrap::Unwrap(palette_val->ToObject())->palette(); - } - - Local mode_val = options->Get(NanNew("mode")); - if (!mode_val.IsEmpty() && mode_val->IsString()) { - if (strcmp(*String::Utf8Value(mode_val), "octree") == 0 || - strcmp(*String::Utf8Value(mode_val), "o") == 0) { - baton->mode = BLEND_MODE_OCTREE; - } - else if (strcmp(*String::Utf8Value(mode_val), "hextree") == 0 || - strcmp(*String::Utf8Value(mode_val), "h") == 0) { - baton->mode = BLEND_MODE_HEXTREE; - } - } - - Local encoder_val = options->Get(NanNew("encoder")); - if (!encoder_val.IsEmpty() && encoder_val->IsString()) { - if (strcmp(*String::Utf8Value(encoder_val), "miniz") == 0) { - baton->encoder = BLEND_ENCODER_MINIZ; - } - // default is libpng - } - - if (options->Has(NanNew("compression"))) { - Local compression_val = options->Get(NanNew("compression")); - if (!compression_val.IsEmpty() && compression_val->IsNumber()) - { - baton->compression = compression_val->Int32Value(); - } - else - { - NanThrowTypeError("Compression option must be a number"); - NanReturnUndefined(); - } - } - - int min_compression = Z_NO_COMPRESSION; - int max_compression = Z_BEST_COMPRESSION; - if (baton->format == BLEND_FORMAT_PNG) { - if (baton->compression < 0) baton->compression = Z_DEFAULT_COMPRESSION; - if (baton->encoder == BLEND_ENCODER_MINIZ) max_compression = 10; // MZ_UBER_COMPRESSION - } else if (baton->format == BLEND_FORMAT_WEBP) { - min_compression = 0, max_compression = 6; - if (baton->compression < 0) baton->compression = -1; - } - - if (baton->compression > max_compression) { - std::ostringstream msg; - msg << "Compression level must be between " - << min_compression << " and " << max_compression; - NanThrowTypeError(msg.str().c_str()); - NanReturnUndefined(); - } - } - - Local js_images = Local::Cast(args[0]); - uint32_t length = js_images->Length(); - if (length < 1 && !baton->reencode) { - NanThrowTypeError("First argument must contain at least one Buffer."); - NanReturnUndefined(); - } else if (length == 1 && !baton->reencode) { - Local buffer = js_images->Get(0); - if (Buffer::HasInstance(buffer)) { - // Directly pass through buffer if it's the only one. - Local argv[] = { - NanNull(), - buffer - }; - NanMakeCallback(NanGetCurrentContext()->Global(), NanNew(baton->callback), 2, argv); - NanReturnUndefined(); - } else { - // Check whether the argument is a complex image with offsets etc. - // In that case, we don't throw but continue going through the blend - // process below. - bool valid = false; - if (buffer->IsObject()) { - Local props = buffer->ToObject(); - valid = props->Has(NanNew("buffer")) && - Buffer::HasInstance(props->Get(NanNew("buffer"))); - } - if (!valid) { - NanThrowTypeError("All elements must be Buffers or objects with a 'buffer' property."); - NanReturnUndefined(); - } - } - } - - if (!(length >= 1 || (baton->width > 0 && baton->height > 0))) { - NanThrowTypeError("Without buffers, you have to specify width and height."); - NanReturnUndefined(); - } - - if (baton->width < 0 || baton->height < 0) { - NanThrowTypeError("Image dimensions must be greater than 0."); - NanReturnUndefined(); - } - - for (uint32_t i = 0; i < length; i++) { - ImagePtr image = std::make_shared(); - Local buffer = js_images->Get(i); - if (Buffer::HasInstance(buffer)) { - NanAssignPersistent(image->buffer,buffer.As()); - } else if (buffer->IsObject()) { - Local props = buffer->ToObject(); - if (props->Has(NanNew("buffer"))) { - buffer = props->Get(NanNew("buffer")); - if (Buffer::HasInstance(buffer)) { - NanAssignPersistent(image->buffer,buffer.As()); - } - } - image->x = props->Get(NanNew("x"))->Int32Value(); - image->y = props->Get(NanNew("y"))->Int32Value(); - - Local tint_val = props->Get(NanNew("tint")); - if (!tint_val.IsEmpty() && tint_val->IsObject()) { - Local tint = tint_val->ToObject(); - if (!tint.IsEmpty()) { - baton->reencode = true; - std::string msg; - parseTintOps(tint,image->tint,msg); - if (!msg.empty()) { - NanThrowTypeError(msg.c_str()); - NanReturnUndefined(); - } - } - } - } - - if (image->buffer.IsEmpty()) { - NanThrowTypeError("All elements must be Buffers or objects with a 'buffer' property."); - NanReturnUndefined(); - } - - image->data = node::Buffer::Data(buffer); - image->dataLength = node::Buffer::Length(buffer); - baton->images.push_back(image); - } - - uv_queue_work(uv_default_loop(), &(baton.release())->request, Work_Blend, (uv_after_work_cb)Work_AfterBlend); - - NanReturnUndefined(); -} - -} diff --git a/__tests__/fixture/readme/README.output.md b/__tests__/fixture/readme/README.output.md index 54991d56e..88b395ed1 100644 --- a/__tests__/fixture/readme/README.output.md +++ b/__tests__/fixture/readme/README.output.md @@ -4,6 +4,11 @@ +### Table of Contents + +- [foo](#foo) +- [bar](#bar) + ## foo A function with documentation. diff --git a/__tests__/fixture/resolve/index.js b/__tests__/fixture/resolve/index.js new file mode 100644 index 000000000..31b2d37bf --- /dev/null +++ b/__tests__/fixture/resolve/index.js @@ -0,0 +1,10 @@ +const node = require('./node'); + +/** + * test + * @returns { string } + * + */ +module.exports = function() { + return 'a'; +}; diff --git a/__tests__/fixture/resolve/node.js b/__tests__/fixture/resolve/node.js new file mode 100644 index 000000000..bee1ebbb5 --- /dev/null +++ b/__tests__/fixture/resolve/node.js @@ -0,0 +1,8 @@ +/** + * test + * @returns { string } + * + */ +module.exports = function() { + return 'e'; +}; diff --git a/__tests__/fixture/resolve/package.json b/__tests__/fixture/resolve/package.json new file mode 100644 index 000000000..54725e570 --- /dev/null +++ b/__tests__/fixture/resolve/package.json @@ -0,0 +1,14 @@ +{ + "name": "resolve", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "browser": { + "./node.js": false + }, + "author": "", + "license": "ISC" +} diff --git a/__tests__/fixture/sections.config.yml b/__tests__/fixture/sections.config.yml new file mode 100644 index 000000000..0efa7b0ed --- /dev/null +++ b/__tests__/fixture/sections.config.yml @@ -0,0 +1,12 @@ +toc: + - name: Alpha + children: + - third + - first + - name: Bravo + description: Contains a subsection! + children: + - name: Charlie + description: Second is in here + children: + - second diff --git a/__tests__/fixture/sections.input.js b/__tests__/fixture/sections.input.js new file mode 100644 index 000000000..e0fc3ef50 --- /dev/null +++ b/__tests__/fixture/sections.input.js @@ -0,0 +1,39 @@ +/** + * This function is first + */ +function first() {} + +/** */ +class AClass { + /** + * forgot a memberof here... sure hope that doesn't crash anything! + * @method first + */ + first(x, y) {} + + /** + * shares a name with a top level item referenced in the TOC... sure hope + * that doesn't crash anything! + */ + second() {} +} + +/** + * This class has some members + */ +function second() {} + +/** + * second::foo + */ +second.prototype.foo = function(pork) {}; + +/** + * second::bar + */ +second.prototype.bar = function(beans, rice) {}; + +/** + * This function is third + */ +function third() {} diff --git a/__tests__/fixture/system-import.input.js b/__tests__/fixture/system-import.input.js deleted file mode 100644 index 9e6b90834..000000000 --- a/__tests__/fixture/system-import.input.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - * System.import is a webpack convention - * https://github.com/documentationjs/documentation/issues/578 - */ -System.import('./simple.input.js').then(() => {}); diff --git a/__tests__/fixture/vue-no-script.input.vue b/__tests__/fixture/vue-no-script.input.vue new file mode 100644 index 000000000..8912669ca --- /dev/null +++ b/__tests__/fixture/vue-no-script.input.vue @@ -0,0 +1,7 @@ + + + diff --git a/__tests__/fixture/vue.input.vue b/__tests__/fixture/vue.input.vue new file mode 100644 index 000000000..94c625aa5 --- /dev/null +++ b/__tests__/fixture/vue.input.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/__tests__/format_type.js b/__tests__/format_type.js index 4971f41b4..d9932a960 100644 --- a/__tests__/format_type.js +++ b/__tests__/format_type.js @@ -1,9 +1,9 @@ /*eslint max-len: 0 */ -var _formatType = require('../src/output/util/format_type'), - LinkerStack = require('../src/output/util/linker_stack'), - remark = require('remark'), - parse = require('doctrine-temporary-fork').parse; +const _formatType = require('../src/output/util/format_type'); +const LinkerStack = require('../src/output/util/linker_stack'); +const remark = require('remark'); +const parse = require('doctrine-temporary-fork').parse; function stringify(children) { return remark().stringify({ @@ -12,9 +12,9 @@ function stringify(children) { }); } -test('formatType', function() { - var linkerStack = new LinkerStack({}); - var formatType = _formatType.bind(undefined, linkerStack.link); +test('formatType', function () { + const linkerStack = new LinkerStack({}); + const formatType = _formatType.bind(undefined, linkerStack.link); [ ['Foo', 'Foo'], ['null', 'null'], @@ -23,47 +23,47 @@ test('formatType', function() { ['namedType.typeProperty', 'namedType.typeProperty'], [ 'Array|undefined', - '([Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) \\| [undefined](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined))' + '([Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array) | [undefined](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined))' ], [ 'Array', - '[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)>' + '[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)>' ], [ 'number!', - '[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)!' + '[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)!' ], - ["('pre'|'post')", '(`"pre"` \\| `"post"`)'], - ["'pre'|'post'", '(`"pre"` \\| `"post"`)'], + ["('pre'|'post')", '(`"pre"` | `"post"`)'], + ["'pre'|'post'", '(`"pre"` | `"post"`)'], [ 'function(string, boolean)', - 'function ([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String), [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean))' + 'function ([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String), [boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean))' ], [ 'function(string, boolean): number', - 'function ([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String), [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)): [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)' + 'function ([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String), [boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)): [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)' ], ['function()', 'function ()'], [ 'function(this:something, string)', - 'function (this: something, [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String))' + 'function (this: something, [string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String))' ], ['function(new:something)', 'function (new: something)'], [ '{myNum: number, myObject}', - '{myNum: [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number), myObject}' + '{myNum: [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number), myObject}' ], [ '[string,]', - '\\[[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)]' + '\\[[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)]' ], [ 'number?', - '[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)?' + '[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?' ], [ 'number', - '[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)' + '[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)' ], ['?', '?'], ['void', 'void'], @@ -71,24 +71,24 @@ test('formatType', function() { ['function(a):void', 'function (a): void'], [ 'number=', - '[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)?' + '[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?' ], [ '...number', - '...[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)' + '...[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)' ], [ 'undefined', - '[undefined](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined)' + '[undefined](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined)' ] - ].forEach(function(example) { + ].forEach(function (example) { expect( stringify( formatType( parse('@param {' + example[0] + '} a', { sloppy: true }).tags[0].type ) ) - ).toEqual(example[1]); + ).toEqual(example[1] + '\n'); }); expect( @@ -96,13 +96,13 @@ test('formatType', function() { formatType(parse('@param {number} [a=1]', { sloppy: true }).tags[0].type) ) ).toEqual( - '[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)?' + '[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?\n' ); expect( stringify( _formatType( - function(str) { + function (str) { return str.toUpperCase(); }, parse('@param {Foo} a', { @@ -110,11 +110,11 @@ test('formatType', function() { }).tags[0].type ) ) - ).toEqual('[Foo](FOO)'); + ).toEqual('[Foo](FOO)\n'); - expect(stringify(formatType())).toEqual('any'); + expect(stringify(formatType())).toEqual('any\n'); - expect(function() { + expect(function () { formatType({}); }).toThrow(); }); diff --git a/__tests__/index.js b/__tests__/index.js new file mode 100644 index 000000000..6b40a6617 --- /dev/null +++ b/__tests__/index.js @@ -0,0 +1,68 @@ +const documentation = require('../src/'); +const os = require('os'); +const path = require('path'); +const fs = require('fs'); + +function inputs(contents) { + const dirEntry = os.tmpdir(); + const paths = {}; + for (const filename in contents) { + paths[filename] = path.join(dirEntry, '/', filename); + fs.writeFileSync(paths[filename], contents[filename]); + } + return { + paths + }; +} + +function cleanup(comments) { + comments.forEach(c => { + delete c.context; + }); +} + +test('lint', async function () { + const { paths } = inputs({ + 'index.js': '/** hi */var name = 1;' + }); + + const data = await documentation.lint([paths['index.js']], {}); + expect(data).toEqual(''); +}); + +test('build', async function () { + const { paths } = inputs({ + 'index.js': '/** hi */var name = 1;' + }); + + const data = await documentation.build([paths['index.js']], {}); + cleanup(data); + expect(data).toMatchSnapshot(); + + const md = await documentation.formats.md(data); + expect(md).toMatchSnapshot(); + + const json = await documentation.formats.json(data, {}); + expect(json).toMatchSnapshot(); +}); + +test('expandInputs', async function () { + const { paths } = inputs({ + 'index.js': '/** hi */var name = 1;' + }); + + { + const data = await documentation.expandInputs([paths['index.js']], { + parseExtension: ['js'] + }); + expect(data.length).toEqual(1); + } + + { + const data = await documentation.expandInputs([paths['index.js']], { + parseExtension: ['js'], + shallow: true + }); + expect(data.length).toEqual(1); + } +}); diff --git a/__tests__/lib/__snapshots__/sort.js.snap b/__tests__/lib/__snapshots__/sort.js.snap index ff8f5c7cc..1353e4e87 100644 --- a/__tests__/lib/__snapshots__/sort.js.snap +++ b/__tests__/lib/__snapshots__/sort.js.snap @@ -3,9 +3,29 @@ exports[`sort toc with files 1`] = ` Array [ Object { - "file": "test/fixture/snowflake.md", + "description": Object { + "children": Array [ + Object { + "children": Array [ + Object { + "type": "text", + "value": "The Snowflake", + }, + ], + "depth": 1, + "type": "heading", + }, + ], + "type": "root", + }, "kind": "note", "name": "snowflake", + "path": Array [ + Object { + "name": "snowflake", + "scope": "static", + }, + ], }, Object { "context": Object { @@ -36,56 +56,24 @@ Array [ Object { "children": Array [ Object { - "position": Position { - "end": Object { - "column": 16, - "line": 1, - "offset": 15, - }, - "indent": Array [], - "start": Object { - "column": 3, - "line": 1, - "offset": 2, - }, - }, "type": "text", "value": "The Snowflake", }, ], "depth": 1, - "position": Position { - "end": Object { - "column": 16, - "line": 1, - "offset": 15, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "heading", }, ], - "position": Object { - "end": Object { - "column": 1, - "line": 2, - "offset": 16, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "root", }, "kind": "note", "name": "snowflake", + "path": Array [ + Object { + "name": "snowflake", + "scope": "static", + }, + ], }, Object { "context": Object { @@ -107,3 +95,29 @@ Array [ }, ] `; + +exports[`sort toc with files absolute path 2`] = ` +Array [ + Object { + "context": Object { + "sortKey": "a", + }, + "memberof": "classB", + "name": "apples", + }, + Object { + "context": Object { + "sortKey": "c", + }, + "memberof": "classB", + "name": "bananas", + }, + Object { + "context": Object { + "sortKey": "b", + }, + "memberof": "classB", + "name": "carrot", + }, +] +`; diff --git a/__tests__/lib/filter_access.js b/__tests__/lib/filter_access.js index 85ab0bea8..06176343d 100644 --- a/__tests__/lib/filter_access.js +++ b/__tests__/lib/filter_access.js @@ -1,4 +1,4 @@ -var filterAccess = require('../../src/filter_access'); +const filterAccess = require('../../src/filter_access'); test('filterAccess ignore', function() { expect( diff --git a/__tests__/lib/flow_doctrine.js b/__tests__/lib/flow_doctrine.js index 00365694c..2b9078ac5 100644 --- a/__tests__/lib/flow_doctrine.js +++ b/__tests__/lib/flow_doctrine.js @@ -1,6 +1,6 @@ -var flowDoctrine = require('../../src/flow_doctrine.js'), - parse = require('../../src/parsers/javascript'), - FLOW_TYPES = require('babel-types').FLOW_TYPES; +const flowDoctrine = require('../../src/flow_doctrine.js'); +const parse = require('../../src/parsers/javascript'); +const FLOW_TYPES = require('@babel/types').FLOW_TYPES; function toComment(fn, filename) { return parse( @@ -13,12 +13,12 @@ function toComment(fn, filename) { } test('flowDoctrine', function() { - var types = FLOW_TYPES.filter(function(type) { + const types = FLOW_TYPES.filter(function(type) { return type.match(/\wTypeAnnotation$/); }); function toDoctrineType(flowType) { - var annotation = toComment( + const annotation = toComment( '/** add */function add(a: ' + flowType + ' ) { }' ).context.ast.node.params[0].typeAnnotation.typeAnnotation; if (types.indexOf(annotation.type) !== -1) { @@ -295,11 +295,23 @@ test('flowDoctrine', function() { type: 'VoidLiteral' }); + expect(toDoctrineType('this')).toEqual({ + type: 'NameExpression', + name: 'this' + }); + + expect(toDoctrineType('{ ...A }')).toEqual({ + fields: [], + type: 'RecordType' + }); + // TODO: remove all these types expect(types).toEqual([ + 'ExistsTypeAnnotation', + 'InterfaceTypeAnnotation', 'IntersectionTypeAnnotation', 'EmptyTypeAnnotation', - 'ThisTypeAnnotation', + 'SymbolTypeAnnotation', 'TypeofTypeAnnotation' ]); }); diff --git a/__tests__/lib/git/find_git.js b/__tests__/lib/git/find_git.js index aed510251..d5f089947 100644 --- a/__tests__/lib/git/find_git.js +++ b/__tests__/lib/git/find_git.js @@ -1,16 +1,32 @@ -var mock = require('mock-fs'); -var mockRepo = require('../../utils').mockRepo; -var path = require('path'); -var findGit = require('../../../src/git/find_git'); +const mock = require('mock-fs'); +const mockRepo = require('../../utils').mockRepo; +const path = require('path'); +const findGit = require('../../../src/git/find_git'); test('findGit', function() { mock(mockRepo.master); + const root = + path.parse(__dirname).root + path.join('my', 'repository', 'path'); + const masterPaths = findGit(path.join(root, 'index.js')); + mock.restore(); - const root = path.parse(__dirname).root; - - expect( - findGit(root + path.join('my', 'repository', 'path', 'index.js')) - ).toBe(root + path.join('my', 'repository', 'path', '.git')); + expect(masterPaths).toEqual({ + git: path.join(root, '.git'), + root + }); + mock(mockRepo.submodule); + const submoduleRoot = path.join(root, '..', 'my.submodule'); + const submodulePaths = findGit(path.join(submoduleRoot, 'index.js')); mock.restore(); + + expect(submodulePaths).toEqual({ + git: path.join( + path.dirname(submoduleRoot), + '.git', + 'modules', + 'my.submodule' + ), + root: submoduleRoot + }); }); diff --git a/__tests__/lib/git/url_prefix.js b/__tests__/lib/git/url_prefix.js index 3c1ace557..22be4bf6b 100644 --- a/__tests__/lib/git/url_prefix.js +++ b/__tests__/lib/git/url_prefix.js @@ -1,28 +1,41 @@ -var mock = require('mock-fs'); -var mockRepo = require('../../utils').mockRepo; -var getGithubURLPrefix = require('../../../src/git/url_prefix'); -var parsePackedRefs = getGithubURLPrefix.parsePackedRefs; +const mock = require('mock-fs'); +const mockRepo = require('../../utils').mockRepo; +const getGithubURLPrefix = require('../../../src/git/url_prefix'); +const parsePackedRefs = getGithubURLPrefix.parsePackedRefs; test('getGithubURLPrefix', function() { mock(mockRepo.master); - - expect(getGithubURLPrefix('/my/repository/path/')).toBe( - 'https://github.com/foo/bar/blob/this_is_the_sha/' - ); - + const masterUrl = getGithubURLPrefix({ + git: '/my/repository/path/.git', + root: '/my/repository/path' + }); mock.restore(); + expect(masterUrl).toBe('https://github.com/foo/bar/blob/this_is_the_sha/'); + mock(mockRepo.detached); + const detachedUrl = getGithubURLPrefix({ + git: '/my/repository/path/.git', + root: '/my/repository/path' + }); + mock.restore(); - expect(getGithubURLPrefix('/my/repository/path/')).toBe( + expect(detachedUrl).toBe( 'https://github.com/foo/bar/blob/e4cb2ffe677571d0503e659e4e64e01f45639c62/' ); + mock(mockRepo.submodule); + const submoduleUrl = getGithubURLPrefix({ + git: '/my/repository/.git/modules/my.submodule', + root: '/my/repository/my.submodule' + }); mock.restore(); + + expect(submoduleUrl).toBe('https://github.com/foo/bar/blob/this_is_the_sha/'); }); test('parsePackedRefs', function() { - var input = + const input = '# pack-refs with: peeled fully-peeled\n' + '4acd658617928bd17ae7364ef2512630d97c007a refs/heads/babel-6\n' + '11826ad98c6c08d00f4af77f64d3e2687e0f7dba refs/remotes/origin/flow-types'; diff --git a/__tests__/lib/github.js b/__tests__/lib/github.js index 76e7d7a67..4508d3ebb 100644 --- a/__tests__/lib/github.js +++ b/__tests__/lib/github.js @@ -1,10 +1,14 @@ /* eslint no-unused-vars: 0 */ -var mock = require('mock-fs'), - path = require('path'), - mockRepo = require('../utils').mockRepo, - parse = require('../../src/parsers/javascript'), - github = require('../../src/github'); +const mock = require('mock-fs'); +const path = require('path'); +const mockRepo = require('../utils').mockRepo; +const parse = require('../../src/parsers/javascript'); +const github = require('../../src/github'); + +// mock-fs is causing some unusual side effects with jest-resolve +// not being able to resolve modules so we've disabled these tests +// for now. function toComment(fn, filename) { return parse( @@ -25,15 +29,19 @@ function evaluate(fn) { ); } -test('github', function() { +afterEach(function() { + mock.restore(); +}); + +test.skip('github', function() { mock(mockRepo.master); expect( evaluate(function() { /** - * get one - * @returns {number} one - */ + * get one + * @returns {number} one + */ function getOne() { return 1; } @@ -42,45 +50,64 @@ test('github', function() { path: 'index.js', url: 'https://github.com/foo/bar/blob/this_is_the_sha/index.js#L6-L8' }); - - mock.restore(); }); -test('malformed repository', function() { +test.skip('malformed repository', function() { mock(mockRepo.malformed); expect( evaluate(function() { /** - * get one - * @returns {number} one - */ + * get one + * @returns {number} one + */ function getOne() { return 1; } })[0].context.github ).toBe(undefined); - - mock.restore(); }); -test('enterprise repository', function() { +test.skip('enterprise repository', function() { mock(mockRepo.enterprise); expect( evaluate(function() { /** - * get one - * @returns {number} one - */ + * get one + * @returns {number} one + */ function getOne() { return 1; } })[0].context.github ).toEqual({ path: 'index.js', - url: 'https://github.enterprise.com/foo/bar/blob/this_is_the_sha/index.js#L6-L8' + url: + 'https://github.enterprise.com/foo/bar/blob/this_is_the_sha/index.js#L6-L8' }); +}); - mock.restore(); +test.skip('typedef', function() { + mock(mockRepo.master); + + expect( + evaluate(function() { + /** + * A number, or a string containing a number. + * @typedef {(number|string)} NumberLike + */ + + /** + * get one + * @returns {number} one + */ + function getOne() { + return 1; + } + })[0].context.github + ).toEqual({ + path: 'index.js', + url: 'https://github.com/foo/bar/blob/this_is_the_sha/index.js#L2-L5' + }); }); diff --git a/__tests__/lib/hierarchy.js b/__tests__/lib/hierarchy.js index a30e7e3f8..de763e929 100644 --- a/__tests__/lib/hierarchy.js +++ b/__tests__/lib/hierarchy.js @@ -1,5 +1,5 @@ -var parse = require('../../src/parsers/javascript'), - hierarchy = require('../../src/hierarchy'); +const parse = require('../../src/parsers/javascript'); +const hierarchy = require('../../src/hierarchy'); function toComments(fn, filename) { return parse( @@ -22,7 +22,7 @@ function map(arr, prop) { } test('hierarchy', function() { - var comments = evaluate(function() { + const comments = evaluate(function() { /** * @name Class * @class @@ -50,7 +50,7 @@ test('hierarchy', function() { expect(map(comments, 'name')).toEqual(['Class']); - var classMembers = comments[0].members; + const classMembers = comments[0].members; expect(map(classMembers.static, 'name')).toEqual(['isClass', 'MAGIC_NUMBER']); expect(map(classMembers.instance, 'name')).toEqual(['getFoo']); @@ -67,7 +67,7 @@ test('hierarchy', function() { }); test('hierarchy - nesting', function() { - var comments = evaluate(function() { + const comments = evaluate(function() { /** * @name Parent * @class @@ -88,10 +88,10 @@ test('hierarchy - nesting', function() { expect(map(comments, 'name')).toEqual(['Parent']); - var classMembers = comments[0].members; + const classMembers = comments[0].members; expect(map(classMembers.static, 'name')).toEqual(['enum']); - var enumMembers = classMembers.static[0].members; + const enumMembers = classMembers.static[0].members; expect(map(enumMembers.static, 'name')).toEqual(['Parent', 'Child']); expect(map(enumMembers.static[0].path, 'name')).toEqual([ 'Parent', @@ -106,7 +106,7 @@ test('hierarchy - nesting', function() { }); test('hierarchy - multisignature', function() { - var comments = evaluate(function() { + const comments = evaluate(function() { /** * @name Parent * @class @@ -127,7 +127,7 @@ test('hierarchy - multisignature', function() { }); test('hierarchy - missing memberof', function() { - var test = evaluate(function() { + const test = evaluate(function() { /** * @name test * @memberof DoesNotExist @@ -143,7 +143,7 @@ test('hierarchy - missing memberof', function() { }); test('hierarchy - anonymous', function() { - var result = evaluate(function() { + const result = evaluate(function() { /** Test */ })[0]; @@ -155,7 +155,7 @@ test('hierarchy - anonymous', function() { }); test('hierarchy - object prototype member names', function() { - var comments = evaluate(function() { + const comments = evaluate(function() { /** * @name should * @function diff --git a/__tests__/lib/infer/__snapshots__/params.js.snap b/__tests__/lib/infer/__snapshots__/params.js.snap index 4dd7dcd46..25abe170d 100644 --- a/__tests__/lib/infer/__snapshots__/params.js.snap +++ b/__tests__/lib/infer/__snapshots__/params.js.snap @@ -1,5 +1,256 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`inferParams (typescript) 1`] = ` +Array [ + Object { + "lineNumber": 1, + "name": "a", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, +] +`; + +exports[`inferParams (typescript) 2`] = ` +Array [ + Object { + "anonymous": true, + "name": "$0", + "properties": Array [ + Object { + "lineNumber": 1, + "name": "$0.0", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + Object { + "lineNumber": 1, + "name": "$0.1", + "title": "param", + }, + Object { + "anonymous": true, + "name": "$0.2", + "properties": Array [ + Object { + "lineNumber": 1, + "name": "$0.2.c", + "title": "param", + }, + ], + "title": "param", + "type": Object { + "name": "Object", + "type": "NameExpression", + }, + }, + ], + "title": "param", + "type": Object { + "name": "Array", + "type": "NameExpression", + }, + }, +] +`; + +exports[`inferParams (typescript) 3`] = ` +Array [ + Object { + "default": "4", + "lineNumber": 1, + "name": "x", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, +] +`; + +exports[`inferParams (typescript) 4`] = ` +Array [ + Object { + "lineNumber": 3, + "name": "opts", + "title": "param", + "type": Object { + "fields": Array [ + Object { + "key": "x", + "type": "FieldType", + "value": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "type": "RecordType", + }, + }, +] +`; + +exports[`inferParams (typescript) 5`] = ` +Array [ + Object { + "lineNumber": 3, + "name": "opts", + "title": "param", + "type": Object { + "fields": Array [ + Object { + "key": "foo", + "type": "FieldType", + "value": Object { + "name": "string", + "type": "NameExpression", + }, + }, + ], + "type": "RecordType", + }, + }, +] +`; + +exports[`inferParams (typescript) 6`] = ` +Array [ + Object { + "lineNumber": 1, + "name": "a", + "title": "param", + "type": Object { + "expression": Object { + "name": "string", + "type": "NameExpression", + }, + "type": "RestType", + }, + }, +] +`; + +exports[`inferParams (typescript) 7`] = ` +Array [ + Object { + "lineNumber": 1, + "name": "a", + "title": "param", + "type": Object { + "expression": Object { + "name": "string", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, +] +`; + +exports[`inferParams (typescript) 8`] = ` +Array [ + Object { + "lineNumber": 1, + "name": "a", + "title": "param", + "type": Object { + "expression": Object { + "name": "string", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, +] +`; + +exports[`inferParams (typescript) 9`] = ` +Array [ + Object { + "lineNumber": 1, + "name": "a", + "title": "param", + "type": Object { + "expression": Object { + "name": "string", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, +] +`; + +exports[`inferParams (typescript) 10`] = ` +Array [ + Object { + "lineNumber": 1, + "name": "a", + "title": "param", + "type": Object { + "expression": Object { + "name": "string", + "type": "NameExpression", + }, + "type": "OptionalType", + }, + }, +] +`; + +exports[`inferParams (typescript) 11`] = ` +Array [ + Object { + "lineNumber": 1, + "name": "v", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, +] +`; + +exports[`inferParams (typescript) 12`] = ` +Array [ + Object { + "lineNumber": 1, + "name": "v", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, +] +`; + +exports[`inferParams (typescript) 13`] = ` +Array [ + Object { + "lineNumber": 1, + "name": "v", + "title": "param", + "type": Object { + "expression": Object { + "name": "string", + "type": "NameExpression", + }, + "type": "RestType", + }, + }, +] +`; + exports[`inferParams 1`] = ` Array [ Object { @@ -30,6 +281,52 @@ Array [ `; exports[`inferParams 2`] = ` +Array [ + Object { + "anonymous": true, + "name": "$0", + "properties": Array [ + Object { + "lineNumber": 1, + "name": "$0.0", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, + Object { + "lineNumber": 1, + "name": "$0.1", + "title": "param", + }, + Object { + "anonymous": true, + "name": "$0.2", + "properties": Array [ + Object { + "lineNumber": 1, + "name": "$0.2.c", + "title": "param", + }, + ], + "title": "param", + "type": Object { + "name": "Object", + "type": "NameExpression", + }, + }, + ], + "title": "param", + "type": Object { + "name": "Array", + "type": "NameExpression", + }, + }, +] +`; + +exports[`inferParams 3`] = ` Array [ Object { "description": Object { @@ -37,51 +334,13 @@ Array [ Object { "children": Array [ Object { - "position": Position { - "end": Object { - "column": 28, - "line": 1, - "offset": 27, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "text", "value": "renamed destructuring param", }, ], - "position": Position { - "end": Object { - "column": 28, - "line": 1, - "offset": 27, - }, - "indent": Array [], - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "paragraph", }, ], - "position": Object { - "end": Object { - "column": 28, - "line": 1, - "offset": 27, - }, - "start": Object { - "column": 1, - "line": 1, - "offset": 0, - }, - }, "type": "root", }, "lineNumber": 2, @@ -102,7 +361,7 @@ Array [ ] `; -exports[`inferParams 3`] = ` +exports[`inferParams 4`] = ` Array [ Object { "default": "4", @@ -114,7 +373,7 @@ Array [ ] `; -exports[`inferParams 4`] = ` +exports[`inferParams 5`] = ` Array [ Object { "default": "4", @@ -129,7 +388,7 @@ Array [ ] `; -exports[`inferParams 5`] = ` +exports[`inferParams 6`] = ` Array [ Object { "anonymous": true, @@ -150,7 +409,7 @@ Array [ ] `; -exports[`inferParams 6`] = ` +exports[`inferParams 7`] = ` Array [ Object { "anonymous": true, @@ -171,6 +430,66 @@ Array [ ] `; +exports[`inferParams 8`] = ` +Array [ + Object { + "default": "4", + "lineNumber": 1, + "name": "x", + "title": "param", + "type": Object { + "name": "number", + "type": "NameExpression", + }, + }, +] +`; + +exports[`inferParams 9`] = ` +Array [ + Object { + "lineNumber": 1, + "name": "v", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, +] +`; + +exports[`inferParams 10`] = ` +Array [ + Object { + "lineNumber": 1, + "name": "v", + "title": "param", + "type": Object { + "name": "string", + "type": "NameExpression", + }, + }, +] +`; + +exports[`inferParams 11`] = ` +Array [ + Object { + "lineNumber": 1, + "name": "v", + "title": "param", + "type": Object { + "expression": Object { + "name": "string", + "type": "NameExpression", + }, + "type": "RestType", + }, + }, +] +`; + exports[`mergeTrees 1`] = ` Object { "errors": Array [ diff --git a/__tests__/lib/infer/access.js b/__tests__/lib/infer/access.js index 59d3bbf64..21c154688 100644 --- a/__tests__/lib/infer/access.js +++ b/__tests__/lib/infer/access.js @@ -1,18 +1,19 @@ -var parse = require('../../../src/parsers/javascript'), - inferName = require('../../../src/infer/name'), - inferAccess = require('../../../src/infer/access'); +const parse = require('../../../src/parsers/javascript'); +const inferName = require('../../../src/infer/name'); +const inferAccess = require('../../../src/infer/access'); -function toComment(fn) { +function toComment(fn, filename) { return parse( { - source: '(' + fn.toString() + ')' + file: filename, + source: fn instanceof Function ? '(' + fn.toString() + ')' : fn }, {} )[0]; } -function evaluate(fn, re) { - return inferAccess(re)(inferName(toComment(fn))); +function evaluate(fn, re, filename) { + return inferAccess(re)(inferName(toComment(fn, filename))); } test('inferAccess', function() { @@ -43,4 +44,58 @@ test('inferAccess', function() { function name_() {} }, '_$').access ).toBe('private'); + + expect( + evaluate(` + class Test { + /** */ + private foo() {} + } + `, '_$', 'test.ts').access + ).toBe('private'); + + expect( + evaluate(` + class Test { + /** */ + protected foo() {} + } + `, '_$', 'test.ts').access + ).toBe('protected'); + + expect( + evaluate(` + class Test { + /** */ + public foo() {} + } + `, '_$', 'test.ts').access + ).toBe('public'); + + expect( + evaluate(` + class Test { + /** */ + public abstract foo(); + } + `, '_$', 'test.ts').access + ).toBe('public'); + + expect( + evaluate(` + class Test { + /** */ + readonly name: string; + } + `, '_$', 'test.ts').readonly + ).toBe(true); + + expect( + evaluate(` + interface Test { + /** */ + readonly name: string; + } + `, '_$', 'test.ts').readonly + ).toBe(true); }); diff --git a/__tests__/lib/infer/augments.js b/__tests__/lib/infer/augments.js new file mode 100644 index 000000000..dc60e357f --- /dev/null +++ b/__tests__/lib/infer/augments.js @@ -0,0 +1,48 @@ +/*eslint-disable no-unused-vars*/ +const inferAugments = require('../../../src/infer/augments'); +const parse = require('../../../src/parsers/javascript'); + +function toComment(fn, filename) { + return parse( + { + file: filename, + source: fn instanceof Function ? '(' + fn.toString() + ')' : fn + }, + {} + )[0]; +} + +function evaluate(code, filename) { + return inferAugments(toComment(code, filename)); +} + +test('inferAugments', function() { + expect(evaluate('/** */class A extends B {}').augments).toEqual([ + { + name: 'B', + title: 'augments' + } + ]); + + expect(evaluate('/** */interface A extends B, C {}').augments).toEqual([ + { + name: 'B', + title: 'extends' + }, + { + name: 'C', + title: 'extends' + } + ]); + + expect(evaluate('/** */interface A extends B, C {}', 'test.ts').augments).toEqual([ + { + name: 'B', + title: 'extends' + }, + { + name: 'C', + title: 'extends' + } + ]); +}); diff --git a/__tests__/lib/infer/finders.js b/__tests__/lib/infer/finders.js index 3c86b0473..a421893fd 100644 --- a/__tests__/lib/infer/finders.js +++ b/__tests__/lib/infer/finders.js @@ -1,5 +1,5 @@ -var parse = require('../../../src/parsers/javascript'), - findTarget = require('../../../src/infer/finders').findTarget; +const parse = require('../../../src/parsers/javascript'); +const findTarget = require('../../../src/infer/finders').findTarget; function toComment(fn) { if (typeof fn == 'function') { @@ -23,7 +23,7 @@ test('findTarget', function() { findTarget( toComment(function() { /** Test */ - var x = 10; + const x = 10; }).context.ast ).type ).toBe('VariableDeclarator'); @@ -31,7 +31,7 @@ test('findTarget', function() { expect( findTarget( toComment(function() { - var z = {}; + const z = {}; /** Test */ z.y = 10; @@ -42,7 +42,7 @@ test('findTarget', function() { expect( findTarget( toComment(function() { - var z = { + const z = { /** Test */ y: 10 }; diff --git a/__tests__/lib/infer/implements.js b/__tests__/lib/infer/implements.js new file mode 100644 index 000000000..5f0f8f045 --- /dev/null +++ b/__tests__/lib/infer/implements.js @@ -0,0 +1,57 @@ +/*eslint-disable no-unused-vars*/ +const inferImplements = require('../../../src/infer/implements'); +const parse = require('../../../src/parsers/javascript'); + +function toComment(fn, filename) { + return parse( + { + file: filename, + source: fn instanceof Function ? '(' + fn.toString() + ')' : fn + }, + {} + )[0]; +} + +function evaluate(code, filename) { + return inferImplements(toComment(code, filename)); +} + +test('inferImplements (flow)', function() { + expect(evaluate('/** */class A implements B {}').implements).toEqual([ + { + name: 'B', + title: 'implements' + } + ]); + + expect(evaluate('/** */class A implements B, C {}').implements).toEqual([ + { + name: 'B', + title: 'implements' + }, + { + name: 'C', + title: 'implements' + } + ]); +}); + +test('inferImplements (typescript)', function() { + expect(evaluate('/** */class A implements B {}', 'test.ts').implements).toEqual([ + { + name: 'B', + title: 'implements' + } + ]); + + expect(evaluate('/** */class A implements B, C {}', 'test.ts').implements).toEqual([ + { + name: 'B', + title: 'implements' + }, + { + name: 'C', + title: 'implements' + } + ]); +}); diff --git a/__tests__/lib/infer/kind.js b/__tests__/lib/infer/kind.js index 3c015b94c..3c73a7834 100644 --- a/__tests__/lib/infer/kind.js +++ b/__tests__/lib/infer/kind.js @@ -1,6 +1,6 @@ /*eslint-disable no-unused-vars*/ -var inferKind = require('../../../src/infer/kind'), - parse = require('../../../src/parsers/javascript'); +const inferKind = require('../../../src/infer/kind'); +const parse = require('../../../src/parsers/javascript'); function toComment(fn, filename) { return parse( @@ -38,6 +38,10 @@ test('inferKind', function() { ).kind ).toBe('class'); + const abstractClass = inferKind(toComment('/** */ abstract class C {}', 'test.ts')); + expect(abstractClass.kind).toBe('class'); + expect(abstractClass.abstract).toBe(true); + expect( inferKind( toComment(function() { @@ -52,17 +56,22 @@ test('inferKind', function() { inferKind( toComment(function() { /** function */ - var foo = function() {}; + const foo = function() {}; foo(); }) ).kind - ).toBe('function'); + ).toBe('constant'); expect( inferKind(toComment('/** Exported interface */' + 'interface myinter {}')) .kind ).toBe('interface'); + expect( + inferKind(toComment('/** Exported interface */' + 'interface myinter {}', 'test.ts')) + .kind + ).toBe('interface'); + expect( inferKind( toComment( @@ -82,13 +91,19 @@ test('inferKind', function() { ).kind ).toBe('function'); - expect( - inferKind( - toComment( - '/** Export default function */' + 'export default function foo() {}' - ) - ).kind - ).toBe('function'); + const asyncFunction = inferKind( + toComment('/** Async function */' + 'async function foo() {}') + ); + + expect(asyncFunction.kind).toBe('function'); + expect(asyncFunction.async).toBe(true); + + const generatorFunction = inferKind( + toComment('/** Generator function */' + 'function *foo() {}') + ); + + expect(generatorFunction.kind).toBe('function'); + expect(generatorFunction.generator).toBe(true); expect( inferKind(toComment('class Foo { /** set b */ set b(v) { } }')).kind @@ -106,6 +121,46 @@ test('inferKind', function() { 'function' ); + const asyncMethod = inferKind( + toComment('class Foo { /** b */ async b(v) { } }') + ); + expect(asyncMethod.kind).toBe('function'); + expect(asyncMethod.async).toBe(true); + + const generatorMethod = inferKind( + toComment('class Foo { /** b */ *b(v) { } }') + ); + expect(generatorMethod.kind).toBe('function'); + expect(generatorMethod.generator).toBe(true); + + const abstractMethod = inferKind(toComment('abstract class C { /** */ abstract foo(); }', 'test.ts')); + expect(abstractMethod.kind).toBe('function'); + expect(abstractMethod.abstract).toBe(true); + + expect(inferKind(toComment('interface Foo { /** b */ b(v): void; }')).kind).toBe( + 'function' + ); + + expect(inferKind(toComment('interface Foo { /** b */ b: string; }')).kind).toBe( + 'member' + ); + + expect(inferKind(toComment('interface Foo { /** b */ b(v): void; }', 'test.ts')).kind).toBe( + 'function' + ); + + expect(inferKind(toComment('interface Foo { /** b */ b: string; }', 'test.ts')).kind).toBe( + 'member' + ); + + expect(inferKind(toComment('/** */ enum Foo { A }', 'test.ts')).kind).toBe( + 'enum' + ); + + expect(inferKind(toComment('enum Foo { /** */ A }', 'test.ts')).kind).toBe( + 'member' + ); + expect( inferKind( toComment(function() { @@ -141,4 +196,30 @@ test('inferKind', function() { ) ).kind ).toBe('constant'); + + expect( + inferKind( + toComment( + '/** */' + 'type Foo = string' + ) + ).kind + ).toBe('typedef'); + + expect( + inferKind( + toComment( + '/** */' + 'type Foo = string', + 'test.ts' + ) + ).kind + ).toBe('typedef'); + + const namespace = inferKind( + toComment( + '/** */ namespace Test { /** */ export function foo() {} }', + 'test.ts' + ) + ); + + expect(namespace.kind).toBe('namespace'); }); diff --git a/__tests__/lib/infer/membership.js b/__tests__/lib/infer/membership.js index 20bf78d60..775ee224b 100644 --- a/__tests__/lib/infer/membership.js +++ b/__tests__/lib/infer/membership.js @@ -1,5 +1,5 @@ -var parse = require('../../../src/parsers/javascript'), - inferMembership = require('../../../src/infer/membership')(); +const parse = require('../../../src/parsers/javascript'); +const inferMembership = require('../../../src/infer/membership')(); function toComment(fn, file) { return parse( @@ -32,10 +32,10 @@ test('inferMembership - explicit', function() { pick( evaluate(function() { /** - * Test - * @memberof Bar - * @static - */ + * Test + * @memberof Bar + * @static + */ Foo.bar = 0; })[0], ['memberof', 'scope'] @@ -49,9 +49,9 @@ test('inferMembership - explicit', function() { pick( evaluate(function() { /** - * Test - * @memberof Bar# - */ + * Test + * @memberof Bar# + */ Foo.bar = 0; })[0], ['memberof', 'scope'] @@ -65,9 +65,9 @@ test('inferMembership - explicit', function() { pick( evaluate(function() { /** - * Test - * @memberof Bar.prototype - */ + * Test + * @memberof Bar.prototype + */ Foo.bar = 0; })[0], ['memberof', 'scope'] @@ -141,6 +141,23 @@ test('inferMembership - explicit', function() { scope: 'static' }); + expect( + pick( + evaluate(function() { + Foo.bar = { + baz: { + /** Test */ + test: 0 + } + }; + })[0], + ['memberof', 'scope'] + ) + ).toEqual({ + memberof: 'Foo.bar.baz', + scope: 'static' + }); + expect( pick( evaluate(function() { @@ -162,8 +179,8 @@ test('inferMembership - explicit', function() { evaluate(function() { Foo.prototype = { /** - * Test - */ + * Test + */ bar: function() {} }; })[0], @@ -179,8 +196,8 @@ test('inferMembership - explicit', function() { evaluate(function() { Foo.prototype = { /** - * Test - */ + * Test + */ bar() {} }; })[0], @@ -194,7 +211,7 @@ test('inferMembership - explicit', function() { expect( pick( evaluate(function() { - var Foo = { + const Foo = { /** Test */ baz: 0 }; @@ -210,7 +227,7 @@ test('inferMembership - explicit', function() { expect( pick( evaluate(function() { - var Foo = { + const Foo = { /** Test */ baz: function() {} }; @@ -243,7 +260,7 @@ test('inferMembership - explicit', function() { expect( pick( evaluate(function() { - var Foo = function Bar() { + const Foo = function Bar() { { /** */ this.baz = 0; @@ -276,6 +293,199 @@ test('inferMembership - explicit', function() { scope: 'instance' }); + expect( + pick( + evaluate(function() { + /** @memberof bar */ + class Foo { + /** */ + baz() {} + } + })[1], // [0] is an description for class Foo + ['memberof', 'scope'] + ) + ).toEqual({ + memberof: 'bar.Foo', + scope: 'instance' + }); + + expect( + pick( + evaluate(function() { + /** @memberof bar */ + class Foo { + /** */ + static baz() {} + } + })[1], // [0] is an description for class Foo + ['memberof', 'scope'] + ) + ).toEqual({ + memberof: 'bar.Foo', + scope: 'static' + }); + + expect( + pick( + evaluate(` + /** @memberof bar */ + abstract class Foo { + /** */ + abstract baz(); + } + `, 'test.ts')[1], // [0] is an description for class Foo + ['memberof', 'scope'] + ) + ).toEqual({ + memberof: 'bar.Foo', + scope: 'instance' + }); + + expect( + pick( + evaluate(` + /** @memberof bar */ + interface Foo { + /** */ + baz(): string; + } + `)[1], // [0] is an description for class Foo + ['memberof', 'scope'] + ) + ).toEqual({ + memberof: 'bar.Foo', + scope: 'instance' + }); + + expect( + pick( + evaluate(` + /** @memberof bar */ + interface Foo { + /** */ + baz(): string; + } + `, 'test.ts')[1], // [0] is an description for class Foo + ['memberof', 'scope'] + ) + ).toEqual({ + memberof: 'bar.Foo', + scope: 'instance' + }); + + expect( + pick( + evaluate(` + interface Foo { + bar: { + /** */ + baz: string; + } + } + `)[0], + ['memberof', 'scope'] + ) + ).toEqual({ + memberof: 'Foo.bar', + scope: 'instance' + }); + + expect( + pick( + evaluate(` + interface Foo { + bar: { + /** */ + baz: string; + } + } + `, 'test.ts')[0], + ['memberof', 'scope'] + ) + ).toEqual({ + memberof: 'Foo.bar', + scope: 'instance' + }); + + expect( + pick( + evaluate(` + type Foo = { + /** */ + bar: string; + } + `)[0], + ['memberof', 'scope'] + ) + ).toEqual({ + memberof: 'Foo', + scope: 'static' + }); + + expect( + pick( + evaluate(` + type Foo = { + bar: { + /** */ + baz: string; + } + } + `)[0], + ['memberof', 'scope'] + ) + ).toEqual({ + memberof: 'Foo.bar', + scope: 'static' + }); + + expect( + pick( + evaluate(` + type Foo = { + /** */ + bar: string; + } + `, 'test.ts')[0], + ['memberof', 'scope'] + ) + ).toEqual({ + memberof: 'Foo', + scope: 'static' + }); + + expect( + pick( + evaluate(` + type Foo = { + bar: { + /** */ + baz: string; + } + } + `, 'test.ts')[0], + ['memberof', 'scope'] + ) + ).toEqual({ + memberof: 'Foo.bar', + scope: 'static' + }); + + expect( + pick( + evaluate(` + enum Foo { + /** */ + A + } + `, 'test.ts')[0], + ['memberof', 'scope'] + ) + ).toEqual({ + memberof: 'Foo', + scope: 'static' + }); + expect( pick( evaluate(function() { @@ -509,9 +719,9 @@ test('inferMembership - module.exports', function() { expect( evaluate(function() { /** - * @module mod - * @name exports - */ + * @module mod + * @name exports + */ module.exports = 1; })[0].memberof ).toBe(undefined); @@ -519,9 +729,9 @@ test('inferMembership - module.exports', function() { expect( evaluate(function() { /** - * @module mod - * @name exports - */ + * @module mod + * @name exports + */ module.exports = function() {}; })[0].memberof ).toBe(undefined); @@ -538,7 +748,7 @@ test('inferMembership - module.exports', function() { }); test('inferMembership - not module exports', function() { - var result = evaluate(function() { + const result = evaluate(function() { /** * @module mod */ @@ -551,7 +761,7 @@ test('inferMembership - not module exports', function() { }); test('inferMembership - anonymous @module', function() { - var result = evaluate(function() { + const result = evaluate(function() { /** * @module */ @@ -564,7 +774,7 @@ test('inferMembership - anonymous @module', function() { }); test('inferMembership - no @module', function() { - var result = evaluate(function() { + const result = evaluate(function() { /** Test */ exports.foo = 1; }, '/path/mod.js'); diff --git a/__tests__/lib/infer/name.js b/__tests__/lib/infer/name.js index a07a46c8b..2ce859ebe 100644 --- a/__tests__/lib/infer/name.js +++ b/__tests__/lib/infer/name.js @@ -1,5 +1,5 @@ -var parse = require('../../../src/parsers/javascript'), - inferName = require('../../../src/infer/name'); +const parse = require('../../../src/parsers/javascript'); +const inferName = require('../../../src/infer/name'); function toComment(fn, file) { return parse( @@ -62,6 +62,18 @@ test('inferName', function() { }).name ).toBe('name'); + expect( + evaluate(function() { + exports = { + // Property + // Identifier (comment attached here) + // FunctionExpression + /** Test */ + name() {} + }; + }).name + ).toBe('name'); + expect( evaluate(function() { /** Test */ @@ -72,14 +84,14 @@ test('inferName', function() { expect( evaluate(function() { /** Test */ - var name = function() {}; + const name = function() {}; }).name ).toBe('name'); expect( evaluate(function() { /** Test */ - var name = function name2() {}; + const name = function name2() {}; }).name ).toBe('name'); @@ -181,6 +193,12 @@ test('inferName', function() { expect(evaluate('/** Test */ export class Wizard {}').name).toBe('Wizard'); + expect(evaluate('/** Test */ interface Wizard {}').name).toBe('Wizard'); + expect(evaluate('/** Test */ interface Wizard {}', 'test.ts').name).toBe('Wizard'); + + expect(evaluate('/** Test */ enum Wizard {}', 'test.ts').name).toBe('Wizard'); + expect(evaluate('enum Wizard { /** Test */ A }', 'test.ts').name).toBe('A'); + expect( evaluate( '/** Test */ export default class Warlock {}', diff --git a/__tests__/lib/infer/params.js b/__tests__/lib/infer/params.js index 01eba07d3..ae3cf1ccc 100644 --- a/__tests__/lib/infer/params.js +++ b/__tests__/lib/infer/params.js @@ -1,5 +1,5 @@ -var parse = require('../../../src/parsers/javascript'), - inferParams = require('../../../src/infer/params'); +const parse = require('../../../src/parsers/javascript'); +const inferParams = require('../../../src/infer/params'); function toComment(fn, file) { return parse( @@ -85,7 +85,7 @@ test('inferParams', function() { expect( evaluate(function() { /** Test */ - var f = function(x) {}; + const f = function(x) {}; }).params ).toEqual([{ lineNumber: 3, name: 'x', title: 'param' }]); @@ -93,6 +93,10 @@ test('inferParams', function() { evaluate(`/** Test */function f({ x, ...xs }) {};`).params ).toMatchSnapshot(); + expect( + evaluate(`/** Test */function f([a: string, b, {c}]) {};`).params + ).toMatchSnapshot(); + expect( evaluate( ` @@ -111,12 +115,12 @@ test('inferParams', function() { expect( evaluate(function() { - var x = 1, - g = function(y) {}, - /** Test */ - f = function(x) {}; + const x = 1; + const g = function(y) {}; + /** Test */ + const f = function(x) {}; }).params - ).toEqual([{ lineNumber: 5, name: 'x', title: 'param' }]); + ).toEqual([{ lineNumber: 8, name: 'x', title: 'param' }]); expect( evaluate( @@ -163,4 +167,122 @@ test('inferParams', function() { expect( evaluate('/** Test */ export default function f(x) {}').params ).toEqual([{ lineNumber: 1, name: 'x', title: 'param' }]); + + expect( + evaluate(function() { + /** + * @class + * @hideconstructor + */ + function SomeClass(foo, bar) {} + }).params + ).toEqual([]); + + expect( + evaluate(` + /** + * Test + */ + class SomeClass { + /** + * @hideconstructor + */ + constructor(foo, bar) {} + } + `).params + ).toEqual([]); + + expect( + evaluate( + ` + /** Test + * @param x + */ + function f(x: number = 4) {} + ` + ).params + ).toMatchSnapshot(); + + expect( + evaluate(`interface Foo { /** b */ b(v: string): void; }`).params + ).toMatchSnapshot(); + + expect( + evaluate(`type Foo = { /** b */ b(v: string): void }`).params + ).toMatchSnapshot(); + + expect( + evaluate(`interface Foo { /** b */ b(...v: string): void; }`).params + ).toMatchSnapshot(); +}); + +test('inferParams (typescript)', function() { + expect( + evaluate(`/** Test */function f(a: string) {};`, 'test.ts').params + ).toMatchSnapshot(); + + expect( + evaluate(`/** Test */function f([a: string, b, {c}]) {};`, 'test.ts').params + ).toMatchSnapshot(); + + expect( + evaluate( + ` + /** Test + * @param x + */ + function f(x: number = 4) {} + ` + , 'test.ts').params + ).toMatchSnapshot(); + + expect( + evaluate( + ` + /** Test */ + function f(opts: { x: string }) {} + ` , 'test.ts' + ).params + ).toMatchSnapshot(); + + expect( + evaluate( + ` + /** Test */ + function f(opts: { [foo]: string }) {} + ` , 'test.ts' + ).params + ).toMatchSnapshot(); + + expect( + evaluate(`/** Test */function f(...a: string) {};`, 'test.ts').params + ).toMatchSnapshot(); + + expect( + evaluate(`/** Test */function f(a?: string) {};`).params + ).toMatchSnapshot(); + + expect( + evaluate(`/** Test */function f(a?: string) {};`, 'test.ts').params + ).toMatchSnapshot(); + + expect( + evaluate(`/** Test */function f(a?: string);`, 'test.ts').params + ).toMatchSnapshot(); + + expect( + evaluate(`abstract class Foo { /** */ abstract f(a?: string); }`, 'test.ts').params + ).toMatchSnapshot(); + + expect( + evaluate(`interface Foo { /** b */ b(v: string): void; }`, 'test.ts').params + ).toMatchSnapshot(); + + expect( + evaluate(`type Foo = { /** b */ b(v: string): void }`, 'test.ts').params + ).toMatchSnapshot(); + + expect( + evaluate(`interface Foo { /** b */ b(...v: string): void; }`, 'test.ts').params + ).toMatchSnapshot(); }); diff --git a/__tests__/lib/infer/properties.js b/__tests__/lib/infer/properties.js new file mode 100644 index 000000000..1223b99d7 --- /dev/null +++ b/__tests__/lib/infer/properties.js @@ -0,0 +1,115 @@ +/*eslint-disable no-unused-vars*/ +const inferProperties = require('../../../src/infer/properties'); +const parse = require('../../../src/parsers/javascript'); + +function toComment(fn, filename) { + return parse( + { + file: filename, + source: fn instanceof Function ? '(' + fn.toString() + ')' : fn + }, + {} + )[0]; +} + +function evaluate(code, filename) { + return inferProperties(toComment(code, filename)); +} + +test('inferProperties (flow)', function() { + expect(evaluate('/** */type a = { b: 1 };').properties).toEqual([ + { + lineNumber: 1, + name: 'b', + title: 'property', + type: { + type: 'NumericLiteralType', + value: 1 + } + } + ]); + + expect( + evaluate('/** @property {number} b */ type a = { b: 1 };').properties + ).toEqual([ + { + lineNumber: 0, + name: 'b', + title: 'property', + type: { + name: 'number', + type: 'NameExpression' + } + } + ]); + + expect(evaluate('/** */type a = { b: { c: 2 } };').properties).toEqual([ + { + lineNumber: 1, + name: 'b', + title: 'property', + type: { + type: 'RecordType', + fields: [ + { + key: 'c', + type: 'FieldType', + value: { + type: 'NumericLiteralType', + value: 2 + } + } + ] + } + } + ]); +}); + +test('inferProperties (typescript)', function() { + expect(evaluate('/** */type a = { b: 1 };', 'test.ts').properties).toEqual([ + { + lineNumber: 1, + name: 'b', + title: 'property', + type: { + type: 'NumericLiteralType', + value: 1 + } + } + ]); + + expect( + evaluate('/** @property {number} b */ type a = { b: 1 };', 'test.ts').properties + ).toEqual([ + { + lineNumber: 0, + name: 'b', + title: 'property', + type: { + name: 'number', + type: 'NameExpression' + } + } + ]); + + expect(evaluate('/** */type a = { b: { c: 2 } };', 'test.ts').properties).toEqual([ + { + lineNumber: 1, + name: 'b', + title: 'property', + type: { + type: 'RecordType', + fields: [ + { + key: 'c', + type: 'FieldType', + value: { + type: 'NumericLiteralType', + value: 2 + } + } + ] + } + } + ]); +}); diff --git a/__tests__/lib/infer/return.js b/__tests__/lib/infer/return.js new file mode 100644 index 000000000..ad87c69ad --- /dev/null +++ b/__tests__/lib/infer/return.js @@ -0,0 +1,163 @@ +/*eslint-disable no-unused-vars*/ +const inferReturn = require('../../../src/infer/return'); +const parse = require('../../../src/parsers/javascript'); + +function toComment(fn, filename) { + return parse( + { + file: filename, + source: fn instanceof Function ? '(' + fn.toString() + ')' : fn + }, + {} + )[0]; +} + +function evaluate(code, filename) { + return inferReturn(toComment(code, filename)); +} + +test('inferReturn (flow)', function() { + expect(evaluate('/** */function a(): number {}').returns).toEqual([ + { + title: 'returns', + type: { + name: 'number', + type: 'NameExpression' + } + } + ]); + expect(evaluate('/** */var a = function(): number {}').returns).toEqual([ + { + title: 'returns', + type: { + name: 'number', + type: 'NameExpression' + } + } + ]); + expect( + evaluate('/** @returns {string} */function a(): number {}').returns[0].type + ).toEqual({ + name: 'string', + type: 'NameExpression' + }); + const generatorFn = evaluate( + '/** */function *a(): Generator {}' + ); + expect(generatorFn.generator).toBe(true); + expect(generatorFn.yields).toEqual([ + { + title: 'yields', + type: { + name: 'Foo', + type: 'NameExpression' + } + } + ]); + expect(generatorFn.returns).toEqual([ + { + title: 'returns', + type: { + name: 'Bar', + type: 'NameExpression' + } + } + ]); + + expect( + evaluate('interface Foo { /** */ bar(): string; }').returns[0].type + ).toEqual({ + name: 'string', + type: 'NameExpression' + }); + + expect( + evaluate('type Foo = { /** */ bar(): string; }').returns[0].type + ).toEqual({ + name: 'string', + type: 'NameExpression' + }); +}); + +test('inferReturn (typescript)', function() { + expect(evaluate('/** */function a(): number {}', 'test.ts').returns).toEqual([ + { + title: 'returns', + type: { + name: 'number', + type: 'NameExpression' + } + } + ]); + expect(evaluate('/** */var a = function(): number {}', 'test.ts').returns).toEqual([ + { + title: 'returns', + type: { + name: 'number', + type: 'NameExpression' + } + } + ]); + expect( + evaluate('/** @returns {string} */function a(): number {}', 'test.ts').returns[0].type + ).toEqual({ + name: 'string', + type: 'NameExpression' + }); + const generatorFn = evaluate( + '/** */function *a(): IterableIterator {}', + 'test.ts' + ); + expect(generatorFn.generator).toBe(true); + expect(generatorFn.yields).toEqual([ + { + title: 'yields', + type: { + name: 'Foo', + type: 'NameExpression' + } + } + ]); + expect(generatorFn.returns).toEqual([ + { + title: 'returns', + type: { + type: 'VoidLiteral' + } + } + ]); + + expect(evaluate('/** */function a(): number;', 'test.ts').returns).toEqual([ + { + title: 'returns', + type: { + name: 'number', + type: 'NameExpression' + } + } + ]); + + expect(evaluate('abstract class Test { /** */abstract a(): number; }', 'test.ts').returns).toEqual([ + { + title: 'returns', + type: { + name: 'number', + type: 'NameExpression' + } + } + ]); + + expect( + evaluate('interface Foo { /** */ bar(): string; }', 'test.ts').returns[0].type + ).toEqual({ + name: 'string', + type: 'NameExpression' + }); + + expect( + evaluate('type Foo = { /** */ bar(): string; }', 'test.ts').returns[0].type + ).toEqual({ + name: 'string', + type: 'NameExpression' + }); +}); diff --git a/__tests__/lib/infer/type.js b/__tests__/lib/infer/type.js index 4832d9d1c..beab3d0ee 100644 --- a/__tests__/lib/infer/type.js +++ b/__tests__/lib/infer/type.js @@ -1,21 +1,22 @@ -var parse = require('../../../src/parsers/javascript'), - inferKind = require('../../../src/infer/kind'), - inferType = require('../../../src/infer/type'); +const parse = require('../../../src/parsers/javascript'); +const inferKind = require('../../../src/infer/kind'); +const inferType = require('../../../src/infer/type'); -function toComment(code) { +function toComment(fn, filename) { return parse( { - source: code + file: filename, + source: fn instanceof Function ? '(' + fn.toString() + ')' : fn }, {} )[0]; } -function evaluate(code) { - return inferType(inferKind(toComment(code))); +function evaluate(code, filename) { + return inferType(inferKind(toComment(code, filename))); } -test('inferType', function() { +test('inferType (flow)', function() { expect(evaluate('/** @typedef {T} V */').type).toEqual({ name: 'T', type: 'NameExpression' @@ -79,6 +80,16 @@ test('inferType', function() { type: 'NameExpression' }); + expect(evaluate('class Foo { /** */ get b(): string { } }').type).toEqual({ + name: 'string', + type: 'NameExpression' + }); + + expect(evaluate('class Foo { /** */ set b(s: string) { } }').type).toEqual({ + name: 'string', + type: 'NameExpression' + }); + expect(evaluate('/** */' + 'const x = 42;').type).toEqual({ name: 'number', type: 'NameExpression' @@ -93,4 +104,163 @@ test('inferType', function() { name: 'boolean', type: 'NameExpression' }); + + expect(evaluate('interface Foo { /** */ bar: string; }').type).toEqual({ + name: 'string', + type: 'NameExpression' + }); + + expect(evaluate('type Foo = { /** */ bar: string; }').type).toEqual({ + name: 'string', + type: 'NameExpression' + }); +}); + +test('inferType (typescript)', function() { + expect(evaluate('/** @typedef {T} V */', 'test.ts').type).toEqual({ + name: 'T', + type: 'NameExpression' + }); + + expect(evaluate('/** */' + 'type V = T', 'test.ts').type).toEqual({ + name: 'T', + type: 'NameExpression' + }); + + expect(evaluate('/** @typedef {Array} V */', 'test.ts').type).toEqual({ + applications: [ + { + name: 'T', + type: 'NameExpression' + } + ], + expression: { + name: 'Array', + type: 'NameExpression' + }, + type: 'TypeApplication' + }); + + expect(evaluate('/** */' + 'type V = Array', 'test.ts').type).toEqual({ + applications: [ + { + name: 'T', + type: 'NameExpression' + } + ], + expression: { + name: 'Array', + type: 'NameExpression' + }, + type: 'TypeApplication' + }); + + expect(evaluate('/** */' + 'var x: number', 'test.ts').type).toEqual({ + name: 'number', + type: 'NameExpression' + }); + + expect(evaluate('/** */' + 'let x: number', 'test.ts').type).toEqual({ + name: 'number', + type: 'NameExpression' + }); + + expect(evaluate('/** */' + 'const x: number = 42;', 'test.ts').type).toEqual({ + name: 'number', + type: 'NameExpression' + }); + + expect(evaluate('let x,' + '/** */' + 'y: number', 'test.ts').type).toEqual({ + name: 'number', + type: 'NameExpression' + }); + + expect( + evaluate('class C {' + '/** */' + 'x: number;' + '}', 'test.ts').type + ).toEqual({ + name: 'number', + type: 'NameExpression' + }); + + expect( + evaluate('class Foo { /** */ get b(): string { } }', 'test.ts').type + ).toEqual({ + name: 'string', + type: 'NameExpression' + }); + + expect( + evaluate('class Foo { /** */ set b(s: string) { } }', 'test.ts').type + ).toEqual({ + name: 'string', + type: 'NameExpression' + }); + + expect( + evaluate( + 'abstract class Foo { /** */ abstract get b(): string; }', + 'test.ts' + ).type + ).toEqual({ + name: 'string', + type: 'NameExpression' + }); + + expect( + evaluate( + 'abstract class Foo { /** */ abstract set b(s: string); }', + 'test.ts' + ).type + ).toEqual({ + name: 'string', + type: 'NameExpression' + }); + + expect(evaluate('/** */' + 'const x = 42;', 'test.ts').type).toEqual({ + name: 'number', + type: 'NameExpression' + }); + + expect(evaluate('/** */' + 'const x = "abc";', 'test.ts').type).toEqual({ + name: 'string', + type: 'NameExpression' + }); + + expect(evaluate('/** */' + 'const x = true;', 'test.ts').type).toEqual({ + name: 'boolean', + type: 'NameExpression' + }); + + expect( + evaluate('interface Foo { /** */ bar: string; }', 'test.ts').type + ).toEqual({ + name: 'string', + type: 'NameExpression' + }); + + expect( + evaluate('type Foo = { /** */ bar: string; }', 'test.ts').type + ).toEqual({ + name: 'string', + type: 'NameExpression' + }); + + expect(evaluate('enum Foo { /** */ A }', 'test.ts').type).toEqual({ + name: 'number', + type: 'NameExpression' + }); + + expect(evaluate('enum Foo { /** */ A = 2 }', 'test.ts').type).toEqual({ + name: 'number', + type: 'NameExpression' + }); + + expect(evaluate('enum Foo { /** */ A = "test" }', 'test.ts').type).toEqual({ + name: 'string', + type: 'NameExpression' + }); + + expect(evaluate('enum Foo { /** */ A = foo }', 'test.ts').type).toBe( + undefined + ); }); diff --git a/__tests__/lib/input/dependency.js b/__tests__/lib/input/dependency.js new file mode 100644 index 000000000..a69b65335 --- /dev/null +++ b/__tests__/lib/input/dependency.js @@ -0,0 +1,36 @@ +const os = require('os'); +const path = require('path'); +const fs = require('fs'); +const dependency = require('../../../src/input/dependency'); + +function inputs(contents) { + const dirEntry = os.tmpdir(); + const paths = {}; + for (const filename in contents) { + paths[filename] = path.join(dirEntry, '/', filename); + fs.writeFileSync(paths[filename], contents[filename]); + } + return { + paths + }; +} + +test('dependency', async function() { + const { paths, cleanup } = inputs({ + 'index.js': 'module.exports = 1;', + 'requires.js': "module.exports = require('./foo');", + 'foo.js': 'module.exports = 2;' + }); + { + const dependencies = await dependency([paths['index.js']], { + parseExtension: ['js'] + }); + expect(dependencies.length).toEqual(1); + } + { + const dependencies = await dependency([paths['requires.js']], { + parseExtension: ['js'] + }); + expect(dependencies.length).toEqual(2); + } +}); diff --git a/__tests__/lib/input/shallow.js b/__tests__/lib/input/shallow.js index 9e075b889..430a19b8c 100644 --- a/__tests__/lib/input/shallow.js +++ b/__tests__/lib/input/shallow.js @@ -1,4 +1,5 @@ -var path = require('path'), shallow = require('../../../src/input/shallow'); +const path = require('path'); +const shallow = require('../../../src/input/shallow'); test('shallow deps', async function() { const deps = await shallow( @@ -37,7 +38,7 @@ test('throws on non-string or object input', function() { }); test('shallow deps literal', async function() { - var obj = { + const obj = { file: 'foo.js', source: '//bar' }; diff --git a/__tests__/lib/lint.js b/__tests__/lib/lint.js index 6e06fef30..6ec6bd386 100644 --- a/__tests__/lib/lint.js +++ b/__tests__/lib/lint.js @@ -1,6 +1,6 @@ -var parse = require('../../src/parsers/javascript'), - lintComments = require('../../src/lint').lintComments, - formatLint = require('../../src/lint').formatLint; +const parse = require('../../src/parsers/javascript'); +const lintComments = require('../../src/lint').lintComments; +const formatLint = require('../../src/lint').formatLint; function toComment(fn, filename) { return parse( @@ -20,8 +20,8 @@ test('lintComments', function() { expect( evaluate(function() { /** - * @param {foo - */ + * @param {foo + */ }).errors ).toEqual([ { message: 'Braces are not balanced' }, @@ -31,17 +31,17 @@ test('lintComments', function() { expect( evaluate(function() { /** - * @param {Object} foo.bar - */ + * @param {Object} foo.bar + */ }).errors ).toEqual([{ commentLineNumber: 1, message: 'Parent of foo.bar not found' }]); expect( evaluate(function() { /** - * @param {String} foo - * @param {array} bar - */ + * @param {String} foo + * @param {array} bar + */ }).errors ).toEqual([ { @@ -54,14 +54,14 @@ test('lintComments', function() { expect( evaluate(function() { /** - * @param {string} foo - */ + * @param {string} foo + */ }).errors ).toEqual([]); }); test('formatLint', function() { - var comment = evaluate(function() { + const comment = evaluate(function() { // 2 // 3 /** 4 @@ -71,7 +71,7 @@ test('formatLint', function() { */ }); - var formatted = formatLint([comment]); + const formatted = formatLint([comment]); expect(formatted.match(/input.js/g)); expect(formatted.match(/4:1[^\n]+Braces are not balanced/g)); diff --git a/__tests__/lib/merge_config.js b/__tests__/lib/merge_config.js index 45a42836a..5c087702b 100644 --- a/__tests__/lib/merge_config.js +++ b/__tests__/lib/merge_config.js @@ -1,6 +1,6 @@ -var path = require('path'), - _ = require('lodash'), - mergeConfig = require('../../src/merge_config'); +const path = require('path'); +const _ = require('lodash'); +const mergeConfig = require('../../src/merge_config'); test('bad config', async function() { try { @@ -10,18 +10,43 @@ test('bad config', async function() { } }); -test('nc(mergeConfig)', function(done) { +test('right merging package configuration', async function() { // Omit configuration from output, for simplicity - var nc = _.curryRight(_.omit, 2)([ + const nc = _.curryRight(_.omit, 2)([ + 'config', + 'no-package', + 'parseExtension', + 'project-homepage', + 'project-version', + 'project-description' + ]); + return mergeConfig({ + config: path.join(__dirname, '../config_fixture/config.json'), + 'no-package': true, + 'project-name': 'cool Documentation' + }) + .then(nc) + .then(res => { + expect(res).toEqual({ + 'project-name': 'cool Documentation', + foo: 'bar' + }); + }); +}); + +test('nc(mergeConfig)', async function() { + // Omit configuration from output, for simplicity + const nc = _.curryRight(_.omit, 2)([ 'config', 'no-package', 'parseExtension', 'project-homepage', 'project-name', - 'project-version' + 'project-version', + 'project-description' ]); - Promise.all( + return Promise.all( [ [ { config: path.join(__dirname, '../config_fixture/config.json') }, @@ -74,7 +99,5 @@ test('nc(mergeConfig)', function(done) { expect(res).toEqual(pair[1]); }) ) - ).then(res => { - done(); - }); + ); }); diff --git a/__tests__/lib/module_filters.js b/__tests__/lib/module_filters.js new file mode 100644 index 000000000..cda60c7dc --- /dev/null +++ b/__tests__/lib/module_filters.js @@ -0,0 +1,13 @@ +const moduleFilters = require('../../src/module_filters'); + +test('moduleFilters.internalOnly', function() { + expect(moduleFilters.internalOnly('./foo')).toEqual(true); + expect(moduleFilters.internalOnly('foo')).toEqual(false); +}); + +test('moduleFilters.externals', function() { + expect(moduleFilters.externals([], {})('./foo')).toEqual(true); + expect( + moduleFilters.externals([], { external: 'node_modules' })('./foo') + ).toEqual(true); +}); diff --git a/__tests__/lib/nest.js b/__tests__/lib/nest.js index 40469949f..d73d92815 100644 --- a/__tests__/lib/nest.js +++ b/__tests__/lib/nest.js @@ -1,17 +1,16 @@ -var nestTag = require('../../src/nest').nestTag; +const nestTag = require('../../src/nest').nestTag; // Print a tree of tags in a way that's easy to test. -var printTree = indent => node => - `${new Array(indent + 1).join(' ')}- ${node.name}${node.properties ? '\n' : ''}${(node.properties || [ - ]) - .map(printTree(indent + 1)) - .join('\n')}`; +const printTree = indent => node => + `${new Array(indent + 1).join(' ')}- ${node.name}${ + node.properties ? '\n' : '' + }${(node.properties || []).map(printTree(indent + 1)).join('\n')}`; -var printNesting = params => +const printNesting = params => printTree(0)({ properties: nestTag(params), name: 'root' }); test('nest params - basic', function() { - var params = [ + const params = [ 'foo', 'foo.bar', 'foo.bar.third', @@ -29,7 +28,7 @@ test('nest params - basic', function() { }); test('nest params - multiple roots', function() { - var params = ['a', 'b', 'c'].map(name => ({ name })); + const params = ['a', 'b', 'c'].map(name => ({ name })); expect(printNesting(params)).toBe( `- root - a @@ -39,14 +38,14 @@ test('nest params - multiple roots', function() { }); test('nest params - missing parent', function() { - var params = ['foo', 'foo.bar.third'].map(name => ({ name })); + const params = ['foo', 'foo.bar.third'].map(name => ({ name })); expect(() => { nestTag(params); }).toThrow(); }); test('nest params - #658', function() { - var params = [ + const params = [ 'state', 'payload', 'payload.input_meter_levels', @@ -70,7 +69,7 @@ test('nest params - #658', function() { }); test('nest params - #554', function() { - var params = [ + const params = [ 'x', 'yIn', 'options', diff --git a/__tests__/lib/output/util/formatters.js b/__tests__/lib/output/util/formatters.js index 3861e12c4..e2dd2c1dc 100644 --- a/__tests__/lib/output/util/formatters.js +++ b/__tests__/lib/output/util/formatters.js @@ -1,4 +1,4 @@ -var formatters = require('../../../../src/output/util/formatters')(getHref); +const formatters = require('../../../../src/output/util/formatters')(getHref); test('formatters.parameters -- long form', function() { expect(formatters.parameters({})).toEqual('()'); diff --git a/__tests__/lib/parse.js b/__tests__/lib/parse.js index 2349ec8ff..8c7209c1c 100644 --- a/__tests__/lib/parse.js +++ b/__tests__/lib/parse.js @@ -1,10 +1,11 @@ -var parse = require('../../src/parsers/javascript'), - remark = require('remark'), - visit = require('unist-util-visit'); +const parse = require('../../src/parsers/javascript'); +const removePosition = require('../../src/remark-remove-position'); +const remarkParse = require('remark')().use(removePosition).parse; +const visit = require('unist-util-visit'); function pick(obj, props) { if (Array.isArray(props)) { - return props.reduce(function(memo, prop) { + return props.reduce(function (memo, prop) { if (obj[prop] !== undefined) { memo[prop] = obj[prop]; } @@ -25,71 +26,72 @@ function evaluate(fn, filename) { } function addJSDocTag(tree) { - visit(tree, 'link', function(node) { + visit(tree, 'link', function (node) { node.jsdoc = true; }); return tree; } -function removePosition(tree) { - visit(tree, function(node) { - delete node.position; - }); - return tree; -} - -test('parse - @abstract', function() { +test('parse - @abstract', function () { expect( - evaluate(function() { + evaluate(function () { /** @abstract */ })[0].abstract ).toBe(true); }); -test('parse - @access', function() { +test('parse - @access', function () { expect( - evaluate(function() { + evaluate(function () { /** @access public */ })[0].access ).toBe('public'); expect( - evaluate(function() { + evaluate(function () { /** @access protected */ })[0].access ).toBe('protected'); expect( - evaluate(function() { + evaluate(function () { /** @access private */ })[0].access ).toBe('private'); }); -test('parse - @alias', function() {}); +test('parse - @alias', function () {}); -test('parse - @arg', function() {}); +test('parse - @arg', function () {}); -test('parse - @argument', function() {}); +test('parse - @argument', function () {}); -test('parse - @augments', function() { +test('parse - @async', function () { expect( - evaluate(function() { + evaluate(function () { + /** @async */ + })[0].async + ).toBe(true); +}); + +test('parse - @augments', function () { + expect( + evaluate(function () { /** @augments Foo */ })[0].augments[0].name ).toBe('Foo'); }); -test('parse - @description', function() { +test('parse - @description', function () { expect( - evaluate(function() { + evaluate(function () { /** - * This is a free-form description - * @description This tagged description wins, and [is markdown](http://markdown.com). - */ + * This is a free-form description + * @description This tagged description wins, and [is markdown](http://markdown.com). + */ })[0].description ).toEqual( - remark().parse( + remarkParse( 'This tagged description wins, and [is markdown](http://markdown.com).' ) ); @@ -99,30 +101,30 @@ test('parse - @description', function() { * Dossier-style augments tag * https://github.com/google/closure-library/issues/746 */ -test('parse - @augments in dossier style', function() { +test('parse - @augments in dossier style', function () { expect( - evaluate(function() { + evaluate(function () { /** @augments {Foo} */ })[0].augments[0].name ).toBe('Foo'); }); -test('parse - @augments of complex passes through', function() { +test('parse - @augments of complex passes through', function () { expect( - evaluate(function() { + evaluate(function () { /** @augments {function()} */ })[0].augments ).toEqual([]); }); -test('parse - @author', function() {}); +test('parse - @author', function () {}); -test('parse - @borrows', function() {}); +test('parse - @borrows', function () {}); -test('parse - @callback', function() { +test('parse - @callback', function () { expect( pick( - evaluate(function() { + evaluate(function () { /** @callback name */ })[0], ['kind', 'name', 'type'] @@ -137,10 +139,10 @@ test('parse - @callback', function() { }); }); -test('parse - @class', function() { +test('parse - @class', function () { expect( pick( - evaluate(function() { + evaluate(function () { /** @class */ })[0], ['kind', 'name', 'type'] @@ -151,7 +153,7 @@ test('parse - @class', function() { expect( pick( - evaluate(function() { + evaluate(function () { /** @class name */ })[0], ['kind', 'name', 'type'] @@ -163,7 +165,7 @@ test('parse - @class', function() { expect( pick( - evaluate(function() { + evaluate(function () { /** @class {Object} name */ })[0], ['kind', 'name', 'type'] @@ -178,20 +180,20 @@ test('parse - @class', function() { }); }); -test('parse - @classdesc', function() { +test('parse - @classdesc', function () { expect( - evaluate(function() { + evaluate(function () { /** @classdesc test */ })[0].classdesc - ).toEqual(remark().parse('test')); + ).toEqual(remarkParse('test')); }); -test('parse - @const', function() {}); +test('parse - @const', function () {}); -test('parse - @constant', function() { +test('parse - @constant', function () { expect( pick( - evaluate(function() { + evaluate(function () { /** @constant */ })[0], ['kind', 'name', 'type'] @@ -202,7 +204,7 @@ test('parse - @constant', function() { expect( pick( - evaluate(function() { + evaluate(function () { /** @constant name */ })[0], ['kind', 'name', 'type'] @@ -214,7 +216,7 @@ test('parse - @constant', function() { expect( pick( - evaluate(function() { + evaluate(function () { /** @constant {Object} */ })[0], ['kind', 'name', 'type'] @@ -229,7 +231,7 @@ test('parse - @constant', function() { expect( pick( - evaluate(function() { + evaluate(function () { /** @constant {Object} name */ })[0], ['kind', 'name', 'type'] @@ -244,62 +246,77 @@ test('parse - @constant', function() { }); }); -test('parse - @constructor', function() {}); +test('parse - @constructor', function () {}); -test('parse - @constructs', function() {}); +test('parse - @constructs', function () {}); -test('parse - @copyright', function() { +test('parse - @copyright', function () { expect( - evaluate(function() { + evaluate(function () { /** @copyright test */ })[0].copyright - ).toEqual(remark().parse('test')); + ).toEqual(remarkParse('test')); }); -test('parse - @default', function() {}); +test('parse - @default', function () {}); -test('parse - @defaultvalue', function() {}); +test('parse - @defaultvalue', function () {}); -test('parse - @deprecated', function() { +test('parse - @deprecated', function () { expect( - evaluate(function() { + evaluate(function () { /** @deprecated test */ })[0].deprecated - ).toEqual(remark().parse('test')); + ).toEqual(remarkParse('test')); }); -test('parse - @desc', function() { +test('parse - @desc', function () { expect( - evaluate(function() { + evaluate(function () { /** @desc test */ })[0].description - ).toEqual(remark().parse('test')); + ).toEqual(remarkParse('test')); }); -test('parse - @description', function() { +test('parse - @description', function () { expect( - evaluate(function() { + evaluate(function () { /** @description test */ })[0].description - ).toEqual(remark().parse('test')); + ).toEqual(remarkParse('test')); }); -test('parse - description', function() { +test('parse - description', function () { expect( - evaluate(function() { + evaluate(function () { /** test */ })[0].description - ).toEqual(remark().parse('test')); + ).toEqual(remarkParse('test')); }); -test('parse - @emits', function() {}); +test('parse - @emits', function () {}); -test('parse - @enum', function() {}); +test('parse - @enum', function () { + expect( + pick( + evaluate(function () { + /** @enum {string} */ + })[0], + ['kind', 'type'] + ) + ).toEqual({ + kind: 'enum', + type: { + type: 'NameExpression', + name: 'string' + } + }); +}); -test('parse - @event', function() { +test('parse - @event', function () { expect( pick( - evaluate(function() { + evaluate(function () { /** @event name */ })[0], ['kind', 'name'] @@ -310,9 +327,9 @@ test('parse - @event', function() { }); }); -test('parse - @example', function() { +test('parse - @example', function () { expect( - evaluate(function() { + evaluate(function () { /** @example test */ })[0].examples[0] ).toEqual({ @@ -320,32 +337,32 @@ test('parse - @example', function() { }); expect( - evaluate(function() { + evaluate(function () { /** - * @example - * a - * b - */ + * @example + * a + * b + */ })[0].examples[0] ).toEqual({ description: 'a\nb' }); expect( - evaluate(function() { + evaluate(function () { /** - * @example caption - * a - * b - */ + * @example caption + * a + * b + */ })[0].examples[0] ).toEqual({ description: 'a\nb', - caption: remark().parse('caption') + caption: remarkParse('caption') }); expect( - evaluate(function() { + evaluate(function () { /** @example */ })[0].errors[0] ).toEqual({ @@ -354,22 +371,22 @@ test('parse - @example', function() { }); }); -test('parse - @exception', function() {}); +test('parse - @exception', function () {}); -test('parse - @exports', function() {}); +test('parse - @exports', function () {}); -test('parse - @extends', function() { +test('parse - @extends', function () { expect( - evaluate(function() { + evaluate(function () { /** @extends Foo */ })[0].augments[0].name ).toEqual('Foo'); }); -test('parse - @external', function() { +test('parse - @external', function () { expect( pick( - evaluate(function() { + evaluate(function () { /** @external name */ })[0], ['kind', 'name'] @@ -380,10 +397,10 @@ test('parse - @external', function() { }); }); -test('parse - @file', function() { +test('parse - @file', function () { expect( pick( - evaluate(function() { + evaluate(function () { /** @file */ })[0], ['kind'] @@ -394,27 +411,27 @@ test('parse - @file', function() { expect( pick( - evaluate(function() { + evaluate(function () { /** @file desc */ })[0], ['kind', 'description'] ) ).toEqual({ kind: 'file', - description: remark().parse('desc') + description: remarkParse('desc') }); }); -test('parse - @fileoverview', function() {}); +test('parse - @fileoverview', function () {}); -test('parse - @fires', function() {}); +test('parse - @fires', function () {}); -test('parse - @func', function() {}); +test('parse - @func', function () {}); -test('parse - @function', function() { +test('parse - @function', function () { expect( pick( - evaluate(function() { + evaluate(function () { /** @function */ })[0], ['kind', 'name'] @@ -425,7 +442,7 @@ test('parse - @function', function() { expect( pick( - evaluate(function() { + evaluate(function () { /** @function name */ })[0], ['kind', 'name'] @@ -434,76 +451,114 @@ test('parse - @function', function() { kind: 'function', name: 'name' }); + + // When @function takes a name, it is acting as a shorthand for @name and + // should detach from code the same way @name does. + expect( + evaluate(function () { + /** @function */ + function foo() {} + })[0].context.ast + ).toBeDefined(); + + expect( + evaluate(function () { + /** @function name */ + function foo() {} + })[0].context.ast + ).toBeUndefined(); +}); + +test('parse - @generator', function () { + expect( + evaluate(function () { + /** @generator */ + })[0].generator + ).toBe(true); }); -test('parse - @global', function() { +test('parse - @global', function () { expect( - evaluate(function() { + evaluate(function () { /** @global */ })[0].scope ).toBe('global'); }); -test('parse - @host', function() {}); +test('parse - @hideconstructor', function () { + expect( + evaluate(function () { + /** @hideconstructor */ + })[0].hideconstructor + ).toBe(true); +}); + +test('parse - @host', function () {}); -test('parse - @ignore', function() { +test('parse - @ignore', function () { expect( - evaluate(function() { + evaluate(function () { /** @ignore */ })[0].ignore ).toBe(true); }); -test('parse - @implements', function() {}); +test('parse - @implements', function () { + expect( + evaluate(function () { + /** @implements {Foo} */ + })[0].implements[0].name + ).toEqual('Foo'); +}); -test('parse - @inheritdoc', function() {}); +test('parse - @inheritdoc', function () {}); -test('parse - @inner', function() { +test('parse - @inner', function () { expect( - evaluate(function() { + evaluate(function () { /** @inner*/ })[0].scope ).toBe('inner'); }); -test('parse - @instance', function() { +test('parse - @instance', function () { expect( - evaluate(function() { + evaluate(function () { /** @instance*/ })[0].scope ).toBe('instance'); }); -test('parse - @interface', function() { +test('parse - @interface', function () { expect( - evaluate(function() { + evaluate(function () { /** @interface */ - })[0].interface - ).toEqual(true); + })[0].kind + ).toEqual('interface'); expect( - evaluate(function() { + evaluate(function () { /** @interface Foo */ })[0].name ).toEqual('Foo'); }); -test('parse - @kind', function() { +test('parse - @kind', function () { expect( - evaluate(function() { + evaluate(function () { /** @kind class */ })[0].kind ).toBe('class'); }); -test('parse - @license', function() {}); +test('parse - @license', function () {}); -test('parse - @listens', function() {}); +test('parse - @listens', function () {}); -test('parse - @member', function() { +test('parse - @member', function () { expect( pick( - evaluate(function() { + evaluate(function () { /** @member */ })[0], ['kind', 'name', 'type'] @@ -514,7 +569,7 @@ test('parse - @member', function() { expect( pick( - evaluate(function() { + evaluate(function () { /** @member name */ })[0], ['kind', 'name', 'type'] @@ -526,7 +581,7 @@ test('parse - @member', function() { expect( pick( - evaluate(function() { + evaluate(function () { /** @member {Object} */ })[0], ['kind', 'name', 'type'] @@ -541,7 +596,7 @@ test('parse - @member', function() { expect( pick( - evaluate(function() { + evaluate(function () { /** @member {Object} name */ })[0], ['kind', 'name', 'type'] @@ -556,22 +611,22 @@ test('parse - @member', function() { }); }); -test('parse - @memberof', function() { +test('parse - @memberof', function () { expect( - evaluate(function() { + evaluate(function () { /** @memberof test */ })[0].memberof ).toBe('test'); }); -test('parse - @method', function() {}); +test('parse - @method', function () {}); -test('parse - @mixes', function() {}); +test('parse - @mixes', function () {}); -test('parse - @mixin', function() { +test('parse - @mixin', function () { expect( pick( - evaluate(function() { + evaluate(function () { /** @mixin */ })[0], ['kind', 'name'] @@ -582,7 +637,7 @@ test('parse - @mixin', function() { expect( pick( - evaluate(function() { + evaluate(function () { /** @mixin name */ })[0], ['kind', 'name'] @@ -593,10 +648,10 @@ test('parse - @mixin', function() { }); }); -test('parse - @module', function() { +test('parse - @module', function () { expect( pick( - evaluate(function() { + evaluate(function () { /** @module */ })[0], ['kind', 'name', 'type'] @@ -607,7 +662,7 @@ test('parse - @module', function() { expect( pick( - evaluate(function() { + evaluate(function () { /** @module name */ })[0], ['kind', 'name', 'type'] @@ -619,7 +674,7 @@ test('parse - @module', function() { expect( pick( - evaluate(function() { + evaluate(function () { /** @module {Object} name */ })[0], ['kind', 'name', 'type'] @@ -634,18 +689,25 @@ test('parse - @module', function() { }); }); -test('parse - @name', function() { +test('parse - @name', function () { expect( - evaluate(function() { + evaluate(function () { /** @name test */ })[0].name ).toBe('test'); + + expect( + evaluate(function () { + /** @name foo */ + const bar = 0; + })[0].context.ast + ).toBeUndefined(); }); -test('parse - @namespace', function() { +test('parse - @namespace', function () { expect( pick( - evaluate(function() { + evaluate(function () { /** @namespace */ })[0], ['kind', 'name', 'type'] @@ -656,7 +718,7 @@ test('parse - @namespace', function() { expect( pick( - evaluate(function() { + evaluate(function () { /** @namespace name */ })[0], ['kind', 'name', 'type'] @@ -668,7 +730,7 @@ test('parse - @namespace', function() { expect( pick( - evaluate(function() { + evaluate(function () { /** @namespace {Object} name */ })[0], ['kind', 'name', 'type'] @@ -683,19 +745,19 @@ test('parse - @namespace', function() { }); }); -test('parse - @override', function() { +test('parse - @override', function () { expect( - evaluate(function() { + evaluate(function () { /** @override */ })[0].override ).toBe(true); }); -test('parse - @overview', function() {}); +test('parse - @overview', function () {}); -test('parse - @param', function() { +test('parse - @param', function () { expect( - evaluate(function() { + evaluate(function () { /** @param test */ })[0].params[0] ).toEqual({ @@ -705,7 +767,7 @@ test('parse - @param', function() { }); expect( - evaluate(function() { + evaluate(function () { /** @param {number} test */ })[0].params[0] ).toEqual({ @@ -719,7 +781,7 @@ test('parse - @param', function() { }); expect( - evaluate(function() { + evaluate(function () { /** @param {number} test - desc */ })[0].params[0] ).toEqual({ @@ -729,22 +791,22 @@ test('parse - @param', function() { name: 'number', type: 'NameExpression' }, - description: remark().parse('desc'), + description: remarkParse('desc'), lineNumber: 0 }); }); -test('parse - @private', function() { +test('parse - @private', function () { expect( - evaluate(function() { + evaluate(function () { /** @private */ })[0].access ).toBe('private'); }); -test('parse - @prop', function() { +test('parse - @prop', function () { expect( - evaluate(function() { + evaluate(function () { /** @prop {number} test */ })[0].properties[0] ).toEqual({ @@ -758,7 +820,7 @@ test('parse - @prop', function() { }); expect( - evaluate(function() { + evaluate(function () { /** @prop {number} test - desc */ })[0].properties[0] ).toEqual({ @@ -768,14 +830,14 @@ test('parse - @prop', function() { name: 'number', type: 'NameExpression' }, - description: remark().parse('desc'), + description: remarkParse('desc'), lineNumber: 0 }); }); -test('parse - @property', function() { +test('parse - @property', function () { expect( - evaluate(function() { + evaluate(function () { /** @property {number} test */ })[0].properties[0] ).toEqual({ @@ -789,7 +851,7 @@ test('parse - @property', function() { }); expect( - evaluate(function() { + evaluate(function () { /** @property {number} test - desc */ })[0].properties[0] ).toEqual({ @@ -799,47 +861,47 @@ test('parse - @property', function() { name: 'number', type: 'NameExpression' }, - description: remark().parse('desc'), + description: remarkParse('desc'), lineNumber: 0 }); }); -test('parse - @protected', function() { +test('parse - @protected', function () { expect( - evaluate(function() { + evaluate(function () { /** @protected */ })[0].access ).toBe('protected'); }); -test('parse - @public', function() {}); +test('parse - @public', function () {}); -test('parse - @readonly', function() { +test('parse - @readonly', function () { expect( - evaluate(function() { + evaluate(function () { /** @readonly */ })[0].readonly ).toBe(true); }); -test('parse - @requires', function() {}); +test('parse - @requires', function () {}); -test('parse - @return', function() { +test('parse - @return', function () { expect( - evaluate(function() { + evaluate(function () { /** @return test */ })[0].returns[0] ).toEqual({ title: 'returns', - description: remark().parse('test') + description: remarkParse('test') }); expect( - evaluate(function() { + evaluate(function () { /** @return {number} test */ })[0].returns[0] ).toEqual({ - description: remark().parse('test'), + description: remarkParse('test'), title: 'returns', type: { name: 'number', @@ -848,22 +910,22 @@ test('parse - @return', function() { }); }); -test('parse - @returns', function() { +test('parse - @returns', function () { expect( - evaluate(function() { + evaluate(function () { /** @returns test */ })[0].returns[0] ).toEqual({ title: 'returns', - description: remark().parse('test') + description: remarkParse('test') }); expect( - evaluate(function() { + evaluate(function () { /** @returns {number} test */ })[0].returns[0] ).toEqual({ - description: remark().parse('test'), + description: remarkParse('test'), title: 'returns', type: { name: 'number', @@ -872,54 +934,68 @@ test('parse - @returns', function() { }); }); -test('parse - @see', function() { +test('parse - @see', function () { expect( - evaluate(function() { - /** @see test */ + evaluate(function () { + /** @see [test](#test) */ })[0].sees - ).toEqual([remark().parse('test')]); + ).toEqual([ + { + title: 'sees', + description: remarkParse('[test](#test)') + } + ]); expect( - evaluate(function() { + evaluate(function () { /** - * @see a - * @see b - */ + * @see [a](#a) + * @see [b](#b) + */ })[0].sees - ).toEqual([remark().parse('a'), remark().parse('b')]); + ).toEqual([ + { + title: 'sees', + description: remarkParse('[a](#a)') + }, + { + title: 'sees', + description: remarkParse('[b](#b)') + } + ]); }); -test('parse - @since', function() {}); +test('parse - @since', function () {}); -test('parse - @static', function() { +test('parse - @static', function () { expect( - evaluate(function() { + evaluate(function () { /** @static */ })[0].scope ).toBe('static'); }); -test('parse - @summary', function() { +test('parse - @summary', function () { expect( - evaluate(function() { + evaluate(function () { /** @summary test */ })[0].summary - ).toEqual(remark().parse('test')); + ).toEqual(remarkParse('test')); }); -test('parse - @this', function() {}); +test('parse - @this', function () {}); -test('parse - @throws', function() { +test('parse - @throws', function () { expect( - evaluate(function() { + evaluate(function () { /** @throws desc */ })[0].throws[0] ).toEqual({ - description: remark().parse('desc') + description: remarkParse('desc') }); expect( - evaluate(function() { + evaluate(function () { /** @throws {Error} */ })[0].throws[0] ).toEqual({ @@ -930,7 +1006,7 @@ test('parse - @throws', function() { }); expect( - evaluate(function() { + evaluate(function () { /** @throws {Error} desc */ })[0].throws[0] ).toEqual({ @@ -938,51 +1014,51 @@ test('parse - @throws', function() { name: 'Error', type: 'NameExpression' }, - description: remark().parse('desc') + description: remarkParse('desc') }); expect( - evaluate(function() { + evaluate(function () { /** - * @throws a - * @throws b - */ + * @throws a + * @throws b + */ })[0].throws ).toEqual([ { - description: remark().parse('a') + description: remarkParse('a') }, { - description: remark().parse('b') + description: remarkParse('b') } ]); }); -test('parse - @todo', function() { +test('parse - @todo', function () { expect( - evaluate(function() { + evaluate(function () { /** @todo test */ })[0].todos - ).toEqual([remark().parse('test')]); + ).toEqual([remarkParse('test')]); expect( - evaluate(function() { + evaluate(function () { /** - * @todo a - * @todo b - */ + * @todo a + * @todo b + */ })[0].todos - ).toEqual([remark().parse('a'), remark().parse('b')]); + ).toEqual([remarkParse('a'), remarkParse('b')]); }); -test('parse - @tutorial', function() {}); +test('parse - @tutorial', function () {}); -test('parse - @type', function() {}); +test('parse - @type', function () {}); -test('parse - @typedef', function() { +test('parse - @typedef', function () { expect( pick( - evaluate(function() { + evaluate(function () { /** @typedef {Object} name */ })[0], ['kind', 'name', 'type'] @@ -997,23 +1073,71 @@ test('parse - @typedef', function() { }); }); -test('parse - @var', function() {}); +test('parse - @var', function () {}); -test('parse - @variation', function() { +test('parse - @variation', function () { expect( - evaluate(function() { + evaluate(function () { /** @variation 1 */ })[0].variation ).toBe(1); }); -test('parse - @version', function() {}); +test('parse - @version', function () {}); + +test('parse - @virtual', function () {}); + +test('parse - @yield', function () { + expect( + evaluate(function () { + /** @yield test */ + })[0].yields[0] + ).toEqual({ + title: 'yields', + description: remarkParse('test') + }); + + expect( + evaluate(function () { + /** @yield {number} test */ + })[0].yields[0] + ).toEqual({ + description: remarkParse('test'), + title: 'yields', + type: { + name: 'number', + type: 'NameExpression' + } + }); +}); + +test('parse - @yields', function () { + expect( + evaluate(function () { + /** @yields test */ + })[0].yields[0] + ).toEqual({ + title: 'yields', + description: remarkParse('test') + }); -test('parse - @virtual', function() {}); + expect( + evaluate(function () { + /** @yields {number} test */ + })[0].yields[0] + ).toEqual({ + description: remarkParse('test'), + title: 'yields', + type: { + name: 'number', + type: 'NameExpression' + } + }); +}); -test('parse - unknown tag', function() { +test('parse - unknown tag', function () { expect( - evaluate(function() { + evaluate(function () { /** @unknown */ })[0].errors[0] ).toEqual({ @@ -1022,43 +1146,35 @@ test('parse - unknown tag', function() { }); }); -test('parse - {@link}', function() { +test('parse - {@link}', function () { expect( - removePosition( - evaluate(function() { - /** {@link Foo} */ - })[0].description - ) - ).toEqual(addJSDocTag(removePosition(remark().parse('[Foo](Foo)')))); + evaluate(function () { + /** {@link Foo} */ + })[0].description + ).toEqual(addJSDocTag(remarkParse('[Foo](Foo)'))); expect( - removePosition( - evaluate(function() { - /** {@link Foo|text} */ - })[0].description - ) - ).toEqual(addJSDocTag(removePosition(remark().parse('[text](Foo)')))); + evaluate(function () { + /** {@link Foo|text} */ + })[0].description + ).toEqual(addJSDocTag(remarkParse('[text](Foo)'))); expect( - removePosition( - evaluate(function() { - /** {@link Foo text} */ - })[0].description - ) - ).toEqual(addJSDocTag(removePosition(remark().parse('[text](Foo)')))); + evaluate(function () { + /** {@link Foo text} */ + })[0].description + ).toEqual(addJSDocTag(remarkParse('[text](Foo)'))); }); -test('parse - {@linkcode}', function() {}); +test('parse - {@linkcode}', function () {}); -test('parse - {@linkplain}', function() {}); +test('parse - {@linkplain}', function () {}); -test('parse - {@tutorial}', function() { +test('parse - {@tutorial}', function () { expect( - removePosition( - evaluate(function() { - /** {@tutorial id} */ - })[0].description - ) + evaluate(function () { + /** {@tutorial id} */ + })[0].description ).toEqual({ type: 'root', children: [ @@ -1083,11 +1199,9 @@ test('parse - {@tutorial}', function() { }); expect( - removePosition( - evaluate(function() { - /** {@tutorial id|text} */ - })[0].description - ) + evaluate(function () { + /** {@tutorial id|text} */ + })[0].description ).toEqual({ type: 'root', children: [ @@ -1112,11 +1226,9 @@ test('parse - {@tutorial}', function() { }); expect( - removePosition( - evaluate(function() { - /** {@tutorial id text} */ - })[0].description - ) + evaluate(function () { + /** {@tutorial id text} */ + })[0].description ).toEqual({ type: 'root', children: [ diff --git a/__tests__/lib/parsers/javascript.js b/__tests__/lib/parsers/javascript.js index 46b840551..5f0ec80ee 100644 --- a/__tests__/lib/parsers/javascript.js +++ b/__tests__/lib/parsers/javascript.js @@ -1,5 +1,6 @@ -var remark = require('remark'), - parse = require('../../../src/parsers/javascript'); +const removePosition = require('../../../src/remark-remove-position'); +const remarkParse = require('remark')().use(removePosition).parse; +const parse = require('../../../src/parsers/javascript'); function toComments(source, filename, opts) { source = typeof source === 'string' ? source : '(' + source.toString() + ')'; @@ -12,41 +13,41 @@ function toComments(source, filename, opts) { ); } -test('parse - leading comment', function() { +test('parse - leading comment', function () { expect( - toComments(function() { + toComments(function () { /** one */ /** two */ function two() {} - }).map(function(c) { + }).map(function (c) { return c.description; }) - ).toEqual([remark().parse('one'), remark().parse('two')]); + ).toEqual([remarkParse('one'), remarkParse('two')]); }); -test('parse - trailing comment', function() { +test('parse - trailing comment', function () { expect( - toComments(function() { + toComments(function () { /** one */ function one() {} /** two */ - }).map(function(c) { + }).map(function (c) { return c.description; }) - ).toEqual([remark().parse('one'), remark().parse('two')]); + ).toEqual([remarkParse('one'), remarkParse('two')]); }); -test('parse - unknown tag', function() { +test('parse - unknown tag', function () { expect( - toComments(function() { + toComments(function () { /** @unknown */ })[0].tags[0].title ).toBe('unknown'); }); -test('parse - error', function() { +test('parse - error', function () { expect( - toComments(function() { + toComments(function () { /** @param {foo */ })[0].errors ).toEqual([ @@ -55,7 +56,7 @@ test('parse - error', function() { ]); }); -test('parse - document exported', function() { +test('parse - document exported', function () { expect( toComments( ` @@ -84,3 +85,24 @@ test('parse - document exported', function() { ).length ).toBe(2); }); + +test('parse - constructor comments', function () { + expect( + toComments(` + class Test { + /** @hideconstructor */ + constructor() {} + } + `).length + ).toBe(0); + + expect( + toComments(` + /** Test */ + export class Test { + /** @hideconstructor */ + constructor() {} + } + `)[0].constructorComment + ).toBeDefined(); +}); diff --git a/__tests__/lib/parsers/parse_to_ast.js b/__tests__/lib/parsers/parse_to_ast.js new file mode 100644 index 000000000..324fb49f1 --- /dev/null +++ b/__tests__/lib/parsers/parse_to_ast.js @@ -0,0 +1,23 @@ +const fs = require('fs'); +const { + commentToFlow, + parseToAst +} = require('../../../src/parsers/parse_to_ast'); + +describe('flow comments', () => { + const f = require.resolve('../../fixture/flow/comment-types'); + const src = fs.readFileSync(f, 'utf8'); + + test('preserve line numbers', () => { + const out = commentToFlow(src); + const linesSrc = src.split(/\n/); + const linesOut = out.split(/\n/); + + expect(linesOut).toHaveLength(linesSrc.length); + expect(linesSrc[14]).toEqual(linesOut[14]); + }); + + test('valid js', () => { + expect(() => parseToAst(src, 'test.js')).not.toThrowError(); + }); +}); diff --git a/__tests__/lib/parsers/polyglot.js b/__tests__/lib/parsers/polyglot.js deleted file mode 100644 index 10b268c58..000000000 --- a/__tests__/lib/parsers/polyglot.js +++ /dev/null @@ -1,81 +0,0 @@ -var fs = require('fs'), - path = require('path'), - remark = require('remark'), - polyglot = require('../../../src/parsers/polyglot'); - -test('polyglot', function() { - var file = path.resolve( - path.join(__dirname, '../../fixture/polyglot/blend.cpp') - ); - var result = polyglot({ - file, - source: fs.readFileSync(file, 'utf8') - }); - delete result[0].context.file; - delete result[0].context.sortKey; - expect(result).toEqual([ - { - errors: [], - augments: [], - examples: [], - properties: [], - throws: [], - todos: [], - sees: [], - context: { - loc: { end: { column: 3, line: 40 }, start: { column: 1, line: 35 } } - }, - description: remark().parse('This method moves a hex to a color'), - loc: { end: { column: 3, line: 40 }, start: { column: 1, line: 35 } }, - name: 'hexToUInt32Color', - params: [ - { - lineNumber: 3, - title: 'param', - name: 'hex', - type: { - name: 'string', - type: 'NameExpression' - } - } - ], - returns: [ - { - title: 'returns', - description: remark().parse('color'), - type: { - name: 'number', - type: 'NameExpression' - } - } - ], - tags: [ - { - description: null, - lineNumber: 2, - name: 'hexToUInt32Color', - title: 'name' - }, - { - description: null, - lineNumber: 3, - name: 'hex', - title: 'param', - type: { - name: 'string', - type: 'NameExpression' - } - }, - { - description: 'color', - lineNumber: 4, - title: 'returns', - type: { - name: 'number', - type: 'NameExpression' - } - } - ] - } - ]); -}); diff --git a/__tests__/lib/server.js b/__tests__/lib/server.js index 8ad9fa332..6b5187d94 100644 --- a/__tests__/lib/server.js +++ b/__tests__/lib/server.js @@ -1,23 +1,23 @@ -var get = require('../utils').get; -var File = require('vinyl'); -var getPort = require('get-port'); -var Server = require('../../src/serve/server'); +const get = require('../utils').get; +const File = require('vinyl'); +const getPort = require('get-port'); +const Server = require('../../src/serve/server'); -var jsFile = new File({ +const jsFile = new File({ cwd: '/', base: '/test/', path: '/test/file.js', contents: new Buffer('var test = 123;') }); -var coffeeFile = new File({ +const coffeeFile = new File({ cwd: '/', base: '/test/', path: '/test/file.coffee', contents: new Buffer('test = 123') }); -var indexFile = new File({ +const indexFile = new File({ cwd: '/', base: '/test/', path: '/test/index.html', @@ -26,10 +26,10 @@ var indexFile = new File({ test('server - throws on bad port', function() { expect(function() { - var server = new Server('${port}'); + const server = new Server('${port}'); }).toThrow(); expect(function() { - var server = new Server(); + const server = new Server(); }).toThrow(); }); @@ -45,7 +45,7 @@ test('server', async function() { } server.setFiles([coffeeFile]); - var text; + let text; text = await get(`http://localhost:${port}/file.coffee`); expect(text).toMatchSnapshot(); diff --git a/__tests__/lib/sort.js b/__tests__/lib/sort.js index df6ca8856..3941daf87 100644 --- a/__tests__/lib/sort.js +++ b/__tests__/lib/sort.js @@ -1,19 +1,20 @@ -var sort = require('../../src/sort'), path = require('path'); +const sort = require('../../src/sort'); +const path = require('path'); -test('sort stream alphanumeric', function() { - var apples = { context: { sortKey: 'a' }, name: 'apples' }; - var carrot = { context: { sortKey: 'b' }, name: 'carrot' }; - var banana = { context: { sortKey: 'c' }, name: 'bananas' }; +test('sort stream alphanumeric', function () { + const apples = { context: { sortKey: 'a' }, name: 'apples' }; + const carrot = { context: { sortKey: 'b' }, name: 'carrot' }; + const banana = { context: { sortKey: 'c' }, name: 'bananas' }; expect(sort([apples, carrot, banana])).toEqual([apples, carrot, banana]); expect(sort([carrot, apples, banana])).toEqual([apples, carrot, banana]); }); -test('sort stream with configuration', function() { - var apples = { context: { sortKey: 'a' }, name: 'apples' }; - var carrot = { context: { sortKey: 'b' }, name: 'carrot' }; - var bananas = { context: { sortKey: 'c' }, name: 'bananas' }; +test('sort stream with configuration', function () { + const apples = { context: { sortKey: 'a' }, name: 'apples' }; + const carrot = { context: { sortKey: 'b' }, name: 'carrot' }; + const bananas = { context: { sortKey: 'c' }, name: 'bananas' }; expect( sort([apples, carrot, bananas], { @@ -22,17 +23,17 @@ test('sort stream with configuration', function() { ).toEqual([carrot, bananas, apples]); }); -test('sort stream with configuration and a section', function() { - var apples = { context: { sortKey: 'a' }, name: 'apples' }; - var carrot = { context: { sortKey: 'b' }, name: 'carrot' }; - var bananas = { context: { sortKey: 'c' }, name: 'bananas' }; +test('sort stream with configuration and a section', function () { + const apples = { context: { sortKey: 'a' }, name: 'apples' }; + const carrot = { context: { sortKey: 'b' }, name: 'carrot' }; + const bananas = { context: { sortKey: 'c' }, name: 'bananas' }; - var section = { + const section = { name: 'This is the banana type', description: 'here lies bananas' }; - var sectionMarkdown = { + const sectionMarkdown = { name: 'This is the banana type', description: { type: 'root', @@ -42,51 +43,19 @@ test('sort stream with configuration and a section', function() { children: [ { type: 'text', - value: 'here lies bananas', - position: { - start: { - line: 1, - column: 1, - offset: 0 - }, - end: { - line: 1, - column: 18, - offset: 17 - }, - indent: [] - } + value: 'here lies bananas' } - ], - position: { - start: { - line: 1, - column: 1, - offset: 0 - }, - end: { - line: 1, - column: 18, - offset: 17 - }, - indent: [] - } + ] } - ], - position: { - start: { - line: 1, - column: 1, - offset: 0 - }, - end: { - line: 1, - column: 18, - offset: 17 - } - } + ] }, - kind: 'note' + kind: 'note', + path: [ + { + name: 'This is the banana type', + scope: 'static' + } + ] }; expect( @@ -96,17 +65,17 @@ test('sort stream with configuration and a section', function() { ).toEqual([carrot, sectionMarkdown, bananas, apples]); }); -test('sort an already-sorted stream containing a section/description', function() { +test('sort an already-sorted stream containing a section/description', function () { // this happens in the 'serve' task - var apples = { context: { sortKey: 'a' }, name: 'apples' }; - var carrot = { context: { sortKey: 'b' }, name: 'carrot' }; - var bananas = { context: { sortKey: 'c' }, name: 'bananas' }; + const apples = { context: { sortKey: 'a' }, name: 'apples' }; + const carrot = { context: { sortKey: 'b' }, name: 'carrot' }; + const bananas = { context: { sortKey: 'c' }, name: 'bananas' }; - var section = { + const section = { name: 'This is the banana type', description: 'here lies bananas' }; - var sectionMarkdown = { + const sectionMarkdown = { name: 'This is the banana type', description: { type: 'root', @@ -116,70 +85,38 @@ test('sort an already-sorted stream containing a section/description', function( children: [ { type: 'text', - value: 'here lies bananas', - position: { - start: { - line: 1, - column: 1, - offset: 0 - }, - end: { - line: 1, - column: 18, - offset: 17 - }, - indent: [] - } + value: 'here lies bananas' } - ], - position: { - start: { - line: 1, - column: 1, - offset: 0 - }, - end: { - line: 1, - column: 18, - offset: 17 - }, - indent: [] - } + ] } - ], - position: { - start: { - line: 1, - column: 1, - offset: 0 - }, - end: { - line: 1, - column: 18, - offset: 17 - } - } + ] }, - kind: 'note' + kind: 'note', + path: [ + { + name: 'This is the banana type', + scope: 'static' + } + ] }; - var config = { + const config = { toc: ['carrot', section, 'bananas'] }; - var sortOnce = sort([apples, carrot, bananas], config); - var sortTwice = sort(sortOnce, config); + const sortOnce = sort([apples, carrot, bananas], config); + const sortTwice = sort(sortOnce, config); expect(sortTwice).toEqual([carrot, sectionMarkdown, bananas, apples]); }); -test('sort toc with files', function() { - var apples = { context: { sortKey: 'a' }, name: 'apples' }; - var carrot = { context: { sortKey: 'b' }, name: 'carrot' }; - var bananas = { context: { sortKey: 'c' }, name: 'bananas' }; +test('sort toc with files', function () { + const apples = { context: { sortKey: 'a' }, name: 'apples' }; + const carrot = { context: { sortKey: 'b' }, name: 'carrot' }; + const bananas = { context: { sortKey: 'c' }, name: 'bananas' }; - var snowflake = { + const snowflake = { name: 'snowflake', - file: 'test/fixture/snowflake.md' + file: path.join(__dirname, '../fixture/snowflake.md') }; expect( @@ -189,12 +126,12 @@ test('sort toc with files', function() { ).toMatchSnapshot(); }); -test('sort toc with files absolute path', function() { - var apples = { context: { sortKey: 'a' }, name: 'apples' }; - var carrot = { context: { sortKey: 'b' }, name: 'carrot' }; - var bananas = { context: { sortKey: 'c' }, name: 'bananas' }; +test('sort toc with files absolute path', function () { + const apples = { context: { sortKey: 'a' }, name: 'apples' }; + const carrot = { context: { sortKey: 'b' }, name: 'carrot' }; + const bananas = { context: { sortKey: 'c' }, name: 'bananas' }; - var snowflake = { + const snowflake = { name: 'snowflake', file: path.join(__dirname, '../fixture/snowflake.md') }; @@ -204,3 +141,31 @@ test('sort toc with files absolute path', function() { }) ).toMatchSnapshot(); }); + +test('sort toc with files absolute path', function () { + const apples = { + context: { sortKey: 'a' }, + name: 'apples', + memberof: 'classB' + }; + const carrot = { + context: { sortKey: 'b' }, + name: 'carrot', + memberof: 'classB' + }; + const bananas = { + context: { sortKey: 'c' }, + name: 'bananas', + memberof: 'classB' + }; + + const snowflake = { + name: 'snowflake', + file: path.join(__dirname, '../fixture/snowflake.md') + }; + expect( + sort([carrot, apples, bananas], { + sortOrder: 'alpha' + }) + ).toMatchSnapshot(); +}); diff --git a/__tests__/lib/ts_doctrine.js b/__tests__/lib/ts_doctrine.js new file mode 100644 index 000000000..7aff99846 --- /dev/null +++ b/__tests__/lib/ts_doctrine.js @@ -0,0 +1,410 @@ +const tsDoctrine = require('../../src/ts_doctrine.js'); +const parse = require('../../src/parsers/javascript'); +const TSTYPE_TYPES = require('@babel/types').TSTYPE_TYPES; + +function toComment(fn, filename) { + return parse( + { + file: filename || 'test.ts', + source: fn instanceof Function ? '(' + fn.toString() + ')' : fn + }, + {} + )[0]; +} + +test('tsDoctrine', function () { + const types = TSTYPE_TYPES.slice(); + + function toDoctrineType(flowType) { + const annotation = toComment( + '/** add */function add(a: ' + flowType + ' ) { }' + ).context.ast.node.params[0].typeAnnotation.typeAnnotation; + if (types.indexOf(annotation.type) !== -1) { + types.splice(types.indexOf(annotation.type), 1); + } + return tsDoctrine(annotation); + } + + expect(toDoctrineType('number')).toEqual({ + type: 'NameExpression', + name: 'number' + }); + + expect(toDoctrineType('string')).toEqual({ + type: 'NameExpression', + name: 'string' + }); + + expect(toDoctrineType('boolean')).toEqual({ + type: 'NameExpression', + name: 'boolean' + }); + + expect(toDoctrineType('symbol')).toEqual({ + type: 'NameExpression', + name: 'symbol' + }); + + expect(toDoctrineType('object')).toEqual({ + type: 'NameExpression', + name: 'object' + }); + + expect(toDoctrineType('any')).toEqual({ + type: 'AllLiteral' + }); + + expect(toDoctrineType('this')).toEqual({ + type: 'NameExpression', + name: 'this' + }); + + expect(toDoctrineType('never')).toEqual({ + type: 'NameExpression', + name: 'never' + }); + + expect(toDoctrineType('(y:Foo) => Bar')).toEqual({ + type: 'FunctionType', + params: [ + { + type: 'ParameterType', + name: 'y', + expression: { + type: 'NameExpression', + name: 'Foo' + } + } + ], + result: { + type: 'NameExpression', + name: 'Bar' + } + }); + + expect(toDoctrineType('new (y:Foo) => Bar')).toEqual({ + type: 'FunctionType', + params: [ + { + type: 'ParameterType', + name: 'y', + expression: { + type: 'NameExpression', + name: 'Foo' + } + } + ], + result: { + type: 'NameExpression', + name: 'Bar' + } + }); + + expect(toDoctrineType('(...y: Foo) => Bar')).toEqual({ + type: 'FunctionType', + params: [ + { + type: 'RestType', + expression: { + type: 'ParameterType', + name: 'y', + expression: { + type: 'NameExpression', + name: 'Foo' + } + } + } + ], + result: { + type: 'NameExpression', + name: 'Bar' + } + }); + + expect(toDoctrineType('number | string')).toEqual({ + type: 'UnionType', + elements: [ + { + type: 'NameExpression', + name: 'number' + }, + { + type: 'NameExpression', + name: 'string' + } + ] + }); + + expect(toDoctrineType('(number | string)')).toEqual({ + type: 'UnionType', + elements: [ + { + type: 'NameExpression', + name: 'number' + }, + { + type: 'NameExpression', + name: 'string' + } + ] + }); + + expect(toDoctrineType('Object')).toEqual({ + type: 'NameExpression', + name: 'Object' + }); + + expect(toDoctrineType('namedType.propertyOfType')).toEqual({ + type: 'NameExpression', + name: 'namedType.propertyOfType' + }); + + expect(toDoctrineType('Array')).toEqual({ + applications: [ + { + type: 'NameExpression', + name: 'namedType.propertyOfType' + } + ], + expression: { + name: 'Array', + type: 'NameExpression' + }, + type: 'TypeApplication' + }); + + expect(toDoctrineType('Array>')).toEqual({ + applications: [ + { + applications: [ + { + name: 'boolean', + type: 'NameExpression' + } + ], + expression: { + type: 'NameExpression', + name: 'namedType.propertyOfType' + }, + type: 'TypeApplication' + } + ], + expression: { + name: 'Array', + type: 'NameExpression' + }, + type: 'TypeApplication' + }); + + expect(toDoctrineType('{ a: foo.bar }')).toEqual({ + fields: [ + { + key: 'a', + type: 'FieldType', + value: { + name: 'foo.bar', + type: 'NameExpression' + } + } + ], + type: 'RecordType' + }); + + expect(toDoctrineType('{ a: { b: foo.bar } }')).toEqual({ + fields: [ + { + key: 'a', + type: 'FieldType', + value: { + type: 'RecordType', + fields: [ + { + key: 'b', + type: 'FieldType', + value: { + name: 'foo.bar', + type: 'NameExpression' + } + } + ] + } + } + ], + type: 'RecordType' + }); + + expect(toDoctrineType('{ a: 1 }')).toEqual({ + type: 'RecordType', + fields: [ + { + type: 'FieldType', + key: 'a', + value: { + type: 'NumericLiteralType', + value: 1 + } + } + ] + }); + + expect(toDoctrineType('{ a?: string }')).toEqual({ + type: 'RecordType', + fields: [ + { + type: 'FieldType', + key: 'a', + value: { + type: 'OptionalType', + expression: { + name: 'string', + type: 'NameExpression' + } + } + } + ] + }); + + expect(toDoctrineType('unknown')).toEqual({ + type: 'AllLiteral' + }); + + expect(toDoctrineType('Array')).toEqual({ + type: 'NameExpression', + name: 'Array' + }); + + expect(toDoctrineType('Array')).toEqual({ + type: 'TypeApplication', + expression: { + type: 'NameExpression', + name: 'Array' + }, + applications: [ + { + type: 'NameExpression', + name: 'number' + } + ] + }); + + expect(toDoctrineType('number[]')).toEqual({ + type: 'TypeApplication', + expression: { + type: 'NameExpression', + name: 'Array' + }, + applications: [ + { + type: 'NameExpression', + name: 'number' + } + ] + }); + + expect(toDoctrineType('[]')).toEqual({ + type: 'ArrayType', + elements: [] + }); + + expect(toDoctrineType('[number]')).toEqual({ + type: 'ArrayType', + elements: [ + { + type: 'NameExpression', + name: 'number' + } + ] + }); + + expect(toDoctrineType('[string, boolean]')).toEqual({ + type: 'ArrayType', + elements: [ + { + type: 'NameExpression', + name: 'string' + }, + { + type: 'NameExpression', + name: 'boolean' + } + ] + }); + + expect(toDoctrineType('[string, ...boolean]')).toEqual({ + type: 'ArrayType', + elements: [ + { + type: 'NameExpression', + name: 'string' + }, + { + type: 'RestType', + expression: { + type: 'NameExpression', + name: 'boolean' + } + } + ] + }); + + expect(toDoctrineType('(y:any) => any')).toEqual({ + type: 'FunctionType', + params: [ + { + expression: { type: 'AllLiteral' }, + name: 'y', + type: 'ParameterType' + } + ], + result: { type: 'AllLiteral' } + }); + + expect(toDoctrineType('undefined')).toEqual({ + type: 'UndefinedLiteral' + }); + + expect(toDoctrineType('"value"')).toEqual({ + type: 'StringLiteralType', + value: 'value' + }); + + expect(toDoctrineType('1')).toEqual({ + type: 'NumericLiteralType', + value: 1 + }); + + expect(toDoctrineType('true')).toEqual({ + type: 'BooleanLiteralType', + value: true + }); + + expect(toDoctrineType('false')).toEqual({ + type: 'BooleanLiteralType', + value: false + }); + + expect(toDoctrineType('null')).toEqual({ + type: 'NullLiteral' + }); + + expect(toDoctrineType('void')).toEqual({ + type: 'VoidLiteral' + }); + + expect(types).toEqual([ + 'TSBigIntKeyword', + 'TSIntrinsicKeyword', + 'TSTypePredicate', + 'TSTypeQuery', + 'TSOptionalType', // handled - not top-level. + 'TSRestType', // handled - not top-level. + 'TSIntersectionType', // no equivalent in doctrine... + 'TSConditionalType', + 'TSInferType', + 'TSTypeOperator', + 'TSIndexedAccessType', + 'TSMappedType', + 'TSExpressionWithTypeArguments', + 'TSImportType' + ]); +}); diff --git a/__tests__/lib/walk.js b/__tests__/lib/walk.js index e63db9b20..2fa1702cd 100644 --- a/__tests__/lib/walk.js +++ b/__tests__/lib/walk.js @@ -1,8 +1,8 @@ -var walk = require('../../src/walk'); +const walk = require('../../src/walk').walk; -test('walk', function() { - test('flat comments', function(t) { - var comments = [{ name: 'Tom' }]; +describe('walk', function() { + test('flat comments', function() { + const comments = [{ name: 'Tom' }]; function renamer(comment, options) { if (options) { @@ -19,8 +19,8 @@ test('walk', function() { ]); }); - test('nested comments', function(t) { - var comments = [ + test('nested comments', function() { + const comments = [ { name: 'Tom', members: { diff --git a/__tests__/linker.js b/__tests__/linker.js index 41d646fef..da8aefedd 100644 --- a/__tests__/linker.js +++ b/__tests__/linker.js @@ -1,10 +1,10 @@ -var LinkerStack = require('../src/output/util/linker_stack'); +const LinkerStack = require('../src/output/util/linker_stack'); -test('linkerStack', function() { - var linkerStack = new LinkerStack({}); +test('linkerStack', function () { + const linkerStack = new LinkerStack({}); expect(linkerStack.link('string')).toBe( - 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String' + 'https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String' ); expect( @@ -23,7 +23,7 @@ test('linkerStack', function() { }).link('Image') ).toBe('http://custom.com/'); - var linker = new LinkerStack({ + const linker = new LinkerStack({ paths: { Image: 'http://custom.com/' } @@ -35,7 +35,7 @@ test('linkerStack', function() { namespace: 'Image' } ], - function(namespace) { + function (namespace) { return '#' + namespace; } ); diff --git a/__tests__/test.js b/__tests__/test.js index 2da48557e..c3c19f010 100644 --- a/__tests__/test.js +++ b/__tests__/test.js @@ -1,28 +1,28 @@ -var documentationSchema = require('documentation-schema'), - validate = require('json-schema'), - documentation = require('../'), - outputMarkdown = require('../src/output/markdown.js'), - outputMarkdownAST = require('../src/output/markdown_ast.js'), - outputHtml = require('../src/output/html.js'), - normalize = require('./utils').normalize, - glob = require('glob'), - pify = require('pify'), - path = require('path'), - fs = require('fs'), - _ = require('lodash'), - chdir = require('chdir'); - -var UPDATE = !!process.env.UPDATE; +const documentationSchema = require('documentation-schema'); +const validate = require('json-schema'); +const documentation = require('../'); +const outputMarkdown = require('../src/output/markdown.js'); +const outputMarkdownAST = require('../src/output/markdown_ast.js'); +const outputHtml = require('../src/output/html.js'); +const normalize = require('./utils').normalize; +const glob = require('glob'); +const pify = require('pify'); +const path = require('path'); +const fs = require('fs'); +const _ = require('lodash'); +const chdir = require('chdir'); + +const UPDATE = !!process.env.UPDATE; function makePOJO(ast) { return JSON.parse(JSON.stringify(ast)); } function readOptionsFromFile(file) { - var s = fs.readFileSync(file, 'utf-8'); - var lines = s.split(/\n/, 20); - for (var i = 0; i < lines.length; i++) { - var m = lines[i].match(/^\/\/\s+Options:\s*(.+)$/); + const s = fs.readFileSync(file, 'utf-8'); + const lines = s.split(/\n/, 20); + for (let i = 0; i < lines.length; i++) { + const m = lines[i].match(/^\/\/\s+Options:\s*(.+)$/); if (m) { return JSON.parse(m[1]); } @@ -31,8 +31,9 @@ function readOptionsFromFile(file) { } if (fs.existsSync(path.join(__dirname, '../.git'))) { - test('git option', async function() { - var file = path.join(__dirname, './fixture/simple.input.js'); + test('git option', async function () { + jest.setTimeout(10000); // 10 second timeout. After update flow.js on 0.56 version the test is executed more time. + const file = path.join(__dirname, './fixture/simple.input.js'); const result = await documentation.build([file], { github: true }); normalize(result); expect(result).toMatchSnapshot(); @@ -42,8 +43,8 @@ if (fs.existsSync(path.join(__dirname, '../.git'))) { }); } -test('document-exported error', async function() { - var file = path.join(__dirname, 'fixture', 'document-exported-bad', 'x.js'); +test('document-exported error', async function () { + const file = path.join(__dirname, 'fixture', 'document-exported-bad', 'x.js'); try { await documentation.build([file], { documentExported: true }); } catch (err) { @@ -51,7 +52,7 @@ test('document-exported error', async function() { } }); -test('external modules option', async function() { +test('external modules option', async function () { const result = await documentation.build( [path.join(__dirname, 'fixture', 'external.input.js')], { @@ -59,7 +60,7 @@ test('external modules option', async function() { } ); normalize(result); - var outputfile = path.join( + const outputfile = path.join( __dirname, 'fixture', '_external-deps-included.json' @@ -67,11 +68,11 @@ test('external modules option', async function() { expect(result).toMatchSnapshot(); }); -test('bad input', function() { +test('bad input', function () { glob .sync(path.join(__dirname, 'fixture/bad', '*.input.js')) - .forEach(function(file) { - test(path.basename(file), function(t) { + .forEach(function (file) { + test(path.basename(file), function () { return documentation .build([file], readOptionsFromFile(file)) .then(res => { @@ -89,44 +90,50 @@ test('bad input', function() { }); }); -test('html', function() { +describe('html', function () { glob .sync(path.join(__dirname, 'fixture/html', '*.input.js')) - .forEach(function(file) { - test(path.basename(file), async function(t) { + .forEach(function (file) { + test(path.basename(file), async function () { const result = await documentation.build( [file], readOptionsFromFile(file) ); const html = await outputHtml(result, {}); - var clean = html + const clean = html .sort((a, b) => a.path > b.path) .filter(r => r.path.match(/(html)$/)) - .map(r => r.contents) + .map(r => + r.contents + .toString() + .replace(/documentation \d+\.\d+\.\d+(-\w+(\.\d+)?)?/g, '') + .replace(/\d+\.\d+\.\d+(-\w+(\.\d+)?)?<\/code>/g, '') + ) .join('\n'); expect(clean).toMatchSnapshot(); }); }); }); -test('outputs', function() { +describe('outputs', function () { glob .sync(path.join(__dirname, 'fixture', '*.input.js')) - .forEach(function(file) { - test(path.basename(file), async function(tt) { - const result = await documentation.build( - [file], - readOptionsFromFile(file) - ); - test('markdown', async function(t) { + .forEach(function (file) { + describe(path.basename(file), function () { + let result = null; + beforeEach(async function () { + result = await documentation.build([file], readOptionsFromFile(file)); + }); + + test('markdown', async function () { const md = await outputMarkdown(_.cloneDeep(result), { markdownToc: true }); - expect(result.toString()).toMatchSnapshot(); + expect(md.toString()).toMatchSnapshot(); }); if (file.match(/es6.input.js/)) { - test('no markdown TOC', async function(t) { + test('no markdown TOC', async function () { const txt = await outputMarkdown(_.cloneDeep(result), { markdownToc: false }); @@ -134,20 +141,19 @@ test('outputs', function() { }); } - test('markdown AST', async function(t) { + test('markdown AST', async function () { const ast = await outputMarkdownAST(_.cloneDeep(result), {}); expect(ast).toMatchSnapshot(); }); - test('JSON', function(t) { + test('JSON', function () { normalize(result); - result.forEach(function(comment) { - validate( - comment, - documentationSchema.jsonSchema - ).errors.forEach(function(error) { - expect(error).toBeFalsy(); - }); + result.forEach(function (comment) { + validate(comment, documentationSchema.jsonSchema).errors.forEach( + function (error) { + expect(error).toBeFalsy(); + } + ); }); expect(makePOJO(result)).toMatchSnapshot(); }); @@ -155,23 +161,23 @@ test('outputs', function() { }); }); -test('highlightAuto md output', async function() { - var file = path.join( +test('highlightAuto md output', async function () { + const file = path.join( __dirname, 'fixture/auto_lang_hljs/multilanguage.input.js' - ), - hljsConfig = { - hljs: { highlightAuto: true, languages: ['js', 'css', 'html'] } - }; + ); + const hljsConfig = { + hljs: { highlightAuto: true, languages: ['js', 'css', 'html'] } + }; const result = await documentation.build(file, {}); const md = await outputMarkdown(result, hljsConfig); expect(md.toString()).toMatchSnapshot(); }); -test('config', async function() { - var file = path.join(__dirname, 'fixture', 'class.input.js'); - var outputfile = path.join(__dirname, 'fixture', 'class.config.output.md'); +test('config', async function () { + const file = path.join(__dirname, 'fixture', 'class.input.js'); + const outputfile = path.join(__dirname, 'fixture', 'class.config.output.md'); const out = await documentation.build([file], { config: path.join(__dirname, 'fixture', 'simple.config.yml') }); @@ -179,7 +185,16 @@ test('config', async function() { expect(md).toMatchSnapshot(); }); -test('multi-file input', async function() { +test('config with nested sections', async function () { + const file = path.join(__dirname, 'fixture', 'sections.input.js'); + const out = await documentation.build([file], { + config: path.join(__dirname, 'fixture', 'sections.config.yml') + }); + const md = await outputMarkdown(out, {}); + expect(md).toMatchSnapshot(); +}); + +test('multi-file input', async function () { const result = await documentation.build( [ path.join(__dirname, 'fixture', 'simple.input.js'), @@ -191,7 +206,7 @@ test('multi-file input', async function() { expect(result).toMatchSnapshot(); }); -test('accepts simple relative paths', async function() { +test('accepts simple relative paths', async function () { await pify(chdir)(__dirname); const data = await documentation.build( '__tests__/fixture/simple.input.js', @@ -200,7 +215,7 @@ test('accepts simple relative paths', async function() { expect(data.length).toBe(1); }); -test('.lint', async function() { +test('.lint', async function () { await pify(chdir)(__dirname); const data = await documentation.lint( '__tests__/fixture/simple.input.js', @@ -209,7 +224,7 @@ test('.lint', async function() { expect(data).toBe(''); }); -test('.lint with bad input', async function() { +test('.lint with bad input', async function () { await pify(chdir)(__dirname); try { await documentation.lint('__tests__/fixture/bad/syntax.input', { @@ -219,3 +234,47 @@ test('.lint with bad input', async function() { expect(err).toBeTruthy(); } }); + +test('Vue file', async function () { + await pify(chdir)(__dirname); + const data = await documentation.build('__tests__/fixture/vue.input.vue', {}); + normalize(data); + expect(data).toMatchSnapshot(); +}); + +test('Vue file', async function () { + await pify(chdir)(__dirname); + const data = await documentation.build( + '__tests__/fixture/vue-no-script.input.vue', + {} + ); + normalize(data); + expect(data).toMatchSnapshot(); +}); + +test('Use Source attribute only', async function () { + await pify(chdir)(__dirname); + const documentationSource = ` +/** + * This Vue Component is a test + * @returns {vue-tested} vue-tested component + */ +export default { + + props: { + + /** + * This is a number + */ + myNumber: { + default: 42, + type: Number + } + } +}`; + const data = await documentation.build([{ source: documentationSource }], { + shallow: true + }); + normalize(data); + expect(data).toMatchSnapshot(); +}); diff --git a/__tests__/utils.js b/__tests__/utils.js index 9031b6181..6d67bc93c 100644 --- a/__tests__/utils.js +++ b/__tests__/utils.js @@ -1,12 +1,12 @@ -var http = require('http'); -import { walk } from '../src/walk'; -var concat = require('concat-stream'); +const http = require('http'); +const { walk } = require('../src/walk'); +const concat = require('concat-stream'); function get(url, callback) { return new Promise((resolve, reject) => { - http.get(url, function(res) { + http.get(url, function (res) { res.pipe( - concat(function(text) { + concat(function (text) { if (res.statusCode >= 400) { return reject(res.statusCode); } @@ -18,14 +18,17 @@ function get(url, callback) { } function normalize(comments) { - return walk(comments, function(comment) { - var hasGithub = !!comment.context.github; - var path = comment.context.path; + return walk(comments, function (comment) { + const hasGithub = !!comment.context.github; + const path = comment.context.path; comment.context = { loc: comment.context.loc }; if (hasGithub) { - comment.context.github = '[github]'; + comment.context.github = { + path: '[github]', + url: '[github]' + }; } if (path) { comment.context.path = path; @@ -40,7 +43,8 @@ module.exports.mockRepo = { path: { '.git': { HEAD: 'ref: refs/heads/master', - config: '[remote "origin"]\n' + + config: + '[remote "origin"]\n' + 'url = git@github.com:foo/bar.git\n' + 'fetch = +refs/heads/*:refs/remotes/origin/*', refs: { @@ -60,7 +64,8 @@ module.exports.mockRepo = { path: { '.git': { HEAD: 'e4cb2ffe677571d0503e659e4e64e01f45639c62', - config: '[remote "origin"]\n' + + config: + '[remote "origin"]\n' + 'url = git@github.com:foo/bar.git\n' + 'fetch = +refs/heads/*:refs/remotes/origin/*' }, @@ -69,6 +74,32 @@ module.exports.mockRepo = { } } }, + submodule: { + '/my': { + repository: { + 'my.submodule': { + '.git': 'gitdir: ../.git/modules/my.submodule', + 'index.js': 'module.exports = 42;' + }, + '.git': { + config: + '[submodule "my.submodule"]\n' + + 'url = https://github.com/foo/bar\n' + + 'active = true', + modules: { + 'my.submodule': { + HEAD: 'ref: refs/heads/master', + refs: { + heads: { + master: 'this_is_the_sha' + } + } + } + } + } + } + } + }, malformed: { '/my': { repository: { @@ -85,7 +116,8 @@ module.exports.mockRepo = { path: { '.git': { HEAD: 'ref: refs/heads/master', - config: '[remote "origin"]\n' + + config: + '[remote "origin"]\n' + 'url = git@github.enterprise.com:foo/bar.git\n' + 'fetch = +refs/heads/*:refs/remotes/origin/*', refs: { diff --git a/bin/documentation.js b/bin/documentation.js index 7c8d41ce4..30635bf8c 100755 --- a/bin/documentation.js +++ b/bin/documentation.js @@ -2,10 +2,11 @@ /* eslint no-console: 0 */ -var yargs = require('yargs'); -var commands = require('../lib/commands'); +const yargs = require('yargs'); +const commands = require('../src/commands'); -var argv = yargs +const argv = yargs + .strict() .command(commands.serve) .command(commands.build) .command(commands.lint) @@ -19,9 +20,9 @@ var argv = yargs return yargs.exit(1); } }) - .version(function() { - return require('../package').version; - }) + .example('documentation build foo.js -f md > API.md') + .example('documentation readme index.js -s "API Docs" --github') + .version() .usage( `Usage: diff --git a/circle.yml b/circle.yml deleted file mode 100644 index 3569827f5..000000000 --- a/circle.yml +++ /dev/null @@ -1,8 +0,0 @@ -machine: - node: - version: 7 -test: - override: - - npm run test-ci - post: - - ./node_modules/.bin/coveralls < coverage/lcov.info diff --git a/declarations/comment.js b/declarations/comment.js index af0a51bf5..e3f0bfbe4 100644 --- a/declarations/comment.js +++ b/declarations/comment.js @@ -1,7 +1,6 @@ /* @flow */ /* eslint no-use-before-define: 0 */ type DocumentationConfig = { - polyglot?: boolean, inferPrivate?: string, noPackage?: boolean, toc?: Array, @@ -12,7 +11,13 @@ type DocumentationConfig = { external?: Array, theme: string, requireExtension?: Array, - parseExtension: Array + parseExtension: Array, + noReferenceLinks?: boolean, + markdownToc?: boolean, + markdownTocMaxDepth?: number, + documentExported?: boolean, + resolve?: string, + hljs?: Object }; type CommentError = { @@ -45,7 +50,7 @@ type SourceFile = { type CommentContext = { sortKey: string, file: string, - ast: Object, + ast?: Object, loc: CommentLoc, code: string, github?: CommentContextGitHub @@ -63,7 +68,8 @@ type CommentTag = { default?: any, lineNumber?: number, type?: DoctrineType, - properties?: Array + properties?: Array, + readonly?: boolean }; type Comment = { @@ -72,6 +78,7 @@ type Comment = { augments: Array, examples: Array, + implements: Array, params: Array, properties: Array, returns: Array, @@ -85,6 +92,7 @@ type Comment = { classdesc?: Remark, members: CommentMembers, + constructorComment?: Comment, name?: string, kind?: Kind, @@ -92,6 +100,9 @@ type Comment = { memberof?: string, scope?: Scope, access?: Access, + readonly?: boolean, + abstract?: boolean, + generator?: boolean, alias?: string, copyright?: string, @@ -101,15 +112,19 @@ type Comment = { since?: string, lends?: string, override?: boolean, + hideconstructor?: true, type?: DoctrineType, context: CommentContext, + loc: CommentLoc, path?: Array<{ name: string, scope: Scope - }> + }>, + + ignore?: boolean }; type CommentMembers = { diff --git a/docs/CONFIG.md b/docs/CONFIG.md index 7abdfc5ff..6dab84d58 100644 --- a/docs/CONFIG.md +++ b/docs/CONFIG.md @@ -53,3 +53,22 @@ and areas on the sphere. ``` it would produce the same output as the previous example. + +## Groups + +The `children` property can be used to group content under headings instead of just arranging them in order. Example: + +```yml +toc: + - name: Geography + children: + - Map + - LngLat + - LngLatBounds + - name: Navigation + description: | + Here are some helper functions for navigation. + children: + - shortestPath + - salesman +``` diff --git a/docs/FAQ.md b/docs/FAQ.md index e3dc69b81..e90a5c28a 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -21,7 +21,7 @@ There are two main ways: ## How does `documentation` differ from JSDoc? -JSDoc is both a **standard syntax for documentating code** and an +JSDoc is both a **standard syntax for documenting code** and an application, also called `jsdoc`, that processes that syntax into documentation. `documentation` uses the JSDoc syntax and provides an alternative to the `jsdoc` @@ -43,8 +43,6 @@ documentation. and [untagged](https://github.com/jsdoc3/jsdoc/blob/master/package.json#L25) [TaffyDB](http://www.taffydb.com/) project. * Uses high-quality node modules for syntax parsing, argument parsing, and other tasks: separates concerns so that we can focus on a robust solution -* Customization points like plugins & templates are well documented and - flexible ## Why use `documentation` instead of writing a Markdown file by hand? @@ -54,7 +52,7 @@ documentation. * The JSDoc syntax exposes a powerful, standardized type syntax to, for example, express parameter types like 'an array of strings'. as `Array`, and to support custom object types with inter-linking -* The [eslint valid-jsdoc rule](http://eslint.org/docs/rules/valid-jsdoc.html) +* The [eslint valid-jsdoc rule](https://eslint.org/docs/rules/valid-jsdoc.html) makes it possible to require documentation as part of your linting step, ensuring that new code doesn't lower documentation coverage. diff --git a/docs/GETTING_STARTED.md b/docs/GETTING_STARTED.md index 5f9d9515d..1fc98ffe8 100644 --- a/docs/GETTING_STARTED.md +++ b/docs/GETTING_STARTED.md @@ -1,13 +1,13 @@ # Getting Started -`documentation` is a **documentation generator**. It's used to generates documentation from +`documentation` is a **documentation generator**. It's used to generate documentation from comments _within your code_. `documentation` processes JavaScript comments in the JSDoc format. **But don't worry! Even though it's embedded in your code, JSDoc is not code. It's a simple and standard syntax for writing documentation. You don't need to be a developer to use it.** -Before you continue, make sure `documentation` is on your system (do `npm install -g documentation`, if not installed). +Before you continue, make sure `documentation` is on your system. (If it's not installed, run `npm install -g documentation`.) Now, let's dive in. @@ -31,7 +31,7 @@ function addOne(input) { The comment before the `addOne` function is a JSDoc comment. Note that it begins with `/**` instead of `/*`. JSDoc requires this. -If you were to write a comment like +If you were to write a comment like this: ```js // --- INVALID - this is ignored by JSDOC --- @@ -40,7 +40,7 @@ If you were to write a comment like // @returns {number} that number, plus one. ``` -the comment would be ignored by `documentation` because it uses `//` syntax instead of `/**`. +...the comment would be ignored by `documentation`, because it uses `//` syntax instead of `/**`. It's not valid JSDoc syntax. Let's break down the earlier JSDoc example: @@ -62,10 +62,9 @@ On the second line: * `@param` is **a tag**: This tag indicates that we'll be documenting a function's parameter. * `{number}` is **a type**. It says that the input to this function is - a JavaScript "number". It could also say `{string}`, + a JavaScript "number." It could also say `{string}`, `{Object}`, `{Date}`, or any other JavaScript built-in type. And if you - defined a custom class, like `FooClass`, you can use it as a type too by - saying `{FooClass}`. + defined a custom class, like `FooClass`, you can use it as a type, too! Just say `{FooClass}`. * `input` is the name of the input variable. It matches what the code says right below it (`function addOne(input)`). * `any number` is the description of the input. @@ -82,7 +81,7 @@ This is the syntax that describes an optional parameter: * @param {number} [input=5] any number ``` -If an input is omitted, the default value of 5 will be passed to the function. +If an input is omitted, the default value of `5` will be passed to the function. ## What `documentation` does, so you don't have to @@ -90,29 +89,29 @@ If an input is omitted, the default value of 5 will be passed to the function. you want to read the code for yourself, here's a summary of its magic: **Inference**: JSDoc lets you specify absolutely everything about your code: -use @name to say what something is called, @kind for whether it's a function -or a class, @param for its parameters, and so on. But writing all of that +use `@name` to say what something is called, `@kind` for whether it's a function +or a class, `@param` for its parameters, and so on. But writing all of that explicitly is tedious, so where it can, `documentation` automatically -populates @name, @kind, and @memberof tags based on its reading of the +populates `@name`, `@kind`, and `@memberof` tags based on its reading of the code. **Normalization**: JSDoc has multiple words for the same thing: you can -say @augments or @extends and they'll do the same thing. +say `@augments` or `@extends`, and they'll do the same thing. ## Development Process If you're contributing documentation to a large project, there -are tools to help: [eslint's valid-jsdoc](http://eslint.org/docs/rules/valid-jsdoc) rule +are tools to help: [eslint's valid-jsdoc](https://eslint.org/docs/rules/valid-jsdoc) rule lets you confirm the presence of, and validate, JSDoc comments as part of an automated style check. ## The Tags -[usejsdoc.com](http://usejsdoc.org/index.html) covers all available tags in the +[**`jsdoc.app`**](https://jsdoc.app/) covers all available tags in the JSDoc syntax, and is a great reference. The most commonly used tags are: -* @param - input given to a function as an argument +* @param - input is given to a function as an argument * @returns - output value of a function * @name - explicitly set the documented name of a function, class, or variable * @private - you can use @private to document @@ -126,7 +125,7 @@ try [using a plugin for JSDoc](https://github.com/documentationjs/documentation/ ## Flow type annotations -Alternatively, [Flow](http://flowtype.org/) type annotations allows for a compacter syntax: +Alternatively, [Flow](https://flow.org) type annotations allows for a more compact syntax: ```js /** diff --git a/docs/NODE_API.md b/docs/NODE_API.md index 8be51f979..9662ac5bc 100644 --- a/docs/NODE_API.md +++ b/docs/NODE_API.md @@ -2,12 +2,22 @@ ### Table of Contents -- [lint](#lint) -- [build](#build) -- [formats](#formats) -- [formats.html](#formatshtml) -- [formats.markdown](#formatsmarkdown) -- [formats.json](#formatsjson) +* [lint][1] + * [Parameters][2] + * [Examples][3] +* [build][4] + * [Parameters][5] + * [Examples][6] +* [formats][7] +* [formats.html][8] + * [Parameters][9] + * [Examples][10] +* [formats.markdown][11] + * [Parameters][12] + * [Examples][13] +* [formats.json][14] + * [Parameters][15] + * [Examples][16] ## lint @@ -15,26 +25,24 @@ Lint files for non-standard or incorrect documentation information, returning a potentially-empty string of lint information intended for human-readable output. -**Parameters** +### Parameters -- `indexes` **([Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)> | [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String))** files to process -- `args` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** args - - `args.external` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)>** a string regex / glob match pattern +* `indexes` **([Array][17]<[string][18]> | [string][18])** files to process +* `args` **[Object][19]** args + + * `args.external` **[Array][17]<[string][18]>** a string regex / glob match pattern that defines what external modules will be whitelisted and included in the generated documentation. - - `args.polyglot` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** parse comments with a regex rather than - a proper parser. This enables support of non-JavaScript languages but - reduces documentation's ability to infer structure of code. (optional, default `false`) - - `args.shallow` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** whether to avoid dependency parsing - even in JavaScript code. With the polyglot option set, this has no effect. (optional, default `false`) - - `args.inferPrivate` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)?** a valid regular expression string + * `args.shallow` **[boolean][20]** whether to avoid dependency parsing + even in JavaScript code. (optional, default `false`) + * `args.inferPrivate` **[string][18]?** a valid regular expression string to infer whether a code element should be private, given its naming structure. For instance, you can specify `inferPrivate: '^_'` to automatically treat methods named like `_myMethod` as private. - - `args.extension` **([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)>)?** treat additional file extensions + * `args.extension` **([string][18] | [Array][17]<[string][18]>)?** treat additional file extensions as JavaScript, extending the default set of `js`, `es6`, and `jsx`. -**Examples** +### Examples ```javascript documentation.lint('file.js').then(lintOutput => { @@ -47,40 +55,39 @@ documentation.lint('file.js').then(lintOutput => { }); ``` -Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)** promise with lint results +Returns **[Promise][21]** promise with lint results ## build Generate JavaScript documentation as a list of parsed JSDoc comments, given a root file as a path. -**Parameters** +### Parameters + +* `indexes` **([Array][17]<[string][18]> | [string][18])** files to process +* `args` **[Object][19]** args -- `indexes` **([Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)> | [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String))** files to process -- `args` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** args - - `args.external` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)>** a string regex / glob match pattern + * `args.external` **[Array][17]<[string][18]>** a string regex / glob match pattern that defines what external modules will be whitelisted and included in the generated documentation. - - `args.polyglot` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** parse comments with a regex rather than - a proper parser. This enables support of non-JavaScript languages but - reduces documentation's ability to infer structure of code. (optional, default `false`) - - `args.shallow` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** whether to avoid dependency parsing - even in JavaScript code. With the polyglot option set, this has no effect. (optional, default `false`) - - `args.order` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object))>** optional array that + * `args.shallow` **[boolean][20]** whether to avoid dependency parsing + even in JavaScript code. (optional, default `false`) + * `args.order` **[Array][17]<([string][18] | [Object][19])>** optional array that defines sorting order of documentation (optional, default `[]`) - - `args.access` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)>** an array of access levels + * `args.access` **[Array][17]<[string][18]>** an array of access levels to output in documentation (optional, default `[]`) - - `args.hljs` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)?** hljs optional args - - `args.hljs.highlightAuto` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** hljs automatically detect language (optional, default `false`) - - `args.hljs.languages` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** languages for hljs to choose from - - `args.inferPrivate` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)?** a valid regular expression string + * `args.hljs` **[Object][19]?** hljs optional args + + * `args.hljs.highlightAuto` **[boolean][20]** hljs automatically detect language (optional, default `false`) + * `args.hljs.languages` **[Array][17]?** languages for hljs to choose from + * `args.inferPrivate` **[string][18]?** a valid regular expression string to infer whether a code element should be private, given its naming structure. For instance, you can specify `inferPrivate: '^_'` to automatically treat methods named like `_myMethod` as private. - - `args.extension` **([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)>)?** treat additional file extensions + * `args.extension` **([string][18] | [Array][17]<[string][18]>)?** treat additional file extensions as JavaScript, extending the default set of `js`, `es6`, and `jsx`. -**Examples** +### Examples ```javascript var documentation = require('documentation'); @@ -95,7 +102,7 @@ documentation.build(['index.js'], { }); ``` -Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)** results +Returns **[Promise][21]** results ## formats @@ -108,13 +115,14 @@ output. Formats documentation as HTML. -**Parameters** +### Parameters + +* `comments` **[Array][17]<[Comment][22]>** parsed comments +* `config` **[Object][19]** Options that can customize the output -- `comments` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[Comment](https://developer.mozilla.org/en-US/docs/Web/API/Comment/Comment)>** parsed comments -- `config` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Options that can customize the output - - `config.theme` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Name of a module used for an HTML theme. (optional, default `'default_theme'`) + * `config.theme` **[string][18]** Name of a module used for an HTML theme. (optional, default `'default_theme'`) -**Examples** +### Examples ```javascript var documentation = require('documentation'); @@ -128,19 +136,19 @@ documentation.build(['index.js']) }); ``` -Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)>>** Promise with results +Returns **[Promise][21]<[Array][17]<[Object][19]>>** Promise with results ## formats.markdown Formats documentation as -[Markdown](http://daringfireball.net/projects/markdown/). +[Markdown][23]. -**Parameters** +### Parameters -- `comments` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)>** parsed comments -- `args` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Options that can customize the output +* `comments` **[Array][17]<[Object][19]>** parsed comments +* `args` **[Object][19]** Options that can customize the output -**Examples** +### Examples ```javascript var documentation = require('documentation'); @@ -154,17 +162,17 @@ documentation.build(['index.js']) }); ``` -Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)>** a promise of the eventual value +Returns **[Promise][21]<[string][18]>** a promise of the eventual value ## formats.json Formats documentation as a JSON string. -**Parameters** +### Parameters -- `comments` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[Comment](https://developer.mozilla.org/en-US/docs/Web/API/Comment/Comment)>** parsed comments +* `comments` **[Array][17]<[Comment][22]>** parsed comments -**Examples** +### Examples ```javascript var documentation = require('documentation'); @@ -178,4 +186,50 @@ documentation.build(['index.js']) }); ``` -Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)>** +Returns **[Promise][21]<[string][18]>** + +[1]: #lint + +[2]: #parameters + +[3]: #examples + +[4]: #build + +[5]: #parameters-1 + +[6]: #examples-1 + +[7]: #formats + +[8]: #formatshtml + +[9]: #parameters-2 + +[10]: #examples-2 + +[11]: #formatsmarkdown + +[12]: #parameters-3 + +[13]: #examples-3 + +[14]: #formatsjson + +[15]: #parameters-4 + +[16]: #examples-4 + +[17]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array + +[18]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String + +[19]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object + +[20]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean + +[21]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise + +[22]: https://developer.mozilla.org/docs/Web/API/Comment/Comment + +[23]: https://daringfireball.net/projects/markdown/ diff --git a/docs/POLYGLOT.md b/docs/POLYGLOT.md index c2c9373ce..f0005ae0b 100644 --- a/docs/POLYGLOT.md +++ b/docs/POLYGLOT.md @@ -1,39 +1,2 @@ -# About documentation.js, polyglot mode, and file extensions - -Base assumptions: - -* documentation.js subsists on a combination of _source comments_ and - _smart inferences from source code_. -* The default mode of documentation.js is parsing JavaScript, but it has another - mode, called `--polyglot` mode, that doesn't include any inference at all - and lets you document other kinds of source code. -* The default settings for everything should work for most projects, but - this is a guide for if you have a particular setup. - -## File extensions - -Let's talk about file extensions. We have two different flags for controlling -file extensions: `requireExtension` and `parseExtension`. - -* requireExtension adds additional filetypes to the node.js `require()` method. - By default, you can call, for instance, `require('foo')`, and the require algorithm - will look for `foo.js`, `foo` the module, and `foo.json`. Adding another - extension in requireExtension lets it look for `foo.otherextension`. -* parseExtension adds additional filetypes to the list of filetypes documentation.js - thinks it can parse, and it also adds those additional filetypes to the default - files it looks for when you specify a directory or glob as input. - -## Polyglot - -Polyglot mode switches documentation.js from running on babylon and [babel](https://babeljs.io/) -as a JavaScript parser, to using [get-comments](https://github.com/tunnckocore/get-comments). -This lets it grab comments formatted in the `/** Comment */` style from source -code that _isn't_ JavaScript, like C++ or CSS code. - -Since documentation.js doesn't _parse_ C++ and lots of other languages (parsing JavaScript is complicated enough!), -it can't make any of its smart inferences about their source code: it just -takes documentation comments and shows them as-is. - -You _can_ use polyglot mode to turn off inference across the board, but I don't recommend -it. See the 'too much inference' topic in [TROUBLESHOOTING.md](TROUBLESHOOTING.md) -for detail about that. +🚨 Polyglot mode is now deprecated. It will be replaced by a pluggable +input system in future versions. 🚨 diff --git a/docs/RECIPES.md b/docs/RECIPES.md index 5133e6f0f..16255f212 100644 --- a/docs/RECIPES.md +++ b/docs/RECIPES.md @@ -98,7 +98,7 @@ names with the parent object. Here's an example: ```js /** - * This method has hierachical params + * This method has hierarchical params * @param {Object} animals different kinds of animals * @param {String} animals.fishes number of kinds of fish */ @@ -113,8 +113,8 @@ explicit syntax is required. ## Object Factories -Libraries like [d3](http://d3js.org/) eschew JavaScript's `new` operator -in favor of the ['object factory' or 'module pattern'](http://www.macwright.org/2012/06/04/the-module-pattern.html). +Libraries like [d3](https://d3js.org) eschew JavaScript's `new` operator +in favor of the ['object factory' or 'module pattern'](https://macwright.org/2012/06/04/the-module-pattern.html). The factory function is a normal function that yields an object. That object has properties. In this case, we don't use the `@class` tag because @@ -174,3 +174,25 @@ The first documentation describes how you can call getTheTime without any arguments, and the second describes how you can call getTheTime with an argument. `documentation` will output two documented functions when you use this style. + +## Promises + +Promises have become a widely used feature in modern JavaScript. They are +documented in a similar manner to arrays: + +```js +/** + * Find a person's phone number in the database + * @param {string} name person's name + * @returns {Promise} promise with the phone number + */ +function findPersonAge(name) { + return new Promise((resolve, reject) => { + db.find({ name: name }) + .then(object => resolve(object.age)) + .catch(err => reject(err)) + }) +} +``` + +Multiple parameters within the `resolve` can be documented like so: `Promise`. diff --git a/docs/THEMING.md b/docs/THEMING.md index 52313f6f5..cd9761c9f 100644 --- a/docs/THEMING.md +++ b/docs/THEMING.md @@ -23,10 +23,49 @@ The theme is free to implement HTML generation however it chooses. See [the default theme](https://github.com/documentationjs/documentation/tree/master/src/default_theme) for some ideas. +### Customizing the Default Theme + +**Instructions** + +- Copy contents of `default_theme` folder (noted above) into a new folder in your project. One way to do it is to create a new git repository with the folder contents and add this line to your `package.json` `devDependencies` section: `"docjs-theme": "my-gh-username/reponame"`. That way when you install dependencies, your new theme will be in the projects `node_modules` folder. + +- In the folder you created, replace `require('../')` on lines 8 and 9 of `index.js` with `require('documentation')` and save. + +- You can now make changes that will show up when you generate your docs using your theme. Example `package.json` `scripts` entry: `"documentation build index.js -f html -o docs --theme node_modules/docjs-theme"` + +#### Changes to Default Theme Via documentation.yml +If a documentation.yml file is used to establish a table of contents for your documentation, small changes to the default style can be made via a + + + ### Sub Section header + Text that describes the section and sub-section here. +``` +Any changes to elements and classes that also exist in the standard theme will be overwridden by what is in the documentation.yml. This opens up the possiblitity of the same CSS being defined twice, which can be confusing and is not best practice. However, it is easy to change HTML style this way. Recommend only using classes defined this way that do not exist in the standard documentation.js theme. + ### Theming Markdown The default Markdown generator for documentation.js isn't customizable - instead of a plain-text theme, it's generated by creating an AST and then rendering -it with [remark](http://remark.js.org/). If you need something extra in Markdown, +it with [remark](https://remark.js.org/). If you need something extra in Markdown, you can either rally for that thing to be included in the default theme, or you can hack around it by using an HTML theme that outputs Markdown. diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md index 72c029ee2..5c8397aec 100644 --- a/docs/TROUBLESHOOTING.md +++ b/docs/TROUBLESHOOTING.md @@ -17,8 +17,8 @@ might not understand it. If: ## Error: watch ENOSPC Linux systems can have a low limit of 'watchable files'. To increase this -limit, follow [the advice in this StackOverflow answer](http://stackoverflow.com/a/17437601/229001). +limit, follow [the advice in this StackOverflow answer](https://stackoverflow.com/questions/16748737/grunt-watch-error-waiting-fatal-error-watch-enospc/17437601#17437601). ## Error: EMFILE: too many open files -You'll need to increase the `ulimit` maximum for your system: [here's a StackOverflow issue explaining how](http://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks). +You'll need to increase the `ulimit` maximum for your system: [here's a StackOverflow issue explaining how](https://unix.stackexchange.com/questions/108174/how-to-persistently-control-maximum-system-resource-consumption-on-mac). diff --git a/docs/USAGE.md b/docs/USAGE.md index 6094961d0..16789baf6 100644 --- a/docs/USAGE.md +++ b/docs/USAGE.md @@ -7,58 +7,65 @@ $ npm install -g documentation ``` `documentation` then installs a command called `documentation`. Run it with -`-h` to get help. +`--help` or `--help ` to get help. -```sh -Usage: documentation [options] - -Commands: - build build documentation - serve generate, update, and display HTML documentation - lint check for common style and uniformity mistakes - readme inject documentation into your README.md +``` +$ documentation --help build Options: - --help Show help [boolean] - --version Show version number [boolean] - --shallow shallow mode turns off dependency resolution, only - processing the specified files (or the main script - specified in package.json) [boolean] [default: false] - --config, -c configuration file. an array defining explicit sort order - --external a string / glob match pattern that defines which external - modules will be whitelisted and included in the generated - documentation. [default: null] - --extension, -e only input source files matching this extension will be - parsed, this option can be used multiple times. - --polyglot polyglot mode turns off dependency resolution and enables - multi-language support. use this to document c++[boolean] - --private, -p generate documentation tagged as private + --version Show version number [boolean] + --help Show help [boolean] + --theme, -t specify a theme: this must be a valid theme module + --project-name project name. by default, inferred from + package.json + --project-version project version. by default, inferred from + package.json + --project-description project description. by default, inferred from + package.json + --project-homepage project homepage. by default, inferred from + package.json + --favicon favicon used in html + --watch, -w watch input files and rebuild documentation when + they change [boolean] + --markdown-toc include a table of contents in markdown output + [boolean] [default: true] + --markdown-toc-max-depth specifies the max depth of the table of contents in markdown output + [number] [default: 6] + --shallow shallow mode turns off dependency resolution, only + processing the specified files (or the main script + specified in package.json) [boolean] [default: false] - --access, -a Include only comments with a given access level, out of - private, protected, public, undefined. By default, - public, protected, and undefined access levels are - included - [choices: "public", "private", "protected", "undefined"] - --github, -g infer links to github in documentation [boolean] - --infer-private Infer private access based on the name. This is a regular - expression that is used to match the name [string] - --document-exported Generate documentation for all exported bindings and - members even if there is no JSDoc for them + --config, -c configuration file. an array defining explicit sort + order [string] + --no-package, --np dont find and use package.json for project- + configuration option defaults [boolean] [default: false] - --sort-order The order to sort the documentation + --external a string / glob match pattern that defines which + external modules will be whitelisted and included + in the generated documentation. [default: null] + --require-extension, --re additional extensions to include in require() and + import's search algorithm.For instance, adding .es5 + would allow require("adder") to find "adder.es5" + --parse-extension, --pe additional extensions to parse as source code. + --private, -p generate documentation tagged as private + [boolean] [default: false] + --access, -a Include only comments with a given access level, + out of private, protected, public, undefined. By + default, public, protected, and undefined access + levels are included + [array] [choices: "public", "private", "protected", "undefined"] + --github, -g infer links to github in documentation [boolean] + --infer-private Infer private access based on the name. This is a + regular expression that is used to match the name + [string] + --document-exported Generate documentation for all exported bindings + and members even if there is no JSDoc for them + [boolean] [default: false] + --sort-order The order to sort the documentation [choices: "source", "alpha"] [default: "source"] - --theme, -t specify a theme: this must be a valid theme module - --name project name. by default, inferred from package.json - --watch, -w watch input files and rebuild documentation when they - change [boolean] - --project-version project version. by default, inferred from package.json - --output, -o output location. omit for stdout, otherwise is a filename - for single-file outputs and a directory name for - multi-file outputs like html [default: "stdout"] + --output, -o output location. omit for stdout, otherwise is a + filename for single-file outputs and a directory + name for multi-file outputs like html + [default: "stdout"] --format, -f [choices: "json", "md", "remark", "html"] [default: "json"] - -Examples: - documentation build foo.js -f md > parse documentation in a file and - API.md generate API documentation as - Markdown ``` diff --git a/package.json b/package.json index ad8580741..717a13084 100644 --- a/package.json +++ b/package.json @@ -1,87 +1,80 @@ { "name": "documentation", "description": "a documentation generator", - "version": "4.0.0", + "version": "13.2.5", "author": "Tom MacWright", + "homepage": "https://documentation.js.org", "bin": { "documentation": "./bin/documentation.js" }, "dependencies": { + "@babel/core": "7.12.3", + "@babel/generator": "7.12.1", + "@babel/parser": "7.12.3", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", "ansi-html": "^0.0.7", - "babel-core": "^6.17.0", - "babel-generator": "6.25.0", - "babel-plugin-system-import-transformer": "3.1.0", - "babel-plugin-transform-decorators-legacy": "^1.3.4", - "babel-preset-es2015": "^6.16.0", - "babel-preset-react": "^6.16.0", - "babel-preset-stage-0": "^6.16.0", - "babel-traverse": "^6.16.0", - "babel-types": "^6.16.0", - "babelify": "^7.3.0", - "babylon": "^6.17.2", - "chalk": "^2.0.0", - "chokidar": "^1.2.0", - "concat-stream": "^1.5.0", - "disparity": "^2.0.0", - "doctrine-temporary-fork": "2.0.0-alpha-allowarrayindex", - "get-comments": "^1.0.1", - "get-port": "^3.1.0", - "git-url-parse": "^6.0.1", - "github-slugger": "1.1.3", - "glob": "^7.0.0", - "globals-docs": "^2.3.0", - "highlight.js": "^9.1.0", - "js-yaml": "^3.8.4", - "lodash": "^4.11.1", + "babelify": "^10.0.0", + "chalk": "^2.3.0", + "chokidar": "^3.4.0", + "concat-stream": "^1.6.0", + "diff": "^4.0.1", + "doctrine-temporary-fork": "2.1.0", + "get-port": "^5.0.0", + "git-url-parse": "^11.1.2", + "github-slugger": "1.2.0", + "glob": "^7.1.2", + "globals-docs": "^2.4.0", + "highlight.js": "^10.7.2", + "ini": "^1.3.5", + "js-yaml": "^3.10.0", + "lodash": "^4.17.10", + "mdast-util-find-and-replace": "^1.1.1", "mdast-util-inject": "^1.1.0", - "micromatch": "^3.0.0", - "mime": "^1.3.4", - "module-deps-sortable": "4.0.6", - "parse-filepath": "^1.0.1", - "pify": "^3.0.0", - "read-pkg-up": "^2.0.0", - "remark": "^8.0.0", - "remark-html": "6.0.1", - "remark-toc": "^4.0.0", - "remote-origin-url": "0.4.0", - "shelljs": "^0.7.5", - "stream-array": "^1.1.0", - "strip-json-comments": "^2.0.0", - "tiny-lr": "^1.0.3", - "unist-builder": "^1.0.0", - "unist-util-visit": "^1.0.1", - "vfile": "^2.0.0", - "vfile-reporter": "^4.0.0", - "vfile-sort": "^2.0.0", - "vinyl": "^2.0.0", - "vinyl-fs": "^2.3.1", - "yargs": "^6.0.1" + "micromatch": "^3.1.5", + "mime": "^2.2.0", + "module-deps-sortable": "^5.0.3", + "parse-filepath": "^1.0.2", + "pify": "^5.0.0", + "read-pkg-up": "^4.0.0", + "remark": "^13.0.0", + "remark-gfm": "^1.0.0", + "remark-html": "^13.0.1", + "remark-reference-links": "^5.0.0", + "remark-toc": "^7.2.0", + "resolve": "^1.8.1", + "stream-array": "^1.1.2", + "strip-json-comments": "^2.0.1", + "tiny-lr": "^1.1.0", + "unist-builder": "^2.0.3", + "unist-util-visit": "^2.0.3", + "vfile": "^4.0.0", + "vfile-reporter": "^6.0.0", + "vfile-sort": "^2.1.0", + "vinyl": "^2.1.0", + "vinyl-fs": "^3.0.2", + "yargs": "^15.3.1" + }, + "optionalDependencies": { + "@vue/compiler-sfc": "^3.0.11", + "vue-template-compiler": "^2.6.12" }, "devDependencies": { - "are-we-flow-yet": "^1.0.0", - "babel-cli": "^6.24.1", - "babel-eslint": "^7.2.3", - "babel-jest": "^20.0.1", - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-preset-flow": "^6.23.0", "chdir": "0.0.0", - "coveralls": "^2.13.1", - "cz-conventional-changelog": "2.0.0", + "cz-conventional-changelog": "2.1.0", "documentation-schema": "0.0.1", - "eslint": "^4.1.1", - "eslint-config-prettier": "^2.3.0", - "eslint-plugin-flowtype": "^2.34.1", - "flow-bin": "^0.46.0", - "fs-extra": "^4.0.0", - "husky": "^0.14.0", - "jest": "^20.0.4", - "json-schema": "0.2.3", - "lint-staged": "^4.0.0", - "mock-fs": "^4.2.0", - "p-event": "^1.0.0", - "prettier": "^1.0.0", - "standard-version": "^4.0.0", - "tmp": "^0.0.31" + "eslint": "^7.23.0", + "eslint-config-prettier": "^8.1.0", + "fs-extra": "^9.0.0", + "husky": "^1.3.1", + "jest": "^26.0.0", + "json-schema": "^0.2.3", + "lint-staged": "^7.2.0", + "mock-fs": "^4.4.2", + "p-event": "^4.1.0", + "prettier": "^2.2.1", + "standard-version": "^9.2.0", + "tmp": "^0.2.1" }, "keywords": [ "documentation", @@ -92,21 +85,20 @@ "website" ], "license": "ISC", - "main": "lib/index.js", + "main": "src/index.js", "repository": { "type": "git", "url": "git@github.com:documentationjs/documentation.git" }, "scripts": { - "build": "rm -rf lib && babel -D src -d lib", + "build": "npm run doc", "release": "standard-version", - "precommit": "lint-staged --verbose", - "format": "prettier --write '{src,__tests__,declarations,bin,default_theme}/**/*.js' --single-quote", - "doc": "./bin/documentation.js build src/index.js -f md --access=public > docs/NODE_API.md", - "changelog": "standard-changelog -i CHANGELOG.md -w", + "prepublish": "npm run build", + "format": "prettier --write '{src,__tests__,declarations,bin,default_theme}/**/*.js'", + "doc": "node ./bin/documentation.js build src/index.js -f md --access=public > docs/NODE_API.md", "self-lint": "node ./bin/documentation.js lint src", - "test": "npm run build && eslint . && are-we-flow-yet src && flow check && jest", - "test-ci": "npm run build && eslint . && are-we-flow-yet src && flow check && jest --runInBand" + "test": "eslint . && jest", + "test-ci": "eslint . && jest --runInBand" }, "jest": { "testPathIgnorePatterns": [ @@ -114,9 +106,6 @@ "utils.js", "fixture" ], - "coveragePathIgnorePatterns": [ - "/lib/" - ], "collectCoverage": true, "testEnvironment": "node" }, @@ -126,18 +115,22 @@ } }, "engines": { - "node": ">=4" + "node": ">=10" }, "lint-staged": { "*.js": [ - "prettier --write --single-quote", + "prettier --write", "git add" ] }, "greenkeeper": { "ignore": [ - "remote-origin-url", - "yargs" + "remote-origin-url" ] + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } } } diff --git a/src/commands/build.js b/src/commands/build.js index 17b89611b..c4397626b 100644 --- a/src/commands/build.js +++ b/src/commands/build.js @@ -1,13 +1,11 @@ -/* @flow */ - -var streamArray = require('stream-array'), - sharedOptions = require('./shared_options'), - path = require('path'), - fs = require('fs'), - vfs = require('vinyl-fs'), - chokidar = require('chokidar'), - documentation = require('../'), - _ = require('lodash'); +const streamArray = require('stream-array'); +const sharedOptions = require('./shared_options'); +const path = require('path'); +const fs = require('fs'); +const vfs = require('vinyl-fs'); +const chokidar = require('chokidar'); +const documentation = require('../'); +const _ = require('lodash'); module.exports.command = 'build [input..]'; module.exports.describe = 'build documentation'; @@ -18,14 +16,14 @@ module.exports.describe = 'build documentation'; * @returns {Object} yargs with options * @private */ -module.exports.builder = _.assign( +module.exports.builder = Object.assign( {}, sharedOptions.sharedOutputOptions, sharedOptions.sharedInputOptions, { - example: 'documentation build foo.js -f md > API.md', output: { - describe: 'output location. omit for stdout, otherwise is a filename ' + + describe: + 'output location. omit for stdout, otherwise is a filename ' + 'for single-file outputs and a directory name for multi-file outputs like html', default: 'stdout', alias: 'o' @@ -41,11 +39,11 @@ module.exports.builder = _.assign( * The former case, with the callback, is used by the `serve` command, which is * just a thin wrapper around this one. */ -module.exports.handler = function build(argv: Object) { - var watcher; +module.exports.handler = function build(argv) { + let watcher; argv._handled = true; - if (!argv.input.length) { + if (!(argv.input && argv.input.length)) { try { argv.input = [ JSON.parse(fs.readFileSync(path.resolve('package.json'), 'utf8')) diff --git a/src/commands/index.js b/src/commands/index.js index b1c38ebbf..450acd2a1 100644 --- a/src/commands/index.js +++ b/src/commands/index.js @@ -1,5 +1,3 @@ -/* @flow */ - /* * Maps command name to a command plugin module. Each command plugin module * must export a function that takes (documentation, parsedArgs), where diff --git a/src/commands/lint.js b/src/commands/lint.js index 3e465cc9c..e50b3c34e 100644 --- a/src/commands/lint.js +++ b/src/commands/lint.js @@ -1,14 +1,15 @@ -/* @flow */ - -var documentation = require('../'); -var fs = require('fs'); -var path = require('path'); +const documentation = require('../'); +const fs = require('fs'); +const path = require('path'); +const sharedOptions = require('./shared_options'); /* eslint no-console: 0 */ module.exports.command = 'lint [input..]'; module.exports.description = 'check for common style and uniformity mistakes'; -module.exports.builder = {}; +module.exports.builder = { + shallow: sharedOptions.sharedInputOptions.shallow +}; /** * Wrap around the documentation.lint method and add the additional @@ -18,7 +19,7 @@ module.exports.builder = {}; * @returns {undefined} has side-effects * @private */ -module.exports.handler = function(argv: Object) { +module.exports.handler = function (argv) { argv._handled = true; if (!argv.input.length) { try { diff --git a/src/commands/readme.js b/src/commands/readme.js index 81176c29b..00813c63c 100644 --- a/src/commands/readme.js +++ b/src/commands/readme.js @@ -1,56 +1,61 @@ -/* @flow */ - -var fs = require('fs'); -var remark = require('remark'); -var path = require('path'); -var documentation = require('../'); -var inject = require('mdast-util-inject'); -var chalk = require('chalk'); -var disparity = require('disparity'); +const fs = require('fs'); +const remark = require('remark'); +const path = require('path'); +const documentation = require('../'); +const sharedOptions = require('./shared_options'); +const inject = require('mdast-util-inject'); +const chalk = require('chalk'); +const diff = require('diff'); +const getReadmeFile = require('../get-readme-file'); module.exports.command = 'readme [input..]'; module.exports.description = 'inject documentation into your README.md'; + +const defaultReadmeFile = getReadmeFile('.'); + /** * Add yargs parsing for the readme command * @param {Object} yargs module instance * @returns {Object} yargs with options * @private */ -module.exports.builder = { - usage: 'Usage: documentation readme [--readme-file=README.md] --section "API"' + - ' [--compare-only] [other documentationjs options]', - example: 'documentation readme index.js -s "API Docs" --github', - 'readme-file': { - describe: 'The markdown file into which to inject documentation', - default: 'README.md' - }, - section: { - alias: 's', - describe: 'The section heading after which to inject generated documentation', - required: true - }, - 'diff-only': { - alias: 'd', - describe: 'Instead of updating the given README with the generated documentation,' + - ' just check if its contents match, exiting nonzero if not.', - default: false - }, - quiet: { - alias: 'q', - describe: 'Quiet mode: do not print messages or README diff to stdout.', - default: false +module.exports.builder = Object.assign( + {}, + sharedOptions.sharedOutputOptions, + sharedOptions.sharedInputOptions, + { + 'readme-file': { + describe: 'The markdown file into which to inject documentation', + default: defaultReadmeFile + }, + section: { + alias: 's', + describe: + 'The section heading after which to inject generated documentation', + required: true + }, + 'diff-only': { + alias: 'd', + describe: + 'Instead of updating the given README with the generated documentation,' + + ' just check if its contents match, exiting nonzero if not.', + default: false + }, + quiet: { + alias: 'q', + describe: 'Quiet mode: do not print messages or README diff to stdout.', + default: false + } } -}; - -function noop() {} +); /** * Insert API documentation into a Markdown readme * @private * @param {Object} argv args from the CLI option parser - * @return {undefined} has the side-effect of writing a file or printing to stdout + * @returns {undefined} has the side-effect of writing a file or printing to stdout */ -module.exports.handler = function readme(argv: Object) { +module.exports.handler = function readme(argv) { argv._handled = true; if (!argv.input.length) { @@ -66,13 +71,16 @@ module.exports.handler = function readme(argv: Object) { } } + argv.noReferenceLinks = true; argv.format = 'remark'; /* eslint no-console: 0 */ - var log = argv.q - ? noop - : console.log.bind(console, '[documentation-readme] '); + const log = (...data) => { + if (!argv.q) { + console.log.apply(console, data); + } + }; - var readmeContent = fs.readFileSync(argv.readmeFile, 'utf8'); + const readmeContent = fs.readFileSync(argv.readmeFile, 'utf8'); documentation .build(argv.input, argv) @@ -86,22 +94,48 @@ module.exports.handler = function readme(argv: Object) { .process(readmeContent) ) .then(file => { - var diffOutput = disparity.unified(readmeContent, file.contents, { - paths: [argv.readmeFile, argv.readmeFile] - }); - if (!diffOutput.length) { + const diffRaw = diff.createPatch( + '', + readmeContent, + file.contents, + '', + '' + ); + if (diffRaw.split('\n').length === 5) { log(`${argv.readmeFile} is up to date.`); process.exit(0); } + // Replace diff headers with real values + const cleanedDiff = diffRaw + .replace(/^([^\n]+)\n([^\n]+)\n/m, '') + .replace(/^---.*/gm, `--- ${argv.readmeFile}\tremoved`) + .replace(/^\+\+\+.*/gm, `+++ ${argv.readmeFile}\tadded`); + + // Includes newlines for easier joins + const diffLines = cleanedDiff.split(/^/m); + const diffHeader = diffLines + .slice(0, 2) + .join('') + .replace(/[^\n\r]+/g, chalk.yellow('$&')); + const diffBody = diffLines + .slice(2) + .join('') + .replace(/^-[^\n\r]*/gm, chalk.red('$&')) + .replace(/^\+[^\n\r]*/gm, chalk.green('$&')) + .replace(/^@@.+@@/gm, chalk.magenta('$&')); + if (argv.d) { log( chalk.bold(`${argv.readmeFile} needs the following updates:`), - `\n${diffOutput}` + `\n${diffHeader}${diffBody}` ); process.exit(1); } else { - log(chalk.bold(`Updating ${argv.readmeFile}`), `\n${diffOutput}`); + log( + chalk.bold(`Updating ${argv.readmeFile}`), + `\n${diffHeader}${diffBody}` + ); } fs.writeFileSync(argv.readmeFile, file.contents); diff --git a/src/commands/serve.js b/src/commands/serve.js index b83c8488f..324b3f786 100644 --- a/src/commands/serve.js +++ b/src/commands/serve.js @@ -1,14 +1,12 @@ -/* @flow */ - -var errorPage = require('../serve/error_page'), - fs = require('fs'), - path = require('path'), - chokidar = require('chokidar'), - sharedOptions = require('./shared_options'), - Server = require('../serve/server'), - _ = require('lodash'), - getPort = require('get-port'), - documentation = require('../'); +const errorPage = require('../serve/error_page'); +const fs = require('fs'); +const path = require('path'); +const chokidar = require('chokidar'); +const sharedOptions = require('./shared_options'); +const Server = require('../serve/server'); +const _ = require('lodash'); +const getPort = require('get-port'); +const documentation = require('../'); module.exports.command = 'serve [input..]'; module.exports.description = 'generate, update, and display HTML documentation'; @@ -18,7 +16,7 @@ module.exports.description = 'generate, update, and display HTML documentation'; * @returns {Object} yargs with options * @private */ -module.exports.builder = _.assign( +module.exports.builder = Object.assign( {}, sharedOptions.sharedOutputOptions, sharedOptions.sharedInputOptions, @@ -38,7 +36,7 @@ module.exports.builder = _.assign( * @param {Object} argv cli input * @returns {undefined} has side effects */ -module.exports.handler = function serve(argv: Object) { +module.exports.handler = function serve(argv) { argv._handled = true; if (!argv.input.length) { @@ -54,11 +52,11 @@ module.exports.handler = function serve(argv: Object) { } } - getPort(argv.port).then(port => { - var server = new Server(port); - var watcher; + getPort({ port: argv.port }).then(port => { + const server = new Server(port); + let watcher; - server.on('listening', function() { + server.on('listening', function () { process.stdout.write(`documentation.js serving on port ${port}\n`); }); diff --git a/src/commands/shared_options.js b/src/commands/shared_options.js index 2ffeb362c..6383c2fd9 100644 --- a/src/commands/shared_options.js +++ b/src/commands/shared_options.js @@ -1,12 +1,16 @@ -/* @flow */ - /** * Adds shared options to any command that runs documentation */ module.exports.sharedInputOptions = { - strict: true, + babel: { + describe: + 'path to babelrc or babel.options.js to override default babel config', + type: 'string', + default: null + }, shallow: { - describe: 'shallow mode turns off dependency resolution, ' + + describe: + 'shallow mode turns off dependency resolution, ' + 'only processing the specified files (or the main script specified in package.json)', default: false, type: 'boolean' @@ -17,34 +21,32 @@ module.exports.sharedInputOptions = { type: 'string' }, 'no-package': { - describe: 'dont find and use package.json for project- configuration option defaults', + describe: + 'dont find and use package.json for project- configuration option defaults', alias: 'np', type: 'boolean', default: false }, external: { - describe: 'a string / glob match pattern that defines which external ' + + describe: + 'a string / glob match pattern that defines which external ' + 'modules will be whitelisted and included in the generated documentation.', default: null }, 'require-extension': { - describe: "additional extensions to include in require() and import's search algorithm." + + describe: + "additional extensions to include in require() and import's search algorithm." + 'For instance, adding .es5 would allow require("adder") to find "adder.es5"', // Ensure that the value is an array - coerce: (value: string | Array) => [].concat(value), + coerce: value => [].concat(value), alias: 're' }, 'parse-extension': { describe: 'additional extensions to parse as source code.', // Ensure that the value is an array - coerce: (value: string | Array) => [].concat(value), + coerce: value => [].concat(value), alias: 'pe' }, - polyglot: { - type: 'boolean', - describe: 'polyglot mode turns off dependency resolution and ' + - 'enables multi-language support. use this to document c++' - }, private: { describe: 'generate documentation tagged as private', type: 'boolean', @@ -52,7 +54,8 @@ module.exports.sharedInputOptions = { alias: 'p' }, access: { - describe: 'Include only comments with a given access level, out of private, ' + + describe: + 'Include only comments with a given access level, out of private, ' + 'protected, public, undefined. By default, public, protected, and undefined access ' + 'levels are included', choices: ['public', 'private', 'protected', 'undefined'], @@ -66,12 +69,14 @@ module.exports.sharedInputOptions = { }, 'infer-private': { type: 'string', - describe: 'Infer private access based on the name. This is a regular expression that ' + + describe: + 'Infer private access based on the name. This is a regular expression that ' + 'is used to match the name' }, 'document-exported': { type: 'boolean', - describe: 'Generate documentation for all exported bindings and members ' + + describe: + 'Generate documentation for all exported bindings and members ' + 'even if there is no JSDoc for them', default: false }, @@ -79,6 +84,11 @@ module.exports.sharedInputOptions = { describe: 'The order to sort the documentation', choices: ['source', 'alpha'], default: 'source' + }, + resolve: { + describe: 'Dependency resolution algorithm.', + choices: ['browser', 'node'], + default: 'browser' } }; @@ -96,9 +106,15 @@ module.exports.sharedOutputOptions = { 'project-version': { describe: 'project version. by default, inferred from package.json' }, + 'project-description': { + describe: 'project description. by default, inferred from package.json' + }, 'project-homepage': { describe: 'project homepage. by default, inferred from package.json' }, + favicon: { + describe: 'favicon used in html' + }, format: { alias: 'f', default: 'json', @@ -113,5 +129,11 @@ module.exports.sharedOutputOptions = { describe: 'include a table of contents in markdown output', default: true, type: 'boolean' + }, + 'markdown-toc-max-depth': { + describe: + 'specifies the max depth of the table of contents in markdown output', + default: 6, + type: 'number' } }; diff --git a/src/default_theme/README.md b/src/default_theme/README.md index 230c64f1f..c5e7d125d 100644 --- a/src/default_theme/README.md +++ b/src/default_theme/README.md @@ -4,7 +4,7 @@ This is the default theme for [documentationjs](https://github.com/documentationjs): it consists of underscore templates and a few assets: a [highlight.js](https://highlightjs.org/) -theme and [basscss](http://www.basscss.com/) as a basic CSS framework. +theme and [basscss](https://basscss.com/) as a basic CSS framework. This is bundled by default in documentation: it is the default theme. diff --git a/src/default_theme/assets/anchor.js b/src/default_theme/assets/anchor.js index 2ec9a1d4b..1f573dcbb 100644 --- a/src/default_theme/assets/anchor.js +++ b/src/default_theme/assets/anchor.js @@ -1,201 +1,350 @@ /*! - * AnchorJS - v1.2.1 - 2015-07-02 + * AnchorJS - v4.0.0 - 2017-06-02 * https://github.com/bryanbraun/anchorjs - * Copyright (c) 2015 Bryan Braun; Licensed MIT + * Copyright (c) 2017 Bryan Braun; Licensed MIT */ +/* eslint-env amd, node */ -function AnchorJS(options) { - this.options = options || {}; - - this._applyRemainingDefaultOptions = function(opts) { - this.options.icon = this.options.hasOwnProperty('icon') - ? opts.icon - : '\ue9cb'; // Accepts characters (and also URLs?), like '#', '¶', '❡', or '§'. - this.options.visible = this.options.hasOwnProperty('visible') - ? opts.visible - : 'hover'; // Also accepts 'always' - this.options.placement = this.options.hasOwnProperty('placement') - ? opts.placement - : 'right'; // Also accepts 'left' - this.options.class = this.options.hasOwnProperty('class') ? opts.class : ''; // Accepts any class name. - }; - - this._applyRemainingDefaultOptions(options); - - this.add = function(selector) { - var elements, - elsWithIds, - idList, - elementID, - i, - roughText, - tidyText, - index, - count, - newTidyText, - readableID, - anchor; - - this._applyRemainingDefaultOptions(this.options); - - // Provide a sensible default selector, if none is given. - if (!selector) { - selector = 'h1, h2, h3, h4, h5, h6'; - } else if (typeof selector !== 'string') { - throw new Error('The selector provided to AnchorJS was invalid.'); - } +// https://github.com/umdjs/umd/blob/master/templates/returnExports.js +(function (root, factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([], factory); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(); + } else { + // Browser globals (root is window) + root.AnchorJS = factory(); + root.anchors = new root.AnchorJS(); + } +})(this, function () { + 'use strict'; + function AnchorJS(options) { + this.options = options || {}; + this.elements = []; - elements = document.querySelectorAll(selector); - if (elements.length === 0) { - return false; + /** + * Assigns options to the internal options object, and provides defaults. + * @param {Object} opts - Options object + */ + function _applyRemainingDefaultOptions(opts) { + opts.icon = opts.hasOwnProperty('icon') ? opts.icon : '\ue9cb'; // Accepts characters (and also URLs?), like '#', '¶', '❡', or '§'. + opts.visible = opts.hasOwnProperty('visible') ? opts.visible : 'hover'; // Also accepts 'always' & 'touch' + opts.placement = opts.hasOwnProperty('placement') + ? opts.placement + : 'right'; // Also accepts 'left' + opts.class = opts.hasOwnProperty('class') ? opts.class : ''; // Accepts any class name. + // Using Math.floor here will ensure the value is Number-cast and an integer. + opts.truncate = opts.hasOwnProperty('truncate') + ? Math.floor(opts.truncate) + : 64; // Accepts any value that can be typecast to a number. } - this._addBaselineStyles(); + _applyRemainingDefaultOptions(this.options); - // We produce a list of existing IDs so we don't generate a duplicate. - elsWithIds = document.querySelectorAll('[id]'); - idList = [].map.call(elsWithIds, function assign(el) { - return el.id; - }); + /** + * Checks to see if this device supports touch. Uses criteria pulled from Modernizr: + * https://github.com/Modernizr/Modernizr/blob/da22eb27631fc4957f67607fe6042e85c0a84656/feature-detects/touchevents.js#L40 + * @returns {Boolean} - true if the current device supports touch. + */ + this.isTouchDevice = function () { + return !!( + 'ontouchstart' in window || + (window.DocumentTouch && document instanceof DocumentTouch) + ); + }; - for (i = 0; i < elements.length; i++) { - if (elements[i].hasAttribute('id')) { - elementID = elements[i].getAttribute('id'); - } else { - roughText = elements[i].textContent; - - // Refine it so it makes a good ID. Strip out non-safe characters, replace - // spaces with hyphens, truncate to 32 characters, and make toLowerCase. - // - // Example string: // '⚡⚡⚡ Unicode icons are cool--but they definitely don't belong in a URL fragment.' - tidyText = roughText - .replace(/[^\w\s-]/gi, '') // ' Unicode icons are cool--but they definitely dont belong in a URL fragment' - .replace(/\s+/g, '-') // '-Unicode-icons-are-cool--but-they-definitely-dont-belong-in-a-URL-fragment' - .replace(/-{2,}/g, '-') // '-Unicode-icons-are-cool-but-they-definitely-dont-belong-in-a-URL-fragment' - .substring(0, 64) // '-Unicode-icons-are-cool-but-they-definitely-dont-belong-in-a-URL' - .replace(/^-+|-+$/gm, '') // 'Unicode-icons-are-cool-but-they-definitely-dont-belong-in-a-URL' - .toLowerCase(); // 'unicode-icons-are-cool-but-they-definitely-dont-belong-in-a-url' - - // Compare our generated ID to existing IDs (and increment it if needed) - // before we add it to the page. - newTidyText = tidyText; - count = 0; - do { - if (index !== undefined) { - newTidyText = tidyText + '-' + count; + /** + * Add anchor links to page elements. + * @param {String|Array|Nodelist} selector - A CSS selector for targeting the elements you wish to add anchor links + * to. Also accepts an array or nodeList containing the relavant elements. + * @returns {this} - The AnchorJS object + */ + this.add = function (selector) { + var elements, + elsWithIds, + idList, + elementID, + i, + index, + count, + tidyText, + newTidyText, + readableID, + anchor, + visibleOptionToUse, + indexesToDrop = []; + + // We reapply options here because somebody may have overwritten the default options object when setting options. + // For example, this overwrites all options but visible: + // + // anchors.options = { visible: 'always'; } + _applyRemainingDefaultOptions(this.options); + + visibleOptionToUse = this.options.visible; + if (visibleOptionToUse === 'touch') { + visibleOptionToUse = this.isTouchDevice() ? 'always' : 'hover'; + } + + // Provide a sensible default selector, if none is given. + if (!selector) { + selector = 'h2, h3, h4, h5, h6'; + } + + elements = _getElements(selector); + + if (elements.length === 0) { + return this; + } + + _addBaselineStyles(); + + // We produce a list of existing IDs so we don't generate a duplicate. + elsWithIds = document.querySelectorAll('[id]'); + idList = [].map.call(elsWithIds, function assign(el) { + return el.id; + }); + + for (i = 0; i < elements.length; i++) { + if (this.hasAnchorJSLink(elements[i])) { + indexesToDrop.push(i); + continue; + } + + if (elements[i].hasAttribute('id')) { + elementID = elements[i].getAttribute('id'); + } else if (elements[i].hasAttribute('data-anchor-id')) { + elementID = elements[i].getAttribute('data-anchor-id'); + } else { + tidyText = this.urlify(elements[i].textContent); + + // Compare our generated ID to existing IDs (and increment it if needed) + // before we add it to the page. + newTidyText = tidyText; + count = 0; + do { + if (index !== undefined) { + newTidyText = tidyText + '-' + count; + } + + index = idList.indexOf(newTidyText); + count += 1; + } while (index !== -1); + index = undefined; + idList.push(newTidyText); + + elements[i].setAttribute('id', newTidyText); + elementID = newTidyText; + } + + readableID = elementID.replace(/-/g, ' '); + + // The following code builds the following DOM structure in a more effiecient (albeit opaque) way. + // ''; + anchor = document.createElement('a'); + anchor.className = 'anchorjs-link ' + this.options.class; + anchor.href = '#' + elementID; + anchor.setAttribute('aria-label', 'Anchor link for: ' + readableID); + anchor.setAttribute('data-anchorjs-icon', this.options.icon); + + if (visibleOptionToUse === 'always') { + anchor.style.opacity = '1'; + } + + if (this.options.icon === '\ue9cb') { + anchor.style.font = '1em/1 anchorjs-icons'; + + // We set lineHeight = 1 here because the `anchorjs-icons` font family could otherwise affect the + // height of the heading. This isn't the case for icons with `placement: left`, so we restore + // line-height: inherit in that case, ensuring they remain positioned correctly. For more info, + // see https://github.com/bryanbraun/anchorjs/issues/39. + if (this.options.placement === 'left') { + anchor.style.lineHeight = 'inherit'; } - // .indexOf is supported in IE9+. - index = idList.indexOf(newTidyText); - count += 1; - } while (index !== -1); - index = undefined; - idList.push(newTidyText); - - // Assign it to our element. - // Currently the setAttribute element is only supported in IE9 and above. - elements[i].setAttribute('id', newTidyText); - - elementID = newTidyText; + } + + if (this.options.placement === 'left') { + anchor.style.position = 'absolute'; + anchor.style.marginLeft = '-1em'; + anchor.style.paddingRight = '0.5em'; + elements[i].insertBefore(anchor, elements[i].firstChild); + } else { + // if the option provided is `right` (or anything else). + anchor.style.paddingLeft = '0.375em'; + elements[i].appendChild(anchor); + } + } + + for (i = 0; i < indexesToDrop.length; i++) { + elements.splice(indexesToDrop[i] - i, 1); } + this.elements = this.elements.concat(elements); - readableID = elementID.replace(/-/g, ' '); + return this; + }; - // The following code builds the following DOM structure in a more effiecient (albeit opaque) way. - // ''; - anchor = document.createElement('a'); - anchor.className = 'anchorjs-link ' + this.options.class; - anchor.href = '#' + elementID; - anchor.setAttribute('aria-label', 'Anchor link for: ' + readableID); - anchor.setAttribute('data-anchorjs-icon', this.options.icon); + /** + * Removes all anchorjs-links from elements targed by the selector. + * @param {String|Array|Nodelist} selector - A CSS selector string targeting elements with anchor links, + * OR a nodeList / array containing the DOM elements. + * @returns {this} - The AnchorJS object + */ + this.remove = function (selector) { + var index, + domAnchor, + elements = _getElements(selector); - if (this.options.visible === 'always') { - anchor.style.opacity = '1'; + for (var i = 0; i < elements.length; i++) { + domAnchor = elements[i].querySelector('.anchorjs-link'); + if (domAnchor) { + // Drop the element from our main list, if it's in there. + index = this.elements.indexOf(elements[i]); + if (index !== -1) { + this.elements.splice(index, 1); + } + // Remove the anchor from the DOM. + elements[i].removeChild(domAnchor); + } } + return this; + }; + + /** + * Removes all anchorjs links. Mostly used for tests. + */ + this.removeAll = function () { + this.remove(this.elements); + }; + + /** + * Urlify - Refine text so it makes a good ID. + * + * To do this, we remove apostrophes, replace nonsafe characters with hyphens, + * remove extra hyphens, truncate, trim hyphens, and make lowercase. + * + * @param {String} text - Any text. Usually pulled from the webpage element we are linking to. + * @returns {String} - hyphen-delimited text for use in IDs and URLs. + */ + this.urlify = function (text) { + // Regex for finding the nonsafe URL characters (many need escaping): & +$,:;=?@"#{}|^~[`%!'<>]./()*\ + var nonsafeChars = /[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\]/g, + urlText; - if (this.options.icon === '\ue9cb') { - anchor.style.fontFamily = 'anchorjs-icons'; - anchor.style.fontStyle = 'normal'; - anchor.style.fontVariant = 'normal'; - anchor.style.fontWeight = 'normal'; - anchor.style.lineHeight = 1; + // The reason we include this _applyRemainingDefaultOptions is so urlify can be called independently, + // even after setting options. This can be useful for tests or other applications. + if (!this.options.truncate) { + _applyRemainingDefaultOptions(this.options); } - if (this.options.placement === 'left') { - anchor.style.position = 'absolute'; - anchor.style.marginLeft = '-1em'; - anchor.style.paddingRight = '0.5em'; - elements[i].insertBefore(anchor, elements[i].firstChild); + // Note: we trim hyphens after truncating because truncating can cause dangling hyphens. + // Example string: // " ⚡⚡ Don't forget: URL fragments should be i18n-friendly, hyphenated, short, and clean." + urlText = text + .trim() // "⚡⚡ Don't forget: URL fragments should be i18n-friendly, hyphenated, short, and clean." + .replace(/\'/gi, '') // "⚡⚡ Dont forget: URL fragments should be i18n-friendly, hyphenated, short, and clean." + .replace(nonsafeChars, '-') // "⚡⚡-Dont-forget--URL-fragments-should-be-i18n-friendly--hyphenated--short--and-clean-" + .replace(/-{2,}/g, '-') // "⚡⚡-Dont-forget-URL-fragments-should-be-i18n-friendly-hyphenated-short-and-clean-" + .substring(0, this.options.truncate) // "⚡⚡-Dont-forget-URL-fragments-should-be-i18n-friendly-hyphenated-" + .replace(/^-+|-+$/gm, '') // "⚡⚡-Dont-forget-URL-fragments-should-be-i18n-friendly-hyphenated" + .toLowerCase(); // "⚡⚡-dont-forget-url-fragments-should-be-i18n-friendly-hyphenated" + + return urlText; + }; + + /** + * Determines if this element already has an AnchorJS link on it. + * Uses this technique: http://stackoverflow.com/a/5898748/1154642 + * @param {HTMLElemnt} el - a DOM node + * @returns {Boolean} true/false + */ + this.hasAnchorJSLink = function (el) { + var hasLeftAnchor = + el.firstChild && + (' ' + el.firstChild.className + ' ').indexOf(' anchorjs-link ') > -1, + hasRightAnchor = + el.lastChild && + (' ' + el.lastChild.className + ' ').indexOf(' anchorjs-link ') > -1; + + return hasLeftAnchor || hasRightAnchor || false; + }; + + /** + * Turns a selector, nodeList, or array of elements into an array of elements (so we can use array methods). + * It also throws errors on any other inputs. Used to handle inputs to .add and .remove. + * @param {String|Array|Nodelist} input - A CSS selector string targeting elements with anchor links, + * OR a nodeList / array containing the DOM elements. + * @returns {Array} - An array containing the elements we want. + */ + function _getElements(input) { + var elements; + if (typeof input === 'string' || input instanceof String) { + // See https://davidwalsh.name/nodelist-array for the technique transforming nodeList -> Array. + elements = [].slice.call(document.querySelectorAll(input)); + // I checked the 'input instanceof NodeList' test in IE9 and modern browsers and it worked for me. + } else if (Array.isArray(input) || input instanceof NodeList) { + elements = [].slice.call(input); } else { - // if the option provided is `right` (or anything else). - anchor.style.paddingLeft = '0.375em'; - elements[i].appendChild(anchor); + throw new Error('The selector provided to AnchorJS was invalid.'); } + return elements; } - return this; - }; - - this.remove = function(selector) { - var domAnchor, elements = document.querySelectorAll(selector); - for (var i = 0; i < elements.length; i++) { - domAnchor = elements[i].querySelector('.anchorjs-link'); - if (domAnchor) { - elements[i].removeChild(domAnchor); + /** + * _addBaselineStyles + * Adds baseline styles to the page, used by all AnchorJS links irregardless of configuration. + */ + function _addBaselineStyles() { + // We don't want to add global baseline styles if they've been added before. + if (document.head.querySelector('style.anchorjs') !== null) { + return; } - } - return this; - }; - this._addBaselineStyles = function() { - // We don't want to add global baseline styles if they've been added before. - if (document.head.querySelector('style.anchorjs') !== null) { - return; - } + var style = document.createElement('style'), + linkRule = + ' .anchorjs-link {' + + ' opacity: 0;' + + ' text-decoration: none;' + + ' -webkit-font-smoothing: antialiased;' + + ' -moz-osx-font-smoothing: grayscale;' + + ' }', + hoverRule = + ' *:hover > .anchorjs-link,' + + ' .anchorjs-link:focus {' + + ' opacity: 1;' + + ' }', + anchorjsLinkFontFace = + ' @font-face {' + + ' font-family: "anchorjs-icons";' + // Icon from icomoon; 10px wide & 10px tall; 2 empty below & 4 above + ' src: url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype");' + + ' }', + pseudoElContent = + ' [data-anchorjs-icon]::after {' + + ' content: attr(data-anchorjs-icon);' + + ' }', + firstStyleEl; - var style = document.createElement('style'), - linkRule = - ' .anchorjs-link {' + - ' opacity: 0;' + - ' text-decoration: none;' + - ' -webkit-font-smoothing: antialiased;' + - ' -moz-osx-font-smoothing: grayscale;' + - ' }', - hoverRule = - ' *:hover > .anchorjs-link,' + - ' .anchorjs-link:focus {' + - ' opacity: 1;' + - ' }', - anchorjsLinkFontFace = - ' @font-face {' + - ' font-family: "anchorjs-icons";' + - ' font-style: normal;' + - ' font-weight: normal;' + // Icon from icomoon; 10px wide & 10px tall; 2 empty below & 4 above - ' src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBTUAAAC8AAAAYGNtYXAWi9QdAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zgq29TcAAAF4AAABNGhlYWQEZM3pAAACrAAAADZoaGVhBhUDxgAAAuQAAAAkaG10eASAADEAAAMIAAAAFGxvY2EAKACuAAADHAAAAAxtYXhwAAgAVwAAAygAAAAgbmFtZQ5yJ3cAAANIAAAB2nBvc3QAAwAAAAAFJAAAACAAAwJAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpywPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6cv//f//AAAAAAAg6cv//f//AAH/4xY5AAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACADEARAJTAsAAKwBUAAABIiYnJjQ/AT4BMzIWFxYUDwEGIicmND8BNjQnLgEjIgYPAQYUFxYUBw4BIwciJicmND8BNjIXFhQPAQYUFx4BMzI2PwE2NCcmNDc2MhcWFA8BDgEjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAEAAAABAACiToc1Xw889QALBAAAAAAA0XnFFgAAAADRecUWAAAAAAJTAsAAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAAlMAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAACAAAAAoAAMQAAAAAACgAUAB4AmgABAAAABQBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIABwCfAAEAAAAAAAMADgBLAAEAAAAAAAQADgC0AAEAAAAAAAUACwAqAAEAAAAAAAYADgB1AAEAAAAAAAoAGgDeAAMAAQQJAAEAHAAOAAMAAQQJAAIADgCmAAMAAQQJAAMAHABZAAMAAQQJAAQAHADCAAMAAQQJAAUAFgA1AAMAAQQJAAYAHACDAAMAAQQJAAoANAD4YW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzUmVndWxhcgBSAGUAZwB1AGwAYQByYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format("truetype");' + - ' }', - pseudoElContent = - ' [data-anchorjs-icon]::after {' + - ' content: attr(data-anchorjs-icon);' + - ' }', - firstStyleEl; - - style.className = 'anchorjs'; - style.appendChild(document.createTextNode('')); // Necessary for Webkit. - - // We place it in the head with the other style tags, if possible, so as to - // not look out of place. We insert before the others so these styles can be - // overridden if necessary. - firstStyleEl = document.head.querySelector('[rel="stylesheet"], style'); - if (firstStyleEl === undefined) { - document.head.appendChild(style); - } else { - document.head.insertBefore(style, firstStyleEl); - } + style.className = 'anchorjs'; + style.appendChild(document.createTextNode('')); // Necessary for Webkit. - style.sheet.insertRule(linkRule, style.sheet.cssRules.length); - style.sheet.insertRule(hoverRule, style.sheet.cssRules.length); - style.sheet.insertRule(pseudoElContent, style.sheet.cssRules.length); - style.sheet.insertRule(anchorjsLinkFontFace, style.sheet.cssRules.length); - }; -} + // We place it in the head with the other style tags, if possible, so as to + // not look out of place. We insert before the others so these styles can be + // overridden if necessary. + firstStyleEl = document.head.querySelector('[rel="stylesheet"], style'); + if (firstStyleEl === undefined) { + document.head.appendChild(style); + } else { + document.head.insertBefore(style, firstStyleEl); + } + + style.sheet.insertRule(linkRule, style.sheet.cssRules.length); + style.sheet.insertRule(hoverRule, style.sheet.cssRules.length); + style.sheet.insertRule(pseudoElContent, style.sheet.cssRules.length); + style.sheet.insertRule(anchorjsLinkFontFace, style.sheet.cssRules.length); + } + } -var anchors = new AnchorJS(); + return AnchorJS; +}); diff --git a/src/default_theme/assets/bass.css b/src/default_theme/assets/bass.css index 15e0dc9a4..2d860c56e 100644 --- a/src/default_theme/assets/bass.css +++ b/src/default_theme/assets/bass.css @@ -457,6 +457,7 @@ min-height:0; } .flex-none{ -webkit-box-flex:0; -webkit-flex:none; -ms-flex:none; flex:none } +.fs0{ flex-shrink: 0 } .order-0{ -webkit-box-ordinal-group:1; -webkit-order:0; -ms-flex-order:0; order:0 } .order-1{ -webkit-box-ordinal-group:2; -webkit-order:1; -ms-flex-order:1; order:1 } diff --git a/src/default_theme/assets/site.js b/src/default_theme/assets/site.js index 776d38d64..a624be7b2 100644 --- a/src/default_theme/assets/site.js +++ b/src/default_theme/assets/site.js @@ -7,7 +7,7 @@ anchors.add('h3'); // Filter UI var tocElements = document.getElementById('toc').getElementsByTagName('li'); -document.getElementById('filter-input').addEventListener('keyup', function(e) { +document.getElementById('filter-input').addEventListener('keyup', function (e) { var i, element, children; // enter key @@ -22,14 +22,14 @@ document.getElementById('filter-input').addEventListener('keyup', function(e) { } } - var match = function() { + var match = function () { return true; }; var value = this.value.toLowerCase(); if (!value.match(/^\s*$/)) { - match = function(element) { + match = function (element) { var html = element.firstChild.innerHTML; return html && html.toLowerCase().indexOf(value) !== -1; }; @@ -46,25 +46,6 @@ document.getElementById('filter-input').addEventListener('keyup', function(e) { } }); -var toggles = document.getElementsByClassName('toggle-step-sibling'); -for (var i = 0; i < toggles.length; i++) { - toggles[i].addEventListener('click', toggleStepSibling); -} - -function toggleStepSibling() { - var stepSibling = this.parentNode.parentNode.parentNode.getElementsByClassName( - 'toggle-target' - )[0]; - var klass = 'display-none'; - if (stepSibling.classList.contains(klass)) { - stepSibling.classList.remove(klass); - stepSibling.innerHTML = '▾'; - } else { - stepSibling.classList.add(klass); - stepSibling.innerHTML = '▸'; - } -} - var items = document.getElementsByClassName('toggle-sibling'); for (var j = 0; j < items.length; j++) { items[j].addEventListener('click', toggleSibling); @@ -97,11 +78,23 @@ function showHashTarget(targetId) { } } -window.addEventListener('hashchange', function() { +function scrollIntoView(targetId) { + // Only scroll to element if we don't have a stored scroll position. + if (targetId && !history.state) { + var hashTarget = document.getElementById(targetId); + if (hashTarget) { + hashTarget.scrollIntoView(); + } + } +} + +function gotoCurrentTarget() { showHashTarget(location.hash.substring(1)); -}); + scrollIntoView(location.hash.substring(1)); +} -showHashTarget(location.hash.substring(1)); +window.addEventListener('hashchange', gotoCurrentTarget); +gotoCurrentTarget(); var toclinks = document.getElementsByClassName('pre-open'); for (var k = 0; k < toclinks.length; k++) { @@ -111,3 +104,65 @@ for (var k = 0; k < toclinks.length; k++) { function preOpen() { showHashTarget(this.hash.substring(1)); } + +var split_left = document.querySelector('#split-left'); +var split_right = document.querySelector('#split-right'); +var split_parent = split_left.parentNode; +var cw_with_sb = split_left.clientWidth; +split_left.style.overflow = 'hidden'; +var cw_without_sb = split_left.clientWidth; +split_left.style.overflow = ''; + +Split(['#split-left', '#split-right'], { + elementStyle: function (dimension, size, gutterSize) { + return { + 'flex-basis': 'calc(' + size + '% - ' + gutterSize + 'px)' + }; + }, + gutterStyle: function (dimension, gutterSize) { + return { + 'flex-basis': gutterSize + 'px' + }; + }, + gutterSize: 20, + sizes: [33, 67] +}); + +// Chrome doesn't remember scroll position properly so do it ourselves. +// Also works on Firefox and Edge. + +function updateState() { + history.replaceState( + { + left_top: split_left.scrollTop, + right_top: split_right.scrollTop + }, + document.title + ); +} + +function loadState(ev) { + if (ev) { + // Edge doesn't replace change history.state on popstate. + history.replaceState(ev.state, document.title); + } + if (history.state) { + split_left.scrollTop = history.state.left_top; + split_right.scrollTop = history.state.right_top; + } +} + +window.addEventListener('load', function () { + // Restore after Firefox scrolls to hash. + setTimeout(function () { + loadState(); + // Update with initial scroll position. + updateState(); + // Update scroll positions only after we've loaded because Firefox + // emits an initial scroll event with 0. + split_left.addEventListener('scroll', updateState); + split_right.addEventListener('scroll', updateState); + }, 1); +}); + +window.addEventListener('popstate', loadState); diff --git a/src/default_theme/assets/split.css b/src/default_theme/assets/split.css new file mode 100644 index 000000000..2d7779ee9 --- /dev/null +++ b/src/default_theme/assets/split.css @@ -0,0 +1,15 @@ +.gutter { + background-color: #f5f5f5; + background-repeat: no-repeat; + background-position: 50%; +} + +.gutter.gutter-vertical { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFAQMAAABo7865AAAABlBMVEVHcEzMzMzyAv2sAAAAAXRSTlMAQObYZgAAABBJREFUeF5jOAMEEAIEEFwAn3kMwcB6I2AAAAAASUVORK5CYII='); + cursor: ns-resize; +} + +.gutter.gutter-horizontal { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg=='); + cursor: ew-resize; +} diff --git a/src/default_theme/assets/split.js b/src/default_theme/assets/split.js new file mode 100644 index 000000000..71f9a60bd --- /dev/null +++ b/src/default_theme/assets/split.js @@ -0,0 +1,782 @@ +/*! Split.js - v1.5.11 */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.Split = factory()); +}(this, (function () { 'use strict'; + + // The programming goals of Split.js are to deliver readable, understandable and + // maintainable code, while at the same time manually optimizing for tiny minified file size, + // browser compatibility without additional requirements, graceful fallback (IE8 is supported) + // and very few assumptions about the user's page layout. + var global = window; + var document = global.document; + + // Save a couple long function names that are used frequently. + // This optimization saves around 400 bytes. + var addEventListener = 'addEventListener'; + var removeEventListener = 'removeEventListener'; + var getBoundingClientRect = 'getBoundingClientRect'; + var gutterStartDragging = '_a'; + var aGutterSize = '_b'; + var bGutterSize = '_c'; + var HORIZONTAL = 'horizontal'; + var NOOP = function () { return false; }; + + // Figure out if we're in IE8 or not. IE8 will still render correctly, + // but will be static instead of draggable. + var isIE8 = global.attachEvent && !global[addEventListener]; + + // Helper function determines which prefixes of CSS calc we need. + // We only need to do this once on startup, when this anonymous function is called. + // + // Tests -webkit, -moz and -o prefixes. Modified from StackOverflow: + // http://stackoverflow.com/questions/16625140/js-feature-detection-to-detect-the-usage-of-webkit-calc-over-calc/16625167#16625167 + var calc = (['', '-webkit-', '-moz-', '-o-'] + .filter(function (prefix) { + var el = document.createElement('div'); + el.style.cssText = "width:" + prefix + "calc(9px)"; + + return !!el.style.length + }) + .shift()) + "calc"; + + // Helper function checks if its argument is a string-like type + var isString = function (v) { return typeof v === 'string' || v instanceof String; }; + + // Helper function allows elements and string selectors to be used + // interchangeably. In either case an element is returned. This allows us to + // do `Split([elem1, elem2])` as well as `Split(['#id1', '#id2'])`. + var elementOrSelector = function (el) { + if (isString(el)) { + var ele = document.querySelector(el); + if (!ele) { + throw new Error(("Selector " + el + " did not match a DOM element")) + } + return ele + } + + return el + }; + + // Helper function gets a property from the properties object, with a default fallback + var getOption = function (options, propName, def) { + var value = options[propName]; + if (value !== undefined) { + return value + } + return def + }; + + var getGutterSize = function (gutterSize, isFirst, isLast, gutterAlign) { + if (isFirst) { + if (gutterAlign === 'end') { + return 0 + } + if (gutterAlign === 'center') { + return gutterSize / 2 + } + } else if (isLast) { + if (gutterAlign === 'start') { + return 0 + } + if (gutterAlign === 'center') { + return gutterSize / 2 + } + } + + return gutterSize + }; + + // Default options + var defaultGutterFn = function (i, gutterDirection) { + var gut = document.createElement('div'); + gut.className = "gutter gutter-" + gutterDirection; + return gut + }; + + var defaultElementStyleFn = function (dim, size, gutSize) { + var style = {}; + + if (!isString(size)) { + if (!isIE8) { + style[dim] = calc + "(" + size + "% - " + gutSize + "px)"; + } else { + style[dim] = size + "%"; + } + } else { + style[dim] = size; + } + + return style + }; + + var defaultGutterStyleFn = function (dim, gutSize) { + var obj; + + return (( obj = {}, obj[dim] = (gutSize + "px"), obj )); + }; + + // The main function to initialize a split. Split.js thinks about each pair + // of elements as an independant pair. Dragging the gutter between two elements + // only changes the dimensions of elements in that pair. This is key to understanding + // how the following functions operate, since each function is bound to a pair. + // + // A pair object is shaped like this: + // + // { + // a: DOM element, + // b: DOM element, + // aMin: Number, + // bMin: Number, + // dragging: Boolean, + // parent: DOM element, + // direction: 'horizontal' | 'vertical' + // } + // + // The basic sequence: + // + // 1. Set defaults to something sane. `options` doesn't have to be passed at all. + // 2. Initialize a bunch of strings based on the direction we're splitting. + // A lot of the behavior in the rest of the library is paramatized down to + // rely on CSS strings and classes. + // 3. Define the dragging helper functions, and a few helpers to go with them. + // 4. Loop through the elements while pairing them off. Every pair gets an + // `pair` object and a gutter. + // 5. Actually size the pair elements, insert gutters and attach event listeners. + var Split = function (idsOption, options) { + if ( options === void 0 ) options = {}; + + var ids = idsOption; + var dimension; + var clientAxis; + var position; + var positionEnd; + var clientSize; + var elements; + + // Allow HTMLCollection to be used as an argument when supported + if (Array.from) { + ids = Array.from(ids); + } + + // All DOM elements in the split should have a common parent. We can grab + // the first elements parent and hope users read the docs because the + // behavior will be whacky otherwise. + var firstElement = elementOrSelector(ids[0]); + var parent = firstElement.parentNode; + var parentStyle = getComputedStyle ? getComputedStyle(parent) : null; + var parentFlexDirection = parentStyle ? parentStyle.flexDirection : null; + + // Set default options.sizes to equal percentages of the parent element. + var sizes = getOption(options, 'sizes') || ids.map(function () { return 100 / ids.length; }); + + // Standardize minSize to an array if it isn't already. This allows minSize + // to be passed as a number. + var minSize = getOption(options, 'minSize', 100); + var minSizes = Array.isArray(minSize) ? minSize : ids.map(function () { return minSize; }); + + // Get other options + var expandToMin = getOption(options, 'expandToMin', false); + var gutterSize = getOption(options, 'gutterSize', 10); + var gutterAlign = getOption(options, 'gutterAlign', 'center'); + var snapOffset = getOption(options, 'snapOffset', 30); + var dragInterval = getOption(options, 'dragInterval', 1); + var direction = getOption(options, 'direction', HORIZONTAL); + var cursor = getOption( + options, + 'cursor', + direction === HORIZONTAL ? 'col-resize' : 'row-resize' + ); + var gutter = getOption(options, 'gutter', defaultGutterFn); + var elementStyle = getOption( + options, + 'elementStyle', + defaultElementStyleFn + ); + var gutterStyle = getOption(options, 'gutterStyle', defaultGutterStyleFn); + + // 2. Initialize a bunch of strings based on the direction we're splitting. + // A lot of the behavior in the rest of the library is paramatized down to + // rely on CSS strings and classes. + if (direction === HORIZONTAL) { + dimension = 'width'; + clientAxis = 'clientX'; + position = 'left'; + positionEnd = 'right'; + clientSize = 'clientWidth'; + } else if (direction === 'vertical') { + dimension = 'height'; + clientAxis = 'clientY'; + position = 'top'; + positionEnd = 'bottom'; + clientSize = 'clientHeight'; + } + + // 3. Define the dragging helper functions, and a few helpers to go with them. + // Each helper is bound to a pair object that contains its metadata. This + // also makes it easy to store references to listeners that that will be + // added and removed. + // + // Even though there are no other functions contained in them, aliasing + // this to self saves 50 bytes or so since it's used so frequently. + // + // The pair object saves metadata like dragging state, position and + // event listener references. + + function setElementSize(el, size, gutSize, i) { + // Split.js allows setting sizes via numbers (ideally), or if you must, + // by string, like '300px'. This is less than ideal, because it breaks + // the fluid layout that `calc(% - px)` provides. You're on your own if you do that, + // make sure you calculate the gutter size by hand. + var style = elementStyle(dimension, size, gutSize, i); + + Object.keys(style).forEach(function (prop) { + // eslint-disable-next-line no-param-reassign + el.style[prop] = style[prop]; + }); + } + + function setGutterSize(gutterElement, gutSize, i) { + var style = gutterStyle(dimension, gutSize, i); + + Object.keys(style).forEach(function (prop) { + // eslint-disable-next-line no-param-reassign + gutterElement.style[prop] = style[prop]; + }); + } + + function getSizes() { + return elements.map(function (element) { return element.size; }) + } + + // Supports touch events, but not multitouch, so only the first + // finger `touches[0]` is counted. + function getMousePosition(e) { + if ('touches' in e) { return e.touches[0][clientAxis] } + return e[clientAxis] + } + + // Actually adjust the size of elements `a` and `b` to `offset` while dragging. + // calc is used to allow calc(percentage + gutterpx) on the whole split instance, + // which allows the viewport to be resized without additional logic. + // Element a's size is the same as offset. b's size is total size - a size. + // Both sizes are calculated from the initial parent percentage, + // then the gutter size is subtracted. + function adjust(offset) { + var a = elements[this.a]; + var b = elements[this.b]; + var percentage = a.size + b.size; + + a.size = (offset / this.size) * percentage; + b.size = percentage - (offset / this.size) * percentage; + + setElementSize(a.element, a.size, this[aGutterSize], a.i); + setElementSize(b.element, b.size, this[bGutterSize], b.i); + } + + // drag, where all the magic happens. The logic is really quite simple: + // + // 1. Ignore if the pair is not dragging. + // 2. Get the offset of the event. + // 3. Snap offset to min if within snappable range (within min + snapOffset). + // 4. Actually adjust each element in the pair to offset. + // + // --------------------------------------------------------------------- + // | | <- a.minSize || b.minSize -> | | + // | | | <- this.snapOffset || this.snapOffset -> | | | + // | | | || | | | + // | | | || | | | + // --------------------------------------------------------------------- + // | <- this.start this.size -> | + function drag(e) { + var offset; + var a = elements[this.a]; + var b = elements[this.b]; + + if (!this.dragging) { return } + + // Get the offset of the event from the first side of the + // pair `this.start`. Then offset by the initial position of the + // mouse compared to the gutter size. + offset = + getMousePosition(e) - + this.start + + (this[aGutterSize] - this.dragOffset); + + if (dragInterval > 1) { + offset = Math.round(offset / dragInterval) * dragInterval; + } + + // If within snapOffset of min or max, set offset to min or max. + // snapOffset buffers a.minSize and b.minSize, so logic is opposite for both. + // Include the appropriate gutter sizes to prevent overflows. + if (offset <= a.minSize + snapOffset + this[aGutterSize]) { + offset = a.minSize + this[aGutterSize]; + } else if ( + offset >= + this.size - (b.minSize + snapOffset + this[bGutterSize]) + ) { + offset = this.size - (b.minSize + this[bGutterSize]); + } + + // Actually adjust the size. + adjust.call(this, offset); + + // Call the drag callback continously. Don't do anything too intensive + // in this callback. + getOption(options, 'onDrag', NOOP)(); + } + + // Cache some important sizes when drag starts, so we don't have to do that + // continously: + // + // `size`: The total size of the pair. First + second + first gutter + second gutter. + // `start`: The leading side of the first element. + // + // ------------------------------------------------ + // | aGutterSize -> ||| | + // | ||| | + // | ||| | + // | ||| <- bGutterSize | + // ------------------------------------------------ + // | <- start size -> | + function calculateSizes() { + // Figure out the parent size minus padding. + var a = elements[this.a].element; + var b = elements[this.b].element; + + var aBounds = a[getBoundingClientRect](); + var bBounds = b[getBoundingClientRect](); + + this.size = + aBounds[dimension] + + bBounds[dimension] + + this[aGutterSize] + + this[bGutterSize]; + this.start = aBounds[position]; + this.end = aBounds[positionEnd]; + } + + function innerSize(element) { + // Return nothing if getComputedStyle is not supported (< IE9) + // Or if parent element has no layout yet + if (!getComputedStyle) { return null } + + var computedStyle = getComputedStyle(element); + + if (!computedStyle) { return null } + + var size = element[clientSize]; + + if (size === 0) { return null } + + if (direction === HORIZONTAL) { + size -= + parseFloat(computedStyle.paddingLeft) + + parseFloat(computedStyle.paddingRight); + } else { + size -= + parseFloat(computedStyle.paddingTop) + + parseFloat(computedStyle.paddingBottom); + } + + return size + } + + // When specifying percentage sizes that are less than the computed + // size of the element minus the gutter, the lesser percentages must be increased + // (and decreased from the other elements) to make space for the pixels + // subtracted by the gutters. + function trimToMin(sizesToTrim) { + // Try to get inner size of parent element. + // If it's no supported, return original sizes. + var parentSize = innerSize(parent); + if (parentSize === null) { + return sizesToTrim + } + + if (minSizes.reduce(function (a, b) { return a + b; }, 0) > parentSize) { + return sizesToTrim + } + + // Keep track of the excess pixels, the amount of pixels over the desired percentage + // Also keep track of the elements with pixels to spare, to decrease after if needed + var excessPixels = 0; + var toSpare = []; + + var pixelSizes = sizesToTrim.map(function (size, i) { + // Convert requested percentages to pixel sizes + var pixelSize = (parentSize * size) / 100; + var elementGutterSize = getGutterSize( + gutterSize, + i === 0, + i === sizesToTrim.length - 1, + gutterAlign + ); + var elementMinSize = minSizes[i] + elementGutterSize; + + // If element is too smal, increase excess pixels by the difference + // and mark that it has no pixels to spare + if (pixelSize < elementMinSize) { + excessPixels += elementMinSize - pixelSize; + toSpare.push(0); + return elementMinSize + } + + // Otherwise, mark the pixels it has to spare and return it's original size + toSpare.push(pixelSize - elementMinSize); + return pixelSize + }); + + // If nothing was adjusted, return the original sizes + if (excessPixels === 0) { + return sizesToTrim + } + + return pixelSizes.map(function (pixelSize, i) { + var newPixelSize = pixelSize; + + // While there's still pixels to take, and there's enough pixels to spare, + // take as many as possible up to the total excess pixels + if (excessPixels > 0 && toSpare[i] - excessPixels > 0) { + var takenPixels = Math.min( + excessPixels, + toSpare[i] - excessPixels + ); + + // Subtract the amount taken for the next iteration + excessPixels -= takenPixels; + newPixelSize = pixelSize - takenPixels; + } + + // Return the pixel size adjusted as a percentage + return (newPixelSize / parentSize) * 100 + }) + } + + // stopDragging is very similar to startDragging in reverse. + function stopDragging() { + var self = this; + var a = elements[self.a].element; + var b = elements[self.b].element; + + if (self.dragging) { + getOption(options, 'onDragEnd', NOOP)(getSizes()); + } + + self.dragging = false; + + // Remove the stored event listeners. This is why we store them. + global[removeEventListener]('mouseup', self.stop); + global[removeEventListener]('touchend', self.stop); + global[removeEventListener]('touchcancel', self.stop); + global[removeEventListener]('mousemove', self.move); + global[removeEventListener]('touchmove', self.move); + + // Clear bound function references + self.stop = null; + self.move = null; + + a[removeEventListener]('selectstart', NOOP); + a[removeEventListener]('dragstart', NOOP); + b[removeEventListener]('selectstart', NOOP); + b[removeEventListener]('dragstart', NOOP); + + a.style.userSelect = ''; + a.style.webkitUserSelect = ''; + a.style.MozUserSelect = ''; + a.style.pointerEvents = ''; + + b.style.userSelect = ''; + b.style.webkitUserSelect = ''; + b.style.MozUserSelect = ''; + b.style.pointerEvents = ''; + + self.gutter.style.cursor = ''; + self.parent.style.cursor = ''; + document.body.style.cursor = ''; + } + + // startDragging calls `calculateSizes` to store the inital size in the pair object. + // It also adds event listeners for mouse/touch events, + // and prevents selection while dragging so avoid the selecting text. + function startDragging(e) { + // Right-clicking can't start dragging. + if ('button' in e && e.button !== 0) { + return + } + + // Alias frequently used variables to save space. 200 bytes. + var self = this; + var a = elements[self.a].element; + var b = elements[self.b].element; + + // Call the onDragStart callback. + if (!self.dragging) { + getOption(options, 'onDragStart', NOOP)(getSizes()); + } + + // Don't actually drag the element. We emulate that in the drag function. + e.preventDefault(); + + // Set the dragging property of the pair object. + self.dragging = true; + + // Create two event listeners bound to the same pair object and store + // them in the pair object. + self.move = drag.bind(self); + self.stop = stopDragging.bind(self); + + // All the binding. `window` gets the stop events in case we drag out of the elements. + global[addEventListener]('mouseup', self.stop); + global[addEventListener]('touchend', self.stop); + global[addEventListener]('touchcancel', self.stop); + global[addEventListener]('mousemove', self.move); + global[addEventListener]('touchmove', self.move); + + // Disable selection. Disable! + a[addEventListener]('selectstart', NOOP); + a[addEventListener]('dragstart', NOOP); + b[addEventListener]('selectstart', NOOP); + b[addEventListener]('dragstart', NOOP); + + a.style.userSelect = 'none'; + a.style.webkitUserSelect = 'none'; + a.style.MozUserSelect = 'none'; + a.style.pointerEvents = 'none'; + + b.style.userSelect = 'none'; + b.style.webkitUserSelect = 'none'; + b.style.MozUserSelect = 'none'; + b.style.pointerEvents = 'none'; + + // Set the cursor at multiple levels + self.gutter.style.cursor = cursor; + self.parent.style.cursor = cursor; + document.body.style.cursor = cursor; + + // Cache the initial sizes of the pair. + calculateSizes.call(self); + + // Determine the position of the mouse compared to the gutter + self.dragOffset = getMousePosition(e) - self.end; + } + + // adjust sizes to ensure percentage is within min size and gutter. + sizes = trimToMin(sizes); + + // 5. Create pair and element objects. Each pair has an index reference to + // elements `a` and `b` of the pair (first and second elements). + // Loop through the elements while pairing them off. Every pair gets a + // `pair` object and a gutter. + // + // Basic logic: + // + // - Starting with the second element `i > 0`, create `pair` objects with + // `a = i - 1` and `b = i` + // - Set gutter sizes based on the _pair_ being first/last. The first and last + // pair have gutterSize / 2, since they only have one half gutter, and not two. + // - Create gutter elements and add event listeners. + // - Set the size of the elements, minus the gutter sizes. + // + // ----------------------------------------------------------------------- + // | i=0 | i=1 | i=2 | i=3 | + // | | | | | + // | pair 0 pair 1 pair 2 | + // | | | | | + // ----------------------------------------------------------------------- + var pairs = []; + elements = ids.map(function (id, i) { + // Create the element object. + var element = { + element: elementOrSelector(id), + size: sizes[i], + minSize: minSizes[i], + i: i, + }; + + var pair; + + if (i > 0) { + // Create the pair object with its metadata. + pair = { + a: i - 1, + b: i, + dragging: false, + direction: direction, + parent: parent, + }; + + pair[aGutterSize] = getGutterSize( + gutterSize, + i - 1 === 0, + false, + gutterAlign + ); + pair[bGutterSize] = getGutterSize( + gutterSize, + false, + i === ids.length - 1, + gutterAlign + ); + + // if the parent has a reverse flex-direction, switch the pair elements. + if ( + parentFlexDirection === 'row-reverse' || + parentFlexDirection === 'column-reverse' + ) { + var temp = pair.a; + pair.a = pair.b; + pair.b = temp; + } + } + + // Determine the size of the current element. IE8 is supported by + // staticly assigning sizes without draggable gutters. Assigns a string + // to `size`. + // + // IE9 and above + if (!isIE8) { + // Create gutter elements for each pair. + if (i > 0) { + var gutterElement = gutter(i, direction, element.element); + setGutterSize(gutterElement, gutterSize, i); + + // Save bound event listener for removal later + pair[gutterStartDragging] = startDragging.bind(pair); + + // Attach bound event listener + gutterElement[addEventListener]( + 'mousedown', + pair[gutterStartDragging] + ); + gutterElement[addEventListener]( + 'touchstart', + pair[gutterStartDragging] + ); + + parent.insertBefore(gutterElement, element.element); + + pair.gutter = gutterElement; + } + } + + setElementSize( + element.element, + element.size, + getGutterSize( + gutterSize, + i === 0, + i === ids.length - 1, + gutterAlign + ), + i + ); + + // After the first iteration, and we have a pair object, append it to the + // list of pairs. + if (i > 0) { + pairs.push(pair); + } + + return element + }); + + function adjustToMin(element) { + var isLast = element.i === pairs.length; + var pair = isLast ? pairs[element.i - 1] : pairs[element.i]; + + calculateSizes.call(pair); + + var size = isLast + ? pair.size - element.minSize - pair[bGutterSize] + : element.minSize + pair[aGutterSize]; + + adjust.call(pair, size); + } + + elements.forEach(function (element) { + var computedSize = element.element[getBoundingClientRect]()[dimension]; + + if (computedSize < element.minSize) { + if (expandToMin) { + adjustToMin(element); + } else { + // eslint-disable-next-line no-param-reassign + element.minSize = computedSize; + } + } + }); + + function setSizes(newSizes) { + var trimmed = trimToMin(newSizes); + trimmed.forEach(function (newSize, i) { + if (i > 0) { + var pair = pairs[i - 1]; + + var a = elements[pair.a]; + var b = elements[pair.b]; + + a.size = trimmed[i - 1]; + b.size = newSize; + + setElementSize(a.element, a.size, pair[aGutterSize], a.i); + setElementSize(b.element, b.size, pair[bGutterSize], b.i); + } + }); + } + + function destroy(preserveStyles, preserveGutter) { + pairs.forEach(function (pair) { + if (preserveGutter !== true) { + pair.parent.removeChild(pair.gutter); + } else { + pair.gutter[removeEventListener]( + 'mousedown', + pair[gutterStartDragging] + ); + pair.gutter[removeEventListener]( + 'touchstart', + pair[gutterStartDragging] + ); + } + + if (preserveStyles !== true) { + var style = elementStyle( + dimension, + pair.a.size, + pair[aGutterSize] + ); + + Object.keys(style).forEach(function (prop) { + elements[pair.a].element.style[prop] = ''; + elements[pair.b].element.style[prop] = ''; + }); + } + }); + } + + if (isIE8) { + return { + setSizes: setSizes, + destroy: destroy, + } + } + + return { + setSizes: setSizes, + getSizes: getSizes, + collapse: function collapse(i) { + adjustToMin(elements[i]); + }, + destroy: destroy, + parent: parent, + pairs: pairs, + } + }; + + return Split; + +}))); diff --git a/src/default_theme/assets/style.css b/src/default_theme/assets/style.css index d7e56e042..0618f4376 100644 --- a/src/default_theme/assets/style.css +++ b/src/default_theme/assets/style.css @@ -26,7 +26,7 @@ h4 { } a { - color: #1184CE; + color: #1184ce; text-decoration: none; } @@ -46,13 +46,17 @@ a:hover { max-height: 100%; } +.height-viewport-100 { + height: 100vh; +} + section:target h3 { - font-weight:700; + font-weight: 700; } .documentation td, .documentation th { - padding: .25rem .25rem; + padding: 0.25rem 0.25rem; } h1:hover .anchorjs-link, @@ -78,13 +82,16 @@ h4:hover .anchorjs-link { } } -.pre, pre, code, .code { - font-family: Source Code Pro,Menlo,Consolas,Liberation Mono,monospace; +.pre, +pre, +code, +.code { + font-family: Source Code Pro, Menlo, Consolas, Liberation Mono, monospace; font-size: 14px; } .fill-light { - background: #F9F9F9; + background: #f9f9f9; } .width2 { @@ -96,10 +103,10 @@ h4:hover .anchorjs-link { display: block; width: 100%; height: 2rem; - padding: .5rem; + padding: 0.5rem; margin-bottom: 1rem; border: 1px solid #ccc; - font-size: .875rem; + font-size: 0.875rem; border-radius: 3px; box-sizing: border-box; } @@ -111,15 +118,19 @@ table { .prose table th, .prose table td { text-align: left; - padding:8px; - border:1px solid #ddd; + padding: 8px; + border: 1px solid #ddd; } -.prose table th:nth-child(1) { border-right: none; } -.prose table th:nth-child(2) { border-left: none; } +.prose table th:nth-child(1) { + border-right: none; +} +.prose table th:nth-child(2) { + border-left: none; +} .prose table { - border:1px solid #ddd; + border: 1px solid #ddd; } .prose-big { diff --git a/src/default_theme/index._ b/src/default_theme/index._ index 69e28abb0..ead8c2dfc 100644 --- a/src/default_theme/index._ +++ b/src/default_theme/index._ @@ -1,17 +1,19 @@ - + - - <%- config['project-name'] %> <%- config['project-version'] %> | Documentation + + <%- config['project-name'] %> <%- config['project-version'] %> | Documentation<% if (config['project-description']) { %> + '><% } %> - - - + + + + <% if (config['favicon']) { %> + ' rel='icon' ><% } %> - -
    -
    -
    + +
    +

    <%- config['project-name'] %>

    <%- config['project-version'] %>
    @@ -19,6 +21,9 @@ placeholder='Filter' id='filter-input' class='col12 block input' + spellcheck='false' + autocapitalize='off' + autocorrect='off' type='text' />
      @@ -87,26 +92,27 @@
    -
    +
    <% docs.forEach(function(s) { %> - <% if (s.kind !== 'note') { %> - <%= renderSection({ - section: s, - renderSection: renderSection, - renderSectionList: renderSectionList - }) %> - <% } else { %> + <% if (s.kind === 'note' && !s.children) { %>
    <%=renderNote({ note: s })%>
    + <% } else { %> + <%= renderSection({ + section: s, + renderSection: renderSection, + renderSectionList: renderSectionList, + renderParamProperty: renderParamProperty + }) %> <% } %> <% }) %>
    -
    + diff --git a/src/default_theme/index.js b/src/default_theme/index.js index 1cae8fdf7..c0300d319 100644 --- a/src/default_theme/index.js +++ b/src/default_theme/index.js @@ -13,21 +13,20 @@ function isFunction(section) { return ( section.kind === 'function' || (section.kind === 'typedef' && + section.type && section.type.type === 'NameExpression' && section.type.name === 'Function') ); } -module.exports = function( - comments: Array, - config: DocumentationConfig -) { - var linkerStack = new LinkerStack( - config - ).namespaceResolver(comments, function(namespace) { - var slugger = new GithubSlugger(); - return '#' + slugger.slug(namespace); - }); +module.exports = function (comments, config) { + var linkerStack = new LinkerStack(config).namespaceResolver( + comments, + function (namespace) { + var slugger = new GithubSlugger(); + return '#' + slugger.slug(namespace); + } + ); var formatters = createFormatters(linkerStack.link); @@ -81,7 +80,7 @@ module.exports = function( if (config.hljs && config.hljs.highlightAuto) { return hljs.highlightAuto(example).value; } - return hljs.highlight('js', example).value; + return hljs.highlight(example, { language: 'js' }).value; } } }; @@ -98,6 +97,10 @@ module.exports = function( fs.readFileSync(path.join(__dirname, 'note._'), 'utf8'), sharedImports ); + sharedImports.imports.renderParamProperty = _.template( + fs.readFileSync(path.join(__dirname, 'paramProperty._'), 'utf8'), + sharedImports + ); var pageTemplate = _.template( fs.readFileSync(path.join(__dirname, 'index._'), 'utf8'), @@ -107,7 +110,7 @@ module.exports = function( // push assets into the pipeline as well. return new Promise(resolve => { vfs.src([__dirname + '/assets/**'], { base: __dirname }).pipe( - concat(function(files) { + concat(function (files) { resolve( files.concat( new File({ diff --git a/src/default_theme/note._ b/src/default_theme/note._ index 0a83e5ba7..cebebc13c 100644 --- a/src/default_theme/note._ +++ b/src/default_theme/note._ @@ -7,4 +7,4 @@ <% if (note.description) { %> <%= md(note.description) %> <% } %> - + \ No newline at end of file diff --git a/src/default_theme/paramProperty._ b/src/default_theme/paramProperty._ new file mode 100644 index 000000000..5291b2be3 --- /dev/null +++ b/src/default_theme/paramProperty._ @@ -0,0 +1,15 @@ + + <%- property.name %> <%= formatType(property.type) %> + <% if (property.default) { %> + (default <%- property.default %>) + <% } %> + <%= md(property.description, true) %> + +<% if(property.properties && property.properties.length) { %> + <% property.properties.forEach(function(childProperty) { %> + <%= renderParamProperty({ + property: childProperty, + renderParamProperty: renderParamProperty + }) %> + <% }) %> +<% } %> diff --git a/src/default_theme/section._ b/src/default_theme/section._ index 8228331c7..cd30107e5 100644 --- a/src/default_theme/section._ +++ b/src/default_theme/section._ @@ -16,15 +16,14 @@ <% } %> <%= md(section.description) %> - -
    <%= signature(section) %>
    +
    <%= signature(section) %>
    <% if (section.type) { %>

    Type: <%= formatType(section.type) %>

    <% } %> - <% if (section.augments.length) { %> + <% if (section.augments && section.augments.length) { %>

    Extends <% if (section.augments) { %> @@ -42,7 +41,7 @@ <% if (section.copyright) { %>

    Copyright: <%= md(section.copyright, true) %>
    <% }%> <% if (section.since) { %>
    Since: <%- section.since %>
    <% }%> - <% if (section.params.length) { %> + <% if (section.params && section.params.length) { %>
    Parameters
    <% section.params.forEach(function(param) { %> @@ -66,13 +65,10 @@ <% param.properties.forEach(function(property) { %> - - <%- property.name %> <%= formatType(property.type) %> - <% if (property.default) { %> - (default <%- property.default %>) - <% } %> - <%= md(property.description, true) %> - + <%= renderParamProperty({ + property: property, + renderParamProperty: renderParamProperty + }) %> <% }) %> @@ -82,7 +78,7 @@
    <% } %> - <% if (section.properties.length) { %> + <% if (section.properties && section.properties.length) { %>
    Properties
    <% section.properties.forEach(function(property) { %> @@ -109,7 +105,7 @@
    <% } %> - <% if (section.returns.length) { %> + <% if (section.returns && section.returns.length) { %> <% section.returns.forEach(function(ret) { %>
    Returns
    <%= formatType(ret.type) %><% if (ret.description) { %>: @@ -118,7 +114,16 @@ <% }) %> <% } %> - <% if (section.throws.length) { %> + <% if (section.sees && section.sees.length) { %> +
    Related
    + <% section.sees.forEach(function(see) { %> + <% if (see.description) { %> + <%= md(see.description, true) %> + <% }%> + <% }) %> + <% } %> + + <% if (section.throws && section.throws.length) { %>
    Throws
      <% section.throws.forEach(function(throws) { %> @@ -127,7 +132,7 @@
    <% } %> - <% if (section.examples.length) { %> + <% if (section.examples && section.examples.length) { %>
    Example
    <% section.examples.forEach(function(example) { %> <% if (example.caption) { %>

    <%= md(example.caption) %>

    <% } %> @@ -137,16 +142,21 @@ <% if (section.members.static && section.members.static.length) { %>
    Static Members
    - <%= renderSectionList({ members: section.members.static, renderSection: renderSection, noun: 'Static Member' }) %> + <%= renderSectionList({ members: section.members.static, renderSection: renderSection, renderParamProperty: renderParamProperty, noun: 'Static Member' }) %> <% } %> <% if (section.members.instance && section.members.instance.length) { %>
    Instance Members
    - <%= renderSectionList({ members: section.members.instance, renderSection: renderSection, noun: 'Instance Member' }) %> + <%= renderSectionList({ members: section.members.instance, renderSection: renderSection, renderParamProperty: renderParamProperty, noun: 'Instance Member' }) %> + <% } %> + + <% if (section.members.inner && section.members.inner.length) { %> +
    Inner Members
    + <%= renderSectionList({ members: section.members.inner, renderSection: renderSection, renderParamProperty: renderParamProperty, noun: 'Inner Member' }) %> <% } %> <% if (section.members.events && section.members.events.length) { %>
    Events
    - <%= renderSectionList({ members: section.members.events, renderSection: renderSection, noun: 'Event' }) %> + <%= renderSectionList({ members: section.members.events, renderSection: renderSection, renderParamProperty: renderParamProperty, noun: 'Event' }) %> <% } %> diff --git a/src/default_theme/section_list._ b/src/default_theme/section_list._ index 7063465fe..60d80ac32 100644 --- a/src/default_theme/section_list._ +++ b/src/default_theme/section_list._ @@ -11,7 +11,8 @@ <%= renderSection({ section: member, renderSection: renderSection, - nested: true + renderParamProperty: renderParamProperty, + nested: true }) %>
    diff --git a/src/extractors/comments.js b/src/extractors/comments.js index 8130e4dbe..bcd755207 100644 --- a/src/extractors/comments.js +++ b/src/extractors/comments.js @@ -1,6 +1,5 @@ -/* @flow */ -import traverse from 'babel-traverse'; -var isJSDocComment = require('../is_jsdoc_comment'); +const traverse = require('@babel/traverse').default; +const isJSDocComment = require('../is_jsdoc_comment'); /** * Iterate through the abstract syntax tree, finding a different kind of comment @@ -14,14 +13,8 @@ var isJSDocComment = require('../is_jsdoc_comment'); * @returns comments * @private */ -function walkComments( - type: string, - includeContext: boolean, - ast: Object, - data: Object, - addComment: Function -): Array { - var newResults = []; +function walkComments(type, includeContext, ast, data, addComment) { + const newResults = []; traverse(ast, { /** @@ -35,7 +28,7 @@ function walkComments( * Parse a comment with doctrine and decorate the result with file position and code context. * * @param {Object} comment the current state of the parsed JSDoc comment - * @return {undefined} this emits data + * @returns {undefined} this emits data */ function parseComment(comment) { newResults.push( @@ -54,7 +47,7 @@ function walkComments( } }); - traverse.clearCache(); + traverse.cache.clear(); return newResults; } diff --git a/src/extractors/exported.js b/src/extractors/exported.js index e9be88a44..720fa280d 100644 --- a/src/extractors/exported.js +++ b/src/extractors/exported.js @@ -1,11 +1,10 @@ -/* @flow */ -import traverse from 'babel-traverse'; -var isJSDocComment = require('../is_jsdoc_comment'); -var t = require('babel-types'); -var nodePath = require('path'); -var fs = require('fs'); -import { parseToAst } from '../parsers/parse_to_ast'; -var findTarget = require('../infer/finders').findTarget; +const traverse = require('@babel/traverse').default; +const isJSDocComment = require('../is_jsdoc_comment'); +const t = require('@babel/types'); +const nodePath = require('path'); +const fs = require('fs'); +const { parseToAst } = require('../parsers/parse_to_ast'); +const findTarget = require('../infer/finders').findTarget; /** * Iterate through the abstract syntax tree, finding ES6-style exports, @@ -18,23 +17,19 @@ var findTarget = require('../infer/finders').findTarget; * @returns {Array} comments * @private */ -function walkExported( - ast: Object, - data /*: { +function walkExported(ast, data /*: { file: string -} */, - addComment: Function -) { - var newResults = []; - var filename = data.file; - var dataCache = new Map(); +} */, addComment) { + const newResults = []; + const filename = data.file; + const dataCache = new Map(); function addBlankComment(data, path, node) { return addComment(data, '', node.loc, path, node.loc, true); } function getComments(data, path) { - var comments = (path.node.leadingComments || []).filter(isJSDocComment); + const comments = (path.node.leadingComments || []).filter(isJSDocComment); if (!comments.length) { // If this is the first declarator we check for comments on the VariableDeclaration. @@ -45,12 +40,12 @@ function walkExported( return getComments(data, path.parentPath); } - var added = addBlankComment(data, path, path.node); + const added = addBlankComment(data, path, path.node); return added ? [added] : []; } return comments - .map(function(comment) { + .map(function (comment) { return addComment( data, comment.value, @@ -64,9 +59,9 @@ function walkExported( } function addComments(data, path, overrideName) { - var comments = getComments(data, path); + const comments = getComments(data, path); if (overrideName) { - comments.forEach(function(comment) { + comments.forEach(function (comment) { comment.name = overrideName; }); } @@ -78,7 +73,7 @@ function walkExported( path.skip(); }, ExportDeclaration(path) { - var declaration = path.get('declaration'); + const declaration = path.get('declaration'); if (t.isDeclaration(declaration)) { traverseExportedSubtree(declaration, data, addComments); return path.skip(); @@ -86,7 +81,7 @@ function walkExported( if (path.isExportDefaultDeclaration()) { if (declaration.isIdentifier()) { - var binding = declaration.scope.getBinding(declaration.node.name); + const binding = declaration.scope.getBinding(declaration.node.name); traverseExportedSubtree(binding.path, data, addComments); return path.skip(); } @@ -96,23 +91,23 @@ function walkExported( } if (t.isExportNamedDeclaration(path)) { - var specifiers = path.get('specifiers'); - var source = path.node.source; - var exportKind = path.node.exportKind; + const specifiers = path.get('specifiers'); + const source = path.node.source; + const exportKind = path.node.exportKind; specifiers.forEach(specifier => { - var specData = data; - var local, exported; + let specData = data; + let local; if (t.isExportDefaultSpecifier(specifier)) { local = 'default'; } else { // ExportSpecifier local = specifier.node.local.name; } - exported = specifier.node.exported.name; + const exported = specifier.node.exported.name; - var bindingPath; + let bindingPath; if (source) { - var tmp = findExportDeclaration( + const tmp = findExportDeclaration( dataCache, local, exportKind, @@ -145,20 +140,23 @@ function walkExported( } function traverseExportedSubtree(path, data, addComments, overrideName) { - var attachCommentPath = path; + let attachCommentPath = path; if (path.parentPath && path.parentPath.isExportDeclaration()) { attachCommentPath = path.parentPath; } addComments(data, attachCommentPath, overrideName); - path = findTarget(path); + let target = findTarget(path); + if (!target) { + return; + } - if (t.isVariableDeclarator(path) && path.has('init')) { - path = path.get('init'); + if (t.isVariableDeclarator(target) && target.has('init')) { + target = target.get('init'); } - if (path.isClass() || path.isObjectExpression()) { - path.traverse({ + if (target.isClass() || target.isObjectExpression()) { + target.traverse({ Property(path) { addComments(data, path); path.skip(); @@ -176,15 +174,15 @@ function traverseExportedSubtree(path, data, addComments, overrideName) { } function getCachedData(dataCache, filePath) { - var path = filePath; + let path = filePath; if (!nodePath.extname(path)) { path = require.resolve(path); } - var value = dataCache.get(path); + let value = dataCache.get(path); if (!value) { - var input = fs.readFileSync(path, 'utf-8'); - var ast = parseToAst(input, path); + const input = fs.readFileSync(path, 'utf-8'); + const ast = parseToAst(input, filePath); value = { data: { file: path, @@ -205,12 +203,12 @@ function findExportDeclaration( referrer, filename ) { - var depPath = nodePath.resolve(nodePath.dirname(referrer), filename); - var tmp = getCachedData(dataCache, depPath); - var ast = tmp.ast; - var data = tmp.data; + const depPath = nodePath.resolve(nodePath.dirname(referrer), filename); + const tmp = getCachedData(dataCache, depPath); + const ast = tmp.ast; + let data = tmp.data; - var rv; + let rv; traverse(ast, { Statement(path) { path.skip(); @@ -220,13 +218,14 @@ function findExportDeclaration( rv = path.get('declaration'); path.stop(); } else if (path.isExportNamedDeclaration()) { - var declaration = path.get('declaration'); + const declaration = path.get('declaration'); if (t.isDeclaration(declaration)) { - var bindingName; + let bindingName; if ( declaration.isFunctionDeclaration() || declaration.isClassDeclaration() || - declaration.isTypeAlias() + declaration.isTypeAlias() || + declaration.isOpaqueType() ) { bindingName = declaration.node.id.name; } else if (declaration.isVariableDeclaration()) { @@ -244,11 +243,11 @@ function findExportDeclaration( // export {x as y} // export {x as y} from './file.js' - var specifiers = path.get('specifiers'); - var source = path.node.source; - for (var i = 0; i < specifiers.length; i++) { - var specifier = specifiers[i]; - var local, exported; + const specifiers = path.get('specifiers'); + const source = path.node.source; + for (let i = 0; i < specifiers.length; i++) { + const specifier = specifiers[i]; + let local, exported; if (t.isExportDefaultSpecifier(specifier)) { // export x from ... local = 'default'; @@ -261,7 +260,7 @@ function findExportDeclaration( if (exported === name) { if (source) { // export {local as exported} from './file.js'; - var tmp = findExportDeclaration( + const tmp = findExportDeclaration( dataCache, local, exportKind, @@ -301,7 +300,7 @@ function findExportDeclaration( // Since we cannot use scope.getBinding for types this walks the current scope looking for a // top-level type alias. function findLocalType(scope, local) { - var rv; + let rv; scope.path.traverse({ Statement(path) { path.skip(); diff --git a/src/filter_access.js b/src/filter_access.js index ca05409a5..b9b0e642a 100644 --- a/src/filter_access.js +++ b/src/filter_access.js @@ -1,6 +1,4 @@ -/* @flow */ - -import { walk } from './walk'; +const { walk } = require('./walk'); /** * Exclude given access levels from the generated documentation: this allows @@ -9,9 +7,9 @@ import { walk } from './walk'; * * @param {Array} [levels=['public', 'undefined', 'protected']] included access levels. * @param {Array} comments parsed comments (can be nested) - * @return {Array} filtered comments + * @returns {Array} filtered comments */ -function filterAccess(levels: Array, comments: Array) { +function filterAccess(levels, comments) { function filter(comment) { return ( comment.kind === 'note' || @@ -20,7 +18,7 @@ function filterAccess(levels: Array, comments: Array) { } function recurse(comment) { - for (var scope in comment.members) { + for (const scope in comment.members) { comment.members[scope] = comment.members[scope].filter(filter); } } diff --git a/src/flow_doctrine.js b/src/flow_doctrine.js index 031c4124e..c80b23001 100644 --- a/src/flow_doctrine.js +++ b/src/flow_doctrine.js @@ -1,14 +1,13 @@ -/* @flow */ +const generate = require('@babel/generator').default; -const generate = require('babel-generator').default; - -var namedTypes = { +const namedTypes = { NumberTypeAnnotation: 'number', BooleanTypeAnnotation: 'boolean', - StringTypeAnnotation: 'string' + StringTypeAnnotation: 'string', + SymbolTypeAnnotation: 'symbol' }; -var oneToOne = { +const oneToOne = { AnyTypeAnnotation: 'AllLiteral', MixedTypeAnnotation: 'AllLiteral', NullLiteralTypeAnnotation: 'NullLiteral', @@ -16,7 +15,9 @@ var oneToOne = { }; function propertyToField(property) { - var type = flowDoctrine(property.value); + if (!property.value) return null; + + let type = flowDoctrine(property.value); if (property.optional) { // Doctrine does not support optional fields but it does have something called optional types // (which makes no sense, but let's play along). @@ -27,7 +28,7 @@ function propertyToField(property) { } return { type: 'FieldType', - key: property.key.name, + key: property.key.name || property.key.value, value: type }; } @@ -43,9 +44,9 @@ function propertyToField(property) { * @param {Object} type babel-parsed flow type * @returns {Object} doctrine compatible type */ -function flowDoctrine(type: Object): DoctrineType { +function flowDoctrine(type) { if (type.type in namedTypes) { - let doctrineType = { + const doctrineType = { type: 'NameExpression', name: namedTypes[type.type] }; @@ -127,7 +128,7 @@ function flowDoctrine(type: Object): DoctrineType { if (type.properties) { return { type: 'RecordType', - fields: type.properties.map(propertyToField) + fields: type.properties.map(propertyToField).filter(x => x) }; } @@ -142,7 +143,7 @@ function flowDoctrine(type: Object): DoctrineType { type: 'BooleanLiteralType', value: type.value }; - case 'NumericLiteralTypeAnnotation': + case 'NumberLiteralTypeAnnotation': return { type: 'NumericLiteralType', value: type.value @@ -152,6 +153,11 @@ function flowDoctrine(type: Object): DoctrineType { type: 'StringLiteralType', value: type.value }; + case 'ThisTypeAnnotation': + return { + type: 'NameExpression', + name: 'this' + }; default: return { type: 'AllLiteral' diff --git a/src/garbage_collect.js b/src/garbage_collect.js index 78a698d4e..79b8ed36b 100644 --- a/src/garbage_collect.js +++ b/src/garbage_collect.js @@ -1,5 +1,4 @@ -/* @flow */ -function garbageCollect(comment: Comment) { +function garbageCollect(comment) { delete comment.context.code; delete comment.context.ast; return comment; diff --git a/src/get-readme-file.js b/src/get-readme-file.js new file mode 100644 index 000000000..796b5690d --- /dev/null +++ b/src/get-readme-file.js @@ -0,0 +1,22 @@ +const fs = require('fs'); +const path = require('path'); + +module.exports = function findReadme(dir) { + const readmeFilenames = [ + 'README.markdown', + 'README.md', + 'Readme.md', + 'readme.markdown', + 'readme.md' + ]; + + const readmeFile = fs.readdirSync(dir).find(function (filename) { + return readmeFilenames.indexOf(filename) >= 0; + }); + + if (readmeFile) { + return path.join(fs.realpathSync(dir), readmeFile); + } + + return 'README.md'; +}; diff --git a/src/git/find_git.js b/src/git/find_git.js index 8dfb0e8e5..426b9091d 100644 --- a/src/git/find_git.js +++ b/src/git/find_git.js @@ -1,22 +1,29 @@ -/* @flow */ - -var path = require('path'); -var fs = require('fs'); +const path = require('path'); +const fs = require('fs'); /** * Given a full path to a single file, iterate upwards through the filesystem * to find a directory with a .git file indicating that it is a git repository * @param filename any file within a repository - * @returns repository path + * @returns repository root & its .git folder paths */ -function findGit(filename: string) { - var paths = filename.split(path.sep); - for (var i = paths.length; i > 0; i--) { - var p = path.resolve(paths.slice(0, i).join(path.sep) + path.sep + '.git'); - if (fs.existsSync(p)) { - return p; +function findGit(filename) { + let root = path.resolve(filename); + while (root) { + root = path.dirname(root); + let git = path.join(root, '.git'); + if (!fs.existsSync(git)) continue; + + if (fs.statSync(git).isFile()) { + // git submodule + const matches = fs.readFileSync(git, 'utf8').match(/gitdir: (.*)/); + if (!matches) return null; + git = path.join(root, matches[1]); } + + return { root, git }; } + return null; } module.exports = findGit; diff --git a/src/git/url_prefix.js b/src/git/url_prefix.js index 10315914f..0e0737bef 100644 --- a/src/git/url_prefix.js +++ b/src/git/url_prefix.js @@ -1,8 +1,7 @@ -/* @flow */ -var fs = require('fs'); -var path = require('path'); -var gitUrlParse = require('git-url-parse'); -var getRemoteOrigin = require('remote-origin-url'); +const fs = require('fs'); +const path = require('path'); +const gitUrlParse = require('git-url-parse'); +const ini = require('ini'); /** * Sometimes git will [pack refs](https://git-scm.com/docs/git-pack-refs) @@ -33,15 +32,15 @@ function parsePackedRefs(packedRefs, branchName) { * @returns {string} base HTTPS url of the GitHub repository * @throws {Error} if the root is not a git repo */ -function getGithubURLPrefix(root: string) { - var sha; +function getGithubURLPrefix({ git, root }) { + let sha; try { - var head = fs.readFileSync(path.join(root, '.git', 'HEAD'), 'utf8'); - var branch = head.match(/ref: (.*)/); + const head = fs.readFileSync(path.join(git, 'HEAD'), 'utf8'); + const branch = head.match(/ref: (.*)/); if (branch) { - var branchName = branch[1]; - var branchFileName = path.join(root, '.git', branchName); - var packedRefsName = path.join(root, '.git', 'packed-refs'); + const branchName = branch[1]; + const branchFileName = path.join(git, branchName); + const packedRefsName = path.join(git, 'packed-refs'); if (fs.existsSync(branchFileName)) { sha = fs.readFileSync(branchFileName, 'utf8'); } else if (fs.existsSync(packedRefsName)) { @@ -58,17 +57,32 @@ function getGithubURLPrefix(root: string) { sha = head; } if (sha) { - return ( - gitUrlParse(getRemoteOrigin.sync(root)).toString('https') + - '/blob/' + - sha.trim() + - '/' - ); + let origin; + if (git.indexOf(root) === 0) { + const config = parseGitConfig(path.join(git, 'config')); + origin = config['remote "origin"'].url; + } else { + const config = parseGitConfig(path.join(git, '..', '..', 'config')); + origin = config[`submodule "${path.basename(git)}"`].url; + } + const parsed = gitUrlParse(origin); + parsed.git_suffix = false; // eslint-disable-line + return parsed.toString('https') + '/blob/' + sha.trim() + '/'; } } catch (e) { return null; } } +function parseGitConfig(configPath) { + const str = fs + .readFileSync(configPath, 'utf8') + .replace( + /\[(\S+) "(.+)"\]/g, + (match, key, value) => `[${key} "${value.split('.').join('\\.')}"]` + ); + return ini.parse(str); +} + module.exports = getGithubURLPrefix; module.exports.parsePackedRefs = parsePackedRefs; diff --git a/src/github.js b/src/github.js index c25817e47..6867be0f6 100644 --- a/src/github.js +++ b/src/github.js @@ -1,34 +1,39 @@ -/* @flow */ - -var path = require('path'); -var findGit = require('./git/find_git'); -var getGithubURLPrefix = require('./git/url_prefix'); +const path = require('path'); +const findGit = require('./git/find_git'); +const getGithubURLPrefix = require('./git/url_prefix'); /** * Attempts to link code to its place on GitHub. * * @name linkGitHub * @param {Object} comment parsed comment - * @return {Object} comment with github inferred + * @returns {Object} comment with github inferred */ -module.exports = function(comment: Comment) { - var repoPath = findGit(comment.context.file); - var root = repoPath ? path.dirname(repoPath) : '.'; - var urlPrefix = getGithubURLPrefix(root); - var fileRelativePath = comment.context.file - .replace(root + path.sep, '') - .split(path.sep) - .join('/'); +module.exports = function (comment) { + const paths = findGit(comment.context.file); + + const urlPrefix = paths && getGithubURLPrefix(paths); if (urlPrefix) { + const fileRelativePath = comment.context.file + .replace(paths.root + path.sep, '') + .split(path.sep) + .join('/'); + + let startLine; + let endLine; + + if (comment.kind == 'typedef') { + startLine = comment.loc.start.line; + endLine = comment.loc.end.line; + } else { + startLine = comment.context.loc.start.line; + endLine = comment.context.loc.end.line; + } + comment.context.github = { - url: urlPrefix + - fileRelativePath + - '#L' + - comment.context.loc.start.line + - '-' + - 'L' + - comment.context.loc.end.line, + url: + urlPrefix + fileRelativePath + '#L' + startLine + '-' + 'L' + endLine, path: fileRelativePath }; } diff --git a/src/hierarchy.js b/src/hierarchy.js index f8bb120fb..1eddff936 100644 --- a/src/hierarchy.js +++ b/src/hierarchy.js @@ -1,18 +1,18 @@ -var _ = require('lodash'); -var hasOwnProperty = Object.prototype.hasOwnProperty; +const _ = require('lodash'); +const hasOwnProperty = Object.prototype.hasOwnProperty; /** * Check if a given member object is of kind `event`. * @param {Object} member - The member to check. * @returns {boolean} `true` if it is of kind `event`, otherwise false. */ -let isEvent = member => member.kind === 'event'; +const isEvent = member => member.kind === 'event'; /** * We need to have members of all valid JSDoc scopes. * @private */ -let getMembers = () => ({ +const getMembers = () => ({ global: Object.create(null), inner: Object.create(null), instance: Object.create(null), @@ -32,7 +32,7 @@ function pick(comment) { return undefined; } - var item = { + const item = { name: comment.name, kind: comment.kind }; @@ -49,38 +49,69 @@ function pick(comment) { * @returns {Array} nested comments, with only root comments * at the top level. */ -module.exports = function(comments) { - var id = 0, - root = { - members: getMembers() - }; +module.exports = function (comments) { + let id = 0; + const root = { + members: getMembers() + }; + + const namesToUnroot = []; comments.forEach(comment => { - var path = []; + let path = comment.path; + if (!path) { + path = []; + + if (comment.memberof) { + // TODO: full namepath parsing + path = comment.memberof + .split('.') + .map(segment => ({ scope: 'static', name: segment })); + } - if (comment.memberof) { - // TODO: full namepath parsing - path = comment.memberof.split('.').map(segment => ['static', segment]); - } + if (!comment.name) { + comment.errors.push({ + message: 'could not determine @name for hierarchy' + }); + } - if (!comment.name) { - comment.errors.push({ - message: 'could not determine @name for hierarchy' + path.push({ + scope: comment.scope || 'static', + name: comment.name || 'unknown_' + id++ }); } - path.push([comment.scope || 'static', comment.name || 'unknown_' + id++]); - - var node = root; + let node = root; while (path.length) { - var segment = path.shift(), scope = segment[0], name = segment[1]; + const segment = path.shift(); + const scope = segment.scope; + const name = segment.name; if (!hasOwnProperty.call(node.members[scope], name)) { - node.members[scope][name] = { - comments: [], - members: getMembers() - }; + // If segment.toc is true, everything up to this point in the path + // represents how the documentation should be nested, but not how the + // actual code is nested. To ensure that child members end up in the + // right places in the tree, we temporarily push the same node a second + // time to the root of the tree, and unroot it after all the comments + // have found their homes. + if ( + segment.toc && + node !== root && + hasOwnProperty.call(root.members[scope], name) + ) { + node.members[scope][name] = root.members[scope][name]; + namesToUnroot.push(name); + } else { + const newNode = (node.members[scope][name] = { + comments: [], + members: getMembers() + }); + if (segment.toc && node !== root) { + root.members[scope][name] = newNode; + namesToUnroot.push(name); + } + } } node = node.members[scope][name]; @@ -88,6 +119,9 @@ module.exports = function(comments) { node.comments.push(comment); }); + namesToUnroot.forEach(function (name) { + delete root.members.static[name]; + }); /* * Massage the hierarchy into a format more suitable for downstream consumers: @@ -107,32 +141,35 @@ module.exports = function(comments) { * Person~say // the inner method named "say." */ function toComments(nodes, root, hasUndefinedParent, path) { - var result = [], scope; + const result = []; + let scope; path = path || []; - for (var name in nodes) { - var node = nodes[name]; + for (const name in nodes) { + const node = nodes[name]; for (scope in node.members) { node.members[scope] = toComments( node.members[scope], root || result, !node.comments.length, - node.comments.length ? path.concat(node.comments[0]) : [] + node.comments.length && node.comments[0].kind !== 'note' + ? path.concat(node.comments[0]) + : [] ); } - for (var i = 0; i < node.comments.length; i++) { - var comment = node.comments[i]; + for (let i = 0; i < node.comments.length; i++) { + const comment = node.comments[i]; comment.members = {}; for (scope in node.members) { comment.members[scope] = node.members[scope]; } - var events = comment.members.events; - var groups = []; + let events = comment.members.events; + let groups = []; if (comment.members.instance.length) { groups = _.groupBy(comment.members.instance, isEvent); @@ -166,7 +203,7 @@ module.exports = function(comments) { comment.path = path.map(pick).concat(pick(comment)).filter(Boolean); - var scopeChars = { + const scopeChars = { instance: '#', static: '.', inner: '~', @@ -185,10 +222,10 @@ module.exports = function(comments) { }, ''); if (hasUndefinedParent) { - var memberOfTag = comment.tags.filter( + const memberOfTag = comment.tags.filter( tag => tag.title === 'memberof' )[0]; - var memberOfTagLineNumber = + const memberOfTagLineNumber = (memberOfTag && memberOfTag.lineNumber) || 0; comment.errors.push({ diff --git a/src/index.js b/src/index.js index e06f04986..2486051c2 100644 --- a/src/index.js +++ b/src/index.js @@ -1,28 +1,30 @@ -var fs = require('fs'), - _ = require('lodash'), - sort = require('./sort'), - nest = require('./nest'), - filterAccess = require('./filter_access'), - dependency = require('./input/dependency'), - shallow = require('./input/shallow'), - parseJavaScript = require('./parsers/javascript'), - polyglot = require('./parsers/polyglot'), - github = require('./github'), - hierarchy = require('./hierarchy'), - inferName = require('./infer/name'), - inferKind = require('./infer/kind'), - inferAugments = require('./infer/augments'), - inferParams = require('./infer/params'), - inferProperties = require('./infer/properties'), - inferMembership = require('./infer/membership'), - inferReturn = require('./infer/return'), - inferAccess = require('./infer/access'), - inferType = require('./infer/type'), - formatLint = require('./lint').formatLint, - garbageCollect = require('./garbage_collect'), - lintComments = require('./lint').lintComments, - markdownAST = require('./output/markdown_ast'), - mergeConfig = require('./merge_config'); +const fs = require('fs'); +const path = require('path'); +const _ = require('lodash'); +const sort = require('./sort'); +const nest = require('./nest'); +const filterAccess = require('./filter_access'); +const dependency = require('./input/dependency'); +const shallow = require('./input/shallow'); +const parseJavaScript = require('./parsers/javascript'); +const parseVueScript = require('./parsers/vue'); +const github = require('./github'); +const hierarchy = require('./hierarchy'); +const inferName = require('./infer/name'); +const inferKind = require('./infer/kind'); +const inferAugments = require('./infer/augments'); +const inferImplements = require('./infer/implements'); +const inferParams = require('./infer/params'); +const inferProperties = require('./infer/properties'); +const inferMembership = require('./infer/membership'); +const inferReturn = require('./infer/return'); +const inferAccess = require('./infer/access'); +const inferType = require('./infer/type'); +const formatLint = require('./lint').formatLint; +const garbageCollect = require('./garbage_collect'); +const lintComments = require('./lint').lintComments; +const markdownAST = require('./output/markdown_ast'); +const mergeConfig = require('./merge_config'); /** * Build a pipeline of comment handlers. @@ -33,7 +35,7 @@ var fs = require('fs'), */ function pipeline(fns) { return comment => { - for (var i = 0; comment && i < fns.length; i++) { + for (let i = 0; comment && i < fns.length; i++) { if (fns[i]) { comment = fns[i](comment); } @@ -43,10 +45,10 @@ function pipeline(fns) { } function configure(indexes, args) { - let mergedConfig = mergeConfig(args); + const mergedConfig = mergeConfig(args); return mergedConfig.then(config => { - let expandedInputs = expandInputs(indexes, config); + const expandedInputs = expandInputs(indexes, config); return expandedInputs.then(inputs => { return { @@ -69,7 +71,7 @@ function expandInputs(indexes, config) { // Ensure that indexes is an array of strings indexes = [].concat(indexes); - if (config.polyglot || config.shallow || config.documentExported) { + if (config.shallow || config.documentExported) { return shallow(indexes, config); } @@ -77,19 +79,18 @@ function expandInputs(indexes, config) { } function buildInternal(inputsAndConfig) { - let config = inputsAndConfig.config; - let inputs = inputsAndConfig.inputs; + const config = inputsAndConfig.config; + const inputs = inputsAndConfig.inputs; if (!config.access) { config.access = ['public', 'undefined', 'protected']; } - var parseFn = config.polyglot ? polyglot : parseJavaScript; - - var buildPipeline = pipeline([ + const buildPipeline = pipeline([ inferName, inferAccess(config.inferPrivate), inferAugments, + inferImplements, inferKind, nest, inferParams, @@ -101,12 +102,19 @@ function buildInternal(inputsAndConfig) { garbageCollect ]); - let extractedComments = _.flatMap(inputs, function(sourceFile) { + const extractedComments = _.flatMap(inputs, function (sourceFile) { if (!sourceFile.source) { sourceFile.source = fs.readFileSync(sourceFile.file, 'utf8'); } - return parseFn(sourceFile, config).map(buildPipeline); + if (!sourceFile.file) { + sourceFile.file = ''; + } + + if (path.extname(sourceFile.file) === '.vue') { + return parseVueScript(sourceFile, config).map(buildPipeline); + } + return parseJavaScript(sourceFile, config).map(buildPipeline); }).filter(Boolean); return filterAccess( @@ -116,12 +124,10 @@ function buildInternal(inputsAndConfig) { } function lintInternal(inputsAndConfig) { - let inputs = inputsAndConfig.inputs; - let config = inputsAndConfig.config; - - let parseFn = config.polyglot ? polyglot : parseJavaScript; + const inputs = inputsAndConfig.inputs; + const config = inputsAndConfig.config; - let lintPipeline = pipeline([ + const lintPipeline = pipeline([ lintComments, inferName, inferAccess(config.inferPrivate), @@ -135,12 +141,12 @@ function lintInternal(inputsAndConfig) { nest ]); - let extractedComments = _.flatMap(inputs, sourceFile => { + const extractedComments = _.flatMap(inputs, sourceFile => { if (!sourceFile.source) { sourceFile.source = fs.readFileSync(sourceFile.file, 'utf8'); } - return parseFn(sourceFile, config).map(lintPipeline); + return parseJavaScript(sourceFile, config).map(lintPipeline); }).filter(Boolean); return formatLint(hierarchy(extractedComments)); @@ -156,11 +162,8 @@ function lintInternal(inputsAndConfig) { * @param {Array} args.external a string regex / glob match pattern * that defines what external modules will be whitelisted and included in the * generated documentation. - * @param {boolean} [args.polyglot=false] parse comments with a regex rather than - * a proper parser. This enables support of non-JavaScript languages but - * reduces documentation's ability to infer structure of code. * @param {boolean} [args.shallow=false] whether to avoid dependency parsing - * even in JavaScript code. With the polyglot option set, this has no effect. + * even in JavaScript code. * @param {string} [args.inferPrivate] a valid regular expression string * to infer whether a code element should be private, given its naming structure. * For instance, you can specify `inferPrivate: '^_'` to automatically treat @@ -179,7 +182,7 @@ function lintInternal(inputsAndConfig) { * } * }); */ -let lint = (indexes, args) => configure(indexes, args).then(lintInternal); +const lint = (indexes, args) => configure(indexes, args).then(lintInternal); /** * Generate JavaScript documentation as a list of parsed JSDoc @@ -190,11 +193,8 @@ let lint = (indexes, args) => configure(indexes, args).then(lintInternal); * @param {Array} args.external a string regex / glob match pattern * that defines what external modules will be whitelisted and included in the * generated documentation. - * @param {boolean} [args.polyglot=false] parse comments with a regex rather than - * a proper parser. This enables support of non-JavaScript languages but - * reduces documentation's ability to infer structure of code. * @param {boolean} [args.shallow=false] whether to avoid dependency parsing - * even in JavaScript code. With the polyglot option set, this has no effect. + * even in JavaScript code. * @param {Array} [args.order=[]] optional array that * defines sorting order of documentation * @param {Array} [args.access=[]] an array of access levels @@ -222,7 +222,7 @@ let lint = (indexes, args) => configure(indexes, args).then(lintInternal); * // any other kind of code data. * }); */ -let build = (indexes, args) => configure(indexes, args).then(buildInternal); +const build = (indexes, args) => configure(indexes, args).then(buildInternal); /** * Documentation's formats are modular methods that take comments @@ -231,7 +231,7 @@ let build = (indexes, args) => configure(indexes, args).then(buildInternal); * output. * @public */ -var formats = { +const formats = { html: require('./output/html'), md: require('./output/markdown'), remark: (comments, config) => diff --git a/src/infer/access.js b/src/infer/access.js index 5908b2a87..264fff9a4 100644 --- a/src/infer/access.js +++ b/src/infer/access.js @@ -1,5 +1,3 @@ -/* @flow */ - /** * Given a string with a pattern that might infer access level, like `^_`, * create an inference method. @@ -8,18 +6,28 @@ * @returns {Function} inference method * @private */ -function inferAccessWithPattern(pattern: ?string) { - var re = pattern && new RegExp(pattern); +function inferAccessWithPattern(pattern) { + const re = pattern && new RegExp(pattern); /** - * Infers access (only private atm) from the name. + * Infers access from TypeScript annotations, and from the name (only private atm). * * @name inferAccess * @param {Object} comment parsed comment * @returns {Object} comment with access inferred */ - return function inferAccess(comment: Comment) { - // This needs to run after inferName beacuse we infer the access based on + return function inferAccess(comment) { + // Support typescript access modifiers + const ast = comment.context.ast; + if (ast && ast.node.accessibility) { + comment.access = ast.node.accessibility; + } + + if (ast && ast.node.readonly) { + comment.readonly = true; + } + + // This needs to run after inferName because we infer the access based on // the name. if ( re && diff --git a/src/infer/augments.js b/src/infer/augments.js index 1801eefb5..affcbe8d4 100644 --- a/src/infer/augments.js +++ b/src/infer/augments.js @@ -1,7 +1,5 @@ -/* @flow */ - -import generate from 'babel-generator'; -var findTarget = require('./finders').findTarget; +const generate = require('@babel/generator').default; +const findTarget = require('./finders').findTarget; /** * Infers an `augments` tag from an ES6 class declaration @@ -9,12 +7,12 @@ var findTarget = require('./finders').findTarget; * @param {Object} comment parsed comment * @returns {Object} comment with kind inferred */ -function inferAugments(comment: Comment) { +function inferAugments(comment) { if (comment.augments.length) { return comment; } - var path = findTarget(comment.context.ast); + const path = findTarget(comment.context.ast); if (!path) { return comment; @@ -33,7 +31,10 @@ function inferAugments(comment: Comment) { name: generate(path.node.superClass).code }); } - } else if (path.isInterfaceDeclaration()) { + } else if ( + (path.isInterfaceDeclaration() || path.isTSInterfaceDeclaration()) && + path.node.extends + ) { /* * extends is an array of interface identifiers or * qualified type identifiers, so we generate code diff --git a/src/infer/finders.js b/src/infer/finders.js index 645c22b86..0226b56e4 100644 --- a/src/infer/finders.js +++ b/src/infer/finders.js @@ -1,6 +1,4 @@ -/* @flow */ - -var t = require('babel-types'); +const t = require('@babel/types'); /** * Try to find the part of JavaScript a comment is referring to, by @@ -10,7 +8,7 @@ var t = require('babel-types'); * @returns {?Object} ast path, if one is found. * @private */ -function findTarget(path: Object) { +function findTarget(path) { if (!path) { return path; } @@ -28,8 +26,11 @@ function findTarget(path: Object) { } else if (t.isExpressionStatement(path)) { // foo.x = TARGET path = path.get('expression').get('right'); - } else if (t.isObjectProperty(path)) { - // var foo = { x: TARGET }; + } else if (t.isObjectProperty(path) || t.isObjectTypeProperty(path)) { + // var foo = { x: TARGET }; object property + path = path.get('value'); + } else if (t.isClassProperty(path) && path.get('value').node) { + // var foo = { x = TARGET }; class property path = path.get('value'); } diff --git a/src/infer/implements.js b/src/infer/implements.js new file mode 100644 index 000000000..eb93f00f6 --- /dev/null +++ b/src/infer/implements.js @@ -0,0 +1,38 @@ +const generate = require('@babel/generator').default; +const findTarget = require('./finders').findTarget; + +/** + * Infers an `augments` tag from an ES6 class declaration + * + * @param {Object} comment parsed comment + * @returns {Object} comment with kind inferred + */ +function inferImplements(comment) { + if (comment.implements.length) { + return comment; + } + + const path = findTarget(comment.context.ast); + if (!path) { + return comment; + } + + if (path.isClass() && path.node.implements) { + /* + * A interface can be a single name, like React, + * or a MemberExpression like React.Component, + * so we generate code from the AST rather than assuming + * we can access a name like `path.node.implements.name` + */ + path.node.implements.forEach(impl => { + comment.implements.push({ + title: 'implements', + name: generate(impl).code + }); + }); + } + + return comment; +} + +module.exports = inferImplements; diff --git a/src/infer/kind.js b/src/infer/kind.js index be0310927..8d8d7aad5 100644 --- a/src/infer/kind.js +++ b/src/infer/kind.js @@ -1,6 +1,4 @@ -/* @flow */ - -var t = require('babel-types'); +const t = require('@babel/types'); /** * Infers a `kind` tag from the context. @@ -8,7 +6,7 @@ var t = require('babel-types'); * @param {Object} comment parsed comment * @returns {Object} comment with kind inferred */ -function inferKind(comment: Comment) { +function inferKind(comment) { if (comment.kind) { return comment; } @@ -20,17 +18,38 @@ function inferKind(comment: Comment) { if (t.isClassDeclaration(node)) { comment.kind = 'class'; - } else if (t.isFunction(node)) { + if (node.abstract) { + comment.abstract = true; + } + } else if ( + t.isFunction(node) || + t.isTSDeclareMethod(node) || + t.isTSDeclareFunction(node) || + t.isFunctionTypeAnnotation(node) || + t.isTSMethodSignature(node) + ) { if (node.kind === 'get' || node.kind === 'set') { comment.kind = 'member'; } else if (node.id && node.id.name && !!/^[A-Z]/.exec(node.id.name)) { comment.kind = 'class'; } else { comment.kind = 'function'; + if (node.async) { + comment.async = true; + } + if (node.generator) { + comment.generator = true; + } + if (node.abstract) { + comment.abstract = true; + } } - } else if (t.isTypeAlias(node)) { + } else if (t.isTypeAlias(node) || t.isTSTypeAliasDeclaration(node)) { comment.kind = 'typedef'; - } else if (t.isInterfaceDeclaration(node)) { + } else if ( + t.isInterfaceDeclaration(node) || + t.isTSInterfaceDeclaration(node) + ) { comment.kind = 'interface'; } else if (t.isVariableDeclaration(node)) { if (node.kind === 'const') { @@ -49,11 +68,25 @@ function inferKind(comment: Comment) { } else if (t.isExpressionStatement(node)) { // module.exports = function() {} findKind(node.expression.right); - } else if (t.isClassProperty(node)) { + } else if ( + t.isClassProperty(node) || + t.isTSPropertySignature(node) || + t.isTSEnumMember(node) + ) { comment.kind = 'member'; } else if (t.isProperty(node)) { // { foo: function() {} } findKind(node.value); + } else if (t.isTSModuleDeclaration(node)) { + comment.kind = 'namespace'; + } else if (t.isObjectTypeProperty(node)) { + if (t.isFunctionTypeAnnotation(node.value)) { + findKind(node.value); + } else { + comment.kind = 'member'; + } + } else if (t.isTSEnumDeclaration(node)) { + comment.kind = 'enum'; } } diff --git a/src/infer/membership.js b/src/infer/membership.js index 2b2f852da..c4caf8fdc 100644 --- a/src/infer/membership.js +++ b/src/infer/membership.js @@ -1,9 +1,7 @@ -/* @flow */ - -var n = require('babel-types'), - pathParse = require('parse-filepath'), - isJSDocComment = require('../is_jsdoc_comment'), - parse = require('../parse'); +const n = require('@babel/types'); +const pathParse = require('parse-filepath'); +const isJSDocComment = require('../is_jsdoc_comment'); +const parse = require('../parse'); function inferModuleName(comment) { return ( @@ -26,12 +24,12 @@ function findLendsIdentifiers(path) { return; } - var leadingComments = path.get('leadingComments'); + const leadingComments = path.get('leadingComments'); - for (var i = 0; i < leadingComments.length; i++) { - var comment = leadingComments[i]; + for (let i = 0; i < leadingComments.length; i++) { + const comment = leadingComments[i]; if (isJSDocComment(comment.node)) { - var lends = parse(comment.node.value).lends; + const lends = parse(comment.node.value).lends; if (lends) { return lends.split('.'); } @@ -39,6 +37,33 @@ function findLendsIdentifiers(path) { } } +/** + * Given an AST node, try to find a comment before the class declaration that + * has a `memberof` tag, and if it has that, return the tag, split by + * .s with the name of the class. + * + * @private + * @param {Object} path AST node + * @returns {Array} class membership + */ +function inferClassMembership(path) { + if (path.get('leadingComments')) { + const leadingComments = path.get('leadingComments'); + + for (let i = leadingComments.length - 1; i >= 0; i--) { + const comment = leadingComments[i]; + if (isJSDocComment(comment.node)) { + const memberof = parse(comment.node.value).memberof; + if (memberof) { + return [...memberof.split('.'), path.node.id.name]; + } + } + } + } + + return [path.node.id.name]; +} + /** * Extract and return the identifiers for expressions of * type this.foo @@ -50,7 +75,7 @@ function findLendsIdentifiers(path) { * @private */ function extractThis(path, comment) { - var identifiers = []; + let identifiers = []; path.traverse({ /** @@ -60,7 +85,7 @@ function extractThis(path, comment) { * @private */ ThisExpression(path) { - var scope = path.scope; + let scope = path.scope; while (n.isBlockStatement(scope.block)) { scope = scope.parent; @@ -111,7 +136,7 @@ function extractThis(path, comment) { * @private */ function extractIdentifiers(path) { - var identifiers = []; + const identifiers = []; path.traverse({ /** @@ -156,14 +181,14 @@ function countModuleIdentifiers(comment, identifiers) { * @param comment parsed comment * @returns the normalized comment */ -function normalizeMemberof(comment: Comment): Comment { +function normalizeMemberof(comment) { if (typeof comment.memberof != 'string') { return comment; } - var memberof = comment.memberof; + const memberof = comment.memberof; - var isPrototype = /.prototype$/; + const isPrototype = /.prototype$/; if (memberof.match(isPrototype) !== null) { comment.memberof = memberof.replace(isPrototype, ''); @@ -172,7 +197,7 @@ function normalizeMemberof(comment: Comment): Comment { return comment; } - var isInstanceMember = /#$/; + const isInstanceMember = /#$/; if (memberof.match(isInstanceMember) !== null) { comment.memberof = memberof.replace(isInstanceMember, ''); @@ -190,8 +215,8 @@ function normalizeMemberof(comment: Comment): Comment { * @private * @returns {Object} comment with membership inferred */ -module.exports = function() { - var currentModule; +module.exports = function () { + let currentModule; /** * Set `memberof` and `instance`/`static` tags on `comment` based on the @@ -221,7 +246,7 @@ module.exports = function() { * Test whether identifiers start with a module export (`exports` or `module.exports`), * and if so replace those identifiers with the name of the current module. */ - var moduleIdentifierCount = countModuleIdentifiers(comment, identifiers); + const moduleIdentifierCount = countModuleIdentifiers(comment, identifiers); if (moduleIdentifierCount) { identifiers = identifiers.slice(moduleIdentifierCount); identifiers.unshift(inferModuleName(currentModule || comment)); @@ -241,32 +266,15 @@ module.exports = function() { return comment; } - function shouldSkipInference(comment: Comment): boolean { - // If someone uses the @name tag, they explicitly ask for inference - // to be skipped. - if (comment.tags.some(tag => tag.title === 'name')) { - return true; - } - + return function inferMembership(comment) { // Lends tags are go-betweens that let people reassign membership // in bulk: they themselves don't get an inference step if (comment.lends) { - return true; - } - - // If this chunk doesn't have code attached, like if it was the result - // of a polyglot parse, don't try to infer anything. - if (!comment.context.ast) { - return true; + return comment; } - return false; - } - - return function inferMembership(comment: Comment) { - // First skip inference if the user indicates it or if it isn't possible. - if (shouldSkipInference(comment)) { - return comment; + if (comment.kind === 'module') { + currentModule = comment; } // If someone explicitly specifies the parent of this chunk, don't @@ -275,12 +283,13 @@ module.exports = function() { return normalizeMemberof(comment); } - if (comment.kind === 'module') { - currentModule = comment; + let path = comment.context.ast; + // If this chunk doesn't have code attached, like if it was the result + // of a polyglot parse, don't try to infer anything. + if (!path) { + return comment; } - var path = comment.context.ast; - // INFERENCE =============================================================== // Deal with an oddity of espree: the jsdoc comment is attached to a different // node in the two expressions `a.b = c` vs `a.b = function () {}`. @@ -293,7 +302,10 @@ module.exports = function() { } // Same as above but for `b: c` vs `b: function () {}`. - if (path.isObjectProperty() && path.get('key').isIdentifier()) { + if ( + path.isObjectProperty() && + (path.get('key').isIdentifier() || path.get('key').isLiteral()) + ) { path = path.get('key'); } @@ -305,7 +317,7 @@ module.exports = function() { // // Lends is not supported in this codepath. if (path.isMemberExpression()) { - var memberIdentifiers = [].concat( + const memberIdentifiers = [].concat( extractThis(path, comment), extractIdentifiers(path) ); @@ -326,11 +338,13 @@ module.exports = function() { // class Foo { prop: T } // var Foo = class { prop: T } if ( - (path.isClassMethod() || path.isClassProperty()) && + (path.isClassMethod() || + path.isClassProperty() || + path.isTSDeclareMethod()) && path.parentPath.isClassBody() && path.parentPath.parentPath.isClass() ) { - var scope = 'instance'; + let scope = 'instance'; if (path.node.static == true) { scope = 'static'; } @@ -343,8 +357,8 @@ module.exports = function() { ); } - var declarationNode = path.parentPath.parentPath.node; - if (!declarationNode.id) { + const declarationNode = path.parentPath.parentPath.node; + if (!declarationNode.id && !declarationNode.key) { // export default function () {} // export default class {} // Use module name instead. @@ -357,7 +371,7 @@ module.exports = function() { return inferMembershipFromIdentifiers( comment, - [declarationNode.id.name], + inferClassMembership(path.parentPath.parentPath), scope ); } @@ -367,49 +381,101 @@ module.exports = function() { // doesn't matter for the membership phase, as long as we end up knowing // that it belongs to an object. So we first establish objectParent, // and then have the logic for the numerous ways an object can be named. - var objectParent; + let objectParent; if ( - path.isIdentifier() && + (path.isIdentifier() || path.isLiteral()) && path.parentPath.isObjectProperty() && path.parentPath.parentPath.isObjectExpression() ) { objectParent = path.parentPath.parentPath; } else if (path.isObjectMethod() && path.parentPath.isObjectExpression()) { objectParent = path.parentPath; + } else if (path.isObjectTypeProperty() || path.isTSTypeElement()) { + objectParent = path.parentPath; } // Confirm that the thing being documented is a property of an object. if (objectParent) { - // The @lends comment is sometimes attached to the first property rather than - // the object expression itself. - var lendsIdentifiers = - findLendsIdentifiers(objectParent) || - findLendsIdentifiers(objectParent.get('properties')[0]); - - if (lendsIdentifiers) { - return inferMembershipFromIdentifiers(comment, lendsIdentifiers); - } else if (objectParent.parentPath.isAssignmentExpression()) { - // Foo = { ... }; - // Foo.prototype = { ... }; - // Foo.bar = { ... }; - return inferMembershipFromIdentifiers( - comment, - extractIdentifiers(objectParent.parentPath.get('left')) - ); - } else if (objectParent.parentPath.isVariableDeclarator()) { - // var Foo = { ... }; - return inferMembershipFromIdentifiers(comment, [ - objectParent.parentPath.get('id').node.name - ]); - } else if (objectParent.parentPath.isExportDefaultDeclaration()) { - // export default { ... }; - return inferMembershipFromIdentifiers(comment, [ - inferModuleName(currentModule || comment) - ]); + // Collect all keys of parent nested object keys, e.g. {foo: bar: {baz: 1}} + const objectKeys = []; + + while (!objectParent.isStatement()) { + if ( + objectParent.isObjectProperty() || + objectParent.isObjectTypeProperty() || + objectParent.isTSPropertySignature() + ) { + objectKeys.unshift(objectParent.node.key.name); + } + + // The @lends comment is sometimes attached to the first property rather than + // the object expression itself. + const lendsIdentifiers = + findLendsIdentifiers(objectParent) || + findLendsIdentifiers(objectParent.get('properties')[0]); + + if (lendsIdentifiers) { + return inferMembershipFromIdentifiers(comment, [ + ...lendsIdentifiers, + ...objectKeys + ]); + } else if (objectParent.parentPath.isAssignmentExpression()) { + // Foo = { ... }; + // Foo.prototype = { ... }; + // Foo.bar = { ... }; + return inferMembershipFromIdentifiers(comment, [ + ...extractIdentifiers(objectParent.parentPath.get('left')), + ...objectKeys + ]); + } else if (objectParent.parentPath.isVariableDeclarator()) { + // var Foo = { ... }; + return inferMembershipFromIdentifiers(comment, [ + objectParent.parentPath.get('id').node.name, + ...objectKeys + ]); + } else if (objectParent.parentPath.isExportDefaultDeclaration()) { + // export default { ... }; + return inferMembershipFromIdentifiers(comment, [ + inferModuleName(currentModule || comment), + ...objectKeys + ]); + } else if ( + objectParent.parentPath.isTypeAlias() || + objectParent.parentPath.isTSTypeAliasDeclaration() + ) { + // type X = { ... } + return inferMembershipFromIdentifiers(comment, [ + objectParent.parentPath.node.id.name, + ...objectKeys + ]); + } else if ( + objectParent.parentPath.isInterfaceDeclaration() || + objectParent.parentPath.isTSInterfaceDeclaration() + ) { + // interface Foo { ... } + return inferMembershipFromIdentifiers( + comment, + [...inferClassMembership(objectParent.parentPath), ...objectKeys], + 'instance' + ); + } + + objectParent = objectParent.parentPath; } } + // TypeScript enums + // enum Foo { A } + if (path.isTSEnumMember()) { + const enumPath = path.parentPath; + return inferMembershipFromIdentifiers( + comment, + [enumPath.node.id.name], + 'static' + ); + } + // var function Foo() { // function bar() {} // return { bar: bar }; diff --git a/src/infer/name.js b/src/infer/name.js index 99048ffe6..46cf44391 100644 --- a/src/infer/name.js +++ b/src/infer/name.js @@ -1,6 +1,5 @@ -/* @flow */ - -var pathParse = require('parse-filepath'), t = require('babel-types'); +const pathParse = require('parse-filepath'); +const t = require('@babel/types'); /** * Infers a `name` tag from the context. @@ -9,7 +8,7 @@ var pathParse = require('parse-filepath'), t = require('babel-types'); * @param {Object} comment parsed comment * @returns {Object} comment with name inferred */ -function inferName(comment: Comment) { +function inferName(comment) { if (comment.name) { return comment; } @@ -35,7 +34,7 @@ function inferName(comment: Comment) { } } - var path = comment.context.ast; + const path = comment.context.ast; if (path) { if (path.type === 'ExportDefaultDeclaration') { if (t.isDeclaration(path.node.declaration) && path.node.declaration.id) { diff --git a/src/infer/params.js b/src/infer/params.js index cb9791000..13b680a8a 100644 --- a/src/infer/params.js +++ b/src/infer/params.js @@ -1,10 +1,8 @@ -/* @flow */ - -import * as t from 'babel-types'; -import generate from 'babel-generator'; -import _ from 'lodash'; -import finders from './finders'; -import flowDoctrine from '../flow_doctrine'; +const t = require('@babel/types'); +const generate = require('@babel/generator').default; +const _ = require('lodash'); +const finders = require('./finders'); +const typeAnnotation = require('../type_annotation'); /** * Infers param tags by reading function parameter names @@ -12,8 +10,11 @@ import flowDoctrine from '../flow_doctrine'; * @param {Object} comment parsed comment * @returns {Object} comment with parameters */ -function inferParams(comment: Comment) { - var path = finders.findTarget(comment.context.ast); +function inferParams(comment) { + let path = finders.findTarget(comment.context.ast); + if (!path) { + return comment; + } // In case of `/** */ var x = function () {}` findTarget returns // the declarator. @@ -23,8 +24,11 @@ function inferParams(comment: Comment) { // If this is an ES6 class with a constructor method, infer // parameters from that constructor method. - if (t.isClassDeclaration(path)) { - let constructor = path.node.body.body.find(item => { + if ( + t.isClassDeclaration(path) && + !(comment.constructorComment && comment.constructorComment.hideconstructor) + ) { + const constructor = path.node.body.body.find(item => { // https://github.com/babel/babylon/blob/master/ast/spec.md#classbody return t.isClassMethod(item) && item.kind === 'constructor'; }); @@ -33,19 +37,63 @@ function inferParams(comment: Comment) { } } - if (!t.isFunction(path)) { + if ( + !t.isFunction(path) && + !t.isTSDeclareFunction(path) && + !t.isTSDeclareMethod(path) && + !t.isFunctionTypeAnnotation(path) && + !t.isTSMethodSignature(path) + ) { return comment; } - return inferAndCombineParams(path.node.params, comment); + if (comment.kind === 'class' && comment.hideconstructor) { + return comment; + } + + let params = t.isTSMethodSignature(path) + ? path.node.parameters + : path.node.params; + + // Flow function annotations separate rest parameters into a different list + if (t.isFunctionTypeAnnotation(path) && path.node.rest) { + params = params.concat(path.node.rest); + } + + const result = inferAndCombineParams(params, comment); + + // Wrap flow rest parameter with a RestType + if (t.isFunctionTypeAnnotation(path) && path.node.rest) { + const rest = result.params[result.params.length - 1]; + rest.type = { + type: 'RestType', + expression: rest.type + }; + } + + return result; } function inferAndCombineParams(params, comment) { - var inferredParams = params.map((param, i) => paramToDoc(param, '', i)); - var mergedParamsAndErrors = mergeTrees(inferredParams, comment.params); + const inferredParams = params.map((param, i) => { + const doc = paramToDoc(param, '', i); + if (param.optional) { + doc.type = { + type: 'OptionalType', + expression: doc.type + }; + } + + return doc; + }); + const paramsToMerge = comment.params; + if (comment.constructorComment) { + paramsToMerge.push.apply(paramsToMerge, comment.constructorComment.params); + } + const mergedParamsAndErrors = mergeTrees(inferredParams, paramsToMerge); // Then merge the trees. This is the hard part. - return _.assign(comment, { + return Object.assign(comment, { params: mergedParamsAndErrors.mergedParams, errors: comment.errors.concat(mergedParamsAndErrors.errors) }); @@ -55,7 +103,7 @@ function inferAndCombineParams(params, comment) { // const PATH_SPLIT_CAPTURING = /(\[])?(\.)/g; const PATH_SPLIT = /(?:\[])?\./g; -function tagDepth(tag: CommentTag): number { +function tagDepth(tag) { return (tag.name || '').split(PATH_SPLIT).length; } @@ -87,11 +135,7 @@ function mapTags(tags) { * @param {string} prefix of the comment, if it is nested, like in the case of destructuring * @returns {Object} parameter with inference. */ -function paramToDoc( - param, - prefix: string, - i: ?number -): CommentTag | Array { +function paramToDoc(param, prefix, i) { const autoName = '$' + String(i); const prefixedName = prefix + '.' + param.name; @@ -104,7 +148,7 @@ function paramToDoc( throw new Error('Encountered an unexpected parameter type'); } - return _.assign(newAssignmentParam, { + return Object.assign(newAssignmentParam, { default: generate(param.right, { compact: true }).code, @@ -121,7 +165,8 @@ function paramToDoc( title: 'param', name: autoName, anonymous: true, - type: (param.typeAnnotation && flowDoctrine(param)) || { + type: (param.typeAnnotation && + typeAnnotation(param.typeAnnotation)) || { type: 'NameExpression', name: 'Object' }, @@ -137,7 +182,8 @@ function paramToDoc( title: 'param', name: prefixedName, anonymous: true, - type: (param.typeAnnotation && flowDoctrine(param)) || { + type: (param.typeAnnotation && + typeAnnotation(param.typeAnnotation)) || { type: 'NameExpression', name: 'Object' }, @@ -161,7 +207,8 @@ function paramToDoc( title: 'param', name: autoName, anonymous: true, - type: (param.typeAnnotation && flowDoctrine(param)) || { + type: (param.typeAnnotation && + typeAnnotation(param.typeAnnotation)) || { type: 'NameExpression', name: 'Array' }, @@ -171,7 +218,7 @@ function paramToDoc( // instead we're going to (immutably) rename the parameters to their // indices properties: _.flatMap(param.elements, (element, idx) => { - var indexedElement = _.assign({}, element, { + const indexedElement = Object.assign({}, element, { name: String(idx), indexed: true }); @@ -180,24 +227,30 @@ function paramToDoc( }; } return _.flatMap(param.elements, (element, idx) => { - var indexedElement = _.assign({}, element, { + const indexedElement = Object.assign({}, element, { name: String(idx) }); return paramToDoc(indexedElement, prefix); }); } case 'ObjectProperty': { - return _.assign(paramToDoc(param.value, prefix + '.' + param.key.name), { - name: prefix + '.' + param.key.name - }); + return Object.assign( + paramToDoc( + param.value, + prefix + '.' + param.key.name || param.key.value + ), + { + name: prefix + '.' + param.key.name || param.key.value + } + ); } case 'RestProperty': // (a, ...b) case 'RestElement': { - let type: DoctrineType = { + const type = { type: 'RestType' }; if (param.typeAnnotation) { - type.expression = flowDoctrine(param.typeAnnotation.typeAnnotation); + type.expression = typeAnnotation(param.typeAnnotation); } return { title: 'param', @@ -206,17 +259,29 @@ function paramToDoc( type }; } + case 'FunctionTypeParam': // flow interface method signature + return { + title: 'param', + name: prefix ? prefix + '.' + param.name.name : param.name.name, + lineNumber: param.loc.start.line, + type: param.typeAnnotation + ? typeAnnotation(param.typeAnnotation) + : undefined + }; default: { // (a) - var newParam: CommentTag = { + const newParam = { title: 'param', name: prefix ? prefixedName : param.name, - lineNumber: param.loc.start.line + // A skipped array argument like ([, a]); + // looks like { name: '0', indexed: true }, and thus has no location, + // so we allow location to be undefined here. + lineNumber: param.loc ? param.loc.start.line : undefined }; // Flow/TS annotations if (param.typeAnnotation && param.typeAnnotation.typeAnnotation) { - newParam.type = flowDoctrine(param.typeAnnotation.typeAnnotation); + newParam.type = typeAnnotation(param.typeAnnotation.typeAnnotation); } return newParam; @@ -239,7 +304,7 @@ function paramToDoc( * also $0.x and maybe $0.x.y.z all to options.x and options.x.y.z */ function renameTree(node, explicitName) { - var parts = node.name.split(PATH_SPLIT_CAPTURING); + const parts = node.name.split(PATH_SPLIT_CAPTURING); parts[0] = explicitName; node.name = parts.join(''); if (node.properties) { @@ -258,7 +323,7 @@ function mergeTrees(inferred, explicit) { // to destructuring parameters, which do not have inferred names. This is // _only_ enabled in the case in which all parameters are specified explicitly if (inferred.length === explicit.length) { - for (var i = 0; i < inferred.length; i++) { + for (let i = 0; i < inferred.length; i++) { if (inferred[i].anonymous === true) { renameTree(inferred[i], explicit[i].name); } @@ -275,9 +340,12 @@ function mergeTopNodes(inferred, explicit) { return tagDepth(tag) === 1 && !inferredNames.has(tag.name); }); - var errors = explicitTagsWithoutInference.map(tag => { + const errors = explicitTagsWithoutInference.map(tag => { return { - message: `An explicit parameter named ${tag.name || ''} was specified but didn't match ` + + message: + `An explicit parameter named ${ + tag.name || '' + } was specified but didn't match ` + `inferred information ${Array.from(inferredNames).join(', ')}`, commentLineNumber: tag.lineNumber }; @@ -319,10 +387,12 @@ function mergeNodes(inferred, explicit) { function combineTags(inferredTag, explicitTag) { let type = explicitTag.type; - var defaultValue; + let defaultValue; if (!explicitTag.type) { type = inferredTag.type; - } else if (!explicitTag.default && inferredTag.default) { + } + + if (!explicitTag.default && inferredTag.default) { defaultValue = inferredTag.default; } @@ -330,7 +400,7 @@ function combineTags(inferredTag, explicitTag) { (inferredTag.properties && inferredTag.properties.length) || (explicitTag.properties && explicitTag.properties.length); - return _.assign( + return Object.assign( explicitTag, hasProperties ? { diff --git a/src/infer/properties.js b/src/infer/properties.js index 19b63dd95..76522e46c 100644 --- a/src/infer/properties.js +++ b/src/infer/properties.js @@ -1,7 +1,5 @@ -/* @flow */ - -var flowDoctrine = require('../flow_doctrine'), - findTarget = require('./finders').findTarget; +const typeAnnotation = require('../type_annotation'); +const findTarget = require('./finders').findTarget; function prefixedName(name, prefix) { if (prefix.length) { @@ -10,8 +8,41 @@ function prefixedName(name, prefix) { return name; } -function propertyToDoc(property, prefix): CommentTag { - var type = flowDoctrine(property.value); +function isObjectSpreadAndExactUtilTypeProperty(property) { + return ( + property.type === 'ObjectTypeSpreadProperty' && + property.argument.id.name === '$Exact' + ); +} + +function propertyToDoc(property, prefix) { + let type; + let name; + + if (property.type === 'ObjectTypeProperty') { + // flow + type = typeAnnotation(property.value); + } else if (property.type === 'TSPropertySignature') { + // typescript + type = typeAnnotation(property.typeAnnotation); + } else if (property.type === 'TSMethodSignature') { + // typescript + type = typeAnnotation(property); + } + + if (property.key) { + name = property.key.name || property.key.value; + } + + // Special handling for { ...$Exact } + if (isObjectSpreadAndExactUtilTypeProperty(property)) { + name = property.argument.id.name; + type = { + type: 'NameExpression', + name: property.argument.typeParameters.params[0].id.name + }; + } + if (property.optional) { type = { type: 'OptionalType', @@ -20,7 +51,7 @@ function propertyToDoc(property, prefix): CommentTag { } return { title: 'property', - name: prefixedName(property.key.name, prefix), + name: prefixedName(name, prefix), lineNumber: property.loc.start.line, type }; @@ -32,35 +63,46 @@ function propertyToDoc(property, prefix): CommentTag { * @param {Object} comment parsed comment * @returns {Object} comment with inferred properties */ -function inferProperties(comment: Comment): Comment { - let explicitProperties = new Set(); +function inferProperties(comment) { + const explicitProperties = new Set(); // Ensure that explicitly specified properties are not overridden // by inferred properties - comment.properties.forEach(prop => explicitProperties.add(prop)); + comment.properties.forEach(prop => explicitProperties.add(prop.name)); function inferProperties(value, prefix) { - if (value.type === 'ObjectTypeAnnotation') { - value.properties.forEach(function(property) { - if (!explicitProperties.has(prefixedName(property.key.name, prefix))) { + if ( + value.type === 'ObjectTypeAnnotation' || + value.type === 'TSTypeLiteral' + ) { + const properties = value.properties || value.members || value.body || []; + properties.forEach(function (property) { + let name; + + if (property.key) { + name = property.key.name; + } + + // Special handling for { ...$Exact } + if (isObjectSpreadAndExactUtilTypeProperty(property)) { + name = property.argument.id.name; + } + + if (!explicitProperties.has(prefixedName(name, prefix))) { comment.properties = comment.properties.concat( propertyToDoc(property, prefix) ); - // Nested type parameters - if (property.value.type === 'ObjectTypeAnnotation') { - inferProperties(property.value, prefix.concat(property.key.name)); - } } }); } } - var path = findTarget(comment.context.ast); + const path = findTarget(comment.context.ast); if (path) { if (path.isTypeAlias()) { inferProperties(path.node.right, []); - } else if (path.isInterfaceDeclaration()) { - inferProperties(path.node.body, []); + } else if (path.isTSTypeAliasDeclaration()) { + inferProperties(path.node.typeAnnotation, []); } } diff --git a/src/infer/return.js b/src/infer/return.js index e1bc147e5..8dc1ecdc4 100644 --- a/src/infer/return.js +++ b/src/infer/return.js @@ -1,8 +1,20 @@ -/* @flow */ +const findTarget = require('./finders').findTarget; +const t = require('@babel/types'); +const typeAnnotation = require('../type_annotation'); -var findTarget = require('./finders').findTarget, - t = require('babel-types'), - flowDoctrine = require('../flow_doctrine'); +// TypeScript does not currently support typing the return value of a generator function. +// This is coming in TypeScript 3.3 - https://github.com/Microsoft/TypeScript/pull/30790 +const TS_GENERATORS = { + Iterator: 1, + Iterable: 1, + IterableIterator: 1 +}; + +const FLOW_GENERATORS = { + Iterator: 1, + Iterable: 1, + Generator: 3 +}; /** * Infers returns tags by using Flow return type annotations @@ -11,7 +23,7 @@ var findTarget = require('./finders').findTarget, * @param {Object} comment parsed comment * @returns {Object} comment with return tag inferred */ -function inferReturn(comment: Comment) { +function inferReturn(comment) { if ( Array.isArray(comment.returns) && comment.returns.length && @@ -19,8 +31,11 @@ function inferReturn(comment: Comment) { ) { return comment; } - var path = findTarget(comment.context.ast); - var fn = path && path.node; + const path = findTarget(comment.context.ast); + let fn = path && path.node; + if (!fn) { + return comment; + } // In case of `/** */ var x = function () {}` findTarget returns // the declarator. @@ -28,8 +43,47 @@ function inferReturn(comment: Comment) { fn = fn.init; } - if (t.isFunction(fn) && fn.returnType && fn.returnType.typeAnnotation) { - var returnType = flowDoctrine(fn.returnType.typeAnnotation); + const fnReturnType = getReturnType(fn); + if (fnReturnType) { + let returnType = typeAnnotation(fnReturnType); + let yieldsType = null; + + if (fn.generator && returnType.type === 'TypeApplication') { + comment.generator = true; + let numArgs; + + if (t.isFlow(fnReturnType)) { + numArgs = FLOW_GENERATORS[returnType.expression.name]; + } else if (t.isTSTypeAnnotation(fnReturnType)) { + numArgs = TS_GENERATORS[returnType.expression.name]; + } + + if (returnType.applications.length === numArgs) { + yieldsType = returnType.applications[0]; + + if (numArgs > 1) { + returnType = returnType.applications[1]; + } else { + returnType = { + type: 'VoidLiteral' + }; + } + } + } + + if (yieldsType) { + if (comment.yields && comment.yields.length > 0) { + comment.yields[0].type = yieldsType; + } else { + comment.yields = [ + { + title: 'yields', + type: yieldsType + } + ]; + } + } + if (comment.returns && comment.returns.length > 0) { comment.returns[0].type = returnType; } else { @@ -44,4 +98,19 @@ function inferReturn(comment: Comment) { return comment; } +function getReturnType(fn) { + if ( + t.isFunction(fn) || + t.isTSDeclareFunction(fn) || + t.isTSDeclareMethod(fn) || + t.isFunctionTypeAnnotation(fn) + ) { + return fn.returnType; + } + + if (t.isTSMethodSignature(fn)) { + return fn.typeAnnotation; + } +} + module.exports = inferReturn; diff --git a/src/infer/type.js b/src/infer/type.js index 9d4d2b03a..faa3b7259 100644 --- a/src/infer/type.js +++ b/src/infer/type.js @@ -1,34 +1,32 @@ -/* @flow */ +const findTarget = require('./finders').findTarget; +const typeAnnotation = require('../type_annotation'); -var findTarget = require('./finders').findTarget, - flowDoctrine = require('../flow_doctrine'), - t = require('babel-types'); - -var constTypeMapping = { +const constTypeMapping = { BooleanLiteral: { type: 'BooleanTypeAnnotation' }, NumericLiteral: { type: 'NumberTypeAnnotation' }, StringLiteral: { type: 'StringTypeAnnotation' } }; /** - * Infers type tags by using Flow type annotations + * Infers type tags by using Flow/TypeScript type annotations * * @name inferType * @param {Object} comment parsed comment * @returns {Object} comment with type tag inferred */ -function inferType(comment: Comment) { +function inferType(comment) { if (comment.type) { return comment; } - var path = findTarget(comment.context.ast); + const ast = comment.context.ast; + const path = findTarget(ast); if (!path) { return comment; } - var n = path.node; - var type; + const n = path.node; + let type; switch (n.type) { case 'VariableDeclarator': type = n.id.typeAnnotation; @@ -37,17 +35,39 @@ function inferType(comment: Comment) { } break; case 'ClassProperty': + case 'TSTypeAliasDeclaration': + case 'TSPropertySignature': type = n.typeAnnotation; break; + case 'ClassMethod': + case 'TSDeclareMethod': + if (n.kind === 'get') { + type = n.returnType; + } else if (n.kind === 'set' && n.params[0]) { + type = n.params[0].typeAnnotation; + } + break; case 'TypeAlias': type = n.right; break; + case 'TSEnumMember': + if (n.initializer) { + if (constTypeMapping[n.initializer.type]) { + type = constTypeMapping[n.initializer.type]; + } + } else { + type = constTypeMapping.NumericLiteral; + } + break; + default: + if (ast.isObjectTypeProperty() && !ast.node.method) { + type = ast.node.value; + } } - if (type) { - if (t.isTypeAnnotation(type)) { - type = type.typeAnnotation; - } - comment.type = flowDoctrine(type); + // Don't provide a `type` section when it's an ObjectTypeAnnotation, + // `properties` already exists and renders better. + if (type && type.type !== 'ObjectTypeAnnotation') { + comment.type = typeAnnotation(type); } return comment; } diff --git a/src/inline_tokenizer.js b/src/inline_tokenizer.js deleted file mode 100644 index 30006cded..000000000 --- a/src/inline_tokenizer.js +++ /dev/null @@ -1,71 +0,0 @@ -/* @flow */ - -/** - * Create a tokenizer method for Remark, our Markdown processor, - * that is able to parse JSDoc inline tokens - * - * @private - * @param {string} type the destination type of the parsed objects - * @param {RegExp} regex regular expression for extracting content - * from text - * @returns {Function} tokenizer - */ -function makeTokenizer(type, regex) { - var tokenizer = function(eat, value) { - var match = regex.exec(value); - - if (!match) { - return; - } - - return eat(match[0])({ - type, - url: match[1], - title: null, - jsdoc: true, - children: [ - { - type: 'text', - value: match[2] || match[1] - } - ] - }); - }; - - tokenizer.notInLink = true; - tokenizer.locator = function(value, fromIndex) { - return value.indexOf('{@' + type, fromIndex); - }; - - return tokenizer; -} - -var tokenizeLink = makeTokenizer('link', /^\{@link\s+(.+?)(?:[\s|](.*?))?\}/); -var tokenizeTutorial = makeTokenizer( - 'tutorial', - /^\{@tutorial\s+(.+?)(?:[\s|](.*?))?\}/ -); - -/** - * A remark plugin that installs - * [tokenizers](https://github.com/wooorm/remark/blob/master/doc/remarkplugin.3.md#function-tokenizereat-value-silent) - * and [locators](https://github.com/wooorm/remark/blob/master/doc/remarkplugin.3.md#function-locatorvalue-fromindex) - * for JSDoc inline `{@link}` and `{@tutorial}` tags. - * - * This does not handle the `[text]({@link url})` and `[text]({@tutorial url})` forms of these tags. - * That's a JSDoc misfeature; just use regular markdown syntax instead: `[text](url)`. - * - * @returns {undefined} - */ -module.exports = function(/* options: Object*/) { - var proto = this.Parser.prototype; - proto.inlineTokenizers.tokenizeLink = tokenizeLink; - proto.inlineTokenizers.tokenizeTutorial = tokenizeTutorial; - var methods = proto.inlineMethods; - methods.splice( - methods.indexOf('inlineText'), - 0, - 'tokenizeLink', - 'tokenizeTutorial' - ); -}; diff --git a/src/input/dependency.js b/src/input/dependency.js index add94a8f8..a2ee9d01e 100644 --- a/src/input/dependency.js +++ b/src/input/dependency.js @@ -1,11 +1,15 @@ -/* @flow */ +const mdeps = require('module-deps-sortable'); +const path = require('path'); +const babelify = require('babelify'); +const concat = require('concat-stream'); +const moduleFilters = require('../module_filters'); +const { standardBabelParserPlugins } = require('../parsers/parse_to_ast'); +const smartGlob = require('../smart_glob.js'); -var mdeps = require('module-deps-sortable'); -var path = require('path'); -var babelify = require('babelify'); -var concat = require('concat-stream'); -var moduleFilters = require('../module_filters'); -var smartGlob = require('../smart_glob.js'); +const STANDARD_BABEL_CONFIG = { + compact: false, + parserOpts: { plugins: [...standardBabelParserPlugins, 'flow', 'jsx'] } +}; /** * Returns a readable stream of dependencies, given an array of entry @@ -18,11 +22,11 @@ var smartGlob = require('../smart_glob.js'); * @param config optional options passed * @returns results */ -function dependencyStream( - indexes: Array, - config: DocumentationConfig -): Promise> { - var md = mdeps({ +function dependencyStream(indexes, config) { + const babelConfig = config.babel + ? { configFile: path.resolve(__dirname, '../../../../', config.babel) } + : STANDARD_BABEL_CONFIG; + const md = mdeps({ /** * Determine whether a module should be included in documentation * @param {string} id path to a module @@ -32,25 +36,16 @@ function dependencyStream( extensions: [] .concat(config.requireExtension || []) .map(ext => '.' + ext.replace(/^\./, '')) - .concat(['.js', '.json', '.es6', '.jsx']), - transform: [ - babelify.configure({ - sourceMap: false, - compact: false, - presets: [ - require('babel-preset-es2015'), - require('babel-preset-stage-0'), - require('babel-preset-react') - ], - plugins: [ - require('babel-plugin-transform-decorators-legacy').default, - // Required to support webpack's System.import - // https://github.com/documentationjs/documentation/issues/578 - require('babel-plugin-system-import-transformer').default - ] + .concat(['.mjs', '.js', '.json', '.es6', '.jsx']), + transform: [babelify.configure(babelConfig)], + postFilter: moduleFilters.externals(indexes, config), + resolve: + config.resolve === 'node' && + ((id, opts, cb) => { + const r = require('resolve'); + opts.basedir = path.dirname(opts.filename); + r(id, opts, cb); }) - ], - postFilter: moduleFilters.externals(indexes, config) }); smartGlob(indexes, config.parseExtension).forEach(index => { md.write(path.resolve(index)); @@ -60,7 +55,7 @@ function dependencyStream( return new Promise((resolve, reject) => { md.once('error', reject); md.pipe( - concat(function(inputs) { + concat(function (inputs) { resolve( inputs .filter( diff --git a/src/input/shallow.js b/src/input/shallow.js index 4ebf2cfaf..0be4a1d7c 100644 --- a/src/input/shallow.js +++ b/src/input/shallow.js @@ -1,6 +1,4 @@ -/* @flow */ - -var smartGlob = require('../smart_glob.js'); +const smartGlob = require('../smart_glob.js'); /** * A readable source for content that doesn't do dependency resolution, but @@ -16,15 +14,12 @@ var smartGlob = require('../smart_glob.js'); * * @param indexes entry points * @param config parsing options - * @return promise with parsed files + * @returns promise with parsed files */ -module.exports = function( - indexes: Array, - config: DocumentationConfig -): Promise> { - var objects = []; - var strings = []; - for (var index of indexes) { +module.exports = function (indexes, config) { + const objects = []; + const strings = []; + for (const index of indexes) { if (typeof index === 'string') { strings.push(index); } else if (typeof index === 'object') { diff --git a/src/is_jsdoc_comment.js b/src/is_jsdoc_comment.js index d24fb7a2e..e2114367b 100644 --- a/src/is_jsdoc_comment.js +++ b/src/is_jsdoc_comment.js @@ -1,5 +1,3 @@ -/* @flow */ - /** * Detect whether a comment is a JSDoc comment: it must be a block * comment which starts with two asterisks, not any other number of asterisks. @@ -10,7 +8,7 @@ * * @name isJSDocComment * @param {Object} comment an ast path of the comment - * @return {boolean} whether it is valid + * @returns {boolean} whether it is valid */ module.exports = function isJSDocComment( comment /*: { @@ -18,11 +16,8 @@ module.exports = function isJSDocComment( type: string }*/ ) { - var asterisks = comment.value.match(/^(\*+)/); + const asterisks = comment.value.match(/^(\*+)/); return ( - (comment.type === 'CommentBlock' || // estree - comment.type === 'Block') && // get-comments / traditional - asterisks && - asterisks[1].length === 1 + comment.type === 'CommentBlock' && asterisks && asterisks[1].length === 1 ); }; diff --git a/src/lint.js b/src/lint.js index 2d2a45148..ca67f2067 100644 --- a/src/lint.js +++ b/src/lint.js @@ -1,12 +1,10 @@ -/* @flow */ +const VFile = require('vfile'); +const { walk } = require('./walk'); +const vfileSort = require('vfile-sort'); +const reporter = require('vfile-reporter'); +const nest = require('./nest'); -var VFile = require('vfile'); -import { walk } from './walk'; -import vfileSort from 'vfile-sort'; -import reporter from 'vfile-reporter'; -import nest from './nest'; - -var CANONICAL = { +const CANONICAL = { String: 'string', Boolean: 'boolean', Undefined: 'undefined', @@ -23,8 +21,8 @@ var CANONICAL = { * @param {Object} comment parsed comment * @returns {Array} array of errors */ -function lintComments(comment: Comment) { - comment.tags.forEach(function(tag) { +function lintComments(comment) { + comment.tags.forEach(function (tag) { function nameInvariant(name) { if (name && typeof CANONICAL[name] === 'string') { comment.errors.push({ @@ -67,19 +65,19 @@ function lintComments(comment: Comment) { * @private * Extract lint instructions from comments and generate user-readable output. * @param {Array} comments a list of comments - * @return {string} user-readable output + * @returns {string} user-readable output */ -function formatLint(comments: Array): string { - var vFiles = {}; - walk(comments, function(comment) { - comment.errors.forEach(function(error) { - var p = comment.context.file; +function formatLint(comments) { + const vFiles = {}; + walk(comments, function (comment) { + comment.errors.forEach(function (error) { + const p = comment.context.file; vFiles[p] = vFiles[p] || new VFile({ path: p }); - vFiles[p].warn(error.message, { + vFiles[p].message(error.message, { line: comment.loc.start.line + (error.commentLineNumber || 0) }); }); diff --git a/src/merge_config.js b/src/merge_config.js index 7d4cd8726..292d88750 100644 --- a/src/merge_config.js +++ b/src/merge_config.js @@ -1,14 +1,11 @@ -/* @flow */ +const yaml = require('js-yaml'); +const fs = require('fs'); +const pify = require('pify'); +const readPkgUp = require('read-pkg-up'); +const path = require('path'); +const stripComments = require('strip-json-comments'); -var yaml = require('js-yaml'), - fs = require('fs'), - pify = require('pify'), - _ = require('lodash'), - readPkgUp = require('read-pkg-up'), - path = require('path'), - stripComments = require('strip-json-comments'); - -function processToc(config: DocumentationConfig, absFilePath: string) { +function processToc(config, absFilePath) { if (!config || !config.toc) { return config; } @@ -29,25 +26,21 @@ function processToc(config: DocumentationConfig, absFilePath: string) { * values of `name` and `version` config. * * @param {Object} config the user-provided config, usually via argv - * @returns {Object} configuration with inferred parameters + * @returns {Promise} configuration with inferred parameters * @throws {Error} if the file cannot be read. */ -function mergePackage(config: Object): Promise { +function mergePackage(config) { if (config.noPackage) { return Promise.resolve(config); } return ( readPkgUp() - .then(pkg => - _.defaults( - {}, - _.mapKeys( - _.pick(pkg.pkg, ['name', 'homepage', 'version']), - (val, key) => `project-${key}` - ), - config - ) - ) + .then(pkg => { + ['name', 'homepage', 'version', 'description'].forEach(key => { + config[`project-${key}`] = config[`project-${key}`] || pkg.pkg[key]; + }); + return config; + }) // Allow this to fail: this inference is not required. .catch(() => config) ); @@ -61,33 +54,41 @@ function mergePackage(config: Object): Promise { * @returns {Promise} configuration, if it can be parsed * @throws {Error} if the file cannot be read. */ -function mergeConfigFile(config): Promise { +function mergeConfigFile(config) { if (config && typeof config.config === 'string') { - var filePath = config.config; - var ext = path.extname(filePath); - var absFilePath = path.resolve(process.cwd(), filePath); - return pify(fs).readFile(absFilePath, 'utf8').then(rawFile => { - if (ext === '.json') { + const filePath = config.config; + const ext = path.extname(filePath); + const absFilePath = path.resolve(process.cwd(), filePath); + return pify(fs) + .readFile(absFilePath, 'utf8') + .then(rawFile => { + if (ext === '.json') { + return Object.assign( + {}, + config, + processToc(JSON.parse(stripComments(rawFile)), absFilePath) + ); + } return Object.assign( {}, config, - processToc(JSON.parse(stripComments(rawFile)), absFilePath) + processToc(yaml.safeLoad(rawFile), absFilePath) ); - } - return Object.assign( - {}, - config, - processToc(yaml.safeLoad(rawFile), absFilePath) - ); - }); + }); } return Promise.resolve(config || {}); } -function mergeConfig(config: Object): Promise { - config.parseExtension = (config.parseExtension || []) - .concat(['js', 'jsx', 'es5', 'es6']); +function mergeConfig(config) { + config.parseExtension = (config.parseExtension || []).concat([ + 'mjs', + 'js', + 'jsx', + 'es5', + 'es6', + 'vue' + ]); return mergeConfigFile(config).then(mergePackage); } diff --git a/src/module_filters.js b/src/module_filters.js index 55b6cec34..a748341b4 100644 --- a/src/module_filters.js +++ b/src/module_filters.js @@ -1,10 +1,8 @@ -/* @flow */ - -var path = require('path'); -var micromatch = require('micromatch'); +const path = require('path'); +const micromatch = require('micromatch'); // Skip external modules. Based on http://git.io/pzPO. -var internalModuleRegexp = +const internalModuleRegexp = process.platform === 'win32' ? /* istanbul ignore next */ /^(\.|\w:)/ @@ -23,20 +21,17 @@ module.exports = { * @param {Array} indexes - the list of entry points that will be * used by module-deps * @param {Object} options - An options object with `external` being a - * micromatch-compaitible glob. *NOTE:* the glob will be matched relative to + * micromatch-compatible glob. *NOTE:* the glob will be matched relative to * the top-level node_modules directory for each entry point. - * @return {function} - A function for use as the module-deps `postFilter` + * @returns {function} - A function for use as the module-deps `postFilter` * options. */ - externals: function externalModuleFilter( - indexes: Array, - options: Object - ) { - var externalFilters = false; + externals: function externalModuleFilter(indexes, options) { + let externalFilters = false; if (options.external) { externalFilters = indexes.map(index => { // grab the path of the top-level node_modules directory. - var topNodeModules = path.join(path.dirname(index), 'node_modules'); + const topNodeModules = path.join(path.dirname(index), 'node_modules'); return function matchGlob(file, pkg) { // if a module is not found, don't include it. if (!file || !pkg) { @@ -51,14 +46,14 @@ module.exports = { file = path.dirname(file); } // test the path relative to the top node_modules dir. - var p = path.relative(topNodeModules, file); + const p = path.relative(topNodeModules, file); return micromatch.any(p, options.external); }; }); } - return function(id: string, file: string, pkg: Object) { - var internal = internalModuleRegexp.test(id); + return function (id, file, pkg) { + const internal = internalModuleRegexp.test(id); return ( internal || (externalFilters && externalFilters.some(f => f(file, pkg))) ); diff --git a/src/nest.js b/src/nest.js index 6a9987fc2..b86240c67 100644 --- a/src/nest.js +++ b/src/nest.js @@ -1,14 +1,12 @@ -/* @flow */ - -var _ = require('lodash'); +const _ = require('lodash'); const PATH_SPLIT = /(?:\[])?\./g; -function removeUnnamedTags(tags: Array): Array { +function removeUnnamedTags(tags) { return tags.filter(tag => typeof tag.name === 'string'); } -var tagDepth = tag => tag.name.split(PATH_SPLIT).length; +const tagDepth = tag => tag.name.split(PATH_SPLIT).length; /** * Nest nestable tags, like param and property, into nested @@ -32,9 +30,9 @@ var tagDepth = tag => tag.name.split(PATH_SPLIT).length; * @param {Array} tags a list of tags * @returns {Object} nested comment */ -var nestTag = ( - tags: Array, - errors: Array +const nestTag = ( + tags, + errors // Use lodash here both for brevity and also because, unlike JavaScript's // sort, it's stable. ) => @@ -46,13 +44,13 @@ var nestTag = ( // get to this case because the recursive method // is always passed parts.slice(1) if (parts.length === 1) { - _.assign(node, { + Object.assign(node, { properties: (node.properties || []).concat(tag) }); } else { // The recursive case: try to find the child that owns // this tag. - let child = + const child = node.properties && node.properties.find( property => parts[0] === _.last(property.name.split(PATH_SPLIT)) @@ -95,9 +93,9 @@ var nestTag = ( * This assumes that incoming comments have been flattened. * * @param {Object} comment input comment - * @return {Object} nested comment + * @returns {Object} nested comment */ -var nest = (comment: Comment) => +const nest = comment => Object.assign(comment, { params: nestTag(comment.params, comment.errors), properties: nestTag(comment.properties, comment.errors) diff --git a/src/output/highlighter.js b/src/output/highlighter.js index 90ce41731..4308f8577 100644 --- a/src/output/highlighter.js +++ b/src/output/highlighter.js @@ -1,6 +1,5 @@ -/* @flow */ -var visit = require('unist-util-visit'); -var hljs = require('highlight.js'); +const visit = require('unist-util-visit'); +const hljs = require('highlight.js'); /** * Adapted from remark-highlight.js @@ -19,7 +18,7 @@ function visitor(node) { } } -module.exports = function(ast: Object) { +module.exports = function (ast) { visit(ast, 'code', visitor); return ast; }; diff --git a/src/output/html.js b/src/output/html.js index 16a5f6f81..33cd6fd7d 100644 --- a/src/output/html.js +++ b/src/output/html.js @@ -1,12 +1,10 @@ -/* @flow */ - -var path = require('path'); -var mergeConfig = require('../merge_config'); +const path = require('path'); +const mergeConfig = require('../merge_config'); /** * Formats documentation as HTML. * - * @param comments parsed comments + * @param {Array} comments parsed comments * @param {Object} config Options that can customize the output * @param {string} [config.theme='default_theme'] Name of a module used for an HTML theme. * @returns {Promise>} Promise with results @@ -23,9 +21,12 @@ var mergeConfig = require('../merge_config'); * streamArray(output).pipe(vfs.dest('./output-directory')); * }); */ -function html(comments: Array, config: DocumentationConfig) { +function html(comments, config) { + if (!config) { + config = {}; + } return mergeConfig(config).then(config => { - var themePath = '../default_theme/'; + let themePath = '../default_theme/'; if (config.theme) { themePath = path.resolve(process.cwd(), config.theme); } diff --git a/src/output/json.js b/src/output/json.js index a210c6362..78051dfc3 100644 --- a/src/output/json.js +++ b/src/output/json.js @@ -1,11 +1,10 @@ -/* @flow */ - -import { walk } from '../walk'; +const { walk } = require('../walk'); /** * Formats documentation as a JSON string. * - * @param comments parsed comments + * @param {Array} comments parsed comments + * @returns {Promise} * @name formats.json * @public * @example @@ -19,7 +18,7 @@ import { walk } from '../walk'; * fs.writeFileSync('./output.json', output); * }); */ -function json(comments: Array): Promise { +function json(comments) { walk(comments, comment => { delete comment.errors; if (comment.context) { diff --git a/src/output/markdown.js b/src/output/markdown.js index 29a3127e2..252f50d4e 100644 --- a/src/output/markdown.js +++ b/src/output/markdown.js @@ -1,15 +1,14 @@ -/* @flow */ - -var remark = require('remark'), markdownAST = require('./markdown_ast'); +const remark = require('remark'); +const markdownAST = require('./markdown_ast'); /** * Formats documentation as - * [Markdown](http://daringfireball.net/projects/markdown/). + * [Markdown](https://daringfireball.net/projects/markdown/). * * @param {Array} comments parsed comments * @param {Object} args Options that can customize the output * @name formats.markdown - * @return {Promise} a promise of the eventual value + * @returns {Promise} a promise of the eventual value * @public * @example * var documentation = require('documentation'); @@ -22,7 +21,10 @@ var remark = require('remark'), markdownAST = require('./markdown_ast'); * fs.writeFileSync('./output.md', output); * }); */ -function markdown(comments: Array, args: Object): Promise { +function markdown(comments, args) { + if (!args) { + args = {}; + } return markdownAST(comments, args).then(ast => remark().stringify(ast)); } diff --git a/src/output/markdown_ast.js b/src/output/markdown_ast.js index ab1b1dae7..f1241bcba 100644 --- a/src/output/markdown_ast.js +++ b/src/output/markdown_ast.js @@ -1,16 +1,15 @@ -/* @flow */ +const u = require('unist-builder'); +const remark = require('remark'); +const mergeConfig = require('../merge_config'); +const toc = require('remark-toc'); +const links = require('remark-reference-links'); +const hljs = require('highlight.js'); +const GithubSlugger = require('github-slugger'); +const LinkerStack = require('./util/linker_stack'); +const rerouteLinks = require('./util/reroute_links'); +const _formatType = require('./util/format_type'); -var u = require('unist-builder'), - remark = require('remark'), - mergeConfig = require('../merge_config'), - toc = require('remark-toc'), - hljs = require('highlight.js'), - GithubSlugger = require('github-slugger'), - LinkerStack = require('./util/linker_stack'), - rerouteLinks = require('./util/reroute_links'), - _formatType = require('./util/format_type'); - -var DEFAULT_LANGUAGE = 'javascript'; +const DEFAULT_LANGUAGE = 'javascript'; /** * Given a hierarchy-nested set of comments, generate an remark-compatible @@ -24,35 +23,33 @@ var DEFAULT_LANGUAGE = 'javascript'; * consult hljs.configure for the full list. * @returns {Promise} returns an eventual Markdown value */ -function markdownAST(comments: Array, args: Object) { +function markdownAST(comments, args) { return mergeConfig(args).then(config => buildMarkdownAST(comments, config)); } -function buildMarkdownAST( - comments: Array, - config: DocumentationConfig -) { +function buildMarkdownAST(comments, config) { // Configure code highlighting - var hljsOptions = config.hljs || {}; + const hljsOptions = config.hljs || {}; hljs.configure(hljsOptions); - var linkerStack = new LinkerStack( - config - ).namespaceResolver(comments, namespace => { - var slugger = new GithubSlugger(); - return '#' + slugger.slug(namespace); - }); + const linkerStack = new LinkerStack(config).namespaceResolver( + comments, + namespace => { + const slugger = new GithubSlugger(); + return '#' + slugger.slug(namespace); + } + ); - var formatType = _formatType.bind(undefined, linkerStack.link); + const formatType = _formatType.bind(undefined, linkerStack.link); - var generatorComment = [ + const generatorComment = [ u( 'html', '' ) ]; - var tableOfContentsHeading = [ + const tableOfContentsHeading = [ u('heading', { depth: 3 }, [u('text', 'Table of Contents')]) ]; @@ -64,19 +61,19 @@ function buildMarkdownAST( * @param {Object} comment a single comment * @returns {Object} remark-compatible AST */ - function generate(depth: number, comment: Comment) { - function typeSection(comment: Comment) { + function generate(depth, comment) { + function typeSection(comment) { return ( comment.type && u('paragraph', [u('text', 'Type: ')].concat(formatType(comment.type))) ); } - function paramList(params: Array) { + function paramList(params) { if (params.length === 0) return []; return u( 'list', - { ordered: false }, + { ordered: false, spread: false }, params.map(param => u( 'listItem', @@ -108,28 +105,28 @@ function buildMarkdownAST( ); } - function paramSection(comment: Comment) { + function paramSection(comment) { return ( comment.params.length > 0 && [ - u('strong', [u('text', 'Parameters')]), + u('heading', { depth: depth + 1 }, [u('text', 'Parameters')]), paramList(comment.params) ] ); } - function propertySection(comment: Comment) { + function propertySection(comment) { return ( comment.properties.length > 0 && [ - u('strong', [u('text', 'Properties')]), + u('heading', { depth: depth + 1 }, [u('text', 'Properties')]), propertyList(comment.properties) ] ); } - function propertyList(properties: Array) { + function propertyList(properties) { return u( 'list', - { ordered: false }, + { ordered: false, spread: false }, properties.map(property => u( 'listItem', @@ -154,12 +151,12 @@ function buildMarkdownAST( ); } - function examplesSection(comment: Comment) { + function examplesSection(comment) { return ( comment.examples.length > 0 && - [u('strong', [u('text', 'Examples')])].concat( - comment.examples.reduce(function(memo, example) { - var language = hljsOptions.highlightAuto + [u('heading', { depth: depth + 1 }, [u('text', 'Examples')])].concat( + comment.examples.reduce(function (memo, example) { + const language = hljsOptions.highlightAuto ? hljs.highlightAuto(example.description).language : DEFAULT_LANGUAGE; return memo @@ -174,7 +171,7 @@ function buildMarkdownAST( ); } - function returnsSection(comment: Comment) { + function returnsSection(comment) { return ( comment.returns.length > 0 && comment.returns.map(returns => @@ -190,12 +187,12 @@ function buildMarkdownAST( ); } - function throwsSection(comment: Comment) { + function throwsSection(comment) { return ( comment.throws.length > 0 && u( 'list', - { ordered: false }, + { ordered: false, spread: false }, comment.throws.map(returns => u('listItem', [ u( @@ -214,7 +211,7 @@ function buildMarkdownAST( ); } - function augmentsLink(comment: Comment) { + function augmentsLink(comment) { return ( comment.augments.length > 0 && u('paragraph', [ @@ -226,22 +223,27 @@ function buildMarkdownAST( ); } - function seeLink(comment: Comment) { + function seeLink({ sees = [] }) { return ( - comment.sees.length > 0 && + sees.length > 0 && u( 'list', - { ordered: false }, - comment.sees.map(see => + { ordered: false, spread: false }, + sees.map(see => u('listItem', [ - u('strong', [u('text', 'See: ')].concat(see.children)) + u( + 'paragraph', + [u('strong', [u('text', 'See')]), u('text', ': ')].concat( + see.description + ) + ) ]) ) ) ); } - function githubLink(comment: Comment) { + function githubLink(comment) { return ( comment.context && comment.context.github && @@ -267,8 +269,8 @@ function buildMarkdownAST( ); } - function metaSection(comment: Comment) { - let meta = [ + function metaSection(comment) { + const meta = [ 'version', 'since', 'copyright', @@ -281,7 +283,7 @@ function buildMarkdownAST( [u('strong', [u('text', 'Meta')])].concat( u( 'list', - { ordered: false }, + { ordered: false, spread: false }, meta.map(tag => { let metaContent; if (tag === 'copyright' || tag === 'deprecated') { @@ -303,9 +305,16 @@ function buildMarkdownAST( } if (comment.kind === 'note') { - return [u('heading', { depth }, [u('text', comment.name || '')])].concat( - comment.description - ); + return [u('heading', { depth }, [u('text', comment.name || '')])] + .concat(comment.description) + .concat( + !!comment.members.static.length && + comment.members.static.reduce( + (memo, child) => memo.concat(generate(depth + 1, child)), + [] + ) + ) + .filter(Boolean); } return [u('heading', { depth }, [u('text', comment.name || '')])] @@ -348,10 +357,17 @@ function buildMarkdownAST( [] ) ) + .concat( + !!comment.members.events.length && + comment.members.events.reduce( + (memo, child) => memo.concat(generate(depth + 1, child)), + [] + ) + ) .filter(Boolean); } - var root = rerouteLinks( + let root = rerouteLinks( linkerStack.link, u( 'root', @@ -366,9 +382,14 @@ function buildMarkdownAST( ) ); - if (config.markdownToc) { - root = remark().use(toc, { tight: true }).run(root); - } + const pluginRemark = remark(); + if (config.markdownToc) + pluginRemark.use(toc, { + tight: true, + maxDepth: config.markdownTocMaxDepth + }); + if (config.noReferenceLinks !== true) pluginRemark.use(links); + root = pluginRemark.run(root); return Promise.resolve(root); } diff --git a/src/output/util/format_type.js b/src/output/util/format_type.js index 4e2ad406f..2aebc7f4e 100644 --- a/src/output/util/format_type.js +++ b/src/output/util/format_type.js @@ -1,6 +1,5 @@ -/* @flow */ -var Syntax = require('doctrine-temporary-fork').Syntax, - u = require('unist-builder'); +const Syntax = require('doctrine-temporary-fork').Syntax; +const u = require('unist-builder'); /** * Shortcut to create a new text node @@ -26,7 +25,7 @@ function t(text) { * link('string').url // => 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String' */ function link(text, getHref, description) { - var href = getHref(text); + const href = getHref(text); if (href) { // TODO: this is a temporary fix until we drop remark 3.x support, // and then we should remove the 'href' property and only @@ -57,11 +56,11 @@ function link(text, getHref, description) { * @returns {Array} formatted remark AST */ function commaList(getHref, items, start, end, sep) { - var res = []; + let res = []; if (start) { res.push(t(start)); } - for (var i = 0, iz = items.length; i < iz; ++i) { + for (let i = 0, iz = items.length; i < iz; ++i) { res = res.concat(formatType(getHref, items[i])); if (i + 1 !== iz) { res.push(t(sep || ', ')); @@ -100,8 +99,8 @@ function decorate(formatted, str, prefix) { * formatType({ type: 'NameExpression', name: 'String' })[0].url * // => 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String' */ -function formatType(getHref: Function, node: ?Object) { - var result = []; +function formatType(getHref, node) { + let result = []; if (!node) { return [t('any')]; diff --git a/src/output/util/formatters.js b/src/output/util/formatters.js index a5c523afe..78df42196 100644 --- a/src/output/util/formatters.js +++ b/src/output/util/formatters.js @@ -1,11 +1,10 @@ -/* @flow */ -var remark = require('remark'), - html = require('remark-html'), - Syntax = require('doctrine-temporary-fork').Syntax, - u = require('unist-builder'), - _rerouteLinks = require('./reroute_links'), - highlighter = require('../highlighter'), - formatType = require('./format_type'); +const remark = require('remark'); +const html = require('remark-html'); +const Syntax = require('doctrine-temporary-fork').Syntax; +const u = require('unist-builder'); +const _rerouteLinks = require('./reroute_links'); +const highlighter = require('../highlighter'); +const formatType = require('./format_type'); /** * Create a formatter group, given a linker method that resolves @@ -14,10 +13,10 @@ var remark = require('remark'), * @param getHref linker method * @returns {formatters} formatter object */ -module.exports = function(getHref: Function) { - var rerouteLinks = _rerouteLinks.bind(undefined, getHref); +module.exports = function (getHref) { + const rerouteLinks = _rerouteLinks.bind(undefined, getHref); - var formatters = {}; + const formatters = {}; /** * Format a parameter name. This is used in formatParameters @@ -28,7 +27,7 @@ module.exports = function(getHref: Function) { * @param {boolean} short whether to cut the details and make it skimmable * @returns {string} formatted parameter representation. */ - formatters.parameter = function(param: Object, short: boolean): string { + formatters.parameter = function (param, short) { if (short) { if (param.type && param.type.type == Syntax.OptionalType) { if (param.default) { @@ -46,9 +45,11 @@ module.exports = function(getHref: Function) { * @param {Object} ast remark-compatible AST * @returns {string} HTML */ - formatters.markdown = function(ast) { + formatters.markdown = function (ast) { if (ast) { - return remark().use(html).stringify(highlighter(rerouteLinks(ast))); + return remark() + .use(html) + .stringify(highlighter(rerouteLinks(ast))); } return ''; }; @@ -59,7 +60,7 @@ module.exports = function(getHref: Function) { * @param {Object} type doctrine-format type * @returns {string} HTML */ - formatters.type = function(type: Object) { + formatters.type = function (type) { return formatters .markdown(u('root', formatType(getHref, type))) .replace(/\n/g, ''); @@ -70,8 +71,8 @@ module.exports = function(getHref: Function) { * @param {string} text inner text of the link * @returns {string} potentially linked HTML */ - formatters.autolink = function(text: string) { - var href = getHref(text); + formatters.autolink = function (text) { + const href = getHref(text); if (href) { // TODO: this is a temporary fix until we drop remark 3.x support, // and then we should remove the 'href' property and only @@ -101,12 +102,12 @@ module.exports = function(getHref: Function) { * @param {boolean} short whether to cut the details and make it skimmable * @returns {string} formatted parameters */ - formatters.parameters = function(section: Comment, short: boolean) { + formatters.parameters = function (section, short) { if (section.params) { return ( '(' + section.params - .map(function(param) { + .map(function (param) { return formatters.parameter(param, short); }) .join(', ') + diff --git a/src/output/util/linker_stack.js b/src/output/util/linker_stack.js index 49569fcce..9c0988c44 100644 --- a/src/output/util/linker_stack.js +++ b/src/output/util/linker_stack.js @@ -1,6 +1,5 @@ -/* @flow */ -var globalsDocs = require('globals-docs'); -import { walk } from '../../walk'; +const globalsDocs = require('globals-docs'); +const { walk } = require('../../walk'); /** * Generate a linker method that links given hardcoded namepaths to URLs @@ -9,7 +8,7 @@ import { walk } from '../../walk'; * @returns {Function} linker */ function pathsLinker(paths /* Object */) { - return function(namespace) { + return function (namespace) { if (paths[namespace]) { return paths[namespace]; } @@ -24,9 +23,9 @@ function pathsLinker(paths /* Object */) { * @param {*} input any input * @returns {*} any output */ -function firstPass(fns: Array, input) { - for (var i = 0; i < fns.length; i++) { - var output = fns[i](input); +function firstPass(fns, input) { + for (let i = 0; i < fns.length; i++) { + const output = fns[i](input); if (output) { return output; } @@ -41,10 +40,7 @@ function firstPass(fns: Array, input) { * @returns {Function} linker method */ class LinkerStack { - stack: Array; - link: Function; - - constructor(config: DocumentationConfig) { + constructor(config) { this.stack = []; if (config.defaultGlobals !== false) { @@ -84,8 +80,8 @@ class LinkerStack { * return '#' + slugger.slug(namespace); * }); */ - namespaceResolver(comments: Array, resolver: Function) { - var namespaces = {}; + namespaceResolver(comments, resolver) { + const namespaces = {}; walk(comments, comment => { namespaces[comment.namespace] = true; }); @@ -106,7 +102,7 @@ class LinkerStack { * @returns {string?} URL target or maybe undefined * @private */ - _link(namepath: string) { + _link(namepath) { return firstPass(this.stack, namepath); } } diff --git a/src/output/util/reroute_links.js b/src/output/util/reroute_links.js index f5a189e37..2b4a04bc1 100644 --- a/src/output/util/reroute_links.js +++ b/src/output/util/reroute_links.js @@ -1,5 +1,4 @@ -/* @flow */ -var visit = require('unist-util-visit'); +const visit = require('unist-util-visit'); /** * Reroute inline jsdoc links in documentation @@ -8,8 +7,8 @@ var visit = require('unist-util-visit'); * @returns {Object} that ast with rerouted links * @private */ -module.exports = function rerouteLinks(getHref: Function, ast: Object) { - visit(ast, 'link', function(node) { +module.exports = function rerouteLinks(getHref, ast) { + visit(ast, 'link', function (node) { if ( node.jsdoc && !node.url.match(/^(http|https|\.)/) && diff --git a/src/parse.js b/src/parse.js index 49b60d4de..653c28387 100644 --- a/src/parse.js +++ b/src/parse.js @@ -1,7 +1,5 @@ -/* @flow */ - -var doctrine = require('doctrine-temporary-fork'); -var parseMarkdown = require('./parse_markdown'); +const doctrine = require('doctrine-temporary-fork'); +const parseMarkdown = require('./remark-parse'); /** * Flatteners: these methods simplify the structure of JSDoc comments @@ -9,7 +7,7 @@ var parseMarkdown = require('./parse_markdown'); * information where appropriate. * @private */ -var flatteners = { +const flatteners = { abstract: flattenBoolean, /** * Parse tag @@ -25,6 +23,7 @@ var flatteners = { alias: flattenName, arg: synonym('param'), argument: synonym('param'), + async: flattenBoolean, /** * Parse tag * @private @@ -76,14 +75,17 @@ var flatteners = { default: todo, defaultvalue: synonym('default'), deprecated(result, tag) { - let description = tag.description || 'This is deprecated.'; + const description = tag.description || 'This is deprecated.'; result.deprecated = parseMarkdown(description); }, flattenMarkdownDescription, desc: synonym('description'), description: flattenMarkdownDescription, emits: synonym('fires'), - enum: todo, + enum(result, tag) { + result.kind = 'enum'; + result.type = tag.type; + }, /** * Parse tag * @private @@ -114,7 +116,7 @@ var flatteners = { return; } - var example: CommentExample = { + const example = { description: tag.description }; @@ -159,6 +161,7 @@ var flatteners = { fires: todo, func: synonym('function'), function: flattenKindShorthand, + generator: flattenBoolean, /** * Parse tag * @private @@ -168,9 +171,17 @@ var flatteners = { global(result) { result.scope = 'global'; }, + hideconstructor: flattenBoolean, host: synonym('external'), ignore: flattenBoolean, - implements: todo, + implements(result, tag) { + // Match @extends/@augments above. + if (!tag.name && tag.type && tag.type.name) { + tag.name = tag.type.name; + } + + result.implements.push(tag); + }, inheritdoc: todo, /** * Parse tag @@ -198,7 +209,7 @@ var flatteners = { * @returns {undefined} has side-effects */ interface(result, tag) { - result.interface = true; + result.kind = 'interface'; if (tag.description) { result.name = tag.description; } @@ -235,7 +246,7 @@ var flatteners = { * @returns {undefined} has side-effects */ param(result, tag) { - var param: CommentTag = { + const param = { title: 'param', name: tag.name, lineNumber: tag.lineNumber // TODO: remove @@ -276,7 +287,7 @@ var flatteners = { * @returns {undefined} has side-effects */ property(result, tag) { - var property: CommentTag = { + const property = { title: 'property', name: tag.name, lineNumber: tag.lineNumber // TODO: remove @@ -321,7 +332,7 @@ var flatteners = { * @returns {undefined} has side-effects */ returns(result, tag) { - var returns: CommentTag = { + const returns = { description: parseMarkdown(tag.description), title: 'returns' }; @@ -340,7 +351,16 @@ var flatteners = { * @returns {undefined} has side-effects */ see(result, tag) { - result.sees.push(parseMarkdown(tag.description)); + const sees = { + description: parseMarkdown(tag.description), + title: 'sees' + }; + + if (tag.type) { + sees.type = tag.type; + } + + result.sees.push(sees); }, since: flattenDescription, /** @@ -362,7 +382,7 @@ var flatteners = { * @returns {undefined} has side-effects */ throws(result, tag) { - var throws = {}; + const throws = {}; if (tag.description) { throws.description = parseMarkdown(tag.description); @@ -385,7 +405,9 @@ var flatteners = { result.todos.push(parseMarkdown(tag.description)); }, tutorial: todo, - type: todo, + type(result, tag) { + result.type = tag.type; + }, typedef: flattenKindShorthand, var: synonym('member'), /** @@ -399,7 +421,27 @@ var flatteners = { result.variation = tag.variation; }, version: flattenDescription, - virtual: synonym('abstract') + virtual: synonym('abstract'), + yield: synonym('yields'), + /** + * Parse tag + * @private + * @param {Object} result target comment + * @param {Object} tag the tag + * @returns {undefined} has side-effects + */ + yields(result, tag) { + const yields = { + description: parseMarkdown(tag.description), + title: 'yields' + }; + + if (tag.type) { + yields.type = tag.type; + } + + result.yields.push(yields); + } }; /** @@ -415,8 +457,9 @@ function todo() {} * @returns {Function} a flattener that remembers that key */ function synonym(key) { - return function(result, tag) { - return flatteners[key](result, tag, key); + return function (result, tag) { + const fun = flatteners[key]; + fun.apply(null, [result, tag, key].slice(0, fun.length)); }; } @@ -563,11 +606,11 @@ function flattenKindShorthand(result, tag, key) { * @param {string} comment input to be parsed * @param {Object} loc location of the input * @param {Object} context code context of the input - * @return {Comment} an object conforming to the + * @returns {Comment} an object conforming to the * [documentation schema](https://github.com/documentationjs/api-json) */ -function parseJSDoc(comment: string, loc: ?Object, context: ?Object): Comment { - var result = doctrine.parse(comment, { +function parseJSDoc(comment, loc, context) { + const result = doctrine.parse(comment, { // have doctrine itself remove the comment asterisks from content unwrap: true, // enable parsing of optional parameters in brackets, JSDoc3 style @@ -584,19 +627,21 @@ function parseJSDoc(comment: string, loc: ?Object, context: ?Object): Comment { result.augments = []; result.errors = []; result.examples = []; + result.implements = []; result.params = []; result.properties = []; result.returns = []; result.sees = []; result.throws = []; result.todos = []; + result.yields = []; if (result.description) { result.description = parseMarkdown(result.description); } // Reject parameter tags without a parameter name - result.tags.filter(function(tag) { + result.tags.filter(function (tag) { if (tag.title === 'param' && tag.name === undefined) { result.errors.push({ message: 'A @param tag without a parameter name was rejected' @@ -606,9 +651,9 @@ function parseJSDoc(comment: string, loc: ?Object, context: ?Object): Comment { return true; }); - result.tags.forEach(function(tag) { + result.tags.forEach(function (tag) { if (tag.errors) { - for (var j = 0; j < tag.errors.length; j++) { + for (let j = 0; j < tag.errors.length; j++) { result.errors.push({ message: tag.errors[j] }); } } else if (flatteners[tag.title]) { @@ -621,6 +666,12 @@ function parseJSDoc(comment: string, loc: ?Object, context: ?Object): Comment { } }); + // Using the @name tag, or any other tag that sets the name of a comment, + // disconnects the comment from its surrounding code. + if (context && result.name) { + delete context.ast; + } + return result; } diff --git a/src/parse_markdown.js b/src/parse_markdown.js deleted file mode 100644 index 2e7d544f0..000000000 --- a/src/parse_markdown.js +++ /dev/null @@ -1,17 +0,0 @@ -/* @flow */ -var remark = require('remark'); -var inlineTokenizer = require('./inline_tokenizer'); - -/** - * Parse a string of Markdown into a Remark - * abstract syntax tree. - * - * @param {string} string markdown text - * @returns {Object} abstract syntax tree - * @private - */ -function parseMarkdown(string: string) { - return remark().use(inlineTokenizer).parse(string); -} - -module.exports = parseMarkdown; diff --git a/src/parsers/javascript.js b/src/parsers/javascript.js index 30690d1d3..6e9b6ad82 100644 --- a/src/parsers/javascript.js +++ b/src/parsers/javascript.js @@ -1,14 +1,12 @@ -/* @flow */ - -var _ = require('lodash'), - t = require('babel-types'), - parse = require('../parse'), - walkComments = require('../extractors/comments'), - walkExported = require('../extractors/exported'), - util = require('util'), - debuglog = util.debuglog('documentation'); - -import { parseToAst } from './parse_to_ast'; +const _ = require('lodash'); +const t = require('@babel/types'); +const parse = require('../parse'); +const walkComments = require('../extractors/comments'); +const walkExported = require('../extractors/exported'); +const util = require('util'); +const debuglog = util.debuglog('documentation'); +const findTarget = require('../infer/finders').findTarget; +const { parseToAst } = require('./parse_to_ast'); /** * Left-pad a string so that it can be sorted lexicographically. We sort @@ -32,13 +30,14 @@ function leftPad(str, width) { * * @param {Object} data a chunk of data provided by module-deps * @param {Object} config config - * @return {Array} an array of parsed comments + * @returns {Array} an array of parsed comments */ -function parseJavaScript(data: Object, config: DocumentationConfig) { - var visited = new Set(); +function parseJavaScript(data, config) { + const visited = new Set(); + const commentsByNode = new Map(); - var ast = parseToAst(data.source, data.file); - var addComment = _addComment.bind(null, visited); + const ast = parseToAst(data.source, data.file); + const addComment = _addComment.bind(null, visited, commentsByNode); return _.flatMap( config.documentExported @@ -54,6 +53,7 @@ function parseJavaScript(data: Object, config: DocumentationConfig) { function _addComment( visited, + commentsByNode, data, commentValue, commentLoc, @@ -63,12 +63,12 @@ function _addComment( ) { // Avoid visiting the same comment twice as a leading // and trailing node - var key = + const key = data.file + ':' + commentLoc.start.line + ':' + commentLoc.start.column; if (!visited.has(key)) { visited.add(key); - var context /* : { + const context /* : { loc: Object, file: string, sortKey: string, @@ -89,19 +89,40 @@ function _addComment( value: path }); - // #689 - if (t.isClassMethod(path) && path.node.kind === 'constructor') { - debuglog( - 'A constructor was documented explicitly: document along with the class instead' - ); - } - if (path.parentPath && path.parentPath.node) { - var parentNode = path.parentPath.node; + const parentNode = path.parentPath.node; context.code = data.source.substring(parentNode.start, parentNode.end); } } - return parse(commentValue, commentLoc, context); + const comment = parse(commentValue, commentLoc, context); + if (includeContext) { + commentsByNode.set((findTarget(path) || path).node, comment); + + if (t.isClassMethod(path) && path.node.kind === 'constructor') { + // #689 + if ( + comment.tags.some( + tag => tag.title !== 'param' && tag.title !== 'hideconstructor' + ) + ) { + debuglog( + 'A constructor was documented explicitly: document along with the class instead' + ); + } + + const parentComment = commentsByNode.get( + path.parentPath.parentPath.node + ); + if (parentComment) { + parentComment.constructorComment = comment; + return; + } + if (comment.hideconstructor) { + return; + } + } + } + return comment; } } diff --git a/src/parsers/parse_to_ast.js b/src/parsers/parse_to_ast.js index e9720e538..9f5673d78 100644 --- a/src/parsers/parse_to_ast.js +++ b/src/parsers/parse_to_ast.js @@ -1,28 +1,54 @@ -/* @flow */ +const babelParser = require('@babel/parser'); +const path = require('path'); -var babylon = require('babylon'); - -var opts = { - allowImportExportEverywhere: true, - sourceType: 'module', - plugins: [ - 'jsx', - 'flow', - 'asyncFunctions', - 'classConstructorCall', - 'doExpressions', - 'trailingFunctionCommas', - 'objectRestSpread', - 'decorators', - 'classProperties', - 'exportExtensions', - 'exponentiationOperator', - 'asyncGenerators', - 'functionBind', - 'functionSent' - ] +const TYPESCRIPT_EXTS = { + '.ts': ['typescript'], + '.tsx': ['typescript', 'jsx'] }; -export function parseToAst(source: string) { - return babylon.parse(source, opts); +const standardBabelParserPlugins = [ + 'classProperties', + 'classPrivateProperties', + 'classPrivateMethods', + 'doExpressions', + 'exportDefaultFrom', + 'exportExtensions', + 'functionBind', + 'partialApplication', + ['pipelineOperator', { proposal: 'minimal' }], + 'throwExpressions' +]; + +module.exports.standardBabelParserPlugins = standardBabelParserPlugins; + +function getParserOpts(file) { + return { + allowImportExportEverywhere: true, + sourceType: 'module', + plugins: [ + ...standardBabelParserPlugins, + ['decorators', { decoratorsBeforeExport: false }], + ...(TYPESCRIPT_EXTS[path.extname(file || '')] || ['flow', 'jsx']) + ] + }; +} + +/** + * Convert flow comment types into flow annotations so that + * they end up in the final AST. If the source does not contain + * a flow pragma, the code is returned verbatim. + * @param {*} source code with flow type comments + * @returns {string} code with flow annotations + */ +function commentToFlow(source) { + if (!/@flow/.test(source)) return source; + return source + .replace(/\/\*::([^]+?)\*\//g, '$1') + .replace(/\/\*:\s*([^]+?)\s*\*\//g, ':$1'); +} + +function parseToAst(source, file) { + return babelParser.parse(commentToFlow(source), getParserOpts(file)); } +module.exports.commentToFlow = commentToFlow; +module.exports.parseToAst = parseToAst; diff --git a/src/parsers/polyglot.js b/src/parsers/polyglot.js deleted file mode 100644 index a323972bc..000000000 --- a/src/parsers/polyglot.js +++ /dev/null @@ -1,28 +0,0 @@ -/* @flow */ - -var getComments = require('get-comments'), - _ = require('lodash'), - isJSDocComment = require('../is_jsdoc_comment'), - parse = require('../parse'); - -/** - * Documentation stream parser: this receives a module-dep item, - * reads the file, parses the JavaScript, parses the JSDoc, and - * emits parsed comments. - * @param sourceFile a chunk of data provided by module-deps - * @return {Array} adds to memo - */ -function parsePolyglot(sourceFile: SourceFile) { - return getComments(sourceFile.source, true) - .filter(isJSDocComment) - .map(comment => { - var context = { - loc: _.clone(comment.loc), - file: sourceFile.file, - sortKey: sourceFile.file + ' ' + comment.loc.start.line - }; - return parse(comment.value, comment.loc, context); - }); -} - -module.exports = parsePolyglot; diff --git a/src/parsers/vue.js b/src/parsers/vue.js new file mode 100644 index 000000000..87229a24d --- /dev/null +++ b/src/parsers/vue.js @@ -0,0 +1,33 @@ +const parseJavaScript = require('./javascript'); + +/** + * Receives a module-dep item, + * reads the file, parses the VueScript, and parses the JSDoc. + * + * @param {Object} data a chunk of data provided by module-deps + * @param {Object} config config + * @returns {Array} an array of parsed comments + */ +function parseVueScript(data, config) { + let component = {}; + try { + const vuecompiler = require('@vue/compiler-sfc'); + component = vuecompiler.parse(data.source).descriptor; + } catch (e) { + try { + const vuecompiler = require('vue-template-compiler'); + component = vuecompiler.parseComponent(data.source); + } catch (e) { + console.error( + 'You need to load package vue-template-compiler for Vue 2 or @vue/compiler-sfc for Vue 3' + ); + } + } + + if (!component.script) return []; + data.source = component.script.content; + + return parseJavaScript(data, config); +} + +module.exports = parseVueScript; diff --git a/src/remark-jsDoc-link.js b/src/remark-jsDoc-link.js new file mode 100644 index 000000000..883a265a2 --- /dev/null +++ b/src/remark-jsDoc-link.js @@ -0,0 +1,115 @@ +const findAndReplace = require('mdast-util-find-and-replace'); +const markdownLineEnding = require('micromark/dist/character/markdown-line-ending'); + +const link = '@link'; +const tutorial = '@tutorial'; + +function tokenizeJsDoclink(effects, ok, nok) { + let index = 0; + let focus = link; + + function atext(code) { + if (index !== link.length) { + if (focus.charCodeAt(index) === code) { + effects.consume(code); + index++; + return atext; + } else if (tutorial.charCodeAt(index) === code) { + focus = tutorial; + } + return nok(code); + } + if (code === 125) { + effects.consume(code); + effects.exit('literalJsDoclink'); + return ok(code); + } + + if (markdownLineEnding(code)) { + return nok(code); + } + + effects.consume(code); + return atext; + } + + return function (code) { + effects.enter('literalJsDoclink'); + effects.consume(code); + return atext; + }; +} + +const text = {}; +text[123] = { + tokenize: tokenizeJsDoclink, + previous(code) { + return code === null || code === 32 || markdownLineEnding(code); + } +}; + +const linkRegExp = /\{@link\s+(.+?)(?:[\s|](.*?))?\}/; +const tutorialRegExp = /\{@tutorial\s+(.+?)(?:[\s|](.*?))?\}/; + +/** + * A remark plugin that installs + * for JSDoc inline `{@link}` and `{@tutorial}` tags. + * + * This does not handle the `[text]({@link url})` and `[text]({@tutorial url})` forms of these tags. + * That's a JSDoc misfeature; just use regular markdown syntax instead: `[text](url)`. + * + * @returns {Function} + */ +module.exports = function () { + const data = this.data(); + function replace(type) { + return (match, matchUrl, matchValue) => { + return { + type, + url: matchUrl, + title: null, + jsdoc: true, + children: [ + { + type: 'text', + value: matchValue || matchUrl + } + ] + }; + }; + } + + add('micromarkExtensions', { text }); + add('fromMarkdownExtensions', { + transforms: [ + function (markdownAST) { + return findAndReplace(markdownAST, [ + [new RegExp(linkRegExp.source, 'g'), replace('link')], + [new RegExp(tutorialRegExp.source, 'g'), replace('tutorial')] + ]); + } + ], + enter: { + literalJsDoclink(token) { + const str = this.sliceSerialize(token); + let match = null; + if (str.startsWith('{@link')) { + match = linkRegExp.exec(str); + } else { + match = tutorialRegExp.exec(str); + } + + this.enter(replace('link')(...match), token); + } + }, + exit: { + literalJsDoclink(token) { + this.exit(token); + } + } + }); + function add(field, value) { + if (data[field]) data[field].push(value); + else data[field] = [value]; + } +}; diff --git a/src/remark-parse.js b/src/remark-parse.js new file mode 100644 index 000000000..09d7365a4 --- /dev/null +++ b/src/remark-parse.js @@ -0,0 +1,14 @@ +const remark = require('remark'); +const gfm = require('remark-gfm'); +const removePosition = require('./remark-remove-position'); +const jsDocLink = require('./remark-jsDoc-link'); + +/** + * Parse a string of Markdown into a Remark + * abstract syntax tree. + * + * @param {string} string markdown text + * @returns {Object} abstract syntax tree + * @private + */ +module.exports = remark().use([jsDocLink, gfm, removePosition]).parse; diff --git a/src/remark-remove-position.js b/src/remark-remove-position.js new file mode 100644 index 000000000..7ba3c5005 --- /dev/null +++ b/src/remark-remove-position.js @@ -0,0 +1,16 @@ +const visit = require('unist-util-visit'); + +module.exports = function () { + const data = this.data(); + add('fromMarkdownExtensions', { + transforms: [ + function (markdownAST) { + visit(markdownAST, node => delete node.position); + } + ] + }); + function add(field, value) { + if (data[field]) data[field].push(value); + else data[field] = [value]; + } +}; diff --git a/src/serve/error_page.js b/src/serve/error_page.js index 0978561e8..9177d885b 100644 --- a/src/serve/error_page.js +++ b/src/serve/error_page.js @@ -1,9 +1,8 @@ -/* @flow */ /* eslint no-console: 0 */ -var File = require('vinyl'); -var ansiHTML = require('ansi-html'); +const File = require('vinyl'); +const ansiHTML = require('ansi-html'); -var template = +const template = ''; @@ -26,8 +25,8 @@ ansiHTML.setColors({ * @param error parse or generation error * @returns {Object} vinyl file object */ -function errorPage(error: Error) { - var errorText = error.toString(); +function errorPage(error) { + let errorText = error.toString(); console.error(error); if (error.codeFrame) { errorText += '
    ' + ansiHTML(error.codeFrame) + '
    '; diff --git a/src/serve/server.js b/src/serve/server.js index 75efca443..4fd5ea0a8 100644 --- a/src/serve/server.js +++ b/src/serve/server.js @@ -1,18 +1,11 @@ -/* @flow */ - // This file triggers https://github.com/prettier/prettier/issues/1151 -var http = require('http'), - mime = require('mime'), - pify = require('pify'), - EventEmitter = require('events').EventEmitter, - liveReload = require('tiny-lr'), - sep = require('path').sep; - -declare type ServerFile = { - relative: string, - contents: string -}; +const http = require('http'); +const mime = require('mime'); +const pify = require('pify'); +const EventEmitter = require('events').EventEmitter; +const liveReload = require('tiny-lr'); +const sep = require('path').sep; /** * A static file server designed to support documentation.js's --serve @@ -24,13 +17,7 @@ declare type ServerFile = { * @param port server port to serve on. */ class Server extends EventEmitter { - _lr: Object; - _disableLiveReload: boolean; - _port: number; - _files: Array; - _http: http.Server; - - constructor(port: number, disableLiveReload?: boolean) { + constructor(port, disableLiveReload) { super(); if (typeof port !== 'number') { throw new Error('port argument required to initialize a server'); @@ -47,7 +34,7 @@ class Server extends EventEmitter { * @param files new content. replaces any previously-set content. * @returns {Server} self */ - setFiles(files: Array) { + setFiles(files) { this._files = files; if (this._lr) { this._lr.changed({ body: { files: '*' } }); @@ -65,17 +52,17 @@ class Server extends EventEmitter { * @returns {undefined} nothing * @private */ - handler(request: http.IncomingMessage, response: http.ServerResponse) { - var path = request.url.substring(1); + handler(request, response) { + let path = request.url.substring(1); if (path === '') { path = 'index.html'; } - for (var i = 0; i < this._files.length; i++) { - var file = this._files[i]; - var filePath = file.relative.split(sep).join('/'); + for (let i = 0; i < this._files.length; i++) { + const file = this._files[i]; + const filePath = file.relative.split(sep).join('/'); if (filePath === path) { - response.writeHead(200, { 'Content-Type': mime.lookup(path) }); + response.writeHead(200, { 'Content-Type': mime.getType(path) }); response.end(file.contents); return; } @@ -84,7 +71,7 @@ class Server extends EventEmitter { response.end('Not found'); } - start(): Promise { + start() { /* * Boot up the server's HTTP & LiveReload endpoints. This method * can be called multiple times. @@ -112,7 +99,7 @@ class Server extends EventEmitter { }); } - stop(): Promise { + stop() { /* * Shut down the server's HTTP & LiveReload endpoints. This method * can be called multiple times. diff --git a/src/smart_glob.js b/src/smart_glob.js index 8dc026b88..a4c29f0c2 100644 --- a/src/smart_glob.js +++ b/src/smart_glob.js @@ -1,8 +1,6 @@ -/* @flow */ -var fs = require('fs'); -var path = require('path'); -var glob = require('glob'); -var shell = require('shelljs'); +const fs = require('fs'); +const path = require('path'); +const glob = require('glob'); /** * Replace Windows with posix style paths @@ -11,8 +9,8 @@ var shell = require('shelljs'); * @returns {string} Converted filepath */ function convertPathToPosix(filepath) { - var normalizedFilepath = path.normalize(filepath); - var posixFilepath = normalizedFilepath.replace(/\\/g, '/'); + const normalizedFilepath = path.normalize(filepath); + const posixFilepath = normalizedFilepath.replace(/\\/g, '/'); return posixFilepath; } @@ -33,14 +31,14 @@ function convertPathToPosix(filepath) { * pathname is a directory. */ function processPath(extensions) { - var cwd = process.cwd(); + const cwd = process.cwd(); extensions = extensions || ['.js']; - extensions = extensions.map(function(ext) { + extensions = extensions.map(function (ext) { return ext.replace(/^\./, ''); }); - var suffix = '/**'; + let suffix = '/**'; if (extensions.length === 1) { suffix += '/*.' + extensions[0]; @@ -55,11 +53,14 @@ function processPath(extensions) { * @returns {string} The glob path or the file path itself * @private */ - return function(pathname) { - var newPath = pathname; - var resolvedPath = path.resolve(cwd, pathname); - - if (shell.test('-d', resolvedPath)) { + return function (pathname) { + let newPath = pathname; + const resolvedPath = path.resolve(cwd, pathname); + + if ( + fs.existsSync(resolvedPath) && + fs.lstatSync(resolvedPath).isDirectory() + ) { newPath = pathname.replace(/[/\\]$/, '') + suffix; } @@ -74,21 +75,22 @@ function processPath(extensions) { * @returns {string[]} The equivalent glob patterns and filepath strings. */ function resolveFileGlobPatterns(patterns, extensions) { - var processPathExtensions = processPath(extensions); + const processPathExtensions = processPath(extensions); return patterns.map(processPathExtensions); } /** - * Build a list of absolute filesnames on which ESLint will act. + * Build a list of absolute filenames on which ESLint will act. * Ignored files are excluded from the results, as are duplicates. * * @param globPatterns Glob patterns. * @returns Resolved absolute filenames. */ -function listFilesToProcess(globPatterns: Array): Array { - var files = [], added = new Set(); +function listFilesToProcess(globPatterns) { + const files = []; + const added = new Set(); - var cwd = process.cwd(); + const cwd = process.cwd(); /** * Executes the linter on a file defined by the `filename`. Skips @@ -104,19 +106,19 @@ function listFilesToProcess(globPatterns: Array): Array { added.add(filename); } - globPatterns.forEach(function(pattern) { - var file = path.resolve(cwd, pattern); - if (shell.test('-f', file)) { - addFile(fs.realpathSync(file), !shell.test('-d', file)); + globPatterns.forEach(function (pattern) { + const file = path.resolve(cwd, pattern); + if (fs.existsSync(file) && fs.statSync(file).isFile()) { + addFile(fs.realpathSync(file)); } else { - var globOptions = { + const globOptions = { nodir: true, dot: true, cwd }; - glob.sync(pattern, globOptions).forEach(function(globMatch) { - addFile(path.resolve(cwd, globMatch), false); + glob.sync(pattern, globOptions).forEach(function (globMatch) { + addFile(path.resolve(cwd, globMatch)); }); } }); @@ -124,7 +126,7 @@ function listFilesToProcess(globPatterns: Array): Array { return files; } -function smartGlob(indexes: Array, extensions: Array) { +function smartGlob(indexes, extensions) { return listFilesToProcess(resolveFileGlobPatterns(indexes, extensions)); } diff --git a/src/sort.js b/src/sort.js index 2bc54bd51..e016f8da4 100644 --- a/src/sort.js +++ b/src/sort.js @@ -1,9 +1,7 @@ -/* @flow */ - -var parseMarkdown = require('./parse_markdown'); -var chalk = require('chalk'); -var path = require('path'); -var fs = require('fs'); +const parseMarkdown = require('./remark-parse'); +const chalk = require('chalk'); +const path = require('path'); +const fs = require('fs'); /** * Sort two documentation objects, given an optional order object. Returns @@ -11,35 +9,24 @@ var fs = require('fs'); * * @param {Array} comments all comments * @param {Object} options options from documentation.yml - * @return {number} sorting value + * @returns {number} sorting value * @private */ -module.exports = function sortDocs(comments: Array, options: Object) { +module.exports = function sortDocs(comments, options) { if (!options || !options.toc) { return sortComments(comments, options && options.sortOrder); } - var indexes = options.toc.reduce(function(memo, val, i) { + let i = 0; + const indexes = Object.create(null); + const toBeSorted = Object.create(null); + const paths = Object.create(null); + const fixed = []; + const walk = function (tocPath, val) { if (typeof val === 'object' && val.name) { val.kind = 'note'; - memo[val.name] = i; - } else { - memo[val] = i; - } - return memo; - }, Object.create(null)); - var toBeSorted = options.toc.reduce(function(memo, val) { - if (typeof val === 'string') { - memo[val] = false; - } - return memo; - }, Object.create(null)); - // Table of contents 'theme' entries: defined as objects - // in the YAML list - var fixed = options.toc - .filter(val => typeof val === 'object' && val.name) - .map(function(val) { + indexes[val.name] = i++; if (typeof val.file === 'string') { - var filename = val.file; + let filename = val.file; if (!path.isAbsolute(val.file)) { filename = path.join(process.cwd(), val.file); } @@ -50,14 +37,35 @@ module.exports = function sortDocs(comments: Array, options: Object) { } catch (err) { process.stderr.write(chalk.red(`Failed to read file ${filename}`)); } + } else if (!val.description) { + val.description = ''; } if (typeof val.description === 'string') { val.description = parseMarkdown(val.description); } - return val; - }); - var unfixed = []; - comments.forEach(function(comment) { + const childPath = tocPath.concat({ scope: 'static', name: val.name }); + val.path = childPath; + if (val.children) { + val.children.forEach(walk.bind(null, childPath)); + } + fixed.push(val); + } else { + indexes[val] = i++; + toBeSorted[val] = false; + paths[val] = tocPath.concat({ scope: 'static', name: val, toc: true }); + } + }; + // Table of contents 'theme' entries: defined as objects + // in the YAML list + options.toc.forEach(walk.bind(null, [])); + const unfixed = []; + comments.forEach(function (comment) { + let commentPath; + if (!comment.memberof && (commentPath = paths[comment.name])) { + comment.path = commentPath; + delete paths[comment.name]; + } + // If comment is of kind 'note', this means that we must be _re_ sorting // the list, and the TOC note entries were already added to the list. Bail // out here so that we don't add duplicates. @@ -78,6 +86,7 @@ module.exports = function sortDocs(comments: Array, options: Object) { if (indexes[a.name] !== undefined && indexes[b.name] !== undefined) { return indexes[a.name] - indexes[b.name]; } + return 0; }); sortComments(unfixed, options.sortOrder); Object.keys(toBeSorted) @@ -94,16 +103,12 @@ module.exports = function sortDocs(comments: Array, options: Object) { return fixed.concat(unfixed); }; -function compare(a: string, b: string) { - return a.localeCompare(b, undefined, { caseFirst: 'upper' }); -} - function compareCommentsByName(a, b) { - var akey = a.memberof || a.name; - var bkey = b.memberof || b.name; + const akey = a.name; + const bkey = b.name; if (akey && bkey) { - return compare(akey, bkey); + return akey.localeCompare(bkey, undefined, { caseFirst: 'upper' }); } return 0; } diff --git a/src/ts_doctrine.js b/src/ts_doctrine.js new file mode 100644 index 000000000..e615bb622 --- /dev/null +++ b/src/ts_doctrine.js @@ -0,0 +1,179 @@ +const generate = require('@babel/generator').default; + +const namedTypes = { + TSBigIntKeyword: 'bigint', + TSNumberKeyword: 'number', + TSBooleanKeyword: 'boolean', + TSStringKeyword: 'string', + TSSymbolKeyword: 'symbol', + TSThisType: 'this', + TSObjectKeyword: 'object', + TSNeverKeyword: 'never' +}; + +const oneToOne = { + TSAnyKeyword: 'AllLiteral', + TSUnknownKeyword: 'AllLiteral', + TSNullKeyword: 'NullLiteral', + TSUndefinedKeyword: 'UndefinedLiteral', + TSVoidKeyword: 'VoidLiteral' +}; + +function propertyToField(property) { + if (!property.typeAnnotation) return null; + + let type = tsDoctrine(property.typeAnnotation.typeAnnotation); + if (property.optional) { + // Doctrine does not support optional fields but it does have something called optional types + // (which makes no sense, but let's play along). + type = { + type: 'OptionalType', + expression: type + }; + } + return { + type: 'FieldType', + key: property.key ? property.key.name || property.key.value : '', + value: type + }; +} + +/** + * Babel parses TypeScript annotations in JavaScript into AST nodes. documentation.js uses + * Babel to parse TypeScript. This method restructures those Babel-generated + * objects into objects that fit the output of Doctrine, the module we use + * to parse JSDoc annotations. This lets us use TypeScript annotations _as_ + * JSDoc annotations. + * + * @private + * @param {Object} type babel-parsed typescript type + * @returns {Object} doctrine compatible type + */ +function tsDoctrine(type) { + if (type.type in namedTypes) { + const doctrineType = { + type: 'NameExpression', + name: namedTypes[type.type] + }; + return doctrineType; + } + + // TODO: unhandled types + // TSIntersectionType, TSConditionalType, TSInferType, TSTypeOperator, TSIndexedAccessType + // TSMappedType, TSImportType, TSTypePredicate, TSTypeQuery, TSExpressionWithTypeArguments + + if (type.type in oneToOne) { + return { type: oneToOne[type.type] }; + } + + switch (type.type) { + case 'TSOptionalType': + return { + type: 'NullableType', + expression: tsDoctrine(type.typeAnnotation) + }; + case 'TSParenthesizedType': + return tsDoctrine(type.typeAnnotation); + case 'TSUnionType': + return { + type: 'UnionType', + elements: type.types.map(tsDoctrine) + }; + // [number] + // [string, boolean, number] + case 'TSTupleType': + return { + type: 'ArrayType', + elements: type.elementTypes.map(tsDoctrine) + }; + // number[] + case 'TSArrayType': + return { + type: 'TypeApplication', + expression: { + type: 'NameExpression', + name: 'Array' + }, + applications: [tsDoctrine(type.elementType)] + }; + // ...string + case 'TSRestType': + return { + type: 'RestType', + expression: tsDoctrine(type.typeAnnotation) + }; + // (y: number) => bool + case 'TSFunctionType': + case 'TSConstructorType': + case 'TSMethodSignature': + return { + type: 'FunctionType', + params: type.parameters.map(param => { + if (param.type === 'RestElement') { + return { + type: 'RestType', + expression: { + type: 'ParameterType', + name: param.argument.name, + expression: tsDoctrine(param.typeAnnotation.typeAnnotation) + } + }; + } + + return { + type: 'ParameterType', + name: param.name, + expression: tsDoctrine(param.typeAnnotation.typeAnnotation) + }; + }), + result: tsDoctrine(type.typeAnnotation.typeAnnotation) + }; + + case 'TSTypeReference': + if (type.typeParameters) { + return { + type: 'TypeApplication', + expression: { + type: 'NameExpression', + name: generate(type.typeName, { + compact: true + }).code + }, + applications: type.typeParameters.params.map(tsDoctrine) + }; + } + + return { + type: 'NameExpression', + name: generate(type.typeName, { + compact: true + }).code + }; + + case 'TSTypeLiteral': + if (type.members) { + return { + type: 'RecordType', + fields: type.members.map(propertyToField).filter(x => x) + }; + } + + return { + type: 'NameExpression', + name: generate(type.id, { + compact: true + }).code + }; + case 'TSLiteralType': + return { + type: `${type.literal.type}Type`, + value: type.literal.value + }; + default: + return { + type: 'AllLiteral' + }; + } +} + +module.exports = tsDoctrine; diff --git a/src/type_annotation.js b/src/type_annotation.js new file mode 100644 index 000000000..45884d691 --- /dev/null +++ b/src/type_annotation.js @@ -0,0 +1,21 @@ +const t = require('@babel/types'); +const flowDoctrine = require('./flow_doctrine'); +const tsDoctrine = require('./ts_doctrine'); + +function typeAnnotation(type) { + if (t.isFlow(type)) { + if (t.isTypeAnnotation(type)) { + type = type.typeAnnotation; + } + + return flowDoctrine(type); + } + + if (t.isTSTypeAnnotation(type)) { + type = type.typeAnnotation; + } + + return tsDoctrine(type); +} + +module.exports = typeAnnotation; diff --git a/src/walk.js b/src/walk.js index 28a3a2787..851229858 100644 --- a/src/walk.js +++ b/src/walk.js @@ -1,5 +1,3 @@ -/* @flow */ - /** * Apply a function to all comments within a hierarchy: this iterates * through children in the 'members' property. @@ -9,12 +7,12 @@ * @param {Object} [options] options passed through to walker function * @returns {Array} comments */ -export function walk(comments: Array, fn: Function, options: ?Object) { +module.exports.walk = function walk(comments, fn, options) { comments.forEach(comment => { fn(comment, options); - for (var scope in comment.members) { + for (const scope in comment.members) { walk(comment.members[scope], fn, options); } }); return comments; -} +}; diff --git a/yarn.lock b/yarn.lock index ad38ca3be..3196979b1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,1174 +2,1289 @@ # yarn lockfile v1 -JSONStream@^1.0.3, JSONStream@^1.0.4: - version "1.3.1" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.1.tgz#707f761e01dae9e16f1bcf93703b78c70966579a" - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abab@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" - -abbrev@1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/core@7.12.3", "@babel/core@^7.1.0", "@babel/core@^7.7.5": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" + integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.1" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.1" + "@babel/parser" "^7.12.3" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" -acorn-globals@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" +"@babel/generator@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.1.tgz#0d70be32bdaa03d7c51c8597dda76e0df1f15468" + integrity sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg== dependencies: - acorn "^4.0.4" + "@babel/types" "^7.12.1" + jsesc "^2.5.1" + source-map "^0.5.0" -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" +"@babel/generator@^7.12.1", "@babel/generator@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de" + integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A== dependencies: - acorn "^3.0.4" - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - -acorn@^4.0.3, acorn@^4.0.4: - version "4.0.13" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - -acorn@^5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" + "@babel/types" "^7.12.5" + jsesc "^2.5.1" + source-map "^0.5.0" -ajv-keywords@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz#fba0f2fcff3fba00e6ecb664bb5e6e26e2d6165c" + integrity sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-module-imports@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== + dependencies: + "@babel/types" "^7.12.5" + +"@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-replace-supers@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" + integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== -ajv@^4.7.0, ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/helpers@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-escapes@^1.0.0, ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - -ansi-html@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" -ansi-regex@^2.0.0, ansi-regex@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" +"@babel/parser@7.12.3": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.3.tgz#a305415ebe7a6c7023b40b5122a0662d928334cd" + integrity sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw== -ansi-styles@^2.0.1, ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.12.3", "@babel/parser@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.5.tgz#b4af32ddd473c0bfa643bd7ff0728b8e71b81ea0" + integrity sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ== -ansi-styles@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1" - dependencies: - color-convert "^1.0.0" +"@babel/parser@^7.10.5", "@babel/parser@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" + integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== + +"@babel/parser@^7.12.0", "@babel/parser@^7.13.9": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.16.tgz#0f18179b0448e6939b1f3f5c4c355a3a9bcdfd37" + integrity sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw== + +"@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.8.0" + +"@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.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@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.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@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.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@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.8.0" + +"@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.8.0" + +"@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.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/template@^7.10.4", "@babel/template@^7.3.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.5.tgz#78a0c68c8e8a35e4cacfd31db8bb303d5606f095" + integrity sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.5" + "@babel/types" "^7.12.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/traverse@^7.10.5": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.7.tgz#572a722408681cef17d6b0bef69ef2e728ca69f1" + integrity sha512-nMWaqsQEeSvMNypswUDzjqQ+0rR6pqCtoQpsqGJC4/Khm9cISwPTSpai57F6/jDaOoEGz8yE/WxcO3PV6tKSmQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.12.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.6.tgz#ae0e55ef1cce1fbc881cd26f8234eb3e657edc96" + integrity sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@babel/types@^7.12.0", "@babel/types@^7.13.0": + version "7.13.17" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.17.tgz#48010a115c9fba7588b4437dd68c9469012b38b4" + integrity sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + to-fast-properties "^2.0.0" + +"@babel/types@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13" + integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -anymatch@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" +"@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: - arrify "^1.0.0" - micromatch "^2.1.5" - -app-root-path@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" + exec-sh "^0.3.2" + minimist "^1.2.0" -append-transform@^0.4.0: +"@eslint/eslintrc@^0.4.0": version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" - dependencies: - default-require-extensions "^1.0.0" - -aproba@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1" - -are-we-flow-yet@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/are-we-flow-yet/-/are-we-flow-yet-1.0.0.tgz#951dd9ea78cc9e4f00b47b4cd1d53d7ddf220908" - dependencies: - glob "^6.0.1" - -are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - -arr-flatten@^1.0.1, arr-flatten@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" + integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" -array-iterate@^1.0.0: +"@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.0.tgz#4f13148ffffa5f2756b50460e5eac8eed31a14e6" - dependencies: - has "^1.0.1" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + 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" -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - -arrify@^1.0.0, arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" - -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" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -async@^1.4.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@^2.1.4: - version "2.4.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.4.1.tgz#62a56b279c98a11d0987096a01cc3eeb8eb7bbd7" - dependencies: - lodash "^4.14.0" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -atob@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws4@^1.2.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" - -babel-cli@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.24.1.tgz#207cd705bba61489b2ea41b5312341cf6aca2283" - dependencies: - babel-core "^6.24.1" - babel-polyfill "^6.23.0" - babel-register "^6.24.1" - babel-runtime "^6.22.0" - commander "^2.8.1" - convert-source-map "^1.1.0" - fs-readdir-recursive "^1.0.0" - glob "^7.0.0" - lodash "^4.2.0" - output-file-sync "^1.1.0" - path-is-absolute "^1.0.0" - slash "^1.0.0" - source-map "^0.5.0" - v8flags "^2.0.10" +"@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.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" + slash "^3.0.0" + +"@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" + 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.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== + dependencies: + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== + dependencies: + "@jest/types" "^26.6.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" + +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + 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.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^7.0.0" optionalDependencies: - chokidar "^1.6.1" - -babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" - dependencies: - chalk "^1.1.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -babel-core@^6.0.0, babel-core@^6.0.14, babel-core@^6.17.0, babel-core@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" - dependencies: - babel-code-frame "^6.22.0" - babel-generator "^6.24.1" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - babylon "^6.11.0" - convert-source-map "^1.1.0" - debug "^2.1.1" - json5 "^0.5.0" - lodash "^4.2.0" - minimatch "^3.0.2" - path-is-absolute "^1.0.0" - private "^0.1.6" - slash "^1.0.0" - source-map "^0.5.0" - -babel-eslint@^7.2.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827" - dependencies: - babel-code-frame "^6.22.0" - babel-traverse "^6.23.1" - babel-types "^6.23.0" - babylon "^6.17.0" - -babel-generator@6.24.1, babel-generator@^6.18.0, babel-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.2.0" - source-map "^0.5.0" - trim-right "^1.0.1" - -babel-helper-bindify-decorators@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - dependencies: - babel-helper-explode-assignable-expression "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-builder-react-jsx@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.24.1.tgz#0ad7917e33c8d751e646daca4e77cc19377d2cbc" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - esutils "^2.0.0" - -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-define-map@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz#7a9747f258d8947d32d515f6aa1c7bd02204a080" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - lodash "^4.2.0" - -babel-helper-explode-assignable-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-explode-class@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" - dependencies: - babel-helper-bindify-decorators "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + node-notifier "^8.0.0" + +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== + dependencies: + "@jest/test-result" "^26.6.2" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.6.2" + 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.6.2" + jest-regex-util "^26.0.0" + jest-util "^26.6.2" + 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@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@samverschueren/stream-to-observable@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" + integrity sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ== dependencies: - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" + any-observable "^0.3.0" -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" +"@sinonjs/commons@^1.7.0": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" + integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" + type-detect "4.0.8" -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" +"@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: - babel-runtime "^6.22.0" - babel-types "^6.24.1" + "@sinonjs/commons" "^1.7.0" -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + version "7.1.12" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" + integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" -babel-helper-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz#d36e22fab1008d79d88648e32116868128456ce8" +"@types/babel__generator@*": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" + integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - lodash "^4.2.0" + "@babel/types" "^7.0.0" -babel-helper-remap-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" +"@types/babel__template@*": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" + integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.15.tgz#db9e4238931eb69ef8aab0ad6523d4d4caa39d03" + integrity sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A== dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" + "@babel/types" "^7.3.0" -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" +"@types/graceful-fs@^4.1.2": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" + integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg== dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" + "@types/node" "*" -babel-jest@^20.0.1, babel-jest@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671" - dependencies: - babel-core "^6.0.0" - babel-plugin-istanbul "^4.0.0" - babel-preset-jest "^20.0.3" +"@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-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" +"@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-runtime "^6.22.0" + "@types/istanbul-lib-coverage" "*" -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" +"@types/istanbul-reports@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" + integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== dependencies: - babel-runtime "^6.22.0" + "@types/istanbul-lib-report" "*" -babel-plugin-istanbul@^4.0.0: - version "4.1.4" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.4.tgz#18dde84bf3ce329fddf3f4103fae921456d8e587" +"@types/mdast@^3.0.0", "@types/mdast@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb" + integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw== dependencies: - find-up "^2.1.0" - istanbul-lib-instrument "^1.7.2" - test-exclude "^4.1.1" - -babel-plugin-jest-hoist@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767" - -babel-plugin-syntax-async-functions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - -babel-plugin-syntax-async-generators@^6.5.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" - -babel-plugin-syntax-class-constructor-call@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" + "@types/unist" "*" -babel-plugin-syntax-class-properties@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" - -babel-plugin-syntax-decorators@^6.1.18, babel-plugin-syntax-decorators@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" - -babel-plugin-syntax-do-expressions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" - -babel-plugin-syntax-dynamic-import@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" - -babel-plugin-syntax-exponentiation-operator@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - -babel-plugin-syntax-export-extensions@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" +"@types/minimist@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" + integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== -babel-plugin-syntax-flow@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" +"@types/node@*": + version "14.14.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.7.tgz#8ea1e8f8eae2430cf440564b98c6dfce1ec5945d" + integrity sha512-Zw1vhUSQZYw+7u5dAwNbIA9TuTotpzY/OF7sJM9FqPOF3SPjKnxrjoTktXDZgUjybf4cWVBP7O8wvKdSaGHweg== -babel-plugin-syntax-function-bind@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" +"@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== -babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" +"@types/prettier@^2.0.0": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.5.tgz#b6ab3bba29e16b821d84e09ecfaded462b816b00" + integrity sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ== -babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" +"@types/stack-utils@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" + integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== -babel-plugin-syntax-trailing-function-commas@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" + integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== + +"@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.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.9.tgz#524cd7998fe810cdb02f26101b699cccd156ff19" + integrity sha512-HmU8SeIRhZCWcnRskCs36Q1Q00KBV6Cqh/ora8WN1+22dY07AZdn6Gel8QZ3t26XYPImtcL8WV/eqjhVmMEw4g== + dependencies: + "@types/yargs-parser" "*" + +"@vue/compiler-core@3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.0.11.tgz#5ef579e46d7b336b8735228758d1c2c505aae69a" + integrity sha512-6sFj6TBac1y2cWCvYCA8YzHJEbsVkX7zdRs/3yK/n1ilvRqcn983XvpBbnN3v4mZ1UiQycTvOiajJmOgN9EVgw== + dependencies: + "@babel/parser" "^7.12.0" + "@babel/types" "^7.12.0" + "@vue/shared" "3.0.11" + estree-walker "^2.0.1" + source-map "^0.6.1" + +"@vue/compiler-dom@3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.0.11.tgz#b15fc1c909371fd671746020ba55b5dab4a730ee" + integrity sha512-+3xB50uGeY5Fv9eMKVJs2WSRULfgwaTJsy23OIltKgMrynnIj8hTYY2UL97HCoz78aDw1VDXdrBQ4qepWjnQcw== + dependencies: + "@vue/compiler-core" "3.0.11" + "@vue/shared" "3.0.11" + +"@vue/compiler-sfc@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.0.11.tgz#cd8ca2154b88967b521f5ad3b10f5f8b6b665679" + integrity sha512-7fNiZuCecRleiyVGUWNa6pn8fB2fnuJU+3AGjbjl7r1P5wBivfl02H4pG+2aJP5gh2u+0wXov1W38tfWOphsXw== + dependencies: + "@babel/parser" "^7.13.9" + "@babel/types" "^7.13.0" + "@vue/compiler-core" "3.0.11" + "@vue/compiler-dom" "3.0.11" + "@vue/compiler-ssr" "3.0.11" + "@vue/shared" "3.0.11" + consolidate "^0.16.0" + estree-walker "^2.0.1" + hash-sum "^2.0.0" + lru-cache "^5.1.1" + magic-string "^0.25.7" + merge-source-map "^1.1.0" + postcss "^8.1.10" + postcss-modules "^4.0.0" + postcss-selector-parser "^6.0.4" + source-map "^0.6.1" + +"@vue/compiler-ssr@3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.0.11.tgz#ac5a05fd1257412fa66079c823d8203b6a889a13" + integrity sha512-66yUGI8SGOpNvOcrQybRIhl2M03PJ+OrDPm78i7tvVln86MHTKhM3ERbALK26F7tXl0RkjX4sZpucCpiKs3MnA== + dependencies: + "@vue/compiler-dom" "3.0.11" + "@vue/shared" "3.0.11" + +"@vue/shared@3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.0.11.tgz#20d22dd0da7d358bb21c17f9bde8628152642c77" + integrity sha512-b+zB8A2so8eCE0JsxjL24J7vdGl8rzPQ09hZNhystm+KqSbKcAej1A+Hbva1rCMmTTqA+hFnUSDc5kouEo0JzA== -babel-plugin-system-import-transformer@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-system-import-transformer/-/babel-plugin-system-import-transformer-3.1.0.tgz#d37f0cae8e61ef39060208331d931b5e630d7c5f" +JSONStream@^1.0.3, JSONStream@^1.0.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== dependencies: - babel-plugin-syntax-dynamic-import "^6.18.0" - -babel-plugin-transform-async-generator-functions@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-generators "^6.5.0" - babel-runtime "^6.22.0" + jsonparse "^1.2.0" + through ">=2.2.7 <3" -babel-plugin-transform-async-to-generator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" - dependencies: - babel-helper-remap-async-to-generator "^6.24.1" - babel-plugin-syntax-async-functions "^6.8.0" - babel-runtime "^6.22.0" +abab@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== -babel-plugin-transform-class-constructor-call@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" +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-plugin-syntax-class-constructor-call "^6.18.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" + acorn "^7.1.1" + acorn-walk "^7.1.1" -babel-plugin-transform-class-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" - dependencies: - babel-helper-function-name "^6.24.1" - babel-plugin-syntax-class-properties "^6.8.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" +acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== -babel-plugin-transform-decorators-legacy@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz#741b58f6c5bce9e6027e0882d9c994f04f366925" +acorn-node@^1.6.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" + integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== dependencies: - babel-plugin-syntax-decorators "^6.1.18" - babel-runtime "^6.2.0" - babel-template "^6.3.0" + acorn "^7.0.0" + acorn-walk "^7.0.0" + xtend "^4.0.2" -babel-plugin-transform-decorators@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" - dependencies: - babel-helper-explode-class "^6.24.1" - babel-plugin-syntax-decorators "^6.13.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-types "^6.24.1" +acorn-walk@^7.0.0, acorn-walk@^7.1.1: + version "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-do-expressions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" - dependencies: - babel-plugin-syntax-do-expressions "^6.8.0" - babel-runtime "^6.22.0" +acorn@^7.0.0, acorn@^7.1.1, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - dependencies: - babel-runtime "^6.22.0" +add-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= + +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.0.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.0.5.tgz#f07d6fdeffcdbb80485570ce3f1bc845fcc812b9" + integrity sha512-RkiLa/AeJx7+9OvniQ/qeWu0w74A8DiPPBclQ6ji3ZQkv5KamO+QGpqmi7O4JIw3rHGUXZ6CoP9tsAkn3gyazg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - dependencies: - babel-runtime "^6.22.0" +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -babel-plugin-transform-es2015-block-scoping@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz#76c295dc3a4741b1665adfd3167215dcff32a576" +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: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - lodash "^4.2.0" + type-fest "^0.11.0" -babel-plugin-transform-es2015-classes@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" +ansi-html@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= -babel-plugin-transform-es2015-computed-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -babel-plugin-transform-es2015-destructuring@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - dependencies: - babel-runtime "^6.22.0" +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -babel-plugin-transform-es2015-duplicate-keys@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" +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== -babel-plugin-transform-es2015-for-of@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - dependencies: - babel-runtime "^6.22.0" +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= -babel-plugin-transform-es2015-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" + color-convert "^1.9.0" -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: - babel-runtime "^6.22.0" + color-convert "^2.0.1" -babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" +any-observable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" + integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== -babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe" +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-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-types "^6.24.1" + micromatch "^3.1.4" + normalize-path "^2.1.1" -babel-plugin-transform-es2015-modules-systemjs@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" +anymatch@^3.0.3, anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" + normalize-path "^3.0.0" + picomatch "^2.0.4" -babel-plugin-transform-es2015-modules-umd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" +append-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" + integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" + buffer-equal "^1.0.0" -babel-plugin-transform-es2015-object-super@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" +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-replace-supers "^6.24.1" - babel-runtime "^6.22.0" + sprintf-js "~1.0.2" -babel-plugin-transform-es2015-parameters@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - dependencies: - babel-helper-call-delegate "^6.24.1" - babel-helper-get-function-arity "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" +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= -babel-plugin-transform-es2015-shorthand-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" +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== -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - dependencies: - babel-runtime "^6.22.0" +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= -babel-plugin-transform-es2015-sticky-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - dependencies: - babel-runtime "^6.22.0" +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= -babel-plugin-transform-es2015-typeof-symbol@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - dependencies: - babel-runtime "^6.22.0" +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -babel-plugin-transform-es2015-unicode-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= -babel-plugin-transform-exponentiation-operator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" +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-builder-binary-assignment-operator-visitor "^6.24.1" - babel-plugin-syntax-exponentiation-operator "^6.8.0" - babel-runtime "^6.22.0" + safer-buffer "~2.1.0" -babel-plugin-transform-export-extensions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" - dependencies: - babel-plugin-syntax-export-extensions "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-flow-strip-types@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" - dependencies: - babel-plugin-syntax-flow "^6.18.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-function-bind@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" - dependencies: - babel-plugin-syntax-function-bind "^6.8.0" - babel-runtime "^6.22.0" +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -babel-plugin-transform-object-rest-spread@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-display-name@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.23.0.tgz#4398910c358441dc4cef18787264d0412ed36b37" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx-self@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx-source@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" - dependencies: - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-react-jsx@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" - dependencies: - babel-helper-builder-react-jsx "^6.24.1" - babel-plugin-syntax-jsx "^6.8.0" - babel-runtime "^6.22.0" - -babel-plugin-transform-regenerator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz#b8da305ad43c3c99b4848e4fe4037b770d23c418" - dependencies: - regenerator-transform "0.9.11" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-polyfill@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" - dependencies: - babel-runtime "^6.22.0" - core-js "^2.4.0" - regenerator-runtime "^0.10.0" - -babel-preset-es2015@^6.16.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.24.1" - babel-plugin-transform-es2015-classes "^6.24.1" - babel-plugin-transform-es2015-computed-properties "^6.24.1" - babel-plugin-transform-es2015-destructuring "^6.22.0" - babel-plugin-transform-es2015-duplicate-keys "^6.24.1" - babel-plugin-transform-es2015-for-of "^6.22.0" - babel-plugin-transform-es2015-function-name "^6.24.1" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-plugin-transform-es2015-modules-systemjs "^6.24.1" - babel-plugin-transform-es2015-modules-umd "^6.24.1" - babel-plugin-transform-es2015-object-super "^6.24.1" - babel-plugin-transform-es2015-parameters "^6.24.1" - babel-plugin-transform-es2015-shorthand-properties "^6.24.1" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.24.1" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.22.0" - babel-plugin-transform-es2015-unicode-regex "^6.24.1" - babel-plugin-transform-regenerator "^6.24.1" - -babel-preset-flow@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" - dependencies: - babel-plugin-transform-flow-strip-types "^6.22.0" - -babel-preset-jest@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a" - dependencies: - babel-plugin-jest-hoist "^20.0.3" - -babel-preset-react@^6.16.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" - dependencies: - babel-plugin-syntax-jsx "^6.3.13" - babel-plugin-transform-react-display-name "^6.23.0" - babel-plugin-transform-react-jsx "^6.24.1" - babel-plugin-transform-react-jsx-self "^6.22.0" - babel-plugin-transform-react-jsx-source "^6.22.0" - babel-preset-flow "^6.23.0" - -babel-preset-stage-0@^6.16.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz#5642d15042f91384d7e5af8bc88b1db95b039e6a" - dependencies: - babel-plugin-transform-do-expressions "^6.22.0" - babel-plugin-transform-function-bind "^6.22.0" - babel-preset-stage-1 "^6.24.1" - -babel-preset-stage-1@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" - dependencies: - babel-plugin-transform-class-constructor-call "^6.24.1" - babel-plugin-transform-export-extensions "^6.22.0" - babel-preset-stage-2 "^6.24.1" - -babel-preset-stage-2@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" - dependencies: - babel-plugin-syntax-dynamic-import "^6.18.0" - babel-plugin-transform-class-properties "^6.24.1" - babel-plugin-transform-decorators "^6.24.1" - babel-preset-stage-3 "^6.24.1" - -babel-preset-stage-3@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" - dependencies: - babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-generator-functions "^6.24.1" - babel-plugin-transform-async-to-generator "^6.24.1" - babel-plugin-transform-exponentiation-operator "^6.24.1" - babel-plugin-transform-object-rest-spread "^6.22.0" - -babel-register@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" - dependencies: - babel-core "^6.24.1" - babel-runtime "^6.22.0" - core-js "^2.4.0" - home-or-tmp "^2.0.0" - lodash "^4.2.0" - mkdirp "^0.5.1" - source-map-support "^0.4.2" - -babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.10.0" - -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.3.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - babylon "^6.11.0" - lodash "^4.2.0" - -babel-traverse@^6.16.0, babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" - dependencies: - babel-code-frame "^6.22.0" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - babylon "^6.15.0" - debug "^2.2.0" - globals "^9.0.0" - invariant "^2.2.0" - lodash "^4.2.0" +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= -babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" - dependencies: - babel-runtime "^6.22.0" - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^1.0.1" +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -babelify@^7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/babelify/-/babelify-7.3.0.tgz#aa56aede7067fd7bd549666ee16dc285087e88e5" - dependencies: - babel-core "^6.0.14" - object-assign "^4.0.0" +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== -babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.17.0, babylon@^6.17.2: - version "6.17.2" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.2.tgz#201d25ef5f892c41bae49488b08db0dd476e9f5c" +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.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== + dependencies: + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.6.2" + 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" + "@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.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== + 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@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz#cf5feef29551253471cfa82fc8e0f5063df07a77" + integrity sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q== + 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/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== + dependencies: + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" + +babelify@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/babelify/-/babelify-10.0.0.tgz#fe73b1a22583f06680d8d072e25a1e0d1d1d7fb5" + integrity sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg== bail@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.1.tgz#912579de8b391aadf3c5fdf4cd2a0fc225df3bc2" + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== -balanced-match@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" +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.1" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.1.tgz#b36a7f11113853a342a15691d98e2dcc8a6cc270" + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: - arr-union "^3.1.0" - cache-base "^0.8.4" - class-utils "^0.3.4" + cache-base "^1.0.1" + class-utils "^0.3.5" component-emitter "^1.2.1" - define-property "^0.2.5" - isobject "^2.1.0" - lazy-cache "^2.0.1" - mixin-deep "^1.1.3" + 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.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + 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" -binary-extensions@^1.0.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" +bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== body@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069" + integrity sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk= dependencies: continuable-cache "^0.3.1" error "^7.0.0" raw-body "~1.1.0" safe-json-parse "~1.0.1" -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - brace-expansion@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" + 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 "^0.4.1" + balanced-match "^1.0.0" concat-map "0.0.1" -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.2.2.tgz#241f868c2b2690d9febeee5a7c83fbbf25d00b1b" +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.0.3" + arr-flatten "^1.1.0" array-unique "^0.3.2" - define-property "^1.0.0" extend-shallow "^2.0.1" fill-range "^4.0.0" - isobject "^3.0.0" + isobject "^3.0.1" repeat-element "^1.1.2" snapdragon "^0.8.1" snapdragon-node "^2.0.1" - split-string "^2.1.0" + split-string "^3.0.2" to-regex "^3.0.1" -browser-resolve@^1.11.2, browser-resolve@^1.7.0: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: - resolve "1.1.7" + fill-range "^7.0.1" -bser@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" +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== + +browser-resolve@^1.7.0: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== dependencies: - node-int64 "^0.4.0" + resolve "1.1.7" -bser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" -buffer-shims@^1.0.0: +buffer-equal@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" + integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= -builtin-modules@^1.0.0: +buffer-from@^1.0.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-shims@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E= bytes@1: version "1.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" + integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g= -cache-base@^0.8.4: - version "0.8.5" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-0.8.5.tgz#60ceb3504021eceec7011fd3384b7f4e95729bfa" +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 "^0.2.1" + collection-visit "^1.0.0" component-emitter "^1.2.1" - get-value "^2.0.5" - has-value "^0.3.1" - isobject "^3.0.0" - lazy-cache "^2.0.1" - set-value "^0.4.2" + 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 "^0.2.3" - unset-value "^0.1.1" + union-value "^1.0.0" + unset-value "^1.0.0" -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" +cached-path-relative@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.2.tgz#a13df4196d26776220cc3356eb147a52dba2c6db" + integrity sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg== + +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== dependencies: - callsites "^0.2.0" + function-bind "^1.1.1" + get-intrinsic "^1.0.0" -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= dependencies: camelcase "^2.0.0" map-obj "^1.0.0" -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" +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.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= ccount@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.1.tgz#665687945168c218ec77ff61a4155ae00227a96c" - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" + version "1.1.0" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== -chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -1177,871 +1292,1114 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +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: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +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== + character-entities-html4@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.0.tgz#1ab08551d3ce1fa1df08d00fb9ca1defb147a06c" + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" + integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g== character-entities-legacy@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.0.tgz#b18aad98f6b7bcc646c1e4c81f9f1956376a561a" + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== character-entities@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.0.tgz#a683e2cf75dbe8b171963531364e58e18a1b155f" + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== character-reference-invalid@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.0.tgz#dec9ad1dfb9f8d06b4fcdaa2adc3c4fd97af1e68" + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== chdir@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/chdir/-/chdir-0.0.0.tgz#c29bdb85f391834c83ddbf090f18a11b0ed96bee" + integrity sha1-wpvbhfORg0yD3b8JDxihGw7Za+4= -chokidar@^1.2.0, chokidar@^1.6.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" +chokidar@^3.4.0: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" optionalDependencies: - fsevents "^1.0.0" + fsevents "~2.1.2" -ci-info@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" +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== -circular-json@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== -class-utils@^0.3.4: - version "0.3.5" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.5.tgz#17e793103750f9627b2176ea34cfd1b565903c80" +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" - lazy-cache "^2.0.2" static-extend "^0.1.1" -cli-cursor@^1.0.1, cli-cursor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" +cli-cursor@^2.0.0, cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= dependencies: - restore-cursor "^1.0.1" - -cli-spinners@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" + restore-cursor "^2.0.0" cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= dependencies: slice-ansi "0.0.4" string-width "^1.0.1" -cli-width@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" +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: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" clone-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - -clone-stats@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= clone-stats@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= -clone@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= cloneable-readable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.0.0.tgz#a6290d413f217a61232f95e458ff38418cfb0117" + version "1.1.3" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" + integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== dependencies: inherits "^2.0.1" - process-nextick-args "^1.0.6" - through2 "^2.0.1" + process-nextick-args "^2.0.0" + readable-stream "^2.3.5" co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -collapse-white-space@^1.0.0, collapse-white-space@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.2.tgz#9c463fb9c6d190d2dcae21a356a01bcae9eeef6d" +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@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-0.2.3.tgz#2f62483caecc95f083b9a454a3ee9e6139ad7957" +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: - lazy-cache "^2.0.1" - map-visit "^0.1.5" - object-visit "^0.3.4" + map-visit "^1.0.0" + object-visit "^1.0.0" -color-convert@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: - color-name "^1.1.1" + color-name "1.1.3" -color-name@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" +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" -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" -comma-separated-tokens@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.3.tgz#6eb01f4730bde7a7fce5d5e2d943bdd637272801" - dependencies: - trim "0.0.1" +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== -commander@^2.8.1, commander@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" +commander@^2.14.1, commander@^2.9.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -compare-func@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== dependencies: array-ify "^1.0.0" - dot-prop "^3.0.0" + dot-prop "^5.1.0" component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + 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= -concat-stream@^1.4.10, concat-stream@^1.5.0, concat-stream@^1.5.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" +concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: + buffer-from "^1.0.0" inherits "^2.0.3" readable-stream "^2.2.2" typedarray "^0.0.6" +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + concat-stream@~1.5.0: version "1.5.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" + integrity sha1-cIl4Yk2FavQaWnQd790mHadSwmY= dependencies: inherits "~2.0.1" readable-stream "~2.0.0" typedarray "~0.0.5" -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - -content-type-parser@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" +consolidate@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.16.0.tgz#a11864768930f2f19431660a65906668f5fbdc16" + integrity sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ== + dependencies: + bluebird "^3.7.2" continuable-cache@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" + integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= -conventional-changelog-angular@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.3.4.tgz#7d7cdfbd358948312904d02229a61fd6075cf455" +conventional-changelog-angular@^5.0.11, conventional-changelog-angular@^5.0.12: + version "5.0.12" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" + integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw== dependencies: - compare-func "^1.3.1" - github-url-from-git "^1.4.0" - q "^1.4.1" + compare-func "^2.0.0" + q "^1.5.1" -conventional-changelog-atom@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-0.1.0.tgz#67a47c66a42b2f8909ef1587c9989ae1de730b92" +conventional-changelog-atom@^2.0.7, conventional-changelog-atom@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz#a759ec61c22d1c1196925fca88fe3ae89fd7d8de" + integrity sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw== dependencies: - q "^1.4.1" + q "^1.5.1" -conventional-changelog-codemirror@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.1.0.tgz#7577a591dbf9b538e7a150a7ee62f65a2872b334" +conventional-changelog-codemirror@^2.0.7, conventional-changelog-codemirror@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz#398e9530f08ce34ec4640af98eeaf3022eb1f7dc" + integrity sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw== dependencies: - q "^1.4.1" + q "^1.5.1" -conventional-changelog-core@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-1.9.0.tgz#de5dfbc091847656508d4a389e35c9a1bc49e7f4" - dependencies: - conventional-changelog-writer "^1.1.0" - conventional-commits-parser "^1.0.0" - dateformat "^1.0.12" - get-pkg-repo "^1.0.0" - git-raw-commits "^1.2.0" - git-remote-origin-url "^2.0.0" - git-semver-tags "^1.2.0" - lodash "^4.0.0" - normalize-package-data "^2.3.5" - q "^1.4.1" - read-pkg "^1.1.0" - read-pkg-up "^1.0.1" - through2 "^2.0.0" +conventional-changelog-config-spec@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz#874a635287ef8b581fd8558532bf655d4fb59f2d" + integrity sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ== -conventional-changelog-ember@^0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-0.2.6.tgz#8b7355419f5127493c4c562473ab2fc792f1c2b6" +conventional-changelog-conventionalcommits@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.4.0.tgz#8d96687141c9bbd725a89b95c04966d364194cd4" + integrity sha512-ybvx76jTh08tpaYrYn/yd0uJNLt5yMrb1BphDe4WBredMlvPisvMghfpnJb6RmRNcqXeuhR6LfGZGewbkRm9yA== dependencies: - q "^1.4.1" + compare-func "^2.0.0" + lodash "^4.17.15" + q "^1.5.1" -conventional-changelog-eslint@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-0.1.0.tgz#a52411e999e0501ce500b856b0a643d0330907e2" +conventional-changelog-conventionalcommits@4.5.0, conventional-changelog-conventionalcommits@^4.4.0, conventional-changelog-conventionalcommits@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.5.0.tgz#a02e0b06d11d342fdc0f00c91d78265ed0bc0a62" + integrity sha512-buge9xDvjjOxJlyxUnar/+6i/aVEVGA7EEh4OafBCXPlLUQPGbRUBhBUveWRxzvR8TEjhKEP4BdepnpG2FSZXw== dependencies: - q "^1.4.1" + compare-func "^2.0.0" + lodash "^4.17.15" + q "^1.5.1" -conventional-changelog-express@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-0.1.0.tgz#55c6c841c811962036c037bdbd964a54ae310fce" +conventional-changelog-core@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.1.tgz#f811ad98ab2ff080becafc61407509420c9b447d" + integrity sha512-8cH8/DEoD3e5Q6aeogdR5oaaKs0+mG6+f+Om0ZYt3PNv7Zo0sQhu4bMDRsqAF+UTekTAtP1W/C41jH/fkm8Jtw== dependencies: - q "^1.4.1" - -conventional-changelog-jquery@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz#0208397162e3846986e71273b6c79c5b5f80f510" + add-stream "^1.0.0" + conventional-changelog-writer "^4.0.18" + conventional-commits-parser "^3.2.0" + dateformat "^3.0.0" + get-pkg-repo "^1.0.0" + git-raw-commits "2.0.0" + git-remote-origin-url "^2.0.0" + git-semver-tags "^4.1.1" + lodash "^4.17.15" + normalize-package-data "^3.0.0" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + shelljs "^0.8.3" + through2 "^4.0.0" + +conventional-changelog-core@^4.2.1: + version "4.2.2" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.2.tgz#f0897df6d53b5d63dec36b9442bd45354f8b3ce5" + integrity sha512-7pDpRUiobQDNkwHyJG7k9f6maPo9tfPzkSWbRq97GGiZqisElhnvUZSvyQH20ogfOjntB5aadvv6NNcKL1sReg== + dependencies: + add-stream "^1.0.0" + conventional-changelog-writer "^4.0.18" + conventional-commits-parser "^3.2.0" + dateformat "^3.0.0" + get-pkg-repo "^1.0.0" + git-raw-commits "^2.0.8" + git-remote-origin-url "^2.0.0" + git-semver-tags "^4.1.1" + lodash "^4.17.15" + normalize-package-data "^3.0.0" + q "^1.5.1" + read-pkg "^3.0.0" + read-pkg-up "^3.0.0" + shelljs "^0.8.3" + through2 "^4.0.0" + +conventional-changelog-ember@^2.0.8, conventional-changelog-ember@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz#619b37ec708be9e74a220f4dcf79212ae1c92962" + integrity sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A== + dependencies: + q "^1.5.1" + +conventional-changelog-eslint@^3.0.8, conventional-changelog-eslint@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz#689bd0a470e02f7baafe21a495880deea18b7cdb" + integrity sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA== + dependencies: + q "^1.5.1" + +conventional-changelog-express@^2.0.5, conventional-changelog-express@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz#420c9d92a347b72a91544750bffa9387665a6ee8" + integrity sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ== dependencies: - q "^1.4.1" + q "^1.5.1" -conventional-changelog-jscs@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz#0479eb443cc7d72c58bf0bcf0ef1d444a92f0e5c" +conventional-changelog-jquery@^3.0.10, conventional-changelog-jquery@^3.0.11: + version "3.0.11" + resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz#d142207400f51c9e5bb588596598e24bba8994bf" + integrity sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw== dependencies: - q "^1.4.1" + q "^1.5.1" -conventional-changelog-jshint@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-0.1.0.tgz#00cab8e9a3317487abd94c4d84671342918d2a07" +conventional-changelog-jshint@^2.0.8, conventional-changelog-jshint@^2.0.9: + version "2.0.9" + resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz#f2d7f23e6acd4927a238555d92c09b50fe3852ff" + integrity sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA== dependencies: - compare-func "^1.3.1" - q "^1.4.1" + compare-func "^2.0.0" + q "^1.5.1" -conventional-changelog-writer@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-1.4.1.tgz#3f4cb4d003ebb56989d30d345893b52a43639c8e" +conventional-changelog-preset-loader@^2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" + integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== + +conventional-changelog-writer@^4.0.18: + version "4.0.18" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.18.tgz#10b73baa59c7befc69b360562f8b9cd19e63daf8" + integrity sha512-mAQDCKyB9HsE8Ko5cCM1Jn1AWxXPYV0v8dFPabZRkvsiWUul2YyAqbIaoMKF88Zf2ffnOPSvKhboLf3fnjo5/A== dependencies: - compare-func "^1.3.1" - conventional-commits-filter "^1.0.0" - dateformat "^1.0.11" - handlebars "^4.0.2" + compare-func "^2.0.0" + conventional-commits-filter "^2.0.7" + dateformat "^3.0.0" + handlebars "^4.7.6" json-stringify-safe "^5.0.1" - lodash "^4.0.0" - meow "^3.3.0" - semver "^5.0.1" + lodash "^4.17.15" + meow "^8.0.0" + semver "^6.0.0" split "^1.0.0" - through2 "^2.0.0" - -conventional-changelog@^1.1.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-1.1.4.tgz#108bc750c2a317e200e2f9b413caaa1f8c7efa3b" - dependencies: - conventional-changelog-angular "^1.3.4" - conventional-changelog-atom "^0.1.0" - conventional-changelog-codemirror "^0.1.0" - conventional-changelog-core "^1.9.0" - conventional-changelog-ember "^0.2.6" - conventional-changelog-eslint "^0.1.0" - conventional-changelog-express "^0.1.0" - conventional-changelog-jquery "^0.1.0" - conventional-changelog-jscs "^0.1.0" - conventional-changelog-jshint "^0.1.0" + through2 "^4.0.0" + +conventional-changelog@3.1.23: + version "3.1.23" + resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.23.tgz#d696408021b579a3814aba79b38729ed86478aea" + integrity sha512-sScUu2NHusjRC1dPc5p8/b3kT78OYr95/Bx7Vl8CPB8tF2mG1xei5iylDTRjONV5hTlzt+Cn/tBWrKdd299b7A== + dependencies: + conventional-changelog-angular "^5.0.11" + conventional-changelog-atom "^2.0.7" + conventional-changelog-codemirror "^2.0.7" + conventional-changelog-conventionalcommits "^4.4.0" + conventional-changelog-core "^4.2.0" + conventional-changelog-ember "^2.0.8" + conventional-changelog-eslint "^3.0.8" + conventional-changelog-express "^2.0.5" + conventional-changelog-jquery "^3.0.10" + conventional-changelog-jshint "^2.0.8" + conventional-changelog-preset-loader "^2.3.4" + +conventional-changelog@3.1.24: + version "3.1.24" + resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.24.tgz#ebd180b0fd1b2e1f0095c4b04fd088698348a464" + integrity sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg== + dependencies: + conventional-changelog-angular "^5.0.12" + conventional-changelog-atom "^2.0.8" + conventional-changelog-codemirror "^2.0.8" + conventional-changelog-conventionalcommits "^4.5.0" + conventional-changelog-core "^4.2.1" + conventional-changelog-ember "^2.0.9" + conventional-changelog-eslint "^3.0.9" + conventional-changelog-express "^2.0.6" + conventional-changelog-jquery "^3.0.11" + conventional-changelog-jshint "^2.0.9" + conventional-changelog-preset-loader "^2.3.4" conventional-commit-types@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-2.1.0.tgz#45d860386c9a2e6537ee91d8a1b61bd0411b3d04" + version "2.3.0" + resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-2.3.0.tgz#bc3c8ebba0a9e4b3ecc548f1d0674e251ab8be22" + integrity sha512-6iB39PrcGYdz0n3z31kj6/Km6mK9hm9oMRhwcLnKxE7WNoeRKZbTAobliKrbYZ5jqyCvtcVEfjCiaEzhL3AVmQ== -conventional-commits-filter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-1.0.0.tgz#6fc2a659372bc3f2339cf9ffff7e1b0344b93039" +conventional-commits-filter@^2.0.6, conventional-commits-filter@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" + integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== dependencies: - is-subset "^0.1.1" + lodash.ismatch "^4.4.0" modify-values "^1.0.0" -conventional-commits-parser@^1.0.0, conventional-commits-parser@^1.0.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-1.3.0.tgz#e327b53194e1a7ad5dc63479ee9099a52b024865" +conventional-commits-parser@^3.1.0, conventional-commits-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.0.tgz#9e261b139ca4b7b29bcebbc54460da36894004ca" + integrity sha512-XmJiXPxsF0JhAKyfA2Nn+rZwYKJ60nanlbSWwwkGwLQFbugsc0gv1rzc7VbbUWAzJfR1qR87/pNgv9NgmxtBMQ== dependencies: JSONStream "^1.0.4" - is-text-path "^1.0.0" - lodash "^4.2.1" - meow "^3.3.0" + is-text-path "^1.0.1" + lodash "^4.17.15" + meow "^8.0.0" split2 "^2.0.0" - through2 "^2.0.0" + through2 "^4.0.0" trim-off-newlines "^1.0.0" -conventional-recommended-bump@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-1.0.0.tgz#6d303a27837ae938b7c68c8ddeed34559b4b0789" +conventional-recommended-bump@6.0.10: + version "6.0.10" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.0.10.tgz#ac2fb3e31bad2aeda80086b345bf0c52edd1d1b3" + integrity sha512-2ibrqAFMN3ZA369JgVoSbajdD/BHN6zjY7DZFKTHzyzuQejDUCjQ85S5KHxCRxNwsbDJhTPD5hOKcis/jQhRgg== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^2.3.4" + conventional-commits-filter "^2.0.6" + conventional-commits-parser "^3.1.0" + git-raw-commits "2.0.0" + git-semver-tags "^4.1.0" + meow "^7.0.0" + q "^1.5.1" + +conventional-recommended-bump@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" + integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== + dependencies: + concat-stream "^2.0.0" + conventional-changelog-preset-loader "^2.3.4" + conventional-commits-filter "^2.0.7" + conventional-commits-parser "^3.2.0" + git-raw-commits "^2.0.8" + git-semver-tags "^4.1.1" + meow "^8.0.0" + q "^1.5.1" + +convert-source-map@^1.4.0, convert-source-map@^1.5.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: - concat-stream "^1.4.10" - conventional-commits-filter "^1.0.0" - conventional-commits-parser "^1.0.1" - git-raw-commits "^1.2.0" - git-semver-tags "^1.2.0" - meow "^3.3.0" - object-assign "^4.0.1" - -convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" + safe-buffer "~5.1.1" copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" - -core-util-is@~1.0.0: +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= -cosmiconfig@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-1.1.0.tgz#0dea0f9804efdfb929fbb1b188e25553ea053d37" - dependencies: - graceful-fs "^4.1.2" - js-yaml "^3.4.3" - minimist "^1.2.0" - object-assign "^4.0.1" - os-homedir "^1.0.1" - parse-json "^2.2.0" - pinkie-promise "^2.0.0" - require-from-string "^1.1.0" - -coveralls@^2.13.1: - version "2.13.1" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.13.1.tgz#d70bb9acc1835ec4f063ff9dac5423c17b11f178" - dependencies: - js-yaml "3.6.1" - lcov-parse "0.0.10" - log-driver "1.2.5" - minimist "1.2.0" - request "2.79.0" - -cross-spawn@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" +cosmiconfig@^5.0.2, cosmiconfig@^5.0.7: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== dependencies: - lru-cache "^4.0.1" - which "^1.2.9" + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" which "^1.2.9" -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" +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: - boom "2.x.x" + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.2" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" +cross-spawn@^7.0.0, cross-spawn@^7.0.2: + 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" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +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@>= 0.2.37 < 0.3.0": - version "0.2.37" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" +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.x" + cssom "~0.3.6" currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= dependencies: array-find-index "^1.0.1" -cz-conventional-changelog@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-2.0.0.tgz#55a979afdfe95e7024879d2a0f5924630170b533" +cz-conventional-changelog@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-2.1.0.tgz#2f4bc7390e3244e4df293e6ba351e4c740a7c764" + integrity sha1-L0vHOQ4yROTfKT5ro1Hkx0Cnx2Q= dependencies: conventional-commit-types "^2.0.0" lodash.map "^4.5.1" longest "^1.0.1" - pad-right "^0.2.2" right-pad "^1.0.1" word-wrap "^1.0.3" -d@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" - dependencies: - es5-ext "^0.10.9" - dargs@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" + integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= dependencies: number-is-nan "^1.0.0" +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" +data-urls@^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" + date-fns@^1.27.2: - version "1.28.5" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.5.tgz#257cfc45d322df45ef5658665967ee841cd73faf" + version "1.30.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== -dateformat@^1.0.11, dateformat@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" - dependencies: - get-stdin "^4.0.1" - meow "^3.3.0" +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== + +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= -debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.3: - version "2.6.8" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" +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@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" + integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== + dependencies: + ms "2.1.2" + +decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= dependencies: - ms "0.7.1" + decamelize "^1.1.0" + map-obj "^1.0.0" -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: +decamelize@^1.1.0, decamelize@^1.1.2, 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.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" + integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -deep-extend@~0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= -deep-is@~0.1.3: +deep-is@^0.1.3, 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= -default-require-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" +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-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: - strip-bom "^2.0.0" + object-keys "^1.0.12" define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -detab@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.0.tgz#485bd7954d2348092e998f7ff1a79fd9869d9b50" - dependencies: - repeat-string "^1.5.4" +detect-indent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" + integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" +detect-newline@^3.0.0, detect-newline@^3.1.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== -detective@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/detective/-/detective-4.5.0.tgz#6e5a8c6b26e6c7a254b1c6b6d7490d98ec91edd1" +detective@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" + integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== dependencies: - acorn "^4.0.3" + acorn-node "^1.6.1" defined "^1.0.0" + minimist "^1.1.1" -diff@^1.3.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" - -diff@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== -disparity@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/disparity/-/disparity-2.0.0.tgz#57ddacb47324ae5f58d2cc0da886db4ce9eeb718" - dependencies: - ansi-styles "^2.0.1" - diff "^1.3.2" +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== -doctrine-temporary-fork@2.0.0-alpha-allowarrayindex: - version "2.0.0-alpha-allowarrayindex" - resolved "https://registry.yarnpkg.com/doctrine-temporary-fork/-/doctrine-temporary-fork-2.0.0-alpha-allowarrayindex.tgz#40015a867eb27e75b26c828b71524f137f89f9f0" +doctrine-temporary-fork@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine-temporary-fork/-/doctrine-temporary-fork-2.1.0.tgz#36f2154f556ee4f1e60311d391cd23de5187ed57" + integrity sha512-nliqOv5NkE4zMON4UA6AMJE6As35afs8aYXATpU4pTUdIKiARZwrJVEP1boA3Rx1ZXHVkwxkhcq4VkqvsuRLsA== dependencies: esutils "^2.0.2" - isarray "^1.0.0" -doctrine@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" - isarray "^1.0.0" documentation-schema@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/documentation-schema/-/documentation-schema-0.0.1.tgz#6ee05b47b08a04d024132d75893d378a36572209" + integrity sha1-buBbR7CKBNAkEy11iT03ijZXIgk= -dot-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" +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: - is-obj "^1.0.0" + webidl-conversions "^5.0.0" -double-ended-queue@^2.1.0-0: - version "2.1.0-0" - resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotgitignore@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/dotgitignore/-/dotgitignore-2.1.0.tgz#a4b15a4e4ef3cf383598aaf1dfa4a04bcc089b7b" + integrity sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA== + dependencies: + find-up "^3.0.0" + minimatch "^3.0.4" duplexer2@^0.1.2, duplexer2@~0.1.0: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= dependencies: readable-stream "^2.0.2" -duplexify@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604" +duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== dependencies: - end-of-stream "1.0.0" + end-of-stream "^1.0.0" inherits "^2.0.1" readable-stream "^2.0.0" stream-shift "^1.0.0" ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + 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" elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= + +emittery@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== "emoji-regex@>=6.0.0 <=6.1.1": version "6.1.1" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" + integrity sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4= -end-of-stream@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e" +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +end-of-stream@^1.0.0, 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.3.0" + once "^1.4.0" -"errno@>=0.1.1 <0.2.0-0": - version "0.1.4" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: - prr "~0.0.0" + ansi-colors "^4.1.1" -error-ex@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" error@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" + version "7.2.1" + resolved "https://registry.yarnpkg.com/error/-/error-7.2.1.tgz#eab21a4689b5f684fc83da84a0e390de82d94894" + integrity sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA== dependencies: string-template "~0.2.1" - xtend "~4.0.0" - -es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.23" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.23.tgz#7578b51be974207a5487821b56538c224e4e7b38" - dependencies: - es6-iterator "2" - es6-symbol "~3.1" -es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" - dependencies: - d "1" - es5-ext "^0.10.14" - es6-symbol "^3.1" - -es6-map@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-set "~0.1.5" - es6-symbol "~3.1.1" - event-emitter "~0.3.5" - -es6-set@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" - dependencies: - d "1" - es5-ext "~0.10.14" - es6-iterator "~2.0.1" - es6-symbol "3.1.1" - event-emitter "~0.3.5" - -es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: +escalade@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - dependencies: - d "1" - es5-ext "~0.10.14" - -es6-weak-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" - dependencies: - d "1" - es5-ext "^0.10.14" - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@^1.6.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +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 "^2.7.1" - estraverse "^1.9.1" + esprima "^4.0.1" + estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: - source-map "~0.2.0" + source-map "~0.6.1" -escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" +eslint-config-prettier@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.1.0.tgz#4ef1eaf97afe5176e6a75ddfb57c335121abc5a6" + integrity sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw== + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" - esrecurse "^4.1.0" + esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-config-prettier@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.1.1.tgz#ab3923fb704eebecab6960906b7d0d6e801cde58" +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: - get-stdin "^5.0.1" + eslint-visitor-keys "^1.1.0" -eslint-plugin-flowtype@^2.32.1: - version "2.34.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.34.0.tgz#b9875f314652e5081623c9d2b18a346bbb759c09" - dependencies: - lodash "^4.15.0" +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint@^3.19.0: - version "3.19.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" - dependencies: - babel-code-frame "^6.16.0" - chalk "^1.1.3" - concat-stream "^1.5.2" - debug "^2.1.1" - doctrine "^2.0.0" - escope "^3.6.0" - espree "^3.4.0" - esquery "^1.0.0" - estraverse "^4.2.0" +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + +eslint@^7.23.0: + version "7.23.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.23.0.tgz#8d029d252f6e8cf45894b4bee08f5493f8e94325" + integrity sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" esutils "^2.0.2" - file-entry-cache "^2.0.0" - glob "^7.0.3" - globals "^9.14.0" - ignore "^3.2.0" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^0.12.0" - is-my-json-valid "^2.10.0" - is-resolvable "^1.0.0" - js-yaml "^3.5.1" - json-stable-stringify "^1.0.0" - levn "^0.3.0" - lodash "^4.0.0" - mkdirp "^0.5.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.21" + minimatch "^3.0.4" natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.1" - pluralize "^1.2.1" - progress "^1.1.8" - require-uncached "^1.0.2" - shelljs "^0.7.5" - strip-bom "^3.0.0" - strip-json-comments "~2.0.1" - table "^3.7.8" - text-table "~0.2.0" - user-home "^2.0.0" - -espree@^3.4.0: - version "3.4.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.4" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" + integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== dependencies: - acorn "^5.0.1" - acorn-jsx "^3.0.0" + acorn "^7.4.0" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.3.0" -esprima@^2.6.0, esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" +espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" -esprima@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" +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== -esquery@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: - estraverse "^4.0.0" + estraverse "^5.1.0" -esrecurse@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - estraverse "~4.1.0" - object-assign "^4.0.1" - -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + estraverse "^5.2.0" -estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" +estraverse@^4.1.1, estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== -esutils@^2.0.0, esutils@^2.0.2: +estree-walker@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== -event-emitter@~0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - dependencies: - d "1" - es5-ext "~0.10.14" +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -exec-sh@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" - dependencies: - merge "^1.1.3" +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@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.5.1.tgz#de3fb85cb8d6e91c85bcbceb164581785cb57b36" +execa@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" + integrity sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA== dependencies: - cross-spawn "^4.0.0" - get-stream "^2.2.0" + cross-spawn "^5.0.1" + get-stream "^3.0.0" is-stream "^1.1.0" npm-run-path "^2.0.0" p-finally "^1.0.0" signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^0.6.0: - version "0.6.3" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.6.3.tgz#57b69a594f081759c69e5370f0d17b9cb11658fe" +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 "^5.0.1" - get-stream "^3.0.0" + cross-spawn "^6.0.0" + get-stream "^4.0.0" is-stream "^1.1.0" npm-run-path "^2.0.0" p-finally "^1.0.0" signal-exit "^3.0.0" strip-eof "^1.0.0" -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + 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.0.1: +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" @@ -2051,257 +2409,317 @@ expand-brackets@^2.0.1: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" +expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== dependencies: - fill-range "^2.1.0" + "@jest/types" "^26.6.2" + ansi-styles "^4.0.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + 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@^3.0.0, extend@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" +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: - is-extglob "^1.0.0" + assign-symbols "^1.0.0" + is-extendable "^1.0.1" -extglob@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-1.1.0.tgz#0678b4e2ce45c0e4e50f5e5eafb1b0dab5b4e424" +extend@^3.0.0, extend@^3.0.2, 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 "^0.2.5" - expand-brackets "^2.0.1" + define-property "^1.0.0" + expand-brackets "^2.1.4" extend-shallow "^2.0.1" - fragment-cache "^0.2.0" + fragment-cache "^0.2.1" regex-not "^1.0.0" snapdragon "^0.8.1" - to-regex "^2.1.0" + to-regex "^3.0.1" -extsprintf@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" +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-levenshtein@~2.0.4: +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.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, 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= faye-websocket@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= dependencies: websocket-driver ">=0.5.1" -fb-watchman@^1.8.0: - version "1.9.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" - dependencies: - bser "1.0.2" - fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== dependencies: - bser "^2.0.0" + bser "2.1.1" -figures@^1.3.5, figures@^1.5.0, figures@^1.7.0: +figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= dependencies: escape-string-regexp "^1.0.5" object-assign "^4.1.0" -file-entry-cache@^2.0.0: +figures@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + escape-string-regexp "^1.0.5" -fileset@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" +figures@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: - glob "^7.0.3" - minimatch "^3.0.3" + escape-string-regexp "^1.0.5" -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" + flat-cache "^3.0.4" 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-parent-dir@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" + integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.0.0, find-up@^2.1.0: +find-up@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" -first-chunk-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" -flat-cache@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" +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: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" + locate-path "^5.0.0" + path-exists "^4.0.0" -flow-bin@^0.46.0: - version "0.46.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.46.0.tgz#06ad7fe19dddb1042264438064a2a32fee12b872" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + +flush-write-stream@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== dependencies: - for-in "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.3.6" + +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.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" +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.5" + combined-stream "^1.0.6" mime-types "^2.1.12" -fragment-cache@^0.2.0, fragment-cache@^0.2.1: +fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: map-cache "^0.2.2" -fs-access@^1.0.0: +fs-access@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" + integrity sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o= dependencies: null-check "^1.0.0" -fs-extra@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" +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: - graceful-fs "^4.1.2" - jsonfile "^3.0.0" - universalify "^0.1.0" + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" -fs-readdir-recursive@^1.0.0: +fs-mkdirp-stream@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" + resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" + integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= + dependencies: + graceful-fs "^4.1.11" + through2 "^2.0.3" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.29" +fsevents@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.2.1.tgz#1fb02ded2036a8ac288d507a65962bd87b97628d" + integrity sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA== -fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function-bind@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" +generic-names@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-2.0.1.tgz#f8a378ead2ccaa7a34f0317b05554832ae41b872" + integrity sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ== dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" + loader-utils "^1.1.0" -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" +gensync@^1.0.0-beta.1: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + 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-intrinsic@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" + integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== dependencies: - is-property "^1.0.0" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" -get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== -get-comments@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-comments/-/get-comments-1.0.1.tgz#196759101bbbc4facf13060caaedd4870dee55be" +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-pkg-repo@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.3.0.tgz#43c6b4c048b75dd604fc5388edecde557f6335df" + version "1.4.0" + resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" + integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= dependencies: hosted-git-info "^2.1.4" meow "^3.3.0" @@ -2309,148 +2727,161 @@ get-pkg-repo@^1.0.0: parse-github-repo-url "^1.3.0" through2 "^2.0.0" -get-port@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.1.0.tgz#ef01b18a84ca6486970ff99e54446141a73ffd3e" +get-port@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= -get-stdin@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" - -get-stream@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" - dependencies: - object-assign "^4.0.1" - pinkie-promise "^2.0.0" +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= -get-value@^2.0.3, get-value@^2.0.5, get-value@^2.0.6: +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.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + 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" -git-raw-commits@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.2.0.tgz#0f3a8bfd99ae0f2d8b9224d58892975e9a52d03c" +git-raw-commits@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" + integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== dependencies: dargs "^4.0.1" lodash.template "^4.0.2" - meow "^3.3.0" + meow "^4.0.0" split2 "^2.0.0" through2 "^2.0.0" +git-raw-commits@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1" + integrity sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ== + dependencies: + dargs "^7.0.0" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + git-remote-origin-url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= dependencies: gitconfiglocal "^1.0.0" pify "^2.3.0" -git-semver-tags@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-1.2.0.tgz#b31fd02c8ab578bd6c9b5cacca5e1c64c1177ac1" +git-semver-tags@^4.0.0, git-semver-tags@^4.1.0, git-semver-tags@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" + integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== dependencies: - meow "^3.3.0" - semver "^5.0.1" + meow "^8.0.0" + semver "^6.0.0" -git-up@^2.0.0: - version "2.0.8" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-2.0.8.tgz#24be049c9f0b193481d2df4e016a16530a5f4ef4" +git-up@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.2.tgz#10c3d731051b366dc19d3df454bfca3f77913a7c" + integrity sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ== dependencies: is-ssh "^1.3.0" - parse-url "^1.3.0" + parse-url "^5.0.0" -git-url-parse@^6.0.1: - version "6.2.2" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-6.2.2.tgz#be49024e14b8487553436b4572b8b439532fa871" +git-url-parse@^11.1.2: + version "11.4.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.4.0.tgz#f2bb1f2b00f05552540e95a62e31399a639a6aa6" + integrity sha512-KlIa5jvMYLjXMQXkqpFzobsyD/V2K5DRHl5OAf+6oDFPlPLxrGDVQlIdI63c4/Kt6kai4kALENSALlzTGST3GQ== dependencies: - git-up "^2.0.0" + git-up "^4.0.0" gitconfiglocal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= dependencies: ini "^1.3.2" -github-slugger@1.1.3, github-slugger@^1.0.0, github-slugger@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.1.3.tgz#314a6e759a18c2b0cc5760d512ccbab549c549a7" +github-slugger@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.2.0.tgz#8ada3286fd046d8951c3c952a8d7854cfd90fd9a" + integrity sha512-wIaa75k1vZhyPm9yWrD08A5Xnx/V+RmzGrpjQuLemGKSb77Qukiaei58Bogrl/LZSADDfPzKJX8jhLs4CRTl7Q== dependencies: emoji-regex ">=6.0.0 <=6.1.1" -github-url-from-git@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/github-url-from-git/-/github-url-from-git-1.5.0.tgz#f985fedcc0a9aa579dc88d7aff068d55cc6251a0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" +github-slugger@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.3.0.tgz#9bd0a95c5efdfc46005e82a906ef8e2a059124c9" + integrity sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q== dependencies: - is-glob "^2.0.0" + emoji-regex ">=6.0.0 <=6.1.1" -glob-parent@^3.0.0: +glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-stream@^5.3.2: - version "5.3.5" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-5.3.5.tgz#a55665a9a8ccdc41915a87c701e32d4e016fad22" - dependencies: - extend "^3.0.0" - glob "^5.0.3" - glob-parent "^3.0.0" - micromatch "^2.3.7" - ordered-read-streams "^0.3.0" - through2 "^0.6.0" - to-absolute-glob "^0.1.1" - unique-stream "^2.0.2" - -glob@^5.0.3: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" +glob-parent@^5.0.0, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" + is-glob "^4.0.1" -glob@^6.0.1: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" +glob-stream@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" + integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" + extend "^3.0.0" + glob "^7.1.1" + glob-parent "^3.1.0" + is-negated-glob "^1.0.0" + ordered-read-streams "^1.0.0" + pumpify "^1.3.5" + readable-stream "^2.1.5" + remove-trailing-separator "^1.0.1" + to-absolute-glob "^2.0.0" + unique-stream "^2.0.2" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" +glob@^7.0.0, 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" @@ -2459,293 +2890,369 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -globals-docs@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/globals-docs/-/globals-docs-2.3.0.tgz#dca4088af196f7800f4eba783eaeff335cb6759c" +globals-docs@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/globals-docs/-/globals-docs-2.4.1.tgz#d16887709f4a15eb22d97e96343591f87a2ee3db" + integrity sha512-qpPnUKkWnz8NESjrCvnlGklsgiQzlq+rcCxoG5uNQ+dNA7cFMCmn231slLAwS2N/PlkzZ3COL8CcS10jXmLHqg== -globals@^9.0.0, globals@^9.14.0: - version "9.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" +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== -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" + type-fest "^0.8.1" -graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" +globals@^13.6.0: + version "13.7.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.7.0.tgz#aed3bcefd80ad3ec0f0be2cf0c895110c0591795" + integrity sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA== + dependencies: + type-fest "^0.20.2" -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" +graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, 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= -gulp-sourcemaps@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz#b86ff349d801ceb56e1d9e7dc7bbcb4b7dee600c" - dependencies: - convert-source-map "^1.1.1" - graceful-fs "^4.1.2" - strip-bom "^2.0.0" - through2 "^2.0.0" - vinyl "^1.0.0" - -handlebars@^4.0.2, handlebars@^4.0.3: - version "4.0.10" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" +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: - async "^1.4.0" - optimist "^0.6.1" - source-map "^0.4.4" + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" optionalDependencies: - uglify-js "^2.6" - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" - -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" + uglify-js "^3.1.4" -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" +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.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" + ajv "^6.12.3" + har-schema "^2.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= dependencies: ansi-regex "^2.0.0" -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" +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-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" has-values "^0.1.4" isobject "^2.0.0" +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= -has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" +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: - function-bind "^1.0.2" + is-number "^3.0.0" + kind-of "^4.0.0" -hast-util-is-element@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.0.0.tgz#3f7216978b2ae14d98749878782675f33be3ce00" +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" -hast-util-sanitize@^1.0.0: +hash-sum@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" + integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== + +hast-util-is-element@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/hast-util-sanitize/-/hast-util-sanitize-1.1.0.tgz#9b4bc3731043fe92e1253a9a4ca7bcc4148d06f2" + resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz#3b3ed5159a2707c6137b48637fbfe068e175a425" + integrity sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ== + +hast-util-sanitize@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/hast-util-sanitize/-/hast-util-sanitize-3.0.2.tgz#b0b783220af528ba8fe6999f092d138908678520" + integrity sha512-+2I0x2ZCAyiZOO/sb4yNLFmdwPBnyJ4PBkVTUMKMqBwYNA+lXSgOmoRXlJFazoyid9QPogRRKgKhVEodv181sA== dependencies: - has "^1.0.1" - xtend "^4.0.1" + xtend "^4.0.0" -hast-util-to-html@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-3.0.0.tgz#19a257cd7af464777c1cccf4d2d53d33147466c1" +hast-util-to-html@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-7.1.2.tgz#db677f0ee483658cea0eecc9dec30aba42b67111" + integrity sha512-pu73bvORzdF6XZgwl9eID/0RjBb/jtRfoGRRSykpR1+o9rCdiAHpgkSukZsQBRlIqMg6ylAcd7F0F7myJUb09Q== dependencies: ccount "^1.0.0" - comma-separated-tokens "^1.0.1" - has "^1.0.1" + comma-separated-tokens "^1.0.0" hast-util-is-element "^1.0.0" hast-util-whitespace "^1.0.0" html-void-elements "^1.0.0" - kebab-case "^1.0.0" - property-information "^3.1.0" + property-information "^5.0.0" space-separated-tokens "^1.0.0" - stringify-entities "^1.0.1" - unist-util-is "^2.0.0" - xtend "^4.0.1" + stringify-entities "^3.0.1" + unist-util-is "^4.0.0" + xtend "^4.0.0" hast-util-whitespace@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.0.tgz#bd096919625d2936e1ff17bc4df7fd727f17ece9" + version "1.0.4" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz#e4fe77c4a9ae1cb2e6c25e02df0043d0164f6e41" + integrity sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A== -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" +he@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -highlight.js@^9.1.0: - version "9.12.0" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" +highlight.js@^10.7.2: + version "10.7.2" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.2.tgz#89319b861edc66c48854ed1e6da21ea89f847360" + integrity sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg== -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +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== -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" +hosted-git-info@^3.0.6: + version "3.0.7" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.7.tgz#a30727385ea85acfcee94e0aad9e368c792e036c" + integrity sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ== dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" + lru-cache "^6.0.0" -hosted-git-info@^2.1.4: - version "2.4.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" - -html-encoding-sniffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" +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: - whatwg-encoding "^1.0.1" + whatwg-encoding "^1.0.5" + +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== html-void-elements@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.1.tgz#f929bea267a19e3535950502ca12c159f1b559af" + version "1.0.5" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" + integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + +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 "^0.2.0" + assert-plus "^1.0.0" jsprim "^1.2.2" sshpk "^1.7.0" -husky@^0.13.3: - version "0.13.4" - resolved "https://registry.yarnpkg.com/husky/-/husky-0.13.4.tgz#48785c5028de3452a51c48c12c4f94b2124a1407" +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== + +husky@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/husky/-/husky-1.3.1.tgz#26823e399300388ca2afff11cfa8a86b0033fae0" + integrity sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg== + dependencies: + cosmiconfig "^5.0.7" + execa "^1.0.0" + find-up "^3.0.0" + get-stdin "^6.0.0" + is-ci "^2.0.0" + pkg-dir "^3.0.0" + please-upgrade-node "^3.1.1" + read-pkg "^4.0.1" + run-node "^1.0.0" + slash "^2.0.0" + +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" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= + +icss-utils@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= dependencies: - chalk "^1.1.3" - find-parent-dir "^0.3.0" - is-ci "^1.0.9" - normalize-path "^1.0.0" + caller-path "^2.0.0" + resolve-from "^3.0.0" -iconv-lite@0.4.13: - version "0.4.13" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" + integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" -ignore@^3.2.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indent-string@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= dependencies: repeating "^2.0.0" indent-string@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.1.0.tgz#08ff4334603388399b329e6b9538dc7a3cf5de7d" + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -ini@^1.3.2, ini@^1.3.3, ini@~1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" +inherits@2, inherits@^2.0.1, inherits@^2.0.3, 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== -inquirer@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" - dependencies: - ansi-escapes "^1.1.0" - ansi-regex "^2.0.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" - cli-width "^2.0.0" - figures "^1.3.5" - lodash "^4.3.0" - readline2 "^1.0.1" - run-async "^0.1.0" - rx-lite "^3.1.2" - string-width "^1.0.1" - strip-ansi "^3.0.0" - through "^2.3.6" +ini@^1.3.2, ini@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== interpret@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -invariant@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" - dependencies: - loose-envify "^1.0.0" +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= -invert-kv@^1.0.0: +is-absolute@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - -irregular-plurals@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.2.0.tgz#38f299834ba8c00c30be9c554e137269752ff3ac" - -is-absolute@^0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== dependencies: - is-relative "^0.2.1" - is-windows "^0.2.0" + is-relative "^1.0.0" + is-windows "^1.0.1" is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" -is-alphabetical@^1.0.0: +is-accessor-descriptor@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.0.tgz#e2544c13058255f2144cb757066cd3342a1c8c46" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" -is-alphanumeric@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== is-alphanumerical@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.0.tgz#e06492e719c1bf15dec239e4f1af5f67b4d6e7bf" + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== dependencies: is-alphabetical "^1.0.0" is-decimal "^1.0.0" @@ -2753,725 +3260,1005 @@ is-alphanumerical@^1.0.0: is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: - binary-extensions "^1.0.0" + binary-extensions "^2.0.0" -is-buffer@^1.1.4, is-buffer@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" +is-boolean-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" + integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + dependencies: + call-bind "^1.0.0" -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +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: - builtin-modules "^1.0.0" + ci-info "^2.0.0" -is-ci@^1.0.10, is-ci@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" +is-core-module@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.1.0.tgz#a4cc031d9b1aca63eecbd18a650e13cb4eeab946" + integrity sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA== dependencies: - ci-info "^1.0.0" + has "^1.0.3" is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" -is-decimal@^1.0.0: +is-data-descriptor@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.0.tgz#940579b6ea63c628080a69e62bda88c8470b4fe0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== is-descriptor@^0.1.0: - version "0.1.5" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.5.tgz#e3fb8b4ab65f3a37373388e18b401d78c58cbea7" + 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 "^3.0.2" - lazy-cache "^2.0.2" + kind-of "^5.0.0" -is-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.0.tgz#d6ec686f238f6b02f23757abe12cf6b2ea2790f9" +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^3.0.2" - lazy-cache "^2.0.2" + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" +is-docker@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== 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-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: is-extglob "^2.1.0" +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + is-hexadecimal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.0.tgz#5c459771d2af9a2e3952781fd54fcb1bcfe4113c" + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== -is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: - version "2.16.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" +is-negated-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" + integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= -is-number@^2.0.2, is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" +is-number-object@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" -is-obj@^1.0.0: +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-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= -is-odd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-1.0.0.tgz#3b8a932eb028b3775c39bb09e91767accdb69088" - dependencies: - is-number "^3.0.0" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" - dependencies: - is-path-inside "^1.0.0" +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-path-inside@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" +is-observable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" + integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== dependencies: - path-is-inside "^1.0.1" + symbol-observable "^1.1.0" is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= -is-plain-object@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.3.tgz#c15bf3e4b66b62d72efaf2925848663ecbc619b6" - dependencies: - isobject "^3.0.0" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-promise@^2.1.0: +is-plain-obj@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - -is-relative@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" - dependencies: - is-unc-path "^0.1.1" - -is-resolvable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" - dependencies: - tryit "^1.0.1" - -is-ssh@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.0.tgz#ebea1169a2614da392a63740366c3ce049d8dff6" - dependencies: - protocols "^1.1.0" - -is-stream@^1.0.1, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-subset@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-text-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - dependencies: - text-extensions "^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" - -is-unc-path@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" +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: - unc-path-regex "^0.1.0" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -is-valid-glob@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-0.3.0.tgz#d4b55c69f51886f9b65c70d6c2622d37e29f48fe" - -is-whitespace-character@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.0.tgz#bbf4a83764ead0d451bec2a55218e91961adc275" - -is-windows@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" - -is-word-character@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.0.tgz#a3a9e5ddad70c5c2ee36f4a9cfc9a53f44535247" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + isobject "^3.0.1" -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +is-potential-custom-element-name@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0, isobject@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isobject@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.0.tgz#39565217f3661789e8a0a0c080d5f7e6bc46e1a0" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -istanbul-api@^1.1.1: - version "1.1.9" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.9.tgz#2827920d380d4286d857d57a2968a841db8a7ec8" - dependencies: - async "^2.1.4" - fileset "^2.0.2" - istanbul-lib-coverage "^1.1.1" - istanbul-lib-hook "^1.0.7" - istanbul-lib-instrument "^1.7.2" - istanbul-lib-report "^1.1.1" - istanbul-lib-source-maps "^1.2.1" - istanbul-reports "^1.1.1" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - -istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" - -istanbul-lib-hook@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc" - dependencies: - append-transform "^0.4.0" - -istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.2.tgz#6014b03d3470fb77638d5802508c255c06312e56" - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.13.0" - istanbul-lib-coverage "^1.1.1" - semver "^5.3.0" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" + integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= -istanbul-lib-report@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9" - dependencies: - istanbul-lib-coverage "^1.1.1" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" - -istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c" - dependencies: - debug "^2.6.3" - istanbul-lib-coverage "^1.1.1" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-reports@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.1.tgz#042be5c89e175bc3f86523caab29c014e77fee4e" - dependencies: - handlebars "^4.0.3" - -jest-changed-files@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8" +is-promise@^2.1.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== -jest-cli@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93" - dependencies: - ansi-escapes "^1.4.0" - callsites "^2.0.0" - chalk "^1.1.3" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - istanbul-api "^1.1.1" - istanbul-lib-coverage "^1.0.1" - istanbul-lib-instrument "^1.4.2" - istanbul-lib-source-maps "^1.1.0" - jest-changed-files "^20.0.3" - jest-config "^20.0.4" - jest-docblock "^20.0.3" - jest-environment-jsdom "^20.0.3" - jest-haste-map "^20.0.4" - jest-jasmine2 "^20.0.4" - jest-message-util "^20.0.3" - jest-regex-util "^20.0.3" - jest-resolve-dependencies "^20.0.3" - jest-runtime "^20.0.4" - jest-snapshot "^20.0.3" - jest-util "^20.0.3" - micromatch "^2.3.11" - node-notifier "^5.0.2" - pify "^2.3.0" - slash "^1.0.0" - string-length "^1.0.1" - throat "^3.0.0" - which "^1.2.12" - worker-farm "^1.3.1" - yargs "^7.0.2" +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= -jest-config@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea" +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== dependencies: - chalk "^1.1.3" - glob "^7.1.1" - jest-environment-jsdom "^20.0.3" - jest-environment-node "^20.0.3" - jest-jasmine2 "^20.0.4" - jest-matcher-utils "^20.0.3" - jest-regex-util "^20.0.3" - jest-resolve "^20.0.4" - jest-validate "^20.0.3" - pretty-format "^20.0.3" - -jest-diff@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617" + is-unc-path "^1.0.0" + +is-ssh@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.2.tgz#a4b82ab63d73976fd8263cceee27f99a88bdae2b" + integrity sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ== dependencies: - chalk "^1.1.3" - diff "^3.2.0" - jest-matcher-utils "^20.0.3" - pretty-format "^20.0.3" + protocols "^1.1.0" -jest-docblock@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712" +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= -jest-environment-jsdom@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99" - dependencies: - jest-mock "^20.0.3" - jest-util "^20.0.3" - jsdom "^9.12.0" +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== -jest-environment-node@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403" - dependencies: - jest-mock "^20.0.3" - jest-util "^20.0.3" +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== -jest-haste-map@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.4.tgz#653eb55c889ce3c021f7b94693f20a4159badf03" +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - jest-docblock "^20.0.3" - micromatch "^2.3.11" - sane "~1.6.0" - worker-farm "^1.3.1" + text-extensions "^1.0.0" -jest-jasmine2@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1" - dependencies: - chalk "^1.1.3" - graceful-fs "^4.1.11" - jest-diff "^20.0.3" - jest-matcher-utils "^20.0.3" - jest-matchers "^20.0.3" - jest-message-util "^20.0.3" - jest-snapshot "^20.0.3" - once "^1.4.0" - p-map "^1.1.1" +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= -jest-matcher-utils@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612" +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== dependencies: - chalk "^1.1.3" - pretty-format "^20.0.3" + unc-path-regex "^0.1.2" -jest-matchers@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60" - dependencies: - jest-diff "^20.0.3" - jest-matcher-utils "^20.0.3" - jest-message-util "^20.0.3" - jest-regex-util "^20.0.3" +is-utf8@^0.2.0, is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -jest-message-util@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c" +is-valid-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" + integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= + +is-windows@^1.0.1, 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.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: - chalk "^1.1.3" - micromatch "^2.3.11" - slash "^1.0.0" + is-docker "^2.0.0" -jest-mock@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59" +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= -jest-regex-util@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762" +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= -jest-resolve-dependencies@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a" +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: - jest-regex-util "^20.0.3" + isarray "1.0.0" -jest-resolve@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5" - dependencies: - browser-resolve "^1.11.2" - is-builtin-module "^1.0.0" - resolve "^1.3.2" +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= -jest-runtime@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8" - dependencies: - babel-core "^6.0.0" - babel-jest "^20.0.3" - babel-plugin-istanbul "^4.0.0" - chalk "^1.1.3" - convert-source-map "^1.4.0" - graceful-fs "^4.1.11" - jest-config "^20.0.4" - jest-haste-map "^20.0.4" - jest-regex-util "^20.0.3" - jest-resolve "^20.0.4" - jest-util "^20.0.3" - json-stable-stringify "^1.0.1" - micromatch "^2.3.11" - strip-bom "3.0.0" - yargs "^7.0.2" - -jest-snapshot@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566" - dependencies: - chalk "^1.1.3" - jest-diff "^20.0.3" - jest-matcher-utils "^20.0.3" - jest-util "^20.0.3" - natural-compare "^1.4.0" - pretty-format "^20.0.3" +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= -jest-util@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad" - dependencies: - chalk "^1.1.3" - graceful-fs "^4.1.11" - jest-message-util "^20.0.3" - jest-mock "^20.0.3" - jest-validate "^20.0.3" - leven "^2.1.0" - mkdirp "^0.5.1" +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== -jest-validate@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab" +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: - chalk "^1.1.3" - jest-matcher-utils "^20.0.3" - leven "^2.1.0" - pretty-format "^20.0.3" + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" -jest@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac" +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: - jest-cli "^20.0.4" + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" +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: - jsbn "~0.1.0" - -js-tokens@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" -js-yaml@3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" +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.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== + dependencies: + "@jest/types" "^26.6.2" + execa "^4.0.0" + throat "^5.0.0" + +jest-cli@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== + dependencies: + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + 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.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" + prompts "^2.0.1" + yargs "^15.4.1" + +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + micromatch "^4.0.2" + pretty-format "^26.6.2" + +jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +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.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" + +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" + +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +jest-get-type@^22.1.0: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" + integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w== + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== + dependencies: + "@jest/types" "^26.6.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^26.6.2" + is-generator-fn "^2.0.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" + throat "^5.0.0" + +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== + dependencies: + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== + dependencies: + chalk "^4.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + pretty-format "^26.6.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + 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.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== + dependencies: + "@jest/types" "^26.6.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.6.2" + +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.2" + read-pkg-up "^7.0.1" + resolve "^1.18.1" + slash "^3.0.0" + +jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-docblock "^26.0.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + cjs-module-lexer "^0.6.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.4.1" + +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.6.2" + graceful-fs "^4.2.4" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + natural-compare "^1.4.0" + pretty-format "^26.6.2" + semver "^7.3.2" + +jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + +jest-validate@^23.5.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" + integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A== + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^23.6.0" + +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== + dependencies: + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" + leven "^3.1.0" + pretty-format "^26.6.2" + +jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== + dependencies: + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.6.2" + string-length "^4.0.1" + +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@^26.0.0: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" + integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== + dependencies: + "@jest/core" "^26.6.3" + import-local "^3.0.2" + jest-cli "^26.6.3" + +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.4.3, js-yaml@^3.5.1, js-yaml@^3.7.0, js-yaml@^3.8.4: - version "3.8.4" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" +js-yaml@^3.10.0, 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 "^3.1.1" + 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.4.0: + version "16.4.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" + integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== + 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.1.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== -jsdom@^9.12.0: - version "9.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" - dependencies: - abab "^1.0.3" - acorn "^4.0.4" - acorn-globals "^3.1.0" - array-equal "^1.0.0" - content-type-parser "^1.0.1" - cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.2.37 < 0.3.0" - escodegen "^1.6.1" - html-encoding-sniffer "^1.0.1" - nwmatcher ">= 1.3.9 < 2.0.0" - parse5 "^1.5.1" - request "^2.79.0" - sax "^1.2.1" - symbol-tree "^3.2.1" - tough-cookie "^2.3.2" - webidl-conversions "^4.0.0" - whatwg-encoding "^1.0.1" - whatwg-url "^4.3.0" - xml-name-validator "^2.0.1" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" +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-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 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-schema@^0.2.3: + version "0.2.5" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.5.tgz#97997f50972dd0500214e208c407efa4b5d7063b" + integrity sha512-gWJOWYFrhQ8j7pVm0EM8Slr+EPVq1Phf6lvzvD/WCeqkrx/f2xBI0xOsRRS9xCn3I4vKtP519dvs3TP09r24wQ== -json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: +json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= json-stringify-safe@^5.0.1, 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@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" +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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.0.tgz#92e7c7444e5ffd5fa32e6a9ae8b85034df8347d0" +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= jsprim@^1.2.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" + 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.0.2" + extsprintf "1.3.0" json-schema "0.2.3" - verror "1.3.6" - -kebab-case@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/kebab-case/-/kebab-case-1.0.0.tgz#3f9e4990adcad0c686c0e701f7645868f75f91eb" + 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" -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" +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== -lazy-cache@^2.0.1, lazy-cache@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: + 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== + +konan@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/konan/-/konan-2.1.1.tgz#eea88f05c56249b78903b952b953393900346dd1" + integrity sha512-7ZhYV84UzJ0PR/RJnnsMZcAbn+kLasJhVNWsu8ZyVEJYRpGA5XESQ9d/7zOa08U0Ou4cmB++hMNY/3OSV9KIbg== dependencies: - set-getter "^0.1.0" + "@babel/parser" "^7.10.5" + "@babel/traverse" "^7.10.5" lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= dependencies: readable-stream "^2.0.5" -lcid@^1.0.0: +lead@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" + integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= dependencies: - invert-kv "^1.0.0" - -lcov-parse@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" + flush-write-stream "^1.0.2" leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= + +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.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" -levn@^0.3.0, levn@~0.3.0: +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" -lint-staged@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-3.6.0.tgz#cda8f0bef16e7928cc14b735186ae12cd662599c" - dependencies: - app-root-path "^2.0.0" - cosmiconfig "^1.1.0" - execa "^0.6.0" - listr "^0.12.0" - lodash.chunk "^4.2.0" - minimatch "^3.0.0" +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= + +lint-staged@^7.2.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-7.3.0.tgz#90ff33e5ca61ed3dbac35b6f6502dbefdc0db58d" + integrity sha512-AXk40M9DAiPi7f4tdJggwuKIViUplYtVj1os1MVEteW7qOkU50EOehayCfO9TsoGK24o/EsWb41yrEgfJDDjCw== + dependencies: + chalk "^2.3.1" + commander "^2.14.1" + cosmiconfig "^5.0.2" + debug "^3.1.0" + dedent "^0.7.0" + execa "^0.9.0" + find-parent-dir "^0.3.0" + is-glob "^4.0.0" + is-windows "^1.0.2" + jest-validate "^23.5.0" + listr "^0.14.1" + lodash "^4.17.5" + log-symbols "^2.2.0" + micromatch "^3.1.8" npm-which "^3.0.1" p-map "^1.1.1" - staged-git-files "0.0.4" + path-is-inside "^1.0.2" + pify "^3.0.0" + please-upgrade-node "^3.0.2" + staged-git-files "1.1.1" + string-argv "^0.0.2" + stringify-object "^3.2.2" listr-silent-renderer@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= -listr-update-renderer@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9" +listr-update-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" + integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== dependencies: chalk "^1.1.3" cli-truncate "^0.2.1" @@ -3479,46 +4266,43 @@ listr-update-renderer@^0.2.0: figures "^1.7.0" indent-string "^3.0.0" log-symbols "^1.0.2" - log-update "^1.0.2" + log-update "^2.3.0" strip-ansi "^3.0.1" -listr-verbose-renderer@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.0.tgz#44dc01bb0c34a03c572154d4d08cde9b1dc5620f" +listr-verbose-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" + integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== dependencies: - chalk "^1.1.3" - cli-cursor "^1.0.2" + chalk "^2.4.1" + cli-cursor "^2.1.0" date-fns "^1.27.2" - figures "^1.7.0" + figures "^2.0.0" -listr@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.12.0.tgz#6bce2c0f5603fa49580ea17cd6a00cc0e5fa451a" +listr@^0.14.1: + version "0.14.3" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" + integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - figures "^1.7.0" - indent-string "^2.1.0" + "@samverschueren/stream-to-observable" "^0.3.0" + is-observable "^1.1.0" is-promise "^2.1.0" is-stream "^1.1.0" listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.2.0" - listr-verbose-renderer "^0.4.0" - log-symbols "^1.0.2" - log-update "^1.0.2" - ora "^0.2.3" - p-map "^1.1.1" - rxjs "^5.0.0-beta.11" - stream-to-observable "^0.1.0" - strip-ansi "^3.0.1" + listr-update-renderer "^0.5.0" + listr-verbose-renderer "^0.5.0" + p-map "^2.0.0" + rxjs "^6.3.3" -livereload-js@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.2.2.tgz#6c87257e648ab475bc24ea257457edcc1f8d0bc2" +livereload-js@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz#447c31cf1ea9ab52fc20db615c5ddf678f78009c" + integrity sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw== load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -3526,187 +4310,372 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= dependencies: graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" + parse-json "^4.0.0" + pify "^3.0.0" strip-bom "^3.0.0" +loader-utils@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" path-exists "^3.0.0" -lodash._reinterpolate@~3.0.0: +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= -lodash.chunk@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= -lodash.isequal@^4.0.0: +lodash.clonedeep@^4.5.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= lodash.map@^4.5.1: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= + +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.template@^4.0.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== dependencies: - lodash._reinterpolate "~3.0.0" + lodash._reinterpolate "^3.0.0" lodash.templatesettings "^4.0.0" lodash.templatesettings@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== dependencies: - lodash._reinterpolate "~3.0.0" + lodash._reinterpolate "^3.0.0" -lodash@^4.0.0, lodash@^4.11.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= -log-driver@1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" +lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.5: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= dependencies: chalk "^1.0.0" -log-update@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" +log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== dependencies: - ansi-escapes "^1.0.0" - cli-cursor "^1.0.2" + chalk "^2.0.1" -longest-streak@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.1.tgz#42d291b5411e40365c00e63193497e2247316e35" +log-update@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" + +longest-streak@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" + integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -loose-envify@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" - dependencies: - js-tokens "^3.0.0" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= dependencies: currently-unhandled "^0.4.1" signal-exit "^3.0.0" lru-cache@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.25.7: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +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: - pseudomap "^1.0.1" - yallist "^2.0.0" + semver "^6.0.0" 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.0, 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-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= -map-visit@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-0.1.5.tgz#dbe43927ce5525b80dfc1573a44d68c51f26816b" - dependencies: - lazy-cache "^2.0.1" - object-visit "^0.3.4" +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= + +map-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" + integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g== -markdown-escapes@^1.0.0: +map-visit@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.0.tgz#c8ca19f1d94d682459e0a93c86db27a7ef716b23" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" -markdown-table@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.0.tgz#1f5ae61659ced8808d882554c32e8b3f38dd1143" +markdown-table@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" + integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== + dependencies: + repeat-string "^1.0.0" -mdast-util-compact@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.0.tgz#4c94dedfe35932d5457f29b650b330fdc73e994a" +mdast-util-definitions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" + integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== dependencies: - unist-util-modify-children "^1.0.0" - unist-util-visit "^1.1.0" + unist-util-visit "^2.0.0" -mdast-util-definitions@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-1.2.0.tgz#00f67b4289ed36bafc0977b558414ac0c5023b24" +mdast-util-find-and-replace@^1.1.0, mdast-util-find-and-replace@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz#b7db1e873f96f66588c321f1363069abf607d1b5" + integrity sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA== + dependencies: + escape-string-regexp "^4.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +mdast-util-from-markdown@^0.8.0: + version "0.8.5" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" + integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-string "^2.0.0" + micromark "~2.11.0" + parse-entities "^2.0.0" + unist-util-stringify-position "^2.0.0" + +mdast-util-gfm-autolink-literal@^0.1.0: + version "0.1.3" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz#9c4ff399c5ddd2ece40bd3b13e5447d84e385fb7" + integrity sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A== + dependencies: + ccount "^1.0.0" + mdast-util-find-and-replace "^1.1.0" + micromark "^2.11.3" + +mdast-util-gfm-strikethrough@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz#45eea337b7fff0755a291844fbea79996c322890" + integrity sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA== + dependencies: + mdast-util-to-markdown "^0.6.0" + +mdast-util-gfm-table@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz#af05aeadc8e5ee004eeddfb324b2ad8c029b6ecf" + integrity sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ== + dependencies: + markdown-table "^2.0.0" + mdast-util-to-markdown "~0.6.0" + +mdast-util-gfm-task-list-item@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz#70c885e6b9f543ddd7e6b41f9703ee55b084af10" + integrity sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A== + dependencies: + mdast-util-to-markdown "~0.6.0" + +mdast-util-gfm@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz#8ecddafe57d266540f6881f5c57ff19725bd351c" + integrity sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ== dependencies: - has "^1.0.1" - unist-util-visit "^1.0.0" + mdast-util-gfm-autolink-literal "^0.1.0" + mdast-util-gfm-strikethrough "^0.2.0" + mdast-util-gfm-table "^0.1.0" + mdast-util-gfm-task-list-item "^0.1.0" + mdast-util-to-markdown "^0.6.1" mdast-util-inject@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mdast-util-inject/-/mdast-util-inject-1.1.0.tgz#db06b8b585be959a2dcd2f87f472ba9b756f3675" + integrity sha1-2wa4tYW+lZotzS+H9HK6m3VvNnU= dependencies: mdast-util-to-string "^1.0.0" -mdast-util-to-hast@^2.1.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-2.4.0.tgz#63ce8e43c61d8e5728954a3515e0c936a3b26cea" - dependencies: - collapse-white-space "^1.0.0" - detab "^2.0.0" - has "^1.0.1" - mdast-util-definitions "^1.2.0" - normalize-uri "^1.0.0" - trim "0.0.1" - trim-lines "^1.0.0" - unist-builder "^1.0.1" - unist-util-generated "^1.1.0" +mdast-util-to-hast@^10.0.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz#61875526a017d8857b71abc9333942700b2d3604" + integrity sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + mdast-util-definitions "^4.0.0" + mdurl "^1.0.0" + unist-builder "^2.0.0" + unist-util-generated "^1.0.0" unist-util-position "^3.0.0" - unist-util-visit "^1.1.0" - xtend "^4.0.1" - -mdast-util-to-string@^1.0.0, mdast-util-to-string@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.0.2.tgz#dc996a24d2b521178d3fac3993680c03a683e1dd" + unist-util-visit "^2.0.0" -mdast-util-toc@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-2.0.1.tgz#b1d2cb23bfb01f812fa7b55bffe8b0a8bedf6f21" +mdast-util-to-markdown@^0.6.0, mdast-util-to-markdown@^0.6.1, mdast-util-to-markdown@~0.6.0: + version "0.6.5" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe" + integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ== dependencies: - github-slugger "^1.1.1" - mdast-util-to-string "^1.0.2" - unist-util-visit "^1.1.0" + "@types/unist" "^2.0.0" + longest-streak "^2.0.0" + mdast-util-to-string "^2.0.0" + parse-entities "^2.0.0" + repeat-string "^1.0.0" + zwitch "^1.0.0" -mem@^1.1.0: +mdast-util-to-string@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - dependencies: - mimic-fn "^1.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" + integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + +mdast-util-toc@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-5.1.0.tgz#3af0f9c9a764b993538af03f1f79f4e3cec22736" + integrity sha512-csimbRIVkiqc+PpFeKDGQ/Ck2N4f9FYH3zzBMMJzcxoKL8m+cM0n94xXm0I9eaxHnKdY9n145SGTdyJC7i273g== + dependencies: + "@types/mdast" "^3.0.3" + "@types/unist" "^2.0.3" + extend "^3.0.2" + github-slugger "^1.2.1" + mdast-util-to-string "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit "^2.0.0" + +mdurl@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= meow@^3.3.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= dependencies: camelcase-keys "^2.0.0" decamelize "^1.1.2" @@ -3719,153 +4688,276 @@ meow@^3.3.0: redent "^1.0.0" trim-newlines "^1.0.0" -merge-stream@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" +meow@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" + integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist "^1.1.3" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + +meow@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-7.1.1.tgz#7c01595e3d337fcb0ec4e8eed1666ea95903d306" + integrity sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^2.5.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.13.1" + yargs-parser "^18.1.3" + +meow@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.0.0.tgz#1aa10ee61046719e334ffdc038bb5069250ec99a" + integrity sha512-nbsTRz2fwniJBFgUkcdISq8y/q9n9VbiHYbfwklFh5V4V2uAcxtKQkDc0yCLPM/kP0d+inZBewn3zJqewHE7kg== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== + dependencies: + source-map "^0.6.1" + +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== + +micromark-extension-gfm-autolink-literal@~0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz#53866c1f0c7ef940ae7ca1f72c6faef8fed9f204" + integrity sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw== + dependencies: + micromark "~2.11.3" + +micromark-extension-gfm-strikethrough@~0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz#96cb83356ff87bf31670eefb7ad7bba73e6514d1" + integrity sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw== + dependencies: + micromark "~2.11.0" + +micromark-extension-gfm-table@~0.4.0: + version "0.4.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz#4d49f1ce0ca84996c853880b9446698947f1802b" + integrity sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA== + dependencies: + micromark "~2.11.0" + +micromark-extension-gfm-tagfilter@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz#d9f26a65adee984c9ccdd7e182220493562841ad" + integrity sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q== + +micromark-extension-gfm-task-list-item@~0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz#d90c755f2533ed55a718129cee11257f136283b8" + integrity sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ== dependencies: - readable-stream "^2.0.1" + micromark "~2.11.0" -merge@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" - -micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" +micromark-extension-gfm@^0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz#36d1a4c089ca8bdfd978c9bd2bf1a0cb24e2acfe" + integrity sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A== + dependencies: + micromark "~2.11.0" + micromark-extension-gfm-autolink-literal "~0.5.0" + micromark-extension-gfm-strikethrough "~0.6.5" + micromark-extension-gfm-table "~0.4.0" + micromark-extension-gfm-tagfilter "~0.3.0" + micromark-extension-gfm-task-list-item "~0.3.0" -micromatch@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.0.3.tgz#af3339640157ddad39b81a09956d8877cc4b421a" +micromark@^2.11.3, micromark@~2.11.0, micromark@~2.11.3: + version "2.11.4" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" + integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== + dependencies: + debug "^4.0.0" + parse-entities "^2.0.0" + +micromatch@^3.1.4, micromatch@^3.1.5, micromatch@^3.1.8: + 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.2.2" - define-property "^1.0.0" - extend-shallow "^2.0.1" - extglob "^1.1.0" + 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 "^4.0.0" - nanomatch "^1.2.0" - object.pick "^1.2.0" + 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.1" + to-regex "^3.0.2" -mime-db@~1.27.0: - version "1.27.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" -mime-types@^2.1.12, mime-types@~2.1.7: - version "2.1.15" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" +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.27.0" + mime-db "1.44.0" -mime@^1.3.4: - version "1.3.6" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" +mime@^2.2.0: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== mimic-fn@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist@0.0.8, minimist@~0.0.1: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" -mixin-deep@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.2.0.tgz#d02b8c6f8b6d4b8f5982d3fd009c4919851c3fe2" +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== dependencies: - for-in "^1.0.2" - is-extendable "^0.1.1" + arrify "^1.0.1" + is-plain-obj "^1.1.0" + +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, 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== -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" +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: - minimist "0.0.8" + for-in "^1.0.2" + is-extendable "^1.0.1" -mock-fs@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.3.0.tgz#c2fab8d784283287e9b6ae7538f2dc56c1a05ed7" +mock-fs@^4.4.2: + version "4.13.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.13.0.tgz#31c02263673ec3789f90eb7b6963676aa407a598" + integrity sha512-DD0vOdofJdoaRNtnWcrXe6RQbpHkPPmtqGq14uRX0F8ZKJ5nv89CVTYl/BZdppDxBDaV0hl75htg3abpEWlPZA== modify-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.0.tgz#e2b6cdeb9ce19f99317a53722f3dbf5df5eaaab2" + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -module-deps-sortable@4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/module-deps-sortable/-/module-deps-sortable-4.0.6.tgz#1251a4ba2c44a92df6989bd029da121a4f2109b0" +module-deps-sortable@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/module-deps-sortable/-/module-deps-sortable-5.0.3.tgz#e640e7450e0869f4ae8e03437665ca2a8a28f843" + integrity sha512-eiyIZj/A0dj1o4ywXWqicazUL3l0HP3TydUR6xF0X3xh3LGBMLqW8a9aFe6MuNH4mxNMk53QKBHM6LOPR8kSgw== dependencies: JSONStream "^1.0.3" browser-resolve "^1.7.0" + cached-path-relative "^1.0.0" concat-stream "~1.5.0" defined "^1.0.0" - detective "^4.0.0" + detective "^5.2.0" duplexer2 "^0.1.2" inherits "^2.0.1" - parents "^1.0.0" + konan "^2.1.1" readable-stream "^2.0.2" resolve "^1.1.3" + standard-version "^9.0.0" stream-combiner2 "^1.1.1" subarg "^1.0.0" through2 "^2.0.0" xtend "^4.0.0" -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -mute-stream@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" +ms@2.1.2, 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== -nan@^2.3.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" +nanoid@^3.1.22: + version "3.1.22" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" + integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ== -nanomatch@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.0.tgz#76fdb3d4ae7617e37719e7a4047b840857c0cb1c" +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 "^1.0.0" - extend-shallow "^2.0.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" fragment-cache "^0.2.1" - is-extglob "^2.1.1" - is-odd "^1.0.0" - kind-of "^4.0.0" - object.pick "^1.2.0" + 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" @@ -3873,561 +4965,859 @@ nanomatch@^1.2.0: 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.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-notifier@^5.0.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" +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@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.0.tgz#a7eee2d51da6d0f7ff5094bc7108c911240c1620" + integrity sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA== dependencies: growly "^1.3.0" - semver "^5.3.0" - shellwords "^0.1.0" - which "^1.2.12" - -node-pre-gyp@^0.6.29: - version "0.6.36" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786" - dependencies: - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.0.2" - rc "^1.1.7" - request "^2.81.0" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" + is-wsl "^2.2.0" + semver "^7.3.2" + shellwords "^0.1.1" + uuid "^8.3.0" + which "^2.0.2" -normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5: - version "2.3.8" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" +normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, 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" - is-builtin-module "^1.0.0" + resolve "^1.10.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" +normalize-package-data@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.0.tgz#1f8a7c423b3d2e85eb36985eaf81de381d01301a" + integrity sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw== + dependencies: + hosted-git-info "^3.0.6" + resolve "^1.17.0" + semver "^7.3.2" + validate-npm-package-license "^3.0.1" -normalize-path@^2.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-uri@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/normalize-uri/-/normalize-uri-1.1.0.tgz#01fb440c7fd059b9d9be8645aac14341efd059dd" +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +now-and-later@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" + integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== + dependencies: + once "^1.3.2" npm-path@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.3.tgz#15cff4e1c89a38da77f56f6055b24f975dfb2bbe" + version "2.0.4" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== dependencies: which "^1.2.10" 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" + npm-which@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo= dependencies: commander "^2.9.0" npm-path "^2.0.2" which "^1.2.10" -npmlog@^4.0.2: - version "4.1.0" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.0.tgz#dc59bee85f64f00ed424efb2af0783df25d1c0b5" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - null-check@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" + integrity sha1-l33/1xdgErnsMNKjnbXPcqBDnt0= number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -"nwmatcher@>= 1.3.9 < 2.0.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.0.tgz#b4389362170e7ef9798c3c7716d80ebc0106fccf" +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.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" -object-visit@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-0.3.4.tgz#ae15cf86f0b2fdd551771636448452c54c3da829" +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: - isobject "^2.0.0" + isobject "^3.0.0" -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" +object.assign@^4.0.4: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" -object.pick@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.2.0.tgz#b5392bee9782da6d9fb7d6afaf539779f1234c2b" +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 "^2.1.0" + isobject "^3.0.1" -once@^1.3.0, once@^1.3.3, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.3.2, 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" -once@~1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= dependencies: - wrappy "1" - -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + mimic-fn "^1.0.0" -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" + mimic-fn "^2.1.0" -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" +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.4" + fast-levenshtein "~2.0.6" levn "~0.3.0" prelude-ls "~1.1.2" type-check "~0.3.2" - wordwrap "~1.0.0" + word-wrap "~1.2.3" -ora@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: - chalk "^1.1.1" - cli-cursor "^1.0.2" - cli-spinners "^0.1.2" - object-assign "^4.0.1" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" -ordered-read-streams@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz#7137e69b3298bb342247a1bbee3881c80e2fd78b" +ordered-read-streams@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" + integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= dependencies: - is-stream "^1.0.1" readable-stream "^2.0.1" -os-homedir@^1.0.0, os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - dependencies: - lcid "^1.0.0" +p-each-series@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" + integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== -os-locale@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.0.0.tgz#15918ded510522b81ee7ae5a309d54f639fc39a4" +p-event@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" + integrity sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== dependencies: - execa "^0.5.0" - lcid "^1.0.0" - mem "^1.1.0" + p-timeout "^3.1.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" +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= -osenv@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" + p-try "^1.0.0" -output-file-sync@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" +p-limit@^2.0.0, 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: - graceful-fs "^4.1.4" - mkdirp "^0.5.1" - object-assign "^4.1.0" + p-try "^2.0.0" -p-event@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-event/-/p-event-1.2.0.tgz#837cfbeb652e497922f22162fb1f4c8487e27173" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: - p-timeout "^1.1.1" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - -p-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + yocto-queue "^0.1.0" p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-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-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-map@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== -p-timeout@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.1.1.tgz#d28e9fdf96e328886fbff078f886ad158c53bf6d" +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== -pad-right@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/pad-right/-/pad-right-0.2.2.tgz#6fbc924045d244f2a2a244503060d3bfc6009774" +p-timeout@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== dependencies: - repeat-string "^1.5.2" + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= -parents@^1.0.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== + +parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: - path-platform "~0.11.15" + callsites "^3.0.0" -parse-entities@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.1.0.tgz#4bc58f35fdc8e65dded35a12f2e40223ca24a3f7" +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== dependencies: character-entities "^1.0.0" character-entities-legacy "^1.0.0" character-reference-invalid "^1.0.0" - has "^1.0.1" is-alphanumerical "^1.0.0" is-decimal "^1.0.0" is-hexadecimal "^1.0.0" -parse-filepath@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.1.tgz#159d6155d43904d16c10ef698911da1e91969b73" +parse-filepath@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" + integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= dependencies: - is-absolute "^0.2.3" + is-absolute "^1.0.0" map-cache "^0.2.0" path-root "^0.1.1" -parse-git-config@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/parse-git-config/-/parse-git-config-0.2.0.tgz#272833fdd15fea146fb75d336d236b963b6ff706" - dependencies: - ini "^1.3.3" - parse-github-repo-url@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.0.tgz#286c53e2c9962e0641649ee3ac9508fca4dd959c" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" + version "1.4.1" + resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" + integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= dependencies: error-ex "^1.2.0" -parse-url@^1.3.0: - version "1.3.7" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-1.3.7.tgz#636cb6e32b88255c704e30ab4349676703267af8" +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" + integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-path@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.2.tgz#ef14f0d3d77bae8dd4bc66563a4c151aac9e65aa" + integrity sha512-HSqVz6iuXSiL8C1ku5Gl1Z5cwDd9Wo0q8CoffdAghP6bz8pJa1tcMC+m4N+z6VAS8QdksnIGq1TB6EgR4vPR6w== dependencies: is-ssh "^1.3.0" protocols "^1.4.0" -parse5@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" +parse-url@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.2.tgz#856a3be1fcdf78dc93fc8b3791f169072d898b59" + integrity sha512-Czj+GIit4cdWtxo3ISZCvLiUjErSo0iI3wJ+q9Oi3QuMYTI6OZu+7cewMWZ+C1YAnKhYTk6/TLuhIgCypLthPA== + dependencies: + is-ssh "^1.3.0" + normalize-url "^3.3.0" + parse-path "^4.0.0" + protocols "^1.4.0" + +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-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= dependencies: pinkie-promise "^2.0.0" path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-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-is-inside@^1.0.1: +path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= -path-key@^2.0.0: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" +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-platform@~0.11.15: - version "0.11.15" - resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== path-root-regex@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= path-root@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= dependencies: path-root-regex "^0.1.0" path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= dependencies: graceful-fs "^4.1.2" pify "^2.0.0" pinkie-promise "^2.0.0" -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: - pify "^2.0.0" + pify "^3.0.0" -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" +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, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= -plur@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a" +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: - irregular-plurals "^1.0.0" + node-modules-regexp "^1.0.0" -pluralize@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.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" + +please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== + dependencies: + semver-compare "^1.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= + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-modules@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-4.0.0.tgz#2bc7f276ab88f3f1b0fadf6cbd7772d43b5f3b9b" + integrity sha512-ghS/ovDzDqARm4Zj6L2ntadjyQMoyJmi0JkLlYtH2QFLrvNlxH5OAVRPWPeKilB0pY7SbuhO173KOWkPAxRJcw== + dependencies: + generic-names "^2.0.1" + icss-replace-symbols "^1.1.0" + lodash.camelcase "^4.3.0" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + string-hash "^1.1.1" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: + version "6.0.5" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.5.tgz#042d74e137db83e6f294712096cb413f5aa612c4" + integrity sha512-aFYPoYmXbZ1V6HZaSvat08M97A8HqO6Pjz+PiNpw/DhuRrC72XWAdp3hL6wusDCN31sSmcZyMGa2hZEuX+Xfhg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss@^8.1.10: + version "8.2.10" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.10.tgz#ca7a042aa8aff494b334d0ff3e9e77079f6f702b" + integrity sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw== + dependencies: + colorette "^1.2.2" + nanoid "^3.1.22" + source-map "^0.6.1" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 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= -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" +prettier@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== -prettier@^1.0.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.4.2.tgz#bcdd95ed1eca434ac7f98ca26ea4d25a2af6a2ac" +pretty-format@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" + integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" -pretty-format@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14" +pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== dependencies: - ansi-regex "^2.1.1" - ansi-styles "^3.0.0" + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" -private@^0.1.6: - version "0.1.7" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" +process-nextick-args@^2.0.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== -process-nextick-args@^1.0.6, process-nextick-args@~1.0.6: +process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= -progress@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -property-information@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-3.1.0.tgz#1581bf8a445dfbfef759775a86700e8dda18b4a1" +prompts@^2.0.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" + integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" -protocols@^1.1.0, protocols@^1.4.0: - version "1.4.5" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.5.tgz#21de1f441c4ef7094408ed9f1c94f7a114b87557" +property-information@^5.0.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== + dependencies: + xtend "^4.0.0" -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" +protocols@^1.1.0, protocols@^1.4.0: + version "1.4.8" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" + integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== -pseudomap@^1.0.1: +pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -q@^1.4.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" +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== -qs@^6.4.0, qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" -qs@~6.3.0: - version "6.3.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" +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" -randomatic@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" +pumpify@^1.3.5: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +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== + +q@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@^6.4.0: + version "6.9.4" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" + integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== + +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== + +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== raw-body@~1.1.0: version "1.1.7" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425" + integrity sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU= dependencies: bytes "1" string_decoder "0.10" -rc@^1.1.7: - version "1.2.1" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - +react-is@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" + integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== + read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= dependencies: find-up "^1.0.0" read-pkg "^1.0.0" -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= dependencies: find-up "^2.0.0" - read-pkg "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== + dependencies: + find-up "^3.0.0" + read-pkg "^3.0.0" + +read-pkg-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@^1.0.0, read-pkg@^1.1.0: +read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= dependencies: load-json-file "^1.0.0" normalize-package-data "^2.3.2" path-type "^1.0.0" -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= dependencies: - load-json-file "^2.0.0" + load-json-file "^4.0.0" normalize-package-data "^2.3.2" - path-type "^2.0.0" + path-type "^3.0.0" -"readable-stream@>=1.0.33-1 <1.1.0-0": - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" +read-pkg@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" + integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" + normalize-package-data "^2.3.2" + parse-json "^4.0.0" + pify "^3.0.0" -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2: - version "2.2.10" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.10.tgz#effe72bb7c884c0dd335e2379d526196d9d011ee" +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@3, readable-stream@^3.0.0, readable-stream@^3.0.2: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, 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.1" + inherits "~2.0.3" isarray "~1.0.0" - process-nextick-args "~1.0.6" - safe-buffer "^5.0.1" - string_decoder "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" util-deprecate "~1.0.1" readable-stream@~2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + integrity sha1-j5A0HmilPMySh4jaz80Rs265t44= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -4439,6 +5829,7 @@ readable-stream@~2.0.0: readable-stream@~2.1.0: version "2.1.5" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" + integrity sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA= dependencies: buffer-shims "^1.0.0" core-util-is "~1.0.0" @@ -4448,421 +5839,483 @@ readable-stream@~2.1.0: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" - -readline2@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - mute-stream "0.0.5" + picomatch "^2.2.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" redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= dependencies: indent-string "^2.1.0" strip-indent "^1.0.1" -regenerate@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" - -regenerator-runtime@^0.10.0: - version "0.10.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" -regenerator-transform@0.9.11: - version "0.9.11" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283" +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" + indent-string "^4.0.0" + strip-indent "^3.0.0" -regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" +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: - is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" + extend-shallow "^3.0.2" + safe-regex "^1.1.0" -regex-not@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-0.1.2.tgz#bc7f1c4944b1188353d07deeb912b94e0ade25db" +regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== -regex-not@^1.0.0: +remark-gfm@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.0.tgz#42f83e39771622df826b02af176525d6a5f157f9" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-1.0.0.tgz#9213643001be3f277da6256464d56fd28c3b3c0d" + integrity sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA== dependencies: - extend-shallow "^2.0.1" + mdast-util-gfm "^0.1.0" + micromark-extension-gfm "^0.3.0" -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" +remark-html@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/remark-html/-/remark-html-13.0.1.tgz#d5b2d8be01203e61fc37403167ca7584879ad675" + integrity sha512-K5KQCXWVz+harnyC+UVM/J9eJWCgjYRqFeZoZf2NgP0iFbuuw/RgMZv3MA34b/OEpGnstl3oiOUtZzD3tJ+CBw== dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + hast-util-sanitize "^3.0.0" + hast-util-to-html "^7.0.0" + mdast-util-to-hast "^10.0.0" -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" +remark-parse@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640" + integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw== dependencies: - jsesc "~0.5.0" + mdast-util-from-markdown "^0.8.0" -remark-html@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/remark-html/-/remark-html-6.0.0.tgz#ade7d94b60e452158f28615218450682601dbfc1" +remark-reference-links@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/remark-reference-links/-/remark-reference-links-5.0.0.tgz#2c75b60a99c53251f25193566953b0c71e096b8d" + integrity sha512-oSIo6lfDyG/1yYl2jPZNXmD9dgyPxp07mSd7snJagVMsDU6NRlD8i54MwHWUgMoOHTs8lIKPkwaUok/tbr5syQ== dependencies: - hast-util-sanitize "^1.0.0" - hast-util-to-html "^3.0.0" - mdast-util-to-hast "^2.1.1" - xtend "^4.0.1" + unist-util-visit "^2.0.0" -remark-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-3.0.1.tgz#1b9f841a44d8f4fbf2246850265459a4eb354c80" - dependencies: - collapse-white-space "^1.0.2" - has "^1.0.1" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^1.0.2" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^1.0.0" - vfile-location "^2.0.0" - xtend "^4.0.1" - -remark-slug@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/remark-slug/-/remark-slug-4.2.2.tgz#3cfaa02e2e24d98405b296072f2ebbdfad279eb6" +remark-stringify@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-9.0.1.tgz#576d06e910548b0a7191a71f27b33f1218862894" + integrity sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg== dependencies: - github-slugger "^1.0.0" - mdast-util-to-string "^1.0.0" - unist-util-visit "^1.0.0" + mdast-util-to-markdown "^0.6.0" -remark-stringify@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-3.0.1.tgz#79242bebe0a752081b5809516fa0c06edec069cf" +remark-toc@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/remark-toc/-/remark-toc-7.2.0.tgz#1c5159e9091826150db14c97ac00c2ad5a7f1523" + integrity sha512-ppHepvpbg7j5kPFmU5rzDC4k2GTcPDvWcxXyr/7BZzO1cBSPk0stKtEJdsgAyw2WHKPGxadcHIZRjb2/sHxjkg== dependencies: - ccount "^1.0.0" - is-alphanumeric "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - longest-streak "^2.0.1" - markdown-escapes "^1.0.0" - markdown-table "^1.1.0" - mdast-util-compact "^1.0.0" - parse-entities "^1.0.2" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - stringify-entities "^1.0.1" - unherit "^1.0.4" - xtend "^4.0.1" - -remark-toc@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/remark-toc/-/remark-toc-4.0.0.tgz#1e99867a1bee1caebb8fa1d9f5f7605fdf7d8c56" + "@types/unist" "^2.0.3" + mdast-util-toc "^5.0.0" + +remark@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/remark/-/remark-13.0.0.tgz#d15d9bf71a402f40287ebe36067b66d54868e425" + integrity sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA== dependencies: - mdast-util-toc "^2.0.0" - remark-slug "^4.0.0" + remark-parse "^9.0.0" + remark-stringify "^9.0.0" + unified "^9.1.0" -remark@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/remark/-/remark-7.0.1.tgz#a5de4dacfabf0f60a49826ef24c479807f904bfb" +remove-bom-buffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" + integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== dependencies: - remark-parse "^3.0.0" - remark-stringify "^3.0.0" - unified "^6.0.0" + is-buffer "^1.1.5" + is-utf8 "^0.2.1" -remote-origin-url@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/remote-origin-url/-/remote-origin-url-0.4.0.tgz#4d3e2902f34e2d37d1c263d87710b77eb4086a30" +remove-bom-stream@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" + integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= dependencies: - parse-git-config "^0.2.0" + remove-bom-buffer "^3.0.0" + safe-buffer "^5.1.0" + through2 "^2.0.3" remove-trailing-separator@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" + 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.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + 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.5.0, repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: +repeat-string@^1.0.0, repeat-string@^1.5.0, 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= repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= dependencies: is-finite "^1.0.0" -replace-ext@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" - -replace-ext@1.0.0, replace-ext@^1.0.0: +replace-ext@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= -request@2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" +replace-ext@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" + integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== + +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - uuid "^3.0.0" - -request@^2.79.0, request@^2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" + lodash "^4.17.19" + +request-promise-native@^1.0.8: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + 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.5" - extend "~3.0.0" + combined-stream "~1.0.6" + extend "~3.0.2" forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" + 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.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" + 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.0.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-from-string@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" +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== -require-uncached@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" +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: - caller-path "^0.1.0" - resolve-from "^1.0.0" + resolve-from "^5.0.0" -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-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-options@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" + integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= + dependencies: + value-or-function "^3.0.0" resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.3, resolve@^1.1.6, resolve@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" +resolve@^1.1.3, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.8.1: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== dependencies: - path-parse "^1.0.5" + is-core-module "^2.1.0" + path-parse "^1.0.6" -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" + onetime "^2.0.0" + signal-exit "^3.0.2" -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" +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== right-pad@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/right-pad/-/right-pad-1.0.1.tgz#8ca08c2cbb5b55e74dafa96bf7fd1a27d568c8d0" + integrity sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA= -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" +rimraf@^3.0.0, rimraf@^3.0.2: + 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.0.5" + glob "^7.1.3" -run-async@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" - dependencies: - once "^1.3.0" +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== -rx-lite@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" +run-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" + integrity sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A== -rxjs@^5.0.0-beta.11: - version "5.4.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.4.0.tgz#a7db14ab157f9d7aac6a56e655e7a3860d39bf26" +rxjs@^6.3.3: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== dependencies: - symbol-observable "^1.0.1" + tslib "^1.9.0" -safe-buffer@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.0.tgz#fe4c8460397f9eaaaa58e73be46273408a45e223" +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +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-json-parse@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" + integrity sha1-PnZyPjjf3aE8mx0poeB//uSzC1c= -sane@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" +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: - anymatch "^1.3.0" - exec-sh "^0.2.0" - fb-watchman "^1.8.0" - minimatch "^3.0.2" + 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" - watch "~0.10.0" -sax@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" +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.0.1, semver@^5.1.0, semver@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" +"semver@2 || 3 || 4 || 5", 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== -set-getter@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" - dependencies: - to-object-path "^0.3.0" +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-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" +semver@^7.1.1, 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== -set-value@^0.4.2, set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" +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.1" - to-object-path "^0.3.0" + 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.7.5: - version "0.7.7" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" +shelljs@^0.8.3: + 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.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" +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: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" +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== -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" snapdragon-node@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.0.1.tgz#3b485cef2a6d55dfaeb52641a8388c6ea81cbea2" + 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.0" + snapdragon-util "^3.0.1" -snapdragon-util@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.0.tgz#0ac6288d8409e45d04fd1034e0bb745701cae9c0" +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.1" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370" + 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" @@ -4871,907 +6324,1217 @@ snapdragon@^0.8.1: map-cache "^0.2.2" source-map "^0.5.6" source-map-resolve "^0.5.0" - use "^2.0.0" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" + use "^3.1.0" source-map-resolve@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.0.tgz#fcad0b64b70afb27699e425950cb5ebcd410bc20" + 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.0.0" + 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.4.2: - version "0.4.15" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" +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: - source-map "^0.5.6" + 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.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" +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.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" +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== -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - dependencies: - amdefine ">=0.0.4" +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== space-separated-tokens@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.0.tgz#9e8c60407aa527742cd9eaee2541dec639f1269b" - dependencies: - trim "0.0.1" + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== -spdx-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" +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-license-ids "^1.0.2" + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" +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-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" +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" -split-string@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-2.1.1.tgz#af4b06d821560426446c3cd931cda618940d37d0" +spdx-license-ids@^3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" + integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== + +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 "^2.0.1" + extend-shallow "^3.0.0" split2@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/split2/-/split2-2.1.1.tgz#7a1f551e176a90ecd3345f7246a0cfe175ef4fd0" + version "2.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== dependencies: through2 "^2.0.2" +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + split@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.0.tgz#c4395ce683abcd254bc28fe1dabb6e5c27dcffae" + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== dependencies: through "2" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sshpk@^1.7.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" + 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" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" + getpass "^0.1.1" jsbn "~0.1.0" + safer-buffer "^2.0.2" tweetnacl "~0.14.0" -staged-git-files@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" - -standard-version@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/standard-version/-/standard-version-4.1.0.tgz#a049e87c302e7fce23f2f8a18e3ed7f1509436ec" +stack-utils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" + integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== dependencies: - chalk "^1.1.3" - conventional-changelog "^1.1.0" - conventional-recommended-bump "^1.0.0" - figures "^1.5.0" - fs-access "^1.0.0" - semver "^5.1.0" - yargs "^8.0.1" - -state-toggle@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.0.tgz#d20f9a616bb4f0c3b98b91922d25b640aa2bc425" + escape-string-regexp "^2.0.0" + +staged-git-files@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.1.tgz#37c2218ef0d6d26178b1310719309a16a59f8f7b" + integrity sha512-H89UNKr1rQJvI1c/PIR3kiAMBV23yvR7LItZiV74HWZwzt7f3YHuujJ9nJZlt58WlFox7XQsOahexwk7nTe69A== + +standard-version@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/standard-version/-/standard-version-9.0.0.tgz#814055add91eec8679a773768927f927183fc818" + integrity sha512-eRR04IscMP3xW9MJTykwz13HFNYs8jS33AGuDiBKgfo5YrO0qX0Nxb4rjupVwT5HDYL/aR+MBEVLjlmVFmFEDQ== + dependencies: + chalk "^2.4.2" + conventional-changelog "3.1.23" + conventional-changelog-config-spec "2.1.0" + conventional-changelog-conventionalcommits "4.4.0" + conventional-recommended-bump "6.0.10" + detect-indent "^6.0.0" + detect-newline "^3.1.0" + dotgitignore "^2.1.0" + figures "^3.1.0" + find-up "^4.1.0" + fs-access "^1.0.1" + git-semver-tags "^4.0.0" + semver "^7.1.1" + stringify-package "^1.0.1" + yargs "^15.3.1" + +standard-version@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/standard-version/-/standard-version-9.2.0.tgz#d4e64b201ec1abb8a677b265d8755e5e8b9e33a3" + integrity sha512-utJcqjk/wR4sePSwDoRcc5CzJ6S+kec5Hd0+1TJI+j1TRYuuptweAnEUdkkjGf2vYoGab2ezefyVtW065HZ1Uw== + dependencies: + chalk "^2.4.2" + conventional-changelog "3.1.24" + conventional-changelog-config-spec "2.1.0" + conventional-changelog-conventionalcommits "4.5.0" + conventional-recommended-bump "6.1.0" + detect-indent "^6.0.0" + detect-newline "^3.1.0" + dotgitignore "^2.1.0" + figures "^3.1.0" + find-up "^5.0.0" + fs-access "^1.0.1" + git-semver-tags "^4.0.0" + semver "^7.1.1" + stringify-package "^1.0.1" + yargs "^16.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" -stream-array@^1.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-array@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/stream-array/-/stream-array-1.1.2.tgz#9e5f7345f2137c30ee3b498b9114e80b52bb7eb5" + integrity sha1-nl9zRfITfDDuO0mLkRToC1K7frU= dependencies: readable-stream "~2.1.0" stream-combiner2@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= dependencies: duplexer2 "~0.1.0" readable-stream "^2.0.2" stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -stream-to-observable@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" +string-argv@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" + integrity sha1-2sMECGkMIfPDYwo/86BYd73L1zY= -string-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" +string-hash@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" + integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= + +string-length@^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: - strip-ansi "^3.0.0" + char-regex "^1.0.2" + strip-ansi "^6.0.0" string-template@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" + integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= -string-width@^1.0.0, string-width@^1.0.1, string-width@^1.0.2: +string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" +string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" - strip-ansi "^3.0.0" + strip-ansi "^4.0.0" + +string-width@^4.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, 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.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.1.tgz#62e200f039955a6810d8df0a33ffc0f013662d98" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: - safe-buffer "^5.0.1" + safe-buffer "~5.2.0" -stringify-entities@^1.0.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.0.tgz#2244a516c4f1e8e01b73dad01023016776abd917" +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" + +stringify-entities@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-3.1.0.tgz#b8d3feac256d9ffcc9fa1fefdcf3ca70576ee903" + integrity sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg== dependencies: character-entities-html4 "^1.0.0" character-entities-legacy "^1.0.0" - has "^1.0.1" - is-alphanumerical "^1.0.0" - is-hexadecimal "^1.0.0" + xtend "^4.0.0" + +stringify-object@^3.2.2: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" -stringstream@~0.0.4: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" +stringify-package@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" + integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" -strip-bom-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz#e7144398577d51a6bed0fa1994fa05f43fd988ee" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: - first-chunk-stream "^1.0.0" - strip-bom "^2.0.0" + ansi-regex "^3.0.0" -strip-bom@3.0.0, strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" +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@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= dependencies: is-utf8 "^0.2.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= dependencies: get-stdin "^4.0.1" -strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== subarg@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= dependencies: minimist "^1.1.0" supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^3.1.2: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: - has-flag "^1.0.0" - -symbol-observable@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" + has-flag "^3.0.0" -symbol-tree@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" +supports-color@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" -table@^3.7.8: - version "3.8.3" - resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: - ajv "^4.7.0" - ajv-keywords "^1.0.0" - chalk "^1.1.1" - lodash "^4.0.0" - slice-ansi "0.0.4" - string-width "^2.0.0" + has-flag "^4.0.0" -tar-pack@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" +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: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" - -tar@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + has-flag "^4.0.0" + supports-color "^7.0.0" + +symbol-observable@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +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== + +table@^6.0.4: + version "6.0.9" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.9.tgz#790a12bf1e09b87b30e60419bafd6a1fd85536fb" + integrity sha512-F3cLs9a3hL1Z7N4+EkSscsel3z55XT950AvB05bwayrNg5T1/gykXtigioTAjbltvbMSJvvhFCbnf6mX+ntnJQ== + dependencies: + ajv "^8.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + lodash.clonedeep "^4.5.0" + lodash.flatten "^4.4.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" -test-exclude@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" +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: - arrify "^1.0.1" - micromatch "^2.3.11" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" text-extensions@^1.0.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.5.0.tgz#d1cb2d14b5d0bc45bfdca8a08a473f68c7eb0cbc" + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-table@~0.2.0: +text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -throat@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-3.1.0.tgz#ef22d8855963b3fdc626d043508f24c4cdf7d3c3" - dependencies: - double-ended-queue "^2.1.0-0" +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-filter@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec" +through2-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" + integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== dependencies: through2 "~2.0.0" xtend "~4.0.0" -through2@^0.6.0: - version "0.6.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" +through2@^2.0.0, through2@^2.0.2, through2@^2.0.3, through2@~2.0.0: + 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 ">=1.0.33-1 <1.1.0-0" - xtend ">=4.0.0 <4.1.0-0" + readable-stream "~2.3.6" + xtend "~4.0.1" -through2@^2.0.0, through2@^2.0.1, through2@^2.0.2, through2@~2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" + readable-stream "3" -through@2, "through@>=2.2.7 <3", through@^2.3.6: +through@2, "through@>=2.2.7 <3": version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -tiny-lr@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.0.4.tgz#d13becf37f8b7e963320f5743298e3e934c7329a" +tiny-lr@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab" + integrity sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA== dependencies: body "^5.1.0" - debug "~2.2.0" + debug "^3.1.0" faye-websocket "~0.10.0" - livereload-js "^2.2.2" + livereload-js "^2.3.0" object-assign "^4.1.0" qs "^6.4.0" -tmp@^0.0.31: - version "0.0.31" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" +tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== dependencies: - os-tmpdir "~1.0.1" + rimraf "^3.0.0" tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= -to-absolute-glob@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz#1cdfa472a9ef50c239ee66999b662ca0eb39937f" +to-absolute-glob@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" + integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= dependencies: - extend-shallow "^2.0.1" + is-absolute "^1.0.0" + is-negated-glob "^1.0.0" -to-fast-properties@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" repeat-string "^1.6.1" -to-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-2.1.0.tgz#e3ad3a40cfe119559a05aea43e4caefacc5e901d" +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: - define-property "^0.2.5" - extend-shallow "^2.0.1" - regex-not "^0.1.1" + is-number "^7.0.0" -to-regex@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.1.tgz#15358bee4a2c83bd76377ba1dc049d0f18837aae" +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: - define-property "^0.2.5" - extend-shallow "^2.0.1" - regex-not "^1.0.0" + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" -tough-cookie@^2.3.2, tough-cookie@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" +to-through@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" + integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= dependencies: - punycode "^1.4.1" + through2 "^2.0.3" -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" +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" -trim-lines@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-1.1.0.tgz#9926d03ede13ba18f7d42222631fb04c79ff26fe" +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" trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= + +trim-newlines@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" + integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== trim-off-newlines@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -trim-trailing-lines@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.0.tgz#7aefbb7808df9d669f6da2e438cac8c46ada7684" - -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= trough@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.0.tgz#6bdedfe7f2aa49a6f3c432257687555957f342fd" + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== -tryit@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 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" -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - 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.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" 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" -typedarray@^0.0.6, typedarray@~0.0.5: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" +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== -uglify-js@^2.6: - version "2.8.28" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.28.tgz#e335032df9bb20dcb918f164589d5af47f38834a" - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" +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== -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -uid-number@^0.0.6: +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" + +typedarray@^0.0.6, typedarray@~0.0.5: version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -unc-path-regex@^0.1.0: +uglify-js@^3.1.4: + version "3.11.6" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.11.6.tgz#144b50d3e05eadd3ad4dd047c60ca541a8cd4e9c" + integrity sha512-oASI1FOJ7BBFkSCNDZ446EgkSuHkOZBuqRFrwXIKWCoXw8ZXQETooTQjkAcBS03Acab7ubCKsXnwuV2svy061g== + +unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= -unherit@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.0.tgz#6b9aaedfbf73df1756ad9e316dd981885840cd7d" - dependencies: - inherits "^2.0.1" - xtend "^4.0.1" - -unified@^6.0.0: - version "6.1.4" - resolved "https://registry.yarnpkg.com/unified/-/unified-6.1.4.tgz#12d7a4ec35986c4a2fa0815cdfdec4be0245fca2" +unified@^9.1.0: + version "9.2.1" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.1.tgz#ae18d5674c114021bfdbdf73865ca60f410215a3" + integrity sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA== dependencies: bail "^1.0.0" extend "^3.0.0" - has "^1.0.1" - is-plain-obj "^1.1.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" trough "^1.0.0" - vfile "^2.0.0" - x-is-function "^1.0.4" - x-is-string "^0.1.0" + vfile "^4.0.0" -union-value@^0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-0.2.4.tgz#7375152786679057e7b37aa676e83468fc0274f0" +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 "^0.4.3" + set-value "^2.0.1" unique-stream@^2.0.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.2.1.tgz#5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369" - dependencies: - json-stable-stringify "^1.0.0" - through2-filter "^2.0.0" - -unist-builder@^1.0.0, unist-builder@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-1.0.2.tgz#8c3b9903ef64bcfb117dd7cf6a5d98fc1b3b27b6" + version "2.3.1" + resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" + integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== dependencies: - object-assign "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + through2-filter "^3.0.0" -unist-util-generated@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.0.tgz#8c95657ff12b32eaffe0731fbb37da6995fae01b" +unist-builder@^2.0.0, unist-builder@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" + integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== -unist-util-is@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.0.tgz#d746a2702a8921b4cc356fbbd558ea05fc5052ec" +unist-util-generated@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" + integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== -unist-util-modify-children@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-1.1.0.tgz#559203ae85d7a76283277be1abfbaf595a177ead" - dependencies: - array-iterate "^1.0.0" +unist-util-is@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== unist-util-position@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.0.0.tgz#e6e1e03eeeb81c5e1afe553e8d4adfbd7c0d8f82" + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" + integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== -unist-util-remove-position@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.0.tgz#2444fedc344bc5f540dab6353e013b6d78101dc2" +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== dependencies: - unist-util-visit "^1.1.0" + "@types/unist" "^2.0.2" -unist-util-stringify-position@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.1.tgz#3ccbdc53679eed6ecf3777dd7f5e3229c1b6aa3c" +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" -unist-util-visit@^1.0.0, unist-util-visit@^1.0.1, unist-util-visit@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.1.1.tgz#e917a3b137658b335cb4420c7da2e74d928e4e94" +unist-util-visit@^2.0.0, unist-util-visit@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" -universalify@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.0.tgz#9eb1c4651debcc670cc94f1a75762332bb967778" +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@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-0.1.2.tgz#506810b867f27c2a5a6e9b04833631f6de58d310" +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +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.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + 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@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8" - dependencies: - define-property "^0.2.5" - isobject "^3.0.0" - lazy-cache "^2.0.2" - -user-home@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" - -user-home@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" - dependencies: - os-homedir "^1.0.0" +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: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, 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.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" +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== -v8flags@^2.0.10: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" - dependencies: - user-home "^1.1.1" +uuid@^8.3.0: + version "8.3.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" + integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== -vali-date@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6" +v8-compile-cache@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + +v8-to-istanbul@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz#b4fe00e35649ef7785a9b7fcebcea05f37c332fc" + integrity sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA== + 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.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + 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 "~1.0.0" - spdx-expression-parse "~1.0.0" + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +value-or-function@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" + integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= -verror@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" +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: - extsprintf "1.0.2" + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" -vfile-location@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.1.tgz#0bf8816f732b0f8bd902a56fda4c62c8e935dc52" +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" -vfile-reporter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-3.0.0.tgz#fe50714e373e0d2940510038a99bd609bdc8209f" +vfile-reporter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-6.0.1.tgz#45d4dc11df2e312196ea2ceb95e42a67fc8ce814" + integrity sha512-0OppK9mo8G2XUpv+hIKLVSDsoxJrXnOy73+vIm0jQUOUFYRduqpFHX+QqAQfvRHyX9B0UFiRuNJnBOjQCIsw1g== dependencies: - chalk "^1.1.0" - log-symbols "^1.0.2" - plur "^2.0.0" repeat-string "^1.5.0" - string-width "^1.0.0" - strip-ansi "^3.0.1" - trim "0.0.1" - unist-util-stringify-position "^1.0.0" + string-width "^4.0.0" + supports-color "^6.0.0" + unist-util-stringify-position "^2.0.0" + vfile-sort "^2.1.2" + vfile-statistics "^1.1.0" -vfile-sort@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/vfile-sort/-/vfile-sort-2.0.0.tgz#7279458d111a9ba3b18effd9f8a0169bb7c5112b" +vfile-sort@^2.1.0, vfile-sort@^2.1.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/vfile-sort/-/vfile-sort-2.2.2.tgz#720fe067ce156aba0b411a01bb0dc65596aa1190" + integrity sha512-tAyUqD2R1l/7Rn7ixdGkhXLD3zsg+XLAeUDUhXearjfIcpL1Hcsj5hHpCoy/gvfK/Ws61+e972fm0F7up7hfYA== -vfile@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.1.0.tgz#d3ce8b825e7b8d53b896164341273381936f02bd" +vfile-statistics@^1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/vfile-statistics/-/vfile-statistics-1.1.4.tgz#b99fd15ecf0f44ba088cc973425d666cb7a9f245" + integrity sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA== + +vfile@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.0.tgz#26c78ac92eb70816b01d4565e003b7e65a2a0e01" + integrity sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw== dependencies: - is-buffer "^1.1.4" + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" -vinyl-fs@^2.3.1: - version "2.4.4" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-2.4.4.tgz#be6ff3270cb55dfd7d3063640de81f25d7532239" +vinyl-fs@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" + integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== dependencies: - duplexify "^3.2.0" - glob-stream "^5.3.2" + fs-mkdirp-stream "^1.0.0" + glob-stream "^6.1.0" graceful-fs "^4.0.0" - gulp-sourcemaps "1.6.0" - is-valid-glob "^0.3.0" + is-valid-glob "^1.0.0" lazystream "^1.0.0" - lodash.isequal "^4.0.0" - merge-stream "^1.0.0" - mkdirp "^0.5.0" - object-assign "^4.0.0" - readable-stream "^2.0.4" - strip-bom "^2.0.0" - strip-bom-stream "^1.0.0" + lead "^1.0.0" + object.assign "^4.0.4" + pumpify "^1.3.5" + readable-stream "^2.3.3" + remove-bom-buffer "^3.0.0" + remove-bom-stream "^1.2.0" + resolve-options "^1.1.0" through2 "^2.0.0" - through2-filter "^2.0.0" - vali-date "^1.0.0" - vinyl "^1.0.0" + to-through "^2.0.0" + value-or-function "^3.0.0" + vinyl "^2.0.0" + vinyl-sourcemap "^1.1.0" -vinyl@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884" +vinyl-sourcemap@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" + integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= dependencies: - clone "^1.0.0" - clone-stats "^0.0.1" - replace-ext "0.0.1" + append-buffer "^1.0.2" + convert-source-map "^1.5.0" + graceful-fs "^4.1.6" + normalize-path "^2.1.1" + now-and-later "^2.0.0" + remove-bom-buffer "^3.0.0" + vinyl "^2.0.0" -vinyl@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.0.2.tgz#0a3713d8d4e9221c58f10ca16c0116c9e25eda7c" +vinyl@^2.0.0, vinyl@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974" + integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw== dependencies: - clone "^1.0.0" + clone "^2.1.1" clone-buffer "^1.0.0" clone-stats "^1.0.0" cloneable-readable "^1.0.0" - is-stream "^1.1.0" remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" -walker@~1.0.5: +vue-template-compiler@^2.6.12: + version "2.6.12" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz#947ed7196744c8a5285ebe1233fe960437fcc57e" + integrity sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg== + dependencies: + de-indent "^1.0.2" + he "^1.1.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" -watch@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" +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@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== websocket-driver@>=0.5.1: - version "0.6.5" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== -whatwg-encoding@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" +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.13" + iconv-lite "0.4.24" -whatwg-url@^4.3.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" +whatwg-url@^8.0.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" + integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^2.0.2" + webidl-conversions "^6.1.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.10, which@^1.2.12, which@^1.2.9: - version "1.2.14" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" +which@^1.2.10, 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" -wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" +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: - string-width "^1.0.2" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + isexe "^2.0.0" -word-wrap@^1.0.3: +word-wrap@^1.0.3, word-wrap@^1.2.3, 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@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - -wordwrap@~1.0.0: +wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= -worker-farm@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= dependencies: - errno ">=0.1.1 <0.2.0-0" - xtend ">=4.0.0 <4.1.0-0" + string-width "^2.1.1" + strip-ansi "^4.0.0" -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" +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: - string-width "^1.0.1" - strip-ansi "^3.0.1" + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + 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@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" +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: - mkdirp "^0.5.1" + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" -x-is-function@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/x-is-function/-/x-is-function-1.0.4.tgz#5d294dc3d268cbdd062580e0c5df77a391d1fa1e" +ws@^7.2.3: + version "7.4.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.0.tgz#a5dd76a24197940d4a8bb9e0e152bb4503764da7" + integrity sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ== -x-is-string@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" +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== -xml-name-validator@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" +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.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" +xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.0, 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@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" +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== + +y18n@^5.0.5: + version "5.0.7" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.7.tgz#0c514aba53fc40e2db911aeb8b51566a3374efe7" + integrity sha512-oOhslryvNcA1lB9WYr+M6TMyLkLg81Dgmyb48ZDU0lvR+5bmNDTMz7iobM1QXooaLhbbrcHrlNaABhI6Vo6StQ== -yallist@^2.0.0: +yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" - dependencies: - camelcase "^3.0.0" - -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - dependencies: - camelcase "^3.0.0" - -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" - dependencies: - camelcase "^4.1.0" +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yargs@^6.0.1: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^4.2.0" - -yargs@^7.0.2: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^18.1.2, yargs-parser@^18.1.3: + 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-parser@^20.2.2: + version "20.2.7" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" + integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== + +yargs-parser@^20.2.3: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs@^15.3.1, yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + 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 "^1.0.1" + require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" -yargs@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.1.tgz#420ef75e840c1457a80adcca9bc6fa3849de51aa" +yargs@^16.0.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - read-pkg-up "^2.0.0" + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.0" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==