Deploy documentation and coverage

This commit is contained in:
github-actions[bot]
2024-08-16 14:14:46 +00:00
parent 9a0c540d8f
commit a8e276ce74
57 changed files with 644 additions and 369 deletions

View File

@@ -79,18 +79,18 @@
</tr>
</thead>
<tbody><tr>
<td class="file medium" data-value="src"><a href="./src/index.html">src</a></td>
<td data-value="66.66" class="pic medium">
<div class="chart"><div class="cover-fill" style="width: 66%"></div><div class="cover-empty" style="width: 34%"></div></div>
<td class="file low" data-value="src"><a href="./src/index.html">src</a></td>
<td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td>
<td data-value="66.66" class="pct medium">66.66%</td>
<td data-value="27" class="abs medium">18/27</td>
<td data-value="81.81" class="pct high">81.81%</td>
<td data-value="11" class="abs high">9/11</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="6" class="abs low">0/6</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="6" class="abs high">6/6</td>
<td data-value="64" class="pct medium">64%</td>
<td data-value="25" class="abs medium">16/25</td>
<td data-value="0" class="abs high">0/0</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="6" class="abs low">0/6</td>
</tr>
<tr>
@@ -108,6 +108,21 @@
<td data-value="19" class="abs high">19/19</td>
</tr>
<tr>
<td class="file high" data-value="src/classes"><a href="./src/classes/index.html">src/classes</a></td>
<td data-value="85.71" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 85%"></div><div class="cover-empty" style="width: 15%"></div></div>
</td>
<td data-value="85.71" class="pct high">85.71%</td>
<td data-value="21" class="abs high">18/21</td>
<td data-value="81.81" class="pct high">81.81%</td>
<td data-value="11" class="abs high">9/11</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="6" class="abs high">6/6</td>
<td data-value="84.21" class="pct high">84.21%</td>
<td data-value="19" class="abs high">16/19</td>
</tr>
<tr>
<td class="file low" data-value="src/decorators"><a href="./src/decorators/index.html">src/decorators</a></td>
<td data-value="0" class="pic low">
@@ -176,7 +191,7 @@
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="./prettify.js"></script>
<script>

View File

