document new build platform

master
Vladimir Mandic 2021-09-10 21:21:15 -04:00
parent 1e67b7ca73
commit 3bf213c17d
35 changed files with 61 additions and 4205 deletions

@ -14,9 +14,10 @@ npm run build
This will rebuild library itself (all variations) as well as demo
Build process is written as JavaScript `server/build.js` which can be modified to change any build parameters
Build process is written as JavaScript module `@vladmandic/build`
which uses `build.json` as configuration file which can be modified to change any build parameters
Build creates a custom `tfjs` bundle to optimize size and avoid unnecessary polyfills
Production version of the library is fully minified while dev version runs without code minification for easier debugging
Production build runs following operations:
@ -28,8 +29,10 @@ Production build runs following operations:
Dev build runs following operations:
1. Compile TypeScript
2. Create dist non-minified bundles
1. Start HTTP/HTTPS web server
2. Compile TypeScript
3. Create dist non-minified bundles
4. Run in file watch mode
<br>
@ -37,35 +40,28 @@ Dev build runs following operations:
Production build is started by running `npm run build`
```log
> @vladmandic/human@2.0.0 build /home/vlado/dev/human
> node server/build.js
```
```js
2021-08-31 12:25:22 INFO: @vladmandic/human version 2.1.4
2021-08-31 12:25:22 INFO: User: vlado Platform: linux Arch: x64 Node: v16.5.0
2021-08-31 12:25:22 STATE: Application log: /home/vlado/dev/human/server/build.log
2021-08-31 12:25:22 INFO: Toolchain: { tfjs: '3.9.0', esbuild: '0.12.24', typescript: '4.4.2', typedoc: '0.21.9', eslint: '7.32.0' }
2021-08-31 12:25:22 INFO: Clean: [ 'dist/*', 'types/*', 'typedoc/*', [length]: 3 ]
2021-08-31 12:25:22 INFO: Build: file startup all type: production config: { minifyWhitespace: true, minifyIdentifiers: true, minifySyntax: true }
2021-08-31 12:25:22 STATE: target: node type: tfjs: { imports: 1, importBytes: 102, outputBytes: 1303, outputFiles: 'dist/tfjs.esm.js' }
2021-08-31 12:25:22 STATE: target: node type: node: { imports: 47, importBytes: 456488, outputBytes: 396865, outputFiles: 'dist/human.node.js' }
2021-08-31 12:25:22 STATE: target: nodeGPU type: tfjs: { imports: 1, importBytes: 110, outputBytes: 1311, outputFiles: 'dist/tfjs.esm.js' }
2021-08-31 12:25:22 STATE: target: nodeGPU type: node: { imports: 47, importBytes: 456496, outputBytes: 396869, outputFiles: 'dist/human.node-gpu.js' }
2021-08-31 12:25:22 STATE: target: nodeWASM type: tfjs: { imports: 1, importBytes: 149, outputBytes: 1378, outputFiles: 'dist/tfjs.esm.js' }
2021-08-31 12:25:22 STATE: target: nodeWASM type: node: { imports: 47, importBytes: 456563, outputBytes: 396941, outputFiles: 'dist/human.node-wasm.js' }
2021-08-31 12:25:22 STATE: target: browserNoBundle type: tfjs: { imports: 1, importBytes: 2168, outputBytes: 1242, outputFiles: 'dist/tfjs.esm.js' }
2021-08-31 12:25:22 STATE: target: browserNoBundle type: esm: { imports: 47, importBytes: 456427, outputBytes: 255552, outputFiles: 'dist/human.esm-nobundle.js' }
2021-08-31 12:25:23 STATE: target: browserBundle type: tfjs: { modules: 1174, moduleBytes: 8150347, imports: 7, importBytes: 2168, outputBytes: 2343932, outputFiles: 'dist/tfjs.esm.js' }
2021-08-31 12:25:23 STATE: target: browserBundle type: iife: { imports: 47, importBytes: 2799117, outputBytes: 1391790, outputFiles: 'dist/human.js' }
2021-08-31 12:25:23 STATE: target: browserBundle type: esm: { imports: 47, importBytes: 2799117, outputBytes: 1391782, outputFiles: 'dist/human.esm.js' }
2021-08-31 12:25:23 INFO: Running Linter: [ 'server/', 'src/', 'tfjs/', 'test/', 'demo/', [length]: 5 ]
2021-08-31 12:25:47 INFO: Linter complete: files: 83 errors: 0 warnings: 0
2021-08-31 12:25:47 INFO: Generate ChangeLog: [ '/home/vlado/dev/human/CHANGELOG.md', [length]: 1 ]
2021-08-31 12:25:47 INFO: Generate Typings: [ 'src/human.ts', [length]: 1 ] outDir: [ 'types', [length]: 1 ]
2021-08-31 12:26:01 INFO: Generate TypeDocs: [ 'src/human.ts', [length]: 1 ] outDir: [ 'typedoc', [length]: 1 ]
2021-08-31 12:26:14 INFO: Documentation generated at /home/vlado/dev/human/typedoc 1
2021-09-10 20:55:41 INFO: @vladmandic/human version 2.1.5
2021-09-10 20:55:41 INFO: User: vlado Platform: linux Arch: x64 Node: v16.5.0
2021-09-10 20:55:41 INFO: Application: { name: '@vladmandic/human', version: '2.1.5' }
2021-09-10 20:55:41 INFO: Environment: { profile: 'production', config: 'build.json', tsconfig: true, eslintrc: true, git: true }
2021-09-10 20:55:41 INFO: Toolchain: { build: '0.3.4', esbuild: '0.12.26', typescript: '4.4.3', typedoc: '0.21.9', eslint: '7.32.0' }
2021-09-10 20:55:41 STATE: Clean: { locations: [ 'dist/*', 'types/*', 'typedoc/*', [length]: 3 ] }
2021-09-10 20:55:41 STATE: Build: { name: 'tfjs for nodejs with cpu', type: 'production', format: 'cjs', platform: 'node', input: 'tfjs/tf-node.ts', output: 'dist/tfjs.esm.js', files: 1, inputBytes: 102, outputBytes: 1416 }
2021-09-10 20:55:41 STATE: Build: { name: 'human for nodejs with cpu', type: 'production', format: 'cjs', platform: 'node', input: 'src/human.ts', output: 'dist/human.node.js', files: 47, inputBytes: 456844, outputBytes: 396579 }
2021-09-10 20:55:41 STATE: Build: { name: 'tfjs for nodejs with gpu', type: 'production', format: 'cjs', platform: 'node', input: 'tfjs/tf-node-gpu.ts', output: 'dist/tfjs.esm.js', files: 1, inputBytes: 110, outputBytes: 1424 }
2021-09-10 20:55:41 STATE: Build: { name: 'human for nodejs with gpu', type: 'production', format: 'cjs', platform: 'node', input: 'src/human.ts', output: 'dist/human.node-gpu.js', files: 47, inputBytes: 456852, outputBytes: 396583 }
2021-09-10 20:55:41 STATE: Build: { name: 'tfjs for nodejs with wasm', type: 'production', format: 'cjs', platform: 'node', input: 'tfjs/tf-node-wasm.ts', output: 'dist/tfjs.esm.js', files: 1, inputBytes: 149, outputBytes: 1491 }
2021-09-10 20:55:41 STATE: Build: { name: 'human for nodejs with wasm', type: 'production', format: 'cjs', platform: 'node', input: 'src/human.ts', output: 'dist/human.node-wasm.js', files: 47, inputBytes: 456919, outputBytes: 396655 }
2021-09-10 20:55:41 STATE: Build: { name: 'tfjs for browser esm nobundle', type: 'production', format: 'esm', platform: 'browser', input: 'tfjs/tf-browser.ts', output: 'dist/tfjs.esm.js', files: 1, inputBytes: 2168, outputBytes: 1590 }
2021-09-10 20:55:41 STATE: Build: { name: 'human for browser esm nobundle', type: 'production', format: 'esm', platform: 'browser', input: 'src/human.ts', output: 'dist/human.esm-nobundle.js', files: 47, inputBytes: 457018, outputBytes: 398559 }
2021-09-10 20:55:42 STATE: Build: { name: 'tfjs for browser esm bundle', type: 'production', format: 'esm', platform: 'browser', input: 'tfjs/tf-browser.ts', output: 'dist/tfjs.esm.js', files: 7, inputBytes: 2168, outputBytes: 2343946 }
2021-09-10 20:55:42 STATE: Build: { name: 'human for browser iife bundle', type: 'production', format: 'iife', platform: 'browser', input: 'src/human.ts', output: 'dist/human.js', files: 47, inputBytes: 2799374, outputBytes: 2716138 }
2021-09-10 20:55:42 STATE: Build: { name: 'human for browser esm bundle', type: 'production', format: 'esm', platform: 'browser', input: 'src/human.ts', output: 'dist/human.esm.js', files: 47, inputBytes: 2799374, outputBytes: 2583497 }
2021-09-10 20:55:58 STATE: Typings: { input: 'src/human.ts', output: 'types', files: 47 }
2021-09-10 20:56:04 STATE: TypeDoc: { input: 'src/human.ts', output: 'typedoc', objects: 14, index: true }
2021-09-10 20:56:30 STATE: Lint: { locations: [ 'src/**/*.ts', 'test/*.js', 'demo/**/*.js', [length]: 3 ], files: 75, errors: 0, warnings: 0 }
2021-09-10 20:56:30 STATE: ChangeLog: { repository: 'https://github.com/vladmandic/human', branch: 'main', output: 'CHANGELOG.md' }
```
<br>
@ -79,3 +75,6 @@ Development dependencies are:
- [eslint](https://github.com/eslint) used for code linting
- [typescript](https://www.typescriptlang.org/) used to generate typings
- [typedoc](https://typedoc.org/) used to generate API specifications
Development build is started by running `npm run dev`

@ -12,75 +12,42 @@ Self-signed test certificate was generated using:
openssl req -x509 -newkey rsa:4096 -nodes -keyout https.key -out https.crt -days 365 -subj "/C=US/ST=Florida/L=Miami/O=@vladmandic"
```
If you want to use your own certificate, edit `server/dev.js`:
If you want to use your own certificate, edit `build.json`:
By default, secure http2 web server will run on port `10031` and unsecure http server will run on port `10030` which is configurable in `build.json`
Development environment is started by running `npm run dev`
```js
const options = {
key: fs.readFileSync('server/https.key'),
cert: fs.readFileSync('server/https.crt'),
};
```
Once SSL certificates have been provided (defalt test certificate or your own), simply run
```shell
npm run dev
```
On first start, it will install all development dependencies required to rebuild `Human` library
Dev version of the library runs without code minification for easier debugging while production version is fully minified
By default, secure http2 web server will run on port `10031` and unsecure http server will run on port `10030` which is configurable in `server/dev.js:options.port`
```log
npm run dev
> @vladmandic/human@0.9.15 dev /home/vlado/dev/human
> npm install && node server/dev.js
audited 327 packages in 2.71s
found 0 vulnerabilities
2020-12-12 10:12:52 INFO: @vladmandic/human version 0.9.15
2020-12-12 10:12:52 INFO: User: vlado Platform: linux Arch: x64 Node: v15.0.1
2020-12-12 10:12:52 INFO: Build: file startup all target: es2018
2020-12-12 10:12:52 STATE: HTTP server listening: 10030
2020-12-12 10:12:52 STATE: HTTP2 server listening: 10031
2020-12-12 10:12:52 STATE: Monitoring: [ 'package.json', 'config.ts', 'demo', 'src', [length]: 4 ]
2020-12-12 10:12:52 STATE: Build for: browserBundle type: tfjs: { modules: 1061, moduleBytes: 3772720, imports: 7, importBytes: 1784, outputBytes: 1522244, outputFiles: 'dist/tfjs.esm.js' }
2020-12-12 10:12:53 STATE: Build for: browserBundle type: iife: { imports: 37, importBytes: 1982201, outputBytes: 1830260, outputFiles: 'dist/human.js' }
2020-12-12 10:12:53 STATE: Build for: browserBundle type: esm: { imports: 37, importBytes: 1982201, outputBytes: 1830186, outputFiles: 'dist/human.esm.js' }
2020-12-12 10:12:54 STATE: Build for: browserBundle type: demo: { imports: 5, importBytes: 1890884, outputBytes: 1876862, outputFiles: 'dist/demo-browser-index.js' }
2020-12-12 10:12:54 DATA: GET/2.0 200 text/html 6463 / ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 image/x-icon 5063 /favicon.ico ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 text/javascript 1876862 /dist/demo-browser-index.js ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/octet-stream 181500 /assets/lato-light.woff2 ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/json 79014 /models/blazeface-back.json ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/json 89231 /models/facemesh.json ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/json 121966 /models/iris.json ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/json 94507 /models/age.json ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/json 93349 /models/gender.json ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/json 17954 /models/emotion.json ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/json 48039 /models/posenet.json ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/json 128180 /models/handdetect.json ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/json 129067 /models/handskeleton.json ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/octet-stream 538928 /models/blazeface-back.bin ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/octet-stream 2599092 /models/iris.bin ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/octet-stream 2955780 /models/facemesh.bin ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/octet-stream 161240 /models/age.bin ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/octet-stream 5032780 /models/posenet.bin ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/octet-stream 161236 /models/gender.bin ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/octet-stream 7031064 /models/handdetect.bin ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/octet-stream 820516 /models/emotion.bin ::ffff:192.168.0.200
2020-12-12 10:12:55 DATA: GET/2.0 200 application/octet-stream 5502280 /models/handskeleton.bin ::ffff:192.168.0.200
2021-09-10 21:03:37 INFO: @vladmandic/human version 2.1.5
2021-09-10 21:03:37 INFO: User: vlado Platform: linux Arch: x64 Node: v16.5.0
2021-09-10 21:03:37 INFO: Application: { name: '@vladmandic/human', version: '2.1.5' }
2021-09-10 21:03:37 INFO: Environment: { profile: 'development', config: 'build.json', tsconfig: true, eslintrc: true, git: true }
2021-09-10 21:03:37 INFO: Toolchain: { build: '0.3.4', esbuild: '0.12.26', typescript: '4.4.3', typedoc: '0.21.9', eslint: '7.32.0' }
2021-09-10 21:03:37 STATE: WebServer: { ssl: false, port: 10030, root: '.' }
2021-09-10 21:03:37 STATE: WebServer: { ssl: true, port: 10031, root: '.', sslKey: 'node_modules/@vladmandic/build/cert/https.key', sslCrt: 'node_modules/@vladmandic/build/cert/https.crt' }
2021-09-10 21:03:37 STATE: Watch: { locations: [ 'test/src/**', 'src/**', 'tfjs/*', [length]: 3 ] }
2021-09-10 21:03:37 STATE: Watch: { locations: [ 'test/src/**', 'src/**', 'tfjs/*', [length]: 3 ] }
2021-09-10 21:03:37 STATE: Watch: { locations: [ 'test/src/**', 'src/**', 'tfjs/*', [length]: 3 ] }
2021-09-10 21:07:48 INFO: Watch: { event: 'modify', input: 'src/human.ts' }
2021-09-10 21:07:48 STATE: Build: { name: 'tfjs for browser esm bundle', type: 'development', format: 'esm', platform: 'browser', input: 'tfjs/tf-browser.ts', output: 'dist/tfjs.esm.js', files: 7, inputBytes: 2168, outputBytes: 2343946 }
2021-09-10 21:07:49 STATE: Build: { name: 'human for browser esm bundle', type: 'development', format: 'esm', platform: 'browser', input: 'src/human.ts', output: 'dist/human.esm.js', files: 47, inputBytes: 2799374, outputBytes: 2583497 }
2021-09-10 21:07:31 DATA: GET/1.1 200 text/html; charset=utf-8 6435 / ::ffff:192.168.0.200
2021-09-10 21:07:31 DATA: GET/1.1 200 text/css; charset=utf-8 107884 /icons.css ::ffff:192.168.0.200
2021-09-10 21:07:31 DATA: GET/1.1 200 text/javascript; charset=utf-8 44675 /index.js ::ffff:192.168.0.200
2021-09-10 21:07:31 DATA: GET/1.1 200 text/javascript; charset=utf-8 2583497 /dist/human.esm.js ::ffff:192.168.0.200
...
```
## Human as a Daemon
If you want to run `Human` as a `systemd` service on `Linux`,
take a look at included sample `human.service` file and
modify NodeJS path in `ExecStart` and your working folder in `WorkingDirectory`
take a look at included sample `human.service` file:
- modify NodeJS path in `ExecStart`
- modify path to `@vladmandic/build` in `ExecStart`
- set your working folder in `WorkingDirectory`
- ser your user in `User`
```text
[Unit]
@ -90,8 +57,8 @@ After=network.target network-online.target
[Service]
Type=simple
Environment="NODE_ENV=production"
ExecStart=<path-to-node> server/serve.js
WorkingDirectory=<your-project-folder>
ExecStart=/home/vlado/.nvm/versions/node/v16.5.0/bin/node /home/vlado/dev/human/node_modules/@vladmandic/build/src/build.js development
WorkingDirectory=/home/vlado/dev/human
StandardOutput=inherit
StandardError=inherit
Restart=always

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 480 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 855 B

File diff suppressed because one or more lines are too long

@ -1,50 +0,0 @@
<!doctype html>
<html class="default no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{{#ifCond model.name '==' project.name}}{{project.name}}{{else}}{{model.name}} | {{project.name}}{{/ifCond}}</title>
<meta name="description" content="Documentation for {{project.name}}">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="{{relativeURL "assets/css/main.css"}}">
<script async src="{{relativeURL "assets/js/search.js"}}" id="search-script"></script>
</head>
<body>
{{> header}}
<div class="container container-main">
<div class="row">
<div class="col-8 col-content">
{{{contents}}}
</div>
<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
<nav class="tsd-navigation primary">
<ul>
{{#each navigation.children}}
{{> navigation}}
{{/each}}
</ul>
</nav>
<nav class="tsd-navigation secondary menu-sticky">
<ul class="before-current">
{{#each toc.children}}
{{> toc.root}}
{{/each}}
</ul>
</nav>
</div>
</div>
</div>
{{> footer}}
<div class="overlay"></div>
<script src="{{relativeURL "assets/js/main.js"}}"></script>
{{> analytics}}
</body>
</html>

@ -1,11 +0,0 @@
{{#if settings.gaID}}
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', '{{settings.gaID}}', '{{settings.gaSite}}');
ga('send', 'pageview');
</script>
{{/if}}

@ -1,16 +0,0 @@
{{#if parent}}
{{#with parent}}{{> breadcrumb}}{{/with}}
<li>
{{#if url}}
<a href="{{relativeURL url}}">{{name}}</a>
{{else}}
<span>{{name}}</span>
{{/if}}
</li>
{{else}}
{{#if url}}
<li>
<a href="{{relativeURL url}}">{{ name }}</a>
</li>
{{/if}}
{{/if}}

@ -1,22 +0,0 @@
{{#with comment}}
{{#if hasVisibleComponent}}
<div class="tsd-comment tsd-typography">
{{#if shortText}}
<div class="lead">
{{#markdown}}{{{shortText}}}{{/markdown}}
</div>
{{/if}}
{{#if text}}
{{#markdown}}{{{text}}}{{/markdown}}
{{/if}}
{{#if tags}}
<dl class="tsd-comment-tags">
{{#each tags}}
<dt>{{tagName}}</dt>
<dd>{{#markdown}}{{{text}}}{{/markdown}}</dd>
{{/each}}
</dl>
{{/if}}
</div>
{{/if}}
{{/with}}

@ -1,21 +0,0 @@
<footer{{#unless settings.hideGenerator}} class="with-border-bottom"{{/unless}}>
<div class="container">
<h2>Legend</h2>
<div class="tsd-legend-group">
{{#each legend}}
<ul class="tsd-legend">
{{#each .}}
<li class="{{#compact}}{{#each classes}} {{.}}{{/each}}{{/compact}}"><span class="tsd-kind-icon">{{name}}</span></li>
{{/each}}
</ul>
{{/each}}
</div>
</div>
</footer>
{{#unless settings.hideGenerator}}
<div class="container tsd-generator">
<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
</div>
{{/unless}}

@ -1,70 +0,0 @@
<header>
<div class="tsd-page-toolbar">
<div class="container">
<div class="table-wrap">
<div class="table-cell" id="tsd-search" data-index="{{relativeURL "assets/js/search.json"}}" data-base="{{relativeURL "./"}}">
<div class="field">
<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
<input id="tsd-search-field" type="text" />
</div>
<ul class="results">
<li class="state loading">Preparing search index...</li>
<li class="state failure">The search index is not available</li>
</ul>
<a href="{{relativeURL "index.html"}}" class="title">{{project.name}}</a>
</div>
<div class="table-cell" id="tsd-widgets">
<div id="tsd-filter">
<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
<div class="tsd-filter-group">
<div class="tsd-select" id="tsd-filter-visibility">
<span class="tsd-select-label">All</span>
<ul class="tsd-select-list">
<li data-value="public">Public</li>
<li data-value="protected">Public/Protected</li>
<li data-value="private" class="selected">All</li>
</ul>
</div>
<input type="checkbox" id="tsd-filter-inherited" checked />
<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
{{#unless settings.excludeExternals}}
<input type="checkbox" id="tsd-filter-externals" checked />
<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
{{/unless}}
</div>
</div>
<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
</div>
</div>
</div>
</div>
<div class="tsd-page-title">
<div class="container">
{{#if model.parent}} {{! Don't show breadcrumbs on main project page, it is the root page. !}}
<ul class="tsd-breadcrumb">
{{#with model}}{{> breadcrumb}}{{/with}}
</ul>
{{/if}}
<h1>{{#compact}}
{{#ifCond model.kindString "!==" "Project" }}
{{model.kindString}}&nbsp;
{{/ifCond}}
{{model.name}}
{{#if model.typeParameters}}
&lt;
{{#each model.typeParameters}}
{{#if @index}},&nbsp;{{/if}}
{{name}}
{{/each}}
&gt;
{{/if}}
{{/compact}}</h1>
</div>
</div>
</header>

@ -1,17 +0,0 @@
<ul class="tsd-hierarchy">
{{#each types}}
<li>
{{#if ../isTarget}}
<span class="target">{{this}}</span>
{{else}}
{{#compact}}{{> type}}{{/compact}}
{{/if}}
{{#if @last}}
{{#with ../next}}
{{> hierarchy}}
{{/with}}
{{/if}}
</li>
{{/each}}
</ul>

@ -1,50 +0,0 @@
{{#if categories}}
<section class="tsd-panel-group tsd-index-group">
<h2>Index</h2>
<section class="tsd-panel tsd-index-panel">
<div class="tsd-index-content">
{{#each categories}}
<section class="tsd-index-section">
<h3>{{title}}</h3>
<ul class="tsd-index-list">
{{#each children}}
<li class="{{cssClasses}}"><a href="{{relativeURL url}}" class="tsd-kind-icon">{{#if name}}{{{wbr name}}}{{else}}<em>{{{wbr kindString}}}</em>{{/if}}</a></li>
{{/each}}
</ul>
</section>
{{/each}}
</div>
</section>
</section>
{{else}}
{{#if groups}}
<section class="tsd-panel-group tsd-index-group">
<h2>Index</h2>
<section class="tsd-panel tsd-index-panel">
<div class="tsd-index-content">
{{#each groups}}
<section class="tsd-index-section {{cssClasses}}">
{{#if categories}}
{{#each categories}}
<h3>{{#if title}}{{title}} {{/if}}{{../title}}</h3>
<ul class="tsd-index-list">
{{#each children}}
<li class="{{cssClasses}}"><a href="{{relativeURL url}}" class="tsd-kind-icon">{{#if name}}{{{wbr name}}}{{else}}<em>{{{wbr kindString}}}</em>{{/if}}</a></li>
{{/each}}
</ul>
{{/each}}
{{else}}
<h3>{{title}}</h3>
<ul class="tsd-index-list">
{{#each children}}
<li class="{{cssClasses}}"><a href="{{relativeURL url}}" class="tsd-kind-icon">{{#if name}}{{{wbr name}}}{{else}}<em>{{{wbr kindString}}}</em>{{/if}}</a></li>
{{/each}}
</ul>
{{/if}}
</section>
{{/each}}
</div>
</section>
</section>
{{/if}}
{{/if}}

@ -1,36 +0,0 @@
<div class="tsd-signature tsd-kind-icon">{{#compact}}
{{{wbr name}}}
{{#if typeParameters}}
&lt;
{{#each typeParameters}}
{{#if @index}},&nbsp;{{/if}}
{{name}}
{{/each}}
&gt;
{{/if}}
<span class="tsd-signature-symbol">{{#if isOptional}}?{{/if}}:</span>&nbsp;{{#with type}}{{>type}}{{/with}}
{{#if defaultValue}}
<span class="tsd-signature-symbol">
&nbsp;=&nbsp;
{{defaultValue}}
</span>
{{/if}}
{{/compact}}</div>
{{> member.sources}}
{{> comment}}
{{#if typeParameters}}
<h4 class="tsd-type-parameters-title">Type parameters</h4>
{{> typeParameters}}
{{/if}}
{{#if type.declaration}}
<div class="tsd-type-declaration">
<h4>Type declaration</h4>
{{#with type.declaration}}
{{> parameter}}
{{/with}}
</div>
{{/if}}

@ -1,37 +0,0 @@
<ul class="tsd-signatures {{cssClasses}}">
{{#if getSignature}}
{{#with getSignature}}
<li class="tsd-signature tsd-kind-icon">{{#compact}}
<span class="tsd-signature-symbol">get</span>&nbsp;
{{../name}}
{{> member.signature.title hideName=true }}
{{/compact}}</li>
{{/with}}
{{/if}}
{{#if setSignature}}
{{#with setSignature}}
<li class="tsd-signature tsd-kind-icon">{{#compact}}
<span class="tsd-signature-symbol">set</span>&nbsp;
{{../name}}
{{> member.signature.title hideName=true }}
{{/compact}}</li>
{{/with}}
{{/if}}
</ul>
<ul class="tsd-descriptions">
{{#if getSignature}}
{{#with getSignature}}
<li class="tsd-description">
{{> member.signature.body }}
</li>
{{/with}}
{{/if}}
{{#if setSignature}}
{{#with setSignature}}
<li class="tsd-description">
{{> member.signature.body }}
</li>
{{/with}}
{{/if}}
</ul>

@ -1,24 +0,0 @@
<section class="tsd-panel tsd-member {{cssClasses}}">
<a name="{{anchor}}" class="tsd-anchor"></a>
{{#if name}}
<h3>{{#each flags}}<span class="tsd-flag ts-flag{{this}}">{{this}}</span> {{/each}}{{{wbr name}}}</h3>
{{/if}}
{{#if signatures}}
{{> member.signatures}}
{{else}}{{#if hasGetterOrSetter}}
{{> member.getterSetter}}
{{else}}{{#if isReference}}
{{> member.reference}}
{{else}}
{{> member.declaration}}
{{/if}}{{/if}}{{/if}}
{{#each groups}}
{{#each children}}
{{#unless hasOwnDocument}}
{{> member}}
{{/unless}}
{{/each}}
{{/each}}
</section>

@ -1,11 +0,0 @@
{{#with tryGetTargetReflectionDeep}}
{{#ifCond ../name '===' name}}
Re-exports <a href="{{relativeURL url}}">{{name}}</a>
{{else if flags.isExported}}
Renames and re-exports <a href="{{relativeURL url}}">{{name}}</a>
{{else}}
Renames and exports <a href="{{relativeURL url}}">{{name}}</a>
{{/ifCond}}
{{else}}
Re-exports {{name}}
{{/with}}

@ -1,56 +0,0 @@
{{#unless hideSources}}
{{> member.sources}}
{{/unless}}
{{> comment}}
{{#if typeParameters}}
<h4 class="tsd-type-parameters-title">Type parameters</h4>
{{> typeParameters}}
{{/if}}
{{#if parameters}}
<h4 class="tsd-parameters-title">Parameters</h4>
<ul class="tsd-parameters">
{{#each parameters}}
<li>
<h5>{{#compact}}
{{#each flags}}
<span class="tsd-flag ts-flag{{this}}">{{this}}</span>&nbsp;
{{/each}}
{{#if flags.isRest}}<span class="tsd-signature-symbol">...</span>{{/if}}
{{name}}:&nbsp;
{{#with type}}{{>type}}{{/with}}
{{#if defaultValue}}
<span class="tsd-signature-symbol">
&nbsp;=&nbsp;
{{defaultValue}}
</span>
{{/if}}
{{/compact}}</h5>
{{> comment}}
{{#if type.declaration}}
{{#with type.declaration}}
{{> parameter}}
{{/with}}
{{/if}}
</li>
{{/each}}
</ul>
{{/if}}
{{#if type}}
<h4 class="tsd-returns-title">Returns {{#compact}}{{#with type}}{{>type}}{{/with}}{{/compact}}</h4>
{{#if comment.returns}}
{{#markdown}}{{{comment.returns}}}{{/markdown}}
{{/if}}
{{#if type.declaration}}
{{#with type.declaration}}
{{> parameter}}
{{/with}}
{{/if}}
{{/if}}

@ -1,41 +0,0 @@
{{#unless hideName}}
{{{wbr name}}}
{{else}} {{! This ugliness goes away when we stop naming constructor signatures "new X"}}
{{#ifCond kindString "===" "Constructor signature"}}
{{#if flags.isAbstract}}
<span class="tsd-signature-symbol">abstract </span>
{{/if}}
<span class="tsd-signature-symbol">new </span>
{{/ifCond}}
{{/unless}}
{{#if typeParameters}}
&lt;
{{#each typeParameters}}
{{#if @index}},&nbsp;{{/if}}
{{name}}
{{/each}}
&gt;
{{/if}}
<span class="tsd-signature-symbol">(</span>
{{#each parameters}}
{{#if @index}},&nbsp;{{/if}}
{{#if flags.isRest}}<span class="tsd-signature-symbol">...</span>{{/if}}
{{name}}
<span class="tsd-signature-symbol">
{{#if flags.isOptional}}?{{/if}}
{{#if defaultValue}}?{{/if}}
:&nbsp;
</span>
{{#with type}}{{>type}}{{/with}}
{{/each}}
<span class="tsd-signature-symbol">)</span>
{{#if type}}
{{#if arrowStyle}}
<span class="tsd-signature-symbol"> =&gt; </span>
{{else}}
<span class="tsd-signature-symbol">: </span>
{{/if}}
{{#with type}}
{{>type}}
{{/with}}
{{/if}}

@ -1,13 +0,0 @@
<ul class="tsd-signatures {{cssClasses}}">
{{#each signatures}}
<li class="tsd-signature tsd-kind-icon">{{#compact}}{{> member.signature.title }}{{/compact}}</li>
{{/each}}
</ul>
<ul class="tsd-descriptions">
{{#each signatures}}
<li class="tsd-description">
{{> member.signature.body }}
</li>
{{/each}}
</ul>

@ -1,22 +0,0 @@
<aside class="tsd-sources">
{{#if implementationOf}}
<p>Implementation of {{#with implementationOf}}{{> typeAndParent}}{{/with}}</p>
{{/if}}
{{#if inheritedFrom}}
<p>Inherited from {{#with inheritedFrom}}{{> typeAndParent}}{{/with}}</p>
{{/if}}
{{#if overwrites}}
<p>Overrides {{#with overwrites}}{{> typeAndParent}}{{/with}}</p>
{{/if}}
{{#if sources}}
<ul>
{{#each sources}}
{{#if url}}
<li>Defined in <a href="{{url}}">{{fileName}}:{{line}}</a></li>
{{else}}
<li>Defined in {{fileName}}:{{line}}</li>
{{/if}}
{{/each}}
</ul>
{{/if}}
</aside>

@ -1,21 +0,0 @@
{{#if categories}}
{{#each categories}}
<section class="tsd-panel-group tsd-member-group {{cssClasses}}">
<h2>{{#if title}}{{title}} {{/if}}{{../title}}</h2>
{{#each children}}
{{#unless hasOwnDocument}}
{{> member}}
{{/unless}}
{{/each}}
</section>
{{/each}}
{{else}}
<section class="tsd-panel-group tsd-member-group {{cssClasses}}">
<h2>{{title}}</h2>
{{#each children}}
{{#unless hasOwnDocument}}
{{> member}}
{{/unless}}
{{/each}}
</section>
{{/if}}

@ -1,20 +0,0 @@
{{#if categories}}
{{#each categories}}
{{#unless allChildrenHaveOwnDocument}}
<section class="tsd-panel-group tsd-member-group {{cssClasses}}">
<h2>{{title}}</h2>
{{#each children}}
{{#unless hasOwnDocument}}
{{> member}}
{{/unless}}
{{/each}}
</section>
{{/unless}}
{{/each}}
{{else}}
{{#each groups}}
{{#unless allChildrenHaveOwnDocument}}
{{> members.group}}
{{/unless}}
{{/each}}
{{/if}}

@ -1,26 +0,0 @@
{{#if isVisible}}
{{#if isLabel}}
<li class="label {{cssClasses}}">
<span>{{{wbr title}}}</span>
</li>
{{else}}
{{#if isGlobals}}
<li class="globals {{#if isInPath}}current{{/if}} {{cssClasses}}">
<a href="{{relativeURL url}}"><em>{{{wbr title}}}</em></a>
</li>
{{else}}
<li class="{{#if isInPath}}current{{/if}} {{cssClasses}}">
<a href="{{relativeURL url}}">{{{wbr title}}}</a>
{{#if isInPath}}
{{#if children}}
<ul>
{{#each children}}
{{> navigation}}
{{/each}}
</ul>
{{/if}}
{{/if}}
</li>
{{/if}}
{{/if}}
{{/if}}

@ -1,132 +0,0 @@
<ul class="tsd-parameters">
{{#if signatures}}
<li class="tsd-parameter-signature">
<ul class="tsd-signatures {{cssClasses}}">
{{#each signatures}}
<li class="tsd-signature tsd-kind-icon">{{#compact}}
{{> member.signature.title hideName=true }}
{{/compact}}</li>
{{/each}}
</ul>
<ul class="tsd-descriptions">
{{#each signatures}}
<li class="tsd-description">{{> member.signature.body hideSources=true }}</li>
{{/each}}
</ul>
</li>
{{/if}}
{{#if indexSignature}}
<li class="tsd-parameter-index-signature">
<h5>{{#compact}}
<span class="tsd-signature-symbol">[</span>
{{#each indexSignature.parameters}}
{{#if flags.isRest}}<span class="tsd-signature-symbol">...</span>{{/if}}{{name}}:&nbsp;{{#with type}}{{>type}}{{/with}}
{{/each}}
<span class="tsd-signature-symbol">]:&nbsp;</span>
{{#with indexSignature.type}}{{>type}}{{/with}}
{{/compact}}</h5>
{{#with indexSignature}}
{{> comment}}
{{/with}}
{{#if indexSignature.type.declaration}}
{{#with indexSignature.type.declaration}}
{{> parameter}}
{{/with}}
{{/if}}
</li>
{{/if}}
{{#each children}}
{{#if signatures}}
<li class="tsd-parameter">
<h5>{{#compact}}
{{#if flags.isRest}}<span class="tsd-signature-symbol">...</span>{{/if}}
{{{wbr name}}}
<span class="tsd-signature-symbol">
{{#if isOptional}}?{{/if}}
:&nbsp;
</span>
function
{{/compact}}</h5>
{{> member.signatures}}
</li>
{{else}}{{#if type}} {{! standard type }}
<li class="tsd-parameter">
<h5>{{#compact}}
{{#each flags}}
<span class="tsd-flag ts-flag{{this}}">{{this}}</span>&nbsp;
{{/each}}
{{#if flags.isRest}}<span class="tsd-signature-symbol">...</span>{{/if}}
{{#with type}}
{{{wbr ../name}}}
<span class="tsd-signature-symbol">
{{#if ../flags.isOptional}}?{{/if}}
:&nbsp;
</span>
{{>type}}
{{/with}}
{{/compact}}</h5>
{{> comment}}
{{#if children}}
{{> parameter}}
{{/if}}
{{#if type.declaration}}
{{#with type.declaration}}
{{> parameter}}
{{/with}}
{{/if}}
</li>
{{else}} {{! getter/setter }}
{{#with getSignature}} {{! getter }}
<li class="tsd-parameter">
<h5>{{#compact}}
{{#each flags}}
<span class="tsd-flag ts-flag{{this}}">{{this}}</span>&nbsp;
{{/each}}
<span class="tsd-signature-symbol">get&nbsp;</span>
{{{wbr ../name}}}
<span class="tsd-signature-symbol">():&nbsp;</span>
{{#with type}}
{{> type}}
{{/with}}
{{/compact}}</h5>
{{> comment }}
</li>
{{/with}}
{{#with setSignature}} {{! setter }}
<li class="tsd-parameter">
<h5>{{#compact}}
{{#each flags}}
<span class="tsd-flag ts-flag{{this}}">{{this}}</span>&nbsp;
{{/each}}
<span class="tsd-signature-symbol">set&nbsp;</span>
{{{wbr ../name}}}
<span class="tsd-signature-symbol">(</span>
{{#each parameters}}
{{name}}
<span class="tsd-signature-symbol">: </span>
{{#with type}}
{{> type}}
{{else}}
<span class="tsd-signature-type">any</span>
{{/with}}
{{/each}}
<span class="tsd-signature-symbol">):&nbsp;</span>
{{#with type}}
{{> type}}
{{/with}}
{{/compact}}</h5>
{{> comment }}
</li>
{{/with}}
{{/if}}{{/if}}
{{/each}}
</ul>

@ -1,10 +0,0 @@
<li class="{{#if isInPath}}current{{/if}} {{cssClasses}}">
<a href="{{relativeURL url}}" class="tsd-kind-icon">{{{wbr title}}}</a>
{{#if children}}
<ul>
{{#each children}}
{{> toc}}
{{/each}}
</ul>
{{/if}}
</li>

@ -1,18 +0,0 @@
{{#if isInPath}}
</ul>
<ul class="current">
{{/if}}
<li class="{{#if isInPath}}current{{/if}} {{cssClasses}}">
<a href="{{relativeURL url}}" class="tsd-kind-icon">{{{wbr title}}}</a>
{{#if children}}
<ul>
{{#each children}}
{{> toc}}
{{/each}}
</ul>
{{/if}}
</li>
{{#if isInPath}}
</ul>
<ul class="after-current">
{{/if}}

@ -1,335 +0,0 @@
{{! Each type gets its own inline helper to determine how it is rendered. }}
{{! The name of the helper is the value of the 'type' property on the type.}}
{{!
The type helper accepts an optional needsParens parameter that is checked
if an inner type may result in invalid output without them. For example:
1 | 2[] !== (1 | 2)[]
() => 1 | 2 !== (() => 1) | 2
}}
{{#*inline 'array'}}
{{#with elementType}}
{{> type needsParens=true}}
<span class="tsd-signature-symbol">[]</span>
{{/with}}
{{/inline}}
{{#*inline 'conditional'}}
{{#if needsParens}}
<span class="tsd-signature-symbol">(</span>
{{/if}}
{{#with checkType}}
{{> type needsParens=true}}
{{/with}}
<span class="tsd-signature-symbol"> extends </span>
{{#with extendsType}}
{{> type}}
{{/with}}
<span class="tsd-signature-symbol"> ? </span>
{{#with trueType}}
{{> type}}
{{/with}}
<span class="tsd-signature-symbol"> : </span>
{{#with falseType}}
{{> type}}
{{/with}}
{{#if needsParens}}
<span class="tsd-signature-symbol">)</span>
{{/if}}
{{/inline}}
{{#*inline 'indexedAccess'}}
{{#with objectType}}
{{> type}}
{{/with}}
<span class="tsd-signature-symbol">[</span>
{{#with indexType}}
{{> type}}
{{/with}}
<span class="tsd-signature-symbol">]</span>
{{/inline}}
{{#*inline 'inferred'}}
<span class="tsd-signature-symbol">infer </span> {{name}}
{{/inline}}
{{#*inline 'intersection'}}
{{#if needsParens}}
<span class="tsd-signature-symbol">(</span>
{{/if}}
{{#each types}}
{{#unless @first}}
<span class="tsd-signature-symbol"> &amp; </span>
{{/unless}}
{{> type}}
{{/each}}
{{#if needsParens}}
<span class="tsd-signature-symbol">)</span>
{{/if}}
{{/inline}}
{{#*inline 'intrinsic'}}
<span class="tsd-signature-type">{{name}}</span>
{{/inline}}
{{#*inline 'literal'}}
<span class="tsd-signature-type">{{stringify value}}</span>
{{/inline}}
{{#*inline 'mapped'}}
<span class="tsd-signature-symbol">{</span>
{{#ifCond readonlyModifier '===' '+'}}
<span class="tsd-signature-symbol">readonly </span>
{{else}}
{{#ifCond readonlyModifier '===' '-'}}
<span class="tsd-signature-symbol">-readonly </span>
{{/ifCond}}
{{/ifCond}}
<span class="tsd-signature-symbol">[ </span>
<span class="tsd-signature-type">{{parameter}}</span>
<span class="tsd-signature-symbol"> in </span>
{{#with parameterType}}
{{>type}}
{{/with}}
{{#with nameType}}
<span class="tsd-signature-symbol"> as </span>
{{>type}}
{{/with}}
<span class="tsd-signature-symbol">]</span>
{{#ifCond readonlyModifier '===' '+'}}
<span class="tsd-signature-symbol">?: </span>
{{else}}
{{#ifCond readonlyModifier '===' '-'}}
<span class="tsd-signature-symbol">-?: </span>
{{else}}
<span class="tsd-signature-symbol">: </span>
{{/ifCond}}
{{/ifCond}}
{{#with templateType}}
{{>type}}
{{/with}}
<span class="tsd-signature-symbol"> }</span>
{{/inline}}
{{#*inline 'optional'}}
{{#with elementType}}
{{> type}}
{{/with}}
<span class="tsd-signature-symbol">?</span>
{{/inline}}
{{#*inline 'predicate'}}
{{#if asserts}}
<span class="tsd-signature-symbol">asserts </span>
{{/if}}
<span class="tsd-signature-type">{{name}}</span>
{{#if targetType}}
<span class="tsd-signature-symbol"> is </span>
{{#with targetType}}
{{>type}}
{{/with}}
{{/if}}
{{/inline}}
{{#*inline 'query'}}
<span class="tsd-signature-symbol">typeof </span>
{{#with queryType}}
{{> type}}
{{/with}}
{{/inline}}
{{#*inline 'reference'}}
{{#with getReflection }}
<a href="{{relativeURL url}}" class="tsd-signature-type" data-tsd-kind="{{kindString}}">
{{name}}
</a>
{{else}}
<span class="tsd-signature-type">{{name}}</span>
{{/with}}
{{#if typeArguments}}
<span class="tsd-signature-symbol">&lt;</span>
{{#each typeArguments}}
{{#unless @first}}
<span class="tsd-signature-symbol">, </span>
{{/unless}}
{{> type}}
{{/each}}
<span class="tsd-signature-symbol">&gt;</span>
{{/if}}
{{/inline}}
{{#*inline 'reflection'}}
{{#if declaration.children}} {{! object literal }}
<span class="tsd-signature-symbol">{ </span>
{{#each declaration.children}}
{{#unless @first}}
<span class="tsd-signature-symbol">; </span>
{{/unless}}
{{#if getSignature}}
{{#if setSignature}}
{{name}}
<span class="tsd-signature-symbol">: </span>
{{#with getSignature.type}}
{{> type}}
{{else}}
<span class="tsd-signature-type">any</span>
{{/with}}
{{else}}
<span class="tsd-signature-symbol">get </span>
{{name}}
<span class="tsd-signature-symbol">(): </span>
{{#with getSignature.type}}
{{> type}}
{{else}}
<span class="tsd-signature-type">any</span>
{{/with}}
{{/if}}
{{else}}
{{#if setSignature}}
<span class="tsd-signature-symbol">set </span>
{{name}}
<span class="tsd-signature-symbol">(</span>
{{! Rather hacky to use each here... but we know there is exactly one. }}
{{#each setSignature.parameters}}
{{name}}
<span class="tsd-signature-symbol">: </span>
{{#with type}}
{{> type}}
{{else}}
<span class="tsd-signature-type">any</span>
{{/with}}
{{/each}}
<span class="tsd-signature-symbol">)</span>
{{else}}
{{name}}
{{#if flags.isOptional }}
<span class="tsd-signature-symbol">?: </span>
{{else}}
<span class="tsd-signature-symbol">: </span>
{{/if}}
{{#with type}}
{{> type}}
{{else}}
<span class="tsd-signature-type">any</span>
{{/with}}
{{/if}}
{{/if}}
{{/each}}
<span class="tsd-signature-symbol"> }</span>
{{else if declaration.signatures}}
{{#if (lookup declaration.signatures 1) }} {{! more than one signature}}
<span class="tsd-signature-symbol">{ </span>
{{#each declaration.signatures}}
{{> member.signature.title hideName=true}}
{{#unless @last}}
<span class="tsd-signature-symbol">; </span>
{{/unless}}
{{/each}}
<span class="tsd-signature-symbol"> }</span>
{{else}}
{{#if needsParens}}
<span class="tsd-signature-symbol">(</span>
{{/if}}
{{#with (lookup declaration.signatures '0') }}
{{> member.signature.title hideName=true arrowStyle=true}}
{{/with}}
{{#if needsParens}}
<span class="tsd-signature-symbol">)</span>
{{/if}}
{{/if}}
{{else}}
<span class="tsd-signature-symbol">{}</span>
{{/if}}
{{/inline}}
{{#*inline 'rest'}}
<span class="tsd-signature-symbol">...</span>
{{#with elementType}}
{{> type}}
{{/with}}
{{/inline}}
{{#*inline 'tuple'}}
<span class="tsd-signature-symbol">[</span>
{{#each elements}}
{{#unless @first}}
<span class="tsd-signature-symbol">, </span>
{{/unless}}
{{> type}}
{{/each}}
<span class="tsd-signature-symbol">]</span>
{{/inline}}
{{#*inline 'template-literal'}}
<span class="tsd-signature-symbol">`</span>
{{#if head}}
<span class="tsd-signature-type">{{head}}</span>
{{/if}}
{{#each tail}}
<span class="tsd-signature-symbol">${</span>
{{#with this.[0]}}
{{>type}}
{{/with}}
<span class="tsd-signature-symbol">}</span>
{{#if this.[1]}}
<span class="tsd-signature-type">{{this.[1]}}</span>
{{/if}}
{{/each}}
<span class="tsd-signature-symbol">`</span>
{{/inline}}
{{#*inline 'typeOperator'}}
<span class="tsd-signature-symbol">{{operator}} </span>
{{#with target}}
{{> type}}
{{/with}}
{{/inline}}
{{#*inline 'typeParameter'}}
<span class="tsd-signature-type">{{name}}</span>
{{/inline}}
{{#*inline 'union'}}
{{#if needsParens}}
<span class="tsd-signature-symbol">(</span>
{{/if}}
{{#each types}}
{{#unless @first}}
<span class="tsd-signature-symbol"> | </span>
{{/unless}}
{{> type needsParens=true}}
{{/each}}
{{#if needsParens}}
<span class="tsd-signature-symbol">)</span>
{{/if}}
{{/inline}}
{{#*inline 'unknown'}}
<span class="tsd-signature-type">{{name}}</span>
{{/inline}}
{{#*inline 'named-tuple-member'}}
{{name}}
{{#if isOptional}}
<span class="tsd-signature-symbol">?: </span>
{{else}}
<span class="tsd-signature-symbol">: </span>
{{/if}}
{{#with element}}
{{> type}}
{{/with}}
{{/inline}}
{{#if this}}
{{> (lookup . 'type') }}
{{else}}
<span class="tsd-signature-type">void</span>
{{/if}}

@ -1,42 +0,0 @@
{{#compact}}
{{#if this}}
{{#if elementType}}
{{#with elementType}}
{{> typeAndParent}}
{{/with}}
[]
{{else}}
{{#if reflection}}
{{#ifSignature reflection}}
{{#if reflection.parent.parent.url}}
<a href="{{relativeURL reflection.parent.parent.url}}">{{reflection.parent.parent.name}}</a>
{{else}}
{{reflection.parent.parent.name}}
{{/if}}
.
{{#if reflection.parent.url}}
<a href="{{relativeURL reflection.parent.url}}">{{reflection.parent.name}}</a>
{{else}}
{{reflection.parent.name}}
{{/if}}
{{else}}
{{#if reflection.parent.url}}
<a href="{{relativeURL reflection.parent.url}}">{{reflection.parent.name}}</a>
{{else}}
{{reflection.parent.name}}
{{/if}}
.
{{#if reflection.url}}
<a href="{{relativeURL reflection.url}}">{{reflection.name}}</a>
{{else}}
{{reflection.name}}
{{/if}}
{{/ifSignature}}
{{else}}
{{this}}
{{/if}}
{{/if}}
{{else}}
void
{{/if}}
{{/compact}}

@ -1,17 +0,0 @@
<ul class="tsd-type-parameters">
{{#each typeParameters}}
<li>
<h4>{{#compact}}
{{name}}
{{#if type}}
<span class="tsd-signature-symbol">:&nbsp;</span>
{{#with type}}{{> type}}{{/with}}
{{/if}}
{{#if default}}
&nbsp;=&nbsp;{{#with default}}{{> type}}{{/with}}
{{/if}}
{{/compact}}</h4>
{{> comment}}
</li>
{{/each}}
</ul>

@ -1,3 +0,0 @@
<div class="tsd-panel tsd-typography">
{{#markdown}}{{{model.readme}}}{{/markdown}}
</div>

@ -1,79 +0,0 @@
{{#with model}}
{{#if hasComment}}
<section class="tsd-panel tsd-comment">
{{> comment}}
</section>
{{/if}}
{{/with}}
{{#if model.typeParameters}}
<section class="tsd-panel tsd-type-parameters">
<h3>Type parameters</h3>
{{#with model}}{{> typeParameters}}{{/with}}
</section>
{{/if}}
{{#if model.typeHierarchy}}
<section class="tsd-panel tsd-hierarchy">
<h3>Hierarchy</h3>
{{#with model.typeHierarchy}}{{> hierarchy}}{{/with}}
</section>
{{/if}}
{{#if model.implementedTypes}}
<section class="tsd-panel">
<h3>Implements</h3>
<ul class="tsd-hierarchy">
{{#each model.implementedTypes}}
<li>{{#compact}}{{> type}}{{/compact}}</li>
{{/each}}
</ul>
</section>
{{/if}}
{{#if model.implementedBy}}
<section class="tsd-panel">
<h3>Implemented by</h3>
<ul class="tsd-hierarchy">
{{#each model.implementedBy}}
<li>{{#compact}}{{> type}}{{/compact}}</li>
{{/each}}
</ul>
</section>
{{/if}}
{{#if model.signatures}}
<section class="tsd-panel">
<h3 class="tsd-before-signature">Callable</h3>
{{#with model}}{{> member.signatures}}{{/with}}
</section>
{{/if}}
{{#if model.indexSignature}}
<section class="tsd-panel {{model.cssClasses}}">
<h3 class="tsd-before-signature">Indexable</h3>
<div class="tsd-signature tsd-kind-icon">{{#compact}}
<span class="tsd-signature-symbol">[</span>
{{#each model.indexSignature.parameters}}
{{name}}:&nbsp;{{#with type}}{{>type}}{{/with}}
{{/each}}
<span class="tsd-signature-symbol">]:&nbsp;</span>
{{#with model.indexSignature.type}}{{>type}}{{/with}}
{{/compact}}</div>
{{#with model.indexSignature}}
{{> comment}}
{{/with}}
{{#if model.indexSignature.type.declaration}}
{{#with model.indexSignature.type.declaration}}
{{> parameter}}
{{/with}}
{{/if}}
</section>
{{/if}}
{{#with model}}
{{> index}}
{{> members}}
{{/with}}