Merge branch 'next/minor' of github.com:Start9Labs/start-os into next/major

This commit is contained in:
Aiden McClelland
2025-03-03 12:51:40 -07:00
213 changed files with 53468 additions and 12274 deletions

View File

@@ -4,6 +4,8 @@ Description=StartOS Container Runtime
[Service] [Service]
Type=simple Type=simple
ExecStart=/usr/bin/node --experimental-detect-module --unhandled-rejections=warn /usr/lib/startos/init/index.js ExecStart=/usr/bin/node --experimental-detect-module --unhandled-rejections=warn /usr/lib/startos/init/index.js
Restart=always
RestartSec=3
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target

File diff suppressed because it is too large Load Diff

View File

@@ -198,6 +198,9 @@ export function makeEffects(context: EffectContext): Effects {
T.Effects["getContainerIp"] T.Effects["getContainerIp"]
> >
}, },
getOsIp(...[]: Parameters<T.Effects["getOsIp"]>) {
return rpcRound("get-os-ip", {}) as ReturnType<T.Effects["getOsIp"]>
},
getHostInfo: ((...[allOptions]: Parameters<T.Effects["getHostInfo"]>) => { getHostInfo: ((...[allOptions]: Parameters<T.Effects["getHostInfo"]>) => {
const options = { const options = {
...allOptions, ...allOptions,

View File

@@ -1,4 +1,9 @@
import { ExtendedVersion, types as T, utils } from "@start9labs/start-sdk" import {
ExtendedVersion,
types as T,
utils,
VersionRange,
} from "@start9labs/start-sdk"
import * as fs from "fs/promises" import * as fs from "fs/promises"
import { polyfillEffects } from "./polyfillEffects" import { polyfillEffects } from "./polyfillEffects"
@@ -345,13 +350,11 @@ export class SystemForEmbassy implements System {
const previousVersion = await effects.getDataVersion() const previousVersion = await effects.getDataVersion()
if (previousVersion) { if (previousVersion) {
if ( if (
(await this.migration(effects, previousVersion, timeoutMs)).configured (await this.migration(effects, { from: previousVersion }, timeoutMs))
.configured
) { ) {
await effects.action.clearRequests({ only: ["needs-config"] }) await effects.action.clearRequests({ only: ["needs-config"] })
} }
await effects.setDataVersion({
version: ExtendedVersion.parseEmver(this.manifest.version).toString(),
})
} else if (this.manifest.config) { } else if (this.manifest.config) {
await effects.action.request({ await effects.action.request({
packageId: this.manifest.id, packageId: this.manifest.id,
@@ -361,6 +364,9 @@ export class SystemForEmbassy implements System {
reason: "This service must be configured before it can be run", reason: "This service must be configured before it can be run",
}) })
} }
await effects.setDataVersion({
version: ExtendedVersion.parseEmver(this.manifest.version).toString(),
})
} }
async exportNetwork(effects: Effects) { async exportNetwork(effects: Effects) {
for (const [id, interfaceValue] of Object.entries( for (const [id, interfaceValue] of Object.entries(
@@ -542,7 +548,10 @@ export class SystemForEmbassy implements System {
nextVersion: Optional<string>, nextVersion: Optional<string>,
timeoutMs: number | null, timeoutMs: number | null,
): Promise<void> { ): Promise<void> {
// TODO Do a migration down if the version exists await this.currentRunning?.clean({ timeout: timeoutMs ?? undefined })
if (nextVersion) {
await this.migration(effects, { to: nextVersion }, timeoutMs)
}
await effects.setMainStatus({ status: "stopped" }) await effects.setMainStatus({ status: "stopped" })
} }
@@ -746,46 +755,37 @@ export class SystemForEmbassy implements System {
async migration( async migration(
effects: Effects, effects: Effects,
fromVersion: string, version: { from: string } | { to: string },
timeoutMs: number | null, timeoutMs: number | null,
): Promise<{ configured: boolean }> { ): Promise<{ configured: boolean }> {
const fromEmver = ExtendedVersion.parseEmver(fromVersion) let migration
const currentEmver = ExtendedVersion.parseEmver(this.manifest.version) let args: [string, ...string[]]
if (!this.manifest.migrations) return { configured: true } if ("from" in version) {
const fromMigration = Object.entries(this.manifest.migrations.from) args = [version.from, "from"]
.map( const fromExver = ExtendedVersion.parse(version.from)
([version, procedure]) => if (!this.manifest.migrations) return { configured: true }
[ExtendedVersion.parseEmver(version), procedure] as const, migration = Object.entries(this.manifest.migrations.from)
) .map(
.find( ([version, procedure]) =>
([versionEmver, procedure]) => [VersionRange.parseEmver(version), procedure] as const,
versionEmver.greaterThan(fromEmver) && )
versionEmver.lessThanOrEqual(currentEmver), .find(([versionEmver, _]) => versionEmver.satisfiedBy(fromExver))
) } else {
const toMigration = Object.entries(this.manifest.migrations.to) args = [version.to, "to"]
.map( const toExver = ExtendedVersion.parse(version.to)
([version, procedure]) => if (!this.manifest.migrations) return { configured: true }
[ExtendedVersion.parseEmver(version), procedure] as const, migration = Object.entries(this.manifest.migrations.to)
) .map(
.find( ([version, procedure]) =>
([versionEmver, procedure]) => [VersionRange.parseEmver(version), procedure] as const,
versionEmver.greaterThan(fromEmver) && )
versionEmver.lessThanOrEqual(currentEmver), .find(([versionEmver, _]) => versionEmver.satisfiedBy(toExver))
) }
// prettier-ignore
const migration = (
fromEmver.greaterThan(currentEmver) ? [toMigration, fromMigration] :
[fromMigration, toMigration]).filter(Boolean)[0]
if (migration) { if (migration) {
const [version, procedure] = migration const [_, procedure] = migration
if (procedure.type === "docker") { if (procedure.type === "docker") {
const commands = [ const commands = [procedure.entrypoint, ...procedure.args]
procedure.entrypoint,
...procedure.args,
JSON.stringify(fromVersion),
]
const container = await DockerProcedureContainer.of( const container = await DockerProcedureContainer.of(
effects, effects,
this.manifest.id, this.manifest.id,
@@ -794,7 +794,11 @@ export class SystemForEmbassy implements System {
`Migration - ${commands.join(" ")}`, `Migration - ${commands.join(" ")}`,
) )
return JSON.parse( return JSON.parse(
(await container.execFail(commands, timeoutMs)).stdout.toString(), (
await container.execFail(commands, timeoutMs, {
input: JSON.stringify(args[0]),
})
).stdout.toString(),
) )
} else if (procedure.type === "script") { } else if (procedure.type === "script") {
const moduleCode = await this.moduleCode const moduleCode = await this.moduleCode
@@ -803,7 +807,7 @@ export class SystemForEmbassy implements System {
throw new Error("Expecting that the method migration exists") throw new Error("Expecting that the method migration exists")
return (await method( return (await method(
polyfillEffects(effects, this.manifest), polyfillEffects(effects, this.manifest),
fromVersion as string, ...args,
).then((x) => { ).then((x) => {
if ("result" in x) return x.result if ("result" in x) return x.result
if ("error" in x) throw new Error("Error getting config: " + x.error) if ("error" in x) throw new Error("Error getting config: " + x.error)
@@ -974,7 +978,7 @@ export class SystemForEmbassy implements System {
})) as U.Config })) as U.Config
if (!oldConfig) return if (!oldConfig) return
const moduleCode = await this.moduleCode const moduleCode = await this.moduleCode
const method = moduleCode.dependencies?.[id]?.autoConfigure const method = moduleCode?.dependencies?.[id]?.autoConfigure
if (!method) return if (!method) return
const newConfig = (await method( const newConfig = (await method(
polyfillEffects(effects, this.manifest), polyfillEffects(effects, this.manifest),
@@ -1177,9 +1181,14 @@ function extractServiceInterfaceId(manifest: Manifest, specInterface: string) {
return serviceInterfaceId return serviceInterfaceId
} }
async function convertToNewConfig(value: OldGetConfigRes) { async function convertToNewConfig(value: OldGetConfigRes) {
const valueSpec: OldConfigSpec = matchOldConfigSpec.unsafeCast(value.spec) try {
const spec = transformConfigSpec(valueSpec) const valueSpec: OldConfigSpec = matchOldConfigSpec.unsafeCast(value.spec)
if (!value.config) return { spec, config: null } const spec = transformConfigSpec(valueSpec)
const config = transformOldConfigToNew(valueSpec, value.config) if (!value.config) return { spec, config: null }
return { spec, config } const config = transformOldConfigToNew(valueSpec, value.config) ?? null
return { spec, config }
} catch (e) {
console.error(e)
throw e
}
} }

View File

@@ -444,8 +444,8 @@ function parseDfOutput(output: string): { used: number; total: number } {
.map((x) => x.split(/\s+/)) .map((x) => x.split(/\s+/))
const index = lines.splice(0, 1)[0].map((x) => x.toLowerCase()) const index = lines.splice(0, 1)[0].map((x) => x.toLowerCase())
const usedIndex = index.indexOf("used") const usedIndex = index.indexOf("used")
const availableIndex = index.indexOf("available") const sizeIndex = index.indexOf("size")
const used = lines.map((x) => Number.parseInt(x[usedIndex]))[0] || 0 const used = lines.map((x) => Number.parseInt(x[usedIndex]))[0] || 0
const total = lines.map((x) => Number.parseInt(x[availableIndex]))[0] || 0 const total = lines.map((x) => Number.parseInt(x[sizeIndex]))[0] || 0
return { used, total } return { used, total }
} }

View File

@@ -146,6 +146,7 @@ export function transformOldConfigToNew(
spec: OldConfigSpec, spec: OldConfigSpec,
config: Record<string, any>, config: Record<string, any>,
): Record<string, any> { ): Record<string, any> {
if (!config) return config
return Object.entries(spec).reduce((obj, [key, val]) => { return Object.entries(spec).reduce((obj, [key, val]) => {
let newVal = config[key] let newVal = config[key]
@@ -157,9 +158,16 @@ export function transformOldConfigToNew(
} }
if (isUnion(val)) { if (isUnion(val)) {
const selection = config[key][val.tag.id] if (!config[key]) return obj
const selection = config[key]?.[val.tag.id]
if (!selection) return obj
delete config[key][val.tag.id] delete config[key][val.tag.id]
if (!val.variants[selection]) return obj
newVal = { newVal = {
selection, selection,
value: transformOldConfigToNew( value: transformOldConfigToNew(
@@ -170,6 +178,8 @@ export function transformOldConfigToNew(
} }
if (isList(val) && isObjectList(val)) { if (isList(val) && isObjectList(val)) {
if (!config[key]) return obj
newVal = (config[key] as object[]).map((obj) => newVal = (config[key] as object[]).map((obj) =>
transformOldConfigToNew( transformOldConfigToNew(
matchOldConfigSpec.unsafeCast(val.spec.spec), matchOldConfigSpec.unsafeCast(val.spec.spec),

750
core/Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -40,11 +40,15 @@ if [[ "${ENVIRONMENT}" =~ (^|-)unstable($|-) ]]; then
RUSTFLAGS="--cfg tokio_unstable" RUSTFLAGS="--cfg tokio_unstable"
fi fi
alias 'rust-zig-builder'='docker run $USE_TTY --rm -e "RUSTFLAGS=$RUSTFLAGS" -v "$HOME/.cargo/registry":/root/.cargo/registry -v "$HOME/.cargo/git":/root/.cargo/git -v "$(pwd)":/home/rust/src -w /home/rust/src -P messense/cargo-zigbuild' if which zig > /dev/null && [ "$ENFORCE_USE_DOCKER" != 1 ]; do
echo "FEATURES=\"$FEATURES\""
echo "RUSTFLAGS=\"$RUSTFLAGS\""
RUSTFLAGS=$RUSTFLAGS sh -c "cd core && cargo zigbuild --release --no-default-features --features cli,$FEATURES --locked --bin start-cli --target=$TARGET"
else
alias 'rust-zig-builder'='docker run $USE_TTY --rm -e "RUSTFLAGS=$RUSTFLAGS" -v "$HOME/.cargo/registry":/root/.cargo/registry -v "$HOME/.cargo/git":/root/.cargo/git -v "$(pwd)":/home/rust/src -w /home/rust/src -P messense/cargo-zigbuild'
RUSTFLAGS=$RUSTFLAGS rust-zig-builder sh -c "cd core && cargo zigbuild --release --no-default-features --features cli,$FEATURES --locked --bin start-cli --target=$TARGET"
echo "FEATURES=\"$FEATURES\"" if [ "$(ls -nd core/target/$TARGET/release/start-cli | awk '{ print $3 }')" != "$UID" ]; then
echo "RUSTFLAGS=\"$RUSTFLAGS\"" rust-zig-builder sh -c "cd core && chown -R $UID:$UID target && chown -R $UID:$UID /root/.cargo"
rust-zig-builder sh -c "cd core && cargo zigbuild --release --no-default-features --features cli,daemon,$FEATURES --locked --bin start-cli --target=$TARGET" fi
if [ "$(ls -nd core/target/$TARGET/release/start-cli | awk '{ print $3 }')" != "$UID" ]; then
rust-zig-builder sh -c "cd core && chown -R $UID:$UID target && chown -R $UID:$UID /root/.cargo"
fi fi

View File

@@ -14,7 +14,7 @@ keywords = [
name = "start-os" name = "start-os"
readme = "README.md" readme = "README.md"
repository = "https://github.com/Start9Labs/start-os" repository = "https://github.com/Start9Labs/start-os"
version = "0.3.6-alpha.13" # VERSION_BUMP version = "0.3.6-alpha.15" # VERSION_BUMP
license = "MIT" license = "MIT"
[lib] [lib]
@@ -40,7 +40,7 @@ path = "src/main.rs"
[features] [features]
cli = [] cli = []
container-runtime = ["procfs", "tty-spawn"] container-runtime = ["procfs", "tty-spawn"]
daemon = [] daemon = ["mail-send"]
registry = [] registry = []
default = ["cli", "daemon", "registry", "container-runtime"] default = ["cli", "daemon", "registry", "container-runtime"]
dev = [] dev = []
@@ -71,7 +71,7 @@ basic-cookies = "0.1.4"
blake3 = { version = "1.5.0", features = ["mmap", "rayon"] } blake3 = { version = "1.5.0", features = ["mmap", "rayon"] }
bytes = "1" bytes = "1"
chrono = { version = "0.4.31", features = ["serde"] } chrono = { version = "0.4.31", features = ["serde"] }
clap = "4.4.12" clap = { version = "4.4.12", features = ["string"] }
color-eyre = "0.6.2" color-eyre = "0.6.2"
console = "0.15.7" console = "0.15.7"
console-subscriber = { version = "0.3.0", optional = true } console-subscriber = { version = "0.3.0", optional = true }
@@ -167,7 +167,7 @@ procfs = { version = "0.16.0", optional = true }
proptest = "1.3.1" proptest = "1.3.1"
proptest-derive = "0.5.0" proptest-derive = "0.5.0"
qrcode = "0.14.1" qrcode = "0.14.1"
rand = { version = "0.8.5", features = ["std"] } rand = "0.9.0"
regex = "1.10.2" regex = "1.10.2"
reqwest = { version = "0.12.4", features = ["stream", "json", "socks"] } reqwest = { version = "0.12.4", features = ["stream", "json", "socks"] }
reqwest_cookie_store = "0.8.0" reqwest_cookie_store = "0.8.0"
@@ -224,7 +224,7 @@ urlencoding = "2.1.3"
uuid = { version = "1.4.1", features = ["v4"] } uuid = { version = "1.4.1", features = ["v4"] }
zbus = "5.1.1" zbus = "5.1.1"
zeroize = "1.6.0" zeroize = "1.6.0"
mail-send = { git = "https://github.com/dr-bonez/mail-send.git", branch = "main" } mail-send = { git = "https://github.com/dr-bonez/mail-send.git", branch = "main", optional = true }
rustls = "0.23.20" rustls = "0.23.20"
rustls-pki-types = { version = "1.10.1", features = ["alloc"] } rustls-pki-types = { version = "1.10.1", features = ["alloc"] }

View File

@@ -38,9 +38,10 @@ impl AccountInfo {
let root_ca_key = generate_key()?; let root_ca_key = generate_key()?;
let root_ca_cert = make_root_cert(&root_ca_key, &hostname, start_time)?; let root_ca_cert = make_root_cert(&root_ca_key, &hostname, start_time)?;
let ssh_key = ssh_key::PrivateKey::from(ssh_key::private::Ed25519Keypair::random( let ssh_key = ssh_key::PrivateKey::from(ssh_key::private::Ed25519Keypair::random(
&mut rand::thread_rng(), &mut ssh_key::rand_core::OsRng::default(),
)); ));
let compat_s9pk_key = ed25519_dalek::SigningKey::generate(&mut rand::thread_rng()); let compat_s9pk_key =
ed25519_dalek::SigningKey::generate(&mut ssh_key::rand_core::OsRng::default());
Ok(Self { Ok(Self {
server_id, server_id,
hostname, hostname,

View File

@@ -82,11 +82,13 @@ impl OsBackupV0 {
root_ca_key: self.root_ca_key.0, root_ca_key: self.root_ca_key.0,
root_ca_cert: self.root_ca_cert.0, root_ca_cert: self.root_ca_cert.0,
ssh_key: ssh_key::PrivateKey::random( ssh_key: ssh_key::PrivateKey::random(
&mut rand::thread_rng(), &mut ssh_key::rand_core::OsRng::default(),
ssh_key::Algorithm::Ed25519, ssh_key::Algorithm::Ed25519,
)?, )?,
tor_keys: vec![TorSecretKeyV3::from(self.tor_key.0)], tor_keys: vec![TorSecretKeyV3::from(self.tor_key.0)],
compat_s9pk_key: ed25519_dalek::SigningKey::generate(&mut rand::thread_rng()), compat_s9pk_key: ed25519_dalek::SigningKey::generate(
&mut ssh_key::rand_core::OsRng::default(),
),
}, },
ui: self.ui, ui: self.ui,
}) })

View File

@@ -2,6 +2,7 @@ use std::cmp::max;
use std::ffi::OsString; use std::ffi::OsString;
use std::net::IpAddr; use std::net::IpAddr;
use std::sync::Arc; use std::sync::Arc;
use std::time::Duration;
use clap::Parser; use clap::Parser;
use color_eyre::eyre::eyre; use color_eyre::eyre::eyre;
@@ -149,8 +150,7 @@ pub fn main(args: impl IntoIterator<Item = OsString>) {
.enable_all() .enable_all()
.build() .build()
.expect("failed to initialize runtime"); .expect("failed to initialize runtime");
rt.block_on(async { let res = rt.block_on(async {
let addrs = crate::net::utils::all_socket_addrs_for(80).await?;
let mut server = WebServer::new(Acceptor::bind_upgradable( let mut server = WebServer::new(Acceptor::bind_upgradable(
SelfContainedNetworkInterfaceListener::bind(80), SelfContainedNetworkInterfaceListener::bind(80),
)); ));
@@ -195,7 +195,9 @@ pub fn main(args: impl IntoIterator<Item = OsString>) {
.await .await
} }
} }
}) });
rt.shutdown_timeout(Duration::from_secs(60));
res
}; };
match res { match res {

View File

@@ -13,6 +13,7 @@ use crate::disk::OsPartitionInfo;
use crate::init::init_postgres; use crate::init::init_postgres;
use crate::prelude::*; use crate::prelude::*;
use crate::util::serde::IoFormat; use crate::util::serde::IoFormat;
use crate::version::VersionT;
use crate::MAIN_DATA; use crate::MAIN_DATA;
pub const DEVICE_CONFIG_PATH: &str = "/media/startos/config/config.yaml"; // "/media/startos/config/config.yaml"; pub const DEVICE_CONFIG_PATH: &str = "/media/startos/config/config.yaml"; // "/media/startos/config/config.yaml";
@@ -57,18 +58,20 @@ pub trait ContextConfig: DeserializeOwned + Default {
#[derive(Debug, Default, Deserialize, Serialize, Parser)] #[derive(Debug, Default, Deserialize, Serialize, Parser)]
#[serde(rename_all = "kebab-case")] #[serde(rename_all = "kebab-case")]
#[command(rename_all = "kebab-case")] #[command(rename_all = "kebab-case")]
#[command(name = "start-cli")]
#[command(version = crate::version::Current::default().semver().to_string())]
pub struct ClientConfig { pub struct ClientConfig {
#[arg(short = 'c', long = "config")] #[arg(short = 'c', long)]
pub config: Option<PathBuf>, pub config: Option<PathBuf>,
#[arg(short = 'h', long = "host")] #[arg(short = 'H', long)]
pub host: Option<Url>, pub host: Option<Url>,
#[arg(short = 'r', long = "registry")] #[arg(short = 'r', long)]
pub registry: Option<Url>, pub registry: Option<Url>,
#[arg(short = 'p', long = "proxy")] #[arg(short = 'p', long)]
pub proxy: Option<Url>, pub proxy: Option<Url>,
#[arg(long = "cookie-path")] #[arg(long)]
pub cookie_path: Option<PathBuf>, pub cookie_path: Option<PathBuf>,
#[arg(long = "developer-key-path")] #[arg(long)]
pub developer_key_path: Option<PathBuf>, pub developer_key_path: Option<PathBuf>,
} }
impl ContextConfig for ClientConfig { impl ContextConfig for ClientConfig {

View File

@@ -1,3 +1,4 @@
use std::backtrace;
use std::collections::{BTreeMap, BTreeSet}; use std::collections::{BTreeMap, BTreeSet};
use std::future::Future; use std::future::Future;
use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4}; use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4};
@@ -484,10 +485,12 @@ impl Drop for RpcContext {
fn drop(&mut self) { fn drop(&mut self) {
#[cfg(feature = "unstable")] #[cfg(feature = "unstable")]
if self.0.is_closed.load(Ordering::SeqCst) { if self.0.is_closed.load(Ordering::SeqCst) {
tracing::info!( let count = Arc::strong_count(&self.0) - 1;
"RpcContext dropped. {} left.", tracing::info!("RpcContext dropped. {} left.", count);
Arc::strong_count(&self.0) - 1 if count > 0 {
); tracing::debug!("{}", backtrace::Backtrace::force_capture());
tracing::debug!("{:?}", eyre!(""))
}
} }
} }
} }

View File

@@ -32,5 +32,7 @@ pub struct Private {
} }
pub fn generate_compat_key() -> Pem<ed25519_dalek::SigningKey> { pub fn generate_compat_key() -> Pem<ed25519_dalek::SigningKey> {
Pem(ed25519_dalek::SigningKey::generate(&mut rand::thread_rng())) Pem(ed25519_dalek::SigningKey::generate(
&mut ssh_key::rand_core::OsRng::default(),
))
} }

View File

@@ -20,7 +20,7 @@ pub fn init(ctx: CliContext) -> Result<(), Error> {
.with_ctx(|_| (crate::ErrorKind::Filesystem, parent.display().to_string()))?; .with_ctx(|_| (crate::ErrorKind::Filesystem, parent.display().to_string()))?;
} }
tracing::info!("Generating new developer key..."); tracing::info!("Generating new developer key...");
let secret = SigningKey::generate(&mut rand::thread_rng()); let secret = SigningKey::generate(&mut ssh_key::rand_core::OsRng::default());
tracing::info!("Writing key to {}", ctx.developer_key_path.display()); tracing::info!("Writing key to {}", ctx.developer_key_path.display());
let keypair_bytes = ed25519::KeypairBytes { let keypair_bytes = ed25519::KeypairBytes {
secret_key: secret.to_bytes(), secret_key: secret.to_bytes(),

View File

@@ -514,11 +514,17 @@ pub async fn cli_install(
#[command(rename_all = "kebab-case")] #[command(rename_all = "kebab-case")]
pub struct UninstallParams { pub struct UninstallParams {
id: PackageId, id: PackageId,
#[arg(long, help = "Do not delete the service data")]
#[serde(default)]
soft: bool,
#[arg(long, help = "Ignore errors in service uninit script")]
#[serde(default)]
force: bool,
} }
pub async fn uninstall( pub async fn uninstall(
ctx: RpcContext, ctx: RpcContext,
UninstallParams { id }: UninstallParams, UninstallParams { id, soft, force }: UninstallParams,
) -> Result<PackageId, Error> { ) -> Result<PackageId, Error> {
ctx.db ctx.db
.mutate(|db| { .mutate(|db| {
@@ -540,7 +546,7 @@ pub async fn uninstall(
let return_id = id.clone(); let return_id = id.clone();
tokio::spawn(async move { tokio::spawn(async move {
if let Err(e) = ctx.services.uninstall(&ctx, &id).await { if let Err(e) = ctx.services.uninstall(&ctx, &id, soft, force).await {
tracing::error!("Error uninstalling service {id}: {e}"); tracing::error!("Error uninstalling service {id}: {e}");
tracing::debug!("{e:?}"); tracing::debug!("{e:?}");
} }

View File

@@ -187,7 +187,7 @@ pub fn acme<C: Context>() -> ParentHandler<C> {
from_fn_async(remove) from_fn_async(remove)
.with_metadata("sync_db", Value::Bool(true)) .with_metadata("sync_db", Value::Bool(true))
.no_display() .no_display()
.with_about("Setup ACME certificate acquisition") .with_about("Remove ACME certificate acquisition configuration")
.with_call_remote::<CliContext>(), .with_call_remote::<CliContext>(),
) )
} }

View File

@@ -265,7 +265,9 @@ impl<A: Accept + Send + Sync + 'static> WebServer<A> {
drop(queue_cell.write().unwrap().take()); drop(queue_cell.write().unwrap().take());
if !runner.is_empty() { if !runner.is_empty() {
runner.await; tokio::time::timeout(Duration::from_secs(60), runner)
.await
.log_err();
} }
})); }));
Self { Self {

View File

@@ -54,8 +54,8 @@ pub fn wifi<C: Context>() -> ParentHandler<C> {
.with_call_remote::<CliContext>(), .with_call_remote::<CliContext>(),
) )
.subcommand( .subcommand(
"delete", "remove",
from_fn_async(delete) from_fn_async(remove)
.no_display() .no_display()
.with_about("Remove a wifi network") .with_about("Remove a wifi network")
.with_call_remote::<CliContext>(), .with_call_remote::<CliContext>(),
@@ -230,7 +230,7 @@ pub async fn connect(ctx: RpcContext, SsidParams { ssid }: SsidParams) -> Result
} }
#[instrument(skip_all)] #[instrument(skip_all)]
pub async fn delete(ctx: RpcContext, SsidParams { ssid }: SsidParams) -> Result<(), Error> { pub async fn remove(ctx: RpcContext, SsidParams { ssid }: SsidParams) -> Result<(), Error> {
let wifi_manager = wifi_manager(&ctx)?; let wifi_manager = wifi_manager(&ctx)?;
if !ssid.is_ascii() { if !ssid.is_ascii() {
return Err(Error::new( return Err(Error::new(

View File

@@ -30,15 +30,15 @@ pub fn notification<C: Context>() -> ParentHandler<C> {
.with_call_remote::<CliContext>(), .with_call_remote::<CliContext>(),
) )
.subcommand( .subcommand(
"delete", "remove",
from_fn_async(delete) from_fn_async(remove)
.no_display() .no_display()
.with_about("Delete notification for a given id") .with_about("Delete notification for a given id")
.with_call_remote::<CliContext>(), .with_call_remote::<CliContext>(),
) )
.subcommand( .subcommand(
"delete-before", "remove-before",
from_fn_async(delete_before) from_fn_async(remove_before)
.no_display() .no_display()
.with_about("Delete notifications preceding a given id") .with_about("Delete notifications preceding a given id")
.with_call_remote::<CliContext>(), .with_call_remote::<CliContext>(),
@@ -126,7 +126,7 @@ pub struct DeleteParams {
id: u32, id: u32,
} }
pub async fn delete(ctx: RpcContext, DeleteParams { id }: DeleteParams) -> Result<(), Error> { pub async fn remove(ctx: RpcContext, DeleteParams { id }: DeleteParams) -> Result<(), Error> {
ctx.db ctx.db
.mutate(|db| { .mutate(|db| {
db.as_private_mut().as_notifications_mut().remove(&id)?; db.as_private_mut().as_notifications_mut().remove(&id)?;
@@ -142,7 +142,7 @@ pub struct DeleteBeforeParams {
before: u32, before: u32,
} }
pub async fn delete_before( pub async fn remove_before(
ctx: RpcContext, ctx: RpcContext,
DeleteBeforeParams { before }: DeleteBeforeParams, DeleteBeforeParams { before }: DeleteBeforeParams,
) -> Result<(), Error> { ) -> Result<(), Error> {

View File

@@ -51,7 +51,7 @@ fn test(files: Vec<(PathBuf, String)>) -> Result<(), Error> {
check_set.insert(path.to_owned(), content); check_set.insert(path.to_owned(), content);
} }
} }
let key = SigningKey::generate(&mut rand::thread_rng()); let key = SigningKey::generate(&mut ssh_key::rand_core::OsRng::default());
let mut a1 = MerkleArchive::new(root, key, "test"); let mut a1 = MerkleArchive::new(root, key, "test");
tokio::runtime::Builder::new_current_thread() tokio::runtime::Builder::new_current_thread()
.enable_io() .enable_io()

View File

@@ -27,6 +27,7 @@ pub const SIG_CONTEXT: &str = "s9pk";
pub mod compat; pub mod compat;
pub mod manifest; pub mod manifest;
pub mod pack; pub mod pack;
pub mod recipe;
/** /**
/ /

View File

@@ -26,6 +26,7 @@ use crate::s9pk::merkle_archive::source::{
into_dyn_read, ArchiveSource, DynFileSource, DynRead, FileSource, TmpSource, into_dyn_read, ArchiveSource, DynFileSource, DynRead, FileSource, TmpSource,
}; };
use crate::s9pk::merkle_archive::{Entry, MerkleArchive}; use crate::s9pk::merkle_archive::{Entry, MerkleArchive};
use crate::s9pk::v2::recipe::DirRecipe;
use crate::s9pk::v2::SIG_CONTEXT; use crate::s9pk::v2::SIG_CONTEXT;
use crate::s9pk::S9pk; use crate::s9pk::S9pk;
use crate::util::io::{create_file, open_file, TmpDir}; use crate::util::io::{create_file, open_file, TmpDir};
@@ -363,6 +364,7 @@ pub enum ImageSource {
build_args: Option<BTreeMap<String, BuildArg>>, build_args: Option<BTreeMap<String, BuildArg>>,
}, },
DockerTag(String), DockerTag(String),
// Recipe(DirRecipe),
} }
impl ImageSource { impl ImageSource {
pub fn ingredients(&self) -> Vec<PathBuf> { pub fn ingredients(&self) -> Vec<PathBuf> {
@@ -399,6 +401,8 @@ impl ImageSource {
working_dir: PathBuf, working_dir: PathBuf,
#[serde(default)] #[serde(default)]
user: String, user: String,
entrypoint: Option<Vec<String>>,
cmd: Option<Vec<String>>,
} }
async move { async move {
match self { match self {
@@ -422,6 +426,9 @@ impl ImageSource {
// docker buildx build ${path} -o type=image,name=start9/${id} // docker buildx build ${path} -o type=image,name=start9/${id}
let tag = format!("start9/{id}/{image_id}:{}", new_guid()); let tag = format!("start9/{id}/{image_id}:{}", new_guid());
let mut command = Command::new(CONTAINER_TOOL); let mut command = Command::new(CONTAINER_TOOL);
if CONTAINER_TOOL == "docker" {
command.arg("buildx");
}
command command
.arg("build") .arg("build")
.arg(workdir) .arg(workdir)
@@ -528,6 +535,8 @@ impl ImageSource {
} else { } else {
config.user.into() config.user.into()
}, },
entrypoint: config.entrypoint,
cmd: config.cmd,
}) })
.with_kind(ErrorKind::Serialization)? .with_kind(ErrorKind::Serialization)?
.into(), .into(),
@@ -553,6 +562,7 @@ impl ImageSource {
Command::new(CONTAINER_TOOL) Command::new(CONTAINER_TOOL)
.arg("create") .arg("create")
.arg(&docker_platform) .arg(&docker_platform)
.arg("--entrypoint=/bin/sh")
.arg(&tag) .arg(&tag)
.invoke(ErrorKind::Docker) .invoke(ErrorKind::Docker)
.await?, .await?,
@@ -603,8 +613,8 @@ fn tar2sqfs(dest: impl AsRef<Path>) -> Result<Command, Error> {
.arg("run") .arg("run")
.arg("-i") .arg("-i")
.arg("--rm") .arg("--rm")
.arg("-v") .arg("--mount")
.arg(format!("{}:/data:rw", directory.display())) .arg(format!("type=bind,src={},dst=/data", directory.display()))
.arg("ghcr.io/start9labs/sdk/utils:latest") .arg("ghcr.io/start9labs/sdk/utils:latest")
.arg("tar2sqfs") .arg("tar2sqfs")
.arg("-q") .arg("-q")
@@ -621,6 +631,8 @@ pub struct ImageMetadata {
pub workdir: PathBuf, pub workdir: PathBuf,
#[ts(type = "string")] #[ts(type = "string")]
pub user: InternedString, pub user: InternedString,
pub entrypoint: Option<Vec<String>>,
pub cmd: Option<Vec<String>>,
} }
#[instrument(skip_all)] #[instrument(skip_all)]

View File

@@ -0,0 +1,21 @@
use std::collections::BTreeMap;
use std::path::PathBuf;
use serde::{Deserialize, Serialize};
use ts_rs::TS;
use url::Url;
#[derive(Debug, Clone, Deserialize, Serialize, TS)]
pub struct DirRecipe(BTreeMap<PathBuf, Recipe>);
#[derive(Debug, Clone, Deserialize, Serialize, TS)]
#[serde(rename_all = "camelCase")]
pub enum Recipe {
Make(PathBuf),
Wget {
#[ts(type = "string")]
url: Url,
checksum: String,
},
Recipe(DirRecipe),
}

View File

@@ -1,9 +1,11 @@
use std::net::Ipv4Addr;
use rpc_toolkit::{from_fn, from_fn_async, from_fn_blocking, Context, HandlerExt, ParentHandler}; use rpc_toolkit::{from_fn, from_fn_async, from_fn_blocking, Context, HandlerExt, ParentHandler};
use crate::echo;
use crate::prelude::*; use crate::prelude::*;
use crate::service::cli::ContainerCliContext; use crate::service::cli::ContainerCliContext;
use crate::service::effects::context::EffectContext; use crate::service::effects::context::EffectContext;
use crate::{echo, HOST_IP};
mod action; mod action;
pub mod callbacks; pub mod callbacks;
@@ -134,6 +136,10 @@ pub fn handler<C: Context>() -> ParentHandler<C> {
"get-container-ip", "get-container-ip",
from_fn_async(net::info::get_container_ip).no_cli(), from_fn_async(net::info::get_container_ip).no_cli(),
) )
.subcommand(
"get-os-ip",
from_fn(|_: C| Ok::<_, Error>(Ipv4Addr::from(HOST_IP))),
)
.subcommand( .subcommand(
"export-service-interface", "export-service-interface",
from_fn_async(net::interface::export_service_interface).no_cli(), from_fn_async(net::interface::export_service_interface).no_cli(),

View File

@@ -1,6 +1,7 @@
use std::net::Ipv4Addr; use std::net::Ipv4Addr;
use crate::service::effects::prelude::*; use crate::service::effects::prelude::*;
use crate::HOST_IP;
pub async fn get_container_ip(context: EffectContext) -> Result<Ipv4Addr, Error> { pub async fn get_container_ip(context: EffectContext) -> Result<Ipv4Addr, Error> {
let context = context.deref()?; let context = context.deref()?;

View File

@@ -5,6 +5,7 @@ use models::ImageId;
use tokio::process::Command; use tokio::process::Command;
use crate::disk::mount::filesystem::overlayfs::OverlayGuard; use crate::disk::mount::filesystem::overlayfs::OverlayGuard;
use crate::disk::mount::guard::GenericMountGuard;
use crate::rpc_continuations::Guid; use crate::rpc_continuations::Guid;
use crate::service::effects::prelude::*; use crate::service::effects::prelude::*;
use crate::service::persistent_container::Subcontainer; use crate::service::persistent_container::Subcontainer;
@@ -40,6 +41,24 @@ pub async fn destroy_subcontainer_fs(
.await .await
.remove(&guid) .remove(&guid)
{ {
#[cfg(feature = "container-runtime")]
if tokio::fs::metadata(overlay.overlay.path().join("proc/1"))
.await
.is_ok()
{
let procfs = context
.seed
.persistent_container
.lxc_container
.get()
.or_not_found("lxc container")?
.rootfs_dir()
.join("proc");
let overlay_path = overlay.overlay.path().to_owned();
tokio::task::spawn_blocking(move || sync::kill_init(&procfs, &overlay_path))
.await
.with_kind(ErrorKind::Unknown)??;
}
overlay.overlay.unmount(true).await?; overlay.overlay.unmount(true).await?;
} else { } else {
tracing::warn!("Could not find a subcontainer fs to destroy; assumming that it already is destroyed and will be skipping"); tracing::warn!("Could not find a subcontainer fs to destroy; assumming that it already is destroyed and will be skipping");

View File

@@ -20,6 +20,54 @@ const FWD_SIGNALS: &[c_int] = &[
SIGTSTP, SIGTTIN, SIGTTOU, SIGURG, SIGUSR1, SIGUSR2, SIGVTALRM, SIGTSTP, SIGTTIN, SIGTTOU, SIGURG, SIGUSR1, SIGUSR2, SIGVTALRM,
]; ];
pub fn kill_init(procfs: &Path, chroot: &Path) -> Result<(), Error> {
if chroot.join("proc/1").exists() {
let ns_id = procfs::process::Process::new_with_root(chroot.join("proc/1"))
.with_ctx(|_| (ErrorKind::Filesystem, "open subcontainer procfs"))?
.namespaces()
.with_ctx(|_| (ErrorKind::Filesystem, "read subcontainer pid 1 ns"))?
.0
.get(OsStr::new("pid"))
.or_not_found("pid namespace")?
.identifier;
for proc in procfs::process::all_processes_with_root(procfs)
.with_ctx(|_| (ErrorKind::Filesystem, "open procfs"))?
{
let proc = proc.with_ctx(|_| (ErrorKind::Filesystem, "read single process details"))?;
let pid = proc.pid();
if proc
.namespaces()
.with_ctx(|_| (ErrorKind::Filesystem, lazy_format!("read pid {} ns", pid)))?
.0
.get(OsStr::new("pid"))
.map_or(false, |ns| ns.identifier == ns_id)
{
let pids = proc.read::<NSPid>("status").with_ctx(|_| {
(
ErrorKind::Filesystem,
lazy_format!("read pid {} NSpid", pid),
)
})?;
if pids.0.len() == 2 && pids.0[1] == 1 {
nix::sys::signal::kill(Pid::from_raw(pid), nix::sys::signal::SIGKILL)
.with_ctx(|_| {
(
ErrorKind::Filesystem,
lazy_format!(
"kill pid {} (determined to be pid 1 in subcontainer)",
pid
),
)
})?;
}
}
}
nix::mount::umount(&chroot.join("proc"))
.with_ctx(|_| (ErrorKind::Filesystem, "unmounting subcontainer procfs"))?;
}
Ok(())
}
struct NSPid(Vec<i32>); struct NSPid(Vec<i32>);
impl procfs::FromBufRead for NSPid { impl procfs::FromBufRead for NSPid {
fn from_buf_read<R: std::io::BufRead>(r: R) -> procfs::ProcResult<Self> { fn from_buf_read<R: std::io::BufRead>(r: R) -> procfs::ProcResult<Self> {
@@ -98,21 +146,27 @@ impl ExecParams {
if let Some(uid) = user.as_deref().and_then(|u| u.parse::<u32>().ok()) { if let Some(uid) = user.as_deref().and_then(|u| u.parse::<u32>().ok()) {
cmd.uid(uid); cmd.uid(uid);
} else if let Some(user) = user { } else if let Some(user) = user {
let (uid, gid) = std::fs::read_to_string("/etc/passwd") let passwd = std::fs::read_to_string("/etc/passwd")
.with_ctx(|_| (ErrorKind::Filesystem, "read /etc/passwd"))? .with_ctx(|_| (ErrorKind::Filesystem, "read /etc/passwd"));
.lines() if passwd.is_err() && user == "root" {
.find_map(|l| { cmd.uid(0);
let mut split = l.trim().split(":"); cmd.gid(0);
if user != split.next()? { } else {
return None; let (uid, gid) = passwd?
} .lines()
split.next(); // throw away x .find_map(|l| {
Some((split.next()?.parse().ok()?, split.next()?.parse().ok()?)) let mut split = l.trim().split(":");
// uid gid if user != split.next()? {
}) return None;
.or_not_found(lazy_format!("{user} in /etc/passwd"))?; }
cmd.uid(uid); split.next(); // throw away x
cmd.gid(gid); Some((split.next()?.parse().ok()?, split.next()?.parse().ok()?))
// uid gid
})
.or_not_found(lazy_format!("{user} in /etc/passwd"))?;
cmd.uid(uid);
cmd.gid(gid);
}
}; };
if let Some(workdir) = workdir { if let Some(workdir) = workdir {
cmd.current_dir(workdir); cmd.current_dir(workdir);
@@ -134,51 +188,7 @@ pub fn launch(
command, command,
}: ExecParams, }: ExecParams,
) -> Result<(), Error> { ) -> Result<(), Error> {
if chroot.join("proc/1").exists() { kill_init(Path::new("/proc"), &chroot)?;
let ns_id = procfs::process::Process::new_with_root(chroot.join("proc/1"))
.with_ctx(|_| (ErrorKind::Filesystem, "open subcontainer procfs"))?
.namespaces()
.with_ctx(|_| (ErrorKind::Filesystem, "read subcontainer pid 1 ns"))?
.0
.get(OsStr::new("pid"))
.or_not_found("pid namespace")?
.identifier;
for proc in
procfs::process::all_processes().with_ctx(|_| (ErrorKind::Filesystem, "open procfs"))?
{
let proc = proc.with_ctx(|_| (ErrorKind::Filesystem, "read single process details"))?;
let pid = proc.pid();
if proc
.namespaces()
.with_ctx(|_| (ErrorKind::Filesystem, lazy_format!("read pid {} ns", pid)))?
.0
.get(OsStr::new("pid"))
.map_or(false, |ns| ns.identifier == ns_id)
{
let pids = proc.read::<NSPid>("status").with_ctx(|_| {
(
ErrorKind::Filesystem,
lazy_format!("read pid {} NSpid", pid),
)
})?;
if pids.0.len() == 2 && pids.0[1] == 1 {
nix::sys::signal::kill(Pid::from_raw(pid), nix::sys::signal::SIGKILL)
.with_ctx(|_| {
(
ErrorKind::Filesystem,
lazy_format!(
"kill pid {} (determined to be pid 1 in subcontainer)",
pid
),
)
})?;
}
}
}
nix::mount::umount(&chroot.join("proc"))
.with_ctx(|_| (ErrorKind::Filesystem, "unmounting subcontainer procfs"))?;
}
if (std::io::stdin().is_terminal() if (std::io::stdin().is_terminal()
&& std::io::stdout().is_terminal() && std::io::stdout().is_terminal()
&& std::io::stderr().is_terminal()) && std::io::stderr().is_terminal())

View File

@@ -117,8 +117,11 @@ impl ServiceRef {
pub async fn uninstall( pub async fn uninstall(
self, self,
target_version: Option<models::VersionString>, target_version: Option<models::VersionString>,
soft: bool,
force: bool,
) -> Result<(), Error> { ) -> Result<(), Error> {
self.seed let uninit_res = self
.seed
.persistent_container .persistent_container
.execute::<NoOutput>( .execute::<NoOutput>(
Guid::new(), Guid::new(),
@@ -126,7 +129,12 @@ impl ServiceRef {
to_value(&target_version)?, to_value(&target_version)?,
None, None,
) // TODO timeout ) // TODO timeout
.await?; .await;
if force {
uninit_res.log_err();
} else {
uninit_res?;
}
let id = self.seed.persistent_container.s9pk.as_manifest().id.clone(); let id = self.seed.persistent_container.s9pk.as_manifest().id.clone();
let ctx = self.seed.ctx.clone(); let ctx = self.seed.ctx.clone();
self.shutdown().await?; self.shutdown().await?;
@@ -166,24 +174,26 @@ impl ServiceRef {
.await? .await?
{ {
let state = pde.state_info.expect_removing()?; let state = pde.state_info.expect_removing()?;
for volume_id in &state.manifest.volumes { if !soft {
let path = data_dir(DATA_DIR, &state.manifest.id, volume_id); for volume_id in &state.manifest.volumes {
if tokio::fs::metadata(&path).await.is_ok() { let path = data_dir(DATA_DIR, &state.manifest.id, volume_id);
tokio::fs::remove_dir_all(&path).await?; if tokio::fs::metadata(&path).await.is_ok() {
tokio::fs::remove_dir_all(&path).await?;
}
}
let logs_dir = Path::new(PACKAGE_DATA)
.join("logs")
.join(&state.manifest.id);
if tokio::fs::metadata(&logs_dir).await.is_ok() {
tokio::fs::remove_dir_all(&logs_dir).await?;
}
let archive_path = Path::new(PACKAGE_DATA)
.join("archive")
.join("installed")
.join(&state.manifest.id);
if tokio::fs::metadata(&archive_path).await.is_ok() {
tokio::fs::remove_file(&archive_path).await?;
} }
}
let logs_dir = Path::new(PACKAGE_DATA)
.join("logs")
.join(&state.manifest.id);
if tokio::fs::metadata(&logs_dir).await.is_ok() {
tokio::fs::remove_dir_all(&logs_dir).await?;
}
let archive_path = Path::new(PACKAGE_DATA)
.join("archive")
.join("installed")
.join(&state.manifest.id);
if tokio::fs::metadata(&archive_path).await.is_ok() {
tokio::fs::remove_file(&archive_path).await?;
} }
} }
} }
@@ -397,7 +407,7 @@ impl Service {
tracing::debug!("{e:?}") tracing::debug!("{e:?}")
}) })
{ {
match service.uninstall(None).await { match service.uninstall(None, false, false).await {
Err(e) => { Err(e) => {
tracing::error!("Error uninstalling service: {e}"); tracing::error!("Error uninstalling service: {e}");
tracing::debug!("{e:?}") tracing::debug!("{e:?}")

View File

@@ -286,7 +286,7 @@ impl ServiceMap {
.version .version
.clone(); .clone();
service service
.uninstall(Some(s9pk.as_manifest().version.clone())) .uninstall(Some(s9pk.as_manifest().version.clone()), false, false)
.await?; .await?;
progress.complete(); progress.complete();
Some(version) Some(version)
@@ -321,12 +321,18 @@ impl ServiceMap {
/// This is ran during the cleanup, so when we are uninstalling the service /// This is ran during the cleanup, so when we are uninstalling the service
#[instrument(skip_all)] #[instrument(skip_all)]
pub async fn uninstall(&self, ctx: &RpcContext, id: &PackageId) -> Result<(), Error> { pub async fn uninstall(
&self,
ctx: &RpcContext,
id: &PackageId,
soft: bool,
force: bool,
) -> Result<(), Error> {
let mut guard = self.get_mut(id).await; let mut guard = self.get_mut(id).await;
if let Some(service) = guard.take() { if let Some(service) = guard.take() {
ServiceRefReloadGuard::new(ctx.clone(), id.clone(), "Uninstall") ServiceRefReloadGuard::new(ctx.clone(), id.clone(), "Uninstall")
.handle_last(async move { .handle_last(async move {
let res = service.uninstall(None).await; let res = service.uninstall(None, soft, force).await;
drop(guard); drop(guard);
res res
}) })

View File

@@ -99,8 +99,8 @@ pub fn ssh<C: Context>() -> ParentHandler<C> {
.with_call_remote::<CliContext>(), .with_call_remote::<CliContext>(),
) )
.subcommand( .subcommand(
"delete", "remove",
from_fn_async(delete) from_fn_async(remove)
.no_display() .no_display()
.with_about("Remove ssh key") .with_about("Remove ssh key")
.with_call_remote::<CliContext>(), .with_call_remote::<CliContext>(),
@@ -159,7 +159,7 @@ pub struct DeleteParams {
} }
#[instrument(skip_all)] #[instrument(skip_all)]
pub async fn delete( pub async fn remove(
ctx: RpcContext, ctx: RpcContext,
DeleteParams { fingerprint }: DeleteParams, DeleteParams { fingerprint }: DeleteParams,
) -> Result<(), Error> { ) -> Result<(), Error> {

View File

@@ -7,10 +7,7 @@ use clap::Parser;
use color_eyre::eyre::eyre; use color_eyre::eyre::eyre;
use futures::FutureExt; use futures::FutureExt;
use imbl::vector; use imbl::vector;
use mail_send::mail_builder::{self, MessageBuilder};
use mail_send::SmtpClientBuilder;
use rpc_toolkit::{from_fn_async, Context, Empty, HandlerExt, ParentHandler}; use rpc_toolkit::{from_fn_async, Context, Empty, HandlerExt, ParentHandler};
use rustls::crypto::CryptoProvider;
use rustls::RootCertStore; use rustls::RootCertStore;
use rustls_pki_types::CertificateDer; use rustls_pki_types::CertificateDer;
use serde::{Deserialize, Deserializer, Serialize, Serializer}; use serde::{Deserialize, Deserializer, Serialize, Serializer};
@@ -906,64 +903,74 @@ pub async fn test_smtp(
password, password,
}: TestSmtpParams, }: TestSmtpParams,
) -> Result<(), Error> { ) -> Result<(), Error> {
use rustls_pki_types::pem::PemObject; #[cfg(feature = "mail-send")]
{
use mail_send::mail_builder::{self, MessageBuilder};
use mail_send::SmtpClientBuilder;
use rustls_pki_types::pem::PemObject;
let Some(pass_val) = password else { let Some(pass_val) = password else {
return Err(Error::new( return Err(Error::new(
eyre!("mail-send requires a password"), eyre!("mail-send requires a password"),
ErrorKind::InvalidRequest, ErrorKind::InvalidRequest,
)); ));
}; };
let mut root_cert_store = RootCertStore::empty(); let mut root_cert_store = RootCertStore::empty();
let pem = tokio::fs::read("/etc/ssl/certs/ca-certificates.crt").await?; let pem = tokio::fs::read("/etc/ssl/certs/ca-certificates.crt").await?;
for cert in CertificateDer::pem_slice_iter(&pem) { for cert in CertificateDer::pem_slice_iter(&pem) {
root_cert_store.add_parsable_certificates([cert.with_kind(ErrorKind::OpenSsl)?]); root_cert_store.add_parsable_certificates([cert.with_kind(ErrorKind::OpenSsl)?]);
}
let cfg = Arc::new(
rustls::ClientConfig::builder_with_provider(Arc::new(
rustls::crypto::ring::default_provider(),
))
.with_safe_default_protocol_versions()?
.with_root_certificates(root_cert_store)
.with_no_client_auth(),
);
let client = SmtpClientBuilder::new_with_tls_config(server, port, cfg)
.implicit_tls(false)
.credentials((login.split("@").next().unwrap().to_owned(), pass_val));
fn parse_address<'a>(addr: &'a str) -> mail_builder::headers::address::Address<'a> {
if addr.find("<").map_or(false, |start| {
addr.find(">").map_or(false, |end| start < end)
}) {
addr.split_once("<")
.map(|(name, addr)| (name.trim(), addr.strip_suffix(">").unwrap_or(addr)))
.unwrap()
.into()
} else {
addr.into()
} }
}
let message = MessageBuilder::new() let cfg = Arc::new(
.from(parse_address(&from)) rustls::ClientConfig::builder_with_provider(Arc::new(
.to(parse_address(&to)) rustls::crypto::ring::default_provider(),
.subject("StartOS Test Email") ))
.text_body("This is a test email sent from your StartOS Server"); .with_safe_default_protocol_versions()?
client .with_root_certificates(root_cert_store)
.connect() .with_no_client_auth(),
.await );
.map_err(|e| { let client = SmtpClientBuilder::new_with_tls_config(server, port, cfg)
Error::new( .implicit_tls(false)
eyre!("mail-send connection error: {:?}", e), .credentials((login.split("@").next().unwrap().to_owned(), pass_val));
ErrorKind::Unknown,
) fn parse_address<'a>(addr: &'a str) -> mail_builder::headers::address::Address<'a> {
})? if addr.find("<").map_or(false, |start| {
.send(message) addr.find(">").map_or(false, |end| start < end)
.await }) {
.map_err(|e| Error::new(eyre!("mail-send send error: {:?}", e), ErrorKind::Unknown))?; addr.split_once("<")
Ok(()) .map(|(name, addr)| (name.trim(), addr.strip_suffix(">").unwrap_or(addr)))
.unwrap()
.into()
} else {
addr.into()
}
}
let message = MessageBuilder::new()
.from(parse_address(&from))
.to(parse_address(&to))
.subject("StartOS Test Email")
.text_body("This is a test email sent from your StartOS Server");
client
.connect()
.await
.map_err(|e| {
Error::new(
eyre!("mail-send connection error: {:?}", e),
ErrorKind::Unknown,
)
})?
.send(message)
.await
.map_err(|e| Error::new(eyre!("mail-send send error: {:?}", e), ErrorKind::Unknown))?;
Ok(())
}
#[cfg(not(feature = "mail-send"))]
Err(Error::new(
eyre!("test-smtp requires mail-send feature to be enabled"),
ErrorKind::InvalidRequest,
))
} }
#[tokio::test] #[tokio::test]

View File

@@ -61,30 +61,31 @@ impl StartOSLogger {
use tracing_subscriber::prelude::*; use tracing_subscriber::prelude::*;
use tracing_subscriber::{fmt, EnvFilter}; use tracing_subscriber::{fmt, EnvFilter};
let filter_layer = EnvFilter::builder() let filter_layer = || {
.with_default_directive( EnvFilter::builder()
format!("{}=info", std::module_path!().split("::").next().unwrap()) .with_default_directive(
.parse() format!("{}=info", std::module_path!().split("::").next().unwrap())
.unwrap(), .parse()
) .unwrap(),
.from_env_lossy(); )
#[cfg(feature = "unstable")] .from_env_lossy()
let filter_layer = filter_layer };
.add_directive("tokio=trace".parse().unwrap())
.add_directive("runtime=trace".parse().unwrap());
let fmt_layer = fmt::layer() let fmt_layer = fmt::layer()
.with_writer(logfile) .with_writer(logfile)
.with_line_number(true) .with_line_number(true)
.with_file(true) .with_file(true)
.with_target(true); .with_target(true)
.with_filter(filter_layer());
let sub = tracing_subscriber::registry() let sub = tracing_subscriber::registry();
.with(filter_layer)
.with(fmt_layer)
.with(ErrorLayer::default());
#[cfg(feature = "unstable")] #[cfg(feature = "unstable")]
let sub = sub.with(console_subscriber::spawn()); let sub = sub.with(console_subscriber::spawn());
#[cfg(not(feature = "unstable"))]
let sub = sub.with(filter_layer());
let sub = sub.with(fmt_layer).with(ErrorLayer::default());
sub sub
} }

View File

@@ -648,7 +648,7 @@ impl<'a, T> From<&'a T> for MaybeOwned<'a, T> {
pub fn new_guid() -> InternedString { pub fn new_guid() -> InternedString {
use rand::RngCore; use rand::RngCore;
let mut buf = [0; 20]; let mut buf = [0; 20];
rand::thread_rng().fill_bytes(&mut buf); rand::rng().fill_bytes(&mut buf);
InternedString::intern(base32::encode( InternedString::intern(base32::encode(
base32::Alphabet::Rfc4648 { padding: false }, base32::Alphabet::Rfc4648 { padding: false },
&buf, &buf,

View File

@@ -1,7 +1,12 @@
use std::collections::VecDeque;
use std::pin::Pin; use std::pin::Pin;
use std::sync::Arc; use std::sync::atomic::AtomicUsize;
use std::sync::{Arc, Weak};
use std::task::{Poll, Waker}; use std::task::{Poll, Waker};
use futures::stream::BoxStream;
use futures::Stream;
#[derive(Debug, Default)] #[derive(Debug, Default)]
pub struct SyncMutex<T>(std::sync::Mutex<T>); pub struct SyncMutex<T>(std::sync::Mutex<T>);
impl<T> SyncMutex<T> { impl<T> SyncMutex<T> {
@@ -160,3 +165,149 @@ impl<T: Clone> futures::Stream for Watch<T> {
(1, None) (1, None)
} }
} }
struct DupState<T, Upstream = BoxStream<'static, T>>
where
T: Clone,
Upstream: Stream<Item = T> + Unpin,
{
buffer: VecDeque<T>,
upstream: Upstream,
pos: usize,
pos_refs: Vec<Weak<AtomicUsize>>,
wakers: Vec<Waker>,
}
impl<T: Clone, Upstream: Stream<Item = T> + Unpin> DupState<T, Upstream> {
fn poll_next(&mut self, cx: &mut std::task::Context<'_>) -> Poll<Option<T>> {
use futures::stream::StreamExt;
let Some(next) = futures::ready!(self.upstream.poll_next_unpin(cx)) else {
return Poll::Ready(None);
};
self.pos += 1;
self.buffer.push_back(next.clone());
for waker in self.wakers.drain(..) {
if !waker.will_wake(cx.waker()) {
waker.wake();
}
}
Poll::Ready(Some(next))
}
}
pub struct DupStream<T, Upstream = BoxStream<'static, T>>
where
T: Clone,
Upstream: Stream<Item = T> + Unpin,
{
state: Arc<SyncMutex<DupState<T, Upstream>>>,
pos: Arc<AtomicUsize>,
}
impl<T: Clone, Upstream: Stream<Item = T> + Unpin> DupStream<T, Upstream> {
pub fn new(upstream: Upstream) -> Self {
let pos = Arc::new(AtomicUsize::new(0));
Self {
state: Arc::new(SyncMutex::new(DupState {
buffer: VecDeque::new(),
upstream,
pos: 0,
pos_refs: vec![Arc::downgrade(&pos)],
wakers: Vec::new(),
})),
pos,
}
}
}
impl<T: Clone, Upstream: Stream<Item = T> + Unpin> Clone for DupStream<T, Upstream> {
fn clone(&self) -> Self {
let pos = self.state.mutate(|state| {
let pos = Arc::new(AtomicUsize::new(
self.pos.load(std::sync::atomic::Ordering::Relaxed),
));
state.pos_refs.push(Arc::downgrade(&pos));
state.pos_refs.retain(|ptr| ptr.strong_count() > 0);
pos
});
Self {
state: self.state.clone(),
pos,
}
}
}
impl<T: Clone, Upstream: Stream<Item = T> + Unpin> Stream for DupStream<T, Upstream> {
type Item = T;
fn poll_next(
self: Pin<&mut Self>,
cx: &mut std::task::Context<'_>,
) -> Poll<Option<Self::Item>> {
self.state.mutate(|state| {
let pos = self.pos.load(std::sync::atomic::Ordering::Relaxed);
if pos < state.pos {
self.pos.fetch_add(1, std::sync::atomic::Ordering::Relaxed);
if state
.pos_refs
.iter()
.filter_map(|ptr| ptr.upgrade())
.all(|ptr| ptr.load(std::sync::atomic::Ordering::Relaxed) > pos)
{
while let Some(next) = state.buffer.pop_front() {
if state.buffer.len() + 1 == state.pos - pos {
return Poll::Ready(Some(next));
}
}
Poll::Ready(None)
} else {
Poll::Ready(
state
.buffer
.get(state.buffer.len() + pos - state.pos)
.cloned(),
)
}
} else {
let res = state.poll_next(cx);
if res.is_ready() {
self.pos
.store(state.pos, std::sync::atomic::Ordering::Relaxed);
} else {
let waker = cx.waker();
if state.wakers.iter().all(|w| !w.will_wake(waker)) {
state.wakers.push(waker.clone());
}
}
res
}
})
}
}
#[tokio::test]
async fn test_dup_stream() {
use std::time::Duration;
use futures::StreamExt;
let stream = async_stream::stream! {
for i in 0..100 {
tokio::time::sleep(Duration::from_nanos(rand::random_range(0..=10000000))).await;
yield i;
}
}
.boxed();
let n = rand::random_range(3..10);
let mut tasks = Vec::with_capacity(n);
for mut dup_stream in std::iter::repeat_n(DupStream::new(stream), n) {
tasks.push(tokio::spawn(async move {
let mut ctr = 0;
while let Some(i) = dup_stream.next().await {
assert_eq!(ctr, i);
ctr += 1;
tokio::time::sleep(Duration::from_nanos(rand::random_range(0..=10000000))).await;
}
assert_eq!(ctr, 100);
}));
}
futures::future::try_join_all(tasks).await.unwrap();
}

View File

@@ -33,8 +33,10 @@ mod v0_3_6_alpha_10;
mod v0_3_6_alpha_11; mod v0_3_6_alpha_11;
mod v0_3_6_alpha_12; mod v0_3_6_alpha_12;
mod v0_3_6_alpha_13; mod v0_3_6_alpha_13;
mod v0_3_6_alpha_14;
mod v0_3_6_alpha_15;
pub type Current = v0_3_6_alpha_13::Version; // VERSION_BUMP pub type Current = v0_3_6_alpha_15::Version; // VERSION_BUMP
impl Current { impl Current {
#[instrument(skip(self, db))] #[instrument(skip(self, db))]
@@ -129,7 +131,9 @@ enum Version {
V0_3_6_alpha_10(Wrapper<v0_3_6_alpha_10::Version>), V0_3_6_alpha_10(Wrapper<v0_3_6_alpha_10::Version>),
V0_3_6_alpha_11(Wrapper<v0_3_6_alpha_11::Version>), V0_3_6_alpha_11(Wrapper<v0_3_6_alpha_11::Version>),
V0_3_6_alpha_12(Wrapper<v0_3_6_alpha_12::Version>), V0_3_6_alpha_12(Wrapper<v0_3_6_alpha_12::Version>),
V0_3_6_alpha_13(Wrapper<v0_3_6_alpha_13::Version>), // VERSION_BUMP V0_3_6_alpha_13(Wrapper<v0_3_6_alpha_13::Version>),
V0_3_6_alpha_14(Wrapper<v0_3_6_alpha_14::Version>),
V0_3_6_alpha_15(Wrapper<v0_3_6_alpha_15::Version>), // VERSION_BUMP
Other(exver::Version), Other(exver::Version),
} }
@@ -166,7 +170,9 @@ impl Version {
Self::V0_3_6_alpha_10(v) => DynVersion(Box::new(v.0)), Self::V0_3_6_alpha_10(v) => DynVersion(Box::new(v.0)),
Self::V0_3_6_alpha_11(v) => DynVersion(Box::new(v.0)), Self::V0_3_6_alpha_11(v) => DynVersion(Box::new(v.0)),
Self::V0_3_6_alpha_12(v) => DynVersion(Box::new(v.0)), Self::V0_3_6_alpha_12(v) => DynVersion(Box::new(v.0)),
Self::V0_3_6_alpha_13(v) => DynVersion(Box::new(v.0)), // VERSION_BUMP Self::V0_3_6_alpha_13(v) => DynVersion(Box::new(v.0)),
Self::V0_3_6_alpha_14(v) => DynVersion(Box::new(v.0)),
Self::V0_3_6_alpha_15(v) => DynVersion(Box::new(v.0)), // VERSION_BUMP
Self::Other(v) => { Self::Other(v) => {
return Err(Error::new( return Err(Error::new(
eyre!("unknown version {v}"), eyre!("unknown version {v}"),
@@ -195,7 +201,9 @@ impl Version {
Version::V0_3_6_alpha_10(Wrapper(x)) => x.semver(), Version::V0_3_6_alpha_10(Wrapper(x)) => x.semver(),
Version::V0_3_6_alpha_11(Wrapper(x)) => x.semver(), Version::V0_3_6_alpha_11(Wrapper(x)) => x.semver(),
Version::V0_3_6_alpha_12(Wrapper(x)) => x.semver(), Version::V0_3_6_alpha_12(Wrapper(x)) => x.semver(),
Version::V0_3_6_alpha_13(Wrapper(x)) => x.semver(), // VERSION_BUMP Version::V0_3_6_alpha_13(Wrapper(x)) => x.semver(),
Version::V0_3_6_alpha_14(Wrapper(x)) => x.semver(),
Version::V0_3_6_alpha_15(Wrapper(x)) => x.semver(), // VERSION_BUMP
Version::Other(x) => x.clone(), Version::Other(x) => x.clone(),
} }
} }

View File

@@ -464,9 +464,9 @@ async fn previous_account_info(pg: &sqlx::Pool<sqlx::Postgres>) -> Result<Accoun
.as_bytes(), .as_bytes(),
) )
.with_ctx(|_| (ErrorKind::Database, "X509::from_pem"))?, .with_ctx(|_| (ErrorKind::Database, "X509::from_pem"))?,
compat_s9pk_key: SigningKey::generate(&mut rand::thread_rng()), compat_s9pk_key: SigningKey::generate(&mut ssh_key::rand_core::OsRng::default()),
ssh_key: ssh_key::PrivateKey::random( ssh_key: ssh_key::PrivateKey::random(
&mut rand::thread_rng(), &mut ssh_key::rand_core::OsRng::default(),
ssh_key::Algorithm::Ed25519, ssh_key::Algorithm::Ed25519,
) )
.with_ctx(|_| (ErrorKind::Database, "X509::ssh_key::PrivateKey::random"))?, .with_ctx(|_| (ErrorKind::Database, "X509::ssh_key::PrivateKey::random"))?,

View File

@@ -0,0 +1,39 @@
use std::collections::BTreeMap;
use exver::{PreReleaseSegment, VersionRange};
use imbl_value::json;
use super::v0_3_5::V0_3_0_COMPAT;
use super::{v0_3_6_alpha_13, VersionT};
use crate::prelude::*;
lazy_static::lazy_static! {
static ref V0_3_6_alpha_14: exver::Version = exver::Version::new(
[0, 3, 6],
[PreReleaseSegment::String("alpha".into()), 14.into()]
);
}
#[derive(Clone, Copy, Debug, Default)]
pub struct Version;
impl VersionT for Version {
type Previous = v0_3_6_alpha_13::Version;
type PreUpRes = ();
async fn pre_up(self) -> Result<Self::PreUpRes, Error> {
Ok(())
}
fn semver(self) -> exver::Version {
V0_3_6_alpha_14.clone()
}
fn compat(self) -> &'static VersionRange {
&V0_3_0_COMPAT
}
fn up(self, db: &mut Value, _: Self::PreUpRes) -> Result<(), Error> {
Ok(())
}
fn down(self, _db: &mut Value) -> Result<(), Error> {
Ok(())
}
}

View File

@@ -0,0 +1,39 @@
use std::collections::BTreeMap;
use exver::{PreReleaseSegment, VersionRange};
use imbl_value::json;
use super::v0_3_5::V0_3_0_COMPAT;
use super::{v0_3_6_alpha_14, VersionT};
use crate::prelude::*;
lazy_static::lazy_static! {
static ref V0_3_6_alpha_15: exver::Version = exver::Version::new(
[0, 3, 6],
[PreReleaseSegment::String("alpha".into()), 15.into()]
);
}
#[derive(Clone, Copy, Debug, Default)]
pub struct Version;
impl VersionT for Version {
type Previous = v0_3_6_alpha_14::Version;
type PreUpRes = ();
async fn pre_up(self) -> Result<Self::PreUpRes, Error> {
Ok(())
}
fn semver(self) -> exver::Version {
V0_3_6_alpha_15.clone()
}
fn compat(self) -> &'static VersionRange {
&V0_3_0_COMPAT
}
fn up(self, db: &mut Value, _: Self::PreUpRes) -> Result<(), Error> {
Ok(())
}
fn down(self, _db: &mut Value) -> Result<(), Error> {
Ok(())
}
}

View File

@@ -131,6 +131,8 @@ export type Effects = {
}): Promise<Host | null> }): Promise<Host | null>
/** Returns the IP address of the container */ /** Returns the IP address of the container */
getContainerIp(): Promise<string> getContainerIp(): Promise<string>
/** Returns the IP address of StartOS */
getOsIp(): Promise<string>
// interface // interface
/** Creates an interface bound to a specific host and port to show to the user */ /** Creates an interface bound to a specific host and port to show to the user */
exportServiceInterface(options: ExportServiceInterfaceParams): Promise<null> exportServiceInterface(options: ExportServiceInterfaceParams): Promise<null>

View File

@@ -13,7 +13,7 @@ export type Run<
| InputSpec<Record<string, never>, never>, | InputSpec<Record<string, never>, never>,
> = (options: { > = (options: {
effects: T.Effects effects: T.Effects
input: ExtractInputSpecType<A> & Record<string, any> input: ExtractInputSpecType<A>
}) => Promise<(T.ActionResult & { version: "1" }) | null | void | undefined> }) => Promise<(T.ActionResult & { version: "1" }) | null | void | undefined>
export type GetInput< export type GetInput<
A extends A extends
@@ -22,12 +22,7 @@ export type GetInput<
| InputSpec<Record<string, any>, never>, | InputSpec<Record<string, any>, never>,
> = (options: { > = (options: {
effects: T.Effects effects: T.Effects
}) => Promise< }) => Promise<null | void | undefined | ExtractPartialInputSpecType<A>>
| null
| void
| undefined
| (ExtractPartialInputSpecType<A> & Record<string, any>)
>
export type MaybeFn<T> = T | ((options: { effects: T.Effects }) => Promise<T>) export type MaybeFn<T> = T | ((options: { effects: T.Effects }) => Promise<T>)
function callMaybeFn<T>( function callMaybeFn<T>(
@@ -63,8 +58,8 @@ export class Action<
readonly id: Id, readonly id: Id,
private readonly metadataFn: MaybeFn<T.ActionMetadata>, private readonly metadataFn: MaybeFn<T.ActionMetadata>,
private readonly inputSpec: InputSpecType, private readonly inputSpec: InputSpecType,
private readonly getInputFn: GetInput<ExtractInputSpecType<InputSpecType>>, private readonly getInputFn: GetInput<InputSpecType>,
private readonly runFn: Run<ExtractInputSpecType<InputSpecType>>, private readonly runFn: Run<InputSpecType>,
) {} ) {}
static withInput< static withInput<
Id extends T.ActionId, Id extends T.ActionId,
@@ -77,8 +72,8 @@ export class Action<
id: Id, id: Id,
metadata: MaybeFn<Omit<T.ActionMetadata, "hasInput">>, metadata: MaybeFn<Omit<T.ActionMetadata, "hasInput">>,
inputSpec: InputSpecType, inputSpec: InputSpecType,
getInput: GetInput<ExtractInputSpecType<InputSpecType>>, getInput: GetInput<InputSpecType>,
run: Run<ExtractInputSpecType<InputSpecType>>, run: Run<InputSpecType>,
): Action<Id, Store, InputSpecType> { ): Action<Id, Store, InputSpecType> {
return new Action( return new Action(
id, id,

View File

@@ -45,8 +45,26 @@ ExtendedVersion
return { flavor: flavor || null, upstream, downstream } return { flavor: flavor || null, upstream, downstream }
} }
EmVer EmverVersionRange
= major:Digit "." minor:Digit "." patch:Digit ("." revision:Digit)? { = first:EmverVersionRangeAtom rest:(_ ((Or / And) _)? EmverVersionRangeAtom)*
EmverVersionRangeAtom
= EmverParens
/ EmverAnchor
/ EmverNot
/ Any
/ None
EmverParens
= "(" _ expr:EmverVersionRange _ ")" { return { type: "Parens", expr } }
EmverAnchor
= operator:CmpOp? _ version:Emver { return { type: "Anchor", operator, version } }
EmverNot = "!" _ value:EmverVersionRangeAtom { return { type: "Not", value: value }}
Emver
= major:Digit "." minor:Digit "." patch:Digit revision:( "." revision:Digit { return revision } )? {
return { return {
flavor: null, flavor: null,
upstream: { upstream: {

View File

@@ -296,7 +296,7 @@ function peg$parse(input, options) {
var peg$source = options.grammarSource; var peg$source = options.grammarSource;
// @ts-ignore // @ts-ignore
var peg$startRuleFunctions = { VersionRange: peg$parseVersionRange, Or: peg$parseOr, And: peg$parseAnd, VersionRangeAtom: peg$parseVersionRangeAtom, Parens: peg$parseParens, Anchor: peg$parseAnchor, VersionSpec: peg$parseVersionSpec, Not: peg$parseNot, Any: peg$parseAny, None: peg$parseNone, CmpOp: peg$parseCmpOp, ExtendedVersion: peg$parseExtendedVersion, EmVer: peg$parseEmVer, Flavor: peg$parseFlavor, Lowercase: peg$parseLowercase, String: peg$parseString, Version: peg$parseVersion, PreRelease: peg$parsePreRelease, PreReleaseSegment: peg$parsePreReleaseSegment, VersionNumber: peg$parseVersionNumber, Digit: peg$parseDigit, _: peg$parse_ }; var peg$startRuleFunctions = { VersionRange: peg$parseVersionRange, Or: peg$parseOr, And: peg$parseAnd, VersionRangeAtom: peg$parseVersionRangeAtom, Parens: peg$parseParens, Anchor: peg$parseAnchor, VersionSpec: peg$parseVersionSpec, Not: peg$parseNot, Any: peg$parseAny, None: peg$parseNone, CmpOp: peg$parseCmpOp, ExtendedVersion: peg$parseExtendedVersion, EmverVersionRange: peg$parseEmverVersionRange, EmverVersionRangeAtom: peg$parseEmverVersionRangeAtom, EmverParens: peg$parseEmverParens, EmverAnchor: peg$parseEmverAnchor, EmverNot: peg$parseEmverNot, Emver: peg$parseEmver, Flavor: peg$parseFlavor, Lowercase: peg$parseLowercase, String: peg$parseString, Version: peg$parseVersion, PreRelease: peg$parsePreRelease, PreReleaseSegment: peg$parsePreReleaseSegment, VersionNumber: peg$parseVersionNumber, Digit: peg$parseDigit, _: peg$parse_ };
// @ts-ignore // @ts-ignore
var peg$startRuleFunction = peg$parseVersionRange; var peg$startRuleFunction = peg$parseVersionRange;
@@ -397,7 +397,19 @@ function peg$parse(input, options) {
return { flavor: flavor || null, upstream, downstream } return { flavor: flavor || null, upstream, downstream }
};// @ts-ignore };// @ts-ignore
var peg$f15 = function(major, minor, patch) { var peg$f15 = function(expr) {// @ts-ignore
return { type: "Parens", expr } };// @ts-ignore
var peg$f16 = function(operator, version) {// @ts-ignore
return { type: "Anchor", operator, version } };// @ts-ignore
var peg$f17 = function(value) {// @ts-ignore
return { type: "Not", value: value }};// @ts-ignore
var peg$f18 = function(major, minor, patch, revision) {// @ts-ignore
return revision };// @ts-ignore
var peg$f19 = function(major, minor, patch, revision) {
// @ts-ignore // @ts-ignore
return { return {
// @ts-ignore // @ts-ignore
@@ -419,16 +431,16 @@ function peg$parse(input, options) {
} }
};// @ts-ignore };// @ts-ignore
var peg$f16 = function(flavor) {// @ts-ignore var peg$f20 = function(flavor) {// @ts-ignore
return flavor };// @ts-ignore return flavor };// @ts-ignore
var peg$f17 = function() {// @ts-ignore var peg$f21 = function() {// @ts-ignore
return text() };// @ts-ignore return text() };// @ts-ignore
var peg$f18 = function() {// @ts-ignore var peg$f22 = function() {// @ts-ignore
return text(); };// @ts-ignore return text(); };// @ts-ignore
var peg$f19 = function(number, prerelease) { var peg$f23 = function(number, prerelease) {
// @ts-ignore // @ts-ignore
return { return {
// @ts-ignore // @ts-ignore
@@ -438,22 +450,22 @@ function peg$parse(input, options) {
}; };
};// @ts-ignore };// @ts-ignore
var peg$f20 = function(first, rest) { var peg$f24 = function(first, rest) {
// @ts-ignore // @ts-ignore
return [first].concat(rest.map(r => r[1])); return [first].concat(rest.map(r => r[1]));
};// @ts-ignore };// @ts-ignore
var peg$f21 = function(segment) { var peg$f25 = function(segment) {
// @ts-ignore // @ts-ignore
return segment; return segment;
};// @ts-ignore };// @ts-ignore
var peg$f22 = function(first, rest) { var peg$f26 = function(first, rest) {
// @ts-ignore // @ts-ignore
return [first].concat(rest.map(r => r[1])); return [first].concat(rest.map(r => r[1]));
};// @ts-ignore };// @ts-ignore
var peg$f23 = function() {// @ts-ignore var peg$f27 = function() {// @ts-ignore
return parseInt(text(), 10); }; return parseInt(text(), 10); };
// @ts-ignore // @ts-ignore
var peg$currPos = 0; var peg$currPos = 0;
@@ -1533,7 +1545,336 @@ peg$parseExtendedVersion() {
// @ts-ignore // @ts-ignore
function // @ts-ignore function // @ts-ignore
peg$parseEmVer() { peg$parseEmverVersionRange() {
// @ts-ignore
var s0, s1, s2, s3, s4, s5, s6, s7;
// @ts-ignore
s0 = peg$currPos;
// @ts-ignore
s1 = peg$parseEmverVersionRangeAtom();
// @ts-ignore
if (s1 !== peg$FAILED) {
// @ts-ignore
s2 = [];
// @ts-ignore
s3 = peg$currPos;
// @ts-ignore
s4 = peg$parse_();
// @ts-ignore
s5 = peg$currPos;
// @ts-ignore
s6 = peg$parseOr();
// @ts-ignore
if (s6 === peg$FAILED) {
// @ts-ignore
s6 = peg$parseAnd();
}
// @ts-ignore
if (s6 !== peg$FAILED) {
// @ts-ignore
s7 = peg$parse_();
// @ts-ignore
s6 = [s6, s7];
// @ts-ignore
s5 = s6;
// @ts-ignore
} else {
// @ts-ignore
peg$currPos = s5;
// @ts-ignore
s5 = peg$FAILED;
}
// @ts-ignore
if (s5 === peg$FAILED) {
// @ts-ignore
s5 = null;
}
// @ts-ignore
s6 = peg$parseEmverVersionRangeAtom();
// @ts-ignore
if (s6 !== peg$FAILED) {
// @ts-ignore
s4 = [s4, s5, s6];
// @ts-ignore
s3 = s4;
// @ts-ignore
} else {
// @ts-ignore
peg$currPos = s3;
// @ts-ignore
s3 = peg$FAILED;
}
// @ts-ignore
while (s3 !== peg$FAILED) {
// @ts-ignore
s2.push(s3);
// @ts-ignore
s3 = peg$currPos;
// @ts-ignore
s4 = peg$parse_();
// @ts-ignore
s5 = peg$currPos;
// @ts-ignore
s6 = peg$parseOr();
// @ts-ignore
if (s6 === peg$FAILED) {
// @ts-ignore
s6 = peg$parseAnd();
}
// @ts-ignore
if (s6 !== peg$FAILED) {
// @ts-ignore
s7 = peg$parse_();
// @ts-ignore
s6 = [s6, s7];
// @ts-ignore
s5 = s6;
// @ts-ignore
} else {
// @ts-ignore
peg$currPos = s5;
// @ts-ignore
s5 = peg$FAILED;
}
// @ts-ignore
if (s5 === peg$FAILED) {
// @ts-ignore
s5 = null;
}
// @ts-ignore
s6 = peg$parseEmverVersionRangeAtom();
// @ts-ignore
if (s6 !== peg$FAILED) {
// @ts-ignore
s4 = [s4, s5, s6];
// @ts-ignore
s3 = s4;
// @ts-ignore
} else {
// @ts-ignore
peg$currPos = s3;
// @ts-ignore
s3 = peg$FAILED;
}
}
// @ts-ignore
s1 = [s1, s2];
// @ts-ignore
s0 = s1;
// @ts-ignore
} else {
// @ts-ignore
peg$currPos = s0;
// @ts-ignore
s0 = peg$FAILED;
}
// @ts-ignore
return s0;
}
// @ts-ignore
function // @ts-ignore
peg$parseEmverVersionRangeAtom() {
// @ts-ignore
var s0;
// @ts-ignore
s0 = peg$parseEmverParens();
// @ts-ignore
if (s0 === peg$FAILED) {
// @ts-ignore
s0 = peg$parseEmverAnchor();
// @ts-ignore
if (s0 === peg$FAILED) {
// @ts-ignore
s0 = peg$parseEmverNot();
// @ts-ignore
if (s0 === peg$FAILED) {
// @ts-ignore
s0 = peg$parseAny();
// @ts-ignore
if (s0 === peg$FAILED) {
// @ts-ignore
s0 = peg$parseNone();
}
}
}
}
// @ts-ignore
return s0;
}
// @ts-ignore
function // @ts-ignore
peg$parseEmverParens() {
// @ts-ignore
var s0, s1, s2, s3, s4, s5;
// @ts-ignore
s0 = peg$currPos;
// @ts-ignore
if (input.charCodeAt(peg$currPos) === 40) {
// @ts-ignore
s1 = peg$c2;
// @ts-ignore
peg$currPos++;
// @ts-ignore
} else {
// @ts-ignore
s1 = peg$FAILED;
// @ts-ignore
if (peg$silentFails === 0) { peg$fail(peg$e2); }
}
// @ts-ignore
if (s1 !== peg$FAILED) {
// @ts-ignore
s2 = peg$parse_();
// @ts-ignore
s3 = peg$parseEmverVersionRange();
// @ts-ignore
if (s3 !== peg$FAILED) {
// @ts-ignore
s4 = peg$parse_();
// @ts-ignore
if (input.charCodeAt(peg$currPos) === 41) {
// @ts-ignore
s5 = peg$c3;
// @ts-ignore
peg$currPos++;
// @ts-ignore
} else {
// @ts-ignore
s5 = peg$FAILED;
// @ts-ignore
if (peg$silentFails === 0) { peg$fail(peg$e3); }
}
// @ts-ignore
if (s5 !== peg$FAILED) {
// @ts-ignore
peg$savedPos = s0;
// @ts-ignore
s0 = peg$f15(s3);
// @ts-ignore
} else {
// @ts-ignore
peg$currPos = s0;
// @ts-ignore
s0 = peg$FAILED;
}
// @ts-ignore
} else {
// @ts-ignore
peg$currPos = s0;
// @ts-ignore
s0 = peg$FAILED;
}
// @ts-ignore
} else {
// @ts-ignore
peg$currPos = s0;
// @ts-ignore
s0 = peg$FAILED;
}
// @ts-ignore
return s0;
}
// @ts-ignore
function // @ts-ignore
peg$parseEmverAnchor() {
// @ts-ignore
var s0, s1, s2, s3;
// @ts-ignore
s0 = peg$currPos;
// @ts-ignore
s1 = peg$parseCmpOp();
// @ts-ignore
if (s1 === peg$FAILED) {
// @ts-ignore
s1 = null;
}
// @ts-ignore
s2 = peg$parse_();
// @ts-ignore
s3 = peg$parseEmver();
// @ts-ignore
if (s3 !== peg$FAILED) {
// @ts-ignore
peg$savedPos = s0;
// @ts-ignore
s0 = peg$f16(s1, s3);
// @ts-ignore
} else {
// @ts-ignore
peg$currPos = s0;
// @ts-ignore
s0 = peg$FAILED;
}
// @ts-ignore
return s0;
}
// @ts-ignore
function // @ts-ignore
peg$parseEmverNot() {
// @ts-ignore
var s0, s1, s2, s3;
// @ts-ignore
s0 = peg$currPos;
// @ts-ignore
if (input.charCodeAt(peg$currPos) === 33) {
// @ts-ignore
s1 = peg$c5;
// @ts-ignore
peg$currPos++;
// @ts-ignore
} else {
// @ts-ignore
s1 = peg$FAILED;
// @ts-ignore
if (peg$silentFails === 0) { peg$fail(peg$e5); }
}
// @ts-ignore
if (s1 !== peg$FAILED) {
// @ts-ignore
s2 = peg$parse_();
// @ts-ignore
s3 = peg$parseEmverVersionRangeAtom();
// @ts-ignore
if (s3 !== peg$FAILED) {
// @ts-ignore
peg$savedPos = s0;
// @ts-ignore
s0 = peg$f17(s3);
// @ts-ignore
} else {
// @ts-ignore
peg$currPos = s0;
// @ts-ignore
s0 = peg$FAILED;
}
// @ts-ignore
} else {
// @ts-ignore
peg$currPos = s0;
// @ts-ignore
s0 = peg$FAILED;
}
// @ts-ignore
return s0;
}
// @ts-ignore
function // @ts-ignore
peg$parseEmver() {
// @ts-ignore // @ts-ignore
var s0, s1, s2, s3, s4, s5, s6, s7, s8; var s0, s1, s2, s3, s4, s5, s6, s7, s8;
@@ -1603,9 +1944,9 @@ peg$parseEmVer() {
// @ts-ignore // @ts-ignore
if (s8 !== peg$FAILED) { if (s8 !== peg$FAILED) {
// @ts-ignore // @ts-ignore
s7 = [s7, s8]; peg$savedPos = s6;
// @ts-ignore // @ts-ignore
s6 = s7; s6 = peg$f18(s1, s3, s5, s8);
// @ts-ignore // @ts-ignore
} else { } else {
// @ts-ignore // @ts-ignore
@@ -1628,7 +1969,7 @@ peg$parseEmVer() {
// @ts-ignore // @ts-ignore
peg$savedPos = s0; peg$savedPos = s0;
// @ts-ignore // @ts-ignore
s0 = peg$f15(s1, s3, s5); s0 = peg$f19(s1, s3, s5, s6);
// @ts-ignore // @ts-ignore
} else { } else {
// @ts-ignore // @ts-ignore
@@ -1714,7 +2055,7 @@ peg$parseFlavor() {
// @ts-ignore // @ts-ignore
peg$savedPos = s0; peg$savedPos = s0;
// @ts-ignore // @ts-ignore
s0 = peg$f16(s2); s0 = peg$f20(s2);
// @ts-ignore // @ts-ignore
} else { } else {
// @ts-ignore // @ts-ignore
@@ -1794,7 +2135,7 @@ peg$parseLowercase() {
// @ts-ignore // @ts-ignore
peg$savedPos = s0; peg$savedPos = s0;
// @ts-ignore // @ts-ignore
s1 = peg$f17(); s1 = peg$f21();
} }
// @ts-ignore // @ts-ignore
s0 = s1; s0 = s1;
@@ -1856,7 +2197,7 @@ peg$parseString() {
// @ts-ignore // @ts-ignore
peg$savedPos = s0; peg$savedPos = s0;
// @ts-ignore // @ts-ignore
s1 = peg$f18(); s1 = peg$f22();
} }
// @ts-ignore // @ts-ignore
s0 = s1; s0 = s1;
@@ -1887,7 +2228,7 @@ peg$parseVersion() {
// @ts-ignore // @ts-ignore
peg$savedPos = s0; peg$savedPos = s0;
// @ts-ignore // @ts-ignore
s0 = peg$f19(s1, s2); s0 = peg$f23(s1, s2);
// @ts-ignore // @ts-ignore
} else { } else {
// @ts-ignore // @ts-ignore
@@ -2015,7 +2356,7 @@ peg$parsePreRelease() {
// @ts-ignore // @ts-ignore
peg$savedPos = s0; peg$savedPos = s0;
// @ts-ignore // @ts-ignore
s0 = peg$f20(s2, s3); s0 = peg$f24(s2, s3);
// @ts-ignore // @ts-ignore
} else { } else {
// @ts-ignore // @ts-ignore
@@ -2073,7 +2414,7 @@ peg$parsePreReleaseSegment() {
// @ts-ignore // @ts-ignore
peg$savedPos = s0; peg$savedPos = s0;
// @ts-ignore // @ts-ignore
s0 = peg$f21(s2); s0 = peg$f25(s2);
// @ts-ignore // @ts-ignore
} else { } else {
// @ts-ignore // @ts-ignore
@@ -2186,7 +2527,7 @@ peg$parseVersionNumber() {
// @ts-ignore // @ts-ignore
peg$savedPos = s0; peg$savedPos = s0;
// @ts-ignore // @ts-ignore
s0 = peg$f22(s1, s2); s0 = peg$f26(s1, s2);
// @ts-ignore // @ts-ignore
} else { } else {
// @ts-ignore // @ts-ignore
@@ -2252,7 +2593,7 @@ peg$parseDigit() {
// @ts-ignore // @ts-ignore
peg$savedPos = s0; peg$savedPos = s0;
// @ts-ignore // @ts-ignore
s1 = peg$f23(); s1 = peg$f27();
} }
// @ts-ignore // @ts-ignore
s0 = s1; s0 = s1;
@@ -2423,7 +2764,7 @@ peggyParser.SyntaxError.prototype.name = "PeggySyntaxError";
export interface ParseOptions { export interface ParseOptions {
filename?: string; filename?: string;
startRule?: "VersionRange" | "Or" | "And" | "VersionRangeAtom" | "Parens" | "Anchor" | "VersionSpec" | "Not" | "Any" | "None" | "CmpOp" | "ExtendedVersion" | "EmVer" | "Flavor" | "Lowercase" | "String" | "Version" | "PreRelease" | "PreReleaseSegment" | "VersionNumber" | "Digit" | "_"; startRule?: "VersionRange" | "Or" | "And" | "VersionRangeAtom" | "Parens" | "Anchor" | "VersionSpec" | "Not" | "Any" | "None" | "CmpOp" | "ExtendedVersion" | "EmverVersionRange" | "EmverVersionRangeAtom" | "EmverParens" | "EmverAnchor" | "EmverNot" | "Emver" | "Flavor" | "Lowercase" | "String" | "Version" | "PreRelease" | "PreReleaseSegment" | "VersionNumber" | "Digit" | "_";
tracer?: any; tracer?: any;
[key: string]: any; [key: string]: any;
} }
@@ -2443,7 +2784,12 @@ export type ParseFunction = <Options extends ParseOptions>(
StartRule extends "None" ? None : StartRule extends "None" ? None :
StartRule extends "CmpOp" ? CmpOp : StartRule extends "CmpOp" ? CmpOp :
StartRule extends "ExtendedVersion" ? ExtendedVersion : StartRule extends "ExtendedVersion" ? ExtendedVersion :
StartRule extends "EmVer" ? EmVer : StartRule extends "EmverVersionRange" ? EmverVersionRange :
StartRule extends "EmverVersionRangeAtom" ? EmverVersionRangeAtom :
StartRule extends "EmverParens" ? EmverParens :
StartRule extends "EmverAnchor" ? EmverAnchor :
StartRule extends "EmverNot" ? EmverNot :
StartRule extends "Emver" ? Emver :
StartRule extends "Flavor" ? Flavor : StartRule extends "Flavor" ? Flavor :
StartRule extends "Lowercase" ? Lowercase_1 : StartRule extends "Lowercase" ? Lowercase_1 :
StartRule extends "String" ? String_1 : StartRule extends "String" ? String_1 :
@@ -2488,10 +2834,27 @@ export type ExtendedVersion = {
upstream: Version; upstream: Version;
downstream: Version; downstream: Version;
}; };
export type EmVer = { export type EmverVersionRange = [
EmverVersionRangeAtom,
[_, [Or | And, _] | null, EmverVersionRangeAtom][]
];
export type EmverVersionRangeAtom =
| EmverParens
| EmverAnchor
| EmverNot
| Any
| None;
export type EmverParens = { type: "Parens"; expr: EmverVersionRange };
export type EmverAnchor = {
type: "Anchor";
operator: CmpOp | null;
version: Emver;
};
export type EmverNot = { type: "Not"; value: EmverVersionRangeAtom };
export type Emver = {
flavor: null; flavor: null;
upstream: { number: [Digit, Digit, Digit]; prerelease: [] }; upstream: { number: [Digit, Digit, Digit]; prerelease: [] };
downstream: { number: [any]; prerelease: [] }; downstream: { number: [0 | NonNullable<Digit | null>]; prerelease: [] };
}; };
export type Flavor = Lowercase_1; export type Flavor = Lowercase_1;
export type Lowercase_1 = string; export type Lowercase_1 = string;

View File

@@ -123,6 +123,12 @@ export class VersionRange {
) )
} }
static parseEmver(range: string): VersionRange {
return VersionRange.parseRange(
P.parse(range, { startRule: "EmverVersionRange" }),
)
}
and(right: VersionRange) { and(right: VersionRange) {
return new VersionRange({ type: "And", left: this, right }) return new VersionRange({ type: "And", left: this, right })
} }
@@ -291,12 +297,19 @@ export class ExtendedVersion {
} }
static parseEmver(extendedVersion: string): ExtendedVersion { static parseEmver(extendedVersion: string): ExtendedVersion {
const parsed = P.parse(extendedVersion, { startRule: "EmVer" }) try {
return new ExtendedVersion( const parsed = P.parse(extendedVersion, { startRule: "Emver" })
parsed.flavor, return new ExtendedVersion(
new Version(parsed.upstream.number, parsed.upstream.prerelease), parsed.flavor,
new Version(parsed.downstream.number, parsed.downstream.prerelease), new Version(parsed.upstream.number, parsed.upstream.prerelease),
) new Version(parsed.downstream.number, parsed.downstream.prerelease),
)
} catch (e) {
if (e instanceof Error) {
e.message += ` (${extendedVersion})`
}
throw e
}
} }
/** /**

View File

@@ -1,3 +1,8 @@
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
export type ImageMetadata = { workdir: string; user: string } export type ImageMetadata = {
workdir: string
user: string
entrypoint: Array<string> | null
cmd: Array<string> | null
}

View File

@@ -79,6 +79,7 @@ describe("startosTypeValidation ", () => {
}, },
getSystemSmtp: {} as WithCallback<GetSystemSmtpParams>, getSystemSmtp: {} as WithCallback<GetSystemSmtpParams>,
getContainerIp: undefined, getContainerIp: undefined,
getOsIp: undefined,
getServicePortForward: {} as GetServicePortForwardParams, getServicePortForward: {} as GetServicePortForwardParams,
clearServiceInterfaces: {} as ClearServiceInterfacesParams, clearServiceInterfaces: {} as ClearServiceInterfacesParams,
exportServiceInterface: {} as ExportServiceInterfaceParams, exportServiceInterface: {} as ExportServiceInterfaceParams,

View File

@@ -127,7 +127,11 @@ export type SmtpValue = {
password: string | null | undefined password: string | null | undefined
} }
export type CommandType = string | [string, ...string[]] export class UseEntrypoint {
constructor(readonly overridCmd?: string[]) {}
}
export type CommandType = string | [string, ...string[]] | UseEntrypoint
export type DaemonReturned = { export type DaemonReturned = {
wait(): Promise<unknown> wait(): Promise<unknown>

View File

@@ -48,6 +48,11 @@ export type SDKManifest = {
/** Long description to display on the marketplace details page for this service. Max length 500 chars. */ /** Long description to display on the marketplace details page for this service. Max length 500 chars. */
readonly long: string readonly long: string
} }
/**
* override the StartOS version this package was made for
* defaults to the version the SDK was built for
*/
osVersion?: string
/** /**
* @description A mapping of OS images needed to run the container processes. Each image ID is a unique key. * @description A mapping of OS images needed to run the container processes. Each image ID is a unique key.
* @example * @example

View File

@@ -1,10 +1,11 @@
import { Effects } from "../Effects" import { Effects } from "../Effects"
import * as T from "../types"
export class GetSystemSmtp { export class GetSystemSmtp {
constructor(readonly effects: Effects) {} constructor(readonly effects: Effects) {}
/** /**
* Returns the system SMTP credentials. Restarts the service if the credentials change * Returns the system SMTP credentials. Reruns the context from which it has been called if the underlying value changes
*/ */
const() { const() {
return this.effects.getSystemSmtp({ return this.effects.getSystemSmtp({
@@ -17,8 +18,9 @@ export class GetSystemSmtp {
once() { once() {
return this.effects.getSystemSmtp({}) return this.effects.getSystemSmtp({})
} }
/** /**
* Watches the system SMTP credentials. Takes a custom callback function to run whenever the credentials change * Watches the system SMTP credentials. Returns an async iterator that yields whenever the value changes
*/ */
async *watch() { async *watch() {
while (true) { while (true) {
@@ -32,4 +34,34 @@ export class GetSystemSmtp {
await waitForNext await waitForNext
} }
} }
/**
* Watches the system SMTP credentials. Takes a custom callback function to run whenever the credentials change
*/
onChange(
callback: (
value: T.SmtpValue | null,
error?: Error,
) => void | Promise<void>,
) {
;(async () => {
for await (const value of this.watch()) {
try {
await callback(value)
} catch (e) {
console.error(
"callback function threw an error @ GetSystemSmtp.onChange",
e,
)
}
}
})()
.catch((e) => callback(null, e))
.catch((e) =>
console.error(
"callback function threw an error @ GetSystemSmtp.onChange",
e,
),
)
}
} }

View File

@@ -17,6 +17,7 @@ export const getHostname = (url: string): Hostname | null => {
export type Filled = { export type Filled = {
hostnames: HostnameInfo[] hostnames: HostnameInfo[]
publicHostnames: HostnameInfo[]
onionHostnames: HostnameInfo[] onionHostnames: HostnameInfo[]
localHostnames: HostnameInfo[] localHostnames: HostnameInfo[]
ipHostnames: HostnameInfo[] ipHostnames: HostnameInfo[]
@@ -25,6 +26,7 @@ export type Filled = {
nonIpHostnames: HostnameInfo[] nonIpHostnames: HostnameInfo[]
urls: UrlString[] urls: UrlString[]
publicUrls: UrlString[]
onionUrls: UrlString[] onionUrls: UrlString[]
localUrls: UrlString[] localUrls: UrlString[]
ipUrls: UrlString[] ipUrls: UrlString[]
@@ -105,6 +107,9 @@ export const filledAddress = (
return { return {
...addressInfo, ...addressInfo,
hostnames, hostnames,
get publicHostnames() {
return hostnames.filter((h) => h.kind === "onion" || h.public)
},
get onionHostnames() { get onionHostnames() {
return hostnames.filter((h) => h.kind === "onion") return hostnames.filter((h) => h.kind === "onion")
}, },
@@ -141,6 +146,9 @@ export const filledAddress = (
get urls() { get urls() {
return this.hostnames.flatMap(toUrl) return this.hostnames.flatMap(toUrl)
}, },
get publicUrls() {
return this.publicHostnames.flatMap(toUrl)
},
get onionUrls() { get onionUrls() {
return this.onionHostnames.flatMap(toUrl) return this.onionHostnames.flatMap(toUrl)
}, },
@@ -205,7 +213,7 @@ export class GetServiceInterface {
) {} ) {}
/** /**
* Returns the value of Store at the provided path. Restart the service if the value changes * Returns the requested service interface. Reruns the context from which it has been called if the underlying value changes
*/ */
async const() { async const() {
const { id, packageId } = this.opts const { id, packageId } = this.opts
@@ -220,7 +228,7 @@ export class GetServiceInterface {
return interfaceFilled return interfaceFilled
} }
/** /**
* Returns the value of ServiceInterfacesFilled at the provided path. Does nothing if the value changes * Returns the requested service interface. Does nothing if the value changes
*/ */
async once() { async once() {
const { id, packageId } = this.opts const { id, packageId } = this.opts
@@ -234,7 +242,7 @@ export class GetServiceInterface {
} }
/** /**
* Watches the value of ServiceInterfacesFilled at the provided path. Takes a custom callback function to run whenever the value changes * Watches the requested service interface. Returns an async iterator that yields whenever the value changes
*/ */
async *watch() { async *watch() {
const { id, packageId } = this.opts const { id, packageId } = this.opts
@@ -252,6 +260,36 @@ export class GetServiceInterface {
await waitForNext await waitForNext
} }
} }
/**
* Watches the requested service interface. Takes a custom callback function to run whenever the value changes
*/
onChange(
callback: (
value: ServiceInterfaceFilled | null,
error?: Error,
) => void | Promise<void>,
) {
;(async () => {
for await (const value of this.watch()) {
try {
await callback(value)
} catch (e) {
console.error(
"callback function threw an error @ GetServiceInterface.onChange",
e,
)
}
}
})()
.catch((e) => callback(null, e))
.catch((e) =>
console.error(
"callback function threw an error @ GetServiceInterface.onChange",
e,
),
)
}
} }
export function getServiceInterface( export function getServiceInterface(
effects: Effects, effects: Effects,

View File

@@ -47,7 +47,7 @@ export class GetServiceInterfaces {
) {} ) {}
/** /**
* Returns the value of Store at the provided path. Restart the service if the value changes * Returns the service interfaces for the package. Reruns the context from which it has been called if the underlying value changes
*/ */
async const() { async const() {
const { packageId } = this.opts const { packageId } = this.opts
@@ -62,7 +62,7 @@ export class GetServiceInterfaces {
return interfaceFilled return interfaceFilled
} }
/** /**
* Returns the value of ServiceInterfacesFilled at the provided path. Does nothing if the value changes * Returns the service interfaces for the package. Does nothing if the value changes
*/ */
async once() { async once() {
const { packageId } = this.opts const { packageId } = this.opts
@@ -76,7 +76,7 @@ export class GetServiceInterfaces {
} }
/** /**
* Watches the value of ServiceInterfacesFilled at the provided path. Takes a custom callback function to run whenever the value changes * Watches the service interfaces for the package. Returns an async iterator that yields whenever the value changes
*/ */
async *watch() { async *watch() {
const { packageId } = this.opts const { packageId } = this.opts
@@ -93,6 +93,36 @@ export class GetServiceInterfaces {
await waitForNext await waitForNext
} }
} }
/**
* Watches the service interfaces for the package. Takes a custom callback function to run whenever the value changes
*/
onChange(
callback: (
value: ServiceInterfaceFilled[] | null,
error?: Error,
) => void | Promise<void>,
) {
;(async () => {
for await (const value of this.watch()) {
try {
await callback(value)
} catch (e) {
console.error(
"callback function threw an error @ GetServiceInterfaces.onChange",
e,
)
}
}
})()
.catch((e) => callback(null, e))
.catch((e) =>
console.error(
"callback function threw an error @ GetServiceInterfaces.onChange",
e,
),
)
}
} }
export function getServiceInterfaces( export function getServiceInterfaces(
effects: Effects, effects: Effects,

View File

@@ -27,7 +27,7 @@
"ts-node": "^10.9.1", "ts-node": "^10.9.1",
"ts-pegjs": "^4.2.1", "ts-pegjs": "^4.2.1",
"tsx": "^4.7.1", "tsx": "^4.7.1",
"typescript": "^5.0.4" "typescript": "^5.7.3"
} }
}, },
"node_modules/@ampproject/remapping": { "node_modules/@ampproject/remapping": {
@@ -4773,9 +4773,9 @@
} }
}, },
"node_modules/typescript": { "node_modules/typescript": {
"version": "5.7.2", "version": "5.7.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
"integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"bin": { "bin": {

View File

@@ -47,6 +47,6 @@
"ts-node": "^10.9.1", "ts-node": "^10.9.1",
"ts-pegjs": "^4.2.1", "ts-pegjs": "^4.2.1",
"tsx": "^4.7.1", "tsx": "^4.7.1",
"typescript": "^5.0.4" "typescript": "^5.7.3"
} }
} }

View File

@@ -12,7 +12,7 @@
"skipLibCheck": true, "skipLibCheck": true,
"module": "commonjs", "module": "commonjs",
"outDir": "../baseDist", "outDir": "../baseDist",
"target": "es2018" "target": "es2021"
}, },
"include": ["lib/**/*"], "include": ["lib/**/*"],
"exclude": ["lib/**/*.spec.ts", "lib/**/*.gen.ts", "list", "node_modules"] "exclude": ["lib/**/*.spec.ts", "lib/**/*.gen.ts", "list", "node_modules"]

File diff suppressed because one or more lines are too long

View File

@@ -1,71 +1,129 @@
body, html { body,
margin:0; padding: 0; html {
margin: 0;
padding: 0;
height: 100%; height: 100%;
} }
body { body {
font-family: Helvetica Neue, Helvetica, Arial; font-family:
font-size: 14px; Helvetica Neue,
color:#333; Helvetica,
Arial;
font-size: 14px;
color: #333;
}
.small {
font-size: 12px;
}
*,
*:after,
*:before {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
h1 {
font-size: 20px;
margin: 0;
}
h2 {
font-size: 14px;
} }
.small { font-size: 12px; }
*, *:after, *:before {
-webkit-box-sizing:border-box;
-moz-box-sizing:border-box;
box-sizing:border-box;
}
h1 { font-size: 20px; margin: 0;}
h2 { font-size: 14px; }
pre { pre {
font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; font:
margin: 0; 12px/1.4 Consolas,
padding: 0; "Liberation Mono",
-moz-tab-size: 2; Menlo,
-o-tab-size: 2; Courier,
tab-size: 2; monospace;
margin: 0;
padding: 0;
-moz-tab-size: 2;
-o-tab-size: 2;
tab-size: 2;
}
a {
color: #0074d9;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.strong {
font-weight: bold;
}
.space-top1 {
padding: 10px 0 0 0;
}
.pad2y {
padding: 20px 0;
}
.pad1y {
padding: 10px 0;
}
.pad2x {
padding: 0 20px;
}
.pad2 {
padding: 20px;
}
.pad1 {
padding: 10px;
}
.space-left2 {
padding-left: 55px;
}
.space-right2 {
padding-right: 20px;
}
.center {
text-align: center;
}
.clearfix {
display: block;
} }
a { color:#0074D9; text-decoration:none; }
a:hover { text-decoration:underline; }
.strong { font-weight: bold; }
.space-top1 { padding: 10px 0 0 0; }
.pad2y { padding: 20px 0; }
.pad1y { padding: 10px 0; }
.pad2x { padding: 0 20px; }
.pad2 { padding: 20px; }
.pad1 { padding: 10px; }
.space-left2 { padding-left:55px; }
.space-right2 { padding-right:20px; }
.center { text-align:center; }
.clearfix { display:block; }
.clearfix:after { .clearfix:after {
content:''; content: "";
display:block; display: block;
height:0; height: 0;
clear:both; clear: both;
visibility:hidden; visibility: hidden;
}
.fl {
float: left;
}
@media only screen and (max-width: 640px) {
.col3 {
width: 100%;
max-width: 100%;
}
.hide-mobile {
display: none !important;
} }
.fl { float: left; }
@media only screen and (max-width:640px) {
.col3 { width:100%; max-width:100%; }
.hide-mobile { display:none!important; }
} }
.quiet { .quiet {
color: #7f7f7f; color: #7f7f7f;
color: rgba(0,0,0,0.5); color: rgba(0, 0, 0, 0.5);
}
.quiet a {
opacity: 0.7;
} }
.quiet a { opacity: 0.7; }
.fraction { .fraction {
font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
font-size: 10px; font-size: 10px;
color: #555; color: #555;
background: #E8E8E8; background: #e8e8e8;
padding: 4px 5px; padding: 4px 5px;
border-radius: 3px; border-radius: 3px;
vertical-align: middle; vertical-align: middle;
} }
div.path a:link, div.path a:visited { color: #333; } div.path a:link,
div.path a:visited {
color: #333;
}
table.coverage { table.coverage {
border-collapse: collapse; border-collapse: collapse;
margin: 10px 0 0 0; margin: 10px 0 0 0;
@@ -78,140 +136,219 @@ table.coverage td {
vertical-align: top; vertical-align: top;
} }
table.coverage td.line-count { table.coverage td.line-count {
text-align: right; text-align: right;
padding: 0 5px 0 20px; padding: 0 5px 0 20px;
} }
table.coverage td.line-coverage { table.coverage td.line-coverage {
text-align: right; text-align: right;
padding-right: 10px; padding-right: 10px;
min-width:20px; min-width: 20px;
} }
table.coverage td span.cline-any { table.coverage td span.cline-any {
display: inline-block; display: inline-block;
padding: 0 5px; padding: 0 5px;
width: 100%; width: 100%;
} }
.missing-if-branch { .missing-if-branch {
display: inline-block; display: inline-block;
margin-right: 5px; margin-right: 5px;
border-radius: 3px; border-radius: 3px;
position: relative; position: relative;
padding: 0 4px; padding: 0 4px;
background: #333; background: #333;
color: yellow; color: yellow;
} }
.skip-if-branch { .skip-if-branch {
display: none; display: none;
margin-right: 10px; margin-right: 10px;
position: relative; position: relative;
padding: 0 4px; padding: 0 4px;
background: #ccc; background: #ccc;
color: white; color: white;
} }
.missing-if-branch .typ, .skip-if-branch .typ { .missing-if-branch .typ,
color: inherit !important; .skip-if-branch .typ {
color: inherit !important;
} }
.coverage-summary { .coverage-summary {
border-collapse: collapse; border-collapse: collapse;
width: 100%; width: 100%;
} }
.coverage-summary tr { border-bottom: 1px solid #bbb; } .coverage-summary tr {
.keyline-all { border: 1px solid #ddd; } border-bottom: 1px solid #bbb;
.coverage-summary td, .coverage-summary th { padding: 10px; } }
.coverage-summary tbody { border: 1px solid #bbb; } .keyline-all {
.coverage-summary td { border-right: 1px solid #bbb; } border: 1px solid #ddd;
.coverage-summary td:last-child { border-right: none; } }
.coverage-summary td,
.coverage-summary th {
padding: 10px;
}
.coverage-summary tbody {
border: 1px solid #bbb;
}
.coverage-summary td {
border-right: 1px solid #bbb;
}
.coverage-summary td:last-child {
border-right: none;
}
.coverage-summary th { .coverage-summary th {
text-align: left; text-align: left;
font-weight: normal; font-weight: normal;
white-space: nowrap; white-space: nowrap;
} }
.coverage-summary th.file { border-right: none !important; } .coverage-summary th.file {
.coverage-summary th.pct { } border-right: none !important;
}
.coverage-summary th.pct {
}
.coverage-summary th.pic, .coverage-summary th.pic,
.coverage-summary th.abs, .coverage-summary th.abs,
.coverage-summary td.pct, .coverage-summary td.pct,
.coverage-summary td.abs { text-align: right; } .coverage-summary td.abs {
.coverage-summary td.file { white-space: nowrap; } text-align: right;
.coverage-summary td.pic { min-width: 120px !important; } }
.coverage-summary tfoot td { } .coverage-summary td.file {
white-space: nowrap;
}
.coverage-summary td.pic {
min-width: 120px !important;
}
.coverage-summary tfoot td {
}
.coverage-summary .sorter { .coverage-summary .sorter {
height: 10px; height: 10px;
width: 7px; width: 7px;
display: inline-block; display: inline-block;
margin-left: 0.5em; margin-left: 0.5em;
background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
} }
.coverage-summary .sorted .sorter { .coverage-summary .sorted .sorter {
background-position: 0 -20px; background-position: 0 -20px;
} }
.coverage-summary .sorted-desc .sorter { .coverage-summary .sorted-desc .sorter {
background-position: 0 -10px; background-position: 0 -10px;
}
.status-line {
height: 10px;
} }
.status-line { height: 10px; }
/* yellow */ /* yellow */
.cbranch-no { background: yellow !important; color: #111; } .cbranch-no {
background: yellow !important;
color: #111;
}
/* dark red */ /* dark red */
.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } .red.solid,
.low .chart { border:1px solid #C21F39 } .status-line.low,
.low .cover-fill {
background: #c21f39;
}
.low .chart {
border: 1px solid #c21f39;
}
.highlighted, .highlighted,
.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ .highlighted .cstat-no,
background: #C21F39 !important; .highlighted .fstat-no,
.highlighted .cbranch-no {
background: #c21f39 !important;
} }
/* medium red */ /* medium red */
.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } .cstat-no,
.fstat-no,
.cbranch-no,
.cbranch-no {
background: #f6c6ce;
}
/* light red */ /* light red */
.low, .cline-no { background:#FCE1E5 } .low,
.cline-no {
background: #fce1e5;
}
/* light green */ /* light green */
.high, .cline-yes { background:rgb(230,245,208) } .high,
.cline-yes {
background: rgb(230, 245, 208);
}
/* medium green */ /* medium green */
.cstat-yes { background:rgb(161,215,106) } .cstat-yes {
background: rgb(161, 215, 106);
}
/* dark green */ /* dark green */
.status-line.high, .high .cover-fill { background:rgb(77,146,33) } .status-line.high,
.high .chart { border:1px solid rgb(77,146,33) } .high .cover-fill {
background: rgb(77, 146, 33);
}
.high .chart {
border: 1px solid rgb(77, 146, 33);
}
/* dark yellow (gold) */ /* dark yellow (gold) */
.status-line.medium, .medium .cover-fill { background: #f9cd0b; } .status-line.medium,
.medium .chart { border:1px solid #f9cd0b; } .medium .cover-fill {
background: #f9cd0b;
}
.medium .chart {
border: 1px solid #f9cd0b;
}
/* light yellow */ /* light yellow */
.medium { background: #fff4c2; } .medium {
background: #fff4c2;
.cstat-skip { background: #ddd; color: #111; }
.fstat-skip { background: #ddd; color: #111 !important; }
.cbranch-skip { background: #ddd !important; color: #111; }
span.cline-neutral { background: #eaeaea; }
.coverage-summary td.empty {
opacity: .5;
padding-top: 4px;
padding-bottom: 4px;
line-height: 1;
color: #888;
} }
.cover-fill, .cover-empty { .cstat-skip {
display:inline-block; background: #ddd;
color: #111;
}
.fstat-skip {
background: #ddd;
color: #111 !important;
}
.cbranch-skip {
background: #ddd !important;
color: #111;
}
span.cline-neutral {
background: #eaeaea;
}
.coverage-summary td.empty {
opacity: 0.5;
padding-top: 4px;
padding-bottom: 4px;
line-height: 1;
color: #888;
}
.cover-fill,
.cover-empty {
display: inline-block;
height: 12px; height: 12px;
} }
.chart { .chart {
line-height: 0; line-height: 0;
} }
.cover-empty { .cover-empty {
background: white; background: white;
} }
.cover-full { .cover-full {
border-right: none !important; border-right: none !important;
} }
pre.prettyprint { pre.prettyprint {
border: none !important; border: none !important;
padding: 0 !important; padding: 0 !important;
margin: 0 !important; margin: 0 !important;
}
.com {
color: #999 !important;
}
.ignore-none {
color: #999;
font-weight: normal;
} }
.com { color: #999 !important; }
.ignore-none { color: #999; font-weight: normal; }
.wrapper { .wrapper {
min-height: 100%; min-height: 100%;
@@ -219,6 +356,7 @@ pre.prettyprint {
height: 100%; height: 100%;
margin: 0 auto -48px; margin: 0 auto -48px;
} }
.footer, .push { .footer,
.push {
height: 48px; height: 48px;
} }

View File

@@ -1,87 +1,85 @@
/* eslint-disable */ /* eslint-disable */
var jumpToCode = (function init() { var jumpToCode = (function init() {
// Classes of code we would like to highlight in the file view // Classes of code we would like to highlight in the file view
var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; var missingCoverageClasses = [".cbranch-no", ".cstat-no", ".fstat-no"];
// Elements to highlight in the file listing view // Elements to highlight in the file listing view
var fileListingElements = ['td.pct.low']; var fileListingElements = ["td.pct.low"];
// We don't want to select elements that are direct descendants of another match // We don't want to select elements that are direct descendants of another match
var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` var notSelector = ":not(" + missingCoverageClasses.join("):not(") + ") > "; // becomes `:not(a):not(b) > `
// Selecter that finds elements on the page to which we can jump // Selecter that finds elements on the page to which we can jump
var selector = var selector =
fileListingElements.join(', ') + fileListingElements.join(", ") +
', ' + ", " +
notSelector + notSelector +
missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` missingCoverageClasses.join(", " + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b`
// The NodeList of matching elements // The NodeList of matching elements
var missingCoverageElements = document.querySelectorAll(selector); var missingCoverageElements = document.querySelectorAll(selector);
var currentIndex; var currentIndex;
function toggleClass(index) { function toggleClass(index) {
missingCoverageElements missingCoverageElements.item(currentIndex).classList.remove("highlighted");
.item(currentIndex) missingCoverageElements.item(index).classList.add("highlighted");
.classList.remove('highlighted'); }
missingCoverageElements.item(index).classList.add('highlighted');
function makeCurrent(index) {
toggleClass(index);
currentIndex = index;
missingCoverageElements.item(index).scrollIntoView({
behavior: "smooth",
block: "center",
inline: "center",
});
}
function goToPrevious() {
var nextIndex = 0;
if (typeof currentIndex !== "number" || currentIndex === 0) {
nextIndex = missingCoverageElements.length - 1;
} else if (missingCoverageElements.length > 1) {
nextIndex = currentIndex - 1;
} }
function makeCurrent(index) { makeCurrent(nextIndex);
toggleClass(index); }
currentIndex = index;
missingCoverageElements.item(index).scrollIntoView({ function goToNext() {
behavior: 'smooth', var nextIndex = 0;
block: 'center',
inline: 'center' if (
}); typeof currentIndex === "number" &&
currentIndex < missingCoverageElements.length - 1
) {
nextIndex = currentIndex + 1;
} }
function goToPrevious() { makeCurrent(nextIndex);
var nextIndex = 0; }
if (typeof currentIndex !== 'number' || currentIndex === 0) {
nextIndex = missingCoverageElements.length - 1;
} else if (missingCoverageElements.length > 1) {
nextIndex = currentIndex - 1;
}
makeCurrent(nextIndex); return function jump(event) {
if (
document.getElementById("fileSearch") === document.activeElement &&
document.activeElement != null
) {
// if we're currently focused on the search input, we don't want to navigate
return;
} }
function goToNext() { switch (event.which) {
var nextIndex = 0; case 78: // n
case 74: // j
if ( goToNext();
typeof currentIndex === 'number' && break;
currentIndex < missingCoverageElements.length - 1 case 66: // b
) { case 75: // k
nextIndex = currentIndex + 1; case 80: // p
} goToPrevious();
break;
makeCurrent(nextIndex);
} }
};
return function jump(event) {
if (
document.getElementById('fileSearch') === document.activeElement &&
document.activeElement != null
) {
// if we're currently focused on the search input, we don't want to navigate
return;
}
switch (event.which) {
case 78: // n
case 74: // j
goToNext();
break;
case 66: // b
case 75: // k
case 80: // p
goToPrevious();
break;
}
};
})(); })();
window.addEventListener('keydown', jumpToCode); window.addEventListener("keydown", jumpToCode);

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for config/builder/config.ts</title> <title>Code coverage report for config/builder/config.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">config/builder</a> config.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">config/builder</a> config.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">78.57% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>11/14</span> <span class="strong">78.57% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">11/14</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">100% </span>
<span class='fraction'>0/0</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/0</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">75% </span> <span class="strong">75% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>3/4</span> <span class="fraction">3/4</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">78.57% </span>
<span class="strong">78.57% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">11/14</span>
<span class='fraction'>11/14</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line medium'></div> <div class="status-line medium"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -476,21 +472,27 @@ export class Config&lt;Type extends Record&lt;string, any&gt;, Store = never&gt;
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-07-04T02:41:23.401Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-07-04T02:41:23.401Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,146 +1,216 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for config/builder</title> <title>Code coverage report for config/builder</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> config/builder</h1> <h1><a href="../../index.html">All files</a> config/builder</h1>
<div class='clearfix'> <div class="clearfix">
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">31.73% </span>
<span class="strong">31.73% </span> <span class="quiet">Statements</span>
<span class="quiet">Statements</span> <span class="fraction">33/104</span>
<span class='fraction'>33/104</span> </div>
</div>
<div class="fl pad1y space-right2">
<span class="strong">0% </span>
<div class='fl pad1y space-right2'> <span class="quiet">Branches</span>
<span class="strong">0% </span> <span class="fraction">0/29</span>
<span class="quiet">Branches</span> </div>
<span class='fraction'>0/29</span>
</div> <div class="fl pad1y space-right2">
<span class="strong">17.18% </span>
<span class="quiet">Functions</span>
<div class='fl pad1y space-right2'> <span class="fraction">11/64</span>
<span class="strong">17.18% </span> </div>
<span class="quiet">Functions</span>
<span class='fraction'>11/64</span> <div class="fl pad1y space-right2">
</div> <span class="strong">31.37% </span>
<span class="quiet">Lines</span>
<span class="fraction">32/102</span>
<div class='fl pad1y space-right2'> </div>
<span class="strong">31.37% </span>
<span class="quiet">Lines</span>
<span class='fraction'>32/102</span>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div>
<div class="status-line low"></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 medium" data-value="config.ts">
<a href="config.ts.html">config.ts</a>
</td>
<td data-value="78.57" class="pic medium">
<div class="chart">
<div class="cover-fill" style="width: 78%"></div>
<div class="cover-empty" style="width: 22%"></div>
</div>
</td>
<td data-value="78.57" class="pct medium">78.57%</td>
<td data-value="14" class="abs medium">11/14</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td>
<td data-value="75" class="pct medium">75%</td>
<td data-value="4" class="abs medium">3/4</td>
<td data-value="78.57" class="pct medium">78.57%</td>
<td data-value="14" class="abs medium">11/14</td>
</tr>
<tr>
<td class="file medium" data-value="list.ts">
<a href="list.ts.html">list.ts</a>
</td>
<td data-value="70" class="pic medium">
<div class="chart">
<div class="cover-fill" style="width: 70%"></div>
<div class="cover-empty" style="width: 30%"></div>
</div>
</td>
<td data-value="70" class="pct medium">70%</td>
<td data-value="20" class="abs medium">14/20</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td>
<td data-value="62.5" class="pct medium">62.5%</td>
<td data-value="8" class="abs medium">5/8</td>
<td data-value="70" class="pct medium">70%</td>
<td data-value="20" class="abs medium">14/20</td>
</tr>
<tr>
<td class="file low" data-value="value.ts">
<a href="value.ts.html">value.ts</a>
</td>
<td data-value="11.42" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 11%"></div>
<div class="cover-empty" style="width: 89%"></div>
</div>
</td>
<td data-value="11.42" class="pct low">11.42%</td>
<td data-value="70" class="abs low">8/70</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="29" class="abs low">0/29</td>
<td data-value="5.76" class="pct low">5.76%</td>
<td data-value="52" class="abs low">3/52</td>
<td data-value="10.29" class="pct low">10.29%</td>
<td data-value="68" class="abs low">7/68</td>
</tr>
</tbody>
</table>
</div>
<div class="push"></div>
<!-- for sticky footer -->
</div> </div>
<div class='status-line low'></div> <!-- /wrapper -->
<div class="pad1"> <div class="footer quiet pad2 space-top1 center small">
<table class="coverage-summary"> Code coverage generated by
<thead> <a
<tr> href="https://istanbul.js.org/"
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th> target="_blank"
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> rel="noopener noreferrer"
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> >istanbul</a
<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> at 2024-07-04T02:41:23.401Z
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> </div>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <script src="../../prettify.js"></script>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <script>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> window.onload = function () {
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> prettyPrint();
</tr> };
</thead> </script>
<tbody><tr> <script src="../../sorter.js"></script>
<td class="file medium" data-value="config.ts"><a href="config.ts.html">config.ts</a></td> <script src="../../block-navigation.js"></script>
<td data-value="78.57" class="pic medium"> </body>
<div class="chart"><div class="cover-fill" style="width: 78%"></div><div class="cover-empty" style="width: 22%"></div></div>
</td>
<td data-value="78.57" class="pct medium">78.57%</td>
<td data-value="14" class="abs medium">11/14</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td>
<td data-value="75" class="pct medium">75%</td>
<td data-value="4" class="abs medium">3/4</td>
<td data-value="78.57" class="pct medium">78.57%</td>
<td data-value="14" class="abs medium">11/14</td>
</tr>
<tr>
<td class="file medium" data-value="list.ts"><a href="list.ts.html">list.ts</a></td>
<td data-value="70" class="pic medium">
<div class="chart"><div class="cover-fill" style="width: 70%"></div><div class="cover-empty" style="width: 30%"></div></div>
</td>
<td data-value="70" class="pct medium">70%</td>
<td data-value="20" class="abs medium">14/20</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td>
<td data-value="62.5" class="pct medium">62.5%</td>
<td data-value="8" class="abs medium">5/8</td>
<td data-value="70" class="pct medium">70%</td>
<td data-value="20" class="abs medium">14/20</td>
</tr>
<tr>
<td class="file low" data-value="value.ts"><a href="value.ts.html">value.ts</a></td>
<td data-value="11.42" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 11%"></div><div class="cover-empty" style="width: 89%"></div></div>
</td>
<td data-value="11.42" class="pct low">11.42%</td>
<td data-value="70" class="abs low">8/70</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="29" class="abs low">0/29</td>
<td data-value="5.76" class="pct low">5.76%</td>
<td data-value="52" class="abs low">3/52</td>
<td data-value="10.29" class="pct low">10.29%</td>
<td data-value="68" class="abs low">7/68</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-07-04T02:41:23.401Z
</div>
<script src="../../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for config/builder/list.ts</title> <title>Code coverage report for config/builder/list.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">config/builder</a> list.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">config/builder</a> list.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">70% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>14/20</span> <span class="strong">70% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">14/20</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">100% </span>
<span class='fraction'>0/0</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/0</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">62.5% </span> <span class="strong">62.5% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>5/8</span> <span class="fraction">5/8</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">70% </span>
<span class="strong">70% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">14/20</span>
<span class='fraction'>14/20</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line medium'></div> <div class="status-line medium"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -629,21 +625,27 @@ export class List&lt;Type, Store&gt; {
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-07-04T02:41:23.401Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-07-04T02:41:23.401Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for config/builder/value.ts</title> <title>Code coverage report for config/builder/value.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">config/builder</a> value.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">config/builder</a> value.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">11.42% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>8/70</span> <span class="strong">11.42% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">8/70</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">0% </span>
<span class='fraction'>0/29</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/29</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">5.76% </span> <span class="strong">5.76% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>3/52</span> <span class="fraction">3/52</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">10.29% </span>
<span class="strong">10.29% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">7/68</span>
<span class='fraction'>7/68</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line low'></div> <div class="status-line low"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -2414,21 +2410,27 @@ export class Value&lt;Type, Store&gt; {
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-07-04T02:41:23.401Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-07-04T02:41:23.401Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for config/configTypes.ts</title> <title>Code coverage report for config/configTypes.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../prettify.css" /> <link rel="stylesheet" href="../prettify.css" />
<link rel="stylesheet" href="../base.css" /> <link rel="stylesheet" href="../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../sort-arrow-sprite.png); background-image: url(../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../index.html">All files</a> / <a href="index.html">config</a> configTypes.ts</h1> <h1>
<div class='clearfix'> <a href="../index.html">All files</a> /
<a href="index.html">config</a> configTypes.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">100% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>4/4</span> <span class="strong">100% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">4/4</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">100% </span>
<span class='fraction'>2/2</span> <span class="quiet">Branches</span>
</div> <span class="fraction">2/2</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">100% </span> <span class="strong">100% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>1/1</span> <span class="fraction">1/1</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">100% </span>
<span class="strong">100% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">4/4</span>
<span class='fraction'>4/4</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line high'></div> <div class="status-line high"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -899,21 +895,27 @@ export const unionValueKey = "unionValueKey" as const
export type UnionValueKey = typeof unionValueKey export type UnionValueKey = typeof unionValueKey
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-07-04T02:41:23.401Z Code coverage generated by
</div> <a
<script src="../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-07-04T02:41:23.401Z
<script src="../sorter.js"></script> </div>
<script src="../block-navigation.js"></script> <script src="../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../sorter.js"></script>
<script src="../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,116 +1,176 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for config</title> <title>Code coverage report for config</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../prettify.css" /> <link rel="stylesheet" href="../prettify.css" />
<link rel="stylesheet" href="../base.css" /> <link rel="stylesheet" href="../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../sort-arrow-sprite.png); background-image: url(../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../index.html">All files</a> config</h1> <h1><a href="../index.html">All files</a> config</h1>
<div class='clearfix'> <div class="clearfix">
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">100% </span>
<span class="strong">100% </span> <span class="quiet">Statements</span>
<span class="quiet">Statements</span> <span class="fraction">4/4</span>
<span class='fraction'>4/4</span> </div>
</div>
<div class="fl pad1y space-right2">
<span class="strong">100% </span>
<div class='fl pad1y space-right2'> <span class="quiet">Branches</span>
<span class="strong">100% </span> <span class="fraction">2/2</span>
<span class="quiet">Branches</span> </div>
<span class='fraction'>2/2</span>
</div> <div class="fl pad1y space-right2">
<span class="strong">100% </span>
<span class="quiet">Functions</span>
<div class='fl pad1y space-right2'> <span class="fraction">1/1</span>
<span class="strong">100% </span> </div>
<span class="quiet">Functions</span>
<span class='fraction'>1/1</span> <div class="fl pad1y space-right2">
</div> <span class="strong">100% </span>
<span class="quiet">Lines</span>
<span class="fraction">4/4</span>
<div class='fl pad1y space-right2'> </div>
<span class="strong">100% </span>
<span class="quiet">Lines</span>
<span class='fraction'>4/4</span>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </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="configTypes.ts">
<a href="configTypes.ts.html">configTypes.ts</a>
</td>
<td data-value="100" class="pic high">
<div class="chart">
<div class="cover-fill cover-full" style="width: 100%"></div>
<div class="cover-empty" style="width: 0%"></div>
</div>
</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="4" class="abs high">4/4</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">2/2</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="1" class="abs high">1/1</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="4" class="abs high">4/4</td>
</tr>
</tbody>
</table>
</div>
<div class="push"></div>
<!-- for sticky footer -->
</div> </div>
<div class='status-line high'></div> <!-- /wrapper -->
<div class="pad1"> <div class="footer quiet pad2 space-top1 center small">
<table class="coverage-summary"> Code coverage generated by
<thead> <a
<tr> href="https://istanbul.js.org/"
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th> target="_blank"
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> rel="noopener noreferrer"
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> >istanbul</a
<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> at 2024-07-04T02:41:23.401Z
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> </div>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <script src="../prettify.js"></script>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <script>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> window.onload = function () {
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> prettyPrint();
</tr> };
</thead> </script>
<tbody><tr> <script src="../sorter.js"></script>
<td class="file high" data-value="configTypes.ts"><a href="configTypes.ts.html">configTypes.ts</a></td> <script src="../block-navigation.js"></script>
<td data-value="100" class="pic high"> </body>
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="4" class="abs high">4/4</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">2/2</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="1" class="abs high">1/1</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="4" class="abs high">4/4</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-07-04T02:41:23.401Z
</div>
<script src="../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../sorter.js"></script>
<script src="../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,116 +1,176 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for emverLite</title> <title>Code coverage report for emverLite</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../prettify.css" /> <link rel="stylesheet" href="../prettify.css" />
<link rel="stylesheet" href="../base.css" /> <link rel="stylesheet" href="../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../sort-arrow-sprite.png); background-image: url(../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../index.html">All files</a> emverLite</h1> <h1><a href="../index.html">All files</a> emverLite</h1>
<div class='clearfix'> <div class="clearfix">
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">96.99% </span>
<span class="strong">96.99% </span> <span class="quiet">Statements</span>
<span class="quiet">Statements</span> <span class="fraction">129/133</span>
<span class='fraction'>129/133</span> </div>
</div>
<div class="fl pad1y space-right2">
<span class="strong">91.89% </span>
<div class='fl pad1y space-right2'> <span class="quiet">Branches</span>
<span class="strong">91.89% </span> <span class="fraction">34/37</span>
<span class="quiet">Branches</span> </div>
<span class='fraction'>34/37</span>
</div> <div class="fl pad1y space-right2">
<span class="strong">97.56% </span>
<span class="quiet">Functions</span>
<div class='fl pad1y space-right2'> <span class="fraction">40/41</span>
<span class="strong">97.56% </span> </div>
<span class="quiet">Functions</span>
<span class='fraction'>40/41</span> <div class="fl pad1y space-right2">
</div> <span class="strong">97.65% </span>
<span class="quiet">Lines</span>
<span class="fraction">125/128</span>
<div class='fl pad1y space-right2'> </div>
<span class="strong">97.65% </span>
<span class="quiet">Lines</span>
<span class='fraction'>125/128</span>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </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="mod.ts">
<a href="mod.ts.html">mod.ts</a>
</td>
<td data-value="96.99" class="pic high">
<div class="chart">
<div class="cover-fill" style="width: 96%"></div>
<div class="cover-empty" style="width: 4%"></div>
</div>
</td>
<td data-value="96.99" class="pct high">96.99%</td>
<td data-value="133" class="abs high">129/133</td>
<td data-value="91.89" class="pct high">91.89%</td>
<td data-value="37" class="abs high">34/37</td>
<td data-value="97.56" class="pct high">97.56%</td>
<td data-value="41" class="abs high">40/41</td>
<td data-value="97.65" class="pct high">97.65%</td>
<td data-value="128" class="abs high">125/128</td>
</tr>
</tbody>
</table>
</div>
<div class="push"></div>
<!-- for sticky footer -->
</div> </div>
<div class='status-line high'></div> <!-- /wrapper -->
<div class="pad1"> <div class="footer quiet pad2 space-top1 center small">
<table class="coverage-summary"> Code coverage generated by
<thead> <a
<tr> href="https://istanbul.js.org/"
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th> target="_blank"
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> rel="noopener noreferrer"
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> >istanbul</a
<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> at 2024-07-04T02:41:23.401Z
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> </div>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <script src="../prettify.js"></script>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <script>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> window.onload = function () {
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> prettyPrint();
</tr> };
</thead> </script>
<tbody><tr> <script src="../sorter.js"></script>
<td class="file high" data-value="mod.ts"><a href="mod.ts.html">mod.ts</a></td> <script src="../block-navigation.js"></script>
<td data-value="96.99" class="pic high"> </body>
<div class="chart"><div class="cover-fill" style="width: 96%"></div><div class="cover-empty" style="width: 4%"></div></div>
</td>
<td data-value="96.99" class="pct high">96.99%</td>
<td data-value="133" class="abs high">129/133</td>
<td data-value="91.89" class="pct high">91.89%</td>
<td data-value="37" class="abs high">34/37</td>
<td data-value="97.56" class="pct high">97.56%</td>
<td data-value="41" class="abs high">40/41</td>
<td data-value="97.65" class="pct high">97.65%</td>
<td data-value="128" class="abs high">125/128</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-07-04T02:41:23.401Z
</div>
<script src="../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../sorter.js"></script>
<script src="../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for emverLite/mod.ts</title> <title>Code coverage report for emverLite/mod.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../prettify.css" /> <link rel="stylesheet" href="../prettify.css" />
<link rel="stylesheet" href="../base.css" /> <link rel="stylesheet" href="../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../sort-arrow-sprite.png); background-image: url(../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../index.html">All files</a> / <a href="index.html">emverLite</a> mod.ts</h1> <h1>
<div class='clearfix'> <a href="../index.html">All files</a> /
<a href="index.html">emverLite</a> mod.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">96.99% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>129/133</span> <span class="strong">96.99% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">129/133</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">91.89% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">91.89% </span>
<span class='fraction'>34/37</span> <span class="quiet">Branches</span>
</div> <span class="fraction">34/37</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">97.56% </span> <span class="strong">97.56% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>40/41</span> <span class="fraction">40/41</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">97.65% </span>
<span class="strong">97.65% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">125/128</span>
<span class='fraction'>125/128</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line high'></div> <div class="status-line high"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -1034,21 +1030,27 @@ export class Checker {
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-07-04T02:41:23.401Z Code coverage generated by
</div> <a
<script src="../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-07-04T02:41:23.401Z
<script src="../sorter.js"></script> </div>
<script src="../block-navigation.js"></script> <script src="../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../sorter.js"></script>
<script src="../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,66 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head> <title>
<title>Code coverage report for health/checkFns/checkPortListening.ts</title> Code coverage report for health/checkFns/checkPortListening.ts
</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">health/checkFns</a> checkPortListening.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">health/checkFns</a> checkPortListening.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">61.11% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>11/18</span> <span class="strong">61.11% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">11/18</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">0% </span>
<span class='fraction'>0/7</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/7</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">42.85% </span> <span class="strong">42.85% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>3/7</span> <span class="fraction">3/7</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">61.11% </span>
<span class="strong">61.11% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">11/18</span>
<span class='fraction'>11/18</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line medium'></div> <div class="status-line medium"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -266,21 +264,27 @@ export async function <span class="fstat-no" title="function not covered" >check
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-07-04T02:41:23.401Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-07-04T02:41:23.401Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,116 +1,176 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for health/checkFns</title> <title>Code coverage report for health/checkFns</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> health/checkFns</h1> <h1><a href="../../index.html">All files</a> health/checkFns</h1>
<div class='clearfix'> <div class="clearfix">
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">61.11% </span>
<span class="strong">61.11% </span> <span class="quiet">Statements</span>
<span class="quiet">Statements</span> <span class="fraction">11/18</span>
<span class='fraction'>11/18</span> </div>
</div>
<div class="fl pad1y space-right2">
<span class="strong">0% </span>
<div class='fl pad1y space-right2'> <span class="quiet">Branches</span>
<span class="strong">0% </span> <span class="fraction">0/7</span>
<span class="quiet">Branches</span> </div>
<span class='fraction'>0/7</span>
</div> <div class="fl pad1y space-right2">
<span class="strong">42.85% </span>
<span class="quiet">Functions</span>
<div class='fl pad1y space-right2'> <span class="fraction">3/7</span>
<span class="strong">42.85% </span> </div>
<span class="quiet">Functions</span>
<span class='fraction'>3/7</span> <div class="fl pad1y space-right2">
</div> <span class="strong">61.11% </span>
<span class="quiet">Lines</span>
<span class="fraction">11/18</span>
<div class='fl pad1y space-right2'> </div>
<span class="strong">61.11% </span>
<span class="quiet">Lines</span>
<span class='fraction'>11/18</span>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div>
<div class="status-line medium"></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 medium" data-value="checkPortListening.ts">
<a href="checkPortListening.ts.html">checkPortListening.ts</a>
</td>
<td data-value="61.11" class="pic medium">
<div class="chart">
<div class="cover-fill" style="width: 61%"></div>
<div class="cover-empty" style="width: 39%"></div>
</div>
</td>
<td data-value="61.11" class="pct medium">61.11%</td>
<td data-value="18" class="abs medium">11/18</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="7" class="abs low">0/7</td>
<td data-value="42.85" class="pct low">42.85%</td>
<td data-value="7" class="abs low">3/7</td>
<td data-value="61.11" class="pct medium">61.11%</td>
<td data-value="18" class="abs medium">11/18</td>
</tr>
</tbody>
</table>
</div>
<div class="push"></div>
<!-- for sticky footer -->
</div> </div>
<div class='status-line medium'></div> <!-- /wrapper -->
<div class="pad1"> <div class="footer quiet pad2 space-top1 center small">
<table class="coverage-summary"> Code coverage generated by
<thead> <a
<tr> href="https://istanbul.js.org/"
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th> target="_blank"
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> rel="noopener noreferrer"
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> >istanbul</a
<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> at 2024-07-04T02:41:23.401Z
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> </div>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <script src="../../prettify.js"></script>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <script>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> window.onload = function () {
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> prettyPrint();
</tr> };
</thead> </script>
<tbody><tr> <script src="../../sorter.js"></script>
<td class="file medium" data-value="checkPortListening.ts"><a href="checkPortListening.ts.html">checkPortListening.ts</a></td> <script src="../../block-navigation.js"></script>
<td data-value="61.11" class="pic medium"> </body>
<div class="chart"><div class="cover-fill" style="width: 61%"></div><div class="cover-empty" style="width: 39%"></div></div>
</td>
<td data-value="61.11" class="pct medium">61.11%</td>
<td data-value="18" class="abs medium">11/18</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="7" class="abs low">0/7</td>
<td data-value="42.85" class="pct low">42.85%</td>
<td data-value="7" class="abs low">3/7</td>
<td data-value="61.11" class="pct medium">61.11%</td>
<td data-value="18" class="abs medium">11/18</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-07-04T02:41:23.401Z
</div>
<script src="../../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,371 +1,516 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for All files</title> <title>Code coverage report for All files</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="prettify.css" /> <link rel="stylesheet" href="prettify.css" />
<link rel="stylesheet" href="base.css" /> <link rel="stylesheet" href="base.css" />
<link rel="shortcut icon" type="image/x-icon" href="favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(sort-arrow-sprite.png); background-image: url(sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1>All files</h1> <h1>All files</h1>
<div class='clearfix'> <div class="clearfix">
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">48.29% </span>
<span class="strong">48.29% </span> <span class="quiet">Statements</span>
<span class="quiet">Statements</span> <span class="fraction">1329/2752</span>
<span class='fraction'>1329/2752</span> </div>
</div>
<div class="fl pad1y space-right2">
<span class="strong">37.19% </span>
<div class='fl pad1y space-right2'> <span class="quiet">Branches</span>
<span class="strong">37.19% </span> <span class="fraction">334/898</span>
<span class="quiet">Branches</span> </div>
<span class='fraction'>334/898</span>
</div> <div class="fl pad1y space-right2">
<span class="strong">30.54% </span>
<span class="quiet">Functions</span>
<div class='fl pad1y space-right2'> <span class="fraction">212/694</span>
<span class="strong">30.54% </span> </div>
<span class="quiet">Functions</span>
<span class='fraction'>212/694</span> <div class="fl pad1y space-right2">
</div> <span class="strong">48.21% </span>
<span class="quiet">Lines</span>
<span class="fraction">1256/2605</span>
<div class='fl pad1y space-right2'> </div>
<span class="strong">48.21% </span>
<span class="quiet">Lines</span>
<span class='fraction'>1256/2605</span>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div>
<div class="status-line low"></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 low" data-value="lib">
<a href="lib/index.html">lib</a>
</td>
<td data-value="40.27" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 40%"></div>
<div class="cover-empty" style="width: 60%"></div>
</div>
</td>
<td data-value="40.27" class="pct low">40.27%</td>
<td data-value="144" class="abs low">58/144</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="11" class="abs low">0/11</td>
<td data-value="11.76" class="pct low">11.76%</td>
<td data-value="85" class="abs low">10/85</td>
<td data-value="40.27" class="pct low">40.27%</td>
<td data-value="144" class="abs low">58/144</td>
</tr>
<tr>
<td class="file low" data-value="lib/actions">
<a href="lib/actions/index.html">lib/actions</a>
</td>
<td data-value="10.71" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 10%"></div>
<div class="cover-empty" style="width: 90%"></div>
</div>
</td>
<td data-value="10.71" class="pct low">10.71%</td>
<td data-value="28" class="abs low">3/28</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="2" class="abs low">0/2</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="12" class="abs low">0/12</td>
<td data-value="10.71" class="pct low">10.71%</td>
<td data-value="28" class="abs low">3/28</td>
</tr>
<tr>
<td class="file low" data-value="lib/backup">
<a href="lib/backup/index.html">lib/backup</a>
</td>
<td data-value="8.79" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 8%"></div>
<div class="cover-empty" style="width: 92%"></div>
</div>
</td>
<td data-value="8.79" class="pct low">8.79%</td>
<td data-value="91" class="abs low">8/91</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="11" class="abs low">0/11</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="27" class="abs low">0/27</td>
<td data-value="9.09" class="pct low">9.09%</td>
<td data-value="88" class="abs low">8/88</td>
</tr>
<tr>
<td class="file low" data-value="lib/config">
<a href="lib/config/index.html">lib/config</a>
</td>
<td data-value="46.15" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 46%"></div>
<div class="cover-empty" style="width: 54%"></div>
</div>
</td>
<td data-value="46.15" class="pct low">46.15%</td>
<td data-value="26" class="abs low">12/26</td>
<td data-value="25" class="pct low">25%</td>
<td data-value="8" class="abs low">2/8</td>
<td data-value="20" class="pct low">20%</td>
<td data-value="5" class="abs low">1/5</td>
<td data-value="46.15" class="pct low">46.15%</td>
<td data-value="26" class="abs low">12/26</td>
</tr>
<tr>
<td class="file high" data-value="lib/config/builder">
<a href="lib/config/builder/index.html">lib/config/builder</a>
</td>
<td data-value="84.61" class="pic high">
<div class="chart">
<div class="cover-fill" style="width: 84%"></div>
<div class="cover-empty" style="width: 16%"></div>
</div>
</td>
<td data-value="84.61" class="pct high">84.61%</td>
<td data-value="117" class="abs high">99/117</td>
<td data-value="55.17" class="pct medium">55.17%</td>
<td data-value="29" class="abs medium">16/29</td>
<td data-value="78.26" class="pct medium">78.26%</td>
<td data-value="69" class="abs medium">54/69</td>
<td data-value="84.34" class="pct high">84.34%</td>
<td data-value="115" class="abs high">97/115</td>
</tr>
<tr>
<td class="file low" data-value="lib/dependencies">
<a href="lib/dependencies/index.html">lib/dependencies</a>
</td>
<td data-value="9.67" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 9%"></div>
<div class="cover-empty" style="width: 91%"></div>
</div>
</td>
<td data-value="9.67" class="pct low">9.67%</td>
<td data-value="93" class="abs low">9/93</td>
<td data-value="1.78" class="pct low">1.78%</td>
<td data-value="56" class="abs low">1/56</td>
<td data-value="6.25" class="pct low">6.25%</td>
<td data-value="32" class="abs low">2/32</td>
<td data-value="10" class="pct low">10%</td>
<td data-value="90" class="abs low">9/90</td>
</tr>
<tr>
<td class="file medium" data-value="lib/exver">
<a href="lib/exver/index.html">lib/exver</a>
</td>
<td data-value="71.73" class="pic medium">
<div class="chart">
<div class="cover-fill" style="width: 71%"></div>
<div class="cover-empty" style="width: 29%"></div>
</div>
</td>
<td data-value="71.73" class="pct medium">71.73%</td>
<td data-value="994" class="abs medium">713/994</td>
<td data-value="63.29" class="pct medium">63.29%</td>
<td data-value="395" class="abs medium">250/395</td>
<td data-value="71.65" class="pct medium">71.65%</td>
<td data-value="127" class="abs medium">91/127</td>
<td data-value="71.77" class="pct medium">71.77%</td>
<td data-value="946" class="abs medium">679/946</td>
</tr>
<tr>
<td class="file low" data-value="lib/health">
<a href="lib/health/index.html">lib/health</a>
</td>
<td data-value="17.24" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 17%"></div>
<div class="cover-empty" style="width: 83%"></div>
</div>
</td>
<td data-value="17.24" class="pct low">17.24%</td>
<td data-value="29" class="abs low">5/29</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="12" class="abs low">0/12</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="6" class="abs low">0/6</td>
<td data-value="19.23" class="pct low">19.23%</td>
<td data-value="26" class="abs low">5/26</td>
</tr>
<tr>
<td class="file medium" data-value="lib/health/checkFns">
<a href="lib/health/checkFns/index.html">lib/health/checkFns</a>
</td>
<td data-value="53.06" class="pic medium">
<div class="chart">
<div class="cover-fill" style="width: 53%"></div>
<div class="cover-empty" style="width: 47%"></div>
</div>
</td>
<td data-value="53.06" class="pct medium">53.06%</td>
<td data-value="49" class="abs medium">26/49</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="17" class="abs low">0/17</td>
<td data-value="26.31" class="pct low">26.31%</td>
<td data-value="19" class="abs low">5/19</td>
<td data-value="50" class="pct medium">50%</td>
<td data-value="44" class="abs medium">22/44</td>
</tr>
<tr>
<td class="file low" data-value="lib/inits">
<a href="lib/inits/index.html">lib/inits</a>
</td>
<td data-value="20.68" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 20%"></div>
<div class="cover-empty" style="width: 80%"></div>
</div>
</td>
<td data-value="20.68" class="pct low">20.68%</td>
<td data-value="29" class="abs low">6/29</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="6" class="abs low">0/6</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="11" class="abs low">0/11</td>
<td data-value="20.68" class="pct low">20.68%</td>
<td data-value="29" class="abs low">6/29</td>
</tr>
<tr>
<td class="file low" data-value="lib/interfaces">
<a href="lib/interfaces/index.html">lib/interfaces</a>
</td>
<td data-value="22.44" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 22%"></div>
<div class="cover-empty" style="width: 78%"></div>
</div>
</td>
<td data-value="22.44" class="pct low">22.44%</td>
<td data-value="49" class="abs low">11/49</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="24" class="abs low">0/24</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="13" class="abs low">0/13</td>
<td data-value="22.22" class="pct low">22.22%</td>
<td data-value="45" class="abs low">10/45</td>
</tr>
<tr>
<td class="file low" data-value="lib/mainFn">
<a href="lib/mainFn/index.html">lib/mainFn</a>
</td>
<td data-value="15.78" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 15%"></div>
<div class="cover-empty" style="width: 85%"></div>
</div>
</td>
<td data-value="15.78" class="pct low">15.78%</td>
<td data-value="228" class="abs low">36/228</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="38" class="abs low">0/38</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="77" class="abs low">0/77</td>
<td data-value="15.16" class="pct low">15.16%</td>
<td data-value="211" class="abs low">32/211</td>
</tr>
<tr>
<td class="file low" data-value="lib/manifest">
<a href="lib/manifest/index.html">lib/manifest</a>
</td>
<td data-value="25" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 25%"></div>
<div class="cover-empty" style="width: 75%"></div>
</div>
</td>
<td data-value="25" class="pct low">25%</td>
<td data-value="16" class="abs low">4/16</td>
<td data-value="65.51" class="pct medium">65.51%</td>
<td data-value="29" class="abs medium">19/29</td>
<td data-value="20" class="pct low">20%</td>
<td data-value="5" class="abs low">1/5</td>
<td data-value="26.66" class="pct low">26.66%</td>
<td data-value="15" class="abs low">4/15</td>
</tr>
<tr>
<td class="file low" data-value="lib/store">
<a href="lib/store/index.html">lib/store</a>
</td>
<td data-value="35.71" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 35%"></div>
<div class="cover-empty" style="width: 65%"></div>
</div>
</td>
<td data-value="35.71" class="pct low">35.71%</td>
<td data-value="28" class="abs low">10/28</td>
<td data-value="20" class="pct low">20%</td>
<td data-value="5" class="abs low">1/5</td>
<td data-value="10" class="pct low">10%</td>
<td data-value="10" class="abs low">1/10</td>
<td data-value="32" class="pct low">32%</td>
<td data-value="25" class="abs low">8/25</td>
</tr>
<tr>
<td class="file high" data-value="lib/test">
<a href="lib/test/index.html">lib/test</a>
</td>
<td data-value="100" class="pic high">
<div class="chart">
<div class="cover-fill cover-full" style="width: 100%"></div>
<div class="cover-empty" style="width: 0%"></div>
</div>
</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="9" class="abs high">9/9</td>
<td data-value="100" class="pct high">100%</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="100" class="pct high">100%</td>
<td data-value="9" class="abs high">9/9</td>
</tr>
<tr>
<td class="file low" data-value="lib/trigger">
<a href="lib/trigger/index.html">lib/trigger</a>
</td>
<td data-value="30.61" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 30%"></div>
<div class="cover-empty" style="width: 70%"></div>
</div>
</td>
<td data-value="30.61" class="pct low">30.61%</td>
<td data-value="49" class="abs low">15/49</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="5" class="abs low">0/5</td>
<td data-value="40" class="pct low">40%</td>
<td data-value="10" class="abs low">4/10</td>
<td data-value="26.66" class="pct low">26.66%</td>
<td data-value="45" class="abs low">12/45</td>
</tr>
<tr>
<td class="file low" data-value="lib/util">
<a href="lib/util/index.html">lib/util</a>
</td>
<td data-value="36.83" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 36%"></div>
<div class="cover-empty" style="width: 64%"></div>
</div>
</td>
<td data-value="36.83" class="pct low">36.83%</td>
<td data-value="695" class="abs low">256/695</td>
<td data-value="12.2" class="pct low">12.2%</td>
<td data-value="213" class="abs low">26/213</td>
<td data-value="17.96" class="pct low">17.96%</td>
<td data-value="167" class="abs low">30/167</td>
<td data-value="36.29" class="pct low">36.29%</td>
<td data-value="642" class="abs low">233/642</td>
</tr>
<tr>
<td class="file medium" data-value="lib/version">
<a href="lib/version/index.html">lib/version</a>
</td>
<td data-value="62.82" class="pic medium">
<div class="chart">
<div class="cover-fill" style="width: 62%"></div>
<div class="cover-empty" style="width: 38%"></div>
</div>
</td>
<td data-value="62.82" class="pct medium">62.82%</td>
<td data-value="78" class="abs medium">49/78</td>
<td data-value="51.35" class="pct medium">51.35%</td>
<td data-value="37" class="abs medium">19/37</td>
<td data-value="68.42" class="pct medium">68.42%</td>
<td data-value="19" class="abs medium">13/19</td>
<td data-value="63.63" class="pct medium">63.63%</td>
<td data-value="77" class="abs medium">49/77</td>
</tr>
</tbody>
</table>
</div>
<div class="push"></div>
<!-- for sticky footer -->
</div> </div>
<div class='status-line low'></div> <!-- /wrapper -->
<div class="pad1"> <div class="footer quiet pad2 space-top1 center small">
<table class="coverage-summary"> Code coverage generated by
<thead> <a
<tr> href="https://istanbul.js.org/"
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th> target="_blank"
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> rel="noopener noreferrer"
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> >istanbul</a
<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> at 2024-08-28T21:46:45.516Z
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> </div>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <script src="prettify.js"></script>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <script>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> window.onload = function () {
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> prettyPrint();
</tr> };
</thead> </script>
<tbody><tr> <script src="sorter.js"></script>
<td class="file low" data-value="lib"><a href="lib/index.html">lib</a></td> <script src="block-navigation.js"></script>
<td data-value="40.27" class="pic low"> </body>
<div class="chart"><div class="cover-fill" style="width: 40%"></div><div class="cover-empty" style="width: 60%"></div></div>
</td>
<td data-value="40.27" class="pct low">40.27%</td>
<td data-value="144" class="abs low">58/144</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="11" class="abs low">0/11</td>
<td data-value="11.76" class="pct low">11.76%</td>
<td data-value="85" class="abs low">10/85</td>
<td data-value="40.27" class="pct low">40.27%</td>
<td data-value="144" class="abs low">58/144</td>
</tr>
<tr>
<td class="file low" data-value="lib/actions"><a href="lib/actions/index.html">lib/actions</a></td>
<td data-value="10.71" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 10%"></div><div class="cover-empty" style="width: 90%"></div></div>
</td>
<td data-value="10.71" class="pct low">10.71%</td>
<td data-value="28" class="abs low">3/28</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="2" class="abs low">0/2</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="12" class="abs low">0/12</td>
<td data-value="10.71" class="pct low">10.71%</td>
<td data-value="28" class="abs low">3/28</td>
</tr>
<tr>
<td class="file low" data-value="lib/backup"><a href="lib/backup/index.html">lib/backup</a></td>
<td data-value="8.79" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 8%"></div><div class="cover-empty" style="width: 92%"></div></div>
</td>
<td data-value="8.79" class="pct low">8.79%</td>
<td data-value="91" class="abs low">8/91</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="11" class="abs low">0/11</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="27" class="abs low">0/27</td>
<td data-value="9.09" class="pct low">9.09%</td>
<td data-value="88" class="abs low">8/88</td>
</tr>
<tr>
<td class="file low" data-value="lib/config"><a href="lib/config/index.html">lib/config</a></td>
<td data-value="46.15" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 46%"></div><div class="cover-empty" style="width: 54%"></div></div>
</td>
<td data-value="46.15" class="pct low">46.15%</td>
<td data-value="26" class="abs low">12/26</td>
<td data-value="25" class="pct low">25%</td>
<td data-value="8" class="abs low">2/8</td>
<td data-value="20" class="pct low">20%</td>
<td data-value="5" class="abs low">1/5</td>
<td data-value="46.15" class="pct low">46.15%</td>
<td data-value="26" class="abs low">12/26</td>
</tr>
<tr>
<td class="file high" data-value="lib/config/builder"><a href="lib/config/builder/index.html">lib/config/builder</a></td>
<td data-value="84.61" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 84%"></div><div class="cover-empty" style="width: 16%"></div></div>
</td>
<td data-value="84.61" class="pct high">84.61%</td>
<td data-value="117" class="abs high">99/117</td>
<td data-value="55.17" class="pct medium">55.17%</td>
<td data-value="29" class="abs medium">16/29</td>
<td data-value="78.26" class="pct medium">78.26%</td>
<td data-value="69" class="abs medium">54/69</td>
<td data-value="84.34" class="pct high">84.34%</td>
<td data-value="115" class="abs high">97/115</td>
</tr>
<tr>
<td class="file low" data-value="lib/dependencies"><a href="lib/dependencies/index.html">lib/dependencies</a></td>
<td data-value="9.67" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 9%"></div><div class="cover-empty" style="width: 91%"></div></div>
</td>
<td data-value="9.67" class="pct low">9.67%</td>
<td data-value="93" class="abs low">9/93</td>
<td data-value="1.78" class="pct low">1.78%</td>
<td data-value="56" class="abs low">1/56</td>
<td data-value="6.25" class="pct low">6.25%</td>
<td data-value="32" class="abs low">2/32</td>
<td data-value="10" class="pct low">10%</td>
<td data-value="90" class="abs low">9/90</td>
</tr>
<tr>
<td class="file medium" data-value="lib/exver"><a href="lib/exver/index.html">lib/exver</a></td>
<td data-value="71.73" class="pic medium">
<div class="chart"><div class="cover-fill" style="width: 71%"></div><div class="cover-empty" style="width: 29%"></div></div>
</td>
<td data-value="71.73" class="pct medium">71.73%</td>
<td data-value="994" class="abs medium">713/994</td>
<td data-value="63.29" class="pct medium">63.29%</td>
<td data-value="395" class="abs medium">250/395</td>
<td data-value="71.65" class="pct medium">71.65%</td>
<td data-value="127" class="abs medium">91/127</td>
<td data-value="71.77" class="pct medium">71.77%</td>
<td data-value="946" class="abs medium">679/946</td>
</tr>
<tr>
<td class="file low" data-value="lib/health"><a href="lib/health/index.html">lib/health</a></td>
<td data-value="17.24" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 17%"></div><div class="cover-empty" style="width: 83%"></div></div>
</td>
<td data-value="17.24" class="pct low">17.24%</td>
<td data-value="29" class="abs low">5/29</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="12" class="abs low">0/12</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="6" class="abs low">0/6</td>
<td data-value="19.23" class="pct low">19.23%</td>
<td data-value="26" class="abs low">5/26</td>
</tr>
<tr>
<td class="file medium" data-value="lib/health/checkFns"><a href="lib/health/checkFns/index.html">lib/health/checkFns</a></td>
<td data-value="53.06" class="pic medium">
<div class="chart"><div class="cover-fill" style="width: 53%"></div><div class="cover-empty" style="width: 47%"></div></div>
</td>
<td data-value="53.06" class="pct medium">53.06%</td>
<td data-value="49" class="abs medium">26/49</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="17" class="abs low">0/17</td>
<td data-value="26.31" class="pct low">26.31%</td>
<td data-value="19" class="abs low">5/19</td>
<td data-value="50" class="pct medium">50%</td>
<td data-value="44" class="abs medium">22/44</td>
</tr>
<tr>
<td class="file low" data-value="lib/inits"><a href="lib/inits/index.html">lib/inits</a></td>
<td data-value="20.68" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 20%"></div><div class="cover-empty" style="width: 80%"></div></div>
</td>
<td data-value="20.68" class="pct low">20.68%</td>
<td data-value="29" class="abs low">6/29</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="6" class="abs low">0/6</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="11" class="abs low">0/11</td>
<td data-value="20.68" class="pct low">20.68%</td>
<td data-value="29" class="abs low">6/29</td>
</tr>
<tr>
<td class="file low" data-value="lib/interfaces"><a href="lib/interfaces/index.html">lib/interfaces</a></td>
<td data-value="22.44" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 22%"></div><div class="cover-empty" style="width: 78%"></div></div>
</td>
<td data-value="22.44" class="pct low">22.44%</td>
<td data-value="49" class="abs low">11/49</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="24" class="abs low">0/24</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="13" class="abs low">0/13</td>
<td data-value="22.22" class="pct low">22.22%</td>
<td data-value="45" class="abs low">10/45</td>
</tr>
<tr>
<td class="file low" data-value="lib/mainFn"><a href="lib/mainFn/index.html">lib/mainFn</a></td>
<td data-value="15.78" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 15%"></div><div class="cover-empty" style="width: 85%"></div></div>
</td>
<td data-value="15.78" class="pct low">15.78%</td>
<td data-value="228" class="abs low">36/228</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="38" class="abs low">0/38</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="77" class="abs low">0/77</td>
<td data-value="15.16" class="pct low">15.16%</td>
<td data-value="211" class="abs low">32/211</td>
</tr>
<tr>
<td class="file low" data-value="lib/manifest"><a href="lib/manifest/index.html">lib/manifest</a></td>
<td data-value="25" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 25%"></div><div class="cover-empty" style="width: 75%"></div></div>
</td>
<td data-value="25" class="pct low">25%</td>
<td data-value="16" class="abs low">4/16</td>
<td data-value="65.51" class="pct medium">65.51%</td>
<td data-value="29" class="abs medium">19/29</td>
<td data-value="20" class="pct low">20%</td>
<td data-value="5" class="abs low">1/5</td>
<td data-value="26.66" class="pct low">26.66%</td>
<td data-value="15" class="abs low">4/15</td>
</tr>
<tr>
<td class="file low" data-value="lib/store"><a href="lib/store/index.html">lib/store</a></td>
<td data-value="35.71" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 35%"></div><div class="cover-empty" style="width: 65%"></div></div>
</td>
<td data-value="35.71" class="pct low">35.71%</td>
<td data-value="28" class="abs low">10/28</td>
<td data-value="20" class="pct low">20%</td>
<td data-value="5" class="abs low">1/5</td>
<td data-value="10" class="pct low">10%</td>
<td data-value="10" class="abs low">1/10</td>
<td data-value="32" class="pct low">32%</td>
<td data-value="25" class="abs low">8/25</td>
</tr>
<tr>
<td class="file high" data-value="lib/test"><a href="lib/test/index.html">lib/test</a></td>
<td data-value="100" class="pic high">
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="9" class="abs high">9/9</td>
<td data-value="100" class="pct high">100%</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="100" class="pct high">100%</td>
<td data-value="9" class="abs high">9/9</td>
</tr>
<tr>
<td class="file low" data-value="lib/trigger"><a href="lib/trigger/index.html">lib/trigger</a></td>
<td data-value="30.61" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 30%"></div><div class="cover-empty" style="width: 70%"></div></div>
</td>
<td data-value="30.61" class="pct low">30.61%</td>
<td data-value="49" class="abs low">15/49</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="5" class="abs low">0/5</td>
<td data-value="40" class="pct low">40%</td>
<td data-value="10" class="abs low">4/10</td>
<td data-value="26.66" class="pct low">26.66%</td>
<td data-value="45" class="abs low">12/45</td>
</tr>
<tr>
<td class="file low" data-value="lib/util"><a href="lib/util/index.html">lib/util</a></td>
<td data-value="36.83" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 36%"></div><div class="cover-empty" style="width: 64%"></div></div>
</td>
<td data-value="36.83" class="pct low">36.83%</td>
<td data-value="695" class="abs low">256/695</td>
<td data-value="12.2" class="pct low">12.2%</td>
<td data-value="213" class="abs low">26/213</td>
<td data-value="17.96" class="pct low">17.96%</td>
<td data-value="167" class="abs low">30/167</td>
<td data-value="36.29" class="pct low">36.29%</td>
<td data-value="642" class="abs low">233/642</td>
</tr>
<tr>
<td class="file medium" data-value="lib/version"><a href="lib/version/index.html">lib/version</a></td>
<td data-value="62.82" class="pic medium">
<div class="chart"><div class="cover-fill" style="width: 62%"></div><div class="cover-empty" style="width: 38%"></div></div>
</td>
<td data-value="62.82" class="pct medium">62.82%</td>
<td data-value="78" class="abs medium">49/78</td>
<td data-value="51.35" class="pct medium">51.35%</td>
<td data-value="37" class="abs medium">19/37</td>
<td data-value="68.42" class="pct medium">68.42%</td>
<td data-value="19" class="abs medium">13/19</td>
<td data-value="63.63" class="pct medium">63.63%</td>
<td data-value="77" class="abs medium">49/77</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-28T21:46:45.516Z
</div>
<script src="prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="sorter.js"></script>
<script src="block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for interfaces/Host.ts</title> <title>Code coverage report for interfaces/Host.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../prettify.css" /> <link rel="stylesheet" href="../prettify.css" />
<link rel="stylesheet" href="../base.css" /> <link rel="stylesheet" href="../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../sort-arrow-sprite.png); background-image: url(../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../index.html">All files</a> / <a href="index.html">interfaces</a> Host.ts</h1> <h1>
<div class='clearfix'> <a href="../index.html">All files</a> /
<a href="index.html">interfaces</a> Host.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">22.22% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>6/27</span> <span class="strong">22.22% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">6/27</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">0% </span>
<span class='fraction'>0/18</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/18</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">0% </span> <span class="strong">0% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>0/7</span> <span class="fraction">0/7</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">24% </span>
<span class="strong">24% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">6/25</span>
<span class='fraction'>6/25</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line low'></div> <div class="status-line low"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -647,21 +643,27 @@ export class MultiHost extends Host {
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-07-04T02:41:23.401Z Code coverage generated by
</div> <a
<script src="../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-07-04T02:41:23.401Z
<script src="../sorter.js"></script> </div>
<script src="../block-navigation.js"></script> <script src="../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../sorter.js"></script>
<script src="../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for interfaces/Origin.ts</title> <title>Code coverage report for interfaces/Origin.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../prettify.css" /> <link rel="stylesheet" href="../prettify.css" />
<link rel="stylesheet" href="../base.css" /> <link rel="stylesheet" href="../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../sort-arrow-sprite.png); background-image: url(../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../index.html">All files</a> / <a href="index.html">interfaces</a> Origin.ts</h1> <h1>
<div class='clearfix'> <a href="../index.html">All files</a> /
<a href="index.html">interfaces</a> Origin.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">6.25% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>1/16</span> <span class="strong">6.25% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">1/16</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">0% </span>
<span class='fraction'>0/6</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/6</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">0% </span> <span class="strong">0% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>0/4</span> <span class="fraction">0/4</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">6.25% </span>
<span class="strong">6.25% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">1/16</span>
<span class='fraction'>1/16</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line low'></div> <div class="status-line low"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -335,21 +331,27 @@ type BuildOptions = {
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-07-04T02:41:23.401Z Code coverage generated by
</div> <a
<script src="../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-07-04T02:41:23.401Z
<script src="../sorter.js"></script> </div>
<script src="../block-navigation.js"></script> <script src="../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../sorter.js"></script>
<script src="../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,131 +1,196 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for interfaces</title> <title>Code coverage report for interfaces</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../prettify.css" /> <link rel="stylesheet" href="../prettify.css" />
<link rel="stylesheet" href="../base.css" /> <link rel="stylesheet" href="../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../sort-arrow-sprite.png); background-image: url(../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../index.html">All files</a> interfaces</h1> <h1><a href="../index.html">All files</a> interfaces</h1>
<div class='clearfix'> <div class="clearfix">
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">16.27% </span>
<span class="strong">16.27% </span> <span class="quiet">Statements</span>
<span class="quiet">Statements</span> <span class="fraction">7/43</span>
<span class='fraction'>7/43</span> </div>
</div>
<div class="fl pad1y space-right2">
<span class="strong">0% </span>
<div class='fl pad1y space-right2'> <span class="quiet">Branches</span>
<span class="strong">0% </span> <span class="fraction">0/24</span>
<span class="quiet">Branches</span> </div>
<span class='fraction'>0/24</span>
</div> <div class="fl pad1y space-right2">
<span class="strong">0% </span>
<span class="quiet">Functions</span>
<div class='fl pad1y space-right2'> <span class="fraction">0/11</span>
<span class="strong">0% </span> </div>
<span class="quiet">Functions</span>
<span class='fraction'>0/11</span> <div class="fl pad1y space-right2">
</div> <span class="strong">17.07% </span>
<span class="quiet">Lines</span>
<span class="fraction">7/41</span>
<div class='fl pad1y space-right2'> </div>
<span class="strong">17.07% </span>
<span class="quiet">Lines</span>
<span class='fraction'>7/41</span>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div>
<div class="status-line low"></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 low" data-value="Host.ts">
<a href="Host.ts.html">Host.ts</a>
</td>
<td data-value="22.22" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 22%"></div>
<div class="cover-empty" style="width: 78%"></div>
</div>
</td>
<td data-value="22.22" class="pct low">22.22%</td>
<td data-value="27" class="abs low">6/27</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="18" class="abs low">0/18</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="7" class="abs low">0/7</td>
<td data-value="24" class="pct low">24%</td>
<td data-value="25" class="abs low">6/25</td>
</tr>
<tr>
<td class="file low" data-value="Origin.ts">
<a href="Origin.ts.html">Origin.ts</a>
</td>
<td data-value="6.25" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 6%"></div>
<div class="cover-empty" style="width: 94%"></div>
</div>
</td>
<td data-value="6.25" class="pct low">6.25%</td>
<td data-value="16" class="abs low">1/16</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="6" class="abs low">0/6</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="4" class="abs low">0/4</td>
<td data-value="6.25" class="pct low">6.25%</td>
<td data-value="16" class="abs low">1/16</td>
</tr>
</tbody>
</table>
</div>
<div class="push"></div>
<!-- for sticky footer -->
</div> </div>
<div class='status-line low'></div> <!-- /wrapper -->
<div class="pad1"> <div class="footer quiet pad2 space-top1 center small">
<table class="coverage-summary"> Code coverage generated by
<thead> <a
<tr> href="https://istanbul.js.org/"
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th> target="_blank"
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> rel="noopener noreferrer"
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> >istanbul</a
<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> at 2024-07-04T02:41:23.401Z
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> </div>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <script src="../prettify.js"></script>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <script>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> window.onload = function () {
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> prettyPrint();
</tr> };
</thead> </script>
<tbody><tr> <script src="../sorter.js"></script>
<td class="file low" data-value="Host.ts"><a href="Host.ts.html">Host.ts</a></td> <script src="../block-navigation.js"></script>
<td data-value="22.22" class="pic low"> </body>
<div class="chart"><div class="cover-fill" style="width: 22%"></div><div class="cover-empty" style="width: 78%"></div></div>
</td>
<td data-value="22.22" class="pct low">22.22%</td>
<td data-value="27" class="abs low">6/27</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="18" class="abs low">0/18</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="7" class="abs low">0/7</td>
<td data-value="24" class="pct low">24%</td>
<td data-value="25" class="abs low">6/25</td>
</tr>
<tr>
<td class="file low" data-value="Origin.ts"><a href="Origin.ts.html">Origin.ts</a></td>
<td data-value="6.25" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 6%"></div><div class="cover-empty" style="width: 94%"></div></div>
</td>
<td data-value="6.25" class="pct low">6.25%</td>
<td data-value="16" class="abs low">1/16</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="6" class="abs low">0/6</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="4" class="abs low">0/4</td>
<td data-value="6.25" class="pct low">6.25%</td>
<td data-value="16" class="abs low">1/16</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-07-04T02:41:23.401Z
</div>
<script src="../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../sorter.js"></script>
<script src="../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/Dependency.ts</title> <title>Code coverage report for lib/Dependency.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../prettify.css" /> <link rel="stylesheet" href="../prettify.css" />
<link rel="stylesheet" href="../base.css" /> <link rel="stylesheet" href="../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../sort-arrow-sprite.png); background-image: url(../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../index.html">All files</a> / <a href="index.html">lib</a> Dependency.ts</h1> <h1>
<div class='clearfix'> <a href="../index.html">All files</a> /
<a href="index.html">lib</a> Dependency.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">50% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>1/2</span> <span class="strong">50% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">1/2</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">100% </span>
<span class='fraction'>0/0</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/0</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">0% </span> <span class="strong">0% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>0/1</span> <span class="fraction">0/1</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">50% </span>
<span class="strong">50% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">1/2</span>
<span class='fraction'>1/2</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line medium'></div> <div class="status-line medium"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -119,21 +115,27 @@ export class Dependency {
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../sorter.js"></script> </div>
<script src="../block-navigation.js"></script> <script src="../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../sorter.js"></script>
<script src="../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/StartSdk.ts</title> <title>Code coverage report for lib/StartSdk.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../prettify.css" /> <link rel="stylesheet" href="../prettify.css" />
<link rel="stylesheet" href="../base.css" /> <link rel="stylesheet" href="../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../sort-arrow-sprite.png); background-image: url(../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../index.html">All files</a> / <a href="index.html">lib</a> StartSdk.ts</h1> <h1>
<div class='clearfix'> <a href="../index.html">All files</a> /
<a href="index.html">lib</a> StartSdk.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">40.14% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>57/142</span> <span class="strong">40.14% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">57/142</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">0% </span>
<span class='fraction'>0/11</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/11</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">11.9% </span> <span class="strong">11.9% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>10/84</span> <span class="fraction">10/84</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">40.14% </span>
<span class="strong">40.14% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">57/142</span>
<span class='fraction'>57/142</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line low'></div> <div class="status-line low"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -2477,21 +2473,27 @@ function <span class="fstat-no" title="function not covered" >nullifyProperties_
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../sorter.js"></script> </div>
<script src="../block-navigation.js"></script> <script src="../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../sorter.js"></script>
<script src="../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/actions/createAction.ts</title> <title>Code coverage report for lib/actions/createAction.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/actions</a> createAction.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">lib/actions</a> createAction.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">11.76% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>2/17</span> <span class="strong">11.76% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">2/17</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">0% </span>
<span class='fraction'>0/2</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/2</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">0% </span> <span class="strong">0% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>0/7</span> <span class="fraction">0/7</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">11.76% </span>
<span class="strong">11.76% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">2/17</span>
<span class='fraction'>2/17</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line low'></div> <div class="status-line low"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -332,21 +328,27 @@ export class CreatedAction&lt;
export const createAction = CreatedAction.of export const createAction = CreatedAction.of
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,131 +1,196 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/actions</title> <title>Code coverage report for lib/actions</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> lib/actions</h1> <h1><a href="../../index.html">All files</a> lib/actions</h1>
<div class='clearfix'> <div class="clearfix">
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">10.71% </span>
<span class="strong">10.71% </span> <span class="quiet">Statements</span>
<span class="quiet">Statements</span> <span class="fraction">3/28</span>
<span class='fraction'>3/28</span> </div>
</div>
<div class="fl pad1y space-right2">
<span class="strong">0% </span>
<div class='fl pad1y space-right2'> <span class="quiet">Branches</span>
<span class="strong">0% </span> <span class="fraction">0/2</span>
<span class="quiet">Branches</span> </div>
<span class='fraction'>0/2</span>
</div> <div class="fl pad1y space-right2">
<span class="strong">0% </span>
<span class="quiet">Functions</span>
<div class='fl pad1y space-right2'> <span class="fraction">0/12</span>
<span class="strong">0% </span> </div>
<span class="quiet">Functions</span>
<span class='fraction'>0/12</span> <div class="fl pad1y space-right2">
</div> <span class="strong">10.71% </span>
<span class="quiet">Lines</span>
<span class="fraction">3/28</span>
<div class='fl pad1y space-right2'> </div>
<span class="strong">10.71% </span>
<span class="quiet">Lines</span>
<span class='fraction'>3/28</span>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div>
<div class="status-line low"></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 low" data-value="createAction.ts">
<a href="createAction.ts.html">createAction.ts</a>
</td>
<td data-value="11.76" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 11%"></div>
<div class="cover-empty" style="width: 89%"></div>
</div>
</td>
<td data-value="11.76" class="pct low">11.76%</td>
<td data-value="17" class="abs low">2/17</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="2" class="abs low">0/2</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="7" class="abs low">0/7</td>
<td data-value="11.76" class="pct low">11.76%</td>
<td data-value="17" class="abs low">2/17</td>
</tr>
<tr>
<td class="file low" data-value="setupActions.ts">
<a href="setupActions.ts.html">setupActions.ts</a>
</td>
<td data-value="9.09" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 9%"></div>
<div class="cover-empty" style="width: 91%"></div>
</div>
</td>
<td data-value="9.09" class="pct low">9.09%</td>
<td data-value="11" class="abs low">1/11</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="5" class="abs low">0/5</td>
<td data-value="9.09" class="pct low">9.09%</td>
<td data-value="11" class="abs low">1/11</td>
</tr>
</tbody>
</table>
</div>
<div class="push"></div>
<!-- for sticky footer -->
</div> </div>
<div class='status-line low'></div> <!-- /wrapper -->
<div class="pad1"> <div class="footer quiet pad2 space-top1 center small">
<table class="coverage-summary"> Code coverage generated by
<thead> <a
<tr> href="https://istanbul.js.org/"
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th> target="_blank"
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> rel="noopener noreferrer"
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> >istanbul</a
<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> at 2024-08-28T21:46:45.516Z
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> </div>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <script src="../../prettify.js"></script>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <script>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> window.onload = function () {
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> prettyPrint();
</tr> };
</thead> </script>
<tbody><tr> <script src="../../sorter.js"></script>
<td class="file low" data-value="createAction.ts"><a href="createAction.ts.html">createAction.ts</a></td> <script src="../../block-navigation.js"></script>
<td data-value="11.76" class="pic low"> </body>
<div class="chart"><div class="cover-fill" style="width: 11%"></div><div class="cover-empty" style="width: 89%"></div></div>
</td>
<td data-value="11.76" class="pct low">11.76%</td>
<td data-value="17" class="abs low">2/17</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="2" class="abs low">0/2</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="7" class="abs low">0/7</td>
<td data-value="11.76" class="pct low">11.76%</td>
<td data-value="17" class="abs low">2/17</td>
</tr>
<tr>
<td class="file low" data-value="setupActions.ts"><a href="setupActions.ts.html">setupActions.ts</a></td>
<td data-value="9.09" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 9%"></div><div class="cover-empty" style="width: 91%"></div></div>
</td>
<td data-value="9.09" class="pct low">9.09%</td>
<td data-value="11" class="abs low">1/11</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="5" class="abs low">0/5</td>
<td data-value="9.09" class="pct low">9.09%</td>
<td data-value="11" class="abs low">1/11</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-28T21:46:45.516Z
</div>
<script src="../../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/actions/setupActions.ts</title> <title>Code coverage report for lib/actions/setupActions.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/actions</a> setupActions.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">lib/actions</a> setupActions.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">9.09% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>1/11</span> <span class="strong">9.09% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">1/11</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">100% </span>
<span class='fraction'>0/0</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/0</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">0% </span> <span class="strong">0% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>0/5</span> <span class="fraction">0/5</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">9.09% </span>
<span class="strong">9.09% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">1/11</span>
<span class='fraction'>1/11</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line low'></div> <div class="status-line low"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -152,21 +148,27 @@ export function <span class="fstat-no" title="function not covered" >setupAction
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/backup/Backups.ts</title> <title>Code coverage report for lib/backup/Backups.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/backup</a> Backups.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">lib/backup</a> Backups.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">8.21% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>6/73</span> <span class="strong">8.21% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">6/73</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">0% </span>
<span class='fraction'>0/9</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/9</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">0% </span> <span class="strong">0% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>0/22</span> <span class="fraction">0/22</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">8.57% </span>
<span class="strong">8.57% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">6/70</span>
<span class='fraction'>6/70</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line low'></div> <div class="status-line low"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -692,21 +688,27 @@ async function <span class="fstat-no" title="function not covered" >runRsync(</s
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,131 +1,196 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/backup</title> <title>Code coverage report for lib/backup</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> lib/backup</h1> <h1><a href="../../index.html">All files</a> lib/backup</h1>
<div class='clearfix'> <div class="clearfix">
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">8.79% </span>
<span class="strong">8.79% </span> <span class="quiet">Statements</span>
<span class="quiet">Statements</span> <span class="fraction">8/91</span>
<span class='fraction'>8/91</span> </div>
</div>
<div class="fl pad1y space-right2">
<span class="strong">0% </span>
<div class='fl pad1y space-right2'> <span class="quiet">Branches</span>
<span class="strong">0% </span> <span class="fraction">0/11</span>
<span class="quiet">Branches</span> </div>
<span class='fraction'>0/11</span>
</div> <div class="fl pad1y space-right2">
<span class="strong">0% </span>
<span class="quiet">Functions</span>
<div class='fl pad1y space-right2'> <span class="fraction">0/27</span>
<span class="strong">0% </span> </div>
<span class="quiet">Functions</span>
<span class='fraction'>0/27</span> <div class="fl pad1y space-right2">
</div> <span class="strong">9.09% </span>
<span class="quiet">Lines</span>
<span class="fraction">8/88</span>
<div class='fl pad1y space-right2'> </div>
<span class="strong">9.09% </span>
<span class="quiet">Lines</span>
<span class='fraction'>8/88</span>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div>
<div class="status-line low"></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 low" data-value="Backups.ts">
<a href="Backups.ts.html">Backups.ts</a>
</td>
<td data-value="8.21" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 8%"></div>
<div class="cover-empty" style="width: 92%"></div>
</div>
</td>
<td data-value="8.21" class="pct low">8.21%</td>
<td data-value="73" class="abs low">6/73</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="9" class="abs low">0/9</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="22" class="abs low">0/22</td>
<td data-value="8.57" class="pct low">8.57%</td>
<td data-value="70" class="abs low">6/70</td>
</tr>
<tr>
<td class="file low" data-value="setupBackups.ts">
<a href="setupBackups.ts.html">setupBackups.ts</a>
</td>
<td data-value="11.11" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 11%"></div>
<div class="cover-empty" style="width: 89%"></div>
</div>
</td>
<td data-value="11.11" class="pct low">11.11%</td>
<td data-value="18" class="abs low">2/18</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="2" class="abs low">0/2</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="5" class="abs low">0/5</td>
<td data-value="11.11" class="pct low">11.11%</td>
<td data-value="18" class="abs low">2/18</td>
</tr>
</tbody>
</table>
</div>
<div class="push"></div>
<!-- for sticky footer -->
</div> </div>
<div class='status-line low'></div> <!-- /wrapper -->
<div class="pad1"> <div class="footer quiet pad2 space-top1 center small">
<table class="coverage-summary"> Code coverage generated by
<thead> <a
<tr> href="https://istanbul.js.org/"
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th> target="_blank"
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> rel="noopener noreferrer"
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> >istanbul</a
<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> at 2024-08-28T21:46:45.516Z
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> </div>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <script src="../../prettify.js"></script>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <script>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> window.onload = function () {
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> prettyPrint();
</tr> };
</thead> </script>
<tbody><tr> <script src="../../sorter.js"></script>
<td class="file low" data-value="Backups.ts"><a href="Backups.ts.html">Backups.ts</a></td> <script src="../../block-navigation.js"></script>
<td data-value="8.21" class="pic low"> </body>
<div class="chart"><div class="cover-fill" style="width: 8%"></div><div class="cover-empty" style="width: 92%"></div></div>
</td>
<td data-value="8.21" class="pct low">8.21%</td>
<td data-value="73" class="abs low">6/73</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="9" class="abs low">0/9</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="22" class="abs low">0/22</td>
<td data-value="8.57" class="pct low">8.57%</td>
<td data-value="70" class="abs low">6/70</td>
</tr>
<tr>
<td class="file low" data-value="setupBackups.ts"><a href="setupBackups.ts.html">setupBackups.ts</a></td>
<td data-value="11.11" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 11%"></div><div class="cover-empty" style="width: 89%"></div></div>
</td>
<td data-value="11.11" class="pct low">11.11%</td>
<td data-value="18" class="abs low">2/18</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="2" class="abs low">0/2</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="5" class="abs low">0/5</td>
<td data-value="11.11" class="pct low">11.11%</td>
<td data-value="18" class="abs low">2/18</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-28T21:46:45.516Z
</div>
<script src="../../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/backup/setupBackups.ts</title> <title>Code coverage report for lib/backup/setupBackups.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/backup</a> setupBackups.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">lib/backup</a> setupBackups.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">11.11% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>2/18</span> <span class="strong">11.11% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">2/18</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">0% </span>
<span class='fraction'>0/2</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/2</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">0% </span> <span class="strong">0% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>0/5</span> <span class="fraction">0/5</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">11.11% </span>
<span class="strong">11.11% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">2/18</span>
<span class='fraction'>2/18</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line low'></div> <div class="status-line low"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -200,21 +196,27 @@ export function <span class="fstat-no" title="function not covered" >setupBackup
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/config/builder/config.ts</title> <title>Code coverage report for lib/config/builder/config.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../prettify.css" />
<link rel="stylesheet" href="../../../base.css" /> <link rel="stylesheet" href="../../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../../sort-arrow-sprite.png); background-image: url(../../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../../index.html">All files</a> / <a href="index.html">lib/config/builder</a> config.ts</h1> <h1>
<div class='clearfix'> <a href="../../../index.html">All files</a> /
<a href="index.html">lib/config/builder</a> config.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">92.85% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>13/14</span> <span class="strong">92.85% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">13/14</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">100% </span>
<span class='fraction'>0/0</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/0</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">75% </span> <span class="strong">75% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>3/4</span> <span class="fraction">3/4</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">92.85% </span>
<span class="strong">92.85% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">13/14</span>
<span class='fraction'>13/14</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line high'></div> <div class="status-line high"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -476,21 +472,27 @@ export class Config&lt;Type extends Record&lt;string, any&gt;, Store = never&gt;
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../../../sorter.js"></script> </div>
<script src="../../../block-navigation.js"></script> <script src="../../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../../sorter.js"></script>
<script src="../../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,161 +1,236 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/config/builder</title> <title>Code coverage report for lib/config/builder</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../prettify.css" />
<link rel="stylesheet" href="../../../base.css" /> <link rel="stylesheet" href="../../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../../sort-arrow-sprite.png); background-image: url(../../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../../index.html">All files</a> lib/config/builder</h1> <h1><a href="../../../index.html">All files</a> lib/config/builder</h1>
<div class='clearfix'> <div class="clearfix">
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">84.61% </span>
<span class="strong">84.61% </span> <span class="quiet">Statements</span>
<span class="quiet">Statements</span> <span class="fraction">99/117</span>
<span class='fraction'>99/117</span> </div>
</div>
<div class="fl pad1y space-right2">
<span class="strong">55.17% </span>
<div class='fl pad1y space-right2'> <span class="quiet">Branches</span>
<span class="strong">55.17% </span> <span class="fraction">16/29</span>
<span class="quiet">Branches</span> </div>
<span class='fraction'>16/29</span>
</div> <div class="fl pad1y space-right2">
<span class="strong">78.26% </span>
<span class="quiet">Functions</span>
<div class='fl pad1y space-right2'> <span class="fraction">54/69</span>
<span class="strong">78.26% </span> </div>
<span class="quiet">Functions</span>
<span class='fraction'>54/69</span> <div class="fl pad1y space-right2">
</div> <span class="strong">84.34% </span>
<span class="quiet">Lines</span>
<span class="fraction">97/115</span>
<div class='fl pad1y space-right2'> </div>
<span class="strong">84.34% </span>
<span class="quiet">Lines</span>
<span class='fraction'>97/115</span>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </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="config.ts">
<a href="config.ts.html">config.ts</a>
</td>
<td data-value="92.85" class="pic high">
<div class="chart">
<div class="cover-fill" style="width: 92%"></div>
<div class="cover-empty" style="width: 8%"></div>
</div>
</td>
<td data-value="92.85" class="pct high">92.85%</td>
<td data-value="14" class="abs high">13/14</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td>
<td data-value="75" class="pct medium">75%</td>
<td data-value="4" class="abs medium">3/4</td>
<td data-value="92.85" class="pct high">92.85%</td>
<td data-value="14" class="abs high">13/14</td>
</tr>
<tr>
<td class="file high" data-value="list.ts">
<a href="list.ts.html">list.ts</a>
</td>
<td data-value="95" class="pic high">
<div class="chart">
<div class="cover-fill" style="width: 95%"></div>
<div class="cover-empty" style="width: 5%"></div>
</div>
</td>
<td data-value="95" class="pct high">95%</td>
<td data-value="20" class="abs high">19/20</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td>
<td data-value="87.5" class="pct high">87.5%</td>
<td data-value="8" class="abs high">7/8</td>
<td data-value="95" class="pct high">95%</td>
<td data-value="20" class="abs high">19/20</td>
</tr>
<tr>
<td class="file medium" data-value="value.ts">
<a href="value.ts.html">value.ts</a>
</td>
<td data-value="78.57" class="pic medium">
<div class="chart">
<div class="cover-fill" style="width: 78%"></div>
<div class="cover-empty" style="width: 22%"></div>
</div>
</td>
<td data-value="78.57" class="pct medium">78.57%</td>
<td data-value="70" class="abs medium">55/70</td>
<td data-value="55.17" class="pct medium">55.17%</td>
<td data-value="29" class="abs medium">16/29</td>
<td data-value="76.92" class="pct medium">76.92%</td>
<td data-value="52" class="abs medium">40/52</td>
<td data-value="77.94" class="pct medium">77.94%</td>
<td data-value="68" class="abs medium">53/68</td>
</tr>
<tr>
<td class="file high" data-value="variants.ts">
<a href="variants.ts.html">variants.ts</a>
</td>
<td data-value="92.3" class="pic high">
<div class="chart">
<div class="cover-fill" style="width: 92%"></div>
<div class="cover-empty" style="width: 8%"></div>
</div>
</td>
<td data-value="92.3" class="pct high">92.3%</td>
<td data-value="13" class="abs high">12/13</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td>
<td data-value="80" class="pct high">80%</td>
<td data-value="5" class="abs high">4/5</td>
<td data-value="92.3" class="pct high">92.3%</td>
<td data-value="13" class="abs high">12/13</td>
</tr>
</tbody>
</table>
</div>
<div class="push"></div>
<!-- for sticky footer -->
</div> </div>
<div class='status-line high'></div> <!-- /wrapper -->
<div class="pad1"> <div class="footer quiet pad2 space-top1 center small">
<table class="coverage-summary"> Code coverage generated by
<thead> <a
<tr> href="https://istanbul.js.org/"
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th> target="_blank"
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> rel="noopener noreferrer"
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> >istanbul</a
<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> at 2024-08-28T21:46:45.516Z
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> </div>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <script src="../../../prettify.js"></script>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <script>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> window.onload = function () {
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> prettyPrint();
</tr> };
</thead> </script>
<tbody><tr> <script src="../../../sorter.js"></script>
<td class="file high" data-value="config.ts"><a href="config.ts.html">config.ts</a></td> <script src="../../../block-navigation.js"></script>
<td data-value="92.85" class="pic high"> </body>
<div class="chart"><div class="cover-fill" style="width: 92%"></div><div class="cover-empty" style="width: 8%"></div></div>
</td>
<td data-value="92.85" class="pct high">92.85%</td>
<td data-value="14" class="abs high">13/14</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td>
<td data-value="75" class="pct medium">75%</td>
<td data-value="4" class="abs medium">3/4</td>
<td data-value="92.85" class="pct high">92.85%</td>
<td data-value="14" class="abs high">13/14</td>
</tr>
<tr>
<td class="file high" data-value="list.ts"><a href="list.ts.html">list.ts</a></td>
<td data-value="95" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 95%"></div><div class="cover-empty" style="width: 5%"></div></div>
</td>
<td data-value="95" class="pct high">95%</td>
<td data-value="20" class="abs high">19/20</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td>
<td data-value="87.5" class="pct high">87.5%</td>
<td data-value="8" class="abs high">7/8</td>
<td data-value="95" class="pct high">95%</td>
<td data-value="20" class="abs high">19/20</td>
</tr>
<tr>
<td class="file medium" data-value="value.ts"><a href="value.ts.html">value.ts</a></td>
<td data-value="78.57" class="pic medium">
<div class="chart"><div class="cover-fill" style="width: 78%"></div><div class="cover-empty" style="width: 22%"></div></div>
</td>
<td data-value="78.57" class="pct medium">78.57%</td>
<td data-value="70" class="abs medium">55/70</td>
<td data-value="55.17" class="pct medium">55.17%</td>
<td data-value="29" class="abs medium">16/29</td>
<td data-value="76.92" class="pct medium">76.92%</td>
<td data-value="52" class="abs medium">40/52</td>
<td data-value="77.94" class="pct medium">77.94%</td>
<td data-value="68" class="abs medium">53/68</td>
</tr>
<tr>
<td class="file high" data-value="variants.ts"><a href="variants.ts.html">variants.ts</a></td>
<td data-value="92.3" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 92%"></div><div class="cover-empty" style="width: 8%"></div></div>
</td>
<td data-value="92.3" class="pct high">92.3%</td>
<td data-value="13" class="abs high">12/13</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td>
<td data-value="80" class="pct high">80%</td>
<td data-value="5" class="abs high">4/5</td>
<td data-value="92.3" class="pct high">92.3%</td>
<td data-value="13" class="abs high">12/13</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-28T21:46:45.516Z
</div>
<script src="../../../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../../sorter.js"></script>
<script src="../../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/config/builder/list.ts</title> <title>Code coverage report for lib/config/builder/list.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../prettify.css" />
<link rel="stylesheet" href="../../../base.css" /> <link rel="stylesheet" href="../../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../../sort-arrow-sprite.png); background-image: url(../../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../../index.html">All files</a> / <a href="index.html">lib/config/builder</a> list.ts</h1> <h1>
<div class='clearfix'> <a href="../../../index.html">All files</a> /
<a href="index.html">lib/config/builder</a> list.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">95% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>19/20</span> <span class="strong">95% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">19/20</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">100% </span>
<span class='fraction'>0/0</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/0</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">87.5% </span> <span class="strong">87.5% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>7/8</span> <span class="fraction">7/8</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">95% </span>
<span class="strong">95% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">19/20</span>
<span class='fraction'>19/20</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line high'></div> <div class="status-line high"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -629,21 +625,27 @@ export class List&lt;Type, Store&gt; {
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../../../sorter.js"></script> </div>
<script src="../../../block-navigation.js"></script> <script src="../../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../../sorter.js"></script>
<script src="../../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/config/builder/value.ts</title> <title>Code coverage report for lib/config/builder/value.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../prettify.css" />
<link rel="stylesheet" href="../../../base.css" /> <link rel="stylesheet" href="../../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../../sort-arrow-sprite.png); background-image: url(../../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../../index.html">All files</a> / <a href="index.html">lib/config/builder</a> value.ts</h1> <h1>
<div class='clearfix'> <a href="../../../index.html">All files</a> /
<a href="index.html">lib/config/builder</a> value.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">78.57% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>55/70</span> <span class="strong">78.57% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">55/70</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">55.17% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">55.17% </span>
<span class='fraction'>16/29</span> <span class="quiet">Branches</span>
</div> <span class="fraction">16/29</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">76.92% </span> <span class="strong">76.92% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>40/52</span> <span class="fraction">40/52</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">77.94% </span>
<span class="strong">77.94% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">53/68</span>
<span class='fraction'>53/68</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line medium'></div> <div class="status-line medium"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -2414,21 +2410,27 @@ export class Value&lt;Type, Store&gt; {
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../../../sorter.js"></script> </div>
<script src="../../../block-navigation.js"></script> <script src="../../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../../sorter.js"></script>
<script src="../../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/config/builder/variants.ts</title> <title>Code coverage report for lib/config/builder/variants.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../../prettify.css" /> <link rel="stylesheet" href="../../../prettify.css" />
<link rel="stylesheet" href="../../../base.css" /> <link rel="stylesheet" href="../../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../../sort-arrow-sprite.png); background-image: url(../../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../../index.html">All files</a> / <a href="index.html">lib/config/builder</a> variants.ts</h1> <h1>
<div class='clearfix'> <a href="../../../index.html">All files</a> /
<a href="index.html">lib/config/builder</a> variants.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">92.3% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>12/13</span> <span class="strong">92.3% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">12/13</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">100% </span>
<span class='fraction'>0/0</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/0</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">80% </span> <span class="strong">80% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>4/5</span> <span class="fraction">4/5</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">92.3% </span>
<span class="strong">92.3% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">12/13</span>
<span class='fraction'>12/13</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line high'></div> <div class="status-line high"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -425,21 +421,27 @@ export class Variants&lt;Type, Store&gt; {
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../../../sorter.js"></script> </div>
<script src="../../../block-navigation.js"></script> <script src="../../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../../sorter.js"></script>
<script src="../../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/config/configConstants.ts</title> <title>Code coverage report for lib/config/configConstants.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/config</a> configConstants.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">lib/config</a> configConstants.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">77.77% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>7/9</span> <span class="strong">77.77% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">7/9</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">0% </span>
<span class='fraction'>0/2</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/2</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">0% </span> <span class="strong">0% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>0/1</span> <span class="fraction">0/1</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">77.77% </span>
<span class="strong">77.77% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">7/9</span>
<span class='fraction'>7/9</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line medium'></div> <div class="status-line medium"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -308,21 +304,27 @@ export const smtpConfig = Value.filteredUnion(
) )
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/config/configDependencies.ts</title> <title>Code coverage report for lib/config/configDependencies.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/config</a> configDependencies.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">lib/config</a> configDependencies.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">40% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>2/5</span> <span class="strong">40% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">2/5</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">100% </span>
<span class='fraction'>0/0</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/0</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">0% </span> <span class="strong">0% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>0/3</span> <span class="fraction">0/3</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">25% </span>
<span class="strong">25% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">1/4</span>
<span class='fraction'>1/4</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line low'></div> <div class="status-line low"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -143,21 +139,27 @@ export const configDependenciesSet = <span class="fstat-no" title="function not
}) })
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-07T17:49:46.694Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-07T17:49:46.694Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/config/configTypes.ts</title> <title>Code coverage report for lib/config/configTypes.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/config</a> configTypes.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">lib/config</a> configTypes.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">100% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>2/2</span> <span class="strong">100% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">2/2</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">100% </span>
<span class='fraction'>2/2</span> <span class="quiet">Branches</span>
</div> <span class="fraction">2/2</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">100% </span> <span class="strong">100% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>1/1</span> <span class="fraction">1/1</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">100% </span>
<span class="strong">100% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">2/2</span>
<span class='fraction'>2/2</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line high'></div> <div class="status-line high"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -881,21 +877,27 @@ export function isValueSpecListOf&lt;S extends ListValueSpecType&gt;(
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,146 +1,216 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/config</title> <title>Code coverage report for lib/config</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> lib/config</h1> <h1><a href="../../index.html">All files</a> lib/config</h1>
<div class='clearfix'> <div class="clearfix">
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">46.15% </span>
<span class="strong">46.15% </span> <span class="quiet">Statements</span>
<span class="quiet">Statements</span> <span class="fraction">12/26</span>
<span class='fraction'>12/26</span> </div>
</div>
<div class="fl pad1y space-right2">
<span class="strong">25% </span>
<div class='fl pad1y space-right2'> <span class="quiet">Branches</span>
<span class="strong">25% </span> <span class="fraction">2/8</span>
<span class="quiet">Branches</span> </div>
<span class='fraction'>2/8</span>
</div> <div class="fl pad1y space-right2">
<span class="strong">20% </span>
<span class="quiet">Functions</span>
<div class='fl pad1y space-right2'> <span class="fraction">1/5</span>
<span class="strong">20% </span> </div>
<span class="quiet">Functions</span>
<span class='fraction'>1/5</span> <div class="fl pad1y space-right2">
</div> <span class="strong">46.15% </span>
<span class="quiet">Lines</span>
<span class="fraction">12/26</span>
<div class='fl pad1y space-right2'> </div>
<span class="strong">46.15% </span>
<span class="quiet">Lines</span>
<span class='fraction'>12/26</span>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div>
<div class="status-line low"></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 medium" data-value="configConstants.ts">
<a href="configConstants.ts.html">configConstants.ts</a>
</td>
<td data-value="77.77" class="pic medium">
<div class="chart">
<div class="cover-fill" style="width: 77%"></div>
<div class="cover-empty" style="width: 23%"></div>
</div>
</td>
<td data-value="77.77" class="pct medium">77.77%</td>
<td data-value="9" class="abs medium">7/9</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="2" class="abs low">0/2</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="77.77" class="pct medium">77.77%</td>
<td data-value="9" class="abs medium">7/9</td>
</tr>
<tr>
<td class="file high" data-value="configTypes.ts">
<a href="configTypes.ts.html">configTypes.ts</a>
</td>
<td data-value="100" class="pic high">
<div class="chart">
<div class="cover-fill cover-full" style="width: 100%"></div>
<div class="cover-empty" style="width: 0%"></div>
</div>
</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">2/2</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">2/2</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="1" class="abs high">1/1</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">2/2</td>
</tr>
<tr>
<td class="file low" data-value="setupConfig.ts">
<a href="setupConfig.ts.html">setupConfig.ts</a>
</td>
<td data-value="20" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 20%"></div>
<div class="cover-empty" style="width: 80%"></div>
</div>
</td>
<td data-value="20" class="pct low">20%</td>
<td data-value="15" class="abs low">3/15</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="4" class="abs low">0/4</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="3" class="abs low">0/3</td>
<td data-value="20" class="pct low">20%</td>
<td data-value="15" class="abs low">3/15</td>
</tr>
</tbody>
</table>
</div>
<div class="push"></div>
<!-- for sticky footer -->
</div> </div>
<div class='status-line low'></div> <!-- /wrapper -->
<div class="pad1"> <div class="footer quiet pad2 space-top1 center small">
<table class="coverage-summary"> Code coverage generated by
<thead> <a
<tr> href="https://istanbul.js.org/"
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th> target="_blank"
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> rel="noopener noreferrer"
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> >istanbul</a
<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> at 2024-08-28T21:46:45.516Z
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> </div>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <script src="../../prettify.js"></script>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <script>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> window.onload = function () {
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> prettyPrint();
</tr> };
</thead> </script>
<tbody><tr> <script src="../../sorter.js"></script>
<td class="file medium" data-value="configConstants.ts"><a href="configConstants.ts.html">configConstants.ts</a></td> <script src="../../block-navigation.js"></script>
<td data-value="77.77" class="pic medium"> </body>
<div class="chart"><div class="cover-fill" style="width: 77%"></div><div class="cover-empty" style="width: 23%"></div></div>
</td>
<td data-value="77.77" class="pct medium">77.77%</td>
<td data-value="9" class="abs medium">7/9</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="2" class="abs low">0/2</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="77.77" class="pct medium">77.77%</td>
<td data-value="9" class="abs medium">7/9</td>
</tr>
<tr>
<td class="file high" data-value="configTypes.ts"><a href="configTypes.ts.html">configTypes.ts</a></td>
<td data-value="100" class="pic high">
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">2/2</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">2/2</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="1" class="abs high">1/1</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">2/2</td>
</tr>
<tr>
<td class="file low" data-value="setupConfig.ts"><a href="setupConfig.ts.html">setupConfig.ts</a></td>
<td data-value="20" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 20%"></div><div class="cover-empty" style="width: 80%"></div></div>
</td>
<td data-value="20" class="pct low">20%</td>
<td data-value="15" class="abs low">3/15</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="4" class="abs low">0/4</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="3" class="abs low">0/3</td>
<td data-value="20" class="pct low">20%</td>
<td data-value="15" class="abs low">3/15</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-28T21:46:45.516Z
</div>
<script src="../../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/config/setupConfig.ts</title> <title>Code coverage report for lib/config/setupConfig.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/config</a> setupConfig.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">lib/config</a> setupConfig.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">20% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>3/15</span> <span class="strong">20% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">3/15</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">0% </span>
<span class='fraction'>0/4</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/4</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">0% </span> <span class="strong">0% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>0/3</span> <span class="fraction">0/3</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">20% </span>
<span class="strong">20% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">3/15</span>
<span class='fraction'>3/15</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line low'></div> <div class="status-line low"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -326,21 +322,27 @@ export function <span class="fstat-no" title="function not covered" >setupConfig
export default setupConfig export default setupConfig
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/dependencies/DependencyConfig.ts</title> <title>Code coverage report for lib/dependencies/DependencyConfig.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/dependencies</a> DependencyConfig.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">lib/dependencies</a> DependencyConfig.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">71.42% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>5/7</span> <span class="strong">71.42% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">5/7</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">33.33% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">33.33% </span>
<span class='fraction'>1/3</span> <span class="quiet">Branches</span>
</div> <span class="fraction">1/3</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">33.33% </span> <span class="strong">33.33% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>1/3</span> <span class="fraction">1/3</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">71.42% </span>
<span class="strong">71.42% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">5/7</span>
<span class='fraction'>5/7</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line medium'></div> <div class="status-line medium"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -182,21 +178,27 @@ export class DependencyConfig&lt;
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/dependencies/dependencies.ts</title> <title>Code coverage report for lib/dependencies/dependencies.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/dependencies</a> dependencies.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">lib/dependencies</a> dependencies.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">2.38% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>2/84</span> <span class="strong">2.38% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">2/84</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">0% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">0% </span>
<span class='fraction'>0/53</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/53</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">0% </span> <span class="strong">0% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>0/28</span> <span class="fraction">0/28</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">2.46% </span>
<span class="strong">2.46% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">2/81</span>
<span class='fraction'>2/81</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line low'></div> <div class="status-line low"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -683,21 +679,27 @@ export async function <span class="fstat-no" title="function not covered" >check
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,146 +1,218 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/dependencies</title> <title>Code coverage report for lib/dependencies</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> lib/dependencies</h1> <h1><a href="../../index.html">All files</a> lib/dependencies</h1>
<div class='clearfix'> <div class="clearfix">
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">9.67% </span>
<span class="strong">9.67% </span> <span class="quiet">Statements</span>
<span class="quiet">Statements</span> <span class="fraction">9/93</span>
<span class='fraction'>9/93</span> </div>
</div>
<div class="fl pad1y space-right2">
<span class="strong">1.78% </span>
<div class='fl pad1y space-right2'> <span class="quiet">Branches</span>
<span class="strong">1.78% </span> <span class="fraction">1/56</span>
<span class="quiet">Branches</span> </div>
<span class='fraction'>1/56</span>
</div> <div class="fl pad1y space-right2">
<span class="strong">6.25% </span>
<span class="quiet">Functions</span>
<div class='fl pad1y space-right2'> <span class="fraction">2/32</span>
<span class="strong">6.25% </span> </div>
<span class="quiet">Functions</span>
<span class='fraction'>2/32</span> <div class="fl pad1y space-right2">
</div> <span class="strong">10% </span>
<span class="quiet">Lines</span>
<span class="fraction">9/90</span>
<div class='fl pad1y space-right2'> </div>
<span class="strong">10% </span>
<span class="quiet">Lines</span>
<span class='fraction'>9/90</span>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div>
<div class="status-line low"></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 medium" data-value="DependencyConfig.ts">
<a href="DependencyConfig.ts.html">DependencyConfig.ts</a>
</td>
<td data-value="71.42" class="pic medium">
<div class="chart">
<div class="cover-fill" style="width: 71%"></div>
<div class="cover-empty" style="width: 29%"></div>
</div>
</td>
<td data-value="71.42" class="pct medium">71.42%</td>
<td data-value="7" class="abs medium">5/7</td>
<td data-value="33.33" class="pct low">33.33%</td>
<td data-value="3" class="abs low">1/3</td>
<td data-value="33.33" class="pct low">33.33%</td>
<td data-value="3" class="abs low">1/3</td>
<td data-value="71.42" class="pct medium">71.42%</td>
<td data-value="7" class="abs medium">5/7</td>
</tr>
<tr>
<td class="file low" data-value="dependencies.ts">
<a href="dependencies.ts.html">dependencies.ts</a>
</td>
<td data-value="2.38" class="pic low">
<div class="chart">
<div class="cover-fill" style="width: 2%"></div>
<div class="cover-empty" style="width: 98%"></div>
</div>
</td>
<td data-value="2.38" class="pct low">2.38%</td>
<td data-value="84" class="abs low">2/84</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="53" class="abs low">0/53</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="28" class="abs low">0/28</td>
<td data-value="2.46" class="pct low">2.46%</td>
<td data-value="81" class="abs low">2/81</td>
</tr>
<tr>
<td class="file high" data-value="setupDependencyConfig.ts">
<a href="setupDependencyConfig.ts.html"
>setupDependencyConfig.ts</a
>
</td>
<td data-value="100" class="pic high">
<div class="chart">
<div class="cover-fill cover-full" style="width: 100%"></div>
<div class="cover-empty" style="width: 0%"></div>
</div>
</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">2/2</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="1" class="abs high">1/1</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">2/2</td>
</tr>
</tbody>
</table>
</div>
<div class="push"></div>
<!-- for sticky footer -->
</div> </div>
<div class='status-line low'></div> <!-- /wrapper -->
<div class="pad1"> <div class="footer quiet pad2 space-top1 center small">
<table class="coverage-summary"> Code coverage generated by
<thead> <a
<tr> href="https://istanbul.js.org/"
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th> target="_blank"
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> rel="noopener noreferrer"
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> >istanbul</a
<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> at 2024-08-28T21:46:45.516Z
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> </div>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <script src="../../prettify.js"></script>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <script>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> window.onload = function () {
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> prettyPrint();
</tr> };
</thead> </script>
<tbody><tr> <script src="../../sorter.js"></script>
<td class="file medium" data-value="DependencyConfig.ts"><a href="DependencyConfig.ts.html">DependencyConfig.ts</a></td> <script src="../../block-navigation.js"></script>
<td data-value="71.42" class="pic medium"> </body>
<div class="chart"><div class="cover-fill" style="width: 71%"></div><div class="cover-empty" style="width: 29%"></div></div>
</td>
<td data-value="71.42" class="pct medium">71.42%</td>
<td data-value="7" class="abs medium">5/7</td>
<td data-value="33.33" class="pct low">33.33%</td>
<td data-value="3" class="abs low">1/3</td>
<td data-value="33.33" class="pct low">33.33%</td>
<td data-value="3" class="abs low">1/3</td>
<td data-value="71.42" class="pct medium">71.42%</td>
<td data-value="7" class="abs medium">5/7</td>
</tr>
<tr>
<td class="file low" data-value="dependencies.ts"><a href="dependencies.ts.html">dependencies.ts</a></td>
<td data-value="2.38" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 2%"></div><div class="cover-empty" style="width: 98%"></div></div>
</td>
<td data-value="2.38" class="pct low">2.38%</td>
<td data-value="84" class="abs low">2/84</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="53" class="abs low">0/53</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="28" class="abs low">0/28</td>
<td data-value="2.46" class="pct low">2.46%</td>
<td data-value="81" class="abs low">2/81</td>
</tr>
<tr>
<td class="file high" data-value="setupDependencyConfig.ts"><a href="setupDependencyConfig.ts.html">setupDependencyConfig.ts</a></td>
<td data-value="100" class="pic high">
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">2/2</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="1" class="abs high">1/1</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">2/2</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-28T21:46:45.516Z
</div>
<script src="../../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,66 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head> <title>
<title>Code coverage report for lib/dependencies/setupDependencyConfig.ts</title> Code coverage report for lib/dependencies/setupDependencyConfig.ts
</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/dependencies</a> setupDependencyConfig.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">lib/dependencies</a> setupDependencyConfig.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">100% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>2/2</span> <span class="strong">100% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">2/2</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">100% </span>
<span class='fraction'>0/0</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/0</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">100% </span> <span class="strong">100% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>1/1</span> <span class="fraction">1/1</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">100% </span>
<span class="strong">100% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">2/2</span>
<span class='fraction'>2/2</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line high'></div> <div class="status-line high"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -131,21 +129,27 @@ export function setupDependencyConfig&lt;
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,66 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head> <title>
<title>Code coverage report for lib/dependencyConfig/DependencyConfig.ts</title> Code coverage report for lib/dependencyConfig/DependencyConfig.ts
</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/dependencyConfig</a> DependencyConfig.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">lib/dependencyConfig</a> DependencyConfig.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">71.42% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>5/7</span> <span class="strong">71.42% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">5/7</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">33.33% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">33.33% </span>
<span class='fraction'>1/3</span> <span class="quiet">Branches</span>
</div> <span class="fraction">1/3</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">33.33% </span> <span class="strong">33.33% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>1/3</span> <span class="fraction">1/3</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">71.42% </span>
<span class="strong">71.42% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">5/7</span>
<span class='fraction'>5/7</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line medium'></div> <div class="status-line medium"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -197,21 +195,27 @@ export class DependencyConfig&lt;
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-07T17:49:46.694Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-07T17:49:46.694Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,131 +1,198 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/dependencyConfig</title> <title>Code coverage report for lib/dependencyConfig</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> lib/dependencyConfig</h1> <h1><a href="../../index.html">All files</a> lib/dependencyConfig</h1>
<div class='clearfix'> <div class="clearfix">
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">77.77% </span>
<span class="strong">77.77% </span> <span class="quiet">Statements</span>
<span class="quiet">Statements</span> <span class="fraction">7/9</span>
<span class='fraction'>7/9</span> </div>
</div>
<div class="fl pad1y space-right2">
<span class="strong">33.33% </span>
<div class='fl pad1y space-right2'> <span class="quiet">Branches</span>
<span class="strong">33.33% </span> <span class="fraction">1/3</span>
<span class="quiet">Branches</span> </div>
<span class='fraction'>1/3</span>
</div> <div class="fl pad1y space-right2">
<span class="strong">50% </span>
<span class="quiet">Functions</span>
<div class='fl pad1y space-right2'> <span class="fraction">2/4</span>
<span class="strong">50% </span> </div>
<span class="quiet">Functions</span>
<span class='fraction'>2/4</span> <div class="fl pad1y space-right2">
</div> <span class="strong">77.77% </span>
<span class="quiet">Lines</span>
<span class="fraction">7/9</span>
<div class='fl pad1y space-right2'> </div>
<span class="strong">77.77% </span>
<span class="quiet">Lines</span>
<span class='fraction'>7/9</span>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div>
<div class="status-line medium"></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 medium" data-value="DependencyConfig.ts">
<a href="DependencyConfig.ts.html">DependencyConfig.ts</a>
</td>
<td data-value="71.42" class="pic medium">
<div class="chart">
<div class="cover-fill" style="width: 71%"></div>
<div class="cover-empty" style="width: 29%"></div>
</div>
</td>
<td data-value="71.42" class="pct medium">71.42%</td>
<td data-value="7" class="abs medium">5/7</td>
<td data-value="33.33" class="pct low">33.33%</td>
<td data-value="3" class="abs low">1/3</td>
<td data-value="33.33" class="pct low">33.33%</td>
<td data-value="3" class="abs low">1/3</td>
<td data-value="71.42" class="pct medium">71.42%</td>
<td data-value="7" class="abs medium">5/7</td>
</tr>
<tr>
<td class="file high" data-value="setupDependencyConfig.ts">
<a href="setupDependencyConfig.ts.html"
>setupDependencyConfig.ts</a
>
</td>
<td data-value="100" class="pic high">
<div class="chart">
<div class="cover-fill cover-full" style="width: 100%"></div>
<div class="cover-empty" style="width: 0%"></div>
</div>
</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">2/2</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="1" class="abs high">1/1</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">2/2</td>
</tr>
</tbody>
</table>
</div>
<div class="push"></div>
<!-- for sticky footer -->
</div> </div>
<div class='status-line medium'></div> <!-- /wrapper -->
<div class="pad1"> <div class="footer quiet pad2 space-top1 center small">
<table class="coverage-summary"> Code coverage generated by
<thead> <a
<tr> href="https://istanbul.js.org/"
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th> target="_blank"
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> rel="noopener noreferrer"
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> >istanbul</a
<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> at 2024-08-07T17:49:46.694Z
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> </div>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <script src="../../prettify.js"></script>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <script>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> window.onload = function () {
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> prettyPrint();
</tr> };
</thead> </script>
<tbody><tr> <script src="../../sorter.js"></script>
<td class="file medium" data-value="DependencyConfig.ts"><a href="DependencyConfig.ts.html">DependencyConfig.ts</a></td> <script src="../../block-navigation.js"></script>
<td data-value="71.42" class="pic medium"> </body>
<div class="chart"><div class="cover-fill" style="width: 71%"></div><div class="cover-empty" style="width: 29%"></div></div>
</td>
<td data-value="71.42" class="pct medium">71.42%</td>
<td data-value="7" class="abs medium">5/7</td>
<td data-value="33.33" class="pct low">33.33%</td>
<td data-value="3" class="abs low">1/3</td>
<td data-value="33.33" class="pct low">33.33%</td>
<td data-value="3" class="abs low">1/3</td>
<td data-value="71.42" class="pct medium">71.42%</td>
<td data-value="7" class="abs medium">5/7</td>
</tr>
<tr>
<td class="file high" data-value="setupDependencyConfig.ts"><a href="setupDependencyConfig.ts.html">setupDependencyConfig.ts</a></td>
<td data-value="100" class="pic high">
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">2/2</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">0/0</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="1" class="abs high">1/1</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">2/2</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-07T17:49:46.694Z
</div>
<script src="../../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,66 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head> <title>
<title>Code coverage report for lib/dependencyConfig/setupDependencyConfig.ts</title> Code coverage report for lib/dependencyConfig/setupDependencyConfig.ts
</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/dependencyConfig</a> setupDependencyConfig.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">lib/dependencyConfig</a> setupDependencyConfig.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">100% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>2/2</span> <span class="strong">100% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">2/2</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">100% </span>
<span class='fraction'>0/0</span> <span class="quiet">Branches</span>
</div> <span class="fraction">0/0</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">100% </span> <span class="strong">100% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>1/1</span> <span class="fraction">1/1</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">100% </span>
<span class="strong">100% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">2/2</span>
<span class='fraction'>2/2</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line high'></div> <div class="status-line high"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -131,21 +129,27 @@ export function setupDependencyConfig&lt;
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-07T17:49:46.694Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-07T17:49:46.694Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,116 +1,176 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/emverLite</title> <title>Code coverage report for lib/emverLite</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> lib/emverLite</h1> <h1><a href="../../index.html">All files</a> lib/emverLite</h1>
<div class='clearfix'> <div class="clearfix">
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">96.99% </span>
<span class="strong">96.99% </span> <span class="quiet">Statements</span>
<span class="quiet">Statements</span> <span class="fraction">129/133</span>
<span class='fraction'>129/133</span> </div>
</div>
<div class="fl pad1y space-right2">
<span class="strong">91.89% </span>
<div class='fl pad1y space-right2'> <span class="quiet">Branches</span>
<span class="strong">91.89% </span> <span class="fraction">34/37</span>
<span class="quiet">Branches</span> </div>
<span class='fraction'>34/37</span>
</div> <div class="fl pad1y space-right2">
<span class="strong">97.56% </span>
<span class="quiet">Functions</span>
<div class='fl pad1y space-right2'> <span class="fraction">40/41</span>
<span class="strong">97.56% </span> </div>
<span class="quiet">Functions</span>
<span class='fraction'>40/41</span> <div class="fl pad1y space-right2">
</div> <span class="strong">97.65% </span>
<span class="quiet">Lines</span>
<span class="fraction">125/128</span>
<div class='fl pad1y space-right2'> </div>
<span class="strong">97.65% </span>
<span class="quiet">Lines</span>
<span class='fraction'>125/128</span>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </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="mod.ts">
<a href="mod.ts.html">mod.ts</a>
</td>
<td data-value="96.99" class="pic high">
<div class="chart">
<div class="cover-fill" style="width: 96%"></div>
<div class="cover-empty" style="width: 4%"></div>
</div>
</td>
<td data-value="96.99" class="pct high">96.99%</td>
<td data-value="133" class="abs high">129/133</td>
<td data-value="91.89" class="pct high">91.89%</td>
<td data-value="37" class="abs high">34/37</td>
<td data-value="97.56" class="pct high">97.56%</td>
<td data-value="41" class="abs high">40/41</td>
<td data-value="97.65" class="pct high">97.65%</td>
<td data-value="128" class="abs high">125/128</td>
</tr>
</tbody>
</table>
</div>
<div class="push"></div>
<!-- for sticky footer -->
</div> </div>
<div class='status-line high'></div> <!-- /wrapper -->
<div class="pad1"> <div class="footer quiet pad2 space-top1 center small">
<table class="coverage-summary"> Code coverage generated by
<thead> <a
<tr> href="https://istanbul.js.org/"
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th> target="_blank"
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th> rel="noopener noreferrer"
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th> >istanbul</a
<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> at 2024-08-07T17:49:46.694Z
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th> </div>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th> <script src="../../prettify.js"></script>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th> <script>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th> window.onload = function () {
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th> prettyPrint();
</tr> };
</thead> </script>
<tbody><tr> <script src="../../sorter.js"></script>
<td class="file high" data-value="mod.ts"><a href="mod.ts.html">mod.ts</a></td> <script src="../../block-navigation.js"></script>
<td data-value="96.99" class="pic high"> </body>
<div class="chart"><div class="cover-fill" style="width: 96%"></div><div class="cover-empty" style="width: 4%"></div></div>
</td>
<td data-value="96.99" class="pct high">96.99%</td>
<td data-value="133" class="abs high">129/133</td>
<td data-value="91.89" class="pct high">91.89%</td>
<td data-value="37" class="abs high">34/37</td>
<td data-value="97.56" class="pct high">97.56%</td>
<td data-value="41" class="abs high">40/41</td>
<td data-value="97.65" class="pct high">97.65%</td>
<td data-value="128" class="abs high">125/128</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-07T17:49:46.694Z
</div>
<script src="../../prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/emverLite/mod.ts</title> <title>Code coverage report for lib/emverLite/mod.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/emverLite</a> mod.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">lib/emverLite</a> mod.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">96.99% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>129/133</span> <span class="strong">96.99% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">129/133</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">91.89% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">91.89% </span>
<span class='fraction'>34/37</span> <span class="quiet">Branches</span>
</div> <span class="fraction">34/37</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">97.56% </span> <span class="strong">97.56% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>40/41</span> <span class="fraction">40/41</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">97.65% </span>
<span class="strong">97.65% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">125/128</span>
<span class='fraction'>125/128</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line high'></div> <div class="status-line high"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -1034,21 +1030,27 @@ export class Checker {
} }
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-07T17:49:46.694Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-07T17:49:46.694Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

View File

@@ -1,68 +1,64 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<title>Code coverage report for lib/exver/exver.ts</title> <title>Code coverage report for lib/exver/exver.ts</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../prettify.css" />
<link rel="stylesheet" href="../../base.css" /> <link rel="stylesheet" href="../../base.css" />
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'> <style type="text/css">
.coverage-summary .sorter { .coverage-summary .sorter {
background-image: url(../../sort-arrow-sprite.png); background-image: url(../../sort-arrow-sprite.png);
} }
</style> </style>
</head> </head>
<body> <body>
<div class='wrapper'> <div class="wrapper">
<div class='pad1'> <div class="pad1">
<h1><a href="../../index.html">All files</a> / <a href="index.html">lib/exver</a> exver.ts</h1> <h1>
<div class='clearfix'> <a href="../../index.html">All files</a> /
<a href="index.html">lib/exver</a> exver.ts
<div class='fl pad1y space-right2'> </h1>
<span class="strong">73.61% </span> <div class="clearfix">
<span class="quiet">Statements</span> <div class="fl pad1y space-right2">
<span class='fraction'>611/830</span> <span class="strong">73.61% </span>
</div> <span class="quiet">Statements</span>
<span class="fraction">611/830</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">62.5% </span> <div class="fl pad1y space-right2">
<span class="quiet">Branches</span> <span class="strong">62.5% </span>
<span class='fraction'>185/296</span> <span class="quiet">Branches</span>
</div> <span class="fraction">185/296</span>
</div>
<div class='fl pad1y space-right2'> <div class="fl pad1y space-right2">
<span class="strong">69.31% </span> <span class="strong">69.31% </span>
<span class="quiet">Functions</span> <span class="quiet">Functions</span>
<span class='fraction'>61/88</span> <span class="fraction">61/88</span>
</div> </div>
<div class="fl pad1y space-right2">
<div class='fl pad1y space-right2'> <span class="strong">73.76% </span>
<span class="strong">73.76% </span> <span class="quiet">Lines</span>
<span class="quiet">Lines</span> <span class="fraction">582/789</span>
<span class='fraction'>582/789</span> </div>
</div>
</div> </div>
<p class="quiet"> <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. 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> </p>
<template id="filterTemplate"> <template id="filterTemplate">
<div class="quiet"> <div class="quiet">
Filter: Filter:
<input oninput="onInput()" type="search" id="fileSearch"> <input oninput="onInput()" type="search" id="fileSearch" />
</div> </div>
</template> </template>
</div> </div>
<div class='status-line medium'></div> <div class="status-line medium"></div>
<pre><table class="coverage"> <pre><table class="coverage">
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a> <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
<a name='L2'></a><a href='#L2'>2</a> <a name='L2'></a><a href='#L2'>2</a>
<a name='L3'></a><a href='#L3'>3</a> <a name='L3'></a><a href='#L3'>3</a>
@@ -7586,21 +7582,27 @@ export type Digit = number;
export type _ = string[]; export type _ = string[];
&nbsp;</pre></td></tr></table></pre> &nbsp;</pre></td></tr></table></pre>
<div class='push'></div><!-- for sticky footer --> <div class="push"></div>
</div><!-- /wrapper --> <!-- for sticky footer -->
<div class='footer quiet pad2 space-top1 center small'> </div>
Code coverage generated by <!-- /wrapper -->
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a> <div class="footer quiet pad2 space-top1 center small">
at 2024-08-28T21:46:45.516Z Code coverage generated by
</div> <a
<script src="../../prettify.js"></script> href="https://istanbul.js.org/"
<script> target="_blank"
window.onload = function () { rel="noopener noreferrer"
prettyPrint(); >istanbul</a
}; >
</script> at 2024-08-28T21:46:45.516Z
<script src="../../sorter.js"></script> </div>
<script src="../../block-navigation.js"></script> <script src="../../prettify.js"></script>
</body> <script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="../../sorter.js"></script>
<script src="../../block-navigation.js"></script>
</body>
</html> </html>

Some files were not shown because too many files have changed in this diff Show More