@@ -208,7 +208,7 @@ export function test_IDIContainer(Container: ITSinjex_): void {
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="../../prettify.js"></script>
<script>

View File

@@ -101,7 +101,7 @@
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="../../prettify.js"></script>
<script>

View File

@@ -3,15 +3,15 @@
<html lang="en">
<head>
<title>Code coverage report for src/TSinjex.ts</title>
<title>Code coverage report for src/classes/TSinjex.ts</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="../prettify.css" />
<link rel="stylesheet" href="../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
<link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(../sort-arrow-sprite.png);
background-image: url(../../sort-arrow-sprite.png);
}
</style>
</head>
@@ -19,7 +19,7 @@
<body>
<div class='wrapper'>
<div class='pad1'>
<h1><a href="../index.html">All files</a> / <a href="./index.html">src</a> TSinjex.ts</h1>
<h1><a href="../../index.html">All files</a> / <a href="./index.html">src/classes</a> TSinjex.ts</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
@@ -167,7 +167,36 @@
<a name='L102'></a><a href='#L102'>102</a>
<a name='L103'></a><a href='#L103'>103</a>
<a name='L104'></a><a href='#L104'>104</a>
<a name='L105'></a><a href='#L105'>105</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
<a name='L105'></a><a href='#L105'>105</a>
<a name='L106'></a><a href='#L106'>106</a>
<a name='L107'></a><a href='#L107'>107</a>
<a name='L108'></a><a href='#L108'>108</a>
<a name='L109'></a><a href='#L109'>109</a>
<a name='L110'></a><a href='#L110'>110</a>
<a name='L111'></a><a href='#L111'>111</a>
<a name='L112'></a><a href='#L112'>112</a>
<a name='L113'></a><a href='#L113'>113</a>
<a name='L114'></a><a href='#L114'>114</a>
<a name='L115'></a><a href='#L115'>115</a>
<a name='L116'></a><a href='#L116'>116</a>
<a name='L117'></a><a href='#L117'>117</a>
<a name='L118'></a><a href='#L118'>118</a>
<a name='L119'></a><a href='#L119'>119</a>
<a name='L120'></a><a href='#L120'>120</a>
<a name='L121'></a><a href='#L121'>121</a>
<a name='L122'></a><a href='#L122'>122</a>
<a name='L123'></a><a href='#L123'>123</a>
<a name='L124'></a><a href='#L124'>124</a>
<a name='L125'></a><a href='#L125'>125</a>
<a name='L126'></a><a href='#L126'>126</a>
<a name='L127'></a><a href='#L127'>127</a>
<a name='L128'></a><a href='#L128'>128</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
@@ -176,8 +205,24 @@
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
@@ -208,6 +253,7 @@
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
@@ -222,6 +268,7 @@
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
@@ -259,7 +306,6 @@
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
@@ -271,28 +317,50 @@
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { ImplementsStatic } from './helper/ImplementsStatic';
import { DependencyResolutionError } from './interfaces/Exceptions';
import { IDependency } from './interfaces/IDependency';
import { ITSinjex, ITSinjex_ } from './interfaces/ITSinjex';
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Identifier } from 'src/types/Identifier';
import type { Inject } from '../decorators/Inject';
import type { Register } from '../decorators/Register';
import type { RegisterInstance } from '../decorators/RegisterInstance';
import type { register } from '../functions/register';
import type { resolve } from '../functions/resolve';
import { ImplementsStatic } from '../helper/ImplementsStatic';
import { DependencyResolutionError } from '../interfaces/Exceptions';
import { IDependency } from '../interfaces/IDependency';
import { ITSinjex, ITSinjex_ } from '../interfaces/ITSinjex';
&nbsp;
/**
* **TSInjex**: Dependency Injection Container
* # TSinjex
* The main class for the Dependency Injection Container **TSinjex**.
* ### Decorators
* @see {@link Register} for registering a class in the DI container.
* @see {@link RegisterInstance} for registering an instance in the DI container.
* @see {@link Inject} for injecting a dependency into a property.
* ---
* ### Functions
* @see {@link register} for registering a dependency (class or instance) as a function.
* @see {@link resolve} for resolving a dependency as a function.
*/
@ImplementsStatic&lt;ITSinjex_&gt;()
export class TSinjex implements ITSinjex {
/**
* The singleton instance of the TSinjex class.
*/
private static _instance: TSinjex;
private readonly _dependencies = new Map&lt;string, IDependency&gt;();
&nbsp;
/**
* The dependencies map.
*/
private readonly _dependencies = new Map&lt;Identifier, IDependency&gt;();
&nbsp;
/**
* Private constructor to prevent direct instantiation.
*/
private constructor() {}
&nbsp;
//#region IDIContainer_
//#region ITSinjex_ (Static)
&nbsp;
/**
* Retrieves the singleton instance of DependencyRegistry.
* Get the **singleton** TSInjex instance.
* @returns The singleton instance.
*/
public static getInstance(): ITSinjex {
@@ -304,11 +372,12 @@ export class TSinjex implements ITSinjex {
}
&nbsp;
/**
* @inheritdoc
* Static implementation of {@link ITSinjex.register}.
* @see {@link ITSinjex.register}
* @inheritdoc
*/
public static register&lt;T&gt;(
identifier: string,
identifier: Identifier,
dependency: T,
deprecated = false,
): void {
@@ -319,11 +388,12 @@ export class TSinjex implements ITSinjex {
}
&nbsp;
/**
* @inheritdoc
* Static implementation of {@link ITSinjex.resolve}.
* @see {@link ITSinjex.resolve}
* @inheritdoc
*/
public static resolve&lt;T&gt;(
identifier: string,
identifier: Identifier,
necessary = true,
): T | undefined {
return (TSinjex.getInstance() as TSinjex).resolve&lt;T&gt;(
@@ -334,13 +404,13 @@ export class TSinjex implements ITSinjex {
&nbsp;
//#endregion
&nbsp;
//#region IDIContainer
//#region ITSinjex (Instance)
&nbsp;
/**
* @inheritdoc
*/
public register&lt;T&gt;(
identifier: string,
identifier: Identifier,
dependency: T,
deprecated = false,
): void {
@@ -353,7 +423,7 @@ export class TSinjex implements ITSinjex {
/**
* @inheritdoc
*/
public resolve&lt;T&gt;(identifier: string, necessary = true): T | undefined {
public resolve&lt;T&gt;(identifier: Identifier, necessary = true): T | undefined {
const dependency = this._dependencies.get(identifier);
&nbsp;
if (necessary &amp;&amp; !dependency) {
@@ -363,7 +433,6 @@ export class TSinjex implements ITSinjex {
}
&nbsp;
<span class="missing-if-branch" title="if path not taken" >I</span>if (dependency.deprecated) {
// eslint-disable-next-line no-console
<span class="cstat-no" title="statement not covered" > console.warn(`Dependency ${identifier} is deprecated`);</span>
&nbsp;
// Remove the deprecation warning; it should only be logged once.
@@ -382,16 +451,16 @@ export class TSinjex implements ITSinjex {
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="../prettify.js"></script>
<script src="../../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../sorter.js"></script>
<script src="../block-navigation.js"></script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
<div style="position: fixed; bottom: 10px; right: 10px;"><a href="../../">Zur TypeDoc-Dokumentation</a></div></body>
</html>

View File

@@ -0,0 +1,116 @@
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src/classes</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1><a href="../../index.html">All files</a> src/classes</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">85.71% </span>
<span class="quiet">Statements</span>
<span class='fraction'>18/21</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">81.81% </span>
<span class="quiet">Branches</span>
<span class='fraction'>9/11</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span>
<span class="quiet">Functions</span>
<span class='fraction'>6/6</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">84.21% </span>
<span class="quiet">Lines</span>
<span class='fraction'>16/19</span>
</div>
</div>
<p class="quiet">
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
</p>
<template id="filterTemplate">
<div class="quiet">
Filter:
<input type="search" id="fileSearch">
</div>
</template>
</div>
<div class='status-line high'></div>
<div class="pad1">
<table class="coverage-summary">
<thead>
<tr>
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
</tr>
</thead>
<tbody><tr>
<td class="file high" data-value="TSinjex.ts"><a href="./TSinjex.ts.html">TSinjex.ts</a></td>
<td data-value="85.71" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 85%"></div><div class="cover-empty" style="width: 15%"></div></div>
</td>
<td data-value="85.71" class="pct high">85.71%</td>
<td data-value="21" class="abs high">18/21</td>
<td data-value="81.81" class="pct high">81.81%</td>
<td data-value="11" class="abs high">9/11</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="6" class="abs high">6/6</td>
<td data-value="84.21" class="pct high">84.21%</td>
<td data-value="19" class="abs high">16/19</td>
</tr>
</tbody>
</table>
</div>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:14:44.371Z
</div>
<script src="../../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
<div style="position: fixed; bottom: 10px; right: 10px;"><a href="../../">Zur TypeDoc-Dokumentation</a></div></body>
</html>

View File

@@ -139,7 +139,9 @@
<a name='L74'></a><a href='#L74'>74</a>
<a name='L75'></a><a href='#L75'>75</a>
<a name='L76'></a><a href='#L76'>76</a>
<a name='L77'></a><a href='#L77'>77</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
<a name='L77'></a><a href='#L77'>77</a>
<a name='L78'></a><a href='#L78'>78</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
@@ -215,21 +217,22 @@
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import { TSinjex } from '../TSinjex';</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Identifier } from 'src/types/Identifier';
<span class="cstat-no" title="statement not covered" >import { TSinjex } from '../classes/TSinjex';</span>
import { InitDelegate } from '../types/InitDelegate';
&nbsp;
/**
* A decorator to inject a dependency from a DI (Dependency Injection) container.
* The dependency is lazily evaluated when the property is accessed for the first time.
* This can help avoid issues like circular dependencies and not-found dependencies.
* @template ClassType The type of the property to be injected.
* @param identifier The identifier used to resolve the dependency from the DI container.
* A decorator to inject a dependency from a DI (Dependency Injection) container into a class property.
* @template T The type of the dependency to be injected.
* @template U The type of the property to be injected.
* @param identifier The identifier used to resolve the class in the DI container.
* @see {@link Identifier} for more information on identifiers.
* @param init An optional initializer function to transform the dependency before injection.
* @param necessary Indicates if the dependency is necessary.
* - If `true`, an error will be thrown if the dependency cannot be resolved.
* - If `false`, `undefined` will be returned if the dependency cannot be resolved.
* @returns A decorator function to be applied on the class property.
* @see {@link TSinjex}
* @see {@link InitDelegate} for more information on initializer functions.
* @param necessary If true, throws an error if the dependency is not found.
* @returns The resolved dependency or undefined if the dependency is not necessary
* and not found, or throws an error if the dependency is necessary and not found.
* @throws A {@link DependencyResolutionError} if the dependency is not found and necessary.
* @example
* ```ts
* class MyClass {
@@ -246,7 +249,7 @@ import { InitDelegate } from '../types/InitDelegate';
* ```
*/
<span class="cstat-no" title="statement not covered" >export function <span class="fstat-no" title="function not covered" >I</span>nject&lt;</span>T, U&gt;(
identifier: string,
identifier: Identifier,
init?: InitDelegate&lt;T, U&gt;,
necessary = <span class="branch-0 cbranch-no" title="branch not covered" >true,</span>
) {
@@ -298,7 +301,7 @@ import { InitDelegate } from '../types/InitDelegate';
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="../../prettify.js"></script>
<script>

View File

@@ -91,7 +91,11 @@
<a name='L26'></a><a href='#L26'>26</a>
<a name='L27'></a><a href='#L27'>27</a>
<a name='L28'></a><a href='#L28'>28</a>
<a name='L29'></a><a href='#L29'>29</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
<a name='L29'></a><a href='#L29'>29</a>
<a name='L30'></a><a href='#L30'>30</a>
<a name='L31'></a><a href='#L31'>31</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
@@ -119,15 +123,17 @@
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import { TSinjex } from '../TSinjex';</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Identifier } from 'src/types/Identifier';
<span class="cstat-no" title="statement not covered" >import { TSinjex } from '../classes/TSinjex';</span>
&nbsp;
/**
* A decorator to register a class in the DI (Dependency Injection) container.
* A decorator to register a class in the **TSinjex** DI (Dependency Injection) container.
* @template TargetType The type of the class to be registered.
* @param identifier The identifier used to register the class in the DI container.
* @param deprecated If true, the dependency is deprecated =&gt; a warning
* is logged when the dependency is resolved.
* @returns A function that is applied as a decorator to the class.
* @see {@link Identifier} for more information on identifiers.
* @param deprecated If true, the dependency is deprecated and a warning
* is logged only once upon the first resolution of the dependency.
* @returns The decorator function to be applied on the class.
* @example
* ```ts
* \@Register('MyClassIdentifier')
@@ -138,7 +144,7 @@
*/
<span class="cstat-no" title="statement not covered" >export function <span class="fstat-no" title="function not covered" >R</span>egister&lt;</span>
TargetType extends new (...args: unknown[]) =&gt; InstanceType&lt;TargetType&gt;,
&gt;(identifier: string, deprecated?: boolean) {
&gt;(identifier: Identifier, deprecated?: boolean) {
<span class="cstat-no" title="statement not covered" > return <span class="fstat-no" title="function not covered" >function (c</span>onstructor: TargetType, ...args: unknown[]): void {</span>
// Get the instance of the DI container
const diContainer = <span class="cstat-no" title="statement not covered" >TSinjex.getInstance();</span>
@@ -154,7 +160,7 @@
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="../../prettify.js"></script>
<script>

View File

@@ -133,7 +133,11 @@
<a name='L68'></a><a href='#L68'>68</a>
<a name='L69'></a><a href='#L69'>69</a>
<a name='L70'></a><a href='#L70'>70</a>
<a name='L71'></a><a href='#L71'>71</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
<a name='L71'></a><a href='#L71'>71</a>
<a name='L72'></a><a href='#L72'>72</a>
<a name='L73'></a><a href='#L73'>73</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
@@ -203,20 +207,22 @@
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import { TSinjex } from '../TSinjex';</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Identifier } from 'src/types/Identifier';
<span class="cstat-no" title="statement not covered" >import { TSinjex } from '../classes/TSinjex';</span>
import { InitDelegate } from '../types/InitDelegate';
&nbsp;
/**
* A decorator to register an instance of a class in the DI (Dependency Injection) container.
* The instance is created only when it is first needed (Lazy Initialization).
* @template TargetType The type of the class whose instance is to be registered.
* @param identifier The identifier used to register the instance in the DI container.
* @see {@link Identifier} for more information on identifiers.
* @param init An optional initializer function which get the constructor of the class
* as input and returns an instance of the class.
* @returns A function that is applied as a decorator to the class.
* @see {@link InitDelegate} for more information on initializer functions.
* @returns The decorator function to be applied on the class.
* @example
* ```ts
* \@RegisterInstance('MyClassInstanceIdentifier', arg1, arg2)
* \@RegisterInstance('MyClassInstanceIdentifier', (constructor) =&gt; new constructor())
* class MyClass {
* // ...
* }
@@ -225,7 +231,7 @@ import { InitDelegate } from '../types/InitDelegate';
<span class="cstat-no" title="statement not covered" >export function <span class="fstat-no" title="function not covered" >R</span>egisterInstance&lt;</span>
TargetType extends new (..._args: unknown[]) =&gt; InstanceType&lt;TargetType&gt;,
&gt;(
identifier: string,
identifier: Identifier,
init?: InitDelegate&lt;
TargetType &amp; { new (..._args: unknown[]): InstanceType&lt;TargetType&gt; },
InstanceType&lt;TargetType&gt;
@@ -280,7 +286,7 @@ import { InitDelegate } from '../types/InitDelegate';
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="../../prettify.js"></script>
<script>

View File

@@ -131,7 +131,7 @@
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="../../prettify.js"></script>
<script>

View File

@@ -116,7 +116,7 @@
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="../../prettify.js"></script>
<script>

View File

@@ -98,7 +98,15 @@
<a name='L33'></a><a href='#L33'>33</a>
<a name='L34'></a><a href='#L34'>34</a>
<a name='L35'></a><a href='#L35'>35</a>
<a name='L36'></a><a href='#L36'>36</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
<a name='L36'></a><a href='#L36'>36</a>
<a name='L37'></a><a href='#L37'>37</a>
<a name='L38'></a><a href='#L38'>38</a>
<a name='L39'></a><a href='#L39'>39</a>
<a name='L40'></a><a href='#L40'>40</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
@@ -133,36 +141,40 @@
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import { TSinjex } from '../TSinjex';</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Identifier } from 'src/types/Identifier';
<span class="cstat-no" title="statement not covered" >import { TSinjex } from '../classes/TSinjex';</span>
&nbsp;
/**
* Register a dependency.
* @param identifier The identifier of the dependency.
* @param identifier The identifier used to register the class in the DI container.
* @see {@link Identifier} for more information on identifiers..
* @param dependency The dependency to register.
*/
export function register&lt;T&gt;(identifier: string, dependency: T): void;
export function register&lt;T&gt;(identifier: Identifier, dependency: T): void;
&nbsp;
/**
* Register a dependency.
* @param identifier The identifier of the dependency.
* @param identifier The identifier used to register the class in the DI container.
* @see {@link Identifier} for more information on identifiers.
* @param dependency The dependency to register.
* @param deprecated A warning is logged when the dependency is resolved.
*/
export function register&lt;T&gt;(
identifier: string,
identifier: Identifier,
dependency: T,
deprecated?: true,
): void;
&nbsp;
/**
* Register a dependency.
* @param identifier The identifier of the dependency.
* @param identifier The identifier used to register the class in the DI container.
* @see {@link Identifier} for more information on identifiers.
* @param dependency The dependency to register.
* @param deprecated If true, the dependency is deprecated =&gt; a warning
* is logged when the dependency is resolved.
*/
<span class="cstat-no" title="statement not covered" >export function <span class="fstat-no" title="function not covered" >r</span>egister&lt;</span>T&gt;(
identifier: string,
identifier: Identifier,
dependency: T,
deprecated?: boolean,
): void {
@@ -175,7 +187,7 @@ export function register&lt;T&gt;(
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="../../prettify.js"></script>
<script>

View File

@@ -96,7 +96,14 @@
<a name='L31'></a><a href='#L31'>31</a>
<a name='L32'></a><a href='#L32'>32</a>
<a name='L33'></a><a href='#L33'>33</a>
<a name='L34'></a><a href='#L34'>34</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<a name='L34'></a><a href='#L34'>34</a>
<a name='L35'></a><a href='#L35'>35</a>
<a name='L36'></a><a href='#L36'>36</a>
<a name='L37'></a><a href='#L37'>37</a>
<a name='L38'></a><a href='#L38'>38</a>
<a name='L39'></a><a href='#L39'>39</a>
<a name='L40'></a><a href='#L40'>40</a>
<a name='L41'></a><a href='#L41'>41</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
@@ -123,41 +130,55 @@
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { DependencyResolutionError } from '../interfaces/Exceptions';
<span class="cstat-no" title="statement not covered" >import { TSinjex } from '../TSinjex';</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Identifier } from 'src/types/Identifier';
<span class="cstat-no" title="statement not covered" >import { TSinjex } from '../classes/TSinjex';</span>
import { DependencyResolutionError } from '../interfaces/Exceptions';
&nbsp;
/**
* Resolve a dependency.
* @param identifier The identifier of the dependency.
* @param identifier The identifier used to register the class in the DI container.
* @see {@link Identifier} for more information on identifiers.
* @returns The resolved dependency.
* @throws A {@link DependencyResolutionError} if the dependency is not found.
*/
export function resolve&lt;T&gt;(identifier: string): T;
export function resolve&lt;T&gt;(identifier: Identifier): T;
&nbsp;
/**
* Resolve a dependency
* @param identifier The identifier of the dependency.
* @param identifier The identifier used to register the class in the DI container.
* @see {@link Identifier} for more information on identifiers.
* @param necessary The dependency is **not** necessary.
* @returns The resolved dependency or undefined if the dependency is not found.
*/
export function resolve&lt;T&gt;(identifier: string, necessary: false): T | undefined;
export function resolve&lt;T&gt;(
identifier: Identifier,
necessary: false,
): T | undefined;
&nbsp;
/**
* Resolve a dependency.
* @param identifier The identifier of the dependency.
* @param identifier The identifier used to register the class in the DI container.
* @see {@link Identifier} for more information on identifiers.
* @param necessary If true, throws an error if the dependency is not found.
* @returns The resolved dependency or undefined if the dependency is not necessary
* and not found, or throws an error if the dependency is necessary and not found.
* @throws A {@link DependencyResolutionError} if the dependency is not found and necessary.
*/
<span class="cstat-no" title="statement not covered" >export function <span class="fstat-no" title="function not covered" >r</span>esolve&lt;</span>T&gt;(
identifier: string,
identifier: Identifier,
necessary?: boolean,
): T | undefined {
<span class="cstat-no" title="statement not covered" > return TSinjex.getInstance().resolve&lt;T&gt;(identifier, necessary);</span>
@@ -169,7 +190,7 @@ export function resolve&lt;T&gt;(identifier: string, necessary: false): T | unde
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="../../prettify.js"></script>
<script>

View File

@@ -94,7 +94,7 @@ export function ImplementsStatic&lt;I&gt;() {
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="../../prettify.js"></script>
<script>

View File

@@ -101,7 +101,7 @@
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="../../prettify.js"></script>
<script>

View File

@@ -23,30 +23,30 @@
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">66.66% </span>
<span class="strong">0% </span>
<span class="quiet">Statements</span>
<span class='fraction'>18/27</span>
<span class='fraction'>0/6</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">81.81% </span>
<span class="strong">100% </span>
<span class="quiet">Branches</span>
<span class='fraction'>9/11</span>
<span class='fraction'>0/0</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span>
<span class="quiet">Functions</span>
<span class='fraction'>6/6</span>
<span class='fraction'>0/0</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">64% </span>
<span class="strong">0% </span>
<span class="quiet">Lines</span>
<span class='fraction'>16/25</span>
<span class='fraction'>0/6</span>
</div>
@@ -61,7 +61,7 @@
</div>
</template>
</div>
<div class='status-line medium'></div>
<div class='status-line low'></div>
<div class="pad1">
<table class="coverage-summary">
<thead>
@@ -79,21 +79,6 @@
</tr>
</thead>
<tbody><tr>
<td class="file high" data-value="TSinjex.ts"><a href="./TSinjex.ts.html">TSinjex.ts</a></td>
<td data-value="85.71" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 85%"></div><div class="cover-empty" style="width: 15%"></div></div>
</td>
<td data-value="85.71" class="pct high">85.71%</td>
<td data-value="21" class="abs high">18/21</td>
<td data-value="81.81" class="pct high">81.81%</td>
<td data-value="11" class="abs high">9/11</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="6" class="abs high">6/6</td>
<td data-value="84.21" class="pct high">84.21%</td>
<td data-value="19" class="abs high">16/19</td>
</tr>
<tr>
<td class="file low" data-value="index.ts"><a href="./index.ts.html">index.ts</a></td>
<td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
@@ -116,7 +101,7 @@
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="../prettify.js"></script>
<script>

View File

@@ -96,7 +96,7 @@
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">// Main
<span class="cstat-no" title="statement not covered" >export * from './TSinjex';</span>
<span class="cstat-no" title="statement not covered" >export * from './classes/TSinjex';</span>
&nbsp;
// Decorators
<span class="cstat-no" title="statement not covered" >export * from './decorators/Inject';</span>
@@ -118,7 +118,7 @@ export type * from './types/GenericContructor';
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="../prettify.js"></script>
<script>

View File

@@ -135,7 +135,7 @@ export class TSinjexError extends Error {
*/
constructor(message: string) {
super(message);
this.name = 'TSInjex';
this.name = 'TSinjex';
}
}
&nbsp;
@@ -149,8 +149,8 @@ export class DependencyResolutionError extends TSinjexError {
* @param identifier **The identifier of the dependency**
*/
constructor(identifier: string) {
super(`Dependency ${identifier} not found.`);
this.name = 'TSInjexResolutionError';
super(`Dependency ${identifier} could not be resolved.`);
this.name = 'TSinjexResolutionError';
}
}
&nbsp;</pre></td></tr></table></pre>
@@ -160,7 +160,7 @@ export class DependencyResolutionError extends TSinjexError {
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="../../prettify.js"></script>
<script>

View File

@@ -101,7 +101,7 @@
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="./https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2024-08-16T14:10:46.599Z
at 2024-08-16T14:14:44.371Z
</div>
<script src="../../prettify.js"></script>
<script>