forked from f3rno64/node-ts-lib-template
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
194 lines (194 loc) · 39 KB
/
Copy pathindex.html
File metadata and controls
194 lines (194 loc) · 39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>@f3rno64/node-ts-lib-template</title><meta name="description" content="Documentation for @f3rno64/node-ts-lib-template"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css?cache=1725302008084"/><link rel="stylesheet" href="assets/highlight.css?cache=1725302008084"/><script defer src="assets/main.js?cache=1725302008084"></script><script async src="assets/search.js?cache=1725302008084" id="tsd-search-script"></script><script async src="assets/navigation.js?cache=1725302008084" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os"</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base="."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></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="index.html" class="title">@f3rno64/node-ts-lib-template</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><h2>@f3rno64/node-ts-lib-template</h2></div><div class="tsd-panel tsd-typography"><a id="md:nodejs-typescript-library-template" class="tsd-anchor"></a><h1><a href="#md:nodejs-typescript-library-template">Node.JS TypeScript Library Template</a></h1><p>This is a template repository meant to be used as a starting point for new
<a href="https://nodejs.org/en"><strong><code>Node.JS</code></strong></a> projects written in
<a href="https://www.typescriptlang.org/"><strong><code>TypeScript</code></strong></a>.</p>
<p>As this is a highly opinionated template, many tools are included and
pre-configured with sane and strict defaults to enforce a standard level of
code quality and a consistent style across projects.</p>
<p>With this in mind, feel free to edit the various config files to your liking.</p>
<a id="md:prerequisites" class="tsd-anchor"></a><h2><a href="#md:prerequisites">Prerequisites</a></h2><p>To view static documentation and coverage reports,
<a href="https://www.npmjs.com/package/http-server"><strong><code>http-server</code></strong></a> is recommended; it is included as a
development dependency for the <strong><code>serve:*</code></strong> commands, but for manual CLI
usage, install it with <strong><code>npm i -g http-server</code></strong>.</p>
<a id="md:setup" class="tsd-anchor"></a><h2><a href="#md:setup">Setup</a></h2><p><a href="https://pnpm.io/"><strong><code>pnpm</code></strong></a> is used as the package manager; install it with
<strong><code>npm i -g pnpm</code></strong> if you do not already have it.</p>
<p>Then, to get started, simply install dependencies with <strong><code>pnpm i</code></strong>.</p>
<a id="md:building-sources-and-documentation" class="tsd-anchor"></a><h3><a href="#md:building-sources-and-documentation">Building Sources and Documentation</a></h3><p>Three npm scripts are provided to build
<a href="https://www.typescriptlang.org/"><strong><code>TypeScript</code></strong></a> sources and generate documentation with
<a href="https://typedoc.org/"><strong><code>TypeDoc</code></strong></a>:</p>
<ul>
<li><strong><code>build</code></strong> -- runs both <strong><code>build:ts</code></strong> and <strong><code>build:docs</code></strong>.</li>
<li><strong><code>build:ts</code></strong> -- builds <a href="https://www.typescriptlang.org/"><strong><code>TypeScript</code></strong></a> sources from
<a href="/src"><strong><code>./src</code></strong></a> to native JavaScript files in <a href="/dist"><strong><code>./dist</code></strong></a>.</li>
<li><strong><code>build:docs</code></strong> -- builds documentation with
<a href="https://typedoc.org/"><strong><code>TypeDoc</code></strong></a> in <a href="/docs"><strong><code>./docs</code></strong></a>. Both
<a href="/LICENSE.md"><strong><code>LICENSE.md</code></strong></a> and <a href="/CHANGELOG.md"><strong><code>CHANGELOG.md</code></strong></a> are
copied into <a href="/docs"><strong><code>./docs</code></strong></a>.</li>
</ul>
<a id="md:viewing-documentation-site" class="tsd-anchor"></a><h4><a href="#md:viewing-documentation-site">Viewing Documentation Site</a></h4><p>After building the static HTML documentation with <strong><code>build:docs</code></strong>,
run <code>pnpm serve:docs</code> or <code>http-server docs</code> and navigate to
<a href="http://localhost:8080"><strong><code>localhost:8080</code></strong></a>.</p>
<a id="md:deploy-documentation-on-github-pages" class="tsd-anchor"></a><h3><a href="#md:deploy-documentation-on-github-pages">Deploy Documentation On GitHub Pages</a></h3><p>To enable GitHub Pages, access the repository settings and configure the Pages
settings to use the <code>main</code> (or <code>master</code>) branch and the <code>./docs</code> folder.</p>
<a id="md:testing" class="tsd-anchor"></a><h3><a href="#md:testing">Testing</a></h3><p><strong>Testing</strong> is done with <a href="https://mochajs.org/"><strong><code>mocha</code></strong></a> and <a href="https://www.chaijs.com/"><strong><code>chai</code></strong></a>.
<a href="https://github.com/istanbuljs/nyc"><strong><code>nyc</code></strong></a> is used to generate coverage reports. The following npm
scripts are provided:</p>
<ul>
<li><strong><code>test</code></strong> -- runs mocha on all TypeScript sources</li>
<li><strong><code>test:coverage</code></strong> -- like <strong><code>test</code></strong> but runs
<a href="https://github.com/istanbuljs/nyc"><strong><code>nyc</code></strong></a> to generate an HTML coverage report in <em><code>/coverage</code></em>.</li>
<li><strong><code>test:watch</code></strong> -- runs <a href="https://github.com/istanbuljs/nyc"><strong><code>nyc</code></strong></a> and <a href="https://mochajs.org/"><strong><code>mocha</code></strong></a>
continuously, re-running tests when any sources change.</li>
</ul>
<a id="md:viewing-test-coverage-report" class="tsd-anchor"></a><h4><a href="#md:viewing-test-coverage-report">Viewing Test Coverage Report</a></h4><p>After generating an HTML coverage report with <strong><code>test:coverage</code></strong>, view it by
running either <strong><code>serve:coverage</code></strong> or <code>http-server ./coverage</code> and navigating
to <a href="http://localhost:8080"><strong><code>localhost:8080</code></strong></a>.</p>
<a id="md:linting" class="tsd-anchor"></a><h3><a href="#md:linting">Linting</a></h3><p><strong>Linting</strong> is provided by <a href="https://eslint.org/"><strong><code>ESLint</code></strong></a> and
<a href="https://github.com/markdownlint/markdownlint"><strong><code>markdownlint</code></strong></a>. The following npm scripts are provided:</p>
<ul>
<li><p><strong><code>lint:eslint</code></strong> -- runs <a href="https://eslint.org/"><strong><code>ESLint</code></strong></a> on
<a href="/package.json"><strong><code>./package.json</code></strong></a> and <a href="/src"><strong><code>./src/**/*</code></strong></a> and
prints any errors.</p>
</li>
<li><p><strong><code>lint:markdownlint</code></strong> -- runs
<a href="https://github.com/markdownlint/markdownlint"><strong><code>markdownlint</code></strong></a> on <a href="/README.md"><strong><code>README.md</code></strong></a>
and prints any errors.</p>
</li>
<li><p><strong><code>lint:eslint:fix</code></strong> -- like <strong><code>lint:eslint</code></strong> but automatically fixes
linter errors where possible.</p>
</li>
<li><p><strong><code>lint:markdownlint:fix</code></strong> -- like <strong><code>lint:markdownlint</code></strong> but automatically
fixes linter errors where possible.</p>
</li>
<li><p><strong><code>lint</code></strong> -- runs both <strong><code>lint:eslint</code></strong> and <strong><code>lint:markdownlint</code></strong>.</p>
</li>
<li><p><strong><code>lint:fix</code></strong> -- runs both <strong><code>lint:eslint:fix</code></strong> and
<strong><code>lint:markdownlint:fix</code></strong></p>
</li>
</ul>
<a id="md:eslint-config-amp-plugins" class="tsd-anchor"></a><h4><a href="#md:eslint-config-amp-plugins"><a href="https://eslint.org/"><strong><code>ESLint</code></strong></a> Config & Plugins</a></h4><p>A strict <a href="https://eslint.org/"><strong><code>ESLint</code></strong></a> config is provided with many
plugins, the full list is below:</p>
<ul>
<li><a href="https://npmjs.com/package/eslint-plugin-chai-expect"><strong><code>eslint-plugin-chai-expect</code></strong></a> --
<a href="https://eslint.org/"><strong><code>ESLint</code></strong></a> plugin that checks for common chai.js expect() mistakes.</li>
<li><a href="https://npmjs.com/package/eslint-plugin-eslint-comments"><strong><code>eslint-plugin-eslint-comments</code></strong></a> --
<a href="https://eslint.org/"><strong><code>ESLint</code></strong></a> rules for JavaScript comments.</li>
<li><a href="https://npmjs.com/package/eslint-plugin-github"><strong><code>eslint-plugin-github</code></strong></a> -- An opinionated collection of
<a href="https://eslint.org/"><strong><code>ESLint</code></strong></a> rules used by GitHub.</li>
<li><a href="https://npmjs.com/package/eslint-plugin-immutable"><strong><code>eslint-plugin-immutable</code></strong></a> -- This is an
<a href="https://eslint.org/"><strong><code>ESLint</code></strong></a> plugin to disable all mutation in JavaScript.</li>
<li><a href="https://npmjs.com/package/eslint-plugin-json-format"><strong><code>eslint-plugin-json-format</code></strong></a> --
<a href="https://eslint.org/"><strong><code>ESLint</code></strong></a> plugin for JSON files.</li>
<li><a href="https://npmjs.com/package/eslint-plugin-jsonc"><strong><code>eslint-plugin-jsonc</code></strong></a> -- This
<a href="https://eslint.org/"><strong><code>ESLint</code></strong></a> plugin provides linting rules relate to better
ways to help you avoid problems when using <a href="https://www.json.org/json-en.html"><strong><code>JSON</code></strong></a>,
<a href="https://github.com/microsoft/node-jsonc-parser"><strong><code>JSONC</code></strong></a> and <a href="https://json5.org/"><strong><code>JSON5</code></strong></a>.</li>
<li><a href="https://npmjs.com/package/eslint-plugin-lodash"><strong><code>eslint-plugin-lodash</code></strong></a> -- Lodash-specific linting rules
for <a href="https://eslint.org/"><strong><code>ESLint</code></strong></a>.</li>
<li><a href="https://npmjs.com/package/eslint-plugin-mocha"><strong><code>eslint-plugin-mocha</code></strong></a> -- <a href="https://eslint.org/"><strong><code>ESLint</code></strong></a>
rules for mocha.</li>
<li><a href="https://npmjs.com/package/eslint-plugin-no-secrets"><strong><code>eslint-plugin-no-secrets</code></strong></a> -- An
<a href="https://eslint.org/"><strong><code>ESLint</code></strong></a> rule that searches for potential secrets/keys in
code and JSON files.</li>
<li><a href="https://npmjs.com/package/eslint-plugin-optimize-regex"><strong><code>eslint-plugin-optimize-regex</code></strong></a> -- Optimize regex literals.</li>
<li><a href="https://npmjs.com/package/eslint-plugin-promise"><strong><code>eslint-plugin-promise</code></strong></a> -- Enforce best practices for
JavaScript promises.</li>
<li><a href="https://github.com/purely-functional/eslint-plugin-pure"><strong><code>eslint-plugin-pure</code></strong></a> -- Enforce rules to make your code purely
functional by disallowing some language constructs.</li>
<li><a href="https://npmjs.com/package/eslint-plugin-regexp"><strong><code>eslint-plugin-regexp</code></strong></a> -- An <a href="https://eslint.org/"><strong><code>ESLint</code></strong></a>
plugin for finding RegExp mistakes and RegExp style guide violations.</li>
<li><a href="https://npmjs.com/package/eslint-plugin-sonarjs"><strong><code>eslint-plugin-sonarjs</code></strong></a> -- <a href="https://github.com/SonarSource/SonarJS"><strong><code>SonarJS</code></strong></a>
rules for <a href="https://eslint.org/"><strong><code>ESLint</code></strong></a> to help developers produce
<a href="https://www.sonarsource.com/solutions/clean-code/"><strong><code>Clean Code</code></strong></a> by detecting bugs and suspicious patterns.</li>
<li><a href="https://npmjs.com/package/eslint-plugin-switch-case"><strong><code>eslint-plugin-switch-case</code></strong></a> -- Switch-case-specific
linting rules for <a href="https://eslint.org/"><strong><code>ESLint</code></strong></a>.</li>
<li><a href="https://npmjs.com/package/eslint-plugin-tsdoc"><strong><code>eslint-plugin-tsdoc</code></strong></a> -- This <a href="https://eslint.org/"><strong><code>ESLint</code></strong></a>
plugin provides a rule for validating that TypeScript doc comments conform
to the <a href="https://tsdoc.org/"><strong><code>TSDoc</code></strong></a> specification.</li>
<li><a href="https://npmjs.com/package/eslint-plugin-unicorn"><strong><code>eslint-plugin-unicorn</code></strong></a> -- More than 100 powerful
<a href="https://eslint.org/"><strong><code>ESLint</code></strong></a> rules</li>
<li><a href="https://npmjs.com/package/eslint-plugin-write-good-comments"><strong><code>eslint-plugin-write-good-comments</code></strong></a> -- Enforce
good writing style in your comments.</li>
</ul>
<a id="md:formatting" class="tsd-anchor"></a><h3><a href="#md:formatting">Formatting</a></h3><p><a href="https://prettier.io/"><strong><code>Prettier</code></strong></a> is included to automatically format sources to
enforce a consistent and standardized code style. It automatically verifies
that sources conform to the standard style as part of the
<a href="https://typicode.github.io/husky/"><strong><code>Husky</code></strong></a> <strong>pre-commit</strong> hook.</p>
<p>Two scripts are provided:</p>
<ul>
<li><strong><code>format</code></strong> -- runs <a href="https://prettier.io/"><strong><code>Prettier</code></strong></a> and formats files
in-place.</li>
<li><strong><code>format:check</code></strong> -- runs <a href="https://prettier.io/"><strong><code>Prettier</code></strong></a> in <strong>check</strong> mode,
reporting any files that do not match the standard style. To fix any
reported issues, use the <strong><code>format</code></strong> script.</li>
</ul>
<a id="md:husky" class="tsd-anchor"></a><h3><a href="#md:husky"><a href="https://typicode.github.io/husky/"><strong><code>Husky</code></strong></a></a></h3><blockquote>
<p><a href="https://typicode.github.io/husky/"><strong><code>Husky</code></strong></a> hooks are automatically
installed when <code>pnpm i</code> is run.</p>
</blockquote>
<p><a href="https://typicode.github.io/husky/"><strong><code>Husky</code></strong></a> is included and configured
with two commit hooks:</p>
<ul>
<li><strong>pre-commit</strong>: runs
<a href="https://github.com/lint-staged/lint-staged"><strong><code>lint-staged</code></strong></a>, which runs
<a href="https://github.com/markdownlint/markdownlint"><strong><code>markdownlint</code></strong></a> and <a href="https://eslint.org/"><strong><code>ESLint</code></strong></a> on
<a href="/README.md"><em>README.md</em></a> and project sources in <a href="/src"><strong><code>src/**</code></strong></a>.</li>
<li><strong>commit-msg</strong>: runs <a href="https://commitlint.js.org/"><strong><code>commitlint</code></strong></a> on commit messages
to enforce the <a href="https://www.conventionalcommits.org/"><strong><code>conventional commit</code></strong></a>
standard.</li>
</ul>
<a id="md:creating-a-new-project" class="tsd-anchor"></a><h2><a href="#md:creating-a-new-project">Creating A New Project</a></h2><p>To start a new project with this repository as a template, clone it and delete
the <strong>.git</strong> folder, then run <strong><code>git init .</code></strong> to start a new git project and
commit history.</p>
<p>Then, configure <a href="/package.json"><strong><code>package.json</code></strong></a> with your project name,
description, keywords, repository URL, version number, and any other details
you wish to change.</p>
<p>Add code to <a href="/src"><strong><code>./src</code></strong></a>, and it will be built to <a href="/dist"><strong><code>./dist</code></strong></a>.
<a href="/src/index.ts"><strong><code>./src/index.ts</code></strong></a> will be built as the project entry point
at <a href="/dist/index.js"><strong><code>./dist/index.js</code></strong></a> as defined in the
<a href="/package.json"><strong><code>manifest</code></strong></a>.</p>
<a id="md:ci" class="tsd-anchor"></a><h3><a href="#md:ci">CI</a></h3><p>After each push to the <strong><code>main</code></strong> branch, the
<a href="/.github/workflows/ci.yml"><strong><code>CI GitHub Action</code></strong></a> runs to ensure all checks
pass.</p>
<a id="md:releasing" class="tsd-anchor"></a><h3><a href="#md:releasing">Releasing</a></h3><p>To release a new version of your package, the <strong><code>release</code></strong> npm script is
provided. It does the following:</p>
<ul>
<li>runs <strong><code>pnpm format:check</code></strong></li>
<li>runs <strong><code>pnpm lint</code></strong></li>
<li>runs <strong><code>pnpm test</code></strong></li>
<li>runs <strong><code>pnpm build</code></strong>,</li>
<li>runs <strong><code>git add docs</code></strong></li>
<li>Updates the <a href="/package.json"><strong><code>package.json</code></strong></a> version appropriately based
on the commits made since the last release.</li>
<li>Updates the <a href="/CHANGELOG.md"><strong><code>CHANGELOG.md</code></strong></a>.</li>
<li>Commits all changes and tags the commit with the new version number.</li>
<li>Pushes <strong><code>main</code></strong> with the new <strong>tag</strong> to <strong>origin</strong>.</li>
<li>Triggers the <a href="/.github/workflows/publish.yml"><strong><code>NPM Publish</code></strong></a> workflow to
automatically publish the new version on the <strong>NPM Registry</strong>.</li>
</ul>
<p>Available scripts are:</p>
<ul>
<li><code>pnpm docs</code>: generate HTML documentation in <code>./docs</code></li>
<li><code>test</code>: run mocha on all tests in <code>./src/tests</code></li>
<li><code>test:coverage</code>: run mocha and generate a coverage report in <code>./coverage</code></li>
<li><code>build</code>: build to JS in <code>./dist</code></li>
<li><code>lint</code>: run <code>eslint</code> on all files in <code>./src</code></li>
<li><code>update-deps</code>: update all dependencies</li>
<li><code>update-version</code>: updates the CHANGELOG.md, bumps the version, commits & tags</li>
<li><code>release</code>: lints, tests, builds, generates docs, runs <code>update-version</code> and
pushes.</li>
</ul>
<a id="md:publishing" class="tsd-anchor"></a><h3><a href="#md:publishing">Publishing</a></h3><p>Publishing to the <a href="http://npmjs.com/"><strong><code>NPM Registry</code></strong></a> is done automatically
with a <a href="./.github/workflows/npm-publish.yml"><strong><code>NPM Publish GitHub Action</code></strong></a>
that runs when a new tag is pushed. For this to work, you must add a secret
named <strong><code>NPM_TOKEN</code></strong> to the repository settings.</p>
<a id="md:release-history" class="tsd-anchor"></a><h2><a href="#md:release-history">Release History</a></h2><p>See <a href="./CHANGELOG.md"><strong><code>CHANGELOG.md</code></strong></a> for more information.</p>
<a id="md:license" class="tsd-anchor"></a><h2><a href="#md:license">License</a></h2><p>Distributed under the <strong>MIT</strong> license. See <a href="./LICENSE.md"><strong><code>LICENSE.md</code></strong></a>
for more information.</p>
<a id="md:contributing" class="tsd-anchor"></a><h2><a href="#md:contributing">Contributing</a></h2><ol>
<li>Fork it</li>
<li>Create your feature branch (<code>git checkout -b my-new-feature</code>)</li>
<li>Commit your changes (<code>git commit -am 'Add some feature'</code>)</li>
<li>Push to the branch (<code>git push origin my-new-feature</code>)</li>
<li>Create a new Pull Request</li>
</ol>
</div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><h4 class="uppercase">Member Visibility</h4><form><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div><div class="tsd-theme-toggle"><h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-index-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="#icon-chevronDown"></use></svg>On This Page</h3></summary><div class="tsd-accordion-details"><ul><li><ul><li><a href="#md:nodejs-typescript-library-template"><span>Node.JS <wbr/>Type<wbr/>Script <wbr/>Library <wbr/>Template</span></a></li><li><ul><li><a href="#md:prerequisites"><span>Prerequisites</span></a></li><li><a href="#md:setup"><span>Setup</span></a></li><li><ul><li><a href="#md:building-sources-and-documentation"><span>Building <wbr/>Sources and <wbr/>Documentation</span></a></li><li><ul><li><a href="#md:viewing-documentation-site"><span>Viewing <wbr/>Documentation <wbr/>Site</span></a></li></ul></li><li><a href="#md:deploy-documentation-on-github-pages"><span>Deploy <wbr/>Documentation <wbr/>On <wbr/>Git<wbr/>Hub <wbr/>Pages</span></a></li><li><a href="#md:testing"><span>Testing</span></a></li><li><ul><li><a href="#md:viewing-test-coverage-report"><span>Viewing <wbr/>Test <wbr/>Coverage <wbr/>Report</span></a></li></ul></li><li><a href="#md:linting"><span>Linting</span></a></li><li><ul><li><a href="#md:eslint-config-amp-plugins"><span>ESLint <wbr/>Config & <wbr/>Plugins</span></a></li></ul></li><li><a href="#md:formatting"><span>Formatting</span></a></li><li><a href="#md:husky"><span>Husky</span></a></li></ul></li><li><a href="#md:creating-a-new-project"><span>Creating <wbr/>A <wbr/>New <wbr/>Project</span></a></li><li><ul><li><a href="#md:ci"><span>CI</span></a></li><li><a href="#md:releasing"><span>Releasing</span></a></li><li><a href="#md:publishing"><span>Publishing</span></a></li></ul></li><li><a href="#md:release-history"><span>Release <wbr/>History</span></a></li><li><a href="#md:license"><span>License</span></a></li><li><a href="#md:contributing"><span>Contributing</span></a></li></ul></li></ul></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="modules.html" class="current"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-1"></use></svg><span>@f3rno64/node-ts-lib-template</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base="."><li><a href="variables/default.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="#icon-32"></use></svg>default</a></li></ul></nav></div></div></div><div class="overlay"></div><svg style="display: none"><g id="icon-1"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-module)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.162 16V7.24H10.578L11.514 10.072C11.602 10.328 11.674 10.584 11.73 10.84C11.794 11.088 11.842 11.28 11.874 11.416C11.906 11.28 11.954 11.088 12.018 10.84C12.082 10.584 12.154 10.324 12.234 10.06L13.122 7.24H14.538V16H13.482V12.82C13.482 12.468 13.49 12.068 13.506 11.62C13.53 11.172 13.558 10.716 13.59 10.252C13.622 9.78 13.654 9.332 13.686 8.908C13.726 8.476 13.762 8.1 13.794 7.78L12.366 12.16H11.334L9.894 7.78C9.934 8.092 9.97 8.456 10.002 8.872C10.042 9.28 10.078 9.716 10.11 10.18C10.142 10.636 10.166 11.092 10.182 11.548C10.206 12.004 10.218 12.428 10.218 12.82V16H9.162Z" fill="var(--color-text)"></path></g><g id="icon-2"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-module)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.162 16V7.24H10.578L11.514 10.072C11.602 10.328 11.674 10.584 11.73 10.84C11.794 11.088 11.842 11.28 11.874 11.416C11.906 11.28 11.954 11.088 12.018 10.84C12.082 10.584 12.154 10.324 12.234 10.06L13.122 7.24H14.538V16H13.482V12.82C13.482 12.468 13.49 12.068 13.506 11.62C13.53 11.172 13.558 10.716 13.59 10.252C13.622 9.78 13.654 9.332 13.686 8.908C13.726 8.476 13.762 8.1 13.794 7.78L12.366 12.16H11.334L9.894 7.78C9.934 8.092 9.97 8.456 10.002 8.872C10.042 9.28 10.078 9.716 10.11 10.18C10.142 10.636 10.166 11.092 10.182 11.548C10.206 12.004 10.218 12.428 10.218 12.82V16H9.162Z" fill="var(--color-text)"></path></g><g id="icon-4"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-namespace)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.33 16V7.24H10.77L13.446 14.74C13.43 14.54 13.41 14.296 13.386 14.008C13.37 13.712 13.354 13.404 13.338 13.084C13.33 12.756 13.326 12.448 13.326 12.16V7.24H14.37V16H12.93L10.266 8.5C10.282 8.692 10.298 8.936 10.314 9.232C10.33 9.52 10.342 9.828 10.35 10.156C10.366 10.476 10.374 10.784 10.374 11.08V16H9.33Z" fill="var(--color-text)"></path></g><g id="icon-8"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-enum)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.45 16V7.24H14.49V8.224H10.518V10.936H14.07V11.908H10.518V15.016H14.49V16H9.45Z" fill="var(--color-text)"></path></g><g id="icon-16"><rect fill="var(--color-icon-background)" stroke="#FF984D" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><path d="M9.354 16V7.24H12.174C12.99 7.24 13.638 7.476 14.118 7.948C14.606 8.412 14.85 9.036 14.85 9.82C14.85 10.604 14.606 11.232 14.118 11.704C13.638 12.168 12.99 12.4 12.174 12.4H10.434V16H9.354ZM10.434 11.428H12.174C12.646 11.428 13.022 11.284 13.302 10.996C13.59 10.7 13.734 10.308 13.734 9.82C13.734 9.324 13.59 8.932 13.302 8.644C13.022 8.356 12.646 8.212 12.174 8.212H10.434V11.428Z" fill="var(--color-text)"></path></g><g id="icon-32"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-variable)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.106 16L8.85 7.24H9.966L11.454 13.192C11.558 13.608 11.646 13.996 11.718 14.356C11.79 14.708 11.842 14.976 11.874 15.16C11.906 14.976 11.954 14.708 12.018 14.356C12.09 13.996 12.178 13.608 12.282 13.192L13.758 7.24H14.85L12.582 16H11.106Z" fill="var(--color-text)"></path></g><g id="icon-64"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)"></path></g><g id="icon-128"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-class)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)"></path></g><g id="icon-256"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-interface)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.51 16V15.016H11.298V8.224H9.51V7.24H14.19V8.224H12.402V15.016H14.19V16H9.51Z" fill="var(--color-text)"></path></g><g id="icon-512"><rect fill="var(--color-icon-background)" stroke="#4D7FFF" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)"></path></g><g id="icon-1024"><rect fill="var(--color-icon-background)" stroke="#FF984D" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><path d="M9.354 16V7.24H12.174C12.99 7.24 13.638 7.476 14.118 7.948C14.606 8.412 14.85 9.036 14.85 9.82C14.85 10.604 14.606 11.232 14.118 11.704C13.638 12.168 12.99 12.4 12.174 12.4H10.434V16H9.354ZM10.434 11.428H12.174C12.646 11.428 13.022 11.284 13.302 10.996C13.59 10.7 13.734 10.308 13.734 9.82C13.734 9.324 13.59 8.932 13.302 8.644C13.022 8.356 12.646 8.212 12.174 8.212H10.434V11.428Z" fill="var(--color-text)"></path></g><g id="icon-2048"><rect fill="var(--color-icon-background)" stroke="#FF4DB8" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><path d="M9.162 16V7.24H10.578L11.514 10.072C11.602 10.328 11.674 10.584 11.73 10.84C11.794 11.088 11.842 11.28 11.874 11.416C11.906 11.28 11.954 11.088 12.018 10.84C12.082 10.584 12.154 10.324 12.234 10.06L13.122 7.24H14.538V16H13.482V12.82C13.482 12.468 13.49 12.068 13.506 11.62C13.53 11.172 13.558 10.716 13.59 10.252C13.622 9.78 13.654 9.332 13.686 8.908C13.726 8.476 13.762 8.1 13.794 7.78L12.366 12.16H11.334L9.894 7.78C9.934 8.092 9.97 8.456 10.002 8.872C10.042 9.28 10.078 9.716 10.11 10.18C10.142 10.636 10.166 11.092 10.182 11.548C10.206 12.004 10.218 12.428 10.218 12.82V16H9.162Z" fill="var(--color-text)"></path></g><g id="icon-4096"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-function)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M9.39 16V7.24H14.55V8.224H10.446V11.128H14.238V12.112H10.47V16H9.39Z" fill="var(--color-text)"></path></g><g id="icon-8192"><rect fill="var(--color-icon-background)" stroke="#FF984D" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><path d="M9.354 16V7.24H12.174C12.99 7.24 13.638 7.476 14.118 7.948C14.606 8.412 14.85 9.036 14.85 9.82C14.85 10.604 14.606 11.232 14.118 11.704C13.638 12.168 12.99 12.4 12.174 12.4H10.434V16H9.354ZM10.434 11.428H12.174C12.646 11.428 13.022 11.284 13.302 10.996C13.59 10.7 13.734 10.308 13.734 9.82C13.734 9.324 13.59 8.932 13.302 8.644C13.022 8.356 12.646 8.212 12.174 8.212H10.434V11.428Z" fill="var(--color-text)"></path></g><g id="icon-16384"><rect fill="var(--color-icon-background)" stroke="#4D7FFF" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><path d="M11.898 16.1201C11.098 16.1201 10.466 15.8961 10.002 15.4481C9.53803 15.0001 9.30603 14.3841 9.30603 13.6001V9.64012C9.30603 8.85612 9.53803 8.24012 10.002 7.79212C10.466 7.34412 11.098 7.12012 11.898 7.12012C12.682 7.12012 13.306 7.34812 13.77 7.80412C14.234 8.25212 14.466 8.86412 14.466 9.64012H13.386C13.386 9.14412 13.254 8.76412 12.99 8.50012C12.734 8.22812 12.37 8.09212 11.898 8.09212C11.426 8.09212 11.054 8.22412 10.782 8.48812C10.518 8.75212 10.386 9.13212 10.386 9.62812V13.6001C10.386 14.0961 10.518 14.4801 10.782 14.7521C11.054 15.0161 11.426 15.1481 11.898 15.1481C12.37 15.1481 12.734 15.0161 12.99 14.7521C13.254 14.4801 13.386 14.0961 13.386 13.6001H14.466C14.466 14.3761 14.234 14.9921 13.77 15.4481C13.306 15.8961 12.682 16.1201 11.898 16.1201Z" fill="var(--color-text)"></path></g><g id="icon-32768"><rect fill="var(--color-icon-background)" stroke="#FF984D" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><path d="M9.354 16V7.24H12.174C12.99 7.24 13.638 7.476 14.118 7.948C14.606 8.412 14.85 9.036 14.85 9.82C14.85 10.604 14.606 11.232 14.118 11.704C13.638 12.168 12.99 12.4 12.174 12.4H10.434V16H9.354ZM10.434 11.428H12.174C12.646 11.428 13.022 11.284 13.302 10.996C13.59 10.7 13.734 10.308 13.734 9.82C13.734 9.324 13.59 8.932 13.302 8.644C13.022 8.356 12.646 8.212 12.174 8.212H10.434V11.428Z" fill="var(--color-text)"></path></g><g id="icon-65536"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.31 16V8.224H8.91V7.24H14.79V8.224H12.39V16H11.31Z" fill="var(--color-text)"></path></g><g id="icon-131072"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.31 16V8.224H8.91V7.24H14.79V8.224H12.39V16H11.31Z" fill="var(--color-text)"></path></g><g id="icon-262144"><rect fill="var(--color-icon-background)" stroke="#FF4D4D" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><path d="M8.85 16L11.13 7.24H12.582L14.85 16H13.758L13.182 13.672H10.53L9.954 16H8.85ZM10.746 12.76H12.954L12.282 10.06C12.154 9.548 12.054 9.12 11.982 8.776C11.91 8.432 11.866 8.208 11.85 8.104C11.834 8.208 11.79 8.432 11.718 8.776C11.646 9.12 11.546 9.544 11.418 10.048L10.746 12.76Z" fill="var(--color-text)"></path></g><g id="icon-524288"><rect fill="var(--color-icon-background)" stroke="#FF4D4D" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><path d="M8.85 16L11.13 7.24H12.582L14.85 16H13.758L13.182 13.672H10.53L9.954 16H8.85ZM10.746 12.76H12.954L12.282 10.06C12.154 9.548 12.054 9.12 11.982 8.776C11.91 8.432 11.866 8.208 11.85 8.104C11.834 8.208 11.79 8.432 11.718 8.776C11.646 9.12 11.546 9.544 11.418 10.048L10.746 12.76Z" fill="var(--color-text)"></path></g><g id="icon-1048576"><rect fill="var(--color-icon-background)" stroke="#FF4D4D" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><path d="M8.85 16L11.13 7.24H12.582L14.85 16H13.758L13.182 13.672H10.53L9.954 16H8.85ZM10.746 12.76H12.954L12.282 10.06C12.154 9.548 12.054 9.12 11.982 8.776C11.91 8.432 11.866 8.208 11.85 8.104C11.834 8.208 11.79 8.432 11.718 8.776C11.646 9.12 11.546 9.544 11.418 10.048L10.746 12.76Z" fill="var(--color-text)"></path></g><g id="icon-2097152"><rect fill="var(--color-icon-background)" stroke="var(--color-ts-type-alias)" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="6"></rect><path d="M11.31 16V8.224H8.91V7.24H14.79V8.224H12.39V16H11.31Z" fill="var(--color-text)"></path></g><g id="icon-4194304"><rect fill="var(--color-icon-background)" stroke="#FF4D82" stroke-width="1.5" x="1" y="1" width="22" height="22" rx="12"></rect><path d="M10.354 17V8.24H13.066C13.586 8.24 14.042 8.348 14.434 8.564C14.826 8.772 15.13 9.064 15.346 9.44C15.562 9.816 15.67 10.256 15.67 10.76C15.67 11.352 15.514 11.86 15.202 12.284C14.898 12.708 14.482 13 13.954 13.16L15.79 17H14.518L12.838 13.28H11.434V17H10.354ZM11.434 12.308H13.066C13.514 12.308 13.874 12.168 14.146 11.888C14.418 11.6 14.554 11.224 14.554 10.76C14.554 10.288 14.418 9.912 14.146 9.632C13.874 9.352 13.514 9.212 13.066 9.212H11.434V12.308Z" fill="var(--color-text)"></path></g><g id="icon-chevronDown"><path d="M4.93896 8.531L12 15.591L19.061 8.531L16.939 6.409L12 11.349L7.06098 6.409L4.93896 8.531Z" fill="var(--color-text)"></path></g><g id="icon-chevronSmall"><path d="M1.5 5.50969L8 11.6609L14.5 5.50969L12.5466 3.66086L8 7.96494L3.45341 3.66086L1.5 5.50969Z" fill="var(--color-text)"></path></g><g id="icon-menu"><rect x="1" y="3" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="7" width="14" height="2" fill="var(--color-text)"></rect><rect x="1" y="11" width="14" height="2" fill="var(--color-text)"></rect></g><g id="icon-search"><path d="M15.7824 13.833L12.6666 10.7177C12.5259 10.5771 12.3353 10.499 12.1353 10.499H11.6259C12.4884 9.39596 13.001 8.00859 13.001 6.49937C13.001 2.90909 10.0914 0 6.50048 0C2.90959 0 0 2.90909 0 6.49937C0 10.0896 2.90959 12.9987 6.50048 12.9987C8.00996 12.9987 9.39756 12.4863 10.5008 11.6239V12.1332C10.5008 12.3332 10.5789 12.5238 10.7195 12.6644L13.8354 15.7797C14.1292 16.0734 14.6042 16.0734 14.8948 15.7797L15.7793 14.8954C16.0731 14.6017 16.0731 14.1267 15.7824 13.833ZM6.50048 10.499C4.29094 10.499 2.50018 8.71165 2.50018 6.49937C2.50018 4.29021 4.28781 2.49976 6.50048 2.49976C8.71001 2.49976 10.5008 4.28708 10.5008 6.49937C10.5008 8.70852 8.71314 10.499 6.50048 10.499Z" fill="var(--color-text)"></path></g><g id="icon-anchor"><g stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5"></path><path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5"></path></g></g></svg></body></html>