├── .gitignore ├── .npmignore ├── .vscode └── settings.json ├── LICENSE ├── README.md ├── external-module-map-plugin.ts ├── find-readme.ts ├── index.ts ├── package.json ├── publish.js ├── toc-modules-plugin.ts ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | *.ipr 2 | *.iws 3 | *.iml 4 | 5 | # Built using tsc 6 | # plugin.js 7 | 8 | # Logs 9 | logs 10 | *.log 11 | npm-debug.log* 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | 24 | # nyc test coverage 25 | .nyc_output 26 | 27 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 28 | .grunt 29 | 30 | # node-waf configuration 31 | .lock-wscript 32 | 33 | # Compiled binary addons (http://nodejs.org/api/addons.html) 34 | build/Release 35 | 36 | # Dependency directories 37 | node_modules 38 | jspm_packages 39 | 40 | # Optional npm cache directory 41 | .npm 42 | 43 | # Optional REPL history 44 | .node_repl_history 45 | 46 | dist 47 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | *.ipr 2 | *.iws 3 | *.iml 4 | node_modules 5 | typings 6 | typings.json 7 | tsconfig.json 8 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "node_modules/typescript/lib" 3 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 Asger Jensen 4 | Copyright (c) 2018 Adam Miller 5 | Copyright (c) 2019 Grzegorz Przybylowicz, Hendrik Liebau 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # @strictsoftware/typedoc-plugin-monorepo – DEPRECATED! 2 | 3 | **_This project is deprecated since [TypeDoc now supports monorepos out of the box](https://typedoc.org/guides/monorepo/)._** 4 | 5 | ### What 6 | 7 | A plugin for [TypeDoc](http://typedoc.org) 8 | 9 | When trying to unify documentation for multiple modules residing inside a shared source repository, the default way TypeDoc assignes top-level module names might not satisfy. 10 | 11 | This plugin allows you to specify a regular expression with a capture group. This is then used to collect related items into one module. 12 | 13 | This plugin is inspired by, and based on, [asgerjensen/typedoc-plugin-external-module-map](https://github.com/asgerjensen/typedoc-plugin-external-module-map). However, this plugin will automagically rename top-level modules discovered to a new "Package" type, and auto-discover and display READMEs for the individual packages. Furthermore, these packages are used as top-level entries in the table of contents. 14 | 15 | This plugin is intended for monorepos that deliver more than one NPM package in a single Git repository. 16 | 17 | Suppose you have 18 | 19 | ``` 20 | packages/@namespace/package-1/index.ts 21 | packages/@namespace/package-1/src/otherfiles.ts 22 | packages/@namespace/package-2/index.ts 23 | packages/@namespace/package-2/src/otherfiles.ts 24 | ``` 25 | 26 | TypeDoc will create four "Modules", named for each .ts file. 27 | 28 | - "@namespace/package-1/index" 29 | - "@namespace/package-1/src/otherfiles" 30 | - "@namespace/package-2/index" 31 | - "@namespace/package-2/src/otherfiles" 32 | 33 | This plugin allows each file to specify the TypeDoc Module its code should belong to. If multiple files belong to the same module, they are merged. 34 | 35 | This allows more control over the modules that TypeDoc generates. 36 | Instead of the four modules above, we could group them into two: 37 | 38 | - @namespace/package-1 39 | - @namespace/package-2 40 | 41 | In addition to grouping these modules, the plugin will attempt to discover README files in each module root to display with the documented package. In this plugin, top-level typedoc "modules" are renamed to the more semantic name "packages" in generated documentation. 42 | 43 | ### Installing 44 | 45 | TypeDoc >=0.11 has the ability to discover and load typedoc plugins found in node_modules. 46 | Simply install the plugin and run typedoc. 47 | 48 | ``` 49 | npm install --save @strictsoftware/typedoc-plugin-monorepo 50 | typedoc 51 | ``` 52 | 53 | ### Using 54 | 55 | This plugin adds a new input option 56 | 57 | ``` 58 | --external-modulemap ".*packages\/(@namespace\/[^\/]+)\/.*" 59 | ``` 60 | 61 | If you specify it from the command line, be sure to escape the input string so bash doesn't expand it. 62 | 63 | It is probably easier to create a typedoc options file (typedoc.json) and add it there: 64 | 65 | ``` 66 | { 67 | "name": "My Library", 68 | "out": "doc", 69 | "theme": "default", 70 | "preserveConstEnums": "true", 71 | "exclude": "*.spec.ts", 72 | "external-modulemap": ".*packages\/(@namespace\/[^\/]+)\/.*", 73 | "excludeExternals": false 74 | } 75 | ``` 76 | -------------------------------------------------------------------------------- /external-module-map-plugin.ts: -------------------------------------------------------------------------------- 1 | import * as ts from "typescript"; 2 | 3 | import { 4 | Component, 5 | ConverterComponent, 6 | } from "typedoc/dist/lib/converter/components"; 7 | import { Converter } from "typedoc/dist/lib/converter/converter"; 8 | import { Context } from "typedoc/dist/lib/converter/context"; 9 | import { Comment } from "typedoc/dist/lib/models/comments"; 10 | import { Options } from "typedoc/dist/lib/utils/options"; 11 | import { DeclarationReflection, ReflectionKind } from "typedoc"; 12 | import { findReadme } from "./find-readme"; 13 | 14 | interface ModuleRename { 15 | readonly renameTo: string; 16 | readonly reflection: DeclarationReflection; 17 | } 18 | 19 | /** 20 | * This plugin allows you to provide a mapping regexp between your source folder 21 | * structure, and the module that should be reported in typedoc. It will match 22 | * the first capture group of your regex and use that as the module name. 23 | * 24 | * Based on 25 | * https://github.com/christopherthielen/typedoc-plugin-external-module-name 26 | * 27 | * 28 | */ 29 | @Component({ name: "external-module-map" }) 30 | export class ExternalModuleMapPlugin extends ConverterComponent { 31 | /** List of module reflections which are models to rename */ 32 | private moduleRenames: ModuleRename[] = []; 33 | private mapRegEx?: RegExp; 34 | private options!: Options; 35 | private modules: Set = new Set(); 36 | 37 | initialize() { 38 | this.options = this.application.options; 39 | this.listenTo(this.owner, { 40 | [Converter.EVENT_BEGIN]: this.onBegin, 41 | [Converter.EVENT_CREATE_DECLARATION]: this.onDeclarationBegin, 42 | [Converter.EVENT_RESOLVE_BEGIN]: this.onBeginResolve, 43 | }); 44 | } 45 | 46 | /** 47 | * Triggered when the converter begins converting a project. 48 | */ 49 | private onBegin() { 50 | const externalmap = this.options.getValue("external-modulemap"); 51 | 52 | if (typeof externalmap === "string") { 53 | try { 54 | console.log( 55 | "INFO: applying regexp ", 56 | externalmap, 57 | " to calculate module names" 58 | ); 59 | this.mapRegEx = new RegExp(externalmap); 60 | } catch (e) { 61 | console.log("WARN: external map not recognized. Not processing.", e); 62 | } 63 | } 64 | } 65 | 66 | private onDeclarationBegin( 67 | _context: Context, 68 | reflection: DeclarationReflection, 69 | node?: ts.Node 70 | ) { 71 | if (!this.mapRegEx || !node || !ts.isSourceFile(node)) { 72 | return; 73 | } 74 | 75 | const match = this.mapRegEx.exec(node.fileName); 76 | 77 | if (match) { 78 | const renameTo = match[1]; 79 | 80 | console.log(`Mapping "${reflection.originalName}" to "${renameTo}"`); 81 | 82 | this.modules.add(renameTo); 83 | this.moduleRenames.push({ renameTo, reflection }); 84 | } 85 | } 86 | 87 | /** 88 | * Triggered when the converter begins resolving a project. 89 | * 90 | * @param context The context object describing the current state the 91 | * converter is in. 92 | */ 93 | private onBeginResolve(context: Context) { 94 | for (const item of this.moduleRenames) { 95 | // Find an existing module that already has the "rename to" name. Use it 96 | // as the merge target. 97 | const mergeTarget = context.project 98 | .getReflectionsByKind(item.reflection.kind) 99 | .find( 100 | (ref): ref is DeclarationReflection => ref.name === item.renameTo 101 | ); 102 | 103 | // If there wasn't a merge target, just change the name of the current 104 | // module and continue. 105 | if (!mergeTarget) { 106 | item.reflection.name = item.renameTo; 107 | 108 | continue; 109 | } 110 | 111 | // Since there is a merge target, relocate all the renaming module's 112 | // children to the mergeTarget. 113 | if (item.reflection.children) { 114 | if (!mergeTarget.children) { 115 | mergeTarget.children = []; 116 | } 117 | 118 | for (const child of item.reflection.children) { 119 | child.parent = mergeTarget; 120 | 121 | if (!mergeTarget.getChildByName(child.name)) { 122 | mergeTarget.children.push(child); 123 | } 124 | } 125 | 126 | item.reflection.children.length = 0; 127 | } 128 | 129 | // Finally remove the now empty module. 130 | context.project.removeReflection(item.reflection); 131 | } 132 | 133 | for (const moduleName of this.modules) { 134 | const moduleReflection = context.project 135 | .getReflectionsByKind(ReflectionKind.Module) 136 | .find((ref) => ref.name === moduleName); 137 | 138 | if (!moduleReflection) { 139 | continue; 140 | } 141 | 142 | moduleReflection.kindString = "Package"; 143 | 144 | const readme = findReadme(moduleReflection); 145 | 146 | if (readme) { 147 | moduleReflection.comment = new Comment("", readme.toString()); 148 | } else { 149 | console.error(`No README found for module "${moduleName}"`); 150 | } 151 | } 152 | } 153 | } 154 | -------------------------------------------------------------------------------- /find-readme.ts: -------------------------------------------------------------------------------- 1 | import findUp from "find-up"; 2 | import fs from "fs"; 3 | import path from "path"; 4 | import { Reflection } from "typedoc"; 5 | 6 | export function findReadme(reflection: Reflection): string | undefined { 7 | const filename = reflection.sources?.[0]?.fileName; 8 | 9 | if (!filename) { 10 | return undefined; 11 | } 12 | 13 | const readmeFilename = findUp.sync("README.md", { 14 | cwd: path.dirname(filename), 15 | }); 16 | 17 | if (!readmeFilename) { 18 | return undefined; 19 | } 20 | 21 | try { 22 | return fs.readFileSync(readmeFilename).toString(); 23 | } catch { 24 | return undefined; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | import { TocModulesPlugin } from "./toc-modules-plugin"; 2 | import { ExternalModuleMapPlugin } from "./external-module-map-plugin"; 3 | import { ParameterType, PluginHost } from "typedoc/dist/lib/utils"; 4 | 5 | module.exports = function (PluginHost: PluginHost) { 6 | const app = PluginHost.owner; 7 | 8 | app.options.addDeclaration({ 9 | name: "external-modulemap", 10 | type: ParameterType.String, 11 | help: "Regular expression to capture the module names.", 12 | }); 13 | 14 | // @ts-ignore 15 | app.converter.addComponent("external-module-map", ExternalModuleMapPlugin); 16 | // @ts-ignore 17 | app.renderer.addComponent("toc-modules-plugin", TocModulesPlugin); 18 | }; 19 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@strictsoftware/typedoc-plugin-monorepo", 3 | "version": "0.4.2", 4 | "description": "Optimize Typedoc documentation output for libraries that are organized in a monorepo.", 5 | "keywords": [ 6 | "typedoc", 7 | "typedocplugin" 8 | ], 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/unstubbable/typedoc-plugin-monorepo" 12 | }, 13 | "license": "MIT", 14 | "author": "Hendrik Liebau ", 15 | "files": [ 16 | "dist" 17 | ], 18 | "main": "dist/index.js", 19 | "scripts": { 20 | "build": "tsc", 21 | "prepublish": "npm run build" 22 | }, 23 | "devDependencies": { 24 | "@types/node": "^14.14.25", 25 | "typedoc": "^0.20.23", 26 | "typescript": "^4.1.3" 27 | }, 28 | "peerDependencies": { 29 | "typedoc": ">=0.20 <1.0" 30 | }, 31 | "dependencies": { 32 | "find-up": "^5.0.0" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /publish.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var pkg = require('./package.json'); 4 | var ver = pkg.version; 5 | 6 | console.log("Run these commands to publish:\n\n"); 7 | console.log("npm run build && git status\n\n"); 8 | console.log("git commit -m 'publishing " + ver + "' . && git push\n\n"); 9 | console.log("git tag " + ver + " && git push origin " + ver + " && npm publish\n\n"); 10 | -------------------------------------------------------------------------------- /toc-modules-plugin.ts: -------------------------------------------------------------------------------- 1 | import { Component } from "typedoc/dist/lib/utils"; 2 | import { RendererComponent } from "typedoc/dist/lib/output/components"; 3 | import { PageEvent } from "typedoc/dist/lib/output/events"; 4 | import { 5 | Reflection, 6 | DeclarationReflection, 7 | ReflectionKind, 8 | ContainerReflection, 9 | } from "typedoc/dist/lib/models"; 10 | import { NavigationItem } from "typedoc/dist/lib/output/models/NavigationItem"; 11 | 12 | /** 13 | * A plugin that lists modules as top-level entries in the table of contents for 14 | * the current page. 15 | * 16 | * This plugin overwrites the [[PageEvent.toc]] property. 17 | */ 18 | @Component({ name: "toc-modules" }) 19 | export class TocModulesPlugin extends RendererComponent { 20 | /** 21 | * Create a new TocModulesPlugin instance. 22 | */ 23 | initialize() { 24 | this.listenTo(this.owner, { 25 | [PageEvent.BEGIN]: this.onRendererBeginPage, 26 | }); 27 | } 28 | 29 | /** 30 | * Triggered before a document will be rendered. 31 | * 32 | * @param page An event object describing the current render operation. 33 | */ 34 | private onRendererBeginPage(page: PageEvent) { 35 | let model: Reflection = page.model; 36 | 37 | const trail: Reflection[] = []; 38 | 39 | while (model !== page.project) { 40 | const isModule = model.kindOf(ReflectionKind.SomeModule); 41 | 42 | trail.unshift(model); 43 | 44 | if (model.parent) { 45 | model = model.parent; 46 | } 47 | 48 | if (isModule) { 49 | break; 50 | } 51 | } 52 | 53 | page.toc = new NavigationItem(); 54 | 55 | TocModulesPlugin.buildToc(model, trail, page.toc); 56 | } 57 | 58 | /** 59 | * Create a toc navigation item structure. 60 | * 61 | * @param model The models whose children should be written to the toc. 62 | * @param trail Defines the active trail of expanded toc entries. 63 | * @param parent The parent [[NavigationItem]] the toc should be appended to. 64 | */ 65 | static buildToc( 66 | model: Reflection, 67 | trail: Reflection[], 68 | parent: NavigationItem 69 | ) { 70 | const index = trail.indexOf(model); 71 | const children = (model as ContainerReflection).children || []; 72 | 73 | if (index < trail.length - 1 && children.length > 40) { 74 | const child = trail[index + 1]; 75 | const item = NavigationItem.create(child, parent, true); 76 | 77 | item.isInPath = true; 78 | item.isCurrent = false; 79 | 80 | TocModulesPlugin.buildToc(child, trail, item); 81 | } else { 82 | children.forEach((child: DeclarationReflection) => { 83 | const item = NavigationItem.create(child, parent, true); 84 | 85 | if (trail.includes(child)) { 86 | item.isInPath = true; 87 | item.isCurrent = trail[trail.length - 1] === child; 88 | 89 | TocModulesPlugin.buildToc(child, trail, item); 90 | } 91 | }); 92 | } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "moduleResolution": "node", 4 | "allowJs": true, 5 | "module": "umd", 6 | "target": "es2015", 7 | "outDir": "dist", 8 | "experimentalDecorators": true, 9 | "lib": ["es2016"], 10 | "esModuleInterop": true, 11 | "strict": true 12 | }, 13 | "files": [ 14 | "index.ts", 15 | "external-module-map-plugin.ts", 16 | "find-readme.ts", 17 | "toc-modules-plugin.ts" 18 | ], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/node@^14.14.25": 6 | version "14.14.25" 7 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.25.tgz#15967a7b577ff81383f9b888aa6705d43fbbae93" 8 | integrity sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ== 9 | 10 | at-least-node@^1.0.0: 11 | version "1.0.0" 12 | resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" 13 | integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== 14 | 15 | balanced-match@^1.0.0: 16 | version "1.0.0" 17 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 18 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 19 | 20 | brace-expansion@^1.1.7: 21 | version "1.1.11" 22 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 23 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 24 | dependencies: 25 | balanced-match "^1.0.0" 26 | concat-map "0.0.1" 27 | 28 | colors@^1.4.0: 29 | version "1.4.0" 30 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" 31 | integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== 32 | 33 | commander@~2.19.0: 34 | version "2.19.0" 35 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" 36 | integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== 37 | 38 | concat-map@0.0.1: 39 | version "0.0.1" 40 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 41 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 42 | 43 | find-up@^5.0.0: 44 | version "5.0.0" 45 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 46 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 47 | dependencies: 48 | locate-path "^6.0.0" 49 | path-exists "^4.0.0" 50 | 51 | fs-extra@^9.1.0: 52 | version "9.1.0" 53 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" 54 | integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== 55 | dependencies: 56 | at-least-node "^1.0.0" 57 | graceful-fs "^4.2.0" 58 | jsonfile "^6.0.1" 59 | universalify "^2.0.0" 60 | 61 | fs.realpath@^1.0.0: 62 | version "1.0.0" 63 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 64 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 65 | 66 | glob@^7.0.0: 67 | version "7.1.3" 68 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 69 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 70 | dependencies: 71 | fs.realpath "^1.0.0" 72 | inflight "^1.0.4" 73 | inherits "2" 74 | minimatch "^3.0.4" 75 | once "^1.3.0" 76 | path-is-absolute "^1.0.0" 77 | 78 | graceful-fs@^4.1.6, graceful-fs@^4.2.0: 79 | version "4.2.3" 80 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" 81 | integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== 82 | 83 | handlebars@^4.7.6: 84 | version "4.7.6" 85 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" 86 | integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== 87 | dependencies: 88 | minimist "^1.2.5" 89 | neo-async "^2.6.0" 90 | source-map "^0.6.1" 91 | wordwrap "^1.0.0" 92 | optionalDependencies: 93 | uglify-js "^3.1.4" 94 | 95 | inflight@^1.0.4: 96 | version "1.0.6" 97 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 98 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 99 | dependencies: 100 | once "^1.3.0" 101 | wrappy "1" 102 | 103 | inherits@2: 104 | version "2.0.3" 105 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 106 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 107 | 108 | interpret@^1.0.0: 109 | version "1.2.0" 110 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" 111 | integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== 112 | 113 | jsonfile@^6.0.1: 114 | version "6.1.0" 115 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" 116 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== 117 | dependencies: 118 | universalify "^2.0.0" 119 | optionalDependencies: 120 | graceful-fs "^4.1.6" 121 | 122 | locate-path@^6.0.0: 123 | version "6.0.0" 124 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 125 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 126 | dependencies: 127 | p-locate "^5.0.0" 128 | 129 | lodash@^4.17.20: 130 | version "4.17.20" 131 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" 132 | integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== 133 | 134 | lru-cache@^5.1.1: 135 | version "5.1.1" 136 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 137 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 138 | dependencies: 139 | yallist "^3.0.2" 140 | 141 | lunr@^2.3.9: 142 | version "2.3.9" 143 | resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" 144 | integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== 145 | 146 | marked@^1.2.9: 147 | version "1.2.9" 148 | resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.9.tgz#53786f8b05d4c01a2a5a76b7d1ec9943d29d72dc" 149 | integrity sha512-H8lIX2SvyitGX+TRdtS06m1jHMijKN/XjfH6Ooii9fvxMlh8QdqBfBDkGUpMWH2kQNrtixjzYUa3SH8ROTgRRw== 150 | 151 | minimatch@^3.0.0, minimatch@^3.0.4: 152 | version "3.0.4" 153 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 154 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 155 | dependencies: 156 | brace-expansion "^1.1.7" 157 | 158 | minimist@^1.2.5: 159 | version "1.2.5" 160 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 161 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 162 | 163 | neo-async@^2.6.0: 164 | version "2.6.0" 165 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" 166 | integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== 167 | 168 | once@^1.3.0: 169 | version "1.4.0" 170 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 171 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 172 | dependencies: 173 | wrappy "1" 174 | 175 | onigasm@^2.2.5: 176 | version "2.2.5" 177 | resolved "https://registry.yarnpkg.com/onigasm/-/onigasm-2.2.5.tgz#cc4d2a79a0fa0b64caec1f4c7ea367585a676892" 178 | integrity sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA== 179 | dependencies: 180 | lru-cache "^5.1.1" 181 | 182 | p-limit@^3.0.2: 183 | version "3.1.0" 184 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 185 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 186 | dependencies: 187 | yocto-queue "^0.1.0" 188 | 189 | p-locate@^5.0.0: 190 | version "5.0.0" 191 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 192 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 193 | dependencies: 194 | p-limit "^3.0.2" 195 | 196 | path-exists@^4.0.0: 197 | version "4.0.0" 198 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 199 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 200 | 201 | path-is-absolute@^1.0.0: 202 | version "1.0.1" 203 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 204 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 205 | 206 | path-parse@^1.0.6: 207 | version "1.0.6" 208 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 209 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 210 | 211 | progress@^2.0.3: 212 | version "2.0.3" 213 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 214 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 215 | 216 | rechoir@^0.6.2: 217 | version "0.6.2" 218 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" 219 | integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= 220 | dependencies: 221 | resolve "^1.1.6" 222 | 223 | resolve@^1.1.6: 224 | version "1.10.0" 225 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" 226 | integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== 227 | dependencies: 228 | path-parse "^1.0.6" 229 | 230 | shelljs@^0.8.4: 231 | version "0.8.4" 232 | resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" 233 | integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== 234 | dependencies: 235 | glob "^7.0.0" 236 | interpret "^1.0.0" 237 | rechoir "^0.6.2" 238 | 239 | shiki@^0.9.2: 240 | version "0.9.2" 241 | resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.9.2.tgz#b9e660b750d38923275765c4dc4c92b23877b115" 242 | integrity sha512-BjUCxVbxMnvjs8jC4b+BQ808vwjJ9Q8NtLqPwXShZ307HdXiDFYP968ORSVfaTNNSWYDBYdMnVKJ0fYNsoZUBA== 243 | dependencies: 244 | onigasm "^2.2.5" 245 | vscode-textmate "^5.2.0" 246 | 247 | source-map@^0.6.1, source-map@~0.6.1: 248 | version "0.6.1" 249 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 250 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 251 | 252 | typedoc-default-themes@^0.12.7: 253 | version "0.12.7" 254 | resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.12.7.tgz#d44f68d40a3e90a19b5ea7be4cc6ed949afe768d" 255 | integrity sha512-0XAuGEqID+gon1+fhi4LycOEFM+5Mvm2PjwaiVZNAzU7pn3G2DEpsoXnFOPlLDnHY6ZW0BY0nO7ur9fHOFkBLQ== 256 | 257 | typedoc@^0.20.23: 258 | version "0.20.23" 259 | resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.20.23.tgz#963fcb53b4e0f28c50b2e155721766cf53196105" 260 | integrity sha512-RBXuM0MJ2V/7eGg4YrDEmV1bn/ypa3Wx6AO1B0mUBHEQJaOIKEEnNI0Su75J6q7dkB5ksZvGNgsGjvfWL8Myjg== 261 | dependencies: 262 | colors "^1.4.0" 263 | fs-extra "^9.1.0" 264 | handlebars "^4.7.6" 265 | lodash "^4.17.20" 266 | lunr "^2.3.9" 267 | marked "^1.2.9" 268 | minimatch "^3.0.0" 269 | progress "^2.0.3" 270 | shelljs "^0.8.4" 271 | shiki "^0.9.2" 272 | typedoc-default-themes "^0.12.7" 273 | 274 | typescript@^4.1.3: 275 | version "4.1.3" 276 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" 277 | integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== 278 | 279 | uglify-js@^3.1.4: 280 | version "3.4.10" 281 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" 282 | integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== 283 | dependencies: 284 | commander "~2.19.0" 285 | source-map "~0.6.1" 286 | 287 | universalify@^2.0.0: 288 | version "2.0.0" 289 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" 290 | integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== 291 | 292 | vscode-textmate@^5.2.0: 293 | version "5.2.0" 294 | resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" 295 | integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== 296 | 297 | wordwrap@^1.0.0: 298 | version "1.0.0" 299 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 300 | integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= 301 | 302 | wrappy@1: 303 | version "1.0.2" 304 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 305 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 306 | 307 | yallist@^3.0.2: 308 | version "3.1.1" 309 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 310 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 311 | 312 | yocto-queue@^0.1.0: 313 | version "0.1.0" 314 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 315 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 316 | --------------------------------------------------------------------------------