From c6b9de2afa608b39668b89b4c708b56d458ccbd1 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 13:03:36 +0200 Subject: [PATCH 01/46] Update .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 705f03ce..e75ee86c 100644 --- a/.gitignore +++ b/.gitignore @@ -266,3 +266,4 @@ __pycache__/ # Nuke build tool .nuke/temp +/publish.cmd From f634dc45ed93f83cb2acd21cd278753ab4b2c59c Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 13:03:53 +0200 Subject: [PATCH 02/46] Update NuGet.config --- NuGet.config | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/NuGet.config b/NuGet.config index c1e1ed57..53d88754 100644 --- a/NuGet.config +++ b/NuGet.config @@ -1,8 +1,11 @@ - + + + + - + \ No newline at end of file From 0f3f29eae340e644447cf43890f0db040a7a80bd Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 13:04:24 +0200 Subject: [PATCH 03/46] global.json: Pin .net SDK --- src/global.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/global.json diff --git a/src/global.json b/src/global.json new file mode 100644 index 00000000..2523da8c --- /dev/null +++ b/src/global.json @@ -0,0 +1,7 @@ +{ + "sdk": { + "version": "8.0.316", + "rollForward": "patch", + "allowPrerelease": false + } +} From 74b80b31771a045ac3d6f3ee8142787710956379 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 13:05:34 +0200 Subject: [PATCH 04/46] Add ElectronNET project (all build functionality) --- src/ElectronNET/ElectronNET.csproj | 47 ++ .../PackageIcon.png | Bin src/ElectronNET/build/ElectronNET.Build.dll | Bin 0 -> 8192 bytes src/ElectronNET/build/ElectronNET.Core.props | 6 + .../build/ElectronNET.Core.targets | 6 + .../build/ElectronNET.DesignTime.targets | 129 ++++ .../build/ElectronNET.LateImport.targets | 480 +++++++++++++++ src/ElectronNET/build/ElectronNET.props | 32 + src/ElectronNET/build/ElectronNET.targets | 26 + .../build/ElectronNETRules.Project.xaml | 566 ++++++++++++++++++ .../build/ElectronNETRules.Project2.xaml | 62 ++ src/ElectronNET/build/electron-builder.json | 19 + src/ElectronNET/build/package.template.json | 48 ++ .../build/update_electron_versions.py | 131 ++++ 14 files changed, 1552 insertions(+) create mode 100644 src/ElectronNET/ElectronNET.csproj rename src/{ElectronNET.CLI => ElectronNET}/PackageIcon.png (100%) create mode 100644 src/ElectronNET/build/ElectronNET.Build.dll create mode 100644 src/ElectronNET/build/ElectronNET.Core.props create mode 100644 src/ElectronNET/build/ElectronNET.Core.targets create mode 100644 src/ElectronNET/build/ElectronNET.DesignTime.targets create mode 100644 src/ElectronNET/build/ElectronNET.LateImport.targets create mode 100644 src/ElectronNET/build/ElectronNET.props create mode 100644 src/ElectronNET/build/ElectronNET.targets create mode 100644 src/ElectronNET/build/ElectronNETRules.Project.xaml create mode 100644 src/ElectronNET/build/ElectronNETRules.Project2.xaml create mode 100644 src/ElectronNET/build/electron-builder.json create mode 100644 src/ElectronNET/build/package.template.json create mode 100644 src/ElectronNET/build/update_electron_versions.py diff --git a/src/ElectronNET/ElectronNET.csproj b/src/ElectronNET/ElectronNET.csproj new file mode 100644 index 00000000..c0a909e3 --- /dev/null +++ b/src/ElectronNET/ElectronNET.csproj @@ -0,0 +1,47 @@ +๏ปฟ + + + + + net6.0;net8.0 + ..\..\artifacts + $(PackageNamePrefix) + $(PackageId) + $(DescriptionFirstPart) This package contains the ElectronNET project system. + false + false + + + + + + + + + + .electron\%(RecursiveDir)%(FileName)%(Extension) + Never + true + .electron\ + + + + + true + build\ + + + + + True + + + + + MSBuild:Compile + + + MSBuild:Compile + + + \ No newline at end of file diff --git a/src/ElectronNET.CLI/PackageIcon.png b/src/ElectronNET/PackageIcon.png similarity index 100% rename from src/ElectronNET.CLI/PackageIcon.png rename to src/ElectronNET/PackageIcon.png diff --git a/src/ElectronNET/build/ElectronNET.Build.dll b/src/ElectronNET/build/ElectronNET.Build.dll new file mode 100644 index 0000000000000000000000000000000000000000..b3794d9f7bb0bafe18af677f615c6d4daa980738 GIT binary patch literal 8192 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 CAn2_C literal 0 HcmV?d00001 diff --git a/src/ElectronNET/build/ElectronNET.Core.props b/src/ElectronNET/build/ElectronNET.Core.props new file mode 100644 index 00000000..c9e1eedf --- /dev/null +++ b/src/ElectronNET/build/ElectronNET.Core.props @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/ElectronNET/build/ElectronNET.Core.targets b/src/ElectronNET/build/ElectronNET.Core.targets new file mode 100644 index 00000000..4bee5104 --- /dev/null +++ b/src/ElectronNET/build/ElectronNET.Core.targets @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/ElectronNET/build/ElectronNET.DesignTime.targets b/src/ElectronNET/build/ElectronNET.DesignTime.targets new file mode 100644 index 00000000..6f6adba3 --- /dev/null +++ b/src/ElectronNET/build/ElectronNET.DesignTime.targets @@ -0,0 +1,129 @@ + + + + + True + + + + + + Project + + + + + + Project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(ElectronSplashScreen.Replace('$(MSBuildProjectDirectory)', '').TrimStart('\')) + + + + + + + + + + + + + + $(ElectronIcon.Replace('$(MSBuildProjectDirectory)', '').TrimStart('\')) + + + + + + + + + + + + + <_ProjectDir>$([System.IO.Path]::GetFullPath('$(MSBuildProjectDirectory)'))\ + + $([System.String]::Substring($(ElectronSplashScreen), + $([System.String]::Length($(_ProjectDir))))) + + + + + + + + + + + + + + + + + + + + + diff --git a/src/ElectronNET/build/ElectronNET.LateImport.targets b/src/ElectronNET/build/ElectronNET.LateImport.targets new file mode 100644 index 00000000..892f7648 --- /dev/null +++ b/src/ElectronNET/build/ElectronNET.LateImport.targets @@ -0,0 +1,480 @@ + + + + + + + + + + + + + + + + Never + Never + + + Never + Never + + + Never + Never + + + + + + + + + + + + + + + + + $([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)\..\..\xxxxElectronNET.Host')) + $([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)\..\.electron')) + .electron + $([System.IO.Path]::GetFileName($(ElectronSplashScreen))) + $([System.IO.Path]::GetFileName($(ElectronIcon))) + + + + + + + + + + + + + + + + + + + + + + + $(OutDir)$(ElectronDirName)\ + $(TargetDir)$(ElectronDirName)\ + $(IntermediateOutputPath)$(ElectronDirName)\ + $(ElectronIntermediateOutputPath)package.json + + + + + + + + <_ProjectPropertiesFolder>$(MSBuildProjectDirectory)\Properties\ + <_ElectronBuilderExpectedPath>$(_ProjectPropertiesFolder)$(ElectronBuilderJson) + <_NeedCopyElectronBuilderFile>True + <_NeedCopyElectronBuilderFile Condition="Exists($(_ElectronBuilderExpectedPath))">False + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + $(TargetName) + + + + + $([System.Text.RegularExpressions.Regex]::Replace('$(Version)', '^(\d+\.\d+\.\d+)(?:\.\d+)?(.*)$', '$1$2')) + + linux + $(Title) + $(Title.Replace(' ', '-')) + + + + + + + + + + + + + + + + + + + + + + + + + + + <_NonIntermediatePublishDir>$(PublishDir) + $(PublishDir) + $(IntermediateOutputPath)PubTmp\ + + + + + + + + + + + + + + + + false + true + + + + + + + + + + + + + $(ElectronDirName)\%(RecursiveDir)%(FileName)%(Extension) + PreserveNewest + + + + + + + + + + + + + + + + + + + + $(ElectronDirName)\%(RelativeDir)%(FileName)%(Extension) + + + + + + + + + + $(ElectronDirName)\%(FileName)%(Extension) + + + + + + + + + + + + + + + + + $(ElectronDirName)\%(DestinationRelativePath) + $(ElectronDirName)\%(DestinationRelativePath) + PreserveNewest + + + + + + + + + + <_ElectronFiles Include="$(ElectronSplashScreen)" Condition="'$(ElectronSplashScreen)'!=''" /> + <_ElectronFiles Include="$(ElectronIcon)" Condition="'$(ElectronIcon)'!=''" /> + + + + <_ElectronFiles Update="**"> + PreserveNewest + + + + + + + <_ElectronFilesToCopy Include="@(_ElectronFiles->'%(FullPath)')" /> + + + + + + <_ElectronFilesToCopyWithTargetPath Include="@(_ElectronFilesToCopy)"> + $(ElectronDirName)\%(FileName)%(Extension) + + + + + + + + + + + <_SourceItemsToCopyToOutputDirectoryIfDifferent Include="@(_ElectronFilesToCopyWithTargetPath)"/> + + + + + + + + $(OutDir)$(ElectronDirName)\node_modules\electron-host-hook + + + + + + + + + + + + + + + + + + $([System.IO.Path]::GetFullPath('$(ElectronOutDir)')) + linux + false + true + <_NpmCmd>npm install --no-bin-links + <_NpmCmd Condition="'$(IsLinuxWsl)' == 'true'">wsl bash -ic '$(_NpmCmd)' + + + + + + + + + + + + + + + + + + + + + + <_OriginalPublishDir>$(PublishDir) + $(_OriginalPublishDir)bin\ + true + + + + + + + + + + + + + + <_PublishIntermediateOutputPathFiles Remove="@(_PublishIntermediateOutputPathFiles)"> + + + + + <_ElectronPublishAppAfterTarget Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true'">AfterPublish + <_ElectronPublishAppAfterTarget Condition="'$(UsingMicrosoftNETSdkWeb)' != 'true'">Publish + + + + + + $(_OriginalPublishDir) + $(_NonIntermediatePublishDir) + $(_OriginalPublishDir) + + + + + + x64 + ia32 + arm64 + x64 + armv7l + arm64 + x64 + arm64 + + win + linux + mac + + + + + + + + + + + + + + + + + + + + + + + + + + + $(ElectronPublishDir)%(RecursiveDir)%(FileName)%(Extension) + + + + + + + + + $([System.IO.Path]::GetFullPath('$(ElectronPublishDir)')) + $([System.IO.Path]::GetFullPath('$(PublishUrl.TrimEnd("\"))')) + + + + false + true + <_NpmCmd>npm install electron-builder@$(ElectronBuilderVersion) --save-dev + <_NpmCmd Condition="'$(IsLinuxWsl)' == 'true'">wsl bash -ic '$(_NpmCmd)' + + + + + + + + + + + + + + + + + + $(ElectronPaParams) -c.appId "$(PackageId)" + $(ElectronPaParams) -c.buildVersion "$(Version)" + $(ElectronPaParams) -c.copyright "$(Copyright)" + $(ElectronPaParams) -c.extraResources "bin/**/*" + + + + <_NpxCmd>npx electron-builder --config=./$(ElectronBuilderJson) --$(ElectronPlatform) --$(ElectronArch) -c.electronVersion=$(ElectronVersion) -c.directories.output "$(ElectronPublishUrlFullPath)" $(ElectronPaParams) + <_NpxCmd Condition="'$(IsLinuxWsl)' == 'true'">wsl bash -ic '$(_NpxCmd)' + + + + + + + + + + + + + + + + diff --git a/src/ElectronNET/build/ElectronNET.props b/src/ElectronNET/build/ElectronNET.props new file mode 100644 index 00000000..f616fbbd --- /dev/null +++ b/src/ElectronNET/build/ElectronNET.props @@ -0,0 +1,32 @@ + + + + + 30.4.0 + 26.0 + win-x64 + true + + + + $(MSBuildProjectName.Replace(".", "-").ToLower()) + electron-builder.json + $(MSBuildProjectName) + + + + false + false + false + + + + $(MSBuildThisFileDirectory)ElectronNET.LateImport.targets + + + + $(CollectUpToDateCheckBuiltDesignTimeDependsOn);ElectronCollectUpToDateCheckBuiltDesignTime + $(FileSystemPublishDependsOn);ElectronFileSystemPublishClearItems + + + diff --git a/src/ElectronNET/build/ElectronNET.targets b/src/ElectronNET/build/ElectronNET.targets new file mode 100644 index 00000000..40c58720 --- /dev/null +++ b/src/ElectronNET/build/ElectronNET.targets @@ -0,0 +1,26 @@ + + + + + win + $(Title) + $(PackageId) + + + + <_IsMsAspNetProject>False + <_IsMsAspNetProject Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true'">True + + + + + + + + + + + + + + diff --git a/src/ElectronNET/build/ElectronNETRules.Project.xaml b/src/ElectronNET/build/ElectronNETRules.Project.xaml new file mode 100644 index 00000000..62fcb820 --- /dev/null +++ b/src/ElectronNET/build/ElectronNETRules.Project.xaml @@ -0,0 +1,566 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/ElectronNET/build/ElectronNETRules.Project2.xaml b/src/ElectronNET/build/ElectronNETRules.Project2.xaml new file mode 100644 index 00000000..3a4d2f57 --- /dev/null +++ b/src/ElectronNET/build/ElectronNETRules.Project2.xaml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/ElectronNET/build/electron-builder.json b/src/ElectronNET/build/electron-builder.json new file mode 100644 index 00000000..41f483cc --- /dev/null +++ b/src/ElectronNET/build/electron-builder.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://raw.githubusercontent.com/electron-userland/electron-builder/refs/heads/master/packages/app-builder-lib/scheme.json", + "compression": "maximum", + "linux": { + "target": [ + "tar.xz" + ], + "executableArgs": [ "--no-sandbox" ], + "artifactName": "${name}-${arch}-${version}.${ext}" + }, + "win": { + "target": [ + { + "target": "portable", + "arch": "x64" + } + ] + } +} \ No newline at end of file diff --git a/src/ElectronNET/build/package.template.json b/src/ElectronNET/build/package.template.json new file mode 100644 index 00000000..156fab27 --- /dev/null +++ b/src/ElectronNET/build/package.template.json @@ -0,0 +1,48 @@ +{ + "name": "$(PackageId)", + "productName": "$(ElectronTitle)", + "build": { + "appId": "$(PackageId)", + "linux": { + "desktop": { + "entry": { "Name": "$(Title)" } + }, + "executableName": "$(PackageId)" + }, + "deb": { + "desktop": { + "entry": { "Name": "$(Title)" } + } + } + }, + "description": "$(Description)", + "version": "$(Version)", + "main": "main.js", + "author": { + "name": "$(Company)" + }, + "license": "$(License)", + "executable": "$(TargetName)", + "singleInstance": "$(ElectronSingleInstance)", + "homepage": "$(ProjectUrl)", + "splashscreen": { + "imageFile": "$(ElectronSplashScreen)" + }, + "scripts": { + "start": "tsc -p ." + }, + "dependencies": { + "dasherize": "^2.0.0", + "electron-updater": "^6.6.2", + "image-size": "^1.2.1", + "portscanner": "^2.2.0", + "socket.io": "^4.8.1", + "electron-host-hook": "file:./ElectronHostHook" + }, + "devDependencies": { + "@types/node": "^22.18", + "electron": "$(ElectronVersion)", + "eslint": "^9.37.0", + "typescript": "^5.9.3" + } +} \ No newline at end of file diff --git a/src/ElectronNET/build/update_electron_versions.py b/src/ElectronNET/build/update_electron_versions.py new file mode 100644 index 00000000..beeee443 --- /dev/null +++ b/src/ElectronNET/build/update_electron_versions.py @@ -0,0 +1,131 @@ +#!/usr/bin/env python3 +""" +Update Electron version list in ElectronNETRules.Project.xaml + +This script: +1. Downloads the Electron releases feed from GitHub +2. Filters for stable releases >= 23.0.0 +3. Generates the ElectronVersion enum XML +4. Updates the XAML file with the new version list +""" + +import json +import re +import urllib.request +from pathlib import Path + + +def download_releases(): + """Download Electron releases JSON from GitHub.""" + url = "https://releases.electronjs.org/releases.json" + print(f"Downloading releases from {url}...") + + with urllib.request.urlopen(url) as response: + data = response.read() + + print(f"Downloaded {len(data)} bytes") + return json.loads(data) + + +def filter_versions(releases, min_version="23.0.0"): + """Filter and sort stable Electron versions.""" + print(f"Filtering versions >= {min_version}...") + + # Regular expression for stable versions (major.minor.patch) + stable_pattern = re.compile(r'^\d+\.\d+\.\d+$') + + # Parse minimum version + min_parts = tuple(map(int, min_version.split('.'))) + + # Filter and collect versions + versions = set() + for release in releases: + version = release.get('version', '') + if stable_pattern.match(version): + parts = tuple(map(int, version.split('.'))) + if parts >= min_parts: + versions.add(version) + + # Sort versions + sorted_versions = sorted(versions, key=lambda v: tuple(map(int, v.split('.')))) + + print(f"Found {len(sorted_versions)} stable versions") + return sorted_versions + + +def generate_enum_xml(versions): + """Generate the ElectronVersion enum property XML.""" + lines = [ + ' ', + ' ', + ] + + for version in versions: + lines.append(f' ') + + lines.append(' ') + + return '\n'.join(lines) + + +def update_xaml_file(xaml_path, enum_xml): + """Update the XAML file with the new enum.""" + print(f"Updating {xaml_path}...") + + # Read the original file + content = Path(xaml_path).read_text(encoding='utf-8') + + # Find the ElectronVersion enum markers + start_marker = ' Date: Mon, 13 Oct 2025 13:06:20 +0200 Subject: [PATCH 05/46] Add ElectronNET.Build project (dll with custom MSBuild tasks) --- .../ElectronNET.Build.csproj | 35 ++++++++ .../ElectronNET.Build.csproj.DotSettings | 2 + src/ElectronNET.Build/PrintItemMetadata.cs | 39 +++++++++ .../RemoveEnvironmentVariables.cs | 42 ++++++++++ .../ReplaceMsBuildPropertiesTask.cs | 83 +++++++++++++++++++ 5 files changed, 201 insertions(+) create mode 100644 src/ElectronNET.Build/ElectronNET.Build.csproj create mode 100644 src/ElectronNET.Build/ElectronNET.Build.csproj.DotSettings create mode 100644 src/ElectronNET.Build/PrintItemMetadata.cs create mode 100644 src/ElectronNET.Build/RemoveEnvironmentVariables.cs create mode 100644 src/ElectronNET.Build/ReplaceMsBuildPropertiesTask.cs diff --git a/src/ElectronNET.Build/ElectronNET.Build.csproj b/src/ElectronNET.Build/ElectronNET.Build.csproj new file mode 100644 index 00000000..5b6931a8 --- /dev/null +++ b/src/ElectronNET.Build/ElectronNET.Build.csproj @@ -0,0 +1,35 @@ +๏ปฟ + + + + + netstandard2.0 + + + + + + + + + + + <_DllTargetPath>$(MSBuildThisFileDirectory)\..\ElectronNET\build + + + + + + + + + + + + + + + + diff --git a/src/ElectronNET.Build/ElectronNET.Build.csproj.DotSettings b/src/ElectronNET.Build/ElectronNET.Build.csproj.DotSettings new file mode 100644 index 00000000..89316e41 --- /dev/null +++ b/src/ElectronNET.Build/ElectronNET.Build.csproj.DotSettings @@ -0,0 +1,2 @@ +๏ปฟ + Library \ No newline at end of file diff --git a/src/ElectronNET.Build/PrintItemMetadata.cs b/src/ElectronNET.Build/PrintItemMetadata.cs new file mode 100644 index 00000000..2cce1799 --- /dev/null +++ b/src/ElectronNET.Build/PrintItemMetadata.cs @@ -0,0 +1,39 @@ +๏ปฟnamespace ElectronNET.Build +{ + using System; + using Microsoft.Build.Framework; + using Microsoft.Build.Utilities; + + public class DumpItemMetadataTask : Task + { + // The item group whose metadata will be dumped. + [Required] + public ITaskItem[] Items { get; set; } + + public override bool Execute() + { + try + { + foreach (var item in this.Items) + { + // Log the item's identity (the Include attribute) + this.Log.LogMessage(MessageImportance.High, $"Item: {item.ItemSpec}"); + + // Iterate through each metadata field of the item. + foreach (string metadataName in item.MetadataNames) + { + string metadataValue = item.GetMetadata(metadataName); + this.Log.LogMessage(MessageImportance.High, $" {metadataName}: {metadataValue}"); + } + } + + return true; + } + catch (Exception ex) + { + this.Log.LogErrorFromException(ex); + return false; + } + } + } +} \ No newline at end of file diff --git a/src/ElectronNET.Build/RemoveEnvironmentVariables.cs b/src/ElectronNET.Build/RemoveEnvironmentVariables.cs new file mode 100644 index 00000000..2840e9b6 --- /dev/null +++ b/src/ElectronNET.Build/RemoveEnvironmentVariables.cs @@ -0,0 +1,42 @@ +๏ปฟnamespace ElectronNET.Build +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Text.RegularExpressions; + using Microsoft.Build.Framework; + using Microsoft.Build.Utilities; + + public class RemoveEnvironmentVariables : Task + { + [Required] + public string Variables { get; set; } + + public override bool Execute() + { + try + { + if (string.IsNullOrEmpty(this.Variables)) + { + this.Log.LogError("The Variables property is not set"); + return false; + } + + var items = this.Variables.Split(new[] { ':', ';', ',' }, StringSplitOptions.RemoveEmptyEntries); + foreach (var item in items) + { + Environment.SetEnvironmentVariable(item.Trim(), null); + this.Log.LogMessage("Unset environment variable: {0}", item); + } + + return true; + } + catch (Exception ex) + { + this.Log.LogErrorFromException(ex); + return false; + } + } + } +} \ No newline at end of file diff --git a/src/ElectronNET.Build/ReplaceMsBuildPropertiesTask.cs b/src/ElectronNET.Build/ReplaceMsBuildPropertiesTask.cs new file mode 100644 index 00000000..30e7d653 --- /dev/null +++ b/src/ElectronNET.Build/ReplaceMsBuildPropertiesTask.cs @@ -0,0 +1,83 @@ +๏ปฟnamespace ElectronNET.Build +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Text.RegularExpressions; + using Microsoft.Build.Framework; + using Microsoft.Build.Utilities; + + public class ReplaceTemplateTask : Task + { + [Required] + public string TemplateFile { get; set; } + + [Required] + public string OutputFile { get; set; } + + [Required] + public ITaskItem[] TemplateProperties { get; set; } + + public override bool Execute() + { + try + { + ////var props = this.BuildEngine9.GetGlobalProperties(); + + ////var globalProperties = props + //// .Select(e => string.Format("{0}: {1}", e.Key, e.Value)); + + ////this.Log.LogMessage(MessageImportance.High, "Global Properties: \r\n" + string.Join(Environment.NewLine, globalProperties)); + + ////var envVariables = Environment.GetEnvironmentVariables(); + ////var envList = new List(); + ////foreach (var v in envVariables.Keys) + ////{ + //// envList.Add(string.Format("{0}: {1}", v, envVariables[v])); + ////} + + ////this.Log.LogMessage(MessageImportance.High, "Environment Variables: \r\n" + string.Join(Environment.NewLine, envList)); + + string content = File.ReadAllText(this.TemplateFile); + + // Build a dictionary of property names and values. + var dict = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (var item in this.TemplateProperties) + { + dict[item.ItemSpec] = item.GetMetadata("Value").Replace("\\", "\\\\"); + } + + // Regex pattern to match placeholders like $(PropertyName) + string pattern = @"\$\((?\w+)\)"; + content = Regex.Replace(content, pattern, match => + { + string propName = match.Groups["prop"].Value; + return dict.TryGetValue(propName, out var value) ? value : match.Value; + }); + + // Check if the output file exists and read its content + if (File.Exists(this.OutputFile)) + { + string existingContent = File.ReadAllText(this.OutputFile); + // Only write the file if the content has changed + if (existingContent != content) + { + File.WriteAllText(this.OutputFile, content); + } + } + else + { + // Write the transformed content to the output file if it doesn't exist + File.WriteAllText(this.OutputFile, content); + } + + return true; + } + catch (Exception ex) + { + this.Log.LogErrorFromException(ex); + return false; + } + } + } +} \ No newline at end of file From 14722e1f639f1be6ee1668f488dcd6431bf6012a Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 13:06:50 +0200 Subject: [PATCH 06/46] Remove ElectronNET.CLI project --- .../Actions/DeployEmbeddedElectronFiles.cs | 54 ---- .../Commands/Actions/DirectoryCopy.cs | 67 ----- .../Actions/GetTargetPlatformInformation.cs | 70 ----- src/ElectronNET.CLI/Commands/AddCommand.cs | 139 --------- src/ElectronNET.CLI/Commands/BuildCommand.cs | 263 ------------------ src/ElectronNET.CLI/Commands/CommandOption.cs | 53 ---- src/ElectronNET.CLI/Commands/ICommand.cs | 12 - src/ElectronNET.CLI/Commands/InitCommand.cs | 214 -------------- .../Commands/StartElectronCommand.cs | 185 ------------ .../Commands/VersionCommand.cs | 35 --- src/ElectronNET.CLI/ElectronNET.CLI.csproj | 88 ------ src/ElectronNET.CLI/EmbeddedFileHelper.cs | 47 ---- src/ElectronNET.CLI/ProcessHelper.cs | 53 ---- src/ElectronNET.CLI/Program.cs | 201 ------------- .../Properties/launchSettings.json | 8 - .../SimpleCommandLineParser.cs | 54 ---- src/ElectronNET.CLI/devCleanup.cmd | 3 - src/ElectronNET.CLI/devCleanup.sh | 1 - 18 files changed, 1547 deletions(-) delete mode 100644 src/ElectronNET.CLI/Commands/Actions/DeployEmbeddedElectronFiles.cs delete mode 100644 src/ElectronNET.CLI/Commands/Actions/DirectoryCopy.cs delete mode 100644 src/ElectronNET.CLI/Commands/Actions/GetTargetPlatformInformation.cs delete mode 100644 src/ElectronNET.CLI/Commands/AddCommand.cs delete mode 100644 src/ElectronNET.CLI/Commands/BuildCommand.cs delete mode 100644 src/ElectronNET.CLI/Commands/CommandOption.cs delete mode 100644 src/ElectronNET.CLI/Commands/ICommand.cs delete mode 100644 src/ElectronNET.CLI/Commands/InitCommand.cs delete mode 100644 src/ElectronNET.CLI/Commands/StartElectronCommand.cs delete mode 100644 src/ElectronNET.CLI/Commands/VersionCommand.cs delete mode 100644 src/ElectronNET.CLI/ElectronNET.CLI.csproj delete mode 100644 src/ElectronNET.CLI/EmbeddedFileHelper.cs delete mode 100644 src/ElectronNET.CLI/ProcessHelper.cs delete mode 100644 src/ElectronNET.CLI/Program.cs delete mode 100644 src/ElectronNET.CLI/Properties/launchSettings.json delete mode 100644 src/ElectronNET.CLI/SimpleCommandLineParser.cs delete mode 100644 src/ElectronNET.CLI/devCleanup.cmd delete mode 100644 src/ElectronNET.CLI/devCleanup.sh diff --git a/src/ElectronNET.CLI/Commands/Actions/DeployEmbeddedElectronFiles.cs b/src/ElectronNET.CLI/Commands/Actions/DeployEmbeddedElectronFiles.cs deleted file mode 100644 index 205ff7b4..00000000 --- a/src/ElectronNET.CLI/Commands/Actions/DeployEmbeddedElectronFiles.cs +++ /dev/null @@ -1,54 +0,0 @@ -๏ปฟusing System.IO; - -namespace ElectronNET.CLI.Commands.Actions -{ - public static class DeployEmbeddedElectronFiles - { - public static void Do(string tempPath) - { - EmbeddedFileHelper.DeployEmbeddedFile(tempPath, "main.js"); - EmbeddedFileHelper.DeployEmbeddedFile(tempPath, "package.json"); - EmbeddedFileHelper.DeployEmbeddedFile(tempPath, "build-helper.js"); - - string vscodeFolder = Path.Combine(tempPath, ".vscode"); - if (Directory.Exists(vscodeFolder) == false) - { - Directory.CreateDirectory(vscodeFolder); - } - EmbeddedFileHelper.DeployEmbeddedFile(vscodeFolder, "launch.json", ".vscode."); - EmbeddedFileHelper.DeployEmbeddedFile(vscodeFolder, "tasks.json", ".vscode."); - - string hostApiFolder = Path.Combine(tempPath, "api"); - if (Directory.Exists(hostApiFolder) == false) - { - Directory.CreateDirectory(hostApiFolder); - } - - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "ipc.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "app.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "browserWindows.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "commandLine.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "dialog.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "dock.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "menu.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "notification.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "tray.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "webContents.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "globalShortcut.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "shell.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "screen.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "clipboard.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "autoUpdater.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "browserView.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "powerMonitor.js", "api."); - EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "nativeTheme.js", "api."); - - string splashscreenFolder = Path.Combine(tempPath, "splashscreen"); - if (Directory.Exists(splashscreenFolder) == false) - { - Directory.CreateDirectory(splashscreenFolder); - } - EmbeddedFileHelper.DeployEmbeddedFile(splashscreenFolder, "index.html", "splashscreen."); - } - } -} diff --git a/src/ElectronNET.CLI/Commands/Actions/DirectoryCopy.cs b/src/ElectronNET.CLI/Commands/Actions/DirectoryCopy.cs deleted file mode 100644 index 39ded697..00000000 --- a/src/ElectronNET.CLI/Commands/Actions/DirectoryCopy.cs +++ /dev/null @@ -1,67 +0,0 @@ -๏ปฟusing System.Collections.Generic; -using System.IO; - -namespace ElectronNET.CLI.Commands.Actions -{ - public static class DirectoryCopy - { - public static void Do(string sourceDirName, string destDirName, bool copySubDirs, List ignoredSubDirs) - { - // Get the subdirectories for the specified directory. - DirectoryInfo dir = new DirectoryInfo(sourceDirName); - - if (!dir.Exists) - { - throw new DirectoryNotFoundException( - "Source directory does not exist or could not be found: " - + sourceDirName); - } - - DirectoryInfo[] dirs = dir.GetDirectories(); - // If the destination directory doesn't exist, create it. - if (!Directory.Exists(destDirName)) - { - Directory.CreateDirectory(destDirName); - } - else - { - DirectoryInfo targetDir = new DirectoryInfo(destDirName); - - foreach (FileInfo fileDel in targetDir.EnumerateFiles()) - { - fileDel.Delete(); - } - foreach (DirectoryInfo dirDel in targetDir.EnumerateDirectories()) - { - dirDel.Delete(true); - } - } - - - - - // Get the files in the directory and copy them to the new location. - FileInfo[] files = dir.GetFiles(); - foreach (FileInfo file in files) - { - string temppath = Path.Combine(destDirName, file.Name); - file.CopyTo(temppath, false); - } - - // If copying subdirectories, copy them and their contents to new location. - if (copySubDirs) - { - foreach (DirectoryInfo subdir in dirs) - { - if (ignoredSubDirs.Contains(subdir.Name)) - { - continue; - } - - string temppath = Path.Combine(destDirName, subdir.Name); - Do(subdir.FullName, temppath, copySubDirs, ignoredSubDirs); - } - } - } - } -} diff --git a/src/ElectronNET.CLI/Commands/Actions/GetTargetPlatformInformation.cs b/src/ElectronNET.CLI/Commands/Actions/GetTargetPlatformInformation.cs deleted file mode 100644 index 49184145..00000000 --- a/src/ElectronNET.CLI/Commands/Actions/GetTargetPlatformInformation.cs +++ /dev/null @@ -1,70 +0,0 @@ -๏ปฟusing System; -using System.Runtime.InteropServices; - -namespace ElectronNET.CLI.Commands.Actions -{ - public static class GetTargetPlatformInformation - { - public struct GetTargetPlatformInformationResult - { - public string NetCorePublishRid { get; set; } - public string ElectronPackerPlatform { get; set; } - - } - - public static GetTargetPlatformInformationResult Do(string desiredPlatform, string specifiedPlatfromFromCustom) - { - string netCorePublishRid = string.Empty; - string electronPackerPlatform = string.Empty; - - switch (desiredPlatform) - { - case "win": - netCorePublishRid = "win-x64"; - electronPackerPlatform = "win"; - break; - case "osx": - netCorePublishRid = "osx-x64"; - electronPackerPlatform = "mac"; - break; - case "linux": - netCorePublishRid = "linux-x64"; - electronPackerPlatform = "linux"; - break; - case "linux-arm": - netCorePublishRid = "linux-arm"; - electronPackerPlatform = "linux"; - break; - case "custom": - var splittedSpecified = specifiedPlatfromFromCustom.Split(';'); - netCorePublishRid = splittedSpecified[0]; - electronPackerPlatform = splittedSpecified[1]; - break; - default: - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - netCorePublishRid = $"win-x{(Environment.Is64BitOperatingSystem ? "64" : "86")}"; - electronPackerPlatform = "win"; - } - if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - netCorePublishRid = RuntimeInformation.ProcessArchitecture == Architecture.Arm64 ? "osx-arm64" : "osx-x64"; - electronPackerPlatform = "mac"; - } - if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - { - netCorePublishRid = "linux-x64"; - electronPackerPlatform = "linux"; - } - - break; - } - - return new GetTargetPlatformInformationResult() - { - ElectronPackerPlatform = electronPackerPlatform, - NetCorePublishRid = netCorePublishRid - }; - } - } -} diff --git a/src/ElectronNET.CLI/Commands/AddCommand.cs b/src/ElectronNET.CLI/Commands/AddCommand.cs deleted file mode 100644 index cbfb0dd6..00000000 --- a/src/ElectronNET.CLI/Commands/AddCommand.cs +++ /dev/null @@ -1,139 +0,0 @@ -๏ปฟusing System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using System.Xml; -using System.Xml.Linq; - -namespace ElectronNET.CLI.Commands -{ - public class AddCommand : ICommand - { - public const string COMMAND_NAME = "add"; - public const string COMMAND_DESCRIPTION = "The add command needs to be invoked via 'add hosthook'. This creates a special folder for your custom npm package installation."; - public const string COMMAND_ARGUMENTS = "hosthook"; - public static IList CommandOptions { get; set; } = new List(); - - - private string[] _args; - - public AddCommand(string[] args) - { - _args = args; - } - - private static string ElectronHostHookFolderName = "ElectronHostHook"; - - public Task ExecuteAsync() - { - return Task.Run(() => - { - if(_args.Length == 0) - { - Console.WriteLine("Specify 'hosthook' to add custom npm packages."); - return false; - } - - if(_args[0].ToLowerInvariant() != "hosthook") - { - Console.WriteLine("Specify 'hosthook' to add custom npm packages."); - return false; - } - - string aspCoreProjectPath = ""; - - // Maybe ToDo: Adding the possiblity to specify a path (like we did in the InitCommand, but this would require a better command args parser) - aspCoreProjectPath = Directory.GetCurrentDirectory(); - - var currentDirectory = aspCoreProjectPath; - - var targetFilePath = Path.Combine(currentDirectory, ElectronHostHookFolderName); - - if(Directory.Exists(targetFilePath)) - { - Console.WriteLine("ElectronHostHook directory already in place. If you want to start over, delete the folder and invoke this command again."); - return false; - } - - Console.WriteLine("Adding the ElectronHostHook folder to your project..."); - - Directory.CreateDirectory(targetFilePath); - - // Deploy related files - EmbeddedFileHelper.DeployEmbeddedFile(targetFilePath, "index.ts", "ElectronHostHook."); - EmbeddedFileHelper.DeployEmbeddedFile(targetFilePath, "connector.ts", "ElectronHostHook."); - EmbeddedFileHelper.DeployEmbeddedFile(targetFilePath, "package.json", "ElectronHostHook."); - EmbeddedFileHelper.DeployEmbeddedFile(targetFilePath, "tsconfig.json", "ElectronHostHook."); - EmbeddedFileHelper.DeployEmbeddedFile(targetFilePath, ".gitignore", "ElectronHostHook."); - - // npm for typescript compiler etc. - Console.WriteLine("Start npm install..."); - ProcessHelper.CmdExecute("npm install", targetFilePath); - - // run typescript compiler - // ToDo: Not sure if this runs under linux/macos - ProcessHelper.CmdExecute(@"npx tsc -p ../../", targetFilePath); - - // search .csproj or .fsproj (.csproj has higher precedence) - Console.WriteLine($"Search your .csproj/.fsproj to add configure CopyToPublishDirectory to 'Never'"); - var projectFile = Directory.EnumerateFiles(currentDirectory, "*.csproj", SearchOption.TopDirectoryOnly) - .Union(Directory.EnumerateFiles(currentDirectory, "*.fsproj", SearchOption.TopDirectoryOnly)) - .FirstOrDefault(); - - var extension = Path.GetExtension(projectFile); - Console.WriteLine($"Found your {extension}: {projectFile} - check for existing CopyToPublishDirectory setting or update it."); - - if (!EditProjectFile(projectFile)) return false; - - Console.WriteLine($"Everything done - happy electronizing with your custom npm packages!"); - - return true; - }); - } - - // ToDo: Cleanup this copy/past code. - private static bool EditProjectFile(string projectFile) - { - using (var stream = File.Open(projectFile, FileMode.OpenOrCreate, FileAccess.ReadWrite)) - { - var xmlDocument = XDocument.Load(stream); - - var projectElement = xmlDocument.Descendants("Project").FirstOrDefault(); - if (projectElement == null || projectElement.Attribute("Sdk")?.Value != "Microsoft.NET.Sdk.Web") - { - Console.WriteLine( - $"Project file is not a compatible type of 'Microsoft.NET.Sdk.Web'. Your project: {projectElement?.Attribute("Sdk")?.Value}"); - return false; - } - - string itemGroupXmlString = "" + - "" + - "Never" + - "" + - ""; - - var newItemGroupForConfig = XElement.Parse(itemGroupXmlString); - xmlDocument.Root.Add(newItemGroupForConfig); - - stream.SetLength(0); - stream.Position = 0; - - var xws = new XmlWriterSettings - { - OmitXmlDeclaration = true, - Indent = true - }; - using (XmlWriter xw = XmlWriter.Create(stream, xws)) - { - xmlDocument.Save(xw); - } - - } - - Console.WriteLine($"Publish setting added in csproj/fsproj!"); - return true; - } - - } -} diff --git a/src/ElectronNET.CLI/Commands/BuildCommand.cs b/src/ElectronNET.CLI/Commands/BuildCommand.cs deleted file mode 100644 index 2d4322b0..00000000 --- a/src/ElectronNET.CLI/Commands/BuildCommand.cs +++ /dev/null @@ -1,263 +0,0 @@ -๏ปฟusing System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using ElectronNET.CLI.Commands.Actions; - -namespace ElectronNET.CLI.Commands -{ - public class BuildCommand : ICommand - { - public const string COMMAND_NAME = "build"; - public const string COMMAND_DESCRIPTION = "Build your Electron Application."; - public static string COMMAND_ARGUMENTS = "Needed: '/target' with params 'win/osx/linux' to build for a typical app or use 'custom' and specify .NET Core build config & electron build config" + Environment.NewLine + - " for custom target, check .NET Core RID Catalog and Electron build target/" + Environment.NewLine + - " e.g. '/target win' or '/target custom \"win7-x86;win\"'" + Environment.NewLine + - "Optional: '/dotnet-configuration' with the desired .NET Core build config e.g. release or debug. Default = Release" + Environment.NewLine + - "Optional: '/no-restore' to disable nuget packages restore" + Environment.NewLine + - "Optional: '/electron-arch' to specify the resulting electron processor architecture (e.g. ia86 for x86 builds). Be aware to use the '/target custom' param as well!" + Environment.NewLine + - "Optional: '/electron-params' specify any other valid parameter, which will be routed to the electron-packager." + Environment.NewLine + - "Optional: '/relative-path' to specify output a subdirectory for output." + Environment.NewLine + - "Optional: '/absolute-path to specify and absolute path for output." + Environment.NewLine + - "Optional: '/package-json' to specify a custom package.json file." + Environment.NewLine + - "Optional: '/install-modules' to force node module install. Implied by '/package-json'" + Environment.NewLine + - "Optional: '/Version' to specify the version that should be applied to both the `dotnet publish` and `electron-builder` commands. Implied by '/Version'" + Environment.NewLine + - "Optional: '/p:[property]' or '/property:[property]' to pass in dotnet publish properties. Example: '/property:Version=1.0.0' to override the FileVersion" + Environment.NewLine + - "Full example for a 32bit debug build with electron prune: build /target custom win7-x86;win32 /dotnet-configuration Debug /electron-arch ia32 /electron-params \"--prune=true \""; - - public static IList CommandOptions { get; set; } = new List(); - - private string[] _args; - - public BuildCommand(string[] args) - { - _args = args; - } - - private string _paramTarget = "target"; - private string _paramDotNetConfig = "dotnet-configuration"; - private string _paramElectronArch = "electron-arch"; - private string _paramElectronParams = "electron-params"; - private string _paramOutputDirectory = "relative-path"; - private string _paramAbsoluteOutput = "absolute-path"; - private string _paramPackageJson = "package-json"; - private string _paramForceNodeInstall = "install-modules"; - private string _manifest = "manifest"; - private string _paramPublishReadyToRun = "PublishReadyToRun"; - private string _paramPublishSingleFile = "PublishSingleFile"; - private string _paramSelfContained = "SelfContained"; - private string _paramNoRestore = "no-restore"; - private string _paramVersion = "Version"; - - public Task ExecuteAsync() - { - return Task.Run(() => - { - Console.WriteLine("Build Electron Application..."); - - SimpleCommandLineParser parser = new SimpleCommandLineParser(); - parser.Parse(_args); - - //This version will be shared between the dotnet publish and electron-builder commands - string version = null; - if (parser.Arguments.ContainsKey(_paramVersion)) - version = parser.Arguments[_paramVersion][0]; - - if (!parser.Arguments.ContainsKey(_paramTarget)) - { - Console.WriteLine($"Error: missing '{_paramTarget}' argument."); - Console.WriteLine(COMMAND_ARGUMENTS); - return false; - } - - var desiredPlatform = parser.Arguments[_paramTarget][0]; - string specifiedFromCustom = string.Empty; - if (desiredPlatform == "custom" && parser.Arguments[_paramTarget].Length > 1) - { - specifiedFromCustom = parser.Arguments[_paramTarget][1]; - } - - string configuration = "Release"; - if (parser.Arguments.ContainsKey(_paramDotNetConfig)) - { - configuration = parser.Arguments[_paramDotNetConfig][0]; - } - - string noRestore = parser.Arguments.ContainsKey(_paramNoRestore) - ? " --no-restore" - : string.Empty; - - var platformInfo = GetTargetPlatformInformation.Do(desiredPlatform, specifiedFromCustom); - - Console.WriteLine($"Build ASP.NET Core App for {platformInfo.NetCorePublishRid}..."); - - string tempPath = Path.Combine(Directory.GetCurrentDirectory(), "obj", "desktop", desiredPlatform); - - if (Directory.Exists(tempPath) == false) - { - Directory.CreateDirectory(tempPath); - } - else - { - Directory.Delete(tempPath, true); - Directory.CreateDirectory(tempPath); - } - - - Console.WriteLine("Executing dotnet publish in this directory: " + tempPath); - - string tempBinPath = Path.Combine(tempPath, "bin"); - - Console.WriteLine($"Build ASP.NET Core App for {platformInfo.NetCorePublishRid} under {configuration}-Configuration..."); - - var dotNetPublishFlags = GetDotNetPublishFlags(parser); - - var command = - $"dotnet publish -r {platformInfo.NetCorePublishRid} -c \"{configuration}\"{noRestore} --output \"{tempBinPath}\" {string.Join(' ', dotNetPublishFlags.Select(kvp => $"{kvp.Key}={kvp.Value}"))}"; - - // output the command - Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine(command); - Console.ResetColor(); - - var resultCode = ProcessHelper.CmdExecute(command, Directory.GetCurrentDirectory()); - - if (resultCode != 0) - { - Console.WriteLine("Error occurred during dotnet publish: " + resultCode); - return false; - } - - DeployEmbeddedElectronFiles.Do(tempPath); - var nodeModulesDirPath = Path.Combine(tempPath, "node_modules"); - - if (parser.Arguments.ContainsKey(_paramPackageJson)) - { - Console.WriteLine("Copying custom package.json."); - - File.Copy(parser.Arguments[_paramPackageJson][0], Path.Combine(tempPath, "package.json"), true); - } - - var checkForNodeModulesDirPath = Path.Combine(tempPath, "node_modules"); - - if (Directory.Exists(checkForNodeModulesDirPath) == false || parser.Contains(_paramForceNodeInstall) || parser.Contains(_paramPackageJson)) - - Console.WriteLine("Start npm install..."); - ProcessHelper.CmdExecute("npm install --production", tempPath); - - Console.WriteLine("ElectronHostHook handling started..."); - - string electronhosthookDir = Path.Combine(Directory.GetCurrentDirectory(), "ElectronHostHook"); - - if (Directory.Exists(electronhosthookDir)) - { - string hosthookDir = Path.Combine(tempPath, "ElectronHostHook"); - DirectoryCopy.Do(electronhosthookDir, hosthookDir, true, new List() { "node_modules" }); - - Console.WriteLine("Start npm install for hosthooks..."); - ProcessHelper.CmdExecute("npm install", hosthookDir); - - // ToDo: Not sure if this runs under linux/macos - ProcessHelper.CmdExecute(@"npx tsc -p . --sourceMap false", hosthookDir); - } - - Console.WriteLine("Build Electron Desktop Application..."); - - // Specifying an absolute path supercedes a relative path - string buildPath = Path.Combine(Directory.GetCurrentDirectory(), "bin", "desktop"); - if (parser.Arguments.ContainsKey(_paramAbsoluteOutput)) - { - buildPath = parser.Arguments[_paramAbsoluteOutput][0]; - } - else if (parser.Arguments.ContainsKey(_paramOutputDirectory)) - { - buildPath = Path.Combine(Directory.GetCurrentDirectory(), parser.Arguments[_paramOutputDirectory][0]); - } - - Console.WriteLine("Executing electron magic in this directory: " + buildPath); - - string electronArch = "x64"; - if (parser.Arguments.ContainsKey(_paramElectronArch)) - { - electronArch = parser.Arguments[_paramElectronArch][0]; - } - - string electronParams = ""; - if (parser.Arguments.ContainsKey(_paramElectronParams)) - { - electronParams = parser.Arguments[_paramElectronParams][0]; - } - - // ToDo: Make the same thing easer with native c# - we can save a tmp file in production code :) - Console.WriteLine("Create electron-builder configuration file..."); - - string manifestFileName = "electron.manifest.json"; - - if (parser.Arguments.ContainsKey(_manifest)) - { - manifestFileName = parser.Arguments[_manifest].First(); - } - - ProcessHelper.CmdExecute( - string.IsNullOrWhiteSpace(version) - ? $"node build-helper.js {manifestFileName}" - : $"node build-helper.js {manifestFileName} {version}", tempPath); - - Console.WriteLine($"Package Electron App for Platform {platformInfo.ElectronPackerPlatform}..."); - ProcessHelper.CmdExecute($"npx electron-builder --config=./bin/electron-builder.json --{platformInfo.ElectronPackerPlatform} --{electronArch} -c.electronVersion=30.0.3 {electronParams}", tempPath); - - Console.WriteLine("... done"); - - return true; - }); - } - - private Dictionary GetDotNetPublishFlags(SimpleCommandLineParser parser) - { - var dotNetPublishFlags = new Dictionary - { - {"/p:PublishReadyToRun", parser.TryGet(_paramPublishReadyToRun, out var rtr) ? rtr[0] : "true"}, - {"/p:PublishSingleFile", parser.TryGet(_paramPublishSingleFile, out var psf) ? psf[0] : "true"}, - {"/p:SelfContained", parser.TryGet(_paramSelfContained, out var sc) ? sc[0] : "true"}, - }; - - if (parser.Arguments.ContainsKey(_paramVersion)) - { - if(parser.Arguments.Keys.All(key => !key.StartsWith("p:Version=") && !key.StartsWith("property:Version="))) - dotNetPublishFlags.Add("/p:Version", parser.Arguments[_paramVersion][0]); - if(parser.Arguments.Keys.All(key => !key.StartsWith("p:ProductVersion=") && !key.StartsWith("property:ProductVersion="))) - dotNetPublishFlags.Add("/p:ProductVersion", parser.Arguments[_paramVersion][0]); - } - - foreach (var parm in parser.Arguments.Keys.Where(key => key.StartsWith("p:") || key.StartsWith("property:"))) - { - var split = parm.IndexOf('='); - if (split < 0) - { - continue; - } - - var key = $"/{parm.Substring(0, split)}"; - // normalize the key - if (key.StartsWith("/property:")) - { - key = key.Replace("/property:", "/p:"); - } - - var value = parm.Substring(split + 1); - - if (dotNetPublishFlags.ContainsKey(key)) - { - dotNetPublishFlags[key] = value; - } - else - { - dotNetPublishFlags.Add(key, value); - } - } - - return dotNetPublishFlags; - } - } -} diff --git a/src/ElectronNET.CLI/Commands/CommandOption.cs b/src/ElectronNET.CLI/Commands/CommandOption.cs deleted file mode 100644 index 675f571e..00000000 --- a/src/ElectronNET.CLI/Commands/CommandOption.cs +++ /dev/null @@ -1,53 +0,0 @@ -๏ปฟnamespace ElectronNET.CLI.Commands -{ - ///

- /// The definitionn of an option for a command. - /// - public class CommandOption - { - /// - /// An enum for the possible values for an option - /// - public enum CommandOptionValueType { NoValue, StringValue, BoolValue, IntValue, CommaDelimitedList, KeyValuePairs } - - /// - /// The name of the option. - /// - public string Name { get; set; } - - /// - /// The short form of the command line switch. This will start with just one dash e.g. -f for framework - /// - public string ShortSwitch { get; set; } - - /// - /// The full form of the command line switch. This will start with two dashes e.g. --framework - /// - public string Switch { get; set; } - - /// - /// The description of the option - /// - public string Description { get; set; } - - /// - /// The type of value that is expected with this command option - /// - public CommandOptionValueType ValueType { get; set; } - - /// - /// The JSON key used in configuration file.` - /// - public string ConfigFileKey - { - get - { - var key = this.Switch; - if (key.StartsWith("--")) - key = key.Substring(2); - - return key; - } - } - } -} \ No newline at end of file diff --git a/src/ElectronNET.CLI/Commands/ICommand.cs b/src/ElectronNET.CLI/Commands/ICommand.cs deleted file mode 100644 index e247a2a0..00000000 --- a/src/ElectronNET.CLI/Commands/ICommand.cs +++ /dev/null @@ -1,12 +0,0 @@ -๏ปฟusing System.Threading.Tasks; - -namespace ElectronNET.CLI.Commands -{ - /// - /// Interface for commands to implement. - /// - public interface ICommand - { - Task ExecuteAsync(); - } -} diff --git a/src/ElectronNET.CLI/Commands/InitCommand.cs b/src/ElectronNET.CLI/Commands/InitCommand.cs deleted file mode 100644 index c2539200..00000000 --- a/src/ElectronNET.CLI/Commands/InitCommand.cs +++ /dev/null @@ -1,214 +0,0 @@ -๏ปฟusing System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Xml; -using System.Xml.Linq; - -namespace ElectronNET.CLI.Commands -{ - public class InitCommand : ICommand - { - public const string COMMAND_NAME = "init"; - public const string COMMAND_DESCRIPTION = "Creates the needed Electron.NET config for your Electron Application."; - public const string COMMAND_ARGUMENTS = " from ASP.NET Core Project."; - public static IList CommandOptions { get; set; } = new List(); - - private static SimpleCommandLineParser _parser = new SimpleCommandLineParser(); - private static string ConfigName = "electron.manifest.json"; - private const string DefaultConfigFileName = "electron.manifest.json"; - - public InitCommand(string[] args) - { - _parser.Parse(args); - } - - private static string _aspCoreProjectPath = "project-path"; - private static string _manifest = "manifest"; - - public Task ExecuteAsync() - { - return Task.Run(() => - { - string aspCoreProjectPath = ""; - - if (_parser.Arguments.ContainsKey(_aspCoreProjectPath)) - { - string projectPath = _parser.Arguments[_aspCoreProjectPath].First(); - if (Directory.Exists(projectPath)) - { - aspCoreProjectPath = projectPath; - } - } - else - { - aspCoreProjectPath = Directory.GetCurrentDirectory(); - } - - var currentDirectory = aspCoreProjectPath; - - if(_parser.Arguments.ContainsKey(_manifest)) - { - ConfigName = "electron.manifest." + _parser.Arguments[_manifest].First() + ".json"; - Console.WriteLine($"Adding your custom {ConfigName} config file to your project..."); - } - else - { - Console.WriteLine("Adding our config file to your project..."); - } - - var targetFilePath = Path.Combine(currentDirectory, ConfigName); - - if (File.Exists(targetFilePath)) - { - Console.WriteLine("Config file already in your project."); - return false; - } - - // Deploy config file - EmbeddedFileHelper.DeployEmbeddedFileToTargetFile(currentDirectory, DefaultConfigFileName, ConfigName); - - // search .csproj/.fsproj (.csproj has higher precedence) - Console.WriteLine($"Search your .csproj/fsproj to add the needed {ConfigName}..."); - var projectFile = Directory.EnumerateFiles(currentDirectory, "*.csproj", SearchOption.TopDirectoryOnly) - .Union(Directory.EnumerateFiles(currentDirectory, "*.fsproj", SearchOption.TopDirectoryOnly)) - .FirstOrDefault(); - - // update config file with the name of the csproj/fsproj - // ToDo: If the csproj/fsproj name != application name, this will fail - string text = File.ReadAllText(targetFilePath); - text = text.Replace("{{executable}}", Path.GetFileNameWithoutExtension(projectFile)); - File.WriteAllText(targetFilePath, text); - - var extension = Path.GetExtension(projectFile); - Console.WriteLine($"Found your {extension}: {projectFile} - check for existing config or update it."); - - if (!EditProjectFile(projectFile)) return false; - - // search launchSettings.json - Console.WriteLine($"Search your .launchSettings to add our electron debug profile..."); - - EditLaunchSettings(currentDirectory); - - Console.WriteLine($"Everything done - happy electronizing!"); - - return true; - }); - } - - private static void EditLaunchSettings(string currentDirectory) - { - // super stupid implementation, but because there is no nativ way to parse json - // and cli extensions and other nuget packages are buggy - // this is should solve the problem for 80% of the users - // for the other 20% we might fail... - var launchSettingFile = Path.Combine(currentDirectory, "Properties", "launchSettings.json"); - - if (File.Exists(launchSettingFile) == false) - { - Console.WriteLine("launchSettings.json not found - do nothing."); - return; - } - - string launchSettingText = File.ReadAllText(launchSettingFile); - - if(_parser.Arguments.ContainsKey(_manifest)) - { - string manifestName = _parser.Arguments[_manifest].First(); - - if(launchSettingText.Contains("start /manifest " + ConfigName) == false) - { - StringBuilder debugProfileBuilder = new StringBuilder(); - debugProfileBuilder.AppendLine("profiles\": {"); - debugProfileBuilder.AppendLine(" \"Electron.NET App - " + manifestName + "\": {"); - debugProfileBuilder.AppendLine(" \"commandName\": \"Executable\","); - debugProfileBuilder.AppendLine(" \"executablePath\": \"electronize\","); - debugProfileBuilder.AppendLine(" \"commandLineArgs\": \"start /manifest " + ConfigName + "\","); - debugProfileBuilder.AppendLine(" \"workingDirectory\": \".\""); - debugProfileBuilder.AppendLine(" },"); - - launchSettingText = launchSettingText.Replace("profiles\": {", debugProfileBuilder.ToString()); - File.WriteAllText(launchSettingFile, launchSettingText); - - Console.WriteLine($"Debug profile added!"); - } - else - { - Console.WriteLine($"Debug profile already existing"); - } - } - else if (launchSettingText.Contains("\"executablePath\": \"electronize\"") == false) - { - StringBuilder debugProfileBuilder = new StringBuilder(); - debugProfileBuilder.AppendLine("profiles\": {"); - debugProfileBuilder.AppendLine(" \"Electron.NET App\": {"); - debugProfileBuilder.AppendLine(" \"commandName\": \"Executable\","); - debugProfileBuilder.AppendLine(" \"executablePath\": \"electronize\","); - debugProfileBuilder.AppendLine(" \"commandLineArgs\": \"start\","); - debugProfileBuilder.AppendLine(" \"workingDirectory\": \".\""); - debugProfileBuilder.AppendLine(" },"); - - launchSettingText = launchSettingText.Replace("profiles\": {", debugProfileBuilder.ToString()); - File.WriteAllText(launchSettingFile, launchSettingText); - - Console.WriteLine($"Debug profile added!"); - } - else - { - Console.WriteLine($"Debug profile already existing"); - } - } - - private static bool EditProjectFile(string projectFile) - { - using (var stream = File.Open(projectFile, FileMode.OpenOrCreate, FileAccess.ReadWrite)) - { - var xmlDocument = XDocument.Load(stream); - - var projectElement = xmlDocument.Descendants("Project").FirstOrDefault(); - if (projectElement == null || projectElement.Attribute("Sdk")?.Value != "Microsoft.NET.Sdk.Web") - { - Console.WriteLine( - $"Project file is not a compatible type of 'Microsoft.NET.Sdk.Web'. Your project: {projectElement?.Attribute("Sdk")?.Value}"); - return false; - } - - if (xmlDocument.ToString().Contains($"Content Update=\"{ConfigName}\"")) - { - Console.WriteLine($"{ConfigName} already in csproj/fsproj."); - return false; - } - - Console.WriteLine($"{ConfigName} will be added to csproj/fsproj."); - - string itemGroupXmlString = "" + - "" + - "PreserveNewest" + - "" + - ""; - - var newItemGroupForConfig = XElement.Parse(itemGroupXmlString); - xmlDocument.Root.Add(newItemGroupForConfig); - - stream.SetLength(0); - stream.Position = 0; - - var xws = new XmlWriterSettings - { - OmitXmlDeclaration = true, - Indent = true - }; - using (XmlWriter xw = XmlWriter.Create(stream, xws)) - { - xmlDocument.Save(xw); - } - - } - - Console.WriteLine($"{ConfigName} added in csproj/fsproj!"); - return true; - } - } -} diff --git a/src/ElectronNET.CLI/Commands/StartElectronCommand.cs b/src/ElectronNET.CLI/Commands/StartElectronCommand.cs deleted file mode 100644 index 03382ecd..00000000 --- a/src/ElectronNET.CLI/Commands/StartElectronCommand.cs +++ /dev/null @@ -1,185 +0,0 @@ -๏ปฟusing System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using System.Threading.Tasks; -using ElectronNET.CLI.Commands.Actions; - -namespace ElectronNET.CLI.Commands -{ - public class StartElectronCommand : ICommand - { - public const string COMMAND_NAME = "start"; - public const string COMMAND_DESCRIPTION = "Start your ASP.NET Core Application with Electron, without package it as a single exe. Faster for development."; - public const string COMMAND_ARGUMENTS = " from ASP.NET Core Project."; - public static IList CommandOptions { get; set; } = new List(); - - private string[] _args; - - public StartElectronCommand(string[] args) - { - _args = args; - } - - private string _aspCoreProjectPath = "project-path"; - private string _arguments = "args"; - private string _manifest = "manifest"; - private string _clearCache = "clear-cache"; - private string _paramPublishReadyToRun = "PublishReadyToRun"; - private string _paramPublishSingleFile = "PublishSingleFile"; - private string _paramDotNetConfig = "dotnet-configuration"; - private string _paramTarget = "target"; - - public Task ExecuteAsync() - { - return Task.Run(() => - { - Console.WriteLine("Start Electron Desktop Application..."); - - SimpleCommandLineParser parser = new SimpleCommandLineParser(); - parser.Parse(_args); - - string aspCoreProjectPath = ""; - - if (parser.Arguments.ContainsKey(_aspCoreProjectPath)) - { - string projectPath = parser.Arguments[_aspCoreProjectPath].First(); - if (Directory.Exists(projectPath)) - { - aspCoreProjectPath = projectPath; - } - } - else - { - aspCoreProjectPath = Directory.GetCurrentDirectory(); - } - - string tempPath = Path.Combine(aspCoreProjectPath, "obj", "Host"); - if (Directory.Exists(tempPath) == false) - { - Directory.CreateDirectory(tempPath); - } - - string tempBinPath = Path.Combine(tempPath, "bin"); - var resultCode = 0; - - string publishReadyToRun = "/p:PublishReadyToRun="; - if (parser.Arguments.ContainsKey(_paramPublishReadyToRun)) - { - publishReadyToRun += parser.Arguments[_paramPublishReadyToRun][0]; - } - else - { - publishReadyToRun += "true"; - } - - string publishSingleFile = "/p:PublishSingleFile="; - if (parser.Arguments.ContainsKey(_paramPublishSingleFile)) - { - publishSingleFile += parser.Arguments[_paramPublishSingleFile][0]; - } - else - { - publishSingleFile += "true"; - } - - // If target is specified as a command line argument, use it. - // Format is the same as the build command. - // If target is not specified, autodetect it. - var platformInfo = GetTargetPlatformInformation.Do(string.Empty, string.Empty); - if (parser.Arguments.ContainsKey(_paramTarget)) - { - var desiredPlatform = parser.Arguments[_paramTarget][0]; - string specifiedFromCustom = string.Empty; - if (desiredPlatform == "custom" && parser.Arguments[_paramTarget].Length > 1) - { - specifiedFromCustom = parser.Arguments[_paramTarget][1]; - } - platformInfo = GetTargetPlatformInformation.Do(desiredPlatform, specifiedFromCustom); - } - - string configuration = "Debug"; - if (parser.Arguments.ContainsKey(_paramDotNetConfig)) - { - configuration = parser.Arguments[_paramDotNetConfig][0]; - } - - if (parser != null && !parser.Arguments.ContainsKey("watch")) - { - resultCode = ProcessHelper.CmdExecute($"dotnet publish -r {platformInfo.NetCorePublishRid} -c \"{configuration}\" --output \"{tempBinPath}\" {publishReadyToRun} {publishSingleFile} --no-self-contained", aspCoreProjectPath); - } - - if (resultCode != 0) - { - Console.WriteLine("Error occurred during dotnet publish: " + resultCode); - return false; - } - - DeployEmbeddedElectronFiles.Do(tempPath); - - var nodeModulesDirPath = Path.Combine(tempPath, "node_modules"); - - Console.WriteLine("node_modules missing in: " + nodeModulesDirPath); - - Console.WriteLine("Start npm install..."); - ProcessHelper.CmdExecute("npm install", tempPath); - - Console.WriteLine("ElectronHostHook handling started..."); - - string electronhosthookDir = Path.Combine(Directory.GetCurrentDirectory(), "ElectronHostHook"); - - if (Directory.Exists(electronhosthookDir)) - { - string hosthookDir = Path.Combine(tempPath, "ElectronHostHook"); - DirectoryCopy.Do(electronhosthookDir, hosthookDir, true, new List() { "node_modules" }); - - Console.WriteLine("Start npm install for typescript & hosthooks..."); - ProcessHelper.CmdExecute("npm install", hosthookDir); - - // ToDo: Not sure if this runs under linux/macos - ProcessHelper.CmdExecute(@"npx tsc -p ../../ElectronHostHook", tempPath); - } - - string arguments = ""; - - if (parser.Arguments.ContainsKey(_arguments)) - { - arguments = string.Join(' ', parser.Arguments[_arguments]); - } - - if (parser.Arguments.ContainsKey(_manifest)) - { - arguments += " --manifest=" + parser.Arguments[_manifest].First(); - } - - if (parser.Arguments.ContainsKey(_clearCache)) - { - arguments += " --clear-cache=true"; - } - - if (parser.Arguments.ContainsKey("watch")) - { - arguments += " --watch=true"; - } - - string path = Path.Combine(tempPath, "node_modules", ".bin"); - bool isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); - - if (isWindows) - { - Console.WriteLine("Invoke electron.cmd - in dir: " + path); - ProcessHelper.CmdExecute(@"electron.cmd ""..\..\main.js"" " + arguments, path); - - } - else - { - Console.WriteLine("Invoke electron - in dir: " + path); - ProcessHelper.CmdExecute(@"./electron ""../../main.js"" " + arguments, path); - } - - return true; - }); - } - } -} diff --git a/src/ElectronNET.CLI/Commands/VersionCommand.cs b/src/ElectronNET.CLI/Commands/VersionCommand.cs deleted file mode 100644 index c8f60f83..00000000 --- a/src/ElectronNET.CLI/Commands/VersionCommand.cs +++ /dev/null @@ -1,35 +0,0 @@ -๏ปฟusing System; -using System.Collections.Generic; -using System.Reflection; -using System.Threading.Tasks; - -namespace ElectronNET.CLI.Commands -{ - public class VersionCommand : ICommand - { - public const string COMMAND_NAME = "version"; - public const string COMMAND_DESCRIPTION = "Displays the ElectronNET.CLI version"; - public const string COMMAND_ARGUMENTS = ""; - public static IList CommandOptions { get; set; } = new List(); - - public VersionCommand(string[] args) - { - } - - public Task ExecuteAsync() - { - return Task.Run(() => - { - var runtimeVersion = typeof(VersionCommand) - .GetTypeInfo() - .Assembly - .GetCustomAttribute(); - - Console.WriteLine($"ElectronNET.CLI Version: " + runtimeVersion.Version); - - return true; - }); - } - - } -} \ No newline at end of file diff --git a/src/ElectronNET.CLI/ElectronNET.CLI.csproj b/src/ElectronNET.CLI/ElectronNET.CLI.csproj deleted file mode 100644 index 5aa7182e..00000000 --- a/src/ElectronNET.CLI/ElectronNET.CLI.csproj +++ /dev/null @@ -1,88 +0,0 @@ -๏ปฟ - - Exe - net6.0;net8.0 - dotnet-electronize - electronize - DotnetCliTool - ..\..\artifacts - ElectronNET.CLI - - 99.0.0.0 - Gregor Biswanger, Florian Rappl - Electron.NET - - - Building cross platform electron based desktop apps with .NET Core and ASP.NET Core. - This package contains the dotnet tooling to electronize your application. - - MIT - https://github.com/ElectronNET/Electron.NET/ - https://github.com/ElectronNET/Electron.NET/ - git - true - electron aspnetcore - Changelog: https://github.com/ElectronNET/Electron.NET/blob/main/Changelog.md - PackageIcon.png - true - - - - - AnyCPU - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers - - - all - - - - - - - - - \ No newline at end of file diff --git a/src/ElectronNET.CLI/EmbeddedFileHelper.cs b/src/ElectronNET.CLI/EmbeddedFileHelper.cs deleted file mode 100644 index d41e657e..00000000 --- a/src/ElectronNET.CLI/EmbeddedFileHelper.cs +++ /dev/null @@ -1,47 +0,0 @@ -๏ปฟusing System; -using System.IO; -using System.Reflection; - -namespace ElectronNET.CLI -{ - public static class EmbeddedFileHelper - { - private const string ResourcePath = "ElectronNET.CLI.{0}"; - - private static Stream GetTestResourceFileStream(string folderAndFileInProjectPath) - { - var asm = Assembly.GetExecutingAssembly(); - var resource = string.Format(ResourcePath, folderAndFileInProjectPath); - - return asm.GetManifestResourceStream(resource); - } - - public static void DeployEmbeddedFile(string targetPath, string file, string namespacePath = "") - { - using (var fileStream = File.Create(Path.Combine(targetPath, file))) - { - var streamFromEmbeddedFile = GetTestResourceFileStream("ElectronHost." + namespacePath + file); - if (streamFromEmbeddedFile == null) - { - Console.WriteLine("Error: Couldn't find embedded file: " + file); - } - - streamFromEmbeddedFile.CopyTo(fileStream); - } - } - - public static void DeployEmbeddedFileToTargetFile(string targetPath, string embeddedFile, string targetFile, string namespacePath = "") - { - using (var fileStream = File.Create(Path.Combine(targetPath, targetFile))) - { - var streamFromEmbeddedFile = GetTestResourceFileStream("ElectronHost." + namespacePath + embeddedFile); - if (streamFromEmbeddedFile == null) - { - Console.WriteLine("Error: Couldn't find embedded file: " + embeddedFile); - } - - streamFromEmbeddedFile.CopyTo(fileStream); - } - } - } -} \ No newline at end of file diff --git a/src/ElectronNET.CLI/ProcessHelper.cs b/src/ElectronNET.CLI/ProcessHelper.cs deleted file mode 100644 index 9e0048f4..00000000 --- a/src/ElectronNET.CLI/ProcessHelper.cs +++ /dev/null @@ -1,53 +0,0 @@ -๏ปฟusing System; -using System.Diagnostics; -using System.Runtime.InteropServices; - -namespace ElectronNET.CLI -{ - public class ProcessHelper - { - public static int CmdExecute(string command, string workingDirectoryPath, bool output = true, bool waitForExit = true) - { - using (Process cmd = new Process()) - { - bool isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); - - if (isWindows) - { - cmd.StartInfo = new ProcessStartInfo("cmd.exe", "/c " + command); - } - else - { - // works for OSX and Linux (at least on Ubuntu) - var escapedArgs = command.Replace("\"", "\\\""); - cmd.StartInfo = new ProcessStartInfo("bash", $"-c \"{escapedArgs}\""); - } - - cmd.StartInfo.RedirectStandardInput = true; - cmd.StartInfo.RedirectStandardOutput = true; - cmd.StartInfo.RedirectStandardError = true; - cmd.StartInfo.CreateNoWindow = true; - cmd.StartInfo.UseShellExecute = false; - cmd.StartInfo.WorkingDirectory = workingDirectoryPath; - - if (output) - { - cmd.OutputDataReceived += (s, e) => Console.WriteLine(e.Data); - cmd.ErrorDataReceived += (s, e) => Console.WriteLine(e.Data); - } - - Console.WriteLine(command); - cmd.Start(); - cmd.BeginOutputReadLine(); - cmd.BeginErrorReadLine(); - - if (waitForExit) - { - cmd.WaitForExit(); - } - - return cmd.ExitCode; - } - } - } -} diff --git a/src/ElectronNET.CLI/Program.cs b/src/ElectronNET.CLI/Program.cs deleted file mode 100644 index 2030030c..00000000 --- a/src/ElectronNET.CLI/Program.cs +++ /dev/null @@ -1,201 +0,0 @@ -๏ปฟusing ElectronNET.CLI.Commands; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; - -namespace ElectronNET.CLI -{ - class Program - { - static void Main(string[] args) - { - if (args.Length == 0) - { - PrintUsageHeader(); - PrintUsage(); - Environment.Exit(-1); - } - - ICommand command = null; - - switch (args[0]) - { - case StartElectronCommand.COMMAND_NAME: - command = new StartElectronCommand(args.Skip(1).ToArray()); - break; - case BuildCommand.COMMAND_NAME: - command = new BuildCommand(args.Skip(1).ToArray()); - break; - case InitCommand.COMMAND_NAME: - command = new InitCommand(args.Skip(1).ToArray()); - break; - case AddCommand.COMMAND_NAME: - command = new AddCommand(args.Skip(1).ToArray()); - break; - case VersionCommand.COMMAND_NAME: - command = new VersionCommand(args.Skip(1).ToArray()); - break; - case "--help": - case "--h": - case "help": - PrintUsageHeader(); - - if (args.Length > 1) - PrintUsage(args[1]); - else - PrintUsage(); - break; - default: - Console.Error.WriteLine($"Unknown command {args[0]}"); - PrintUsage(); - Environment.Exit(-1); - break; - } - - if (command != null) - { - var success = command.ExecuteAsync().Result; - if (!success) - { - Environment.Exit(-1); - } - } - } - - private static void PrintUsageHeader() - { - var sb = new StringBuilder("Electron.NET Tools"); - var version = Version; - if (!string.IsNullOrEmpty(version)) - { - sb.Append($" ({version})"); - } - Console.WriteLine(sb.ToString()); - Console.WriteLine("Project Home: https://github.com/ElectronNET/Electron.NET"); - Console.WriteLine("\t"); - } - - private static void PrintUsage() - { - const int NAME_WIDTH = 23; - Console.WriteLine("\t"); - Console.WriteLine("Commands to start the Electron Application:"); - Console.WriteLine("\t"); - Console.WriteLine($"\t{StartElectronCommand.COMMAND_NAME.PadRight(NAME_WIDTH)} {StartElectronCommand.COMMAND_DESCRIPTION}"); - - Console.WriteLine("\t"); - Console.WriteLine("Command to build the Electron Application:"); - Console.WriteLine("\t"); - Console.WriteLine($"\t{BuildCommand.COMMAND_NAME.PadRight(NAME_WIDTH)} {BuildCommand.COMMAND_DESCRIPTION}"); - - Console.WriteLine("\t"); - Console.WriteLine("Command to init the Electron Application:"); - Console.WriteLine("\t"); - Console.WriteLine($"\t{InitCommand.COMMAND_NAME.PadRight(NAME_WIDTH)} {InitCommand.COMMAND_DESCRIPTION}"); - - Console.WriteLine("\t"); - Console.WriteLine("Command to add a custom npm packages to the Electron Application:"); - Console.WriteLine("\t"); - Console.WriteLine($"\t{AddCommand.COMMAND_NAME.PadRight(NAME_WIDTH)} {AddCommand.COMMAND_DESCRIPTION}"); - - Console.WriteLine("\t"); - Console.WriteLine("Commands to see the current ElectronNET version number:"); - Console.WriteLine("\t"); - Console.WriteLine($"\t{VersionCommand.COMMAND_NAME.PadRight(NAME_WIDTH)} {VersionCommand.COMMAND_DESCRIPTION}"); - - Console.WriteLine("\t"); - Console.WriteLine("\t"); - Console.WriteLine("To get help on individual commands execute:"); - Console.WriteLine("\tdotnet electronize help "); - } - - private static void PrintUsage(string command) - { - switch (command) - { - case StartElectronCommand.COMMAND_NAME: - PrintUsage(StartElectronCommand.COMMAND_NAME, StartElectronCommand.COMMAND_DESCRIPTION, StartElectronCommand.CommandOptions, StartElectronCommand.COMMAND_ARGUMENTS); - break; - case BuildCommand.COMMAND_NAME: - PrintUsage(BuildCommand.COMMAND_NAME, BuildCommand.COMMAND_DESCRIPTION, BuildCommand.CommandOptions, BuildCommand.COMMAND_ARGUMENTS); - break; - case InitCommand.COMMAND_NAME: - PrintUsage(InitCommand.COMMAND_NAME, InitCommand.COMMAND_DESCRIPTION, InitCommand.CommandOptions, InitCommand.COMMAND_ARGUMENTS); - break; - case AddCommand.COMMAND_NAME: - PrintUsage(AddCommand.COMMAND_NAME, AddCommand.COMMAND_DESCRIPTION, AddCommand.CommandOptions, AddCommand.COMMAND_ARGUMENTS); - break; - case VersionCommand.COMMAND_NAME: - PrintUsage(VersionCommand.COMMAND_NAME, VersionCommand.COMMAND_DESCRIPTION, VersionCommand.CommandOptions, VersionCommand.COMMAND_ARGUMENTS); - break; - default: - Console.Error.WriteLine($"Unknown command {command}"); - PrintUsage(); - break; - } - } - - private static void PrintUsage(string command, string description, IList options, string arguments) - { - const int INDENT = 3; - - Console.WriteLine($"{command}: "); - Console.WriteLine($"{new string(' ', INDENT)}{description}"); - Console.WriteLine("\t"); - - - if (!string.IsNullOrEmpty(arguments)) - { - Console.WriteLine($"{new string(' ', INDENT)}dotnet electronize {command} [arguments] [options]"); - Console.WriteLine($"{new string(' ', INDENT)}Arguments:"); - Console.WriteLine($"{new string(' ', INDENT * 2)}{arguments}"); - } - else - { - Console.WriteLine($"{new string(' ', INDENT)}dotnet electronize {command} [options]"); - } - - const int SWITCH_COLUMN_WIDTH = 40; - - Console.WriteLine($"{new string(' ', INDENT)}Options:"); - foreach (var option in options) - { - StringBuilder stringBuilder = new StringBuilder(); - if (option.ShortSwitch != null) - { - stringBuilder.Append($"{option.ShortSwitch.PadRight(6)} | "); - } - - stringBuilder.Append($"{option.Switch}"); - if (stringBuilder.Length < SWITCH_COLUMN_WIDTH) - { - stringBuilder.Append(new string(' ', SWITCH_COLUMN_WIDTH - stringBuilder.Length)); - } - - stringBuilder.Append(option.Description); - - - Console.WriteLine($"{new string(' ', INDENT * 2)}{stringBuilder.ToString()}"); - } - } - - private static string Version - { - get - { - AssemblyInformationalVersionAttribute attribute = null; - try - { - attribute = Assembly.GetEntryAssembly().GetCustomAttribute(); - } - catch (AmbiguousMatchException) - { - // Catch exception and continue if multiple attributes are found. - } - return attribute?.InformationalVersion; - } - } - } -} diff --git a/src/ElectronNET.CLI/Properties/launchSettings.json b/src/ElectronNET.CLI/Properties/launchSettings.json deleted file mode 100644 index 5adf9cdb..00000000 --- a/src/ElectronNET.CLI/Properties/launchSettings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "profiles": { - "ElectronNET.CLI": { - "commandName": "Project", - "commandLineArgs": "start /project-path \"$(SolutionDir)ElectronNET.WebApp\" /watch" - } - } -} \ No newline at end of file diff --git a/src/ElectronNET.CLI/SimpleCommandLineParser.cs b/src/ElectronNET.CLI/SimpleCommandLineParser.cs deleted file mode 100644 index 9da5d735..00000000 --- a/src/ElectronNET.CLI/SimpleCommandLineParser.cs +++ /dev/null @@ -1,54 +0,0 @@ -๏ปฟusing System; -using System.Collections.Generic; -using System.Linq; - -namespace ElectronNET.CLI -{ - public class SimpleCommandLineParser - { - public SimpleCommandLineParser() - { - Arguments = new Dictionary(); - } - public IDictionary Arguments { get; private set; } - public void Parse(string[] args) - { - var currentName = ""; - var values = new List(); - foreach (var arg in args) - { - if (arg.StartsWith("/")) - { - if (currentName != "") - Arguments[currentName] = values.ToArray(); - values.Clear(); - currentName = arg.Substring(1); - } - else if (currentName == "") - Arguments[arg] = new string[0]; - else - values.Add(arg); - } - if (currentName != "") - Arguments[currentName] = values.ToArray(); - - Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine($"Arguments: \n\t{string.Join("\n\t",Arguments.Keys.Select(i => $"{i} = {string.Join(" ", Arguments[i])}"))}"); - Console.ResetColor(); - } - public bool Contains(string name) - { - return Arguments.ContainsKey(name); - } - - internal bool TryGet(string key, out string[] value) - { - value = null; - if (!Contains(key)) { - return false; - } - value = Arguments[key]; - return true; - } - } -} \ No newline at end of file diff --git a/src/ElectronNET.CLI/devCleanup.cmd b/src/ElectronNET.CLI/devCleanup.cmd deleted file mode 100644 index 669e3af4..00000000 --- a/src/ElectronNET.CLI/devCleanup.cmd +++ /dev/null @@ -1,3 +0,0 @@ -rd /s /q %userprofile%\.nuget\packages\.tools\electronnet.cli -rd /s /q %userprofile%\.nuget\packages\electronnet.cli -del ..\artifacts\ElectronNET.CLI.1.0.0.nupkg \ No newline at end of file diff --git a/src/ElectronNET.CLI/devCleanup.sh b/src/ElectronNET.CLI/devCleanup.sh deleted file mode 100644 index b8b7e1f7..00000000 --- a/src/ElectronNET.CLI/devCleanup.sh +++ /dev/null @@ -1 +0,0 @@ -rm -rf ~/.nuget/packages/electronnet.cli \ No newline at end of file From c0c3aaebdced3cdb173dc0e76eab143753eaf008 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 13:08:17 +0200 Subject: [PATCH 07/46] ElectronNET.Host: Remove build-helper and manifest (no longer needed) --- src/ElectronNET.Host/.vscode/launch.json | 12 ----- src/ElectronNET.Host/build-helper.js | 53 --------------------- src/ElectronNET.Host/electron.manifest.json | 35 -------------- 3 files changed, 100 deletions(-) delete mode 100644 src/ElectronNET.Host/build-helper.js delete mode 100644 src/ElectronNET.Host/electron.manifest.json diff --git a/src/ElectronNET.Host/.vscode/launch.json b/src/ElectronNET.Host/.vscode/launch.json index fb126aee..bb2469e6 100644 --- a/src/ElectronNET.Host/.vscode/launch.json +++ b/src/ElectronNET.Host/.vscode/launch.json @@ -15,18 +15,6 @@ "--test=true", "--blub=wuhuu" ] - }, - { - "type": "node", - "request": "launch", - "name": "Launch build-helper", - "program": "${workspaceFolder}/build-helper.js", - "skipFiles": [ - "/**" - ], - "args": [ - "electron.manifest.json" - ] } ] } \ No newline at end of file diff --git a/src/ElectronNET.Host/build-helper.js b/src/ElectronNET.Host/build-helper.js deleted file mode 100644 index d8ebc944..00000000 --- a/src/ElectronNET.Host/build-helper.js +++ /dev/null @@ -1,53 +0,0 @@ -const manifestFileName = process.argv[2]; -// @ts-ignore -const manifestFile = require('./bin/' + manifestFileName); -const dasherize = require('dasherize'); -const fs = require('fs'); - -const builderConfiguration = { ...manifestFile.build }; -if(process.argv.length > 3) { - builderConfiguration.buildVersion = process.argv[3]; -} -if(builderConfiguration.hasOwnProperty('buildVersion')) { - // @ts-ignore - const packageJson = require('./package'); - packageJson.name = dasherize(manifestFile.name || 'electron-net'); - packageJson.author = manifestFile.author || ''; - packageJson.version = builderConfiguration.buildVersion; - packageJson.description = manifestFile.description || ''; - - fs.writeFile('./package.json', JSON.stringify(packageJson), (error) => { - if(error) { - console.log(error.message); - } - }); - - try { - // @ts-ignore - const packageLockJson = require('./package-lock'); - packageLockJson.name = dasherize(manifestFile.name || 'electron-net'); - packageLockJson.author = manifestFile.author || ''; - packageLockJson.version = builderConfiguration.buildVersion; - fs.writeFile('./package-lock.json', JSON.stringify(packageLockJson), (error) => { - if(error) { - console.log(error.message); - } - }); - } catch (error) { - // ignore missing module - } -} - -const builderConfigurationString = JSON.stringify(builderConfiguration); -fs.writeFile('./bin/electron-builder.json', builderConfigurationString, (error) => { - if(error) { - console.log(error.message); - } -}); - -const manifestContent = JSON.stringify(manifestFile); -fs.writeFile('./bin/electron.manifest.json', manifestContent, (error) => { - if(error) { - console.log(error.message); - } -}); \ No newline at end of file diff --git a/src/ElectronNET.Host/electron.manifest.json b/src/ElectronNET.Host/electron.manifest.json deleted file mode 100644 index 014fdec0..00000000 --- a/src/ElectronNET.Host/electron.manifest.json +++ /dev/null @@ -1,35 +0,0 @@ -๏ปฟ{ - "executable": "{{executable}}", - "splashscreen": { - "imageFile": "" - }, - "name": "{{executable}}", - "author": "", - "singleInstance": false, - "environment": "Production", - "build": { - "appId": "com.{{executable}}.app", - "productName": "{{executable}}", - "copyright": "Copyright ยฉ 2020", - "buildVersion": "1.0.0", - "compression": "maximum", - "directories": { - "output": "../../../bin/Desktop" - }, - "extraResources": [ - { - "from": "./bin", - "to": "bin", - "filter": [ "**/*" ] - } - ], - "files": [ - { - "from": "./ElectronHostHook/node_modules", - "to": "ElectronHostHook/node_modules", - "filter": [ "**/*" ] - }, - "**/*" - ] - } -} \ No newline at end of file From 0dca0e90f9dc64a22ebdb81bbbf685da2597a46f Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 13:16:10 +0200 Subject: [PATCH 08/46] ElectronNET.Host: Update build configuration - changes: - Update all packages to their latest version - Drop tslint (replaced by eslint) - Update node types to 22 => nodejs => 22 is minimum now - Also use latest TypeScript version - Finally, reference ElectronHostHook has a package dependency this avoids conflicts of dependency versions between main code and host-hook code, by letting npm resolve them --- .../ElectronHostHook/package-lock.json | 346 +- .../ElectronHostHook/package.json | 6 +- .../ElectronHostHook/tsconfig.json | 19 +- src/ElectronNET.Host/package-lock.json | 2893 +++++++---------- src/ElectronNET.Host/package.json | 19 +- src/ElectronNET.Host/tsconfig.json | 21 +- src/ElectronNET.Host/tslint.json | 129 - 7 files changed, 1232 insertions(+), 2201 deletions(-) delete mode 100644 src/ElectronNET.Host/tslint.json diff --git a/src/ElectronNET.Host/ElectronHostHook/package-lock.json b/src/ElectronNET.Host/ElectronHostHook/package-lock.json index 373eefec..fa31f12d 100644 --- a/src/ElectronNET.Host/ElectronHostHook/package-lock.json +++ b/src/ElectronNET.Host/ElectronHostHook/package-lock.json @@ -1,50 +1,49 @@ { "name": "electron-host-hook", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "electron-host-hook", "version": "1.0.0", "license": "MIT", + "dependencies": { + "socket.io": "^4.8.1" + }, "devDependencies": { - "socket.io": "^4.6.1", - "typescript": "^5.0.2" + "typescript": "^5.9.3" } }, "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", - "dev": true - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" }, "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", - "dev": true, + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/node": { - "version": "18.15.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.5.tgz", - "integrity": "sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==", - "dev": true + "version": "24.7.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.2.tgz", + "integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.14.0" + } }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -57,16 +56,16 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true, + "license": "MIT", "engines": { "node": "^4.5.0 || >= 5.9" } }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -75,7 +74,7 @@ "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -85,12 +84,12 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -102,31 +101,30 @@ } }, "node_modules/engine.io": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.1.tgz", - "integrity": "sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==", - "dev": true, + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", + "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", + "license": "MIT", "dependencies": { - "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/engine.io-parser": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", - "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==", - "dev": true, + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -135,7 +133,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -144,7 +142,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -153,16 +151,16 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -171,42 +169,44 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/socket.io": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz", - "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==", - "dev": true, + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", + "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.4.1", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" + "socket.io-parser": "~4.2.4" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/socket.io-adapter": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", - "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", - "dev": true, + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "license": "MIT", "dependencies": { - "ws": "~8.11.0" + "debug": "~4.3.4", + "ws": "~8.17.1" } }, "node_modules/socket.io-parser": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.2.tgz", - "integrity": "sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==", - "dev": true, + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" @@ -216,38 +216,45 @@ } }, "node_modules/typescript": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", - "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=12.20" + "node": ">=14.17" } }, + "node_modules/undici-types": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz", + "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==", + "license": "MIT" + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -258,184 +265,5 @@ } } } - }, - "dependencies": { - "@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", - "dev": true - }, - "@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "18.15.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.5.tgz", - "integrity": "sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==", - "dev": true - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "engine.io": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.1.tgz", - "integrity": "sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==", - "dev": true, - "requires": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" - } - }, - "engine.io-parser": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", - "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "socket.io": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz", - "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.4.1", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" - } - }, - "socket.io-adapter": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", - "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", - "dev": true, - "requires": { - "ws": "~8.11.0" - } - }, - "socket.io-parser": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.2.tgz", - "integrity": "sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==", - "dev": true, - "requires": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - } - }, - "typescript": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", - "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true - }, - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, - "requires": {} - } } } diff --git a/src/ElectronNET.Host/ElectronHostHook/package.json b/src/ElectronNET.Host/ElectronHostHook/package.json index 6c3d73a0..6489dfa2 100644 --- a/src/ElectronNET.Host/ElectronHostHook/package.json +++ b/src/ElectronNET.Host/ElectronHostHook/package.json @@ -13,7 +13,9 @@ "author": "Gregor Biswanger", "license": "MIT", "devDependencies": { - "socket.io": "^4.6.1", - "typescript": "^5.0.2" + "typescript": "^5.9.3" + }, + "dependencies": { + "socket.io": "^4.8.1" } } diff --git a/src/ElectronNET.Host/ElectronHostHook/tsconfig.json b/src/ElectronNET.Host/ElectronHostHook/tsconfig.json index 01f4d55f..55509f88 100644 --- a/src/ElectronNET.Host/ElectronHostHook/tsconfig.json +++ b/src/ElectronNET.Host/ElectronHostHook/tsconfig.json @@ -1,11 +1,12 @@ { - "compilerOptions": { - "module": "commonjs", - "sourceMap": true, - "skipLibCheck": true, - "target": "es2015" - }, - "exclude": [ - "node_modules" - ] + "compilerOptions": { + "module": "commonjs", + "target": "ES2019", + "sourceMap": true, + "skipLibCheck": true, + "newLine": "crlf" + }, + "exclude": [ + "node_modules" + ] } \ No newline at end of file diff --git a/src/ElectronNET.Host/package-lock.json b/src/ElectronNET.Host/package-lock.json index 7b64a91f..4a45d86d 100644 --- a/src/ElectronNET.Host/package-lock.json +++ b/src/ElectronNET.Host/package-lock.json @@ -1,7 +1,7 @@ { "name": "electron.net.host", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -10,72 +10,231 @@ "license": "MIT", "dependencies": { "dasherize": "^2.0.0", - "electron-updater": "^5.3.0", - "image-size": "^1.0.2", + "electron-host-hook": "file:./ElectronHostHook", + "electron-updater": "^6.6.2", + "image-size": "^1.2.1", "portscanner": "^2.2.0", - "socket.io": "^4.6.1" + "socket.io": "^4.8.1" }, "devDependencies": { - "@types/node": "^18.15.5", + "@types/node": "^22.18", "electron": "^30.0.3", - "tslint": "^6.1.3", - "typescript": "^5.0.2" + "eslint": "^9.37.0", + "typescript": "^5.9.3" } }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "ElectronHostHook": { + "name": "electron-host-hook", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "socket.io": "^4.8.1" + }, + "devDependencies": { + "typescript": "^5.9.3" + } + }, + "node_modules/@electron/get": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" }, "engines": { - "node": ">=6.9.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "node_modules/@eslint/config-helpers": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.0.tgz", + "integrity": "sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==", "dev": true, + "dependencies": { + "@eslint/core": "^0.16.0" + }, "engines": { - "node": ">=6.9.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "node_modules/@eslint/core": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@types/json-schema": "^7.0.15" }, "engines": { - "node": ">=6.9.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@electron/get": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.2.tgz", - "integrity": "sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==", + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "dependencies": { - "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "got": "^11.8.5", - "progress": "^2.0.3", - "semver": "^6.2.0", - "sumchecker": "^3.0.1" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=12" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "optionalDependencies": { - "global-agent": "^3.0.0" + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.37.0.tgz", + "integrity": "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.16.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@sindresorhus/is": { @@ -91,9 +250,9 @@ } }, "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", @@ -119,23 +278,30 @@ "@types/responselike": "^1.0.0" } }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" - }, "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", "dependencies": { "@types/node": "*" } }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/keyv": { @@ -148,28 +314,26 @@ } }, "node_modules/@types/node": { - "version": "18.15.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.5.tgz", - "integrity": "sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==" + "version": "22.18.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.10.tgz", + "integrity": "sha512-anNG/V/Efn/YZY4pRzbACnKxNKoBng2VTFydVu8RRs5hQjikP8CQfaeAV59VFSCzKNp90mXiVXW2QzV56rwMrg==", + "dependencies": { + "undici-types": "~6.21.0" + } }, "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "dev": true, "dependencies": { "@types/node": "*" } }, - "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==" - }, "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, "optional": true, "dependencies": { @@ -188,16 +352,56 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/argparse": { @@ -231,13 +435,14 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, "optional": true }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", @@ -254,9 +459,9 @@ } }, "node_modules/builder-util-runtime": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", - "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.3.1.tgz", + "integrity": "sha512-2/egrNDDnRaxVwK3A+cJq6UOlqOdedGA7JPqCeJjN2Zjk1/QB/6QUi3b714ScIGS7HafFXTyzJEOr5b44I3kvQ==", "dependencies": { "debug": "^4.3.4", "sax": "^1.2.4" @@ -265,15 +470,6 @@ "node": ">=12.0.0" } }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -284,9 +480,9 @@ } }, "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dev": true, "dependencies": { "clone-response": "^1.0.2", @@ -301,27 +497,29 @@ "node": ">=8" } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/clone-response": { @@ -337,24 +535,21 @@ } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/concat-map": { @@ -364,9 +559,9 @@ "dev": true }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "engines": { "node": ">= 0.6" } @@ -383,17 +578,31 @@ "node": ">= 0.10" } }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/dasherize": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", "integrity": "sha512-APql/TZ6FdLEpf2z7/X2a2zyqK8juYtqaSVqxw9mYoQ64CXkfU15AeLh8pUszT8+fnYjgm6t0aIYpWKJbnLkuA==" }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -431,6 +640,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "node_modules/defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", @@ -440,13 +655,32 @@ "node": ">=10" } }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "optional": true, "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -464,19 +698,10 @@ "dev": true, "optional": true }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/electron": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/electron/-/electron-30.0.3.tgz", - "integrity": "sha512-h+suwx6e0fnv/9wi0/cmCMtG+4LrPzJZa+3DEEpxcPcP+pcWnBI70t8QspxgMNIh2wzXLMD9XVqrLkEbiBAInw==", + "version": "30.5.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-30.5.1.tgz", + "integrity": "sha512-AhL7+mZ8Lg14iaNfoYTkXQ2qee8mmsQyllKdqxlpv/zrKgfxz6jNVtcRRbQtLxtF8yzcImWdfTQROpYiPumdbw==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -491,20 +716,23 @@ "node": ">= 12.20.55" } }, + "node_modules/electron-host-hook": { + "resolved": "ElectronHostHook", + "link": true + }, "node_modules/electron-updater": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-5.3.0.tgz", - "integrity": "sha512-iKEr7yQBcvnQUPnSDYGSWC9t0eF2YbZWeYYYZzYxdl+HiRejXFENjYMnYjoOm2zxyD6Cr2JTHZhp9pqxiXuCOw==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.6.2.tgz", + "integrity": "sha512-Cr4GDOkbAUqRHP5/oeOmH/L2Bn6+FQPxVLZtPbcmKZC63a1F3uu5EefYOssgZXG3u/zBlubbJ5PJdITdMVggbw==", "dependencies": { - "@types/semver": "^7.3.6", - "builder-util-runtime": "9.1.1", - "fs-extra": "^10.0.0", + "builder-util-runtime": "9.3.1", + "fs-extra": "^10.1.0", "js-yaml": "^4.1.0", "lazy-val": "^1.0.5", "lodash.escaperegexp": "^4.1.2", "lodash.isequal": "^4.5.0", - "semver": "^7.3.5", - "typed-emitter": "^2.1.0" + "semver": "^7.6.3", + "tiny-typed-emitter": "^2.1.0" } }, "node_modules/electron-updater/node_modules/fs-extra": { @@ -521,9 +749,9 @@ } }, "node_modules/electron-updater/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dependencies": { "universalify": "^2.0.0" }, @@ -532,12 +760,9 @@ } }, "node_modules/electron-updater/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "bin": { "semver": "bin/semver.js" }, @@ -546,59 +771,74 @@ } }, "node_modules/electron-updater/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { "node": ">= 10.0.0" } }, "node_modules/electron/node_modules/@types/node": { - "version": "20.12.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", - "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", + "version": "20.19.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.21.tgz", + "integrity": "sha512-CsGG2P3I5y48RPMfprQGfy4JPRZ6csfC3ltBZSRItG3ngggmNY/qs2uZKp4p9VbrpqNNSMzUZNFZKzgOGnd/VA==", "dev": true, "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.21.0" } }, "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "dependencies": { "once": "^1.4.0" } }, "node_modules/engine.io": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", - "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", + "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", "dependencies": { - "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/engine.io-parser": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", - "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "engines": { "node": ">=10.0.0" } }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -608,6 +848,26 @@ "node": ">=6" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", @@ -620,7 +880,6 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "optional": true, "engines": { "node": ">=10" }, @@ -628,87 +887,259 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, + "node_modules/eslint": { + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.37.0.tgz", + "integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.4.0", + "@eslint/core": "^0.16.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.37.0", + "@eslint/plugin-kit": "^0.4.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, - "bin": { - "extract-zip": "cli.js" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, "engines": { - "node": ">= 10.17.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "dependencies": { - "pend": "~1.2.0" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=0.10" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "optional": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" } }, "node_modules/get-stream": { @@ -726,24 +1157,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "is-glob": "^4.0.3" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=10.13.0" } }, "node_modules/global-agent": { @@ -765,14 +1188,11 @@ } }, "node_modules/global-agent/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -780,15 +1200,41 @@ "node": ">=10" } }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "optional": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "optional": true, "engines": { "node": ">= 0.4" }, @@ -822,61 +1268,36 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "optional": true, "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "optional": true, - "engines": { - "node": ">= 0.4" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "dev": true }, "node_modules/http2-wrapper": { @@ -892,10 +1313,19 @@ "node": ">=10.19.0" } }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/image-size": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", - "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", + "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", "dependencies": { "queue": "6.0.2" }, @@ -903,17 +1333,32 @@ "image-size": "bin/image-size.js" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.x" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" } }, "node_modules/inherits": { @@ -921,16 +1366,25 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { - "has": "^1.0.3" + "is-extglob": "^2.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, "node_modules/is-number-like": { @@ -941,10 +1395,10 @@ "lodash.isfinite": "^3.3.2" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "node_modules/js-yaml": { @@ -964,6 +1418,18 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -981,9 +1447,9 @@ } }, "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "dependencies": { "json-buffer": "3.0.1" @@ -994,6 +1460,34 @@ "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==" }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -1007,13 +1501,20 @@ "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead." }, "node_modules/lodash.isfinite": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -1023,17 +1524,6 @@ "node": ">=8" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/matcher": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", @@ -1087,31 +1577,16 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/negotiator": { "version": "0.6.3", @@ -1160,6 +1635,23 @@ "wrappy": "1" } }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/p-cancelable": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", @@ -1169,38 +1661,92 @@ "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/portscanner": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", - "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { - "async": "^2.6.0", - "is-number-like": "^1.0.3" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=0.4", - "npm": ">=1.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/portscanner": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "dependencies": { + "async": "^2.6.0", + "is-number-like": "^1.0.3" + }, + "engines": { + "node": ">=0.4", + "npm": ">=1.0.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" } }, "node_modules/progress": { @@ -1213,15 +1759,24 @@ } }, "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/queue": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", @@ -1242,29 +1797,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/responselike": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", @@ -1295,25 +1842,10 @@ "node": ">=8.0" } }, - "node_modules/rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "optional": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "optional": true - }, "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" }, "node_modules/semver": { "version": "6.3.1", @@ -1347,28 +1879,67 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/socket.io": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz", - "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", + "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.4.1", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" + "socket.io-parser": "~4.2.4" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/socket.io-adapter": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", - "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dependencies": { - "ws": "~8.11.0" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/socket.io-parser": { @@ -1383,133 +1954,96 @@ "node": ">=10.0.0" } }, - "node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true, - "optional": true - }, - "node_modules/sumchecker": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", - "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "dev": true, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dependencies": { - "debug": "^4.1.0" + "ms": "^2.1.3" }, "engines": { - "node": ">= 8.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dependencies": { - "has-flag": "^3.0.0" + "ms": "^2.1.3" }, "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "optional": true }, - "node_modules/tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.13.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" - }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "engines": { - "node": ">=4.8.0" + "node": ">=8" }, - "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tslint/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" } }, - "node_modules/tslint/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "has-flag": "^4.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/tslint/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" + "engines": { + "node": ">=8" } }, - "node_modules/tslint/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "node_modules/tiny-typed-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", + "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==" }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { - "tslib": "^1.8.1" + "prelude-ls": "^1.2.1" }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" + "engines": { + "node": ">= 0.8.0" } }, "node_modules/type-fest": { @@ -1525,32 +2059,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typed-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz", - "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==", - "optionalDependencies": { - "rxjs": "*" - } - }, "node_modules/typescript": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", - "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=12.20" + "node": ">=14.17" } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" }, "node_modules/universalify": { "version": "0.1.2", @@ -1561,6 +2086,15 @@ "node": ">= 4.0.0" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -1569,6 +2103,30 @@ "node": ">= 0.8" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -1576,15 +2134,15 @@ "dev": true }, "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -1595,11 +2153,6 @@ } } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -1609,1243 +2162,17 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@electron/get": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.2.tgz", - "integrity": "sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "global-agent": "^3.0.0", - "got": "^11.8.5", - "progress": "^2.0.3", - "semver": "^6.2.0", - "sumchecker": "^3.0.1" - } - }, - "@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true - }, - "@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" - }, - "@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" - }, - "@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", - "requires": { - "@types/node": "*" - } - }, - "@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, - "@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, - "requires": { - "@types/node": "*" - } }, - "@types/node": { - "version": "18.15.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.5.tgz", - "integrity": "sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==" - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==" - }, - "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" - }, - "boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "builder-util-runtime": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", - "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", - "requires": { - "debug": "^4.3.4", - "sax": "^1.2.4" - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", - "dev": true - }, - "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true - }, - "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - } - } - }, - "clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "dasherize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", - "integrity": "sha512-APql/TZ6FdLEpf2z7/X2a2zyqK8juYtqaSVqxw9mYoQ64CXkfU15AeLh8pUszT8+fnYjgm6t0aIYpWKJbnLkuA==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true - } - } - }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true - }, - "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, - "optional": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, - "optional": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "electron": { - "version": "30.0.3", - "resolved": "https://registry.npmjs.org/electron/-/electron-30.0.3.tgz", - "integrity": "sha512-h+suwx6e0fnv/9wi0/cmCMtG+4LrPzJZa+3DEEpxcPcP+pcWnBI70t8QspxgMNIh2wzXLMD9XVqrLkEbiBAInw==", - "dev": true, - "requires": { - "@electron/get": "^2.0.0", - "@types/node": "^20.9.0", - "extract-zip": "^2.0.1" - }, - "dependencies": { - "@types/node": { - "version": "20.12.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", - "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", - "dev": true, - "requires": { - "undici-types": "~5.26.4" - } - } - } - }, - "electron-updater": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-5.3.0.tgz", - "integrity": "sha512-iKEr7yQBcvnQUPnSDYGSWC9t0eF2YbZWeYYYZzYxdl+HiRejXFENjYMnYjoOm2zxyD6Cr2JTHZhp9pqxiXuCOw==", - "requires": { - "@types/semver": "^7.3.6", - "builder-util-runtime": "9.1.1", - "fs-extra": "^10.0.0", - "js-yaml": "^4.1.0", - "lazy-val": "^1.0.5", - "lodash.escaperegexp": "^4.1.2", - "lodash.isequal": "^4.5.0", - "semver": "^7.3.5", - "typed-emitter": "^2.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "engine.io": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", - "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", - "requires": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" - } - }, - "engine.io-parser": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", - "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==" - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true, - "optional": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "optional": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, - "optional": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", - "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "dev": true, - "optional": true, - "requires": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "dependencies": { - "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "optional": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, - "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "optional": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "optional": true - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - } - }, - "image-size": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", - "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", - "requires": { - "queue": "6.0.2" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-number-like": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", - "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", - "requires": { - "lodash.isfinite": "^3.3.2" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "optional": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "lazy-val": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", - "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==" - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" - }, - "lodash.isfinite": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==" - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "matcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, - "optional": true, - "requires": { - "escape-string-regexp": "^4.0.0" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "portscanner": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", - "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", - "requires": { - "async": "^2.6.0", - "is-number-like": "^1.0.3" - } - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "requires": { - "inherits": "~2.0.3" - } - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, - "responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, - "requires": { - "lowercase-keys": "^2.0.0" - } - }, - "roarr": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", - "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, - "optional": true, - "requires": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - } - }, - "rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "optional": true, - "requires": { - "tslib": "^2.1.0" + "engines": { + "node": ">=10" }, - "dependencies": { - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "optional": true - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true, - "optional": true - }, - "serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, - "optional": true, - "requires": { - "type-fest": "^0.13.1" - } - }, - "socket.io": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz", - "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==", - "requires": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.4.1", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" - } - }, - "socket.io-adapter": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", - "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", - "requires": { - "ws": "~8.11.0" - } - }, - "socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", - "requires": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - } - }, - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true, - "optional": true - }, - "sumchecker": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", - "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "dev": true, - "requires": { - "debug": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.13.0", - "tsutils": "^2.29.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - } - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, - "optional": true - }, - "typed-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz", - "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==", - "requires": { - "rxjs": "*" - } - }, - "typescript": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", - "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", - "dev": true - }, - "undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "requires": {} - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } } } diff --git a/src/ElectronNET.Host/package.json b/src/ElectronNET.Host/package.json index 81b0c053..183fca0a 100644 --- a/src/ElectronNET.Host/package.json +++ b/src/ElectronNET.Host/package.json @@ -12,16 +12,17 @@ "start": "tsc -p ." }, "dependencies": { - "dasherize": "^2.0.0", - "electron-updater": "^5.3.0", - "image-size": "^1.0.2", - "portscanner": "^2.2.0", - "socket.io": "^4.6.1" + "dasherize": "^2.0.0", + "electron-updater": "^6.6.2", + "image-size": "^1.2.1", + "portscanner": "^2.2.0", + "socket.io": "^4.8.1", + "electron-host-hook": "file:./ElectronHostHook" }, "devDependencies": { - "@types/node": "^18.15.5", - "electron": "^30.0.3", - "tslint": "^6.1.3", - "typescript": "^5.0.2" + "@types/node": "^22.18", + "electron": "^30.0.3", + "eslint": "^9.37.0", + "typescript": "^5.9.3" } } diff --git a/src/ElectronNET.Host/tsconfig.json b/src/ElectronNET.Host/tsconfig.json index ea3d493d..6c0db629 100644 --- a/src/ElectronNET.Host/tsconfig.json +++ b/src/ElectronNET.Host/tsconfig.json @@ -1,12 +1,13 @@ { - "compilerOptions": { - "module": "commonjs", - "target": "ES2019", - "sourceMap": true, - "skipLibCheck": true - }, - "exclude": [ - "node_modules", - "ElectronHostHook" - ] + "compilerOptions": { + "module": "commonjs", + "target": "ES2019", + "sourceMap": true, + "skipLibCheck": true, + "newLine": "crlf" + }, + "exclude": [ + "node_modules", + "ElectronHostHook" + ] } \ No newline at end of file diff --git a/src/ElectronNET.Host/tslint.json b/src/ElectronNET.Host/tslint.json deleted file mode 100644 index 4c7c0dce..00000000 --- a/src/ElectronNET.Host/tslint.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "rulesDirectory": [], - "rules": { - "arrow-return-shorthand": true, - "callable-types": true, - "class-name": true, - "comment-format": [ - true, - "check-space" - ], - "curly": true, - "deprecation": { - "severity": "warn" - }, - "eofline": true, - "forin": true, - "import-blacklist": [ - true, - "rxjs/Rx" - ], - "import-spacing": true, - "indent": [ - true, - "spaces" - ], - "interface-over-type-literal": true, - "label-position": true, - "max-line-length": [ - true, - 140 - ], - "member-access": false, - "member-ordering": [ - true, - { - "order": [ - "static-field", - "instance-field", - "static-method", - "instance-method" - ] - } - ], - "no-arg": true, - "no-bitwise": true, - "no-console": [ - true, - "debug", - "info", - "time", - "timeEnd", - "trace" - ], - "no-construct": true, - "no-debugger": true, - "no-duplicate-super": true, - "no-empty": false, - "no-empty-interface": true, - "no-eval": true, - "no-inferrable-types": [ - true, - "ignore-params" - ], - "no-misused-new": true, - "no-non-null-assertion": true, - "no-redundant-jsdoc": true, - "no-shadowed-variable": true, - "no-string-literal": false, - "no-string-throw": true, - "no-switch-case-fall-through": true, - "no-trailing-whitespace": true, - "no-unnecessary-initializer": true, - "no-unused-expression": true, - "no-use-before-declare": true, - "no-var-keyword": true, - "object-literal-sort-keys": false, - "one-line": [ - true, - "check-open-brace", - "check-catch", - "check-else", - "check-whitespace" - ], - "prefer-const": true, - "quotemark": [ - true, - "single" - ], - "radix": true, - "semicolon": [ - true, - "always" - ], - "triple-equals": [ - true, - "allow-null-check" - ], - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - } - ], - "unified-signatures": true, - "variable-name": false, - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-type" - ], - "no-output-on-prefix": true, - "use-input-property-decorator": true, - "use-output-property-decorator": true, - "use-host-property-decorator": true, - "no-input-rename": true, - "no-output-rename": true, - "use-life-cycle-interface": true, - "use-pipe-transform-interface": true, - "component-class-suffix": true, - "directive-class-suffix": true - } -} \ No newline at end of file From 5ea368bb16a5672311c16b7700080144f9759316 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 13:59:20 +0200 Subject: [PATCH 09/46] ElectronNET.Host: Update main.js with these changes: - Consume host-hook as a module - Use package.json instead of electron-manifest.json - Support new commandline flags: - unpackedelectron running in debug mode, electron first, so must launch dotnet - unpackeddotnet running in debug mode, dotnet first, do not launch dotnet - dotnetpacked running from electron-builder output, dotnet first, do not launch - {none of the above flags} running from electron-builder output, electron first, launch dotnet - electronforcedport specified by dotnet when dotnet-first, port is validated to be free - Removed 'watch' functionality (regular debugging is working now) - New feature to load a custom_main.js file, if present - Removed the 'electronWebPort' handling When ASP.Net is launched first, then the information which port it should use would be coming too late; anyway, there's no need for letting the port number round-trip all the way through the manifest file, loaded by main.js and then sent to dotnet. - Reworked handling of 'quit' message --- src/ElectronNET.Host/main.js | 639 +++++++++++++++++++---------------- 1 file changed, 356 insertions(+), 283 deletions(-) diff --git a/src/ElectronNET.Host/main.js b/src/ElectronNET.Host/main.js index 622342e0..4019948a 100644 --- a/src/ElectronNET.Host/main.js +++ b/src/ElectronNET.Host/main.js @@ -5,6 +5,7 @@ const path = require('path'); const cProcess = require('child_process').spawn; const portscanner = require('portscanner'); const { imageSize } = require('image-size'); +const { HookService } = require('electron-host-hook'); let io, server, browserWindows, ipc, apiProcess, loadURL; let appApi, menu, dialogApi, notification, tray, webContents; let globalShortcut, shellApi, screen, clipboard, autoUpdater; @@ -16,342 +17,414 @@ let dock; let launchFile; let launchUrl; -let manifestJsonFileName = 'electron.manifest.json'; -let watchable = false; +let manifestJsonFileName = 'package.json'; +let unpackedelectron = false; +let unpackeddotnet = false; +let dotnetpacked = false; +let electronforcedport; + if (app.commandLine.hasSwitch('manifest')) { - manifestJsonFileName = app.commandLine.getSwitchValue('manifest'); + manifestJsonFileName = app.commandLine.getSwitchValue('manifest'); } -if (app.commandLine.hasSwitch('watch')) { - watchable = true; +console.log('Entry!!!: '); + +if (app.commandLine.hasSwitch('unpackedelectron')) { + unpackedelectron = true; +} +else if (app.commandLine.hasSwitch('unpackeddotnet')) { + unpackeddotnet = true; +} +else if (app.commandLine.hasSwitch('dotnetpacked')) { + dotnetpacked = true; } -let currentBinPath = path.join(__dirname.replace('app.asar', ''), 'bin'); -let manifestJsonFilePath = path.join(currentBinPath, manifestJsonFileName); +if (app.commandLine.hasSwitch('electronforcedport')) { + electronforcedport = app.commandLine.getSwitchValue('electronforcedport'); +} -// if watch is enabled lets change the path -if (watchable) { - currentBinPath = path.join(__dirname, '../../'); // go to project directory - manifestJsonFilePath = path.join(currentBinPath, manifestJsonFileName); +// Custom startup hook: look for custom_main.js and invoke its onStartup(host) if present. +// If the hook returns false, abort Electron startup. +try { + const fs = require('fs'); + const customMainPath = path.join(__dirname, 'custom_main.js'); + if (fs.existsSync(customMainPath)) { + const customMain = require(customMainPath); + if (customMain && typeof customMain.onStartup === 'function') { + const continueStartup = customMain.onStartup(globalThis); + if (continueStartup === false) { + ////console.log('custom_main.js onStartup returned false. Exiting Electron host.'); + // Ensure the app terminates immediately before further initialization. + // Use app.exit to allow Electron to perform its shutdown, fallback to process.exit. + try { app.exit(0); } catch (err) { process.exit(0); } + } + } else { + console.warn('custom_main.js found but no onStartup function exported.'); + } + } +} catch (err) { + console.error('Error while executing custom_main.js:', err); +} + +const currentPath = __dirname; +let currentBinPath = path.join(currentPath.replace('app.asar', ''), 'bin'); +let manifestJsonFilePath = path.join(currentPath, manifestJsonFileName); + +// if running unpackedelectron, lets change the path +if (unpackedelectron || unpackeddotnet) { + console.log('unpackedelectron! dir: ' + currentPath); + + manifestJsonFilePath = path.join(currentPath, manifestJsonFileName); + currentBinPath = path.join(currentPath, '../'); // go to project directory } // handle macOS events for opening the app with a file, etc app.on('will-finish-launching', () => { - app.on('open-file', (evt, file) => { - evt.preventDefault(); - launchFile = file; - }); - app.on('open-url', (evt, url) => { - evt.preventDefault(); - launchUrl = url; - }); + app.on('open-file', (evt, file) => { + evt.preventDefault(); + launchFile = file; + }); + app.on('open-url', (evt, url) => { + evt.preventDefault(); + launchUrl = url; + }); }); const manifestJsonFile = require(manifestJsonFilePath); -if (manifestJsonFile.singleInstance || manifestJsonFile.aspCoreBackendPort) { - const mainInstance = app.requestSingleInstanceLock(); - app.on('second-instance', (events, args = []) => { - args.forEach((parameter) => { - const words = parameter.split('='); - - if (words.length > 1) { - app.commandLine.appendSwitch(words[0].replace('--', ''), words[1]); - } else { - app.commandLine.appendSwitch(words[0].replace('--', '')); - } + +if (manifestJsonFile.singleInstance) { + const mainInstance = app.requestSingleInstanceLock(); + app.on('second-instance', (events, args = []) => { + args.forEach((parameter) => { + const words = parameter.split('='); + + if (words.length > 1) { + app.commandLine.appendSwitch(words[0].replace('--', ''), words[1]); + } else { + app.commandLine.appendSwitch(words[0].replace('--', '')); + } + }); + + const windows = BrowserWindow.getAllWindows(); + if (windows.length) { + if (windows[0].isMinimized()) { + windows[0].restore(); + } + windows[0].focus(); + } }); - const windows = BrowserWindow.getAllWindows(); - if (windows.length) { - if (windows[0].isMinimized()) { - windows[0].restore(); - } - windows[0].focus(); + if (!mainInstance) { + app.quit(); } - }); +} - if (!mainInstance) { - app.quit(); - } +// Collect user supplied command line args (excluding those handled by Electron host itself) +function getForwardedArgs() { + const skipSwitches = new Set(['unpackedelectron', 'unpackeddotnet', 'dotnetpacked']); + return process.argv.slice(2).filter(arg => { + if (!arg) return false; + // Node/Electron internal or we already process them + if (arg.startsWith('--manifest')) return false; + const cleaned = arg.replace(/^--/, '').replace(/^\//, ''); + if (skipSwitches.has(cleaned)) return false; + if (cleaned.startsWith('inspect')) return false; + if (cleaned.startsWith('remote-debugging-port')) return false; + // We add /electronPort ourselves later + if (cleaned.startsWith('electronPort=')) return false; + if (cleaned.startsWith('electronWebPort=')) return false; + return true; + }); } +const forwardedArgs = getForwardedArgs(); + app.on('ready', () => { - // Fix ERR_UNKNOWN_URL_SCHEME using file protocol - // https://github.com/electron/electron/issues/23757 - protocol.registerFileProtocol('file', (request, callback) => { - const pathname = request.url.replace('file:///', ''); - callback(pathname); - }); - - if (isSplashScreenEnabled()) { - startSplashScreen(); - } - // Added default port as configurable for port restricted environments. - let defaultElectronPort = 8000; - if (manifestJsonFile.electronPort) { - defaultElectronPort = manifestJsonFile.electronPort; - } - // hostname needs to be localhost, otherwise Windows Firewall will be triggered. - portscanner.findAPortNotInUse(defaultElectronPort, 65535, 'localhost', function (error, port) { - console.log('Electron Socket IO Port: ' + port); - startSocketApiBridge(port); - }); + // Fix ERR_UNKNOWN_URL_SCHEME using file protocol + // https://github.com/electron/electron/issues/23757 + ////protocol.registerFileProtocol('file', (request, callback) => { + //// const pathname = request.url.replace('file:///', ''); + //// callback(pathname); + ////}); + + if (isSplashScreenEnabled()) { + startSplashScreen(); + } + + if (electronforcedport) { + console.log('Electron Socket IO (forced) Port: ' + electronforcedport); + startSocketApiBridge(electronforcedport); + return; + } + + // Added default port as configurable for port restricted environments. + let defaultElectronPort = 8000; + if (manifestJsonFile.electronPort) { + defaultElectronPort = manifestJsonFile.electronPort; + } + + // hostname needs to be localhost, otherwise Windows Firewall will be triggered. + portscanner.findAPortNotInUse(defaultElectronPort, 65535, 'localhost', function (error, port) { + console.log('Electron Socket IO Port: ' + port); + startSocketApiBridge(port); + }); }); app.on('quit', async (event, exitCode) => { - await server.close(); - apiProcess.kill(); + try { + server.close(); + server.closeAllConnections(); + } catch (e) { + console.error(e); + } + + try { + apiProcess?.kill(); + } catch (e) { + console.error(e); + } + + try { + if (io && typeof io.close === 'function') { + io.close(); + } + } catch (e) { + console.error(e); + } }); function isSplashScreenEnabled() { - if (manifestJsonFile.hasOwnProperty('splashscreen')) { - if (manifestJsonFile.splashscreen.hasOwnProperty('imageFile')) { - return Boolean(manifestJsonFile.splashscreen.imageFile); + if (manifestJsonFile.hasOwnProperty('splashscreen')) { + if (manifestJsonFile.splashscreen.hasOwnProperty('imageFile')) { + return Boolean(manifestJsonFile.splashscreen.imageFile); + } } - } - return false; + return false; } function startSplashScreen() { - let imageFile = path.join(currentBinPath, manifestJsonFile.splashscreen.imageFile); - const startWindow = (width, height) => { - splashScreen = new BrowserWindow({ - width: width, - height: height, - transparent: true, - center: true, - frame: false, - closable: false, - resizable: false, - skipTaskbar: true, - alwaysOnTop: true, - show: true, - }); - splashScreen.setIgnoreMouseEvents(true); - - app.once('browser-window-created', () => { - splashScreen.destroy(); - }); - - const loadSplashscreenUrl = path.join(__dirname, 'splashscreen', 'index.html') + '?imgPath=' + imageFile; - splashScreen.loadURL('file://' + loadSplashscreenUrl); - splashScreen.once('closed', () => { - splashScreen = null; - }); - } + let imageFile = path.join(currentPath, manifestJsonFile.splashscreen.imageFile); + const startWindow = (width, height) => { + splashScreen = new BrowserWindow({ + width: width, + height: height, + transparent: true, + center: true, + frame: false, + closable: false, + resizable: false, + skipTaskbar: true, + alwaysOnTop: true, + show: true, + }); + splashScreen.setIgnoreMouseEvents(true); + + app.once('browser-window-created', () => { + splashScreen.destroy(); + }); + + const loadSplashscreenUrl = path.join(currentPath, 'splashscreen', 'index.html') + '?imgPath=' + imageFile; + splashScreen.loadURL('file://' + loadSplashscreenUrl); + splashScreen.once('closed', () => { + splashScreen = null; + }); + }; - if (manifestJsonFile.splashscreen.width && manifestJsonFile.splashscreen.height) { - startWindow(manifestJsonFile.splashscreen.width, manifestJsonFile.splashscreen.height); - return; - } + if (manifestJsonFile.splashscreen.width && manifestJsonFile.splashscreen.height) { + startWindow(manifestJsonFile.splashscreen.width, manifestJsonFile.splashscreen.height); + return; + } - imageSize(imageFile, (error, dimensions) => { - if (error) { - console.log(`load splashscreen error:`); - console.error(error); + imageSize(imageFile, (error, dimensions) => { + if (error) { + console.log(`load splashscreen error:`); + console.error(error); - throw new Error(error.message); - } + throw new Error(error.message); + } - startWindow(dimensions.width, dimensions.height) - }); + startWindow(dimensions.width, dimensions.height); + }); } function startSocketApiBridge(port) { - // instead of 'require('socket.io')(port);' we need to use this workaround - // otherwise the Windows Firewall will be triggered - server = require('http').createServer(); - const { Server } = require('socket.io'); - io = new Server({ - pingTimeout: 60000, // in ms, default is 5000 - pingInterval: 10000, // in ms, default is 25000 - }); - io.attach(server); - - server.listen(port, 'localhost'); - server.on('listening', function () { - console.log('Electron Socket started on port %s at %s', server.address().port, server.address().address); - // Now that socket connection is established, we can guarantee port will not be open for portscanner - if (watchable) { - startAspCoreBackendWithWatch(port); - } else { - startAspCoreBackend(port); - } - }); - - // prototype - app['mainWindowURL'] = ''; - app['mainWindow'] = null; - - // @ts-ignore - io.on('connection', (socket) => { - socket.on('disconnect', function (reason) { - console.log('Got disconnect! Reason: ' + reason); - try { - if (hostHook) { - const hostHookScriptFilePath = path.join(__dirname, 'ElectronHostHook', 'index.js'); - delete require.cache[require.resolve(hostHookScriptFilePath)]; - hostHook = undefined; - } - } catch (error) { - console.error(error.message); - } + // instead of 'require('socket.io')(port);' we need to use this workaround + // otherwise the Windows Firewall will be triggered + console.log('Electron Socket: starting...'); + server = require('http').createServer(); + const { Server } = require('socket.io'); + io = new Server({ + pingTimeout: 60000, // in ms, default is 5000 + pingInterval: 10000, // in ms, default is 25000 }); - - if (global['electronsocket'] === undefined) { - global['electronsocket'] = socket; - global['electronsocket'].setMaxListeners(0); - } - - console.log( - 'ASP.NET Core Application connected...', - 'global.electronsocket', - global['electronsocket'].id, - new Date() - ); - - if (appApi === undefined) appApi = require('./api/app')(socket, app); - if (browserWindows === undefined) browserWindows = require('./api/browserWindows')(socket, app); - if (commandLine === undefined) commandLine = require('./api/commandLine')(socket, app); - if (autoUpdater === undefined) autoUpdater = require('./api/autoUpdater')(socket); - if (ipc === undefined) ipc = require('./api/ipc')(socket); - if (menu === undefined) menu = require('./api/menu')(socket); - if (dialogApi === undefined) dialogApi = require('./api/dialog')(socket); - if (notification === undefined) notification = require('./api/notification')(socket); - if (tray === undefined) tray = require('./api/tray')(socket); - if (webContents === undefined) webContents = require('./api/webContents')(socket); - if (globalShortcut === undefined) globalShortcut = require('./api/globalShortcut')(socket); - if (shellApi === undefined) shellApi = require('./api/shell')(socket); - if (screen === undefined) screen = require('./api/screen')(socket); - if (clipboard === undefined) clipboard = require('./api/clipboard')(socket); - if (browserView === undefined) browserView = require('./api/browserView').browserViewApi(socket); - if (powerMonitor === undefined) powerMonitor = require('./api/powerMonitor')(socket); - if (nativeTheme === undefined) nativeTheme = require('./api/nativeTheme')(socket); - if (dock === undefined) dock = require('./api/dock')(socket); - - socket.on('register-app-open-file-event', (id) => { - global['electronsocket'] = socket; - - app.on('open-file', (event, file) => { - event.preventDefault(); - - global['electronsocket'].emit('app-open-file' + id, file); - }); - - if (launchFile) { - global['electronsocket'].emit('app-open-file' + id, launchFile); - } + io.attach(server); + + server.listen(port, 'localhost'); + server.on('listening', function () { + console.log('Electron Socket: listening on port %s at %s', server.address().port, server.address().address); + // Now that socket connection is established, we can guarantee port will not be open for portscanner + if (unpackedelectron) { + startAspCoreBackendUnpackaged(port); + } else if (!unpackeddotnet && !dotnetpacked) { + startAspCoreBackend(port); + } }); - socket.on('register-app-open-url-event', (id) => { - global['electronsocket'] = socket; - - app.on('open-url', (event, url) => { - event.preventDefault(); - - global['electronsocket'].emit('app-open-url' + id, url); - }); + // prototype + app['mainWindowURL'] = ''; + app['mainWindow'] = null; + + // @ts-ignore + io.on('connection', (socket) => { + console.log('Electron Socket: connected!'); + socket.on('disconnect', function (reason) { + console.log('Got disconnect! Reason: ' + reason); + try { + ////console.log('requireCache'); + ////console.log(require.cache['electron-host-hook']); + + if (hostHook) { + const hostHookScriptFilePath = path.join(currentPath, 'ElectronHostHook', 'index.js'); + delete require.cache[require.resolve(hostHookScriptFilePath)]; + hostHook = undefined; + } + } catch (err) { + console.error(err.message); + } + }); + + if (global['electronsocket'] === undefined) { + global['electronsocket'] = socket; + global['electronsocket'].setMaxListeners(0); + } - if (launchUrl) { - global['electronsocket'].emit('app-open-url' + id, launchUrl); - } + console.log('Electron Socket: loading components...'); + + if (appApi === undefined) appApi = require('./api/app')(socket, app); + if (browserWindows === undefined) browserWindows = require('./api/browserWindows')(socket, app); + if (commandLine === undefined) commandLine = require('./api/commandLine')(socket, app); + if (autoUpdater === undefined) autoUpdater = require('./api/autoUpdater')(socket); + if (ipc === undefined) ipc = require('./api/ipc')(socket); + if (menu === undefined) menu = require('./api/menu')(socket); + if (dialogApi === undefined) dialogApi = require('./api/dialog')(socket); + if (notification === undefined) notification = require('./api/notification')(socket); + if (tray === undefined) tray = require('./api/tray')(socket); + if (webContents === undefined) webContents = require('./api/webContents')(socket); + if (globalShortcut === undefined) globalShortcut = require('./api/globalShortcut')(socket); + if (shellApi === undefined) shellApi = require('./api/shell')(socket); + if (screen === undefined) screen = require('./api/screen')(socket); + if (clipboard === undefined) clipboard = require('./api/clipboard')(socket); + if (browserView === undefined) browserView = require('./api/browserView').browserViewApi(socket); + if (powerMonitor === undefined) powerMonitor = require('./api/powerMonitor')(socket); + if (nativeTheme === undefined) nativeTheme = require('./api/nativeTheme')(socket); + if (dock === undefined) dock = require('./api/dock')(socket); + + socket.on('register-app-open-file-event', (id) => { + global['electronsocket'] = socket; + + app.on('open-file', (event, file) => { + event.preventDefault(); + + global['electronsocket'].emit('app-open-file' + id, file); + }); + + if (launchFile) { + global['electronsocket'].emit('app-open-file' + id, launchFile); + } + }); + + socket.on('register-app-open-url-event', (id) => { + global['electronsocket'] = socket; + + app.on('open-url', (event, url) => { + event.preventDefault(); + + global['electronsocket'].emit('app-open-url' + id, url); + }); + + if (launchUrl) { + global['electronsocket'].emit('app-open-url' + id, launchUrl); + } + }); + + try { + if (hostHook === undefined) { + hostHook = new HookService(socket, app); + hostHook.onHostReady(); + } + } catch (error) { + console.error(error.message); + } + console.log('Electron Socket: startup complete.'); }); - - try { - const hostHookScriptFilePath = path.join(__dirname, 'ElectronHostHook', 'index.js'); - - if (isModuleAvailable(hostHookScriptFilePath) && hostHook === undefined) { - const { HookService } = require(hostHookScriptFilePath); - hostHook = new HookService(socket, app); - hostHook.onHostReady(); - } - } catch (error) { - console.error(error.message); - } - }); -} - -function isModuleAvailable(name) { - try { - require.resolve(name); - return true; - } catch (e) {} - return false; } function startAspCoreBackend(electronPort) { - if (manifestJsonFile.aspCoreBackendPort) { - startBackend(manifestJsonFile.aspCoreBackendPort); - } else { - // hostname needs to be localhost, otherwise Windows Firewall will be triggered. - portscanner.findAPortNotInUse(electronPort + 1, 65535, 'localhost', function (error, electronWebPort) { - startBackend(electronWebPort); - }); - } - - function startBackend(aspCoreBackendPort) { - console.log('ASP.NET Core Port: ' + aspCoreBackendPort); - loadURL = `http://localhost:${aspCoreBackendPort}`; - const parameters = [ - getEnvironmentParameter(), - `/electronPort=${electronPort}`, - `/electronWebPort=${aspCoreBackendPort}`, - ]; - let binaryFile = manifestJsonFile.executable; - - const os = require('os'); - if (os.platform() === 'win32') { - binaryFile = binaryFile + '.exe'; - } + startBackend(); + + function startBackend() { + loadURL = `about:blank`; + const envParam = getEnvironmentParameter(); + const parameters = [ + envParam, + `/electronPort=${electronPort}`, + `/electronPID=${process.pid}`, + // forward user supplied args (avoid duplicate environment) + ...forwardedArgs.filter(a => !(envParam && a.startsWith('--environment='))) + ].filter(p => p); + let binaryFile = manifestJsonFile.executable; + + const os = require('os'); + if (os.platform() === 'win32') { + binaryFile = binaryFile + '.exe'; + } - let binFilePath = path.join(currentBinPath, binaryFile); - var options = { cwd: currentBinPath }; - apiProcess = cProcess(binFilePath, parameters, options); + let binFilePath = path.join(currentBinPath, binaryFile); + var options = { cwd: currentBinPath }; + console.log('Starting backend with parameters:', parameters.join(' ')); + apiProcess = cProcess(binFilePath, parameters, options); - apiProcess.stdout.on('data', (data) => { - console.log(`stdout: ${data.toString()}`); - }); - } + apiProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data.toString()}`); + }); + } } -function startAspCoreBackendWithWatch(electronPort) { - if (manifestJsonFile.aspCoreBackendPort) { - startBackend(manifestJsonFile.aspCoreBackendPort); - } else { - // hostname needs to be localhost, otherwise Windows Firewall will be triggered. - portscanner.findAPortNotInUse(electronPort + 1, 65535, 'localhost', function (error, electronWebPort) { - startBackend(electronWebPort); - }); - } - - function startBackend(aspCoreBackendPort) { - console.log('ASP.NET Core Watch Port: ' + aspCoreBackendPort); - loadURL = `http://localhost:${aspCoreBackendPort}`; - const parameters = [ - 'watch', - 'run', - getEnvironmentParameter(), - `/electronPort=${electronPort}`, - `/electronWebPort=${aspCoreBackendPort}`, - ]; - - var options = { - cwd: currentBinPath, - env: process.env, - }; - apiProcess = cProcess('dotnet', parameters, options); +function startAspCoreBackendUnpackaged(electronPort) { + startBackend(); + + function startBackend() { + loadURL = `about:blank`; + const envParam = getEnvironmentParameter(); + const parameters = [ + envParam, + `/electronPort=${electronPort}`, + `/electronPID=${process.pid}`, + ...forwardedArgs.filter(a => !(envParam && a.startsWith('--environment='))) + ].filter(p => p); + let binaryFile = manifestJsonFile.executable; + + const os = require('os'); + if (os.platform() === 'win32') { + binaryFile = binaryFile + '.exe'; + } - apiProcess.stdout.on('data', (data) => { - console.log(`stdout: ${data.toString()}`); - }); - } + let binFilePath = path.join(currentBinPath, binaryFile); + var options = { cwd: currentBinPath }; + console.log('Starting backend (unpackaged) with parameters:', parameters.join(' ')); + apiProcess = cProcess(binFilePath, parameters, options); + + apiProcess.stdout.on('data', (data) => { + console.log(`stdout: ${data.toString()}`); + }); + } } function getEnvironmentParameter() { - if (manifestJsonFile.environment) { - return '--environment=' + manifestJsonFile.environment; - } + if (manifestJsonFile.environment) { + return '--environment=' + manifestJsonFile.environment; + } - return ''; + return ''; } From 77efea50ed2ed8d22ed82d4d4525d6a9220f0e0c Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 14:03:13 +0200 Subject: [PATCH 10/46] ElectronNET.Host: Fix TS compilation error in tray.js This probably stems from newer ts definition or the newer ts version. It errored because it cannot determine the event name and so it considers argv[] as empty. --- src/ElectronNET.Host/api/tray.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ElectronNET.Host/api/tray.ts b/src/ElectronNET.Host/api/tray.ts index af9f6cf2..55a0f12e 100644 --- a/src/ElectronNET.Host/api/tray.ts +++ b/src/ElectronNET.Host/api/tray.ts @@ -114,7 +114,7 @@ export = (socket: Socket) => { socket.on('register-tray-on-event', (eventName, listenerName) => { if (tray.value){ - tray.value.on(eventName, (...args) => { + tray.value.on(eventName, (...args: any[]) => { if (args.length > 1) { electronSocket.emit(listenerName, args[1]); } else { @@ -126,7 +126,7 @@ export = (socket: Socket) => { socket.on('register-tray-once-event', (eventName, listenerName) => { if (tray.value){ - tray.value.once(eventName, (...args) => { + tray.value.once(eventName, (...args: any[]) => { if (args.length > 1) { electronSocket.emit(listenerName, args[1]); } else { From 1e93d91e66078425ccfc1ff39299e9cc40586472 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 14:04:36 +0200 Subject: [PATCH 11/46] ElectronNET.Host: Fix TS compilation error webcontents.ts The crashed event has been removed in Electron 29 - just let TS ignore that error --- src/ElectronNET.Host/api/webContents.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/ElectronNET.Host/api/webContents.ts b/src/ElectronNET.Host/api/webContents.ts index ae0be759..fc4df486 100644 --- a/src/ElectronNET.Host/api/webContents.ts +++ b/src/ElectronNET.Host/api/webContents.ts @@ -6,10 +6,13 @@ let electronSocket; export = (socket: Socket) => { electronSocket = socket; + + // The crashed event has been removed in Electron 29 socket.on('register-webContents-crashed', (id) => { const browserWindow = getWindowById(id); browserWindow.webContents.removeAllListeners('crashed'); + // @ts-expect-error No overload matches this call browserWindow.webContents.on('crashed', (event, killed) => { electronSocket.emit('webContents-crashed' + id, killed); }); @@ -246,6 +249,19 @@ export = (socket: Socket) => { browserWindow.webContents.session.setUserAgent(userAgent, acceptLanguages); }); + socket.on('register-webContents-session-webRequest-onBeforeRequest', (id, filter) => { + const browserWindow = getWindowById(id); + const session = browserWindow.webContents.session; + + session.webRequest.onBeforeRequest(filter, (details, callback) => { + socket.emit(`webContents-session-webRequest-onBeforeRequest${id}`, details); + // Listen for a response from C# to continue the request + electronSocket.once(`webContents-session-webRequest-onBeforeRequest-response${id}`, (response) => { + callback(response); + }); + }); + }); + socket.on('register-webContents-session-cookies-changed', (id) => { const browserWindow = getWindowById(id); From e4ce61c9655a2dbc2222fd914f65bf4eb7306000 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 14:05:33 +0200 Subject: [PATCH 12/46] ElectronNET.Host: Update compiled files --- .../ElectronHostHook/connector.js.map | 2 +- .../ElectronHostHook/index.js.map | 2 +- src/ElectronNET.Host/api/app.js.map | 2 +- src/ElectronNET.Host/api/app.ts | 9 +++++---- src/ElectronNET.Host/api/browserView.js.map | 2 +- src/ElectronNET.Host/api/browserWindows.js.map | 2 +- src/ElectronNET.Host/api/clipboard.js.map | 2 +- src/ElectronNET.Host/api/dialog.js.map | 2 +- src/ElectronNET.Host/api/dock.js.map | 2 +- src/ElectronNET.Host/api/globalShortcut.js.map | 2 +- src/ElectronNET.Host/api/ipc.js.map | 2 +- src/ElectronNET.Host/api/menu.js.map | 2 +- src/ElectronNET.Host/api/notification.js.map | 2 +- src/ElectronNET.Host/api/shell.js.map | 2 +- src/ElectronNET.Host/api/tray.js.map | 2 +- src/ElectronNET.Host/api/webContents.js | 18 +++++++++++++----- src/ElectronNET.Host/api/webContents.js.map | 2 +- 17 files changed, 33 insertions(+), 24 deletions(-) diff --git a/src/ElectronNET.Host/ElectronHostHook/connector.js.map b/src/ElectronNET.Host/ElectronHostHook/connector.js.map index be84b690..dfa3a4f7 100644 --- a/src/ElectronNET.Host/ElectronHostHook/connector.js.map +++ b/src/ElectronNET.Host/ElectronHostHook/connector.js.map @@ -1 +1 @@ -{"version":3,"file":"connector.js","sourceRoot":"","sources":["connector.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAS;IAClB,YAAoB,MAAuB;IACvC,aAAa;IACN,GAAiB;QAFR,WAAM,GAAN,MAAM,CAAiB;QAEhC,QAAG,GAAH,GAAG,CAAc;IAAI,CAAC;IAEjC,EAAE,CAAC,GAAW,EAAE,cAAwB;QACpC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACnC,MAAM,EAAE,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;YAE9B,IAAI;gBACA,cAAc,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;oBAC7B,IAAI,IAAI,EAAE;wBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;qBACjD;gBACL,CAAC,CAAC,CAAC;aACN;YAAC,OAAO,KAAK,EAAE;gBACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,EAAE,EAAE,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;aACtE;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AApBD,8BAoBC"} \ No newline at end of file +{"version":3,"file":"connector.js","sourceRoot":"","sources":["connector.ts"],"names":[],"mappings":";;;AAEA,MAAa,SAAS;IAClB,YAAoB,MAAc;IAC9B,aAAa;IACN,GAAiB;QAFR,WAAM,GAAN,MAAM,CAAQ;QAEvB,QAAG,GAAH,GAAG,CAAc;IAAI,CAAC;IAEjC,EAAE,CAAC,GAAW,EAAE,cAAwB;QACpC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACnC,MAAM,EAAE,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;YAE9B,IAAI,CAAC;gBACD,cAAc,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;oBAC7B,IAAI,IAAI,EAAE,CAAC;wBACP,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;oBAClD,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,EAAE,EAAE,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;YACvE,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AApBD,8BAoBC"} \ No newline at end of file diff --git a/src/ElectronNET.Host/ElectronHostHook/index.js.map b/src/ElectronNET.Host/ElectronHostHook/index.js.map index 868dd903..ff24e734 100644 --- a/src/ElectronNET.Host/ElectronHostHook/index.js.map +++ b/src/ElectronNET.Host/ElectronHostHook/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAEA,2CAAwC;AAExC,MAAa,WAAY,SAAQ,qBAAS;IACtC,YAAY,MAAuB,EAAS,GAAiB;QACzD,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QADqB,QAAG,GAAH,GAAG,CAAc;IAE7D,CAAC;IAED,WAAW;QACP,8CAA8C;IAClD,CAAC;CACJ;AARD,kCAQC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAGA,2CAAwC;AAExC,MAAa,WAAY,SAAQ,qBAAS;IACtC,YAAY,MAAc,EAAS,GAAiB;QAChD,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QADY,QAAG,GAAH,GAAG,CAAc;IAEpD,CAAC;IAED,WAAW;QACP,8CAA8C;IAClD,CAAC;CACJ;AARD,kCAQC"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/app.js.map b/src/ElectronNET.Host/api/app.js.map index 25e66972..c3fc58d5 100644 --- a/src/ElectronNET.Host/api/app.js.map +++ b/src/ElectronNET.Host/api/app.js.map @@ -1 +1 @@ -{"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/app.ts b/src/ElectronNET.Host/api/app.ts index 1f04f9f0..69cb8d96 100644 --- a/src/ElectronNET.Host/api/app.ts +++ b/src/ElectronNET.Host/api/app.ts @@ -1,3 +1,4 @@ +import { RelaunchOptions, LoginItemSettingsOptions, Settings, AboutPanelOptionsOptions } from "electron"; import { Socket } from "net"; let isQuitWindowAllClosed = true, electronSocket; @@ -83,7 +84,7 @@ export = (socket: Socket, app: Electron.App) => { }); socket.on('appRelaunch', (options) => { - app.relaunch(options); + app.relaunch(options as RelaunchOptions); }); socket.on('appFocus', (options) => { @@ -257,12 +258,12 @@ export = (socket: Socket, app: Electron.App) => { }); socket.on('appGetLoginItemSettings', (options) => { - const loginItemSettings = app.getLoginItemSettings(options); + const loginItemSettings = app.getLoginItemSettings(options as LoginItemSettingsOptions); electronSocket.emit('appGetLoginItemSettingsCompleted', loginItemSettings); }); socket.on('appSetLoginItemSettings', (settings) => { - app.setLoginItemSettings(settings); + app.setLoginItemSettings(settings as Settings); }); socket.on('appIsAccessibilitySupportEnabled', () => { @@ -279,7 +280,7 @@ export = (socket: Socket, app: Electron.App) => { }); socket.on('appSetAboutPanelOptions', (options) => { - app.setAboutPanelOptions(options); + app.setAboutPanelOptions(options as AboutPanelOptionsOptions); }); socket.on('appGetUserAgentFallback', () => { diff --git a/src/ElectronNET.Host/api/browserView.js.map b/src/ElectronNET.Host/api/browserView.js.map index 596b53ab..a61597d3 100644 --- a/src/ElectronNET.Host/api/browserView.js.map +++ b/src/ElectronNET.Host/api/browserView.js.map @@ -1 +1 @@ -{"version":3,"file":"browserView.js","sourceRoot":"","sources":["browserView.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browserView.js","sourceRoot":"","sources":["browserView.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/browserWindows.js.map b/src/ElectronNET.Host/api/browserWindows.js.map index ea5862a6..85b223ca 100644 --- a/src/ElectronNET.Host/api/browserWindows.js.map +++ b/src/ElectronNET.Host/api/browserWindows.js.map @@ -1 +1 @@ -{"version":3,"file":"browserWindows.js","sourceRoot":"","sources":["browserWindows.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"browserWindows.js","sourceRoot":"","sources":["browserWindows.ts"],"names":[],"mappings":";AACA,uCAA4D;AAC5D,+CAA0D;AAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,MAAM,OAAO,GAA6B,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAA6B,CAAC;AAClI,IAAI,qBAAqB,GAAa,EAAE,CAAC;AACzC,IAAI,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC;AACxC,IAAI,aAAa,CAAC;AAClB,MAAM,qBAAqB,GAAgC,CAAC,MAAM,CAAC,uBAAuB,CAAC,GAAG,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAgC,CAAC;AAEpK,iBAAS,CAAC,MAAc,EAAE,GAAiB,EAAE,EAAE;IAC3C,cAAc,GAAG,MAAM,CAAC;IAExB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;QAChE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,KAAK,GAAG,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAA;YAC/C,IAAI,KAAK,IAAI,qBAAqB,IAAI,qBAAqB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzF,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,IAAI,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;gBACrD,IAAI,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;gBACrD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACxB,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,EAAE,CAAC,sCAAsC,EAAE,CAAC,EAAE,EAAE,EAAE;QACrD,IAAI,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YACrC,qBAAqB,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;YAC5E,cAAc,CAAC,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YACvC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/B,cAAc,CAAC,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2CAA2C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACxD,cAAc,CAAC,IAAI,CAAC,kCAAkC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC/B,cAAc,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAChC,cAAc,CAAC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrC,cAAc,CAAC,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qCAAqC,EAAE,CAAC,EAAE,EAAE,EAAE;QACpD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;YACtC,cAAc,CAAC,IAAI,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,CAAC,EAAE,EAAE,EAAE;QAClD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YACpC,cAAc,CAAC,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC9B,cAAc,CAAC,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC/B,cAAc,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC9B,cAAc,CAAC,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC9B,cAAc,CAAC,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,EAAE;QAChD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAClC,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,CAAC,EAAE,EAAE,EAAE;QAClD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YACpC,cAAc,CAAC,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,EAAE;QAChD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAClC,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,EAAE;QAC/C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YACjC,cAAc,CAAC,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAChC,cAAc,CAAC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC9B,cAAc,CAAC,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC/B,cAAc,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0CAA0C,EAAE,CAAC,EAAE,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3C,cAAc,CAAC,IAAI,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0CAA0C,EAAE,CAAC,EAAE,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3C,cAAc,CAAC,IAAI,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+CAA+C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9D,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChD,cAAc,CAAC,IAAI,CAAC,sCAAsC,GAAG,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+CAA+C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9D,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChD,cAAc,CAAC,IAAI,CAAC,sCAAsC,GAAG,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACnD,cAAc,CAAC,IAAI,CAAC,2BAA2B,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YAC/C,cAAc,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YACrC,cAAc,CAAC,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,EAAE,EAAE,EAAE;QACjD,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YACnC,cAAc,CAAC,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2CAA2C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5C,cAAc,CAAC,IAAI,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;QAClD,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YAC3E,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,CAAC;QAC5H,CAAC;aAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YACjC,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,CAAC;QACjG,CAAC;QAED,2DAA2D;QAC3D,IAAI,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC,KAAK,OAAO,EAAE,CAAC;YACzE,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;YAC3B,IAAI,MAAM,EAAE,CAAC;gBACT,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrB,cAAc,CAAC,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACvD,OAAO;YACX,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,IAAI,wBAAa,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAC,UAAU,EAAE,OAAO,CAAC,KAAK,EAAC,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC5C,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACpE,CAAC;QAED,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YAC5B,IAAI,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC5C,qBAAqB,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;YACvF,CAAC;iBAAM,CAAC;gBACJ,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1C,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,WAAW,GAAG,OAAO,CAAC;QAEtB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;gBAClD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,CAAC;oBACD,UAAU,CAAC,EAAE,CAAC;gBAClB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,IAAI,KAAK,CAAC,OAAO,KAAK,2BAA2B,EAAE,CAAC;wBAChD,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;wBAEzB,MAAM,GAAG,GAAG,EAAE,CAAC;wBACf,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACrC,cAAc,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;oBACpD,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YACpB,iEAAiE;YACjE,4DAA4D;YAC5D,IAAI,MAAM,KAAK,IAAI,IAAI,WAAW,EAAE,CAAC;gBACjC,MAAM,GAAG,IAAI,wBAAa,CAAC,WAAW,CAAC,CAAC;YAC5C,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QAED,IAAI,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC;YACxC,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QAC3D,CAAC;QAED,sBAAsB;QACtB,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,SAAS,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC;YAClE,GAAG,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC;YAC/B,GAAG,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;QAC/B,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,cAAc,CAAC,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,EAAE;QACrC,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,EAAE,EAAE,EAAE;QACnC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,EAAE,EAAE,EAAE;QACnC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE;QAClC,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,EAAE,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,EAAE;QACzC,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAEpD,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE,WAAW,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE;QAClC,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1C,aAAa,CAAC,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,EAAE;QAClC,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,EAAE,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAE5C,cAAc,CAAC,IAAI,CAAC,iCAAiC,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,EAAE;QACtC,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,EAAE,EAAE;QACxC,aAAa,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,EAAE;QACzC,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAEpD,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE,WAAW,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,EAAE;QACtC,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,EAAE;QACrC,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,EAAE;QACzC,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAEpD,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE,WAAW,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE;QACvD,aAAa,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1C,MAAM,YAAY,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC;QAEtD,cAAc,CAAC,IAAI,CAAC,sCAAsC,EAAE,YAAY,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE;QACpE,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE;QAC5D,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QACxD,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,EAAE,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAC/D,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAEvD,cAAc,CAAC,IAAI,CAAC,0CAA0C,EAAE,SAAS,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAC7D,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAEzC,cAAc,CAAC,IAAI,CAAC,iCAAiC,EAAE,IAAI,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QACpE,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,wCAAwC,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC3D,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,wCAAwC,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC3D,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,wCAAwC,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE;QACrD,aAAa,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,EAAE;QACzC,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAElD,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE,SAAS,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QACjD,aAAa,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,EAAE,EAAE,EAAE;QACvC,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAE9C,cAAc,CAAC,IAAI,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC3C,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QAEtD,cAAc,CAAC,IAAI,CAAC,uCAAuC,EAAE,WAAW,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC3C,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QAEtD,cAAc,CAAC,IAAI,CAAC,uCAAuC,EAAE,WAAW,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE;QAC/D,aAAa,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,cAAc,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAE5D,cAAc,CAAC,IAAI,CAAC,0CAA0C,EAAE,cAAc,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;QACnD,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,EAAE,EAAE;QACxC,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,oCAAoC,EAAE,QAAQ,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE;QACxE,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC3C,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC;QAExD,cAAc,CAAC,IAAI,CAAC,uCAAuC,EAAE,aAAa,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE,EAAE;QACpC,aAAa,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE;QACxD,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,EAAE;QACzC,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAEjD,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE,QAAQ,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE3C,cAAc,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;QAC7C,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAC9D,IAAI,OAAO,EAAE,CAAC;YACV,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACJ,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QAC9C,aAAa,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QAClD,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAE5C,cAAc,CAAC,IAAI,CAAC,iCAAiC,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oCAAoC,EAAE,CAAC,EAAE,EAAE,EAAE;QACnD,MAAM,kBAAkB,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,qBAAqB,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjG,cAAc,CAAC,IAAI,CAAC,+CAA+C,EAAE,kBAAkB,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qCAAqC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;QAC9D,aAAa,CAAC,EAAE,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qCAAqC,EAAE,CAAC,EAAE,EAAE,EAAE;QACpD,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,sBAAsB,EAAE,CAAC;QAE5D,cAAc,CAAC,IAAI,CAAC,gDAAgD,EAAE,QAAQ,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;QACvD,aAAa,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAEpD,cAAc,CAAC,IAAI,CAAC,0CAA0C,EAAE,MAAM,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC5C,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,EAAE;QACzC,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;QACnD,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE,EAAE;QACpC,aAAa,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE;QAChD,IAAI,IAAI,GAAG,IAAI,CAAC;QAEhB,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,GAAG,eAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAEzC,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE;gBACzC,cAAc,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACP,CAAC;QAED,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,EAAE,EAAE,EAAE;QACxC,aAAa,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,SAAS,yBAAyB,CAAC,SAAS,EAAE,QAAQ;QAClD,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACvB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC5D,CAAC;YAED,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;QACtD,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAC/D,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE;QACrD,aAAa,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,EAAE,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,cAAwC,EAAE,EAAE;QACzF,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChG,aAAa,CAAC,IAAI,GAAG,sBAAW,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAC3D,aAAa,CAAC,KAAK,GAAG,GAAG,EAAE;gBACvB,cAAc,CAAC,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YACrE,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QACpE,cAAc,CAAC,IAAI,CAAC,0CAA0C,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QACpD,aAAa,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,EAAE,EAAE,EAAE;QACxD,aAAa,CAAC,EAAE,CAAC,CAAC,0BAA0B,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QACtD,aAAa,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,EAAE;QAC/C,MAAM,iBAAiB,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC;QAEhE,cAAc,CAAC,IAAI,CAAC,2CAA2C,EAAE,iBAAiB,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QAC3D,aAAa,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,gBAAgB,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAE9D,cAAc,CAAC,IAAI,CAAC,0CAA0C,EAAE,gBAAgB,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wCAAwC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;QAChE,aAAa,CAAC,EAAE,CAAC,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uCAAuC,EAAE,CAAC,EAAE,EAAE,EAAE;QACtD,MAAM,wBAAwB,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,wBAAwB,EAAE,CAAC;QAE9E,cAAc,CAAC,IAAI,CAAC,kDAAkD,EAAE,wBAAwB,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;QAC1D,aAAa,CAAC,EAAE,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE;QACrD,aAAa,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;QACrD,MAAM,aAAa,GAAG,wBAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEtD,aAAa,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,MAAM,aAAa,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QAE1D,cAAc,CAAC,IAAI,CAAC,yCAAyC,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,MAAM,cAAc,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QAE3D,MAAM,GAAG,GAAG,EAAE,CAAC;QAEf,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACvB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,IAAI,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE;QACzD,aAAa,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;QAC/C,aAAa,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE;QAC5D,aAAa,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,IAAA,uCAAyB,EAAC,aAAa,CAAC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,SAAS,aAAa,CAAC,EAAU;QAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;gBACpB,OAAO,OAAO,CAAC;YACnB,CAAC;QACL,CAAC;IACL,CAAC;AACL,CAAC,CAAC"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/clipboard.js.map b/src/ElectronNET.Host/api/clipboard.js.map index c45e255f..d3922dd1 100644 --- a/src/ElectronNET.Host/api/clipboard.js.map +++ b/src/ElectronNET.Host/api/clipboard.js.map @@ -1 +1 @@ -{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["clipboard.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["clipboard.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/dialog.js.map b/src/ElectronNET.Host/api/dialog.js.map index 185e223d..90aacb64 100644 --- a/src/ElectronNET.Host/api/dialog.js.map +++ b/src/ElectronNET.Host/api/dialog.js.map @@ -1 +1 @@ -{"version":3,"file":"dialog.js","sourceRoot":"","sources":["dialog.ts"],"names":[],"mappings":";AACA,uCAAiD;AACjD,IAAI,cAAsB,CAAC;AAE3B,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/D,IAAI,IAAI,IAAI,aAAa,EAAE;YACvB,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAEtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3E,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,IAAI,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;SACjI;aAAM;YACH,MAAM,EAAE,GAAG,IAAI,IAAI,OAAO,CAAC;YAC3B,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAEzE,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,EAAE,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;SAC/H;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE3E,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,IAAI,EAAE,qBAAqB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE3E,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,IAAI,EAAE,qBAAqB,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACzC,iBAAM,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC3E,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,iBAAM,CAAC,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEzD,cAAc,CAAC,IAAI,CAAC,oCAAoC,GAAG,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"dialog.js","sourceRoot":"","sources":["dialog.ts"],"names":[],"mappings":";AACA,uCAAiD;AACjD,IAAI,cAAsB,CAAC;AAE3B,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/D,IAAI,IAAI,IAAI,aAAa,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAEtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3E,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,IAAI,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;QAClI,CAAC;aAAM,CAAC;YACJ,MAAM,EAAE,GAAG,IAAI,IAAI,OAAO,CAAC;YAC3B,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAEzE,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,EAAE,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC;QAChI,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE3E,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,IAAI,EAAE,qBAAqB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,qBAAqB,GAAG,MAAM,iBAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE3E,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,IAAI,EAAE,qBAAqB,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACzC,iBAAM,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC3E,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,iBAAM,CAAC,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEzD,cAAc,CAAC,IAAI,CAAC,oCAAoC,GAAG,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/dock.js.map b/src/ElectronNET.Host/api/dock.js.map index 449d44b6..1d3f0eb5 100644 --- a/src/ElectronNET.Host/api/dock.js.map +++ b/src/ElectronNET.Host/api/dock.js.map @@ -1 +1 @@ -{"version":3,"file":"dock.js","sourceRoot":"","sources":["dock.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"dock.js","sourceRoot":"","sources":["dock.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/globalShortcut.js.map b/src/ElectronNET.Host/api/globalShortcut.js.map index bed5642c..8a1b0b2a 100644 --- a/src/ElectronNET.Host/api/globalShortcut.js.map +++ b/src/ElectronNET.Host/api/globalShortcut.js.map @@ -1 +1 @@ -{"version":3,"file":"globalShortcut.js","sourceRoot":"","sources":["globalShortcut.ts"],"names":[],"mappings":";AAAA,uCAA0C;AAE1C,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE;QACjD,yBAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;YACtC,cAAc,CAAC,IAAI,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,WAAW,EAAE,EAAE;QACrD,MAAM,YAAY,GAAG,yBAAc,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAE9D,cAAc,CAAC,IAAI,CAAC,sCAAsC,EAAE,YAAY,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,WAAW,EAAE,EAAE;QACnD,yBAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC3C,IAAI;YACA,yBAAc,CAAC,aAAa,EAAE,CAAC;SAClC;QAAC,OAAO,KAAK,EAAE,GAAG;IACvB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"globalShortcut.js","sourceRoot":"","sources":["globalShortcut.ts"],"names":[],"mappings":";AAAA,uCAA0C;AAE1C,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE;QACjD,yBAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;YACtC,cAAc,CAAC,IAAI,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,WAAW,EAAE,EAAE;QACrD,MAAM,YAAY,GAAG,yBAAc,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAE9D,cAAc,CAAC,IAAI,CAAC,sCAAsC,EAAE,YAAY,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,WAAW,EAAE,EAAE;QACnD,yBAAc,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC3C,IAAI,CAAC;YACD,yBAAc,CAAC,aAAa,EAAE,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/ipc.js.map b/src/ElectronNET.Host/api/ipc.js.map index 2876296b..e16f8eb4 100644 --- a/src/ElectronNET.Host/api/ipc.js.map +++ b/src/ElectronNET.Host/api/ipc.js.map @@ -1 +1 @@ -{"version":3,"file":"ipc.js","sourceRoot":"","sources":["ipc.ts"],"names":[],"mappings":";AAAA,uCAA+D;AAE/D,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE;QAC5C,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;QAChD,kBAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAChC,MAAM,CAAC,GAAQ,MAAM,CAAC;YACtB,CAAC,CAAC,kBAAkB,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;YACvC,MAAM,CAAC,EAAE,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;gBACnC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,OAAO,EAAE,EAAE;QAChD,kBAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,OAAO,EAAE,EAAE;QACtD,kBAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,wBAAa,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEtD,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC7C;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE;QAC/D,MAAM,YAAY,GAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAkB,CAAC;QAC7G,IAAI,IAAI,GAAgB,IAAI,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;gBAC9B,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM;aACT;SACJ;QAED,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;SAC3C;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"ipc.js","sourceRoot":"","sources":["ipc.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/menu.js.map b/src/ElectronNET.Host/api/menu.js.map index 1ad421e4..a818070a 100644 --- a/src/ElectronNET.Host/api/menu.js.map +++ b/src/ElectronNET.Host/api/menu.js.map @@ -1 +1 @@ -{"version":3,"file":"menu.js","sourceRoot":"","sources":["menu.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"menu.js","sourceRoot":"","sources":["menu.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/notification.js.map b/src/ElectronNET.Host/api/notification.js.map index f6e58d46..e67c9d12 100644 --- a/src/ElectronNET.Host/api/notification.js.map +++ b/src/ElectronNET.Host/api/notification.js.map @@ -1 +1 @@ -{"version":3,"file":"notification.js","sourceRoot":"","sources":["notification.ts"],"names":[],"mappings":";AACA,uCAAwC;AACxC,MAAM,aAAa,GAA4B,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAA4B,CAAC;AACpI,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,EAAE;QACxC,MAAM,YAAY,GAAG,IAAI,uBAAY,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,OAAO,CAAC,MAAM,EAAE;YAChB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACzB,cAAc,CAAC,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC1B,cAAc,CAAC,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC1B,cAAc,CAAC,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACtC,cAAc,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE;YAClB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACvC,cAAc,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YAC9E,CAAC,CAAC,CAAC;SACN;QAED,IAAI,SAAS,EAAE;YACX,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SACpC;QAED,YAAY,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACtC,MAAM,WAAW,GAAG,uBAAY,CAAC,WAAW,CAAC;QAC7C,cAAc,CAAC,IAAI,CAAC,iCAAiC,EAAE,WAAW,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"notification.js","sourceRoot":"","sources":["notification.ts"],"names":[],"mappings":";AACA,uCAAwC;AACxC,MAAM,aAAa,GAA4B,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAA4B,CAAC;AACpI,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,EAAE;QACxC,MAAM,YAAY,GAAG,IAAI,uBAAY,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACzB,cAAc,CAAC,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC1B,cAAc,CAAC,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBAC1B,cAAc,CAAC,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACtC,cAAc,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACvC,cAAc,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YAC9E,CAAC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACZ,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;QAED,YAAY,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACtC,MAAM,WAAW,GAAG,uBAAY,CAAC,WAAW,CAAC;QAC7C,cAAc,CAAC,IAAI,CAAC,iCAAiC,EAAE,WAAW,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/shell.js.map b/src/ElectronNET.Host/api/shell.js.map index 83dbfa2b..0b9e3cc8 100644 --- a/src/ElectronNET.Host/api/shell.js.map +++ b/src/ElectronNET.Host/api/shell.js.map @@ -1 +1 @@ -{"version":3,"file":"shell.js","sourceRoot":"","sources":["shell.ts"],"names":[],"mappings":";AACA,uCAAiC;AACjC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,QAAQ,EAAE,EAAE;QAC7C,gBAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAEjC,cAAc,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACvC,MAAM,YAAY,GAAG,MAAM,gBAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;QACnD,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,OAAO,EAAE;YACT,MAAM,gBAAK,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC7C,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;YACvB,CAAC,CAAC,CAAC;SACN;aAAM;YACH,MAAM,gBAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;YACvB,CAAC,CAAC,CAAC;SACN;QAED,cAAc,CAAC,IAAI,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE;QAC1D,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,IAAI;YACA,MAAM,gBAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAChC,OAAO,GAAG,IAAI,CAAC;SAClB;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,GAAG,KAAK,CAAC;SACnB;QAED,cAAc,CAAC,IAAI,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;QACzB,gBAAK,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QACtE,MAAM,OAAO,GAAG,gBAAK,CAAC,iBAAiB,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAE1E,cAAc,CAAC,IAAI,CAAC,kCAAkC,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,YAAY,EAAE,EAAE;QACjD,MAAM,eAAe,GAAG,gBAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAE7D,cAAc,CAAC,IAAI,CAAC,iCAAiC,EAAE,eAAe,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"shell.js","sourceRoot":"","sources":["shell.ts"],"names":[],"mappings":";AACA,uCAAiC;AACjC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,QAAQ,EAAE,EAAE;QAC7C,gBAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAEjC,cAAc,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACvC,MAAM,YAAY,GAAG,MAAM,gBAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEhD,cAAc,CAAC,IAAI,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;QACnD,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,gBAAK,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC7C,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;YACvB,CAAC,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,MAAM,gBAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC;YACvB,CAAC,CAAC,CAAC;QACP,CAAC;QAED,cAAc,CAAC,IAAI,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE;QAC1D,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,IAAI,CAAC;YACD,MAAM,gBAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAChC,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,GAAG,KAAK,CAAC;QACpB,CAAC;QAED,cAAc,CAAC,IAAI,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;QACzB,gBAAK,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QACtE,MAAM,OAAO,GAAG,gBAAK,CAAC,iBAAiB,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAE1E,cAAc,CAAC,IAAI,CAAC,kCAAkC,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC,YAAY,EAAE,EAAE;QACjD,MAAM,eAAe,GAAG,gBAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAE7D,cAAc,CAAC,IAAI,CAAC,iCAAiC,EAAE,eAAe,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/tray.js.map b/src/ElectronNET.Host/api/tray.js.map index 6a84a7ad..8328f0d7 100644 --- a/src/ElectronNET.Host/api/tray.js.map +++ b/src/ElectronNET.Host/api/tray.js.map @@ -1 +1 @@ -{"version":3,"file":"tray.js","sourceRoot":"","sources":["tray.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tray.js","sourceRoot":"","sources":["tray.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/webContents.js b/src/ElectronNET.Host/api/webContents.js index 191cffc5..edb0a6ab 100644 --- a/src/ElectronNET.Host/api/webContents.js +++ b/src/ElectronNET.Host/api/webContents.js @@ -5,9 +5,11 @@ const fs = require('fs'); let electronSocket; module.exports = (socket) => { electronSocket = socket; + // The crashed event has been removed in Electron 29 socket.on('register-webContents-crashed', (id) => { const browserWindow = getWindowById(id); browserWindow.webContents.removeAllListeners('crashed'); + // @ts-expect-error No overload matches this call browserWindow.webContents.on('crashed', (event, killed) => { electronSocket.emit('webContents-crashed' + id, killed); }); @@ -63,16 +65,13 @@ module.exports = (socket) => { } }); }); - socket.on('register-webContents-domReady', (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('dom-ready'); browserWindow.webContents.on('dom-ready', () => { electronSocket.emit('webContents-domReady' + id); }); }); - socket.on('webContentsOpenDevTools', (id, options) => { if (options) { getWindowById(id).webContents.openDevTools(options); @@ -100,12 +99,10 @@ module.exports = (socket) => { } }); }); - socket.on('webContents-executeJavaScript', async (id, code, userGesture = false) => { const result = await getWindowById(id).webContents.executeJavaScript(code, userGesture); electronSocket.emit('webContents-executeJavaScript-completed', result); }); - socket.on('webContents-getUrl', function (id) { const browserWindow = getWindowById(id); electronSocket.emit('webContents-getUrl' + id, browserWindow.webContents.getURL()); @@ -197,6 +194,17 @@ module.exports = (socket) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.setUserAgent(userAgent, acceptLanguages); }); + socket.on('register-webContents-session-webRequest-onBeforeRequest', (id, filter) => { + const browserWindow = getWindowById(id); + const session = browserWindow.webContents.session; + session.webRequest.onBeforeRequest(filter, (details, callback) => { + socket.emit(`webContents-session-webRequest-onBeforeRequest${id}`, details); + // Listen for a response from C# to continue the request + electronSocket.once(`webContents-session-webRequest-onBeforeRequest-response${id}`, (response) => { + callback(response); + }); + }); + }); socket.on('register-webContents-session-cookies-changed', (id) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.cookies.removeAllListeners('changed'); diff --git a/src/ElectronNET.Host/api/webContents.js.map b/src/ElectronNET.Host/api/webContents.js.map index fa03b147..759d3260 100644 --- a/src/ElectronNET.Host/api/webContents.js.map +++ b/src/ElectronNET.Host/api/webContents.js.map @@ -1 +1 @@ -{"version":3,"file":"webContents.js","sourceRoot":"","sources":["webContents.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"webContents.js","sourceRoot":"","sources":["webContents.ts"],"names":[],"mappings":"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"} \ No newline at end of file From feddf5f8f47e072b860d1812c1abf98d4e5bfccd Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 13:20:23 +0200 Subject: [PATCH 13/46] ElectronNET.API: Move API code to subfolder --- src/ElectronNET.API/{ => API}/App.cs | 37 +++-- src/ElectronNET.API/{ => API}/AutoUpdater.cs | 0 src/ElectronNET.API/{ => API}/BrowserView.cs | 0 .../{ => API}/BrowserWindow.cs | 0 src/ElectronNET.API/{ => API}/Clipboard.cs | 0 src/ElectronNET.API/{ => API}/CommandLine.cs | 0 src/ElectronNET.API/{ => API}/Dialog.cs | 6 +- src/ElectronNET.API/{ => API}/Dock.cs | 0 src/ElectronNET.API/{ => API}/Electron.cs | 0 .../{ => API}/Entities/AboutPanelOptions.cs | 0 .../Entities/AddRepresentationOptions.cs | 0 .../{ => API}/Entities/AppDetailsOptions.cs | 0 .../{ => API}/Entities/AutoResizeOptions.cs | 0 .../{ => API}/Entities/BitmapOptions.cs | 0 .../{ => API}/Entities/Blob.cs | 0 .../{ => API}/Entities/BlockMapDataHolder.cs | 0 .../Entities/BrowserViewConstructorOptions.cs | 0 .../Entities/BrowserWindowOptions.cs | 0 .../{ => API}/Entities/CPUUsage.cs | 0 .../{ => API}/Entities/Certificate.cs | 0 .../Entities/CertificatePrincipal.cs | 0 .../Entities/CertificateTrustDialogOptions.cs | 0 .../{ => API}/Entities/ChromeExtensionInfo.cs | 0 .../Entities/ClearStorageDataOptions.cs | 0 .../{ => API}/Entities/Cookie.cs | 0 .../{ => API}/Entities/CookieChangedCause.cs | 0 .../{ => API}/Entities/CookieDetails.cs | 0 .../{ => API}/Entities/CookieFilter.cs | 0 .../Entities/CreateFromBitmapOptions.cs | 0 .../Entities/CreateFromBufferOptions.cs | 0 .../CreateInterruptedDownloadOptions.cs | 0 .../{ => API}/Entities/Data.cs | 0 .../{ => API}/Entities/DefaultFontFamily.cs | 0 .../{ => API}/Entities/DevToolsMode.cs | 0 .../{ => API}/Entities/Display.cs | 0 .../Entities/DisplayBalloonOptions.cs | 0 .../{ => API}/Entities/DockBounceType.cs | 0 .../Entities/EnableNetworkEmulationOptions.cs | 0 .../{ => API}/Entities/Extension.cs | 0 .../{ => API}/Entities/FileFilter.cs | 0 .../{ => API}/Entities/FileIconOptions.cs | 0 .../{ => API}/Entities/FileIconSize.cs | 0 .../{ => API}/Entities/FocusOptions.cs | 0 .../{ => API}/Entities/GPUFeatureStatus.cs | 0 .../{ => API}/Entities/IPostData.cs | 0 .../Entities/ImportCertificateOptions.cs | 0 .../{ => API}/Entities/InputEvent.cs | 3 +- .../{ => API}/Entities/InputEventType.cs | 0 .../{ => API}/Entities/JumpListCategory.cs | 0 .../Entities/JumpListCategoryType.cs | 0 .../{ => API}/Entities/JumpListItem.cs | 0 .../{ => API}/Entities/JumpListItemType.cs | 0 .../{ => API}/Entities/JumpListSettings.cs | 0 .../{ => API}/Entities/LoadURLOptions.cs | 0 .../{ => API}/Entities/LoginItemSettings.cs | 0 .../Entities/LoginItemSettingsOptions.cs | 0 .../{ => API}/Entities/LoginSettings.cs | 0 .../{ => API}/Entities/Margins.cs | 0 .../{ => API}/Entities/MemoryInfo.cs | 0 .../{ => API}/Entities/MenuItem.cs | 0 .../{ => API}/Entities/MenuRole.cs | 0 .../{ => API}/Entities/MenuType.cs | 0 .../{ => API}/Entities/MessageBoxOptions.cs | 0 .../{ => API}/Entities/MessageBoxResult.cs | 0 .../{ => API}/Entities/MessageBoxType.cs | 0 .../{ => API}/Entities/ModifierType.cs | 0 .../{ => API}/Entities/NativeImage.cs | 0 .../Entities/NativeImageJsonConverter.cs | 0 .../{ => API}/Entities/NotificationAction.cs | 0 .../{ => API}/Entities/NotificationOptions.cs | 0 .../{ => API}/Entities/OnDidFailLoadInfo.cs | 0 .../{ => API}/Entities/OnDidNavigateInfo.cs | 0 .../{ => API}/Entities/OnTopLevel.cs | 0 .../{ => API}/Entities/OpenDevToolsOptions.cs | 0 .../{ => API}/Entities/OpenDialogOptions.cs | 0 .../{ => API}/Entities/OpenDialogProperty.cs | 0 .../{ => API}/Entities/OpenExternalOptions.cs | 0 .../{ => API}/Entities/PathName.cs | 0 .../{ => API}/Entities/Point.cs | 0 .../{ => API}/Entities/PrintOptions.cs | 0 .../{ => API}/Entities/PrintToPDFOptions.cs | 0 .../{ => API}/Entities/PrinterInfo.cs | 0 .../{ => API}/Entities/ProcessMetric.cs | 0 .../{ => API}/Entities/ProgressBarMode.cs | 0 .../{ => API}/Entities/ProgressBarOptions.cs | 0 .../{ => API}/Entities/ProgressInfo.cs | 0 .../{ => API}/Entities/ProxyConfig.cs | 0 .../{ => API}/Entities/ReadBookmark.cs | 0 .../{ => API}/Entities/Rectangle.cs | 0 .../{ => API}/Entities/RelaunchOptions.cs | 0 .../{ => API}/Entities/ReleaseNoteInfo.cs | 0 .../{ => API}/Entities/RemovePassword.cs | 0 .../{ => API}/Entities/ResizeOptions.cs | 0 .../{ => API}/Entities/SaveDialogOptions.cs | 0 .../{ => API}/Entities/Scheme.cs | 0 .../{ => API}/Entities/SemVer.cs | 0 .../{ => API}/Entities/ShortcutDetails.cs | 0 .../Entities/ShortcutLinkOperation.cs | 0 .../{ => API}/Entities/Size.cs | 0 .../{ => API}/Entities/ThemeSourceMode.cs | 0 .../{ => API}/Entities/ThumbarButton.cs | 0 .../{ => API}/Entities/ThumbarButtonFlag.cs | 0 .../{ => API}/Entities/TitleBarStyle.cs | 0 .../{ => API}/Entities/ToBitmapOptions.cs | 0 .../{ => API}/Entities/ToDataUrlOptions.cs | 0 .../{ => API}/Entities/ToPNGOptions.cs | 0 .../{ => API}/Entities/TrayClickEventArgs.cs | 0 .../Entities/UpdateCancellationToken.cs | 0 .../{ => API}/Entities/UpdateCheckResult.cs | 0 .../{ => API}/Entities/UpdateFileInfo.cs | 0 .../{ => API}/Entities/UpdateInfo.cs | 0 .../{ => API}/Entities/UploadFile.cs | 0 .../{ => API}/Entities/UploadRawData.cs | 0 .../{ => API}/Entities/UserTask.cs | 0 .../{ => API}/Entities/Vibrancy.cs | 0 .../{ => API}/Entities/WebPreferences.cs | 0 .../{ => API}/Extensions/EnumExtensions.cs | 0 .../Extensions/MenuItemExtensions.cs | 0 .../Extensions/ThumbarButtonExtensions.cs | 0 .../{ => API}/GlobalShortcut.cs | 0 src/ElectronNET.API/{ => API}/HostHook.cs | 0 .../{ => API}/HybridSupport.cs | 2 +- src/ElectronNET.API/{ => API}/IpcMain.cs | 2 +- src/ElectronNET.API/{ => API}/Menu.cs | 0 src/ElectronNET.API/{ => API}/NativeTheme.cs | 0 src/ElectronNET.API/{ => API}/Notification.cs | 0 src/ElectronNET.API/{ => API}/PowerMonitor.cs | 0 .../{ => API}/QuitEventArgs.cs | 0 src/ElectronNET.API/{ => API}/Screen.cs | 0 src/ElectronNET.API/{ => API}/Session.cs | 3 + src/ElectronNET.API/{ => API}/Shell.cs | 0 src/ElectronNET.API/{ => API}/Tray.cs | 26 +-- src/ElectronNET.API/{ => API}/WebContents.cs | 0 .../{ => API}/WindowManager.cs | 16 +- src/ElectronNET.API/BridgeConnector.cs | 33 ---- src/ElectronNET.API/BridgeSettings.cs | 24 --- src/ElectronNET.API/Cookies.cs | 154 ------------------ src/ElectronNET.API/Events.cs | 88 ---------- src/ElectronNET.API/GlobalUsings.cs | 3 - src/ElectronNET.API/LifetimeServiceHost.cs | 41 ----- .../ServiceCollectionExtensions.cs | 33 ---- src/ElectronNET.API/SocketIOFacade.cs | 93 ----------- .../WebHostBuilderExtensions.cs | 58 ------- src/ElectronNET.API/devCleanup.cmd | 1 - src/ElectronNET.API/devCleanup.sh | 1 - 145 files changed, 52 insertions(+), 572 deletions(-) rename src/ElectronNET.API/{ => API}/App.cs (97%) rename src/ElectronNET.API/{ => API}/AutoUpdater.cs (100%) rename src/ElectronNET.API/{ => API}/BrowserView.cs (100%) rename src/ElectronNET.API/{ => API}/BrowserWindow.cs (100%) rename src/ElectronNET.API/{ => API}/Clipboard.cs (100%) rename src/ElectronNET.API/{ => API}/CommandLine.cs (100%) rename src/ElectronNET.API/{ => API}/Dialog.cs (96%) rename src/ElectronNET.API/{ => API}/Dock.cs (100%) rename src/ElectronNET.API/{ => API}/Electron.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/AboutPanelOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/AddRepresentationOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/AppDetailsOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/AutoResizeOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/BitmapOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/Blob.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/BlockMapDataHolder.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/BrowserViewConstructorOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/BrowserWindowOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/CPUUsage.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/Certificate.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/CertificatePrincipal.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/CertificateTrustDialogOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ChromeExtensionInfo.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ClearStorageDataOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/Cookie.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/CookieChangedCause.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/CookieDetails.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/CookieFilter.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/CreateFromBitmapOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/CreateFromBufferOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/CreateInterruptedDownloadOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/Data.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/DefaultFontFamily.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/DevToolsMode.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/Display.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/DisplayBalloonOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/DockBounceType.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/EnableNetworkEmulationOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/Extension.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/FileFilter.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/FileIconOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/FileIconSize.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/FocusOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/GPUFeatureStatus.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/IPostData.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ImportCertificateOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/InputEvent.cs (98%) rename src/ElectronNET.API/{ => API}/Entities/InputEventType.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/JumpListCategory.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/JumpListCategoryType.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/JumpListItem.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/JumpListItemType.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/JumpListSettings.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/LoadURLOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/LoginItemSettings.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/LoginItemSettingsOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/LoginSettings.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/Margins.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/MemoryInfo.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/MenuItem.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/MenuRole.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/MenuType.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/MessageBoxOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/MessageBoxResult.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/MessageBoxType.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ModifierType.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/NativeImage.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/NativeImageJsonConverter.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/NotificationAction.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/NotificationOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/OnDidFailLoadInfo.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/OnDidNavigateInfo.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/OnTopLevel.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/OpenDevToolsOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/OpenDialogOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/OpenDialogProperty.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/OpenExternalOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/PathName.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/Point.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/PrintOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/PrintToPDFOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/PrinterInfo.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ProcessMetric.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ProgressBarMode.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ProgressBarOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ProgressInfo.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ProxyConfig.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ReadBookmark.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/Rectangle.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/RelaunchOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ReleaseNoteInfo.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/RemovePassword.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ResizeOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/SaveDialogOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/Scheme.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/SemVer.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ShortcutDetails.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ShortcutLinkOperation.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/Size.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ThemeSourceMode.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ThumbarButton.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ThumbarButtonFlag.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/TitleBarStyle.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ToBitmapOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ToDataUrlOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/ToPNGOptions.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/TrayClickEventArgs.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/UpdateCancellationToken.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/UpdateCheckResult.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/UpdateFileInfo.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/UpdateInfo.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/UploadFile.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/UploadRawData.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/UserTask.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/Vibrancy.cs (100%) rename src/ElectronNET.API/{ => API}/Entities/WebPreferences.cs (100%) rename src/ElectronNET.API/{ => API}/Extensions/EnumExtensions.cs (100%) rename src/ElectronNET.API/{ => API}/Extensions/MenuItemExtensions.cs (100%) rename src/ElectronNET.API/{ => API}/Extensions/ThumbarButtonExtensions.cs (100%) rename src/ElectronNET.API/{ => API}/GlobalShortcut.cs (100%) rename src/ElectronNET.API/{ => API}/HostHook.cs (100%) rename src/ElectronNET.API/{ => API}/HybridSupport.cs (86%) rename src/ElectronNET.API/{ => API}/IpcMain.cs (99%) rename src/ElectronNET.API/{ => API}/Menu.cs (100%) rename src/ElectronNET.API/{ => API}/NativeTheme.cs (100%) rename src/ElectronNET.API/{ => API}/Notification.cs (100%) rename src/ElectronNET.API/{ => API}/PowerMonitor.cs (100%) rename src/ElectronNET.API/{ => API}/QuitEventArgs.cs (100%) rename src/ElectronNET.API/{ => API}/Screen.cs (100%) rename src/ElectronNET.API/{ => API}/Session.cs (99%) rename src/ElectronNET.API/{ => API}/Shell.cs (100%) rename src/ElectronNET.API/{ => API}/Tray.cs (95%) rename src/ElectronNET.API/{ => API}/WebContents.cs (100%) rename src/ElectronNET.API/{ => API}/WindowManager.cs (92%) delete mode 100644 src/ElectronNET.API/BridgeConnector.cs delete mode 100644 src/ElectronNET.API/BridgeSettings.cs delete mode 100644 src/ElectronNET.API/Cookies.cs delete mode 100644 src/ElectronNET.API/Events.cs delete mode 100644 src/ElectronNET.API/GlobalUsings.cs delete mode 100644 src/ElectronNET.API/LifetimeServiceHost.cs delete mode 100644 src/ElectronNET.API/ServiceCollectionExtensions.cs delete mode 100644 src/ElectronNET.API/SocketIOFacade.cs delete mode 100644 src/ElectronNET.API/WebHostBuilderExtensions.cs delete mode 100644 src/ElectronNET.API/devCleanup.cmd delete mode 100644 src/ElectronNET.API/devCleanup.sh diff --git a/src/ElectronNET.API/App.cs b/src/ElectronNET.API/API/App.cs similarity index 97% rename from src/ElectronNET.API/App.cs rename to src/ElectronNET.API/API/App.cs index 20e1541e..088ed84a 100644 --- a/src/ElectronNET.API/App.cs +++ b/src/ElectronNET.API/API/App.cs @@ -70,7 +70,7 @@ public event Func BeforeQuit { BridgeConnector.Socket.On("app-before-quit" + GetHashCode(), async () => { - await _beforeQuit(new QuitEventArgs()); + await this._beforeQuit(new QuitEventArgs()).ConfigureAwait(false); if (_preventQuit) { @@ -84,7 +84,7 @@ public event Func BeforeQuit } else if (_willQuit != null) { - await _willQuit(new QuitEventArgs()); + await this._willQuit(new QuitEventArgs()).ConfigureAwait(false); if (_preventQuit) { @@ -98,14 +98,14 @@ public event Func BeforeQuit } else { - await _quitting(); + await this._quitting().ConfigureAwait(false); Exit(); } } } else if (_quitting != null) { - await _quitting(); + await this._quitting().ConfigureAwait(false); Exit(); } } @@ -142,7 +142,7 @@ public event Func WillQuit { BridgeConnector.Socket.On("app-will-quit" + GetHashCode(), async () => { - await _willQuit(new QuitEventArgs()); + await this._willQuit(new QuitEventArgs()).ConfigureAwait(false); if (_preventQuit) { @@ -156,7 +156,7 @@ public event Func WillQuit } else { - await _quitting(); + await this._quitting().ConfigureAwait(false); Exit(); } } @@ -192,7 +192,7 @@ public event Func Quitting { if(_willQuit == null) { - await _quitting(); + await this._quitting().ConfigureAwait(false); Exit(); } }); @@ -567,6 +567,11 @@ public void Exit(int exitCode = 0) BridgeConnector.Socket.Emit("appExit", exitCode); } + public void DisposeSocket() + { + BridgeConnector.Socket.DisposeSocket(); + } + /// /// Relaunches the app when current instance exits. By default the new instance will use the same working directory /// and command line arguments with current instance. @@ -816,7 +821,7 @@ public void ClearRecentDocuments() /// Whether the call succeeded. public async Task SetAsDefaultProtocolClientAsync(string protocol, CancellationToken cancellationToken = default) { - return await SetAsDefaultProtocolClientAsync(protocol, null, null, cancellationToken); + return await this.SetAsDefaultProtocolClientAsync(protocol, null, null, cancellationToken).ConfigureAwait(false); } /// @@ -847,7 +852,7 @@ public async Task SetAsDefaultProtocolClientAsync(string protocol, Cancell /// Whether the call succeeded. public async Task SetAsDefaultProtocolClientAsync(string protocol, string path, CancellationToken cancellationToken = default) { - return await SetAsDefaultProtocolClientAsync(protocol, path, null, cancellationToken); + return await this.SetAsDefaultProtocolClientAsync(protocol, path, null, cancellationToken).ConfigureAwait(false); } /// @@ -906,7 +911,7 @@ public async Task SetAsDefaultProtocolClientAsync(string protocol, string /// Whether the call succeeded. public async Task RemoveAsDefaultProtocolClientAsync(string protocol, CancellationToken cancellationToken = default) { - return await RemoveAsDefaultProtocolClientAsync(protocol, null, null, cancellationToken); + return await this.RemoveAsDefaultProtocolClientAsync(protocol, null, null, cancellationToken).ConfigureAwait(false); } /// @@ -919,7 +924,7 @@ public async Task RemoveAsDefaultProtocolClientAsync(string protocol, Canc /// Whether the call succeeded. public async Task RemoveAsDefaultProtocolClientAsync(string protocol, string path, CancellationToken cancellationToken = default) { - return await RemoveAsDefaultProtocolClientAsync(protocol, path, null, cancellationToken); + return await this.RemoveAsDefaultProtocolClientAsync(protocol, path, null, cancellationToken).ConfigureAwait(false); } /// @@ -966,7 +971,7 @@ public async Task RemoveAsDefaultProtocolClientAsync(string protocol, stri /// Whether the current executable is the default handler for a protocol (aka URI scheme). public async Task IsDefaultProtocolClientAsync(string protocol, CancellationToken cancellationToken = default) { - return await IsDefaultProtocolClientAsync(protocol, null, null, cancellationToken); + return await this.IsDefaultProtocolClientAsync(protocol, null, null, cancellationToken).ConfigureAwait(false); } /// @@ -985,7 +990,7 @@ public async Task IsDefaultProtocolClientAsync(string protocol, Cancellati /// Whether the current executable is the default handler for a protocol (aka URI scheme). public async Task IsDefaultProtocolClientAsync(string protocol, string path, CancellationToken cancellationToken = default) { - return await IsDefaultProtocolClientAsync(protocol, path, null, cancellationToken); + return await this.IsDefaultProtocolClientAsync(protocol, path, null, cancellationToken).ConfigureAwait(false); } /// @@ -1437,7 +1442,7 @@ public async Task IsUnityRunningAsync(CancellationToken cancellationToken /// public async Task GetLoginItemSettingsAsync(CancellationToken cancellationToken = default) { - return await GetLoginItemSettingsAsync(null, cancellationToken); + return await this.GetLoginItemSettingsAsync(null, cancellationToken).ConfigureAwait(false); } /// @@ -1624,7 +1629,7 @@ public void On(string eventName, Action action) /// The event name /// The handler public async Task On(string eventName, Action action) - => await Events.Instance.On(ModuleName, eventName, action); + => await Events.Instance.On(ModuleName, eventName, action).ConfigureAwait(false); /// /// Subscribe to an unmapped event on the module once. /// @@ -1638,6 +1643,6 @@ public void Once(string eventName, Action action) /// The event name /// The handler public async Task Once(string eventName, Action action) - => await Events.Instance.Once(ModuleName, eventName, action); + => await Events.Instance.Once(ModuleName, eventName, action).ConfigureAwait(false); } } diff --git a/src/ElectronNET.API/AutoUpdater.cs b/src/ElectronNET.API/API/AutoUpdater.cs similarity index 100% rename from src/ElectronNET.API/AutoUpdater.cs rename to src/ElectronNET.API/API/AutoUpdater.cs diff --git a/src/ElectronNET.API/BrowserView.cs b/src/ElectronNET.API/API/BrowserView.cs similarity index 100% rename from src/ElectronNET.API/BrowserView.cs rename to src/ElectronNET.API/API/BrowserView.cs diff --git a/src/ElectronNET.API/BrowserWindow.cs b/src/ElectronNET.API/API/BrowserWindow.cs similarity index 100% rename from src/ElectronNET.API/BrowserWindow.cs rename to src/ElectronNET.API/API/BrowserWindow.cs diff --git a/src/ElectronNET.API/Clipboard.cs b/src/ElectronNET.API/API/Clipboard.cs similarity index 100% rename from src/ElectronNET.API/Clipboard.cs rename to src/ElectronNET.API/API/Clipboard.cs diff --git a/src/ElectronNET.API/CommandLine.cs b/src/ElectronNET.API/API/CommandLine.cs similarity index 100% rename from src/ElectronNET.API/CommandLine.cs rename to src/ElectronNET.API/API/CommandLine.cs diff --git a/src/ElectronNET.API/Dialog.cs b/src/ElectronNET.API/API/Dialog.cs similarity index 96% rename from src/ElectronNET.API/Dialog.cs rename to src/ElectronNET.API/API/Dialog.cs index ddc7be5d..f8cc4136 100644 --- a/src/ElectronNET.API/Dialog.cs +++ b/src/ElectronNET.API/API/Dialog.cs @@ -103,7 +103,7 @@ public Task ShowSaveDialogAsync(BrowserWindow browserWindow, SaveDialogO /// The API call will be asynchronous and the result will be passed via MessageBoxResult. public async Task ShowMessageBoxAsync(string message) { - return await ShowMessageBoxAsync(null, new MessageBoxOptions(message)); + return await this.ShowMessageBoxAsync(null, new MessageBoxOptions(message)).ConfigureAwait(false); } /// @@ -117,7 +117,7 @@ public async Task ShowMessageBoxAsync(string message) /// The API call will be asynchronous and the result will be passed via MessageBoxResult. public async Task ShowMessageBoxAsync(MessageBoxOptions messageBoxOptions) { - return await ShowMessageBoxAsync(null, messageBoxOptions); + return await this.ShowMessageBoxAsync(null, messageBoxOptions).ConfigureAwait(false); } /// @@ -130,7 +130,7 @@ public async Task ShowMessageBoxAsync(MessageBoxOptions messag /// The API call will be asynchronous and the result will be passed via MessageBoxResult. public async Task ShowMessageBoxAsync(BrowserWindow browserWindow, string message) { - return await ShowMessageBoxAsync(browserWindow, new MessageBoxOptions(message)); + return await this.ShowMessageBoxAsync(browserWindow, new MessageBoxOptions(message)).ConfigureAwait(false); } /// diff --git a/src/ElectronNET.API/Dock.cs b/src/ElectronNET.API/API/Dock.cs similarity index 100% rename from src/ElectronNET.API/Dock.cs rename to src/ElectronNET.API/API/Dock.cs diff --git a/src/ElectronNET.API/Electron.cs b/src/ElectronNET.API/API/Electron.cs similarity index 100% rename from src/ElectronNET.API/Electron.cs rename to src/ElectronNET.API/API/Electron.cs diff --git a/src/ElectronNET.API/Entities/AboutPanelOptions.cs b/src/ElectronNET.API/API/Entities/AboutPanelOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/AboutPanelOptions.cs rename to src/ElectronNET.API/API/Entities/AboutPanelOptions.cs diff --git a/src/ElectronNET.API/Entities/AddRepresentationOptions.cs b/src/ElectronNET.API/API/Entities/AddRepresentationOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/AddRepresentationOptions.cs rename to src/ElectronNET.API/API/Entities/AddRepresentationOptions.cs diff --git a/src/ElectronNET.API/Entities/AppDetailsOptions.cs b/src/ElectronNET.API/API/Entities/AppDetailsOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/AppDetailsOptions.cs rename to src/ElectronNET.API/API/Entities/AppDetailsOptions.cs diff --git a/src/ElectronNET.API/Entities/AutoResizeOptions.cs b/src/ElectronNET.API/API/Entities/AutoResizeOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/AutoResizeOptions.cs rename to src/ElectronNET.API/API/Entities/AutoResizeOptions.cs diff --git a/src/ElectronNET.API/Entities/BitmapOptions.cs b/src/ElectronNET.API/API/Entities/BitmapOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/BitmapOptions.cs rename to src/ElectronNET.API/API/Entities/BitmapOptions.cs diff --git a/src/ElectronNET.API/Entities/Blob.cs b/src/ElectronNET.API/API/Entities/Blob.cs similarity index 100% rename from src/ElectronNET.API/Entities/Blob.cs rename to src/ElectronNET.API/API/Entities/Blob.cs diff --git a/src/ElectronNET.API/Entities/BlockMapDataHolder.cs b/src/ElectronNET.API/API/Entities/BlockMapDataHolder.cs similarity index 100% rename from src/ElectronNET.API/Entities/BlockMapDataHolder.cs rename to src/ElectronNET.API/API/Entities/BlockMapDataHolder.cs diff --git a/src/ElectronNET.API/Entities/BrowserViewConstructorOptions.cs b/src/ElectronNET.API/API/Entities/BrowserViewConstructorOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/BrowserViewConstructorOptions.cs rename to src/ElectronNET.API/API/Entities/BrowserViewConstructorOptions.cs diff --git a/src/ElectronNET.API/Entities/BrowserWindowOptions.cs b/src/ElectronNET.API/API/Entities/BrowserWindowOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/BrowserWindowOptions.cs rename to src/ElectronNET.API/API/Entities/BrowserWindowOptions.cs diff --git a/src/ElectronNET.API/Entities/CPUUsage.cs b/src/ElectronNET.API/API/Entities/CPUUsage.cs similarity index 100% rename from src/ElectronNET.API/Entities/CPUUsage.cs rename to src/ElectronNET.API/API/Entities/CPUUsage.cs diff --git a/src/ElectronNET.API/Entities/Certificate.cs b/src/ElectronNET.API/API/Entities/Certificate.cs similarity index 100% rename from src/ElectronNET.API/Entities/Certificate.cs rename to src/ElectronNET.API/API/Entities/Certificate.cs diff --git a/src/ElectronNET.API/Entities/CertificatePrincipal.cs b/src/ElectronNET.API/API/Entities/CertificatePrincipal.cs similarity index 100% rename from src/ElectronNET.API/Entities/CertificatePrincipal.cs rename to src/ElectronNET.API/API/Entities/CertificatePrincipal.cs diff --git a/src/ElectronNET.API/Entities/CertificateTrustDialogOptions.cs b/src/ElectronNET.API/API/Entities/CertificateTrustDialogOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/CertificateTrustDialogOptions.cs rename to src/ElectronNET.API/API/Entities/CertificateTrustDialogOptions.cs diff --git a/src/ElectronNET.API/Entities/ChromeExtensionInfo.cs b/src/ElectronNET.API/API/Entities/ChromeExtensionInfo.cs similarity index 100% rename from src/ElectronNET.API/Entities/ChromeExtensionInfo.cs rename to src/ElectronNET.API/API/Entities/ChromeExtensionInfo.cs diff --git a/src/ElectronNET.API/Entities/ClearStorageDataOptions.cs b/src/ElectronNET.API/API/Entities/ClearStorageDataOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/ClearStorageDataOptions.cs rename to src/ElectronNET.API/API/Entities/ClearStorageDataOptions.cs diff --git a/src/ElectronNET.API/Entities/Cookie.cs b/src/ElectronNET.API/API/Entities/Cookie.cs similarity index 100% rename from src/ElectronNET.API/Entities/Cookie.cs rename to src/ElectronNET.API/API/Entities/Cookie.cs diff --git a/src/ElectronNET.API/Entities/CookieChangedCause.cs b/src/ElectronNET.API/API/Entities/CookieChangedCause.cs similarity index 100% rename from src/ElectronNET.API/Entities/CookieChangedCause.cs rename to src/ElectronNET.API/API/Entities/CookieChangedCause.cs diff --git a/src/ElectronNET.API/Entities/CookieDetails.cs b/src/ElectronNET.API/API/Entities/CookieDetails.cs similarity index 100% rename from src/ElectronNET.API/Entities/CookieDetails.cs rename to src/ElectronNET.API/API/Entities/CookieDetails.cs diff --git a/src/ElectronNET.API/Entities/CookieFilter.cs b/src/ElectronNET.API/API/Entities/CookieFilter.cs similarity index 100% rename from src/ElectronNET.API/Entities/CookieFilter.cs rename to src/ElectronNET.API/API/Entities/CookieFilter.cs diff --git a/src/ElectronNET.API/Entities/CreateFromBitmapOptions.cs b/src/ElectronNET.API/API/Entities/CreateFromBitmapOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/CreateFromBitmapOptions.cs rename to src/ElectronNET.API/API/Entities/CreateFromBitmapOptions.cs diff --git a/src/ElectronNET.API/Entities/CreateFromBufferOptions.cs b/src/ElectronNET.API/API/Entities/CreateFromBufferOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/CreateFromBufferOptions.cs rename to src/ElectronNET.API/API/Entities/CreateFromBufferOptions.cs diff --git a/src/ElectronNET.API/Entities/CreateInterruptedDownloadOptions.cs b/src/ElectronNET.API/API/Entities/CreateInterruptedDownloadOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/CreateInterruptedDownloadOptions.cs rename to src/ElectronNET.API/API/Entities/CreateInterruptedDownloadOptions.cs diff --git a/src/ElectronNET.API/Entities/Data.cs b/src/ElectronNET.API/API/Entities/Data.cs similarity index 100% rename from src/ElectronNET.API/Entities/Data.cs rename to src/ElectronNET.API/API/Entities/Data.cs diff --git a/src/ElectronNET.API/Entities/DefaultFontFamily.cs b/src/ElectronNET.API/API/Entities/DefaultFontFamily.cs similarity index 100% rename from src/ElectronNET.API/Entities/DefaultFontFamily.cs rename to src/ElectronNET.API/API/Entities/DefaultFontFamily.cs diff --git a/src/ElectronNET.API/Entities/DevToolsMode.cs b/src/ElectronNET.API/API/Entities/DevToolsMode.cs similarity index 100% rename from src/ElectronNET.API/Entities/DevToolsMode.cs rename to src/ElectronNET.API/API/Entities/DevToolsMode.cs diff --git a/src/ElectronNET.API/Entities/Display.cs b/src/ElectronNET.API/API/Entities/Display.cs similarity index 100% rename from src/ElectronNET.API/Entities/Display.cs rename to src/ElectronNET.API/API/Entities/Display.cs diff --git a/src/ElectronNET.API/Entities/DisplayBalloonOptions.cs b/src/ElectronNET.API/API/Entities/DisplayBalloonOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/DisplayBalloonOptions.cs rename to src/ElectronNET.API/API/Entities/DisplayBalloonOptions.cs diff --git a/src/ElectronNET.API/Entities/DockBounceType.cs b/src/ElectronNET.API/API/Entities/DockBounceType.cs similarity index 100% rename from src/ElectronNET.API/Entities/DockBounceType.cs rename to src/ElectronNET.API/API/Entities/DockBounceType.cs diff --git a/src/ElectronNET.API/Entities/EnableNetworkEmulationOptions.cs b/src/ElectronNET.API/API/Entities/EnableNetworkEmulationOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/EnableNetworkEmulationOptions.cs rename to src/ElectronNET.API/API/Entities/EnableNetworkEmulationOptions.cs diff --git a/src/ElectronNET.API/Entities/Extension.cs b/src/ElectronNET.API/API/Entities/Extension.cs similarity index 100% rename from src/ElectronNET.API/Entities/Extension.cs rename to src/ElectronNET.API/API/Entities/Extension.cs diff --git a/src/ElectronNET.API/Entities/FileFilter.cs b/src/ElectronNET.API/API/Entities/FileFilter.cs similarity index 100% rename from src/ElectronNET.API/Entities/FileFilter.cs rename to src/ElectronNET.API/API/Entities/FileFilter.cs diff --git a/src/ElectronNET.API/Entities/FileIconOptions.cs b/src/ElectronNET.API/API/Entities/FileIconOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/FileIconOptions.cs rename to src/ElectronNET.API/API/Entities/FileIconOptions.cs diff --git a/src/ElectronNET.API/Entities/FileIconSize.cs b/src/ElectronNET.API/API/Entities/FileIconSize.cs similarity index 100% rename from src/ElectronNET.API/Entities/FileIconSize.cs rename to src/ElectronNET.API/API/Entities/FileIconSize.cs diff --git a/src/ElectronNET.API/Entities/FocusOptions.cs b/src/ElectronNET.API/API/Entities/FocusOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/FocusOptions.cs rename to src/ElectronNET.API/API/Entities/FocusOptions.cs diff --git a/src/ElectronNET.API/Entities/GPUFeatureStatus.cs b/src/ElectronNET.API/API/Entities/GPUFeatureStatus.cs similarity index 100% rename from src/ElectronNET.API/Entities/GPUFeatureStatus.cs rename to src/ElectronNET.API/API/Entities/GPUFeatureStatus.cs diff --git a/src/ElectronNET.API/Entities/IPostData.cs b/src/ElectronNET.API/API/Entities/IPostData.cs similarity index 100% rename from src/ElectronNET.API/Entities/IPostData.cs rename to src/ElectronNET.API/API/Entities/IPostData.cs diff --git a/src/ElectronNET.API/Entities/ImportCertificateOptions.cs b/src/ElectronNET.API/API/Entities/ImportCertificateOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/ImportCertificateOptions.cs rename to src/ElectronNET.API/API/Entities/ImportCertificateOptions.cs diff --git a/src/ElectronNET.API/Entities/InputEvent.cs b/src/ElectronNET.API/API/Entities/InputEvent.cs similarity index 98% rename from src/ElectronNET.API/Entities/InputEvent.cs rename to src/ElectronNET.API/API/Entities/InputEvent.cs index 95f3d571..aa385429 100644 --- a/src/ElectronNET.API/Entities/InputEvent.cs +++ b/src/ElectronNET.API/API/Entities/InputEvent.cs @@ -1,10 +1,11 @@ ๏ปฟusing Newtonsoft.Json.Converters; using System.Collections.Generic; -using ElectronNET.API.Converter; using Newtonsoft.Json; namespace ElectronNET.API.Entities { + using ElectronNET.Converter; + /// /// /// diff --git a/src/ElectronNET.API/Entities/InputEventType.cs b/src/ElectronNET.API/API/Entities/InputEventType.cs similarity index 100% rename from src/ElectronNET.API/Entities/InputEventType.cs rename to src/ElectronNET.API/API/Entities/InputEventType.cs diff --git a/src/ElectronNET.API/Entities/JumpListCategory.cs b/src/ElectronNET.API/API/Entities/JumpListCategory.cs similarity index 100% rename from src/ElectronNET.API/Entities/JumpListCategory.cs rename to src/ElectronNET.API/API/Entities/JumpListCategory.cs diff --git a/src/ElectronNET.API/Entities/JumpListCategoryType.cs b/src/ElectronNET.API/API/Entities/JumpListCategoryType.cs similarity index 100% rename from src/ElectronNET.API/Entities/JumpListCategoryType.cs rename to src/ElectronNET.API/API/Entities/JumpListCategoryType.cs diff --git a/src/ElectronNET.API/Entities/JumpListItem.cs b/src/ElectronNET.API/API/Entities/JumpListItem.cs similarity index 100% rename from src/ElectronNET.API/Entities/JumpListItem.cs rename to src/ElectronNET.API/API/Entities/JumpListItem.cs diff --git a/src/ElectronNET.API/Entities/JumpListItemType.cs b/src/ElectronNET.API/API/Entities/JumpListItemType.cs similarity index 100% rename from src/ElectronNET.API/Entities/JumpListItemType.cs rename to src/ElectronNET.API/API/Entities/JumpListItemType.cs diff --git a/src/ElectronNET.API/Entities/JumpListSettings.cs b/src/ElectronNET.API/API/Entities/JumpListSettings.cs similarity index 100% rename from src/ElectronNET.API/Entities/JumpListSettings.cs rename to src/ElectronNET.API/API/Entities/JumpListSettings.cs diff --git a/src/ElectronNET.API/Entities/LoadURLOptions.cs b/src/ElectronNET.API/API/Entities/LoadURLOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/LoadURLOptions.cs rename to src/ElectronNET.API/API/Entities/LoadURLOptions.cs diff --git a/src/ElectronNET.API/Entities/LoginItemSettings.cs b/src/ElectronNET.API/API/Entities/LoginItemSettings.cs similarity index 100% rename from src/ElectronNET.API/Entities/LoginItemSettings.cs rename to src/ElectronNET.API/API/Entities/LoginItemSettings.cs diff --git a/src/ElectronNET.API/Entities/LoginItemSettingsOptions.cs b/src/ElectronNET.API/API/Entities/LoginItemSettingsOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/LoginItemSettingsOptions.cs rename to src/ElectronNET.API/API/Entities/LoginItemSettingsOptions.cs diff --git a/src/ElectronNET.API/Entities/LoginSettings.cs b/src/ElectronNET.API/API/Entities/LoginSettings.cs similarity index 100% rename from src/ElectronNET.API/Entities/LoginSettings.cs rename to src/ElectronNET.API/API/Entities/LoginSettings.cs diff --git a/src/ElectronNET.API/Entities/Margins.cs b/src/ElectronNET.API/API/Entities/Margins.cs similarity index 100% rename from src/ElectronNET.API/Entities/Margins.cs rename to src/ElectronNET.API/API/Entities/Margins.cs diff --git a/src/ElectronNET.API/Entities/MemoryInfo.cs b/src/ElectronNET.API/API/Entities/MemoryInfo.cs similarity index 100% rename from src/ElectronNET.API/Entities/MemoryInfo.cs rename to src/ElectronNET.API/API/Entities/MemoryInfo.cs diff --git a/src/ElectronNET.API/Entities/MenuItem.cs b/src/ElectronNET.API/API/Entities/MenuItem.cs similarity index 100% rename from src/ElectronNET.API/Entities/MenuItem.cs rename to src/ElectronNET.API/API/Entities/MenuItem.cs diff --git a/src/ElectronNET.API/Entities/MenuRole.cs b/src/ElectronNET.API/API/Entities/MenuRole.cs similarity index 100% rename from src/ElectronNET.API/Entities/MenuRole.cs rename to src/ElectronNET.API/API/Entities/MenuRole.cs diff --git a/src/ElectronNET.API/Entities/MenuType.cs b/src/ElectronNET.API/API/Entities/MenuType.cs similarity index 100% rename from src/ElectronNET.API/Entities/MenuType.cs rename to src/ElectronNET.API/API/Entities/MenuType.cs diff --git a/src/ElectronNET.API/Entities/MessageBoxOptions.cs b/src/ElectronNET.API/API/Entities/MessageBoxOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/MessageBoxOptions.cs rename to src/ElectronNET.API/API/Entities/MessageBoxOptions.cs diff --git a/src/ElectronNET.API/Entities/MessageBoxResult.cs b/src/ElectronNET.API/API/Entities/MessageBoxResult.cs similarity index 100% rename from src/ElectronNET.API/Entities/MessageBoxResult.cs rename to src/ElectronNET.API/API/Entities/MessageBoxResult.cs diff --git a/src/ElectronNET.API/Entities/MessageBoxType.cs b/src/ElectronNET.API/API/Entities/MessageBoxType.cs similarity index 100% rename from src/ElectronNET.API/Entities/MessageBoxType.cs rename to src/ElectronNET.API/API/Entities/MessageBoxType.cs diff --git a/src/ElectronNET.API/Entities/ModifierType.cs b/src/ElectronNET.API/API/Entities/ModifierType.cs similarity index 100% rename from src/ElectronNET.API/Entities/ModifierType.cs rename to src/ElectronNET.API/API/Entities/ModifierType.cs diff --git a/src/ElectronNET.API/Entities/NativeImage.cs b/src/ElectronNET.API/API/Entities/NativeImage.cs similarity index 100% rename from src/ElectronNET.API/Entities/NativeImage.cs rename to src/ElectronNET.API/API/Entities/NativeImage.cs diff --git a/src/ElectronNET.API/Entities/NativeImageJsonConverter.cs b/src/ElectronNET.API/API/Entities/NativeImageJsonConverter.cs similarity index 100% rename from src/ElectronNET.API/Entities/NativeImageJsonConverter.cs rename to src/ElectronNET.API/API/Entities/NativeImageJsonConverter.cs diff --git a/src/ElectronNET.API/Entities/NotificationAction.cs b/src/ElectronNET.API/API/Entities/NotificationAction.cs similarity index 100% rename from src/ElectronNET.API/Entities/NotificationAction.cs rename to src/ElectronNET.API/API/Entities/NotificationAction.cs diff --git a/src/ElectronNET.API/Entities/NotificationOptions.cs b/src/ElectronNET.API/API/Entities/NotificationOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/NotificationOptions.cs rename to src/ElectronNET.API/API/Entities/NotificationOptions.cs diff --git a/src/ElectronNET.API/Entities/OnDidFailLoadInfo.cs b/src/ElectronNET.API/API/Entities/OnDidFailLoadInfo.cs similarity index 100% rename from src/ElectronNET.API/Entities/OnDidFailLoadInfo.cs rename to src/ElectronNET.API/API/Entities/OnDidFailLoadInfo.cs diff --git a/src/ElectronNET.API/Entities/OnDidNavigateInfo.cs b/src/ElectronNET.API/API/Entities/OnDidNavigateInfo.cs similarity index 100% rename from src/ElectronNET.API/Entities/OnDidNavigateInfo.cs rename to src/ElectronNET.API/API/Entities/OnDidNavigateInfo.cs diff --git a/src/ElectronNET.API/Entities/OnTopLevel.cs b/src/ElectronNET.API/API/Entities/OnTopLevel.cs similarity index 100% rename from src/ElectronNET.API/Entities/OnTopLevel.cs rename to src/ElectronNET.API/API/Entities/OnTopLevel.cs diff --git a/src/ElectronNET.API/Entities/OpenDevToolsOptions.cs b/src/ElectronNET.API/API/Entities/OpenDevToolsOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/OpenDevToolsOptions.cs rename to src/ElectronNET.API/API/Entities/OpenDevToolsOptions.cs diff --git a/src/ElectronNET.API/Entities/OpenDialogOptions.cs b/src/ElectronNET.API/API/Entities/OpenDialogOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/OpenDialogOptions.cs rename to src/ElectronNET.API/API/Entities/OpenDialogOptions.cs diff --git a/src/ElectronNET.API/Entities/OpenDialogProperty.cs b/src/ElectronNET.API/API/Entities/OpenDialogProperty.cs similarity index 100% rename from src/ElectronNET.API/Entities/OpenDialogProperty.cs rename to src/ElectronNET.API/API/Entities/OpenDialogProperty.cs diff --git a/src/ElectronNET.API/Entities/OpenExternalOptions.cs b/src/ElectronNET.API/API/Entities/OpenExternalOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/OpenExternalOptions.cs rename to src/ElectronNET.API/API/Entities/OpenExternalOptions.cs diff --git a/src/ElectronNET.API/Entities/PathName.cs b/src/ElectronNET.API/API/Entities/PathName.cs similarity index 100% rename from src/ElectronNET.API/Entities/PathName.cs rename to src/ElectronNET.API/API/Entities/PathName.cs diff --git a/src/ElectronNET.API/Entities/Point.cs b/src/ElectronNET.API/API/Entities/Point.cs similarity index 100% rename from src/ElectronNET.API/Entities/Point.cs rename to src/ElectronNET.API/API/Entities/Point.cs diff --git a/src/ElectronNET.API/Entities/PrintOptions.cs b/src/ElectronNET.API/API/Entities/PrintOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/PrintOptions.cs rename to src/ElectronNET.API/API/Entities/PrintOptions.cs diff --git a/src/ElectronNET.API/Entities/PrintToPDFOptions.cs b/src/ElectronNET.API/API/Entities/PrintToPDFOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/PrintToPDFOptions.cs rename to src/ElectronNET.API/API/Entities/PrintToPDFOptions.cs diff --git a/src/ElectronNET.API/Entities/PrinterInfo.cs b/src/ElectronNET.API/API/Entities/PrinterInfo.cs similarity index 100% rename from src/ElectronNET.API/Entities/PrinterInfo.cs rename to src/ElectronNET.API/API/Entities/PrinterInfo.cs diff --git a/src/ElectronNET.API/Entities/ProcessMetric.cs b/src/ElectronNET.API/API/Entities/ProcessMetric.cs similarity index 100% rename from src/ElectronNET.API/Entities/ProcessMetric.cs rename to src/ElectronNET.API/API/Entities/ProcessMetric.cs diff --git a/src/ElectronNET.API/Entities/ProgressBarMode.cs b/src/ElectronNET.API/API/Entities/ProgressBarMode.cs similarity index 100% rename from src/ElectronNET.API/Entities/ProgressBarMode.cs rename to src/ElectronNET.API/API/Entities/ProgressBarMode.cs diff --git a/src/ElectronNET.API/Entities/ProgressBarOptions.cs b/src/ElectronNET.API/API/Entities/ProgressBarOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/ProgressBarOptions.cs rename to src/ElectronNET.API/API/Entities/ProgressBarOptions.cs diff --git a/src/ElectronNET.API/Entities/ProgressInfo.cs b/src/ElectronNET.API/API/Entities/ProgressInfo.cs similarity index 100% rename from src/ElectronNET.API/Entities/ProgressInfo.cs rename to src/ElectronNET.API/API/Entities/ProgressInfo.cs diff --git a/src/ElectronNET.API/Entities/ProxyConfig.cs b/src/ElectronNET.API/API/Entities/ProxyConfig.cs similarity index 100% rename from src/ElectronNET.API/Entities/ProxyConfig.cs rename to src/ElectronNET.API/API/Entities/ProxyConfig.cs diff --git a/src/ElectronNET.API/Entities/ReadBookmark.cs b/src/ElectronNET.API/API/Entities/ReadBookmark.cs similarity index 100% rename from src/ElectronNET.API/Entities/ReadBookmark.cs rename to src/ElectronNET.API/API/Entities/ReadBookmark.cs diff --git a/src/ElectronNET.API/Entities/Rectangle.cs b/src/ElectronNET.API/API/Entities/Rectangle.cs similarity index 100% rename from src/ElectronNET.API/Entities/Rectangle.cs rename to src/ElectronNET.API/API/Entities/Rectangle.cs diff --git a/src/ElectronNET.API/Entities/RelaunchOptions.cs b/src/ElectronNET.API/API/Entities/RelaunchOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/RelaunchOptions.cs rename to src/ElectronNET.API/API/Entities/RelaunchOptions.cs diff --git a/src/ElectronNET.API/Entities/ReleaseNoteInfo.cs b/src/ElectronNET.API/API/Entities/ReleaseNoteInfo.cs similarity index 100% rename from src/ElectronNET.API/Entities/ReleaseNoteInfo.cs rename to src/ElectronNET.API/API/Entities/ReleaseNoteInfo.cs diff --git a/src/ElectronNET.API/Entities/RemovePassword.cs b/src/ElectronNET.API/API/Entities/RemovePassword.cs similarity index 100% rename from src/ElectronNET.API/Entities/RemovePassword.cs rename to src/ElectronNET.API/API/Entities/RemovePassword.cs diff --git a/src/ElectronNET.API/Entities/ResizeOptions.cs b/src/ElectronNET.API/API/Entities/ResizeOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/ResizeOptions.cs rename to src/ElectronNET.API/API/Entities/ResizeOptions.cs diff --git a/src/ElectronNET.API/Entities/SaveDialogOptions.cs b/src/ElectronNET.API/API/Entities/SaveDialogOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/SaveDialogOptions.cs rename to src/ElectronNET.API/API/Entities/SaveDialogOptions.cs diff --git a/src/ElectronNET.API/Entities/Scheme.cs b/src/ElectronNET.API/API/Entities/Scheme.cs similarity index 100% rename from src/ElectronNET.API/Entities/Scheme.cs rename to src/ElectronNET.API/API/Entities/Scheme.cs diff --git a/src/ElectronNET.API/Entities/SemVer.cs b/src/ElectronNET.API/API/Entities/SemVer.cs similarity index 100% rename from src/ElectronNET.API/Entities/SemVer.cs rename to src/ElectronNET.API/API/Entities/SemVer.cs diff --git a/src/ElectronNET.API/Entities/ShortcutDetails.cs b/src/ElectronNET.API/API/Entities/ShortcutDetails.cs similarity index 100% rename from src/ElectronNET.API/Entities/ShortcutDetails.cs rename to src/ElectronNET.API/API/Entities/ShortcutDetails.cs diff --git a/src/ElectronNET.API/Entities/ShortcutLinkOperation.cs b/src/ElectronNET.API/API/Entities/ShortcutLinkOperation.cs similarity index 100% rename from src/ElectronNET.API/Entities/ShortcutLinkOperation.cs rename to src/ElectronNET.API/API/Entities/ShortcutLinkOperation.cs diff --git a/src/ElectronNET.API/Entities/Size.cs b/src/ElectronNET.API/API/Entities/Size.cs similarity index 100% rename from src/ElectronNET.API/Entities/Size.cs rename to src/ElectronNET.API/API/Entities/Size.cs diff --git a/src/ElectronNET.API/Entities/ThemeSourceMode.cs b/src/ElectronNET.API/API/Entities/ThemeSourceMode.cs similarity index 100% rename from src/ElectronNET.API/Entities/ThemeSourceMode.cs rename to src/ElectronNET.API/API/Entities/ThemeSourceMode.cs diff --git a/src/ElectronNET.API/Entities/ThumbarButton.cs b/src/ElectronNET.API/API/Entities/ThumbarButton.cs similarity index 100% rename from src/ElectronNET.API/Entities/ThumbarButton.cs rename to src/ElectronNET.API/API/Entities/ThumbarButton.cs diff --git a/src/ElectronNET.API/Entities/ThumbarButtonFlag.cs b/src/ElectronNET.API/API/Entities/ThumbarButtonFlag.cs similarity index 100% rename from src/ElectronNET.API/Entities/ThumbarButtonFlag.cs rename to src/ElectronNET.API/API/Entities/ThumbarButtonFlag.cs diff --git a/src/ElectronNET.API/Entities/TitleBarStyle.cs b/src/ElectronNET.API/API/Entities/TitleBarStyle.cs similarity index 100% rename from src/ElectronNET.API/Entities/TitleBarStyle.cs rename to src/ElectronNET.API/API/Entities/TitleBarStyle.cs diff --git a/src/ElectronNET.API/Entities/ToBitmapOptions.cs b/src/ElectronNET.API/API/Entities/ToBitmapOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/ToBitmapOptions.cs rename to src/ElectronNET.API/API/Entities/ToBitmapOptions.cs diff --git a/src/ElectronNET.API/Entities/ToDataUrlOptions.cs b/src/ElectronNET.API/API/Entities/ToDataUrlOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/ToDataUrlOptions.cs rename to src/ElectronNET.API/API/Entities/ToDataUrlOptions.cs diff --git a/src/ElectronNET.API/Entities/ToPNGOptions.cs b/src/ElectronNET.API/API/Entities/ToPNGOptions.cs similarity index 100% rename from src/ElectronNET.API/Entities/ToPNGOptions.cs rename to src/ElectronNET.API/API/Entities/ToPNGOptions.cs diff --git a/src/ElectronNET.API/Entities/TrayClickEventArgs.cs b/src/ElectronNET.API/API/Entities/TrayClickEventArgs.cs similarity index 100% rename from src/ElectronNET.API/Entities/TrayClickEventArgs.cs rename to src/ElectronNET.API/API/Entities/TrayClickEventArgs.cs diff --git a/src/ElectronNET.API/Entities/UpdateCancellationToken.cs b/src/ElectronNET.API/API/Entities/UpdateCancellationToken.cs similarity index 100% rename from src/ElectronNET.API/Entities/UpdateCancellationToken.cs rename to src/ElectronNET.API/API/Entities/UpdateCancellationToken.cs diff --git a/src/ElectronNET.API/Entities/UpdateCheckResult.cs b/src/ElectronNET.API/API/Entities/UpdateCheckResult.cs similarity index 100% rename from src/ElectronNET.API/Entities/UpdateCheckResult.cs rename to src/ElectronNET.API/API/Entities/UpdateCheckResult.cs diff --git a/src/ElectronNET.API/Entities/UpdateFileInfo.cs b/src/ElectronNET.API/API/Entities/UpdateFileInfo.cs similarity index 100% rename from src/ElectronNET.API/Entities/UpdateFileInfo.cs rename to src/ElectronNET.API/API/Entities/UpdateFileInfo.cs diff --git a/src/ElectronNET.API/Entities/UpdateInfo.cs b/src/ElectronNET.API/API/Entities/UpdateInfo.cs similarity index 100% rename from src/ElectronNET.API/Entities/UpdateInfo.cs rename to src/ElectronNET.API/API/Entities/UpdateInfo.cs diff --git a/src/ElectronNET.API/Entities/UploadFile.cs b/src/ElectronNET.API/API/Entities/UploadFile.cs similarity index 100% rename from src/ElectronNET.API/Entities/UploadFile.cs rename to src/ElectronNET.API/API/Entities/UploadFile.cs diff --git a/src/ElectronNET.API/Entities/UploadRawData.cs b/src/ElectronNET.API/API/Entities/UploadRawData.cs similarity index 100% rename from src/ElectronNET.API/Entities/UploadRawData.cs rename to src/ElectronNET.API/API/Entities/UploadRawData.cs diff --git a/src/ElectronNET.API/Entities/UserTask.cs b/src/ElectronNET.API/API/Entities/UserTask.cs similarity index 100% rename from src/ElectronNET.API/Entities/UserTask.cs rename to src/ElectronNET.API/API/Entities/UserTask.cs diff --git a/src/ElectronNET.API/Entities/Vibrancy.cs b/src/ElectronNET.API/API/Entities/Vibrancy.cs similarity index 100% rename from src/ElectronNET.API/Entities/Vibrancy.cs rename to src/ElectronNET.API/API/Entities/Vibrancy.cs diff --git a/src/ElectronNET.API/Entities/WebPreferences.cs b/src/ElectronNET.API/API/Entities/WebPreferences.cs similarity index 100% rename from src/ElectronNET.API/Entities/WebPreferences.cs rename to src/ElectronNET.API/API/Entities/WebPreferences.cs diff --git a/src/ElectronNET.API/Extensions/EnumExtensions.cs b/src/ElectronNET.API/API/Extensions/EnumExtensions.cs similarity index 100% rename from src/ElectronNET.API/Extensions/EnumExtensions.cs rename to src/ElectronNET.API/API/Extensions/EnumExtensions.cs diff --git a/src/ElectronNET.API/Extensions/MenuItemExtensions.cs b/src/ElectronNET.API/API/Extensions/MenuItemExtensions.cs similarity index 100% rename from src/ElectronNET.API/Extensions/MenuItemExtensions.cs rename to src/ElectronNET.API/API/Extensions/MenuItemExtensions.cs diff --git a/src/ElectronNET.API/Extensions/ThumbarButtonExtensions.cs b/src/ElectronNET.API/API/Extensions/ThumbarButtonExtensions.cs similarity index 100% rename from src/ElectronNET.API/Extensions/ThumbarButtonExtensions.cs rename to src/ElectronNET.API/API/Extensions/ThumbarButtonExtensions.cs diff --git a/src/ElectronNET.API/GlobalShortcut.cs b/src/ElectronNET.API/API/GlobalShortcut.cs similarity index 100% rename from src/ElectronNET.API/GlobalShortcut.cs rename to src/ElectronNET.API/API/GlobalShortcut.cs diff --git a/src/ElectronNET.API/HostHook.cs b/src/ElectronNET.API/API/HostHook.cs similarity index 100% rename from src/ElectronNET.API/HostHook.cs rename to src/ElectronNET.API/API/HostHook.cs diff --git a/src/ElectronNET.API/HybridSupport.cs b/src/ElectronNET.API/API/HybridSupport.cs similarity index 86% rename from src/ElectronNET.API/HybridSupport.cs rename to src/ElectronNET.API/API/HybridSupport.cs index 935ea512..a84641e7 100644 --- a/src/ElectronNET.API/HybridSupport.cs +++ b/src/ElectronNET.API/API/HybridSupport.cs @@ -15,7 +15,7 @@ public static bool IsElectronActive { get { - return !string.IsNullOrEmpty(BridgeSettings.SocketPort); + return ElectronNetRuntime.RuntimeController != null; } } } diff --git a/src/ElectronNET.API/IpcMain.cs b/src/ElectronNET.API/API/IpcMain.cs similarity index 99% rename from src/ElectronNET.API/IpcMain.cs rename to src/ElectronNET.API/API/IpcMain.cs index 3239083b..31122d18 100644 --- a/src/ElectronNET.API/IpcMain.cs +++ b/src/ElectronNET.API/API/IpcMain.cs @@ -46,7 +46,7 @@ internal static IpcMain Instance /// Callback Method. public async Task On(string channel, Action listener) { - await BridgeConnector.Socket.Emit("registerIpcMainChannel", channel); + await BridgeConnector.Socket.Emit("registerIpcMainChannel", channel).ConfigureAwait(false); BridgeConnector.Socket.Off(channel); BridgeConnector.Socket.On(channel, (args) => { diff --git a/src/ElectronNET.API/Menu.cs b/src/ElectronNET.API/API/Menu.cs similarity index 100% rename from src/ElectronNET.API/Menu.cs rename to src/ElectronNET.API/API/Menu.cs diff --git a/src/ElectronNET.API/NativeTheme.cs b/src/ElectronNET.API/API/NativeTheme.cs similarity index 100% rename from src/ElectronNET.API/NativeTheme.cs rename to src/ElectronNET.API/API/NativeTheme.cs diff --git a/src/ElectronNET.API/Notification.cs b/src/ElectronNET.API/API/Notification.cs similarity index 100% rename from src/ElectronNET.API/Notification.cs rename to src/ElectronNET.API/API/Notification.cs diff --git a/src/ElectronNET.API/PowerMonitor.cs b/src/ElectronNET.API/API/PowerMonitor.cs similarity index 100% rename from src/ElectronNET.API/PowerMonitor.cs rename to src/ElectronNET.API/API/PowerMonitor.cs diff --git a/src/ElectronNET.API/QuitEventArgs.cs b/src/ElectronNET.API/API/QuitEventArgs.cs similarity index 100% rename from src/ElectronNET.API/QuitEventArgs.cs rename to src/ElectronNET.API/API/QuitEventArgs.cs diff --git a/src/ElectronNET.API/Screen.cs b/src/ElectronNET.API/API/Screen.cs similarity index 100% rename from src/ElectronNET.API/Screen.cs rename to src/ElectronNET.API/API/Screen.cs diff --git a/src/ElectronNET.API/Session.cs b/src/ElectronNET.API/API/Session.cs similarity index 99% rename from src/ElectronNET.API/Session.cs rename to src/ElectronNET.API/API/Session.cs index a4cb6bb6..a6acbc90 100644 --- a/src/ElectronNET.API/Session.cs +++ b/src/ElectronNET.API/API/Session.cs @@ -25,10 +25,13 @@ public class Session /// public Cookies Cookies { get; } + public WebRequest WebRequest { get; private set; } + internal Session(int id) { Id = id; Cookies = new Cookies(id); + WebRequest = new WebRequest(id); } /// diff --git a/src/ElectronNET.API/Shell.cs b/src/ElectronNET.API/API/Shell.cs similarity index 100% rename from src/ElectronNET.API/Shell.cs rename to src/ElectronNET.API/API/Shell.cs diff --git a/src/ElectronNET.API/Tray.cs b/src/ElectronNET.API/API/Tray.cs similarity index 95% rename from src/ElectronNET.API/Tray.cs rename to src/ElectronNET.API/API/Tray.cs index e8947fae..906a58c7 100644 --- a/src/ElectronNET.API/Tray.cs +++ b/src/ElectronNET.API/API/Tray.cs @@ -241,7 +241,7 @@ internal static Tray Instance /// The menu item. public async Task Show(string image, MenuItem menuItem) { - await Show(image, new MenuItem[] { menuItem }); + await this.Show(image, new MenuItem[] { menuItem }).ConfigureAwait(false); } /// @@ -252,7 +252,7 @@ public async Task Show(string image, MenuItem menuItem) public async Task Show(string image, MenuItem[] menuItems) { menuItems.AddMenuItemsId(); - await BridgeConnector.Socket.Emit("create-tray", image, JArray.FromObject(menuItems, _jsonSerializer)); + await BridgeConnector.Socket.Emit("create-tray", image, JArray.FromObject(menuItems, this._jsonSerializer)).ConfigureAwait(false); _items.Clear(); _items.AddRange(menuItems); @@ -270,7 +270,7 @@ public async Task Show(string image, MenuItem[] menuItems) /// The image. public async Task Show(string image) { - await BridgeConnector.Socket.Emit("create-tray", image); + await BridgeConnector.Socket.Emit("create-tray", image).ConfigureAwait(false); } /// @@ -278,7 +278,7 @@ public async Task Show(string image) /// public async Task Destroy() { - await BridgeConnector.Socket.Emit("tray-destroy"); + await BridgeConnector.Socket.Emit("tray-destroy").ConfigureAwait(false); _items.Clear(); } @@ -288,7 +288,7 @@ public async Task Destroy() /// public async Task SetImage(string image) { - await BridgeConnector.Socket.Emit("tray-setImage", image); + await BridgeConnector.Socket.Emit("tray-setImage", image).ConfigureAwait(false); } /// @@ -297,7 +297,7 @@ public async Task SetImage(string image) /// public async Task SetPressedImage(string image) { - await BridgeConnector.Socket.Emit("tray-setPressedImage", image); + await BridgeConnector.Socket.Emit("tray-setPressedImage", image).ConfigureAwait(false); } /// @@ -306,7 +306,7 @@ public async Task SetPressedImage(string image) /// public async Task SetToolTip(string toolTip) { - await BridgeConnector.Socket.Emit("tray-setToolTip", toolTip); + await BridgeConnector.Socket.Emit("tray-setToolTip", toolTip).ConfigureAwait(false); } /// @@ -315,7 +315,7 @@ public async Task SetToolTip(string toolTip) /// public async Task SetTitle(string title) { - await BridgeConnector.Socket.Emit("tray-setTitle", title); + await BridgeConnector.Socket.Emit("tray-setTitle", title).ConfigureAwait(false); } /// @@ -324,7 +324,7 @@ public async Task SetTitle(string title) /// public async Task DisplayBalloon(DisplayBalloonOptions options) { - await BridgeConnector.Socket.Emit("tray-displayBalloon", JObject.FromObject(options, _jsonSerializer)); + await BridgeConnector.Socket.Emit("tray-displayBalloon", JObject.FromObject(options, this._jsonSerializer)).ConfigureAwait(false); } /// @@ -342,9 +342,9 @@ public async Task IsDestroyedAsync() taskCompletionSource.SetResult(isDestroyed); }); - await BridgeConnector.Socket.Emit("tray-isDestroyed"); + await BridgeConnector.Socket.Emit("tray-isDestroyed").ConfigureAwait(false); - return await taskCompletionSource.Task; + return await taskCompletionSource.Task.ConfigureAwait(false); } private readonly JsonSerializer _jsonSerializer = new() @@ -367,7 +367,7 @@ public void On(string eventName, Action action) /// The event name /// The handler public async Task On(string eventName, Action action) - => await Events.Instance.On(ModuleName, eventName, action); + => await Events.Instance.On(ModuleName, eventName, action).ConfigureAwait(false); /// /// Subscribe to an unmapped event on the module once. /// @@ -381,6 +381,6 @@ public void Once(string eventName, Action action) /// The event name /// The handler public async Task Once(string eventName, Action action) - => await Events.Instance.Once(ModuleName, eventName, action); + => await Events.Instance.Once(ModuleName, eventName, action).ConfigureAwait(false); } } diff --git a/src/ElectronNET.API/WebContents.cs b/src/ElectronNET.API/API/WebContents.cs similarity index 100% rename from src/ElectronNET.API/WebContents.cs rename to src/ElectronNET.API/API/WebContents.cs diff --git a/src/ElectronNET.API/WindowManager.cs b/src/ElectronNET.API/API/WindowManager.cs similarity index 92% rename from src/ElectronNET.API/WindowManager.cs rename to src/ElectronNET.API/API/WindowManager.cs index 0f9b5b5f..f5e714d4 100644 --- a/src/ElectronNET.API/WindowManager.cs +++ b/src/ElectronNET.API/API/WindowManager.cs @@ -84,7 +84,7 @@ public bool IsQuitOnWindowAllClosed /// public async Task CreateWindowAsync(string loadUrl = "http://localhost") { - return await CreateWindowAsync(new BrowserWindowOptions(), loadUrl); + return await this.CreateWindowAsync(new BrowserWindowOptions(), loadUrl).ConfigureAwait(false); } /// @@ -124,9 +124,9 @@ public async Task CreateWindowAsync(BrowserWindowOptions options, } }); - if (loadUrl.ToUpper() == "HTTP://LOCALHOST") + if (loadUrl.ToUpper() == "HTTP://LOCALHOST" && ElectronNetRuntime.AspNetWebPort.HasValue) { - loadUrl = $"{loadUrl}:{BridgeSettings.WebPort}"; + loadUrl = $"{loadUrl}:{ElectronNetRuntime.AspNetWebPort}"; } // Workaround Windows 10 / Electron Bug @@ -142,7 +142,7 @@ public async Task CreateWindowAsync(BrowserWindowOptions options, options.X = 0; options.Y = 0; - await BridgeConnector.Socket.Emit("createBrowserWindow", JObject.FromObject(options, _jsonSerializer), loadUrl); + await BridgeConnector.Socket.Emit("createBrowserWindow", JObject.FromObject(options, this._jsonSerializer), loadUrl).ConfigureAwait(false); } else { @@ -158,10 +158,10 @@ public async Task CreateWindowAsync(BrowserWindowOptions options, ContractResolver = new CamelCasePropertyNamesContractResolver(), NullValueHandling = NullValueHandling.Ignore }; - await BridgeConnector.Socket.Emit("createBrowserWindow", JObject.FromObject(options, ownjsonSerializer), loadUrl); + await BridgeConnector.Socket.Emit("createBrowserWindow", JObject.FromObject(options, ownjsonSerializer), loadUrl).ConfigureAwait(false); } - return await taskCompletionSource.Task; + return await taskCompletionSource.Task.ConfigureAwait(false); } private bool IsWindows10() @@ -208,9 +208,9 @@ public async Task CreateBrowserViewAsync(BrowserViewConstructorOpti ContractResolver = new CamelCasePropertyNamesContractResolver(), NullValueHandling = NullValueHandling.Ignore }; - await BridgeConnector.Socket.Emit("createBrowserView", JObject.FromObject(options, ownjsonSerializer)); + await BridgeConnector.Socket.Emit("createBrowserView", JObject.FromObject(options, ownjsonSerializer)).ConfigureAwait(false); - return await taskCompletionSource.Task; + return await taskCompletionSource.Task.ConfigureAwait(false); } private readonly JsonSerializer _jsonSerializer = new() diff --git a/src/ElectronNET.API/BridgeConnector.cs b/src/ElectronNET.API/BridgeConnector.cs deleted file mode 100644 index 23319e5e..00000000 --- a/src/ElectronNET.API/BridgeConnector.cs +++ /dev/null @@ -1,33 +0,0 @@ -๏ปฟnamespace ElectronNET.API -{ - internal static class BridgeConnector - { - private static SocketIoFacade _socket; - private static readonly object SyncRoot = new(); - - public static SocketIoFacade Socket - { - get - { - if (_socket == null) - { - lock (SyncRoot) - { - if (_socket == null) - { - - string socketUrl = HybridSupport.IsElectronActive - ? $"http://localhost:{BridgeSettings.SocketPort}" - : "http://localhost"; - - _socket = new SocketIoFacade(socketUrl); - _socket.Connect(); - } - } - } - - return _socket; - } - } - } -} \ No newline at end of file diff --git a/src/ElectronNET.API/BridgeSettings.cs b/src/ElectronNET.API/BridgeSettings.cs deleted file mode 100644 index 96a2653a..00000000 --- a/src/ElectronNET.API/BridgeSettings.cs +++ /dev/null @@ -1,24 +0,0 @@ -๏ปฟnamespace ElectronNET.API -{ - /// - /// - /// - public static class BridgeSettings - { - /// - /// Gets the socket port. - /// - /// - /// The socket port. - /// - public static string SocketPort { get; internal set; } - - /// - /// Gets the web port. - /// - /// - /// The web port. - /// - public static string WebPort { get; internal set; } - } -} diff --git a/src/ElectronNET.API/Cookies.cs b/src/ElectronNET.API/Cookies.cs deleted file mode 100644 index 98be3d42..00000000 --- a/src/ElectronNET.API/Cookies.cs +++ /dev/null @@ -1,154 +0,0 @@ -๏ปฟusing System; -using System.Threading.Tasks; -using ElectronNET.API.Entities; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using Newtonsoft.Json.Serialization; - -namespace ElectronNET.API -{ - /// - /// Query and modify a session's cookies. - /// - public class Cookies - { - /// - /// Gets the identifier. - /// - /// - /// The identifier. - /// - public int Id { get; private set; } - - internal Cookies(int id) - { - Id = id; - } - - /// - /// Emitted when a cookie is changed because it was added, edited, removed, or expired. - /// - public event Action OnChanged - { - add - { - if (_changed == null) - { - BridgeConnector.Socket.On("webContents-session-cookies-changed" + Id, (args) => - { - Cookie cookie = ((JArray)args)[0].ToObject(); - CookieChangedCause cause = ((JArray)args)[1].ToObject(); - bool removed = ((JArray)args)[2].ToObject(); - _changed(cookie, cause, removed); - }); - - BridgeConnector.Socket.Emit("register-webContents-session-cookies-changed", Id); - } - _changed += value; - } - remove - { - _changed -= value; - - if (_changed == null) - BridgeConnector.Socket.Off("webContents-session-cookies-changed" + Id); - } - } - - private event Action _changed; - - /// - /// Sends a request to get all cookies matching filter, and resolves a callack with the response. - /// - /// - /// - /// A task which resolves an array of cookie objects. - public Task GetAsync(CookieFilter filter) - { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-cookies-get-completed" + guid, (cookies) => - { - Cookie[] result = ((JArray)cookies).ToObject(); - - BridgeConnector.Socket.Off("webContents-session-cookies-get-completed" + guid); - taskCompletionSource.SetResult(result); - }); - - BridgeConnector.Socket.Emit("webContents-session-cookies-get", Id, JObject.FromObject(filter, _jsonSerializer), guid); - - return taskCompletionSource.Task; - } - - /// - /// - /// - /// - /// - public Task SetAsync(CookieDetails details) - { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-cookies-set-completed" + guid, () => - { - BridgeConnector.Socket.Off("webContents-session-cookies-set-completed" + guid); - taskCompletionSource.SetResult(null); - }); - - BridgeConnector.Socket.Emit("webContents-session-cookies-set", Id, JObject.FromObject(details, _jsonSerializer), guid); - - return taskCompletionSource.Task; - } - - /// - /// Removes the cookies matching url and name - /// - /// The URL associated with the cookie. - /// The name of cookie to remove. - /// A task which resolves when the cookie has been removed - public Task RemoveAsync(string url, string name) - { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-cookies-remove-completed" + guid, () => - { - BridgeConnector.Socket.Off("webContents-session-cookies-remove-completed" + guid); - taskCompletionSource.SetResult(null); - }); - - BridgeConnector.Socket.Emit("webContents-session-cookies-remove", Id, url, name, guid); - - return taskCompletionSource.Task; - } - - /// - /// Writes any unwritten cookies data to disk. - /// - /// A task which resolves when the cookie store has been flushed - public Task FlushStoreAsync() - { - var taskCompletionSource = new TaskCompletionSource(); - string guid = Guid.NewGuid().ToString(); - - BridgeConnector.Socket.On("webContents-session-cookies-flushStore-completed" + guid, () => - { - BridgeConnector.Socket.Off("webContents-session-cookies-flushStore-completed" + guid); - taskCompletionSource.SetResult(null); - }); - - BridgeConnector.Socket.Emit("webContents-session-cookies-flushStore", Id, guid); - - return taskCompletionSource.Task; - } - - private JsonSerializer _jsonSerializer = new JsonSerializer() - { - ContractResolver = new CamelCasePropertyNamesContractResolver(), - NullValueHandling = NullValueHandling.Ignore, - DefaultValueHandling = DefaultValueHandling.Ignore - }; - } -} \ No newline at end of file diff --git a/src/ElectronNET.API/Events.cs b/src/ElectronNET.API/Events.cs deleted file mode 100644 index 4c3c3661..00000000 --- a/src/ElectronNET.API/Events.cs +++ /dev/null @@ -1,88 +0,0 @@ -๏ปฟusing System; -using System.Globalization; -using System.Threading.Tasks; - -namespace ElectronNET.API -{ - /// - /// Generic Event Consumers for Electron Modules - /// - internal class Events - { - private static Events _events; - private static readonly object SyncRoot = new(); - private readonly TextInfo _textInfo = new CultureInfo("en-US", false).TextInfo; - - private Events() - {} - - public static Events Instance - { - get - { - if (_events == null) - { - lock (SyncRoot) - { - if (_events == null) - { - _events = new Events(); - } - } - } - - return _events; - } - } - - /// - /// Subscribe to an unmapped electron event. - /// - /// The name of the module, e.g. app, dock, etc... - /// The name of the event - /// The event handler - public void On(string moduleName, string eventName, Action action) - => On(moduleName, eventName, action); - - - /// - /// Subscribe to an unmapped electron event. - /// - /// The name of the module, e.g. app, dock, etc... - /// The name of the event - /// The event handler - public async Task On(string moduleName, string eventName, Action action) - { - var listener = $"{moduleName}{_textInfo.ToTitleCase(eventName)}Completed"; - var subscriber = $"register-{moduleName}-on-event"; - - BridgeConnector.Socket.On(listener, action); - await BridgeConnector.Socket.Emit(subscriber, eventName, listener); - } - - /// - /// Subscribe to an unmapped electron event. - /// - /// The name of the module, e.g. app, dock, etc... - /// The name of the event - /// The event handler - public void Once(string moduleName, string eventName, Action action) - => Once(moduleName, eventName, action); - - - /// - /// Subscribe to an unmapped electron event. - /// - /// The name of the module, e.g. app, dock, etc... - /// The name of the event - /// The event handler - public async Task Once(string moduleName, string eventName, Action action) - { - var listener = $"{moduleName}{_textInfo.ToTitleCase(eventName)}Completed"; - var subscriber = $"register-{moduleName}-once-event"; - BridgeConnector.Socket.Once(listener, action); - await BridgeConnector.Socket.Emit(subscriber, eventName, listener); - } - - } -} diff --git a/src/ElectronNET.API/GlobalUsings.cs b/src/ElectronNET.API/GlobalUsings.cs deleted file mode 100644 index 7b02f48e..00000000 --- a/src/ElectronNET.API/GlobalUsings.cs +++ /dev/null @@ -1,3 +0,0 @@ -// Global using directives - -global using System.Web; \ No newline at end of file diff --git a/src/ElectronNET.API/LifetimeServiceHost.cs b/src/ElectronNET.API/LifetimeServiceHost.cs deleted file mode 100644 index cb58eb1b..00000000 --- a/src/ElectronNET.API/LifetimeServiceHost.cs +++ /dev/null @@ -1,41 +0,0 @@ -๏ปฟusing System; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Hosting; - -namespace ElectronNET.API -{ - /// - /// Base class that reports if ASP.NET Core has fully started. - /// - internal class LifetimeServiceHost : IHostedService - { - public LifetimeServiceHost(IHostApplicationLifetime lifetime) - { - lifetime.ApplicationStarted.Register(() => - { - App.Instance.IsReady = true; - - Console.WriteLine("ASP.NET Core host has fully started."); - }); - } - - /// - /// Triggered when the application host is ready to start the service. - /// - /// Indicates that the start process has been aborted. - public Task StartAsync(CancellationToken cancellationToken) - { - return Task.CompletedTask; - } - - /// - /// Triggered when the application host is performing a graceful shutdown. - /// - /// Indicates that the shutdown process should no longer be graceful. - public Task StopAsync(CancellationToken cancellationToken) - { - return Task.CompletedTask; - } - } -} \ No newline at end of file diff --git a/src/ElectronNET.API/ServiceCollectionExtensions.cs b/src/ElectronNET.API/ServiceCollectionExtensions.cs deleted file mode 100644 index f933731b..00000000 --- a/src/ElectronNET.API/ServiceCollectionExtensions.cs +++ /dev/null @@ -1,33 +0,0 @@ -๏ปฟusing Microsoft.Extensions.DependencyInjection; - -namespace ElectronNET.API -{ - /// - /// - /// - public static class ServiceCollectionExtensions - { - /// - /// Adds the Members to the Service Collection - /// - public static IServiceCollection AddElectron(this IServiceCollection services) - => services - // adding in this manner to ensure late binding. - .AddSingleton(provider => IpcMain.Instance) - .AddSingleton(provider => App.Instance) - .AddSingleton(provider => AutoUpdater.Instance) - .AddSingleton(provider => WindowManager.Instance) - .AddSingleton(provider => Menu.Instance) - .AddSingleton(provider => Dialog.Instance) - .AddSingleton(provider => Notification.Instance) - .AddSingleton(provider => Tray.Instance) - .AddSingleton(provider => GlobalShortcut.Instance) - .AddSingleton(provider => Shell.Instance) - .AddSingleton(provider => Screen.Instance) - .AddSingleton(provider => Clipboard.Instance) - .AddSingleton(provider => HostHook.Instance) - .AddSingleton(provider => PowerMonitor.Instance) - .AddSingleton(provider => NativeTheme.Instance) - .AddSingleton(provider => Dock.Instance); - } -} diff --git a/src/ElectronNET.API/SocketIOFacade.cs b/src/ElectronNET.API/SocketIOFacade.cs deleted file mode 100644 index ec5eb466..00000000 --- a/src/ElectronNET.API/SocketIOFacade.cs +++ /dev/null @@ -1,93 +0,0 @@ -๏ปฟusing System; -using System.Threading.Tasks; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; -using SocketIOClient; -using SocketIOClient.Newtonsoft.Json; - -namespace ElectronNET.API; - -internal class SocketIoFacade -{ - private readonly SocketIO _socket; - - public SocketIoFacade(string uri) - { - _socket = new SocketIO(uri); - var jsonSerializer = new NewtonsoftJsonSerializer(new JsonSerializerSettings - { - ContractResolver = new CamelCasePropertyNamesContractResolver(), - NullValueHandling = NullValueHandling.Ignore, - DefaultValueHandling = DefaultValueHandling.Ignore - }); - - _socket.JsonSerializer = jsonSerializer; - } - - public void Connect() - { - _socket.OnError += (sender, e) => - { - Console.WriteLine($"BridgeConnector Error: {sender} {e}"); - }; - - _socket.OnConnected += (_, _) => - { - Console.WriteLine("BridgeConnector connected!"); - }; - - _socket.OnDisconnected += (_, _) => - { - Console.WriteLine("BridgeConnector disconnected!"); - }; - - _socket.ConnectAsync().GetAwaiter().GetResult(); - } - - public void On(string eventName, Action action) - { - _socket.On(eventName, response => - { - Task.Run(action); - }); - } - - public void On(string eventName, Action action) - { - _socket.On(eventName, response => - { - var value = response.GetValue(); - Task.Run(() => action(value)); - }); - } - - // TODO: Remove this method when SocketIoClient supports object deserialization - public void On(string eventName, Action action) - { - _socket.On(eventName, response => - { - var value = response.GetValue(); - Console.WriteLine($"Called Event {eventName} - data {value}"); - Task.Run(() => action(value)); - }); - } - - public void Once(string eventName, Action action) - { - _socket.On(eventName, (socketIoResponse) => - { - _socket.Off(eventName); - Task.Run(() => action(socketIoResponse.GetValue())); - }); - } - - public void Off(string eventName) - { - _socket.Off(eventName); - } - - public async Task Emit(string eventName, params object[] args) - { - await _socket.EmitAsync(eventName, args); - } -} \ No newline at end of file diff --git a/src/ElectronNET.API/WebHostBuilderExtensions.cs b/src/ElectronNET.API/WebHostBuilderExtensions.cs deleted file mode 100644 index af7cf910..00000000 --- a/src/ElectronNET.API/WebHostBuilderExtensions.cs +++ /dev/null @@ -1,58 +0,0 @@ -๏ปฟusing Microsoft.AspNetCore.Hosting; -using System; -using System.IO; -using Microsoft.Extensions.DependencyInjection; - -namespace ElectronNET.API -{ - /// - /// - /// - public static class WebHostBuilderExtensions - { - /// - /// Use a Electron support for this .NET Core Project. - /// - /// The builder. - /// The arguments. - /// - public static IWebHostBuilder UseElectron(this IWebHostBuilder builder, string[] args) - { - foreach (string argument in args) - { - if (argument.ToUpper().Contains("ELECTRONPORT")) - { - BridgeSettings.SocketPort = argument.ToUpper().Replace("/ELECTRONPORT=", ""); - Console.WriteLine("Use Electron Port: " + BridgeSettings.SocketPort); - } - else if (argument.ToUpper().Contains("ELECTRONWEBPORT")) - { - BridgeSettings.WebPort = argument.ToUpper().Replace("/ELECTRONWEBPORT=", ""); - } - } - - if (HybridSupport.IsElectronActive) - { - builder.ConfigureServices(services => - { - services.AddHostedService(); - }); - - // check for the content folder if its exists in base director otherwise no need to include - // It was used before because we are publishing the project which copies everything to bin folder and contentroot wwwroot was folder there. - // now we have implemented the live reload if app is run using /watch then we need to use the default project path. - if (Directory.Exists($"{AppDomain.CurrentDomain.BaseDirectory}\\wwwroot")) - { - builder.UseContentRoot(AppDomain.CurrentDomain.BaseDirectory) - .UseUrls("http://localhost:" + BridgeSettings.WebPort); - } - else - { - builder.UseUrls("http://localhost:" + BridgeSettings.WebPort); - } - } - - return builder; - } - } -} \ No newline at end of file diff --git a/src/ElectronNET.API/devCleanup.cmd b/src/ElectronNET.API/devCleanup.cmd deleted file mode 100644 index 1ea37548..00000000 --- a/src/ElectronNET.API/devCleanup.cmd +++ /dev/null @@ -1 +0,0 @@ -rd /s /q %userprofile%\.nuget\packages\electronnet.api 2>nul diff --git a/src/ElectronNET.API/devCleanup.sh b/src/ElectronNET.API/devCleanup.sh deleted file mode 100644 index f3b1b44e..00000000 --- a/src/ElectronNET.API/devCleanup.sh +++ /dev/null @@ -1 +0,0 @@ -rm -rf ~/.nuget/packages/electronnet.api \ No newline at end of file From 9275f2a7654a56282b5ff71fe3d07cbb4391f74c Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 13:21:35 +0200 Subject: [PATCH 14/46] ElectronNET.API: Add WebRequest API --- src/ElectronNET.API/API/Cookies.cs | 67 +++++++ src/ElectronNET.API/API/WebRequest.cs | 61 ++++++ src/ElectronNET.API/API/web-request.md | 255 +++++++++++++++++++++++++ 3 files changed, 383 insertions(+) create mode 100644 src/ElectronNET.API/API/Cookies.cs create mode 100644 src/ElectronNET.API/API/WebRequest.cs create mode 100644 src/ElectronNET.API/API/web-request.md diff --git a/src/ElectronNET.API/API/Cookies.cs b/src/ElectronNET.API/API/Cookies.cs new file mode 100644 index 00000000..4959cd9a --- /dev/null +++ b/src/ElectronNET.API/API/Cookies.cs @@ -0,0 +1,67 @@ +๏ปฟusing System; +using System.Threading.Tasks; +using ElectronNET.API.Entities; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json.Serialization; + +namespace ElectronNET.API +{ + /// + /// Query and modify a session's cookies. + /// + public class Cookies + { + /// + /// Gets the identifier. + /// + /// + /// The identifier. + /// + public int Id { get; private set; } + + internal Cookies(int id) + { + Id = id; + } + + /// + /// Emitted when a cookie is changed because it was added, edited, removed, or expired. + /// + public event Action OnChanged + { + add + { + if (_changed == null) + { + BridgeConnector.Socket.On("webContents-session-cookies-changed" + Id, (args) => + { + Cookie cookie = ((JArray)args)[0].ToObject(); + CookieChangedCause cause = ((JArray)args)[1].ToObject(); + bool removed = ((JArray)args)[2].ToObject(); + _changed(cookie, cause, removed); + }); + + BridgeConnector.Socket.Emit("register-webContents-session-cookies-changed", Id); + } + _changed += value; + } + remove + { + _changed -= value; + + if (_changed == null) + BridgeConnector.Socket.Off("webContents-session-cookies-changed" + Id); + } + } + + private event Action _changed; + + private JsonSerializer _jsonSerializer = new JsonSerializer() + { + ContractResolver = new CamelCasePropertyNamesContractResolver(), + NullValueHandling = NullValueHandling.Ignore, + DefaultValueHandling = DefaultValueHandling.Ignore + }; + } +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/WebRequest.cs b/src/ElectronNET.API/API/WebRequest.cs new file mode 100644 index 00000000..3b551060 --- /dev/null +++ b/src/ElectronNET.API/API/WebRequest.cs @@ -0,0 +1,61 @@ +๏ปฟusing Newtonsoft.Json.Linq; +using System; + +namespace ElectronNET.API.Entities +{ + public class OnBeforeRequestDetails + { + public int Id { get; set; } + public string Url { get; set; } + public string Method { get; set; } + public int? WebContentsId { get; set; } + // Ensure all necessary properties are included as per Electron documentation + } + + public class WebRequestFilter + { + public string[] Urls { get; set; } + } + + public class WebRequest + { + public int Id { get; private set; } + + internal WebRequest(int id) + { + Id = id; + } + + private event Action> _onBeforeRequest; + + public void OnBeforeRequest(WebRequestFilter filter, Action> listener) + { + if (_onBeforeRequest == null) + { + BridgeConnector.Socket.On($"webContents-session-webRequest-onBeforeRequest{Id}", + (args) => + { + ////var details = ((JObject)args[0]).ToObject(); + ////var callback = args.Length > 1 ? (Action)((response) => { BridgeConnector.Socket.Emit($"webContents-session-webRequest-onBeforeRequest-response{Id}", response); }) : null; + var details = ((JObject)args).ToObject(); + var callback = (Action)((response) => { BridgeConnector.Socket.Emit($"webContents-session-webRequest-onBeforeRequest-response{Id}", response); }); + + _onBeforeRequest?.Invoke(details, callback); + }); + + BridgeConnector.Socket.Emit("register-webContents-session-webRequest-onBeforeRequest", Id, JObject.FromObject(filter)); + } + + _onBeforeRequest += listener; + } + + public void RemoveListener(Action> listener) + { + _onBeforeRequest -= listener; + if (_onBeforeRequest == null) + { + BridgeConnector.Socket.Off($"webContents-session-webRequest-onBeforeRequest{Id}"); + } + } + } +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/web-request.md b/src/ElectronNET.API/API/web-request.md new file mode 100644 index 00000000..a3378363 --- /dev/null +++ b/src/ElectronNET.API/API/web-request.md @@ -0,0 +1,255 @@ +๏ปฟ## Class: WebRequest + +> Intercept and modify the contents of a request at various stages of its lifetime. + +Process: [Main](../glossary.md#main-process)
+_This class is not exported from the `'electron'` module. It is only available as a return value of other methods in the Electron API._ + +Instances of the `WebRequest` class are accessed by using the `webRequest` +property of a `Session`. + +The methods of `WebRequest` accept an optional `filter` and a `listener`. The +`listener` will be called with `listener(details)` when the API's event has +happened. The `details` object describes the request. + +โš ๏ธ Only the last attached `listener` will be used. Passing `null` as `listener` will unsubscribe from the event. + +The `filter` object has a `urls` property which is an Array of URL +patterns that will be used to filter out the requests that do not match the URL +patterns. If the `filter` is omitted then all requests will be matched. + +For certain events the `listener` is passed with a `callback`, which should be +called with a `response` object when `listener` has done its work. + +An example of adding `User-Agent` header for requests: + +```js +const { session } = require('electron') + +// Modify the user agent for all requests to the following urls. +const filter = { + urls: ['https://*.github.com/*', '*://electron.github.io/*'] +} + +session.defaultSession.webRequest.onBeforeSendHeaders(filter, (details, callback) => { + details.requestHeaders['User-Agent'] = 'MyAgent' + callback({ requestHeaders: details.requestHeaders }) +}) +``` + +### Instance Methods + +The following methods are available on instances of `WebRequest`: + +#### `webRequest.onBeforeRequest([filter, ]listener)` + +* `filter` [WebRequestFilter](structures/web-request-filter.md) (optional) +* `listener` Function | null + * `details` Object + * `id` Integer + * `url` string + * `method` string + * `webContentsId` Integer (optional) + * `webContents` WebContents (optional) + * `frame` WebFrameMain (optional) + * `resourceType` string - Can be `mainFrame`, `subFrame`, `stylesheet`, `script`, `image`, `font`, `object`, `xhr`, `ping`, `cspReport`, `media`, `webSocket` or `other`. + * `referrer` string + * `timestamp` Double + * `uploadData` [UploadData[]](structures/upload-data.md) + * `callback` Function + * `response` Object + * `cancel` boolean (optional) + * `redirectURL` string (optional) - The original request is prevented from + being sent or completed and is instead redirected to the given URL. + +The `listener` will be called with `listener(details, callback)` when a request +is about to occur. + +The `uploadData` is an array of `UploadData` objects. + +The `callback` has to be called with an `response` object. + +Some examples of valid `urls`: + +```js +'http://foo:1234/' +'http://foo.com/' +'http://foo:1234/bar' +'*://*/*' +'*://example.com/*' +'*://example.com/foo/*' +'http://*.foo:1234/' +'file://foo:1234/bar' +'http://foo:*/' +'*://www.foo.com/' +``` + +#### `webRequest.onBeforeSendHeaders([filter, ]listener)` + +* `filter` [WebRequestFilter](structures/web-request-filter.md) (optional) +* `listener` Function | null + * `details` Object + * `id` Integer + * `url` string + * `method` string + * `webContentsId` Integer (optional) + * `webContents` WebContents (optional) + * `frame` WebFrameMain (optional) + * `resourceType` string - Can be `mainFrame`, `subFrame`, `stylesheet`, `script`, `image`, `font`, `object`, `xhr`, `ping`, `cspReport`, `media`, `webSocket` or `other`. + * `referrer` string + * `timestamp` Double + * `uploadData` [UploadData[]](structures/upload-data.md) (optional) + * `requestHeaders` Record + * `callback` Function + * `beforeSendResponse` Object + * `cancel` boolean (optional) + * `requestHeaders` Record (optional) - When provided, request will be made + with these headers. + +The `listener` will be called with `listener(details, callback)` before sending +an HTTP request, once the request headers are available. This may occur after a +TCP connection is made to the server, but before any http data is sent. + +The `callback` has to be called with a `response` object. + +#### `webRequest.onSendHeaders([filter, ]listener)` + +* `filter` [WebRequestFilter](structures/web-request-filter.md) (optional) +* `listener` Function | null + * `details` Object + * `id` Integer + * `url` string + * `method` string + * `webContentsId` Integer (optional) + * `webContents` WebContents (optional) + * `frame` WebFrameMain (optional) + * `resourceType` string - Can be `mainFrame`, `subFrame`, `stylesheet`, `script`, `image`, `font`, `object`, `xhr`, `ping`, `cspReport`, `media`, `webSocket` or `other`. + * `referrer` string + * `timestamp` Double + * `requestHeaders` Record + +The `listener` will be called with `listener(details)` just before a request is +going to be sent to the server, modifications of previous `onBeforeSendHeaders` +response are visible by the time this listener is fired. + +#### `webRequest.onHeadersReceived([filter, ]listener)` + +* `filter` [WebRequestFilter](structures/web-request-filter.md) (optional) +* `listener` Function | null + * `details` Object + * `id` Integer + * `url` string + * `method` string + * `webContentsId` Integer (optional) + * `webContents` WebContents (optional) + * `frame` WebFrameMain (optional) + * `resourceType` string - Can be `mainFrame`, `subFrame`, `stylesheet`, `script`, `image`, `font`, `object`, `xhr`, `ping`, `cspReport`, `media`, `webSocket` or `other`. + * `referrer` string + * `timestamp` Double + * `statusLine` string + * `statusCode` Integer + * `responseHeaders` Record (optional) + * `callback` Function + * `headersReceivedResponse` Object + * `cancel` boolean (optional) + * `responseHeaders` Record (optional) - When provided, the server is assumed + to have responded with these headers. + * `statusLine` string (optional) - Should be provided when overriding + `responseHeaders` to change header status otherwise original response + header's status will be used. + +The `listener` will be called with `listener(details, callback)` when HTTP +response headers of a request have been received. + +The `callback` has to be called with a `response` object. + +#### `webRequest.onResponseStarted([filter, ]listener)` + +* `filter` [WebRequestFilter](structures/web-request-filter.md) (optional) +* `listener` Function | null + * `details` Object + * `id` Integer + * `url` string + * `method` string + * `webContentsId` Integer (optional) + * `webContents` WebContents (optional) + * `frame` WebFrameMain (optional) + * `resourceType` string - Can be `mainFrame`, `subFrame`, `stylesheet`, `script`, `image`, `font`, `object`, `xhr`, `ping`, `cspReport`, `media`, `webSocket` or `other`. + * `referrer` string + * `timestamp` Double + * `responseHeaders` Record (optional) + * `fromCache` boolean - Indicates whether the response was fetched from disk + cache. + * `statusCode` Integer + * `statusLine` string + +The `listener` will be called with `listener(details)` when first byte of the +response body is received. For HTTP requests, this means that the status line +and response headers are available. + +#### `webRequest.onBeforeRedirect([filter, ]listener)` + +* `filter` [WebRequestFilter](structures/web-request-filter.md) (optional) +* `listener` Function | null + * `details` Object + * `id` Integer + * `url` string + * `method` string + * `webContentsId` Integer (optional) + * `webContents` WebContents (optional) + * `frame` WebFrameMain (optional) + * `resourceType` string - Can be `mainFrame`, `subFrame`, `stylesheet`, `script`, `image`, `font`, `object`, `xhr`, `ping`, `cspReport`, `media`, `webSocket` or `other`. + * `referrer` string + * `timestamp` Double + * `redirectURL` string + * `statusCode` Integer + * `statusLine` string + * `ip` string (optional) - The server IP address that the request was + actually sent to. + * `fromCache` boolean + * `responseHeaders` Record (optional) + +The `listener` will be called with `listener(details)` when a server initiated +redirect is about to occur. + +#### `webRequest.onCompleted([filter, ]listener)` + +* `filter` [WebRequestFilter](structures/web-request-filter.md) (optional) +* `listener` Function | null + * `details` Object + * `id` Integer + * `url` string + * `method` string + * `webContentsId` Integer (optional) + * `webContents` WebContents (optional) + * `frame` WebFrameMain (optional) + * `resourceType` string - Can be `mainFrame`, `subFrame`, `stylesheet`, `script`, `image`, `font`, `object`, `xhr`, `ping`, `cspReport`, `media`, `webSocket` or `other`. + * `referrer` string + * `timestamp` Double + * `responseHeaders` Record (optional) + * `fromCache` boolean + * `statusCode` Integer + * `statusLine` string + * `error` string + +The `listener` will be called with `listener(details)` when a request is +completed. + +#### `webRequest.onErrorOccurred([filter, ]listener)` + +* `filter` [WebRequestFilter](structures/web-request-filter.md) (optional) +* `listener` Function | null + * `details` Object + * `id` Integer + * `url` string + * `method` string + * `webContentsId` Integer (optional) + * `webContents` WebContents (optional) + * `frame` WebFrameMain (optional) + * `resourceType` string - Can be `mainFrame`, `subFrame`, `stylesheet`, `script`, `image`, `font`, `object`, `xhr`, `ping`, `cspReport`, `media`, `webSocket` or `other`. + * `referrer` string + * `timestamp` Double + * `fromCache` boolean + * `error` string - The error description. + +The `listener` will be called with `listener(details)` when an error occurs. \ No newline at end of file From 3811b7ea20881caa808ab25ff350cabb75366d57 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 13:22:37 +0200 Subject: [PATCH 15/46] ElectronNET.API: Re-add moved types --- src/ElectronNET.API/Bridge/BridgeConnector.cs | 15 +++ src/ElectronNET.API/Bridge/Events.cs | 101 +++++++++++++++ src/ElectronNET.API/Bridge/SocketIOFacade.cs | 115 ++++++++++++++++++ .../Converter/ModifierTypeListConverter.cs | 6 +- 4 files changed, 234 insertions(+), 3 deletions(-) create mode 100644 src/ElectronNET.API/Bridge/BridgeConnector.cs create mode 100644 src/ElectronNET.API/Bridge/Events.cs create mode 100644 src/ElectronNET.API/Bridge/SocketIOFacade.cs diff --git a/src/ElectronNET.API/Bridge/BridgeConnector.cs b/src/ElectronNET.API/Bridge/BridgeConnector.cs new file mode 100644 index 00000000..3c06b430 --- /dev/null +++ b/src/ElectronNET.API/Bridge/BridgeConnector.cs @@ -0,0 +1,15 @@ +๏ปฟ#pragma warning disable IDE0130 // Namespace does not match folder structure +// ReSharper disable once CheckNamespace +namespace ElectronNET.API +{ + internal static class BridgeConnector + { + public static SocketIoFacade Socket + { + get + { + return ElectronNetRuntime.GetSocket(); + } + } + } +} \ No newline at end of file diff --git a/src/ElectronNET.API/Bridge/Events.cs b/src/ElectronNET.API/Bridge/Events.cs new file mode 100644 index 00000000..732819aa --- /dev/null +++ b/src/ElectronNET.API/Bridge/Events.cs @@ -0,0 +1,101 @@ +๏ปฟ#pragma warning disable IDE0130 // Namespace does not match folder structure +// ReSharper disable once CheckNamespace +namespace ElectronNET.API +{ + using System; + using System.Globalization; + using System.Threading.Tasks; + + /// + /// Generic Event Consumers for Electron Modules + /// + internal class Events + { + private static Events _events; + private static readonly object SyncRoot = new(); + private readonly TextInfo _textInfo = new CultureInfo("en-US", false).TextInfo; + + private Events() + { } + + public static Events Instance + { + get + { + if (_events == null) + { + lock (SyncRoot) + { + if (_events == null) + { + _events = new Events(); + } + } + } + + return _events; + } + } + + /// + /// Subscribe to an unmapped electron event. + /// + /// The name of the module, e.g. app, dock, etc... + /// The name of the event + /// The event handler + public async Task On(string moduleName, string eventName, Action action) + { + var listener = $"{moduleName}{_textInfo.ToTitleCase(eventName)}Completed"; + var subscriber = $"register-{moduleName}-on-event"; + + BridgeConnector.Socket.On(listener, action); + await BridgeConnector.Socket.Emit(subscriber, eventName, listener).ConfigureAwait(false); + } + + + /// + /// Subscribe to an unmapped electron event. + /// + /// The name of the module, e.g. app, dock, etc... + /// The name of the event + /// The event handler + public async Task On(string moduleName, string eventName, Action action) + { + var listener = $"{moduleName}{_textInfo.ToTitleCase(eventName)}Completed"; + var subscriber = $"register-{moduleName}-on-event"; + + BridgeConnector.Socket.On(listener, action); + await BridgeConnector.Socket.Emit(subscriber, eventName, listener).ConfigureAwait(false); + } + + /// + /// Subscribe to an unmapped electron event. + /// + /// The name of the module, e.g. app, dock, etc... + /// The name of the event + /// The event handler + public async Task Once(string moduleName, string eventName, Action action) + { + var listener = $"{moduleName}{_textInfo.ToTitleCase(eventName)}Completed"; + var subscriber = $"register-{moduleName}-once-event"; + BridgeConnector.Socket.Once(listener, action); + await BridgeConnector.Socket.Emit(subscriber, eventName, listener).ConfigureAwait(false); + } + + + /// + /// Subscribe to an unmapped electron event. + /// + /// The name of the module, e.g. app, dock, etc... + /// The name of the event + /// The event handler + public async Task Once(string moduleName, string eventName, Action action) + { + var listener = $"{moduleName}{_textInfo.ToTitleCase(eventName)}Completed"; + var subscriber = $"register-{moduleName}-once-event"; + BridgeConnector.Socket.Once(listener, action); + await BridgeConnector.Socket.Emit(subscriber, eventName, listener).ConfigureAwait(false); + } + + } +} diff --git a/src/ElectronNET.API/Bridge/SocketIOFacade.cs b/src/ElectronNET.API/Bridge/SocketIOFacade.cs new file mode 100644 index 00000000..c3815d65 --- /dev/null +++ b/src/ElectronNET.API/Bridge/SocketIOFacade.cs @@ -0,0 +1,115 @@ +๏ปฟ#pragma warning disable IDE0130 // Namespace does not match folder structure +// ReSharper disable once CheckNamespace +namespace ElectronNET.API; + +using System; +using System.Threading.Tasks; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using SocketIO.Serializer.NewtonsoftJson; +using SocketIO = SocketIOClient.SocketIO; + +internal class SocketIoFacade +{ + private readonly SocketIO _socket; + + public SocketIoFacade(string uri) + { + _socket = new SocketIO(uri); + var jsonSerializer = new NewtonsoftJsonSerializer(new JsonSerializerSettings + { + ContractResolver = new CamelCasePropertyNamesContractResolver(), + NullValueHandling = NullValueHandling.Ignore, + DefaultValueHandling = DefaultValueHandling.Ignore + }); + + _socket.Serializer = jsonSerializer; + } + + public event EventHandler BridgeDisconnected; + + public event EventHandler BridgeConnected; + + public void Connect() + { + _socket.OnError += (sender, e) => + { + Console.WriteLine($"BridgeConnector Error: {sender} {e}"); + }; + + _socket.OnConnected += (_, _) => + { + Console.WriteLine("BridgeConnector connected!"); + this.BridgeConnected?.Invoke(this, EventArgs.Empty); + }; + + _socket.OnDisconnected += (_, _) => + { + Console.WriteLine("BridgeConnector disconnected!"); + this.BridgeDisconnected?.Invoke(this, EventArgs.Empty); + }; + + _socket.ConnectAsync().GetAwaiter().GetResult(); + } + + public void On(string eventName, Action action) + { + _socket.On(eventName, _ => + { + Task.Run(action); + }); + } + + public void On(string eventName, Action action) + { + _socket.On(eventName, response => + { + var value = response.GetValue(); + Task.Run(() => action(value)); + }); + } + + // TODO: Remove this method when SocketIoClient supports object deserialization + public void On(string eventName, Action action) + { + _socket.On(eventName, response => + { + var value = response.GetValue(); + ////Console.WriteLine($"Called Event {eventName} - data {value}"); + Task.Run(() => action(value)); + }); + } + + public void Once(string eventName, Action action) + { + _socket.On(eventName, _ => + { + _socket.Off(eventName); + Task.Run(action); + }); + } + + public void Once(string eventName, Action action) + { + _socket.On(eventName, (socketIoResponse) => + { + _socket.Off(eventName); + Task.Run(() => action(socketIoResponse.GetValue())); + }); + } + + public void Off(string eventName) + { + _socket.Off(eventName); + } + + public async Task Emit(string eventName, params object[] args) + { + await _socket.EmitAsync(eventName, args).ConfigureAwait(false); + } + + public void DisposeSocket() + { + _socket.Dispose(); + } +} \ No newline at end of file diff --git a/src/ElectronNET.API/Converter/ModifierTypeListConverter.cs b/src/ElectronNET.API/Converter/ModifierTypeListConverter.cs index e4b44467..5d1daedb 100644 --- a/src/ElectronNET.API/Converter/ModifierTypeListConverter.cs +++ b/src/ElectronNET.API/Converter/ModifierTypeListConverter.cs @@ -1,12 +1,12 @@ -๏ปฟusing System; +๏ปฟnamespace ElectronNET.Converter; + +using System; using System.Collections.Generic; using System.Linq; using ElectronNET.API.Entities; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace ElectronNET.API.Converter; - /// /// /// From b06d20450beadcf3435da8ef3028231154c8db61 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 13:23:10 +0200 Subject: [PATCH 16/46] ElectronNET.API: Add ProcessRunner (for running electron from dotnet) --- src/ElectronNET.API/Common/ProcessRunner.cs | 595 ++++++++++++++++++++ src/ElectronNET.API/Common/RunnerParams.cs | 163 ++++++ 2 files changed, 758 insertions(+) create mode 100644 src/ElectronNET.API/Common/ProcessRunner.cs create mode 100644 src/ElectronNET.API/Common/RunnerParams.cs diff --git a/src/ElectronNET.API/Common/ProcessRunner.cs b/src/ElectronNET.API/Common/ProcessRunner.cs new file mode 100644 index 00000000..f3c3529e --- /dev/null +++ b/src/ElectronNET.API/Common/ProcessRunner.cs @@ -0,0 +1,595 @@ +๏ปฟnamespace ElectronNET.Common +{ + using System; + using System.Diagnostics; + using System.Diagnostics.CodeAnalysis; + using System.Text; + using System.Threading; + using System.Threading.Tasks; + + /// + /// Class encapsulating out-of-process execution of console applications. + /// + /// + /// Why this class? + /// Probably everybody who has tried to use System.Diagnotics.Process cross-platform and with reading + /// stderr and stdout will know that it is a pretty quirky API. + /// The code below may look weird, even non-sensical, but it works 100% reliable with all .net frameworks + /// and .net versions and on every platform where .net runs. This is just the innermost core, that's why + /// there are many dead ends, but it has all the crucial parts. + /// + /// + [SuppressMessage("ReSharper", "SuspiciousLockOverSynchronizationPrimitive")] + public class ProcessRunner : IDisposable + { + private volatile Process process; + private readonly StringBuilder stdOut = new StringBuilder(4 * 1024); + private readonly StringBuilder stdErr = new StringBuilder(4 * 1024); + + private volatile ManualResetEvent stdOutEvent; + private volatile ManualResetEvent stdErrEvent; + private volatile Stopwatch stopwatch; + + /// Initializes a new instance of the class. + /// A name identifying the process to execute. + public ProcessRunner(string name) + { + this.Name = name; + } + + public event EventHandler ProcessExited; + + public bool IsDisposed { get; private set; } + + private Process Process + { + get + { + return this.process; + } + } + + public bool IsRunning + { + get + { + var proc = this.process; + if (proc != null) + { + try + { + return !proc.HasExited; + } + catch + { + return false; + } + } + + return false; + } + } + + /// Gets the name identifying the process. + /// The name. + public string Name { get; } + + public string CommandLine { get; private set; } + + public string ExecutableFileName { get; private set; } + + public string WorkingFolder { get; private set; } + + public bool RecordStandardOutput { get; set; } + + public bool RecordStandardError { get; set; } + + public string StandardOutput + { + get + { + lock (this.stdOut) + { + return this.stdOut.ToString(); + } + } + } + + public string StandardError + { + get + { + lock (this.stdErr) + { + return this.stdErr.ToString(); + } + } + } + + public int? LastExitCode { get; private set; } + + public bool Run(string exeFileName, string commandLineArgs, string workingDirectory) + { + this.CommandLine = commandLineArgs; + this.WorkingFolder = workingDirectory; + this.ExecutableFileName = exeFileName; + + var startInfo = new RunnerParams(exeFileName) + { + Arguments = commandLineArgs, + UseShellExecute = false, + RedirectStandardOutput = true, + RedirectStandardError = true, + RedirectStandardInput = true, + ErrorDialog = false, + CreateNoWindow = true, + WorkingDirectory = workingDirectory + }; + + return this.Run(startInfo); + } + + protected bool Run(RunnerParams runnerParams) + { + if (this.IsDisposed) + { + throw new ObjectDisposedException(this.GetType().ToString()); + } + + this.Close(); + + this.LastExitCode = null; + + lock (this.stdOut) + { + this.stdOut.Clear(); + } + + lock (this.stdErr) + { + this.stdErr.Clear(); + } + + this.stdOutEvent = new ManualResetEvent(false); + this.stdErrEvent = new ManualResetEvent(false); + + if (!this.OnBeforeStartProcessCore(runnerParams)) + { + return false; + } + + var startInfo = new ProcessStartInfo(runnerParams.FileName) + { + Arguments = runnerParams.Arguments, + UseShellExecute = runnerParams.UseShellExecute, + RedirectStandardOutput = runnerParams.RedirectStandardOutput, + RedirectStandardError = runnerParams.RedirectStandardError, + RedirectStandardInput = runnerParams.RedirectStandardInput, + ErrorDialog = runnerParams.ErrorDialog, + CreateNoWindow = runnerParams.CreateNoWindow, + WorkingDirectory = runnerParams.WorkingDirectory + }; + + foreach (var variableSetting in runnerParams.EnvironmentVariables) + { + startInfo.EnvironmentVariables[variableSetting.Key] = variableSetting.Value; + } + + var proc = new Process { StartInfo = startInfo }; + + proc.EnableRaisingEvents = true; + + this.RegisterProcessEvents(proc); + + this.process = proc; + + try + { + this.process.Start(); + this.stopwatch = Stopwatch.StartNew(); + this.process.BeginOutputReadLine(); + this.process.BeginErrorReadLine(); + this.process.Refresh(); + this.OnProcessStartedCore(); + } + catch (Exception ex) + { + this.OnProcessErrorCore(ex); + this.Close(); + throw; + } + + return true; + } + + public async Task WriteAsync(string data) + { + var proc = this.Process; + if (proc != null && !proc.HasExited) + { + try + { + await proc.StandardInput.WriteAsync(data).ConfigureAwait(false); + return true; + } + catch (Exception ex) + { + Console.WriteLine("{0}.{1}: {2}", ex, nameof(ProcessRunner), nameof(this.WriteAsync)); + } + } + + return false; + } + + public bool WaitForExit() + { + var proc = this.process; + + if (proc == null) + { + return true; + } + + try + { + // Wait for process and all I/O to finish. + proc.WaitForExit(); + return true; + } + catch (Exception ex) + { + this.OnProcessErrorCore(ex); + return false; + } + } + + /// Sychronously waits for the specified amount and ends the process afterwards. + /// The timeout ms. + /// This method allows for a clean exit, since it also waits until the StandardOutput and + /// StandardError pipes are processed to the end. + /// true, if the process has exited gracefully; false otherwise. + public bool WaitAndKill(int timeoutMs) + { + var proc = this.process; + + if (proc == null) + { + return true; + } + + try + { + if (timeoutMs <= 0) + { + throw new ArgumentException("Argument must be greater then 0", nameof(timeoutMs)); + } + + // Timed waiting. We need to wait for I/O ourselves. + if (!proc.WaitForExit(timeoutMs)) + { + this.Cancel(); + } + + // Wait for the I/O to finish. + var waitMs = (int)(timeoutMs - this.stopwatch.ElapsedMilliseconds); + waitMs = Math.Max(waitMs, 10); + this.stdOutEvent?.WaitOne(waitMs); + + waitMs = (int)(timeoutMs - this.stopwatch.ElapsedMilliseconds); + waitMs = Math.Max(waitMs, 10); + return this.stdErrEvent?.WaitOne(waitMs) ?? false; + } + finally + { + // Cleanup. + this.Cancel(); + } + } + + /// Asynchronously waits for the specified amount and ends the process afterwards. + /// The timeout ms. + /// Tjhis method performs the wait operation on a threadpool thread. + /// Only recommended for short timeouts and situations where a synchronous call is undesired. + /// true, if the process has exited gracefully; false otherwise. + public Task WaitAndKillAsync(int timeoutMs) + { + var task = Task.Run(() => this.WaitAndKill(timeoutMs)); + return task; + } + + /// Waits asynchronously for the process to exit. + /// The timeout ms. + /// The cancellation token. + /// true, if the process has exited, false if the process is still running. + /// + /// This methods waits until the process has existed or the + /// has elapsed. + /// This method does not end the process itself. + /// + public Task WaitForExitAsync(int timeoutMs, CancellationToken cancellationToken = default) + { + timeoutMs = Math.Max(0, timeoutMs); + + var timeoutSource = new CancellationTokenSource(timeoutMs); + var linkedSource = CancellationTokenSource.CreateLinkedTokenSource(timeoutSource.Token, cancellationToken); + + return this.WaitForExitAsync(linkedSource.Token); + } + + /// Waits asynchronously for the process to exit. + /// The cancellation token. + /// This methods waits until the process has existed or the + /// has been triggered. + /// This method does not end the process itself. + /// true, if the process has exited, false if the process is still running. + public async Task WaitForExitAsync(CancellationToken cancellationToken = default(CancellationToken)) + { + var proc = this.process; + + if (proc == null) + { + return true; + } + + var tcs = new TaskCompletionSource(); + + // Use local function instead of a lambda to allow proper deregistration of the event + void ProcessExited(object sender, EventArgs e) + { + tcs.TrySetResult(true); + } + + try + { + proc.EnableRaisingEvents = true; + proc.Exited += ProcessExited; + + if (proc.HasExited) + { + return true; + } + + using (cancellationToken.Register(() => tcs.TrySetResult(false))) + { + return await tcs.Task.ConfigureAwait(false); + } + } + finally + { + proc.Exited -= ProcessExited; + } + } + + public void Cancel() + { + var proc = this.process; + + if (proc != null) + { + try + { + // Invalidate cached data to requery. + proc.Refresh(); + + // We need to do this in case of a non-UI proc + // or one to be forced to cancel. + if (!proc.HasExited) + { + // Cancel all pending IO ops. + proc.CancelErrorRead(); + proc.CancelOutputRead(); + } + + if (!proc.HasExited) + { + proc.Kill(); + } + } + catch + { + // Kill will throw when/if the process has already exited. + } + } + + var outEvent = this.stdOutEvent; + this.stdOutEvent = null; + if (outEvent != null) + { + lock (outEvent) + { + outEvent.Close(); + outEvent.Dispose(); + } + } + + var errEvent = this.stdErrEvent; + this.stdErrEvent = null; + if (errEvent != null) + { + lock (errEvent) + { + errEvent.Close(); + errEvent.Dispose(); + } + } + } + + private void Close() + { + this.Cancel(); + + var proc = this.process; + this.process = null; + if (proc != null) + { + try + { + this.UnRegisterProcessEvents(proc); + + // Dispose in all cases. + proc.Close(); + proc.Dispose(); + } + catch (Exception ex) + { + this.OnProcessErrorCore(ex); + } + } + } + + protected virtual void OnDispose() + { + } + + void IDisposable.Dispose() + { + this.IsDisposed = true; + this.Close(); + this.OnDispose(); + } + + public override string ToString() + { + return string.Format("{0}: {1} {2}", this.GetType().Name, this.Name, this.process); + } + + protected virtual bool OnBeforeStartProcessCore(RunnerParams processRunnerInfo) + { + return true; + } + + protected virtual void OnProcessStartedCore() + { + } + + protected virtual void OnProcessErrorCore(Exception processException) + { + } + + protected virtual void OnProcessExitCore(int exitCode) + { + } + + private void RegisterProcessEvents(Process proc) + { + proc.ErrorDataReceived += this.Process_ErrorDataReceived; + proc.OutputDataReceived += this.Process_OutputDataReceived; + proc.Exited += this.Process_Exited; + } + + private void UnRegisterProcessEvents(Process proc) + { + proc.ErrorDataReceived -= this.Process_ErrorDataReceived; + proc.OutputDataReceived -= this.Process_OutputDataReceived; + proc.Exited -= this.Process_Exited; + } + + private void Process_Exited(object sender, EventArgs e) + { + this.WaitForExitAfterExited(); + this.SetExitCode(); + this.OnProcessExitCore(this.LastExitCode ?? -9998); + this.ProcessExited?.Invoke(this, new EventArgs()); + } + + private void WaitForExitAfterExited() + { + try + { + // This shouldn't throw here, but the mono process implementation doesn't always behave as it should. + this.process.WaitForExit(); + } + catch (Exception ex) + { + Console.WriteLine("Error when calling WaitForExit after exited event has fired: {0}.{1}: {2}", ex, nameof(ProcessRunner), nameof(this.WaitForExitAfterExited)); + } + } + + private void SetExitCode() + { + int exitCode = -9999; + + try + { + if (this.Process != null) + { + exitCode = this.Process.ExitCode; + } + } + catch + { + // Ignore error. + } + + this.LastExitCode = exitCode; + } + + private void Process_ErrorDataReceived(object sender, DataReceivedEventArgs e) + { + if (this.RecordStandardError) + { + lock (this.stdErr) + { + this.stdErr.AppendLine(e.Data); + } + } + + if (e.Data != null) + { + Console.WriteLine("|| " + e.Data); + } + else + { + var evt = this.stdErrEvent; + if (evt != null) + { + lock (evt) + { + try + { + evt.Set(); + } + catch + { + // Ignore error. + } + } + } + } + } + + private void Process_OutputDataReceived(object sender, DataReceivedEventArgs e) + { + if (this.RecordStandardOutput) + { + lock (this.stdOut) + { + this.stdOut.AppendLine(e.Data); + } + } + + if (e.Data != null) + { + Console.WriteLine("|| " + e.Data); + } + else + { + var evt = this.stdOutEvent; + if (evt != null) + { + lock (evt) + { + try + { + evt.Set(); + } + catch + { + // Ignore error. + } + } + } + } + } + } +} \ No newline at end of file diff --git a/src/ElectronNET.API/Common/RunnerParams.cs b/src/ElectronNET.API/Common/RunnerParams.cs new file mode 100644 index 00000000..001b8812 --- /dev/null +++ b/src/ElectronNET.API/Common/RunnerParams.cs @@ -0,0 +1,163 @@ +๏ปฟnamespace ElectronNET.Common +{ + using System; + using System.Collections.Generic; + using System.ComponentModel; + using System.Diagnostics; + using System.Text; + + public sealed class RunnerParams + { + private string fileName; + private string arguments; + private string directory; + private string userName; + private string verb; + private ProcessWindowStyle windowStyle; + + /// + /// Default constructor. At least the + /// property must be set before starting the process. + /// + public RunnerParams() + { + } + + /// + /// Specifies the name of the application or document that is to be started. + /// + public RunnerParams(string fileName) + { + this.fileName = fileName; + } + + /// + /// Specifies the name of the application that is to be started, as well as a set + /// of command line arguments to pass to the application. + /// + public RunnerParams(string fileName, string arguments) + { + this.fileName = fileName; + this.arguments = arguments; + } + + /// + /// Specifies the set of command line arguments to use when starting the application. + /// + public string Arguments + { + get + { + return this.arguments ?? string.Empty; + } + + set + { + this.arguments = value; + } + } + + public bool CreateNoWindow { get; set; } + + public Dictionary EnvironmentVariables { get; set; } = new Dictionary(); + + public bool RedirectStandardInput { get; set; } + + public bool RedirectStandardOutput { get; set; } + + public bool RedirectStandardError { get; set; } + + public Encoding StandardInputEncoding { get; set; } + + public Encoding StandardErrorEncoding { get; set; } + + public Encoding StandardOutputEncoding { get; set; } + + /// + /// + /// Returns or sets the application, document, or URL that is to be launched. + /// + /// + public string FileName + { + get + { + return this.fileName ?? string.Empty; + } + + set + { + this.fileName = value; + } + } + + /// + /// Returns or sets the initial directory for the process that is started. + /// Specify "" to if the default is desired. + /// + public string WorkingDirectory + { + get + { + return this.directory ?? string.Empty; + } + + set + { + this.directory = value; + } + } + + public bool ErrorDialog { get; set; } + + public IntPtr ErrorDialogParentHandle { get; set; } + + public string UserName + { + get + { + return this.userName ?? string.Empty; + } + + set + { + this.userName = value; + } + } + + [DefaultValue("")] + public string Verb + { + get + { + return this.verb ?? string.Empty; + } + + set + { + this.verb = value; + } + } + + [DefaultValue(ProcessWindowStyle.Normal)] + public ProcessWindowStyle WindowStyle + { + get + { + return this.windowStyle; + } + + set + { + if (!Enum.IsDefined(typeof(ProcessWindowStyle), value)) + { + throw new InvalidEnumArgumentException(nameof(value), (int)value, typeof(ProcessWindowStyle)); + } + + this.windowStyle = value; + } + } + + public bool UseShellExecute { get; set; } + } +} \ No newline at end of file From d1db92822299e657268f5f205c71bb200e8b9706 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 13:24:28 +0200 Subject: [PATCH 17/46] ElectronNET.API: Add new runtime code (for launch, lifecycle and service orchestration) --- src/ElectronNET.API/Common/Extensions.cs | 37 ++++ src/ElectronNET.API/ElectronNetRuntime.cs | 55 ++++++ .../Controllers/RuntimeControllerBase.cs | 33 ++++ .../RuntimeControllerDotNetFirst.cs | 107 ++++++++++++ .../RuntimeControllerElectronFirst.cs | 108 ++++++++++++ src/ElectronNET.API/Runtime/Data/BuildInfo.cs | 19 ++ .../Runtime/Data/DotnetAppType.cs | 11 ++ .../Runtime/Data/LifetimeState.cs | 12 ++ .../Runtime/Data/StartupMethod.cs | 37 ++++ .../Runtime/Helpers/LaunchOrderDetector.cs | 72 ++++++++ .../Runtime/Helpers/PortHelper.cs | 26 +++ .../Runtime/Helpers/UnpackagedDetector.cs | 109 ++++++++++++ .../Runtime/IElectronNetRuntimeController.cs | 33 ++++ .../ElectronProcess/ElectronProcessActive.cs | 94 ++++++++++ .../ElectronProcess/ElectronProcessBase.cs | 15 ++ .../ElectronProcess/ElectronProcessPassive.cs | 53 ++++++ .../Runtime/Services/LifetimeServiceBase.cs | 135 +++++++++++++++ .../SocketBridge/SocketBridgeService.cs | 56 ++++++ src/ElectronNET.API/Runtime/StartupManager.cs | 163 ++++++++++++++++++ 19 files changed, 1175 insertions(+) create mode 100644 src/ElectronNET.API/Common/Extensions.cs create mode 100644 src/ElectronNET.API/ElectronNetRuntime.cs create mode 100644 src/ElectronNET.API/Runtime/Controllers/RuntimeControllerBase.cs create mode 100644 src/ElectronNET.API/Runtime/Controllers/RuntimeControllerDotNetFirst.cs create mode 100644 src/ElectronNET.API/Runtime/Controllers/RuntimeControllerElectronFirst.cs create mode 100644 src/ElectronNET.API/Runtime/Data/BuildInfo.cs create mode 100644 src/ElectronNET.API/Runtime/Data/DotnetAppType.cs create mode 100644 src/ElectronNET.API/Runtime/Data/LifetimeState.cs create mode 100644 src/ElectronNET.API/Runtime/Data/StartupMethod.cs create mode 100644 src/ElectronNET.API/Runtime/Helpers/LaunchOrderDetector.cs create mode 100644 src/ElectronNET.API/Runtime/Helpers/PortHelper.cs create mode 100644 src/ElectronNET.API/Runtime/Helpers/UnpackagedDetector.cs create mode 100644 src/ElectronNET.API/Runtime/IElectronNetRuntimeController.cs create mode 100644 src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessActive.cs create mode 100644 src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessBase.cs create mode 100644 src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessPassive.cs create mode 100644 src/ElectronNET.API/Runtime/Services/LifetimeServiceBase.cs create mode 100644 src/ElectronNET.API/Runtime/Services/SocketBridge/SocketBridgeService.cs create mode 100644 src/ElectronNET.API/Runtime/StartupManager.cs diff --git a/src/ElectronNET.API/Common/Extensions.cs b/src/ElectronNET.API/Common/Extensions.cs new file mode 100644 index 00000000..8d9a90aa --- /dev/null +++ b/src/ElectronNET.API/Common/Extensions.cs @@ -0,0 +1,37 @@ +๏ปฟnamespace ElectronNET.Common +{ + using System; + using System.Collections.Immutable; + using ElectronNET.Runtime.Data; + using ElectronNET.Runtime.Services; + + public static class Extensions + { + public static bool IsUnpackaged(this StartupMethod method) + { + switch (method) + { + case StartupMethod.UnpackedElectronFirst: + case StartupMethod.UnpackedDotnetFirst: + return true; + default: + return false; + } + } + + public static bool IsReady(this LifetimeServiceBase service) + { + return service != null && service.State == LifetimeState.Ready; + } + + public static bool IsNotStopped(this LifetimeServiceBase service) + { + return service != null && service.State != LifetimeState.Stopped; + } + + public static bool IsNullOrStopped(this LifetimeServiceBase service) + { + return service == null || service.State == LifetimeState.Stopped; + } + } +} diff --git a/src/ElectronNET.API/ElectronNetRuntime.cs b/src/ElectronNET.API/ElectronNetRuntime.cs new file mode 100644 index 00000000..bf3ce4e4 --- /dev/null +++ b/src/ElectronNET.API/ElectronNetRuntime.cs @@ -0,0 +1,55 @@ +๏ปฟnamespace ElectronNET +{ + using System; + using System.Collections.Immutable; + using System.Threading.Tasks; + using ElectronNET.API; + using ElectronNET.Runtime; + using ElectronNET.Runtime.Controllers; + using ElectronNET.Runtime.Data; + + public static class ElectronNetRuntime + { + internal static StartupManager StartupManager; + + internal const int DefaultSocketPort = 8000; + internal const int DefaultWebPort = 8001; + internal const string ElectronPortArgumentName = "electronPort"; + internal const string ElectronPidArgumentName = "electronPID"; + + /// Initializes the class. + static ElectronNetRuntime() + { + StartupManager = new StartupManager(); + StartupManager.Initialize(); + } + + public static int? ElectronSocketPort { get; internal set; } + + public static int? AspNetWebPort { get; internal set; } + + public static StartupMethod StartupMethod { get; internal set; } + + public static DotnetAppType DotnetAppType { get; internal set; } + + public static string ElectronExecutable { get; internal set; } + + public static ImmutableList ProcessArguments { get; internal set; } + + public static BuildInfo BuildInfo { get; internal set; } + + public static IElectronNetRuntimeController RuntimeController => RuntimeControllerCore; + + // The below properties are non-public + internal static RuntimeControllerBase RuntimeControllerCore { get; set; } + + internal static int? ElectronProcessId { get; set; } + + internal static Func OnAppReadyCallback { get; set; } + + internal static SocketIoFacade GetSocket() + { + return RuntimeControllerCore?.Socket; + } + } +} diff --git a/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerBase.cs b/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerBase.cs new file mode 100644 index 00000000..c80c0d6a --- /dev/null +++ b/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerBase.cs @@ -0,0 +1,33 @@ +๏ปฟnamespace ElectronNET.Runtime.Controllers +{ + using System.Threading.Tasks; + using ElectronNET.API; + using ElectronNET.Runtime.Services; + using ElectronNET.Runtime.Services.ElectronProcess; + using ElectronNET.Runtime.Services.SocketBridge; + + internal abstract class RuntimeControllerBase : LifetimeServiceBase, IElectronNetRuntimeController + { + protected RuntimeControllerBase() + { + } + + internal abstract SocketIoFacade Socket { get; } + + internal abstract ElectronProcessBase ElectronProcess { get; } + + internal abstract SocketBridgeService SocketBridge { get; } + + protected override Task StartCore() + { + + return Task.CompletedTask; + } + + protected override Task StopCore() + { + return Task.CompletedTask; + } + + } +} diff --git a/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerDotNetFirst.cs b/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerDotNetFirst.cs new file mode 100644 index 00000000..7b8e888d --- /dev/null +++ b/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerDotNetFirst.cs @@ -0,0 +1,107 @@ +๏ปฟnamespace ElectronNET.Runtime.Controllers +{ + using System; + using System.Threading.Tasks; + using ElectronNET.API; + using ElectronNET.Common; + using ElectronNET.Runtime.Data; + using ElectronNET.Runtime.Helpers; + using ElectronNET.Runtime.Services.ElectronProcess; + using ElectronNET.Runtime.Services.SocketBridge; + + internal class RuntimeControllerDotNetFirst : RuntimeControllerBase + { + private ElectronProcessBase electronProcess; + private SocketBridgeService socketBridge; + private int? port; + + public RuntimeControllerDotNetFirst() + { + } + + internal override SocketIoFacade Socket + { + get + { + if (this.State == LifetimeState.Ready) + { + return this.socketBridge.Socket; + } + + throw new Exception("Cannot access socket bridge. Runtime is not in 'Ready' state"); + } + } + + internal override ElectronProcessBase ElectronProcess => this.electronProcess; + + internal override SocketBridgeService SocketBridge => this.socketBridge; + + protected override Task StartCore() + { + var isUnPacked = ElectronNetRuntime.StartupMethod.IsUnpackaged(); + var electronBinaryName = ElectronNetRuntime.ElectronExecutable; + var args = Environment.CommandLine; + this.port = ElectronNetRuntime.ElectronSocketPort; + + if (!this.port.HasValue) + { + this.port = PortHelper.GetFreePort(ElectronNetRuntime.DefaultSocketPort); + ElectronNetRuntime.ElectronSocketPort = this.port; + } + + this.electronProcess = new ElectronProcessActive(isUnPacked, electronBinaryName, args, this.port.Value); + this.electronProcess.Ready += this.ElectronProcess_Ready; + this.electronProcess.Stopped += this.ElectronProcess_Stopped; + + return this.electronProcess.Start(); + } + + private void ElectronProcess_Ready(object sender, EventArgs e) + { + this.TransitionState(LifetimeState.Started); + this.socketBridge = new SocketBridgeService(this.port!.Value); + this.socketBridge.Ready += this.SocketBridge_Ready; + this.socketBridge.Stopped += this.SocketBridge_Stopped; + this.socketBridge.Start(); + } + + private void SocketBridge_Ready(object sender, EventArgs e) + { + this.TransitionState(LifetimeState.Ready); + + } + + private void SocketBridge_Stopped(object sender, EventArgs e) + { + this.HandleStopped(); + } + + private void ElectronProcess_Stopped(object sender, EventArgs e) + { + this.HandleStopped(); + } + + private void HandleStopped() + { + if (this.socketBridge.State != LifetimeState.Stopped) + { + this.socketBridge.Stop(); + } + else if (this.electronProcess.State != LifetimeState.Stopped) + { + this.electronProcess.Stop(); + } + else + { + this.TransitionState(LifetimeState.Stopped); + } + } + + protected override Task StopCore() + { + this.electronProcess.Stop(); + return Task.CompletedTask; + } + + } +} diff --git a/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerElectronFirst.cs b/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerElectronFirst.cs new file mode 100644 index 00000000..c8b9031c --- /dev/null +++ b/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerElectronFirst.cs @@ -0,0 +1,108 @@ +๏ปฟnamespace ElectronNET.Runtime.Controllers +{ + using System; + using System.Threading.Tasks; + using ElectronNET.API; + using ElectronNET.Runtime.Data; + using ElectronNET.Runtime.Services.ElectronProcess; + using ElectronNET.Runtime.Services.SocketBridge; + + internal class RuntimeControllerElectronFirst : RuntimeControllerBase + { + private ElectronProcessBase electronProcess; + private SocketBridgeService socketBridge; + private int? port; + + public RuntimeControllerElectronFirst() + { + } + + internal override SocketIoFacade Socket + { + get + { + if (this.State == LifetimeState.Ready) + { + return this.socketBridge.Socket; + } + + throw new Exception("Cannot access socket bridge. Runtime is not in 'Ready' state"); + } + } + + internal override ElectronProcessBase ElectronProcess => this.electronProcess; + + internal override SocketBridgeService SocketBridge => this.socketBridge; + + protected override Task StartCore() + { + this.port = ElectronNetRuntime.ElectronSocketPort; + + if (!this.port.HasValue) + { + throw new Exception("No port has been specified by Electron!"); + } + + if (!ElectronNetRuntime.ElectronProcessId.HasValue) + { + throw new Exception("No electronPID has been specified by Electron!"); + } + + this.TransitionState(LifetimeState.Starting); + this.socketBridge = new SocketBridgeService(this.port!.Value); + this.socketBridge.Ready += this.SocketBridge_Ready; + this.socketBridge.Stopped += this.SocketBridge_Stopped; + this.socketBridge.Start(); + + this.electronProcess = new ElectronProcessPassive(ElectronNetRuntime.ElectronProcessId.Value); + this.electronProcess.Ready += this.ElectronProcess_Ready; + this.electronProcess.Stopped += this.ElectronProcess_Stopped; + + this.electronProcess.Start(); + + return Task.CompletedTask; + } + + private void ElectronProcess_Ready(object sender, EventArgs e) + { + } + + private void SocketBridge_Ready(object sender, EventArgs e) + { + this.TransitionState(LifetimeState.Ready); + } + + private void SocketBridge_Stopped(object sender, EventArgs e) + { + this.HandleStopped(); + } + + private void ElectronProcess_Stopped(object sender, EventArgs e) + { + this.HandleStopped(); + } + + private void HandleStopped() + { + if (this.socketBridge.State != LifetimeState.Stopped) + { + this.socketBridge.Stop(); + } + else if (this.electronProcess.State != LifetimeState.Stopped) + { + this.electronProcess.Stop(); + } + else + { + this.TransitionState(LifetimeState.Stopped); + } + } + + protected override Task StopCore() + { + this.socketBridge.Stop(); + return Task.CompletedTask; + } + + } +} diff --git a/src/ElectronNET.API/Runtime/Data/BuildInfo.cs b/src/ElectronNET.API/Runtime/Data/BuildInfo.cs new file mode 100644 index 00000000..cb71aa08 --- /dev/null +++ b/src/ElectronNET.API/Runtime/Data/BuildInfo.cs @@ -0,0 +1,19 @@ +๏ปฟnamespace ElectronNET.Runtime.Data +{ + public class BuildInfo + { + public string ElectronExecutable { get; internal set; } + + public string ElectronVersion { get; internal set; } + + public string RuntimeIdentifier { get; internal set; } + + public string ElectronSingleInstance { get; internal set; } + + public string Title { get; internal set; } + + public string Version { get; internal set; } + + public string BuildConfiguration { get; internal set; } + } +} \ No newline at end of file diff --git a/src/ElectronNET.API/Runtime/Data/DotnetAppType.cs b/src/ElectronNET.API/Runtime/Data/DotnetAppType.cs new file mode 100644 index 00000000..d52328a6 --- /dev/null +++ b/src/ElectronNET.API/Runtime/Data/DotnetAppType.cs @@ -0,0 +1,11 @@ +๏ปฟnamespace ElectronNET.Runtime.Data +{ + public enum DotnetAppType + { + /// A plain DotNet cross-platform console app. + ConsoleApp, + + /// ASP.NET Core cross-platform app. + AspNetCoreApp, + } +} diff --git a/src/ElectronNET.API/Runtime/Data/LifetimeState.cs b/src/ElectronNET.API/Runtime/Data/LifetimeState.cs new file mode 100644 index 00000000..1785887a --- /dev/null +++ b/src/ElectronNET.API/Runtime/Data/LifetimeState.cs @@ -0,0 +1,12 @@ +๏ปฟnamespace ElectronNET.Runtime.Data +{ + public enum LifetimeState + { + Uninitialized, + Starting, + Started, + Ready, + Stopping, + Stopped, + } +} diff --git a/src/ElectronNET.API/Runtime/Data/StartupMethod.cs b/src/ElectronNET.API/Runtime/Data/StartupMethod.cs new file mode 100644 index 00000000..9d3e380b --- /dev/null +++ b/src/ElectronNET.API/Runtime/Data/StartupMethod.cs @@ -0,0 +1,37 @@ +๏ปฟnamespace ElectronNET.Runtime.Data +{ + public enum StartupMethod + { + /// Packaged Electron app where Electron launches the DotNet app. + /// + /// This is the classic way of ElectrronNET startup. + /// + PackagedElectronFirst, + + /// Packaged Electron app where DotNet launches the Electron prozess. + /// + /// Provides better ways for managing the overall app lifecycle. + /// On the command lines, this is "dotnetpacked" + /// + PackagedDotnetFirst, + + /// Unpackacked execution for debugging the Electron process and NodeJS. + /// + /// Similar to the legacy ElectronNET debugging but without packaging (=fast) and allows selection of + /// the debug adapter. It's rarely useful, unless it's about debugging NodeJS. + /// Note: 'Unpackaged' means that it's run directly from the compilation output folders (./bin/*). + /// On the command lines, this is "unpackedelectron" + /// + UnpackedElectronFirst, + + + /// Unpackacked execution for debugging the DotNet process. + /// + /// This is the new way of super-fast startup for debugging in-place with Hot Reload + /// (edit and continue), even on WSL - all from within Visual Studio. + /// Note: 'Unpackaged' means that it's run directly from the compilation output folders (./bin/*). + /// On the command lines, this is "unpackeddotnet" + /// + UnpackedDotnetFirst, + } +} diff --git a/src/ElectronNET.API/Runtime/Helpers/LaunchOrderDetector.cs b/src/ElectronNET.API/Runtime/Helpers/LaunchOrderDetector.cs new file mode 100644 index 00000000..8320cfe0 --- /dev/null +++ b/src/ElectronNET.API/Runtime/Helpers/LaunchOrderDetector.cs @@ -0,0 +1,72 @@ +๏ปฟnamespace ElectronNET.Runtime.Helpers +{ + using System; + using System.Collections.Generic; + using System.Diagnostics; + using System.Linq; + + internal class LaunchOrderDetector + { + public static bool CheckIsLaunchedByDotNet() + { + var tests = new List>(); + + tests.Add(CheckIsDotNetStartup1); + tests.Add(CheckIsDotNetStartup2); + tests.Add(CheckIsDotNetStartup3); + + int scoreDotNet = 0, scoreElectron = 0; + + foreach (var test in tests) + { + var res = test(); + + if (res == true) + { + scoreDotNet++; + } + + if (res == false) + { + scoreElectron++; + } + } + + Console.WriteLine("Probe scored for launch origin: DotNet {0} vs. {1} Electron", scoreDotNet, scoreElectron); + return scoreDotNet > scoreElectron; + } + + private static bool? CheckIsDotNetStartup1() + { + var hasPortArg = ElectronNetRuntime.ProcessArguments.Any(e => e.Contains(ElectronNetRuntime.ElectronPortArgumentName, StringComparison.OrdinalIgnoreCase)); + if (hasPortArg) + { + return false; + } + + + return true; + } + + private static bool? CheckIsDotNetStartup2() + { + var hasPidArg = ElectronNetRuntime.ProcessArguments.Any(e => e.Contains(ElectronNetRuntime.ElectronPidArgumentName, StringComparison.OrdinalIgnoreCase)); + if (hasPidArg) + { + return false; + } + + return true; + } + + private static bool? CheckIsDotNetStartup3() + { + if (Debugger.IsAttached) + { + return true; + } + + return null; + } + } +} diff --git a/src/ElectronNET.API/Runtime/Helpers/PortHelper.cs b/src/ElectronNET.API/Runtime/Helpers/PortHelper.cs new file mode 100644 index 00000000..3a141082 --- /dev/null +++ b/src/ElectronNET.API/Runtime/Helpers/PortHelper.cs @@ -0,0 +1,26 @@ +๏ปฟnamespace ElectronNET.Runtime.Helpers +{ + using System.Linq; + using System.Net.NetworkInformation; + + internal static class PortHelper + { + public static int GetFreePort(int? defaultPost) + { + var listeners = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners().Select(e => e.Port).ToList(); + + int port = defaultPost ?? 8000; + + while (true) + { + if (!listeners.Contains(port)) + { + return port; + } + + port += 2; + } + } + + } +} diff --git a/src/ElectronNET.API/Runtime/Helpers/UnpackagedDetector.cs b/src/ElectronNET.API/Runtime/Helpers/UnpackagedDetector.cs new file mode 100644 index 00000000..d4fbd9da --- /dev/null +++ b/src/ElectronNET.API/Runtime/Helpers/UnpackagedDetector.cs @@ -0,0 +1,109 @@ +๏ปฟnamespace ElectronNET.Runtime.Helpers +{ + using System; + using System.Collections.Generic; + using System.Diagnostics; + using System.IO; + using System.Linq; + + internal class UnpackagedDetector + { + public static bool CheckIsUnpackaged() + { + var tests = new List>(); + + tests.Add(CheckUnpackaged1); + + // We let this one account twice + tests.Add(CheckUnpackaged2); + tests.Add(CheckUnpackaged2); + + tests.Add(CheckUnpackaged3); + tests.Add(CheckUnpackaged4); + + int scoreUnpackaged = 0, scorePackaged = 0; + + foreach (var test in tests) + { + var res = test(); + + if (res == true) + { + scoreUnpackaged++; + } + + if (res == false) + { + scorePackaged++; + } + } + + Console.WriteLine("Probe scored for package mode: Unpackaged {0} vs. {1} Packaged", scoreUnpackaged, scorePackaged); + return scoreUnpackaged > scorePackaged; + } + + private static bool? CheckUnpackaged1() + { + var cfg = ElectronNetRuntime.BuildInfo.BuildConfiguration; + if (cfg != null) + { + if (cfg.Equals("Debug", StringComparison.OrdinalIgnoreCase)) + { + return true; + } + + if (cfg.Equals("Release", StringComparison.OrdinalIgnoreCase)) + { + return false; + } + } + + return null; + } + + private static bool? CheckUnpackaged2() + { + var dir = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory); + if (dir.Name == "bin" && dir.Parent?.Name == "resources") + { + return false; + } + + if (dir.GetDirectories().Any(e => e.Name == ".electron")) + { + return true; + } + + return null; + } + + private static bool? CheckUnpackaged3() + { + if (Debugger.IsAttached) + { + return true; + } + + + return null; + } + + private static bool? CheckUnpackaged4() + { + var isUnpackaged = ElectronNetRuntime.ProcessArguments.Any(e => e.Contains("unpacked", StringComparison.OrdinalIgnoreCase)); + + if (isUnpackaged) + { + return true; + } + + var isPackaged = ElectronNetRuntime.ProcessArguments.Any(e => e.Contains("dotnetpacked", StringComparison.OrdinalIgnoreCase)); + if (isPackaged) + { + return false; + } + + return null; + } + } +} diff --git a/src/ElectronNET.API/Runtime/IElectronNetRuntimeController.cs b/src/ElectronNET.API/Runtime/IElectronNetRuntimeController.cs new file mode 100644 index 00000000..4b69c3ca --- /dev/null +++ b/src/ElectronNET.API/Runtime/IElectronNetRuntimeController.cs @@ -0,0 +1,33 @@ +๏ปฟnamespace ElectronNET.Runtime +{ + using System; + using System.Threading.Tasks; + using ElectronNET.Runtime.Data; + + public interface IElectronNetRuntimeController + { + LifetimeState State { get; } + + Task WaitStartedTask { get; } + + Task WaitReadyTask { get; } + + Task WaitStoppingTask { get; } + + Task WaitStoppedTask { get; } + + event EventHandler Starting; + + event EventHandler Started; + + event EventHandler Ready; + + event EventHandler Stopping; + + event EventHandler Stopped; + + Task Start(); + + Task Stop(); + } +} \ No newline at end of file diff --git a/src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessActive.cs b/src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessActive.cs new file mode 100644 index 00000000..57056fe1 --- /dev/null +++ b/src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessActive.cs @@ -0,0 +1,94 @@ +๏ปฟnamespace ElectronNET.Runtime.Services.ElectronProcess +{ + using System; + using System.ComponentModel; + using System.IO; + using System.Threading.Tasks; + using ElectronNET.Common; + using ElectronNET.Runtime.Data; + + /// + /// Launches and manages the Electron app process. + /// + [Localizable(false)] + internal class ElectronProcessActive : ElectronProcessBase + { + private readonly bool isUnpackaged; + private readonly string electronBinaryName; + private readonly string extraArguments; + private readonly int socketPort; + private ProcessRunner process; + + /// Initializes a new instance of the class. + /// The is debug. + /// Name of the electron. + /// The extraArguments. + /// The socket port. + public ElectronProcessActive(bool isUnpackaged, string electronBinaryName, string extraArguments, int socketPort) + { + this.isUnpackaged = isUnpackaged; + this.electronBinaryName = electronBinaryName; + this.extraArguments = extraArguments; + this.socketPort = socketPort; + } + + protected override Task StartCore() + { + var dir = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory); + string startCmd, args, workingDir; + + if (this.isUnpackaged) + { + var electrondir = Path.Combine(dir.FullName, ".electron"); + startCmd = Path.Combine(electrondir, "node_modules", "electron", "dist", "electron"); + + args = $"main.js -unpackeddotnet --trace-warnings -electronforcedport={this.socketPort:D} " + this.extraArguments; + workingDir = electrondir; + } + else + { + dir = dir.Parent?.Parent; + startCmd = Path.Combine(dir.FullName, this.electronBinaryName); + args = $"-dotnetpacked -electronforcedport={this.socketPort:D} " + this.extraArguments; + workingDir = dir.FullName; + } + + + // We don't await this in order to let the state transition to "Starting" + Task.Run(async () => await this.StartInternal(startCmd, args, workingDir).ConfigureAwait(false)); + + return Task.CompletedTask; + } + + protected override Task StopCore() + { + this.process.Cancel(); + return Task.CompletedTask; + } + + private async Task StartInternal(string startCmd, string args, string directoriy) + { + await Task.Delay(10).ConfigureAwait(false); + + this.process = new ProcessRunner("ElectronRunner"); + this.process.ProcessExited += this.Process_Exited; + this.process.Run(startCmd, args, directoriy); + + await Task.Delay(500).ConfigureAwait(false); + + if (!this.process.IsRunning) + { + Task.Run(() => this.TransitionState(LifetimeState.Stopped)); + + throw new Exception("Failed to launch the Electron process."); + } + + this.TransitionState(LifetimeState.Ready); + } + + private void Process_Exited(object sender, EventArgs e) + { + this.TransitionState(LifetimeState.Stopped); + } + } +} \ No newline at end of file diff --git a/src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessBase.cs b/src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessBase.cs new file mode 100644 index 00000000..969c8075 --- /dev/null +++ b/src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessBase.cs @@ -0,0 +1,15 @@ +๏ปฟnamespace ElectronNET.Runtime.Services.ElectronProcess +{ + using System.ComponentModel; + + /// + /// Manages the Electron app process. + /// + [Localizable(false)] + internal abstract class ElectronProcessBase : LifetimeServiceBase + { + protected ElectronProcessBase() + { + } + } +} \ No newline at end of file diff --git a/src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessPassive.cs b/src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessPassive.cs new file mode 100644 index 00000000..7d13b3fc --- /dev/null +++ b/src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessPassive.cs @@ -0,0 +1,53 @@ +๏ปฟnamespace ElectronNET.Runtime.Services.ElectronProcess +{ + using System; + using System.ComponentModel; + using System.Diagnostics; + using System.Threading.Tasks; + using ElectronNET.Runtime.Data; + + /// + /// Launches and manages the Electron app process. + /// + [Localizable(false)] + internal class ElectronProcessPassive : ElectronProcessBase + { + private readonly int pid; + private Process process; + + /// Initializes a new instance of the class. + /// + public ElectronProcessPassive(int pid) + { + this.pid = pid; + } + + protected override Task StartCore() + { + this.process = Process.GetProcessById(this.pid); + + if (this.process == null) + { + throw new ArgumentException($"Unable to find process with ID {this.pid}"); + } + + this.process.Exited += this.Process_Exited1; + + Task.Run(() => this.TransitionState(LifetimeState.Ready)); + + return Task.CompletedTask; + } + + private void Process_Exited1(object sender, EventArgs e) + { + this.TransitionState(LifetimeState.Stopped); + } + + protected override Task StopCore() + { + // Not sure about this: + ////this.process.Kill(true); + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/src/ElectronNET.API/Runtime/Services/LifetimeServiceBase.cs b/src/ElectronNET.API/Runtime/Services/LifetimeServiceBase.cs new file mode 100644 index 00000000..c2bfc6fe --- /dev/null +++ b/src/ElectronNET.API/Runtime/Services/LifetimeServiceBase.cs @@ -0,0 +1,135 @@ +๏ปฟnamespace ElectronNET.Runtime.Services +{ + using System; + using System.Runtime.CompilerServices; + using System.Threading.Tasks; + using ElectronNET.Runtime.Data; + + public abstract class LifetimeServiceBase + { + private readonly TaskCompletionSource tcsStarted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + private readonly TaskCompletionSource tcsReady = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + private readonly TaskCompletionSource tcsStopping = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + private readonly TaskCompletionSource tcsStopped = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + + private LifetimeState state = LifetimeState.Uninitialized; + + protected LifetimeServiceBase() { } + + public event EventHandler Starting; + + public event EventHandler Started; + + public event EventHandler Ready; + + public event EventHandler Stopping; + + public event EventHandler Stopped; + + + public LifetimeState State => this.state; + + public Task WaitStartedTask => this.tcsStarted.Task; + + public Task WaitReadyTask => this.tcsReady.Task; + + public Task WaitStoppingTask => this.tcsStopping.Task; + + public Task WaitStoppedTask => this.tcsStopped.Task; + + + public virtual async Task Start() + { + this.ValidateMaxState(LifetimeState.Uninitialized); + + await this.StartCore().ConfigureAwait(false); + + this.TransitionState(LifetimeState.Starting); + } + + public virtual async Task Stop() + { + this.ValidateMaxState(LifetimeState.Ready); + + await this.StopCore().ConfigureAwait(false); + + this.TransitionState(LifetimeState.Stopping); + } + + protected virtual Task StopCore() + { + return Task.CompletedTask; + } + + protected virtual Task StartCore() + { + return Task.CompletedTask; + } + + private void ValidateMaxState(LifetimeState evalState, [CallerMemberName] string callerMemberName = null) + { + if (this.state > evalState) + { + throw new Exception($"Invalid state! Cannot execute {callerMemberName} in state {this.state}"); + } + } + + protected void TransitionState(LifetimeState newState) + { + if (newState == this.state) + { + return; + } + + if (newState < this.state) + { + throw new Exception($"Invalid state transision from {this.state} to {newState}: " + this.GetType().Name); + } + + var oldState = this.state; + + this.state = newState; + + switch (this.state) + { + case LifetimeState.Starting: + this.Starting?.Invoke(this, EventArgs.Empty); + break; + case LifetimeState.Started: + this.Started?.Invoke(this, EventArgs.Empty); + break; + case LifetimeState.Ready: + this.Ready?.Invoke(this, EventArgs.Empty); + break; + case LifetimeState.Stopping: + this.Stopping?.Invoke(this, EventArgs.Empty); + break; + case LifetimeState.Stopped: + this.Stopped?.Invoke(this, EventArgs.Empty); + break; + default: + throw new ArgumentOutOfRangeException(); + } + + if (oldState < LifetimeState.Started && newState >= LifetimeState.Started) + { + this.tcsStarted.TrySetResult(); + } + + if (oldState < LifetimeState.Ready && newState >= LifetimeState.Ready) + { + this.tcsReady.TrySetResult(); + } + + if (oldState < LifetimeState.Stopping && newState >= LifetimeState.Stopping) + { + this.tcsStopping.TrySetResult(); + } + + if (oldState < LifetimeState.Stopped && newState >= LifetimeState.Stopped) + { + this.tcsStopped.TrySetResult(); + } + } + } +} diff --git a/src/ElectronNET.API/Runtime/Services/SocketBridge/SocketBridgeService.cs b/src/ElectronNET.API/Runtime/Services/SocketBridge/SocketBridgeService.cs new file mode 100644 index 00000000..12530518 --- /dev/null +++ b/src/ElectronNET.API/Runtime/Services/SocketBridge/SocketBridgeService.cs @@ -0,0 +1,56 @@ +๏ปฟnamespace ElectronNET.Runtime.Services.SocketBridge +{ + using System; + using System.Threading.Tasks; + using ElectronNET.API; + using ElectronNET.Runtime.Data; + + internal class SocketBridgeService : LifetimeServiceBase + { + private readonly int socketPort; + private readonly string socketUrl; + private SocketIoFacade socket; + + public SocketBridgeService(int socketPort) + { + this.socketPort = socketPort; + this.socketUrl = $"http://localhost:{this.socketPort}"; + } + + public int SocketPort => this.socketPort; + + internal SocketIoFacade Socket => this.socket; + + protected override Task StartCore() + { + this.socket = new SocketIoFacade(this.socketUrl); + this.socket.BridgeConnected += this.Socket_BridgeConnected; + this.socket.BridgeDisconnected += this.Socket_BridgeDisconnected; + Task.Run(this.Connect); + + return Task.CompletedTask; + } + + protected override Task StopCore() + { + this.socket.DisposeSocket(); + return Task.CompletedTask; + } + + private void Connect() + { + this.socket.Connect(); + this.TransitionState(LifetimeState.Started); + } + + private void Socket_BridgeDisconnected(object sender, EventArgs e) + { + this.TransitionState(LifetimeState.Stopped); + } + + private void Socket_BridgeConnected(object sender, EventArgs e) + { + this.TransitionState(LifetimeState.Ready); + } + } +} diff --git a/src/ElectronNET.API/Runtime/StartupManager.cs b/src/ElectronNET.API/Runtime/StartupManager.cs new file mode 100644 index 00000000..c0e98ab8 --- /dev/null +++ b/src/ElectronNET.API/Runtime/StartupManager.cs @@ -0,0 +1,163 @@ +๏ปฟnamespace ElectronNET.Runtime +{ + using System; + using System.Collections.Immutable; + using System.Globalization; + using System.Linq; + using System.Reflection; + using ElectronNET.Runtime.Controllers; + using ElectronNET.Runtime.Data; + using ElectronNET.Runtime.Helpers; + + internal class StartupManager + { + public void Initialize() + { + try + { + ElectronNetRuntime.BuildInfo = this.GatherBuildInfo(); + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + + this.CollectProcessData(); + this.SetElectronExecutable(); + + + ElectronNetRuntime.StartupMethod = this.DetectAppTypeAndStartup(); + Console.WriteLine((string)("Evaluated StartupMethod: " + ElectronNetRuntime.StartupMethod)); + + if (ElectronNetRuntime.DotnetAppType != DotnetAppType.AspNetCoreApp) + { + ElectronNetRuntime.RuntimeControllerCore = this.CreateRuntimeController(); + } + } + + private RuntimeControllerBase CreateRuntimeController() + { + switch (ElectronNetRuntime.StartupMethod) + { + case StartupMethod.PackagedDotnetFirst: + case StartupMethod.UnpackedDotnetFirst: + return new RuntimeControllerDotNetFirst(); + case StartupMethod.PackagedElectronFirst: + case StartupMethod.UnpackedElectronFirst: + return new RuntimeControllerElectronFirst(); + default: + throw new ArgumentOutOfRangeException(); + } + + return null; + } + + private StartupMethod DetectAppTypeAndStartup() + { + var isLaunchedByDotNet = LaunchOrderDetector.CheckIsLaunchedByDotNet(); + var isUnPackaged = UnpackagedDetector.CheckIsUnpackaged(); + + if (isLaunchedByDotNet) + { + if (isUnPackaged) + { + return StartupMethod.UnpackedDotnetFirst; + } + + return StartupMethod.PackagedDotnetFirst; + } + else + { + if (isUnPackaged) + { + return StartupMethod.UnpackedElectronFirst; + } + + return StartupMethod.PackagedElectronFirst; + } + } + + private void CollectProcessData() + { + var argsList = Environment.GetCommandLineArgs().ToImmutableList(); + + ElectronNetRuntime.ProcessArguments = argsList; + + var portArg = argsList.FirstOrDefault(e => e.Contains(ElectronNetRuntime.ElectronPortArgumentName, StringComparison.OrdinalIgnoreCase)); + + if (portArg != null) + { + var parts = portArg.Split('=', StringSplitOptions.TrimEntries); + if (parts.Length > 1 && int.TryParse(parts[1], NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out var result)) + { + ElectronNetRuntime.ElectronSocketPort = result; + + Console.WriteLine("Use Electron Port: " + result); + } + } + + var pidArg = argsList.FirstOrDefault(e => e.Contains(ElectronNetRuntime.ElectronPidArgumentName, StringComparison.OrdinalIgnoreCase)); + + if (pidArg != null) + { + var parts = pidArg.Split('=', StringSplitOptions.TrimEntries); + if (parts.Length > 1 && int.TryParse(parts[1], NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out var result)) + { + ElectronNetRuntime.ElectronProcessId = result; + + Console.WriteLine("Electron Process ID: " + result); + } + } + } + + private void SetElectronExecutable() + { + string executable = ElectronNetRuntime.BuildInfo.ElectronExecutable; + if (string.IsNullOrEmpty(executable)) + { + throw new Exception("AssemblyMetadataAttribute 'ElectronExecutable' could not be found!"); + } + + if (Environment.OSVersion.Platform == PlatformID.Win32NT) + { + executable += ".exe"; + } + + ElectronNetRuntime.ElectronExecutable = executable; + + } + + private BuildInfo GatherBuildInfo() + { + var buildInfo = new BuildInfo(); + + var attributes = Assembly.GetEntryAssembly()?.GetCustomAttributes().ToList(); + + if (attributes?.Count > 0) + { + buildInfo.ElectronExecutable = attributes.FirstOrDefault(e => e.Key == nameof(buildInfo.ElectronExecutable))?.Value; + buildInfo.ElectronVersion = attributes.FirstOrDefault(e => e.Key == nameof(buildInfo.ElectronVersion))?.Value; + buildInfo.RuntimeIdentifier = attributes.FirstOrDefault(e => e.Key == nameof(buildInfo.RuntimeIdentifier))?.Value; + buildInfo.ElectronSingleInstance = attributes.FirstOrDefault(e => e.Key == nameof(buildInfo.ElectronSingleInstance))?.Value; + buildInfo.Title = attributes.FirstOrDefault(e => e.Key == nameof(buildInfo.Title))?.Value; + buildInfo.Version = attributes.FirstOrDefault(e => e.Key == nameof(buildInfo.Version))?.Value; + buildInfo.BuildConfiguration = attributes.FirstOrDefault(e => e.Key == nameof(buildInfo.BuildConfiguration))?.Value; + var isAspNet = attributes.FirstOrDefault(e => e.Key == "IsAspNet")?.Value; + + if (isAspNet?.Length > 0 && bool.TryParse(isAspNet, out var res) && res) + { + ElectronNetRuntime.DotnetAppType = DotnetAppType.AspNetCoreApp; + } + + var httpPort = attributes.FirstOrDefault(e => e.Key == "AspNetHttpPort")?.Value; + + if (httpPort?.Length > 0 && int.TryParse(httpPort, out var port)) + { + ElectronNetRuntime.AspNetWebPort = port; + } + } + + return buildInfo; + } + } +} From c6c73a7c8a33e46a659ea25804db265815dc13fa Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 13:24:53 +0200 Subject: [PATCH 18/46] ElectronNET.API: Update project file --- src/ElectronNET.API/ElectronNET.API.csproj | 53 ++++++++----------- .../ElectronNET.API.csproj.DotSettings | 3 ++ 2 files changed, 26 insertions(+), 30 deletions(-) create mode 100644 src/ElectronNET.API/ElectronNET.API.csproj.DotSettings diff --git a/src/ElectronNET.API/ElectronNET.API.csproj b/src/ElectronNET.API/ElectronNET.API.csproj index 51fb9b5e..15d76633 100644 --- a/src/ElectronNET.API/ElectronNET.API.csproj +++ b/src/ElectronNET.API/ElectronNET.API.csproj @@ -1,47 +1,40 @@ ๏ปฟ + + + net6.0;net8.0 ..\..\artifacts - ElectronNET.API - Gregor Biswanger, Florian Rappl - - Electron.NET - MIT - https://github.com/ElectronNET/Electron.NET/ - Building cross platform electron based desktop apps with .NET Core and ASP.NET Core. -This package contains the API to access the "native" electron API. - https://github.com/ElectronNET/Electron.NET/ - git - true - electron aspnetcore - Changelog: https://github.com/ElectronNET/Electron.NET/blob/main/Changelog.md - PackageIcon.png - 99.0.0.0 + $(PackageNamePrefix).API + $(PackageId) true + True + snupkg + disable + $(DescriptionFirstPart) This package contains the API to access the "native" electron API. + ElectronNET + 1701;1702;4014;CS4014;CA1416;CS1591 - + - - - - - - - + - + all runtime; build; native; contentfiles; analyzers - - - - - all - + + + + + + + + + \ No newline at end of file diff --git a/src/ElectronNET.API/ElectronNET.API.csproj.DotSettings b/src/ElectronNET.API/ElectronNET.API.csproj.DotSettings new file mode 100644 index 00000000..8d8335c0 --- /dev/null +++ b/src/ElectronNET.API/ElectronNET.API.csproj.DotSettings @@ -0,0 +1,3 @@ +๏ปฟ + Library + True \ No newline at end of file From 3a42c479dd2deb8177f96dabb0eadb321f1ee220 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 13:26:26 +0200 Subject: [PATCH 19/46] Add ElectronNET.AspNet project (ASP.Net specific runtime code) --- .../API/ServiceCollectionExtensions.cs | 33 +++++ .../API/WebHostBuilderExtensions.cs | 103 ++++++++++++++ .../ElectronNET.AspNet.csproj | 44 ++++++ src/ElectronNET.AspNet/PackageIcon.png | Bin 0 -> 39446 bytes .../RuntimeControllerAspNetBase.cs | 132 ++++++++++++++++++ .../RuntimeControllerAspNetDotnetFirst.cs | 58 ++++++++ .../RuntimeControllerAspNetElectronFirst.cs | 56 ++++++++ .../Helpers/ServerReadyStartupFilter.cs | 30 ++++ .../Runtime/Services/AspNetLifetimeAdapter.cs | 27 ++++ 9 files changed, 483 insertions(+) create mode 100644 src/ElectronNET.AspNet/API/ServiceCollectionExtensions.cs create mode 100644 src/ElectronNET.AspNet/API/WebHostBuilderExtensions.cs create mode 100644 src/ElectronNET.AspNet/ElectronNET.AspNet.csproj create mode 100644 src/ElectronNET.AspNet/PackageIcon.png create mode 100644 src/ElectronNET.AspNet/Runtime/Controllers/RuntimeControllerAspNetBase.cs create mode 100644 src/ElectronNET.AspNet/Runtime/Controllers/RuntimeControllerAspNetDotnetFirst.cs create mode 100644 src/ElectronNET.AspNet/Runtime/Controllers/RuntimeControllerAspNetElectronFirst.cs create mode 100644 src/ElectronNET.AspNet/Runtime/Helpers/ServerReadyStartupFilter.cs create mode 100644 src/ElectronNET.AspNet/Runtime/Services/AspNetLifetimeAdapter.cs diff --git a/src/ElectronNET.AspNet/API/ServiceCollectionExtensions.cs b/src/ElectronNET.AspNet/API/ServiceCollectionExtensions.cs new file mode 100644 index 00000000..b12f636e --- /dev/null +++ b/src/ElectronNET.AspNet/API/ServiceCollectionExtensions.cs @@ -0,0 +1,33 @@ +๏ปฟnamespace ElectronNET.API +{ + using Microsoft.Extensions.DependencyInjection; + + /// + /// + /// + public static class ServiceCollectionExtensions + { + /// + /// Adds the Members to the Service Collection + /// + public static IServiceCollection AddElectron(this IServiceCollection services) + => services + // adding in this manner to ensure late binding. + .AddSingleton(_ => IpcMain.Instance) + .AddSingleton(_ => App.Instance) + .AddSingleton(_ => AutoUpdater.Instance) + .AddSingleton(_ => WindowManager.Instance) + .AddSingleton(_ => Menu.Instance) + .AddSingleton(_ => Dialog.Instance) + .AddSingleton(_ => Notification.Instance) + .AddSingleton(_ => Tray.Instance) + .AddSingleton(_ => GlobalShortcut.Instance) + .AddSingleton(_ => Shell.Instance) + .AddSingleton(_ => Screen.Instance) + .AddSingleton(_ => Clipboard.Instance) + .AddSingleton(_ => HostHook.Instance) + .AddSingleton(_ => PowerMonitor.Instance) + .AddSingleton(_ => NativeTheme.Instance) + .AddSingleton(_ => Dock.Instance); + } +} diff --git a/src/ElectronNET.AspNet/API/WebHostBuilderExtensions.cs b/src/ElectronNET.AspNet/API/WebHostBuilderExtensions.cs new file mode 100644 index 00000000..c6078365 --- /dev/null +++ b/src/ElectronNET.AspNet/API/WebHostBuilderExtensions.cs @@ -0,0 +1,103 @@ +๏ปฟnamespace ElectronNET.API +{ + using System; + using System.IO; + using System.Threading.Tasks; + using ElectronNET.AspNet; + using ElectronNET.AspNet.Runtime; + using ElectronNET.Runtime; + using ElectronNET.Runtime.Data; + using ElectronNET.Runtime.Helpers; + using Microsoft.AspNetCore.Hosting; + using Microsoft.Extensions.DependencyInjection; + + /// + /// Provides extension methods for to enable Electron.NET + /// integration in ASP.NET Core applications (including Razor Pages) using the WebHost-based hosting model. + /// + /// + /// Call this extension during web host configuration (for example, inside ConfigureWebHostDefaults in Program.cs) + /// to wire up Electron with any command-line arguments and an optional application-ready callback. + /// + public static class WebHostBuilderExtensions + { + /// + /// Adds Electron.NET support to the current ASP.NET Core web host and registers an application-ready callback. + /// + /// The to extend. + /// The command-line arguments passed to the process. + /// + /// An asynchronous callback invoked when the Electron app is ready. Use this to create windows or perform initialization. + /// + /// + /// The same instance to enable fluent configuration. + /// + /// + /// + /// using Microsoft.AspNetCore.Hosting; + /// using Microsoft.Extensions.Hosting; + /// using ElectronNET.API; + /// + /// public class Program + /// { + /// public static void Main(string[] args) + /// { + /// Host.CreateDefaultBuilder(args) + /// .ConfigureWebHostDefaults(webBuilder => + /// { + /// webBuilder.UseStartup<Startup>(); + /// webBuilder.UseElectron(args, async () => + /// { + /// // Create the main browser window or perform other startup tasks. + /// }); + /// }) + /// .Build() + /// .Run(); + /// } + /// } + /// + /// + public static IWebHostBuilder UseElectron(this IWebHostBuilder builder, string[] args, Func onAppReadyCallback) + { + ElectronNetRuntime.OnAppReadyCallback = onAppReadyCallback; + + var webPort = PortHelper.GetFreePort(ElectronNetRuntime.AspNetWebPort ?? ElectronNetRuntime.DefaultWebPort); + ElectronNetRuntime.AspNetWebPort = webPort; + + // check for the content folder if its exists in base director otherwise no need to include + // It was used before because we are publishing the project which copies everything to bin folder and contentroot wwwroot was folder there. + // now we have implemented the live reload if app is run using /watch then we need to use the default project path. + if (Directory.Exists($"{AppDomain.CurrentDomain.BaseDirectory}\\wwwroot")) + { + builder = builder.UseContentRoot(AppDomain.CurrentDomain.BaseDirectory) + .UseUrls("http://localhost:" + webPort); + } + else + { + builder = builder.UseUrls("http://localhost:" + webPort); + } + + builder = builder.ConfigureServices(services => + { + services.AddTransient(); + services.AddSingleton(); + + switch (ElectronNetRuntime.StartupMethod) + { + case StartupMethod.PackagedElectronFirst: + case StartupMethod.UnpackedElectronFirst: + services.AddSingleton(); + break; + case StartupMethod.PackagedDotnetFirst: + case StartupMethod.UnpackedDotnetFirst: + services.AddSingleton(); + break; + default: + throw new ArgumentOutOfRangeException(); + } + }); + + return builder; + } + } +} \ No newline at end of file diff --git a/src/ElectronNET.AspNet/ElectronNET.AspNet.csproj b/src/ElectronNET.AspNet/ElectronNET.AspNet.csproj new file mode 100644 index 00000000..d3a95fec --- /dev/null +++ b/src/ElectronNET.AspNet/ElectronNET.AspNet.csproj @@ -0,0 +1,44 @@ +๏ปฟ + + + + + net6.0;net8.0 + ..\..\artifacts + $(PackageNamePrefix).AspNet + $(PackageId) + $(DescriptionFirstPart) This package contains the ASP.Net Core integration. + true + True + snupkg + disable + ElectronNET + + + 1701;1702;4014;CS4014;CA1416;CS1591 + + + 1701;1702;4014;CS4014;CA1416;CS1591 + + + 1701;1702;4014;CS4014;CA1416;CS1591 + + + 1701;1702;4014;CS4014;CA1416;CS1591 + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers + + + + + + \ No newline at end of file diff --git a/src/ElectronNET.AspNet/PackageIcon.png b/src/ElectronNET.AspNet/PackageIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..10d55ebe2477afb3d51044c5b642303942e31c1d GIT binary patch literal 39446 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 literal 0 HcmV?d00001 diff --git a/src/ElectronNET.AspNet/Runtime/Controllers/RuntimeControllerAspNetBase.cs b/src/ElectronNET.AspNet/Runtime/Controllers/RuntimeControllerAspNetBase.cs new file mode 100644 index 00000000..65487df8 --- /dev/null +++ b/src/ElectronNET.AspNet/Runtime/Controllers/RuntimeControllerAspNetBase.cs @@ -0,0 +1,132 @@ +๏ปฟnamespace ElectronNET.AspNet.Runtime +{ + using System; + using System.Threading.Tasks; + using ElectronNET.API; + using ElectronNET.Common; + using ElectronNET.Runtime.Controllers; + using ElectronNET.Runtime.Data; + using ElectronNET.Runtime.Services.SocketBridge; + + internal abstract class RuntimeControllerAspNetBase : RuntimeControllerBase + { + private readonly AspNetLifetimeAdapter aspNetLifetimeAdapter; + private SocketBridgeService socketBridge; + + protected RuntimeControllerAspNetBase(AspNetLifetimeAdapter aspNetLifetimeAdapter) + { + this.aspNetLifetimeAdapter = aspNetLifetimeAdapter; + this.aspNetLifetimeAdapter.Ready += this.AspNetLifetimeAdapter_Ready; + this.aspNetLifetimeAdapter.Stopping += this.AspNetLifetimeAdapter_Stopping; + this.aspNetLifetimeAdapter.Stopped += this.AspNetLifetimeAdapter_Stopped; + + ElectronNetRuntime.RuntimeControllerCore = this; + } + + internal override SocketBridgeService SocketBridge => this.socketBridge; + + internal override SocketIoFacade Socket + { + get + { + if (this.State == LifetimeState.Ready) + { + return this.socketBridge.Socket; + } + + throw new Exception("Cannot access socket bridge. Runtime is not in 'Ready' state"); + } + } + + protected void CreateSocketBridge(int port) + { + this.socketBridge = new SocketBridgeService(port); + this.socketBridge.Ready += this.SocketBridge_Ready; + this.socketBridge.Stopped += this.SocketBridge_Stopped; + this.socketBridge.Start(); + } + + protected void HandleReady() + { + if (this.SocketBridge.IsReady() && + this.ElectronProcess.IsReady() && + this.aspNetLifetimeAdapter.IsReady()) + { + this.TransitionState(LifetimeState.Ready); + Task.Run(this.RunReadyCallback); + } + } + + protected void HandleStopped() + { + this.TransitionState(LifetimeState.Stopping); + + if (this.SocketBridge.IsNotStopped()) + { + this.SocketBridge.Stop(); + } + + if (this.ElectronProcess.IsNotStopped()) + { + this.ElectronProcess.Stop(); + } + + if (this.aspNetLifetimeAdapter.IsNotStopped()) + { + this.aspNetLifetimeAdapter.Stop(); + } + + if ((this.SocketBridge.IsNullOrStopped()) && + (this.ElectronProcess.IsNullOrStopped()) && + (this.aspNetLifetimeAdapter.IsNullOrStopped())) + { + this.TransitionState(LifetimeState.Stopped); + } + } + + protected abstract override Task StopCore(); + + private void SocketBridge_Ready(object sender, EventArgs e) + { + this.HandleReady(); + } + + private void AspNetLifetimeAdapter_Ready(object sender, EventArgs e) + { + this.HandleReady(); + } + + private void SocketBridge_Stopped(object sender, EventArgs e) + { + this.HandleStopped(); + } + + private void AspNetLifetimeAdapter_Stopped(object sender, EventArgs e) + { + this.HandleStopped(); + } + + private void AspNetLifetimeAdapter_Stopping(object sender, EventArgs e) + { + } + + private async Task RunReadyCallback() + { + if (ElectronNetRuntime.OnAppReadyCallback == null) + { + Console.WriteLine("Warning: Non OnReadyCallback provided in UseElectron() setup."); + return; + } + + try + { + await ElectronNetRuntime.OnAppReadyCallback().ConfigureAwait(false); + } + catch (Exception ex) + { + Console.WriteLine("Exception while executing OnAppReadyCallback. Stopping...\n" + ex); + this.Stop(); + } + } + } +} diff --git a/src/ElectronNET.AspNet/Runtime/Controllers/RuntimeControllerAspNetDotnetFirst.cs b/src/ElectronNET.AspNet/Runtime/Controllers/RuntimeControllerAspNetDotnetFirst.cs new file mode 100644 index 00000000..4c762915 --- /dev/null +++ b/src/ElectronNET.AspNet/Runtime/Controllers/RuntimeControllerAspNetDotnetFirst.cs @@ -0,0 +1,58 @@ +๏ปฟnamespace ElectronNET.AspNet.Runtime +{ + using System; + using System.Threading.Tasks; + using ElectronNET.Common; + using ElectronNET.Runtime.Data; + using ElectronNET.Runtime.Helpers; + using ElectronNET.Runtime.Services.ElectronProcess; + + internal class RuntimeControllerAspNetDotnetFirst : RuntimeControllerAspNetBase + { + private ElectronProcessBase electronProcess; + private int? port; + + public RuntimeControllerAspNetDotnetFirst(AspNetLifetimeAdapter aspNetLifetimeAdapter) : base(aspNetLifetimeAdapter) + { + } + + internal override ElectronProcessBase ElectronProcess => this.electronProcess; + + protected override Task StartCore() + { + var isUnPacked = ElectronNetRuntime.StartupMethod.IsUnpackaged(); + var electronBinaryName = ElectronNetRuntime.ElectronExecutable; + var args = Environment.CommandLine; + this.port = ElectronNetRuntime.ElectronSocketPort; + + if (!this.port.HasValue) + { + this.port = PortHelper.GetFreePort(ElectronNetRuntime.DefaultSocketPort); + ElectronNetRuntime.ElectronSocketPort = this.port; + } + + this.electronProcess = new ElectronProcessActive(isUnPacked, electronBinaryName, args, this.port.Value); + this.electronProcess.Ready += this.ElectronProcess_Ready; + this.electronProcess.Stopped += this.ElectronProcess_Stopped; + + return this.electronProcess.Start(); + } + + protected override Task StopCore() + { + this.electronProcess.Stop(); + return Task.CompletedTask; + } + + private void ElectronProcess_Ready(object sender, EventArgs e) + { + this.TransitionState(LifetimeState.Started); + this.CreateSocketBridge(this.port!.Value); + } + + private void ElectronProcess_Stopped(object sender, EventArgs e) + { + this.HandleStopped(); + } + } +} diff --git a/src/ElectronNET.AspNet/Runtime/Controllers/RuntimeControllerAspNetElectronFirst.cs b/src/ElectronNET.AspNet/Runtime/Controllers/RuntimeControllerAspNetElectronFirst.cs new file mode 100644 index 00000000..c9eb0697 --- /dev/null +++ b/src/ElectronNET.AspNet/Runtime/Controllers/RuntimeControllerAspNetElectronFirst.cs @@ -0,0 +1,56 @@ +๏ปฟnamespace ElectronNET.AspNet.Runtime +{ + using System; + using System.Threading.Tasks; + using ElectronNET.Runtime.Data; + using ElectronNET.Runtime.Services.ElectronProcess; + + internal class RuntimeControllerAspNetElectronFirst : RuntimeControllerAspNetBase + { + private ElectronProcessBase electronProcess; + private int? port; + + public RuntimeControllerAspNetElectronFirst(AspNetLifetimeAdapter aspNetLifetimeAdapter) : base(aspNetLifetimeAdapter) + { + } + + internal override ElectronProcessBase ElectronProcess => this.electronProcess; + + protected override Task StartCore() + { + this.port = ElectronNetRuntime.ElectronSocketPort; + + if (!this.port.HasValue) + { + throw new Exception("No port has been specified by Electron!"); + } + + if (!ElectronNetRuntime.ElectronProcessId.HasValue) + { + throw new Exception("No electronPID has been specified by Electron!"); + } + + this.CreateSocketBridge(this.port!.Value); + + this.electronProcess = new ElectronProcessPassive(ElectronNetRuntime.ElectronProcessId.Value); + this.electronProcess.Stopped += this.ElectronProcess_Stopped; + + this.electronProcess.Start(); + + Task.Run(() => this.TransitionState(LifetimeState.Started)); + + return Task.CompletedTask; + } + + protected override Task StopCore() + { + this.electronProcess.Stop(); + return Task.CompletedTask; + } + + private void ElectronProcess_Stopped(object sender, EventArgs e) + { + this.HandleStopped(); + } + } +} diff --git a/src/ElectronNET.AspNet/Runtime/Helpers/ServerReadyStartupFilter.cs b/src/ElectronNET.AspNet/Runtime/Helpers/ServerReadyStartupFilter.cs new file mode 100644 index 00000000..115a96f9 --- /dev/null +++ b/src/ElectronNET.AspNet/Runtime/Helpers/ServerReadyStartupFilter.cs @@ -0,0 +1,30 @@ +๏ปฟnamespace ElectronNET.AspNet +{ + using System; + using ElectronNET.AspNet.Runtime; + using ElectronNET.Runtime; + using Microsoft.AspNetCore.Builder; + using Microsoft.AspNetCore.Hosting; + using Microsoft.Extensions.DependencyInjection; + + internal sealed class ServerReadyStartupFilter : IStartupFilter + { + /// + /// Extends the provided and returns an of the same type. + /// + /// The Configure method to extend. + /// A modified . + public Action Configure(Action next) + { + return app => + { + _ = app.ApplicationServices.GetService(); + var runtimeController = app.ApplicationServices.GetService(); + + runtimeController.Start(); + + next(app); + }; + } + } +} diff --git a/src/ElectronNET.AspNet/Runtime/Services/AspNetLifetimeAdapter.cs b/src/ElectronNET.AspNet/Runtime/Services/AspNetLifetimeAdapter.cs new file mode 100644 index 00000000..9c108a01 --- /dev/null +++ b/src/ElectronNET.AspNet/Runtime/Services/AspNetLifetimeAdapter.cs @@ -0,0 +1,27 @@ +๏ปฟnamespace ElectronNET.AspNet.Runtime +{ + using System.Threading.Tasks; + using ElectronNET.Runtime.Data; + using ElectronNET.Runtime.Services; + using Microsoft.Extensions.Hosting; + + internal class AspNetLifetimeAdapter : LifetimeServiceBase + { + private readonly IHostApplicationLifetime lifetimeSercice; + + public AspNetLifetimeAdapter(IHostApplicationLifetime lifetimeSercice) + { + this.lifetimeSercice = lifetimeSercice; + + this.lifetimeSercice.ApplicationStarted.Register(() => this.TransitionState(LifetimeState.Ready)); + this.lifetimeSercice.ApplicationStopping.Register(() => this.TransitionState(LifetimeState.Stopping)); + this.lifetimeSercice.ApplicationStopped.Register(() => this.TransitionState(LifetimeState.Stopped)); + } + + protected override Task StopCore() + { + this.lifetimeSercice.StopApplication(); + return Task.CompletedTask; + } + } +} From bcde1032af9f0e235a83f73436bf7a2f2daa8f40 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 13:27:25 +0200 Subject: [PATCH 20/46] ElectronNET.AspNet: Add WebApplicationBuilderExtensions (new ASP.Net builders) --- .../API/WebApplicationBuilderExtensions.cs | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/ElectronNET.AspNet/API/WebApplicationBuilderExtensions.cs diff --git a/src/ElectronNET.AspNet/API/WebApplicationBuilderExtensions.cs b/src/ElectronNET.AspNet/API/WebApplicationBuilderExtensions.cs new file mode 100644 index 00000000..0283bea1 --- /dev/null +++ b/src/ElectronNET.AspNet/API/WebApplicationBuilderExtensions.cs @@ -0,0 +1,48 @@ +๏ปฟnamespace ElectronNET.API +{ + using System; + using System.Threading.Tasks; + using Microsoft.AspNetCore.Builder; + + /// + /// Provides extension methods for to enable Electron.NET + /// integration in ASP.NET Core applications (including Razor Pages) using the minimal hosting model. + /// + /// + /// Call this extension during host configuration (for example, in Program.cs) to wire up Electron + /// with any command-line arguments and an optional application-ready callback. + /// + public static class WebApplicationBuilderExtensions + { + /// + /// Adds Electron.NET support to the current ASP.NET Core application and registers an application-ready callback. + /// + /// The to extend. + /// The command-line arguments passed to the process, forwarded to Electron. + /// + /// An asynchronous callback invoked when the Electron app is ready. Use this to create windows or perform initialization. + /// + /// + /// The same instance to enable fluent configuration. + /// + /// + /// + /// var builder = WebApplication.CreateBuilder(args) + /// .UseElectron(args, async () => + /// { + /// // Create the main browser window or perform other startup tasks. + /// }); + /// + /// var app = builder.Build(); + /// app.MapRazorPages(); + /// app.Run(); + /// + /// + public static WebApplicationBuilder UseElectron(this WebApplicationBuilder builder, string[] args, Func onAppReadyCallback) + { + builder.WebHost.UseElectron(args, onAppReadyCallback); + + return builder; + } + } +} \ No newline at end of file From 69129a6f022ea5bb5a697e84157d9238122d491f Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 14:08:36 +0200 Subject: [PATCH 21/46] ElectronNET.WebApp: nav.js and demo-btns.js: Increase timeouts These were too short when debugging on WSL --- src/ElectronNET.WebApp/wwwroot/assets/demo-btns.js | 2 +- src/ElectronNET.WebApp/wwwroot/assets/nav.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ElectronNET.WebApp/wwwroot/assets/demo-btns.js b/src/ElectronNET.WebApp/wwwroot/assets/demo-btns.js index 01df8021..221cef73 100644 --- a/src/ElectronNET.WebApp/wwwroot/assets/demo-btns.js +++ b/src/ElectronNET.WebApp/wwwroot/assets/demo-btns.js @@ -10,4 +10,4 @@ setTimeout(() => { parent.classList.toggle('is-open'); }) }) -}, 1000); +}, 3000); diff --git a/src/ElectronNET.WebApp/wwwroot/assets/nav.js b/src/ElectronNET.WebApp/wwwroot/assets/nav.js index 36f26cf2..5981ec80 100644 --- a/src/ElectronNET.WebApp/wwwroot/assets/nav.js +++ b/src/ElectronNET.WebApp/wwwroot/assets/nav.js @@ -77,4 +77,4 @@ function showNav() { setTimeout(() => { activateDefaultSection(); displayAbout(); -}, 350); \ No newline at end of file +}, 1000); \ No newline at end of file From 7fcb2f05bd9fbbae5c9d02412924f6d97aff7336 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 14:12:56 +0200 Subject: [PATCH 22/46] ElectronNET.WebApp: HostHook: Add missing deps, update same like Host code --- .../ElectronHostHook/package-lock.json | 1846 +++++++++++++++-- .../ElectronHostHook/package.json | 10 +- .../ElectronHostHook/tsconfig.json | 18 +- 3 files changed, 1729 insertions(+), 145 deletions(-) diff --git a/src/ElectronNET.WebApp/ElectronHostHook/package-lock.json b/src/ElectronNET.WebApp/ElectronHostHook/package-lock.json index cb7a95eb..8f881fa4 100644 --- a/src/ElectronNET.WebApp/ElectronHostHook/package-lock.json +++ b/src/ElectronNET.WebApp/ElectronHostHook/package-lock.json @@ -9,45 +9,247 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "exceljs": "^1.10.0" + "archiver-utils": "^2.1.0", + "exceljs": "^1.10.0", + "socket.io": "^4.8.1" }, "devDependencies": { - "socket.io": "^4.6.1", - "typescript": "^5.0.2" + "eslint": "^9.37.0", + "typescript": "^5.9.3" } }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", - "dev": true + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.0.tgz", + "integrity": "sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.37.0.tgz", + "integrity": "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.16.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" + }, + "node_modules/@types/cors": { + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/node": { - "version": "18.15.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.5.tgz", - "integrity": "sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==", + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "24.7.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.2.tgz", + "integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==", + "dependencies": { + "undici-types": "~7.14.0" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -56,6 +258,58 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/archiver": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", @@ -120,6 +374,12 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/arguments-extended": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/arguments-extended/-/arguments-extended-0.0.3.tgz", @@ -175,7 +435,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true, "engines": { "node": "^4.5.0 || >= 5.9" } @@ -271,6 +530,15 @@ "node": ">=0.2.0" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/chainsaw": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", @@ -282,6 +550,40 @@ "node": "*" } }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/compress-commons": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", @@ -329,10 +631,9 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "engines": { "node": ">= 0.6" } @@ -346,7 +647,6 @@ "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, "dependencies": { "object-assign": "^4", "vary": "^1" @@ -375,6 +675,20 @@ "node": ">= 6.9.0" } }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/date-extended": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/date-extended/-/date-extended-0.0.6.tgz", @@ -389,7 +703,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -407,6 +720,12 @@ "resolved": "https://registry.npmjs.org/declare.js/-/declare.js-0.0.8.tgz", "integrity": "sha512-O659hy1gcHef7JnwtqdQlrj2c5DAEgtxm8pgFXofW7eUE1L4FjsSLlziovWcrOJAOFlEPaOJshY+0hBWCG/AnA==" }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "node_modules/duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -451,40 +770,216 @@ } }, "node_modules/engine.io": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.1.tgz", - "integrity": "sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==", - "dev": true, + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", + "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", "dependencies": { - "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/engine.io-parser": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", - "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==", - "dev": true, + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "engines": { "node": ">=10.0.0" } }, + "node_modules/engine.io/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/es6-promise": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==" }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.37.0.tgz", + "integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.4.0", + "@eslint/core": "^0.16.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.37.0", + "@eslint/plugin-kit": "^0.4.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/exceljs": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-1.15.0.tgz", @@ -531,9 +1026,74 @@ "string-extended": "0.0.8" }, "engines": { - "node": ">=4.0.0" + "node": ">=4.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" } }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -577,11 +1137,44 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -601,11 +1194,45 @@ } ] }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -628,11 +1255,68 @@ "extended": "~0.0.3" } }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "node_modules/jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", @@ -671,6 +1355,15 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", @@ -709,6 +1402,19 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/lie": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", @@ -722,6 +1428,21 @@ "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==" }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -747,6 +1468,12 @@ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", @@ -756,7 +1483,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -765,7 +1491,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -814,14 +1539,18 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -838,7 +1567,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -861,11 +1589,79 @@ "wrappy": "1" } }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -874,6 +1670,24 @@ "node": ">=0.10.0" } }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -890,6 +1704,15 @@ "node": ">=6.0.0" } }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -903,6 +1726,15 @@ "node": ">= 6" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -948,37 +1780,56 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, - "node_modules/socket.io": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz", - "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/socket.io": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", + "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.4.1", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" + "socket.io-parser": "~4.2.4" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/socket.io-adapter": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", - "dev": true, "dependencies": { "ws": "~8.11.0" } }, "node_modules/socket.io-parser": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.2.tgz", - "integrity": "sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==", - "dev": true, + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" @@ -1006,6 +1857,30 @@ "is-extended": "~0.0.3" } }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", @@ -1040,19 +1915,36 @@ "node": "*" } }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/typescript": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", - "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=12.20" + "node": ">=14.17" } }, + "node_modules/undici-types": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz", + "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==" + }, "node_modules/unzipper": { "version": "0.9.15", "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.9.15.tgz", @@ -1096,6 +1988,15 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -1105,11 +2006,34 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, "engines": { "node": ">= 0.8" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -1119,7 +2043,6 @@ "version": "8.11.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, "engines": { "node": ">=10.0.0" }, @@ -1136,6 +2059,18 @@ } } }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zip-stream": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", @@ -1145,49 +2080,215 @@ "compress-commons": "^2.1.1", "readable-stream": "^3.4.0" }, - "engines": { - "node": ">= 6" + "engines": { + "node": ">= 6" + } + } + }, + "dependencies": { + "@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.4.3" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + } + } + }, + "@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true + }, + "@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "requires": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + } + }, + "@eslint/config-helpers": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.0.tgz", + "integrity": "sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==", + "dev": true, + "requires": { + "@eslint/core": "^0.16.0" + } + }, + "@eslint/core": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.15" + } + }, + "@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@eslint/js": { + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.37.0.tgz", + "integrity": "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==", + "dev": true + }, + "@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true + }, + "@eslint/plugin-kit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", + "dev": true, + "requires": { + "@eslint/core": "^0.16.0", + "levn": "^0.4.1" + } + }, + "@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true + }, + "@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "requires": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "dependencies": { + "@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true + } } - } - }, - "dependencies": { - "@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true }, - "@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true }, + "@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" + }, "@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", - "dev": true, + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", "requires": { "@types/node": "*" } }, - "@types/node": { - "version": "18.15.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.5.tgz", - "integrity": "sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==", + "@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "@types/node": { + "version": "24.7.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.2.tgz", + "integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==", + "requires": { + "undici-types": "~7.14.0" + } + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, "requires": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, + "acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, "archiver": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", @@ -1248,6 +2349,12 @@ } } }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "arguments-extended": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/arguments-extended/-/arguments-extended-0.0.3.tgz", @@ -1288,8 +2395,7 @@ "base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" }, "big-integer": { "version": "1.6.51", @@ -1353,6 +2459,12 @@ "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==" }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, "chainsaw": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", @@ -1361,6 +2473,31 @@ "traverse": ">=0.3.0 <0.4" } }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "compress-commons": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", @@ -1407,10 +2544,9 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==" }, "core-util-is": { "version": "1.0.3", @@ -1421,7 +2557,6 @@ "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, "requires": { "object-assign": "^4", "vary": "^1" @@ -1444,6 +2579,17 @@ "readable-stream": "^3.4.0" } }, + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "date-extended": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/date-extended/-/date-extended-0.0.6.tgz", @@ -1458,7 +2604,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -1468,6 +2613,12 @@ "resolved": "https://registry.npmjs.org/declare.js/-/declare.js-0.0.8.tgz", "integrity": "sha512-O659hy1gcHef7JnwtqdQlrj2c5DAEgtxm8pgFXofW7eUE1L4FjsSLlziovWcrOJAOFlEPaOJshY+0hBWCG/AnA==" }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -1514,34 +2665,145 @@ } }, "engine.io": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.1.tgz", - "integrity": "sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==", - "dev": true, + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", + "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", "requires": { - "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.11.0" + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "dependencies": { + "ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "requires": {} + } } }, "engine.io-parser": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", - "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==", - "dev": true + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==" }, "es6-promise": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==" }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.37.0.tgz", + "integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.4.0", + "@eslint/core": "^0.16.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.37.0", + "@eslint/plugin-kit": "^0.4.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + } + }, + "eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true + }, + "espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "requires": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + } + }, + "esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, "exceljs": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-1.15.0.tgz", @@ -1585,6 +2847,59 @@ "string-extended": "0.0.8" } }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "requires": { + "flat-cache": "^4.0.0" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + } + }, + "flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true + }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -1619,21 +2934,64 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true + }, "graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, + "ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true + }, "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" }, + "import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1656,11 +3014,59 @@ "extended": "~0.0.3" } }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", @@ -1701,6 +3107,15 @@ } } }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, "lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", @@ -1738,6 +3153,16 @@ } } }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, "lie": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", @@ -1751,6 +3176,15 @@ "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==" }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -1776,6 +3210,12 @@ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", @@ -1784,14 +3224,12 @@ "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "requires": { "mime-db": "1.52.0" } @@ -1825,14 +3263,18 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, "normalize-path": { "version": "3.0.0", @@ -1842,8 +3284,7 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-extended": { "version": "0.0.7", @@ -1863,16 +3304,75 @@ "wrappy": "1" } }, + "optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -1886,6 +3386,12 @@ "es6-promise": "^3.0.2" } }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true + }, "readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -1896,6 +3402,12 @@ "util-deprecate": "^1.0.1" } }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -1924,34 +3436,47 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, - "socket.io": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz", - "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==", + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "socket.io": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", "requires": { "accepts": "~1.3.4", "base64id": "~2.0.0", + "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.4.1", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.1" + "socket.io-parser": "~4.2.4" } }, "socket.io-adapter": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", - "dev": true, "requires": { "ws": "~8.11.0" } }, "socket.io-parser": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.2.tgz", - "integrity": "sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==", - "dev": true, + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" @@ -1976,6 +3501,21 @@ "is-extended": "~0.0.3" } }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", @@ -2001,12 +3541,26 @@ "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==" }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, "typescript": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", - "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true }, + "undici-types": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz", + "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==" + }, "unzipper": { "version": "0.9.15", "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.9.15.tgz", @@ -2052,6 +3606,15 @@ } } }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -2060,7 +3623,21 @@ "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true }, "wrappy": { @@ -2072,9 +3649,14 @@ "version": "8.11.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, "requires": {} }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + }, "zip-stream": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", diff --git a/src/ElectronNET.WebApp/ElectronHostHook/package.json b/src/ElectronNET.WebApp/ElectronHostHook/package.json index 756cd2bb..edf07c69 100644 --- a/src/ElectronNET.WebApp/ElectronHostHook/package.json +++ b/src/ElectronNET.WebApp/ElectronHostHook/package.json @@ -13,10 +13,12 @@ "author": "Gregor Biswanger", "license": "MIT", "devDependencies": { - "socket.io": "^4.6.1", - "typescript": "^5.0.2" + "eslint": "^9.37.0", + "typescript": "^5.9.3" }, - "dependencies": { + "dependencies": { + "archiver-utils": "^2.1.0", + "socket.io": "^4.8.1", "exceljs": "^1.10.0" - } + } } diff --git a/src/ElectronNET.WebApp/ElectronHostHook/tsconfig.json b/src/ElectronNET.WebApp/ElectronHostHook/tsconfig.json index 01f4d55f..bffeea26 100644 --- a/src/ElectronNET.WebApp/ElectronHostHook/tsconfig.json +++ b/src/ElectronNET.WebApp/ElectronHostHook/tsconfig.json @@ -1,11 +1,11 @@ { - "compilerOptions": { - "module": "commonjs", - "sourceMap": true, - "skipLibCheck": true, - "target": "es2015" - }, - "exclude": [ - "node_modules" - ] + "compilerOptions": { + "module": "commonjs", + "target": "ES2019", + "sourceMap": true, + "skipLibCheck": true + }, + "exclude": [ + "node_modules" + ] } \ No newline at end of file From f81424978e31df140999353d1ca77725f0ef2231 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 14:13:47 +0200 Subject: [PATCH 23/46] ElectronNET.WebApp: HostHook: Make it compile properly --- .../ElectronHostHook/connector.js | 4 +- .../ElectronHostHook/connector.js.map | 2 +- .../ElectronHostHook/connector.ts | 9 +++-- .../ElectronHostHook/excelCreator.js | 37 +++++++------------ .../ElectronHostHook/excelCreator.js.map | 2 +- .../ElectronHostHook/excelCreator.ts | 5 +-- .../ElectronHostHook/index.js | 15 ++------ .../ElectronHostHook/index.js.map | 2 +- .../ElectronHostHook/index.ts | 7 ++-- 9 files changed, 30 insertions(+), 53 deletions(-) diff --git a/src/ElectronNET.WebApp/ElectronHostHook/connector.js b/src/ElectronNET.WebApp/ElectronHostHook/connector.js index 5e5a0e81..9fba7df7 100644 --- a/src/ElectronNET.WebApp/ElectronHostHook/connector.js +++ b/src/ElectronNET.WebApp/ElectronHostHook/connector.js @@ -2,9 +2,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.Connector = void 0; class Connector { - constructor(socket, - // @ts-ignore - app) { + constructor(socket, app) { this.socket = socket; this.app = app; } diff --git a/src/ElectronNET.WebApp/ElectronHostHook/connector.js.map b/src/ElectronNET.WebApp/ElectronHostHook/connector.js.map index be84b690..0f0b23c6 100644 --- a/src/ElectronNET.WebApp/ElectronHostHook/connector.js.map +++ b/src/ElectronNET.WebApp/ElectronHostHook/connector.js.map @@ -1 +1 @@ -{"version":3,"file":"connector.js","sourceRoot":"","sources":["connector.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAS;IAClB,YAAoB,MAAuB;IACvC,aAAa;IACN,GAAiB;QAFR,WAAM,GAAN,MAAM,CAAiB;QAEhC,QAAG,GAAH,GAAG,CAAc;IAAI,CAAC;IAEjC,EAAE,CAAC,GAAW,EAAE,cAAwB;QACpC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACnC,MAAM,EAAE,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;YAE9B,IAAI;gBACA,cAAc,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;oBAC7B,IAAI,IAAI,EAAE;wBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;qBACjD;gBACL,CAAC,CAAC,CAAC;aACN;YAAC,OAAO,KAAK,EAAE;gBACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,EAAE,EAAE,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;aACtE;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AApBD,8BAoBC"} \ No newline at end of file +{"version":3,"file":"connector.js","sourceRoot":"","sources":["connector.ts"],"names":[],"mappings":";;;AAEA,MAAa,SAAS;IAClB,YAAoB,MAAe,EACxB,GAAQ;QADC,WAAM,GAAN,MAAM,CAAS;QACxB,QAAG,GAAH,GAAG,CAAK;IAAI,CAAC;IAExB,EAAE,CAAC,GAAW,EAAE,cAAwB;QACpC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;YACnC,MAAM,EAAE,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;YAE9B,IAAI,CAAC;gBACD,cAAc,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;oBAC7B,IAAI,IAAI,EAAE,CAAC;wBACP,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;oBAClD,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,EAAE,EAAE,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;YACvE,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAnBD,8BAmBC"} \ No newline at end of file diff --git a/src/ElectronNET.WebApp/ElectronHostHook/connector.ts b/src/ElectronNET.WebApp/ElectronHostHook/connector.ts index aabc182a..7ba9c0b3 100644 --- a/src/ElectronNET.WebApp/ElectronHostHook/connector.ts +++ b/src/ElectronNET.WebApp/ElectronHostHook/connector.ts @@ -1,7 +1,8 @@ -export class Connector { - constructor(private socket: SocketIO.Socket, - // @ts-ignore - public app: Electron.App) { } +import { Socket } from 'socket.io'; + +export class Connector { + constructor(private socket: Socket, + public app: any) { } on(key: string, javaScriptCode: Function): void { this.socket.on(key, (...args: any[]) => { diff --git a/src/ElectronNET.WebApp/ElectronHostHook/excelCreator.js b/src/ElectronNET.WebApp/ElectronHostHook/excelCreator.js index cb0a22b6..6c62363b 100644 --- a/src/ElectronNET.WebApp/ElectronHostHook/excelCreator.js +++ b/src/ElectronNET.WebApp/ElectronHostHook/excelCreator.js @@ -1,31 +1,20 @@ "use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExcelCreator = void 0; -const Excel = require("exceljs"); +const exceljs_1 = require("exceljs"); class ExcelCreator { - create(path) { - return __awaiter(this, void 0, void 0, function* () { - const workbook = new Excel.Workbook(); - const worksheet = workbook.addWorksheet("My Sheet"); - worksheet.columns = [ - { header: "Id", key: "id", width: 10 }, - { header: "Name", key: "name", width: 32 }, - { header: "Birthday", key: "birthday", width: 10, outlineLevel: 1 } - ]; - worksheet.addRow({ id: 1, name: "John Doe", birthday: new Date(1970, 1, 1) }); - worksheet.addRow({ id: 2, name: "Jane Doe", birthday: new Date(1965, 1, 7) }); - yield workbook.xlsx.writeFile(path + "\\sample.xlsx"); - return "Excel file created!"; - }); + async create(path) { + const workbook = new exceljs_1.Workbook(); + const worksheet = workbook.addWorksheet("My Sheet"); + worksheet.columns = [ + { header: "Id", key: "id", width: 10 }, + { header: "Name", key: "name", width: 32 }, + { header: "Birthday", key: "birthday", width: 10, outlineLevel: 1 } + ]; + worksheet.addRow({ id: 1, name: "John Doe", birthday: new Date(1970, 1, 1) }); + worksheet.addRow({ id: 2, name: "Jane Doe", birthday: new Date(1965, 1, 7) }); + await workbook.xlsx.writeFile(path + "\\sample.xlsx"); + return "Excel file created YAY YAY!"; } } exports.ExcelCreator = ExcelCreator; diff --git a/src/ElectronNET.WebApp/ElectronHostHook/excelCreator.js.map b/src/ElectronNET.WebApp/ElectronHostHook/excelCreator.js.map index 813defbd..e60e9828 100644 --- a/src/ElectronNET.WebApp/ElectronHostHook/excelCreator.js.map +++ b/src/ElectronNET.WebApp/ElectronHostHook/excelCreator.js.map @@ -1 +1 @@ -{"version":3,"file":"excelCreator.js","sourceRoot":"","sources":["excelCreator.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iCAAiC;AAGjC,MAAa,YAAY;IACf,MAAM,CAAC,IAAY;;YACrB,MAAM,QAAQ,GAAa,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChD,MAAM,SAAS,GAAc,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAC/D,SAAS,CAAC,OAAO,GAAG;gBAChB,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;gBACtC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC1C,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE;aACtE,CAAC;YACF,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9E,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAE9E,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,eAAe,CAAC,CAAC;YAEtD,OAAO,qBAAqB,CAAC;QACjC,CAAC;KAAA;CACJ;AAhBD,oCAgBC"} \ No newline at end of file +{"version":3,"file":"excelCreator.js","sourceRoot":"","sources":["excelCreator.ts"],"names":[],"mappings":";;;AAAA,qCAA8C;AAE9C,MAAa,YAAY;IACrB,KAAK,CAAC,MAAM,CAAC,IAAY;QACrB,MAAM,QAAQ,GAAa,IAAI,kBAAQ,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAc,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC/D,SAAS,CAAC,OAAO,GAAG;YAChB,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;YACtC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;YAC1C,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE;SACtE,CAAC;QACF,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9E,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAE9E,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,eAAe,CAAC,CAAC;QAEtD,OAAO,6BAA6B,CAAC;IACzC,CAAC;CACJ;AAhBD,oCAgBC"} \ No newline at end of file diff --git a/src/ElectronNET.WebApp/ElectronHostHook/excelCreator.ts b/src/ElectronNET.WebApp/ElectronHostHook/excelCreator.ts index af9798b3..5b332900 100644 --- a/src/ElectronNET.WebApp/ElectronHostHook/excelCreator.ts +++ b/src/ElectronNET.WebApp/ElectronHostHook/excelCreator.ts @@ -1,9 +1,8 @@ -import * as Excel from "exceljs"; import { Workbook, Worksheet } from "exceljs"; export class ExcelCreator { async create(path: string): Promise { - const workbook: Workbook = new Excel.Workbook(); + const workbook: Workbook = new Workbook(); const worksheet: Worksheet = workbook.addWorksheet("My Sheet"); worksheet.columns = [ { header: "Id", key: "id", width: 10 }, @@ -15,6 +14,6 @@ export class ExcelCreator { await workbook.xlsx.writeFile(path + "\\sample.xlsx"); - return "Excel file created!"; + return "Excel file created YAY YAY!"; } } \ No newline at end of file diff --git a/src/ElectronNET.WebApp/ElectronHostHook/index.js b/src/ElectronNET.WebApp/ElectronHostHook/index.js index 5eca5dce..e0e41715 100644 --- a/src/ElectronNET.WebApp/ElectronHostHook/index.js +++ b/src/ElectronNET.WebApp/ElectronHostHook/index.js @@ -1,13 +1,4 @@ "use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; Object.defineProperty(exports, "__esModule", { value: true }); exports.HookService = void 0; const connector_1 = require("./connector"); @@ -19,11 +10,11 @@ class HookService extends connector_1.Connector { } onHostReady() { // execute your own JavaScript Host logic here - this.on("create-excel-file", (path, done) => __awaiter(this, void 0, void 0, function* () { + this.on("create-excel-file", async (path, done) => { const excelCreator = new excelCreator_1.ExcelCreator(); - const result = yield excelCreator.create(path); + const result = await excelCreator.create(path); done(result); - })); + }); } } exports.HookService = HookService; diff --git a/src/ElectronNET.WebApp/ElectronHostHook/index.js.map b/src/ElectronNET.WebApp/ElectronHostHook/index.js.map index 73417858..f5803bb0 100644 --- a/src/ElectronNET.WebApp/ElectronHostHook/index.js.map +++ b/src/ElectronNET.WebApp/ElectronHostHook/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,2CAAwC;AACxC,iDAA8C;AAE9C,MAAa,WAAY,SAAQ,qBAAS;IACtC,YAAY,MAAuB,EAAS,GAAiB;QACzD,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QADqB,QAAG,GAAH,GAAG,CAAc;IAE7D,CAAC;IAED,WAAW;QACP,8CAA8C;QAC9C,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAO,IAAI,EAAE,IAAI,EAAE,EAAE;YAC9C,MAAM,YAAY,GAAiB,IAAI,2BAAY,EAAE,CAAC;YACtD,MAAM,MAAM,GAAW,MAAM,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEvD,IAAI,CAAC,MAAM,CAAC,CAAC;QACjB,CAAC,CAAA,CAAC,CAAC;IACP,CAAC;CACJ;AAdD,kCAcC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAExC,iDAA8C;AAE9C,MAAa,WAAY,SAAQ,qBAAS;IACtC,YAAY,MAAc,EAAS,GAAQ;QACvC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QADY,QAAG,GAAH,GAAG,CAAK;IAE3C,CAAC;IAED,WAAW;QACP,8CAA8C;QAC9C,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAC9C,MAAM,YAAY,GAAiB,IAAI,2BAAY,EAAE,CAAC;YACtD,MAAM,MAAM,GAAW,MAAM,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEvD,IAAI,CAAC,MAAM,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAdD,kCAcC"} \ No newline at end of file diff --git a/src/ElectronNET.WebApp/ElectronHostHook/index.ts b/src/ElectronNET.WebApp/ElectronHostHook/index.ts index 52135f50..9032180e 100644 --- a/src/ElectronNET.WebApp/ElectronHostHook/index.ts +++ b/src/ElectronNET.WebApp/ElectronHostHook/index.ts @@ -1,10 +1,9 @@ -// @ts-ignore -import * as Electron from "electron"; import { Connector } from "./connector"; -import { ExcelCreator } from "./excelCreator"; +import { Socket } from "socket.io"; +import { ExcelCreator } from './excelCreator'; export class HookService extends Connector { - constructor(socket: SocketIO.Socket, public app: Electron.App) { + constructor(socket: Socket, public app: any) { super(socket, app); } From c5d9ba0e43090e7680b76fddb46163ad708bca1c Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 14:14:17 +0200 Subject: [PATCH 24/46] ElectronNET.WebApp: Remove invalid property in appSettings --- src/ElectronNET.WebApp/appsettings.Development.json | 1 - src/ElectronNET.WebApp/appsettings.json | 1 - 2 files changed, 2 deletions(-) diff --git a/src/ElectronNET.WebApp/appsettings.Development.json b/src/ElectronNET.WebApp/appsettings.Development.json index fa8ce71a..0623a3f4 100644 --- a/src/ElectronNET.WebApp/appsettings.Development.json +++ b/src/ElectronNET.WebApp/appsettings.Development.json @@ -1,6 +1,5 @@ ๏ปฟ{ "Logging": { - "IncludeScopes": false, "LogLevel": { "Default": "Debug", "System": "Information", diff --git a/src/ElectronNET.WebApp/appsettings.json b/src/ElectronNET.WebApp/appsettings.json index f94192b0..9147709b 100644 --- a/src/ElectronNET.WebApp/appsettings.json +++ b/src/ElectronNET.WebApp/appsettings.json @@ -1,6 +1,5 @@ ๏ปฟ{ "Logging": { - "IncludeScopes": false, "LogLevel": { "Default": "Warning" } From 667a1b290e260bc1c2d90bfa17624359310b1587 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 14:15:12 +0200 Subject: [PATCH 25/46] ElectronNET.WebApp: Remove manifest file (not needed anymore) --- src/ElectronNET.WebApp/electron.manifest.json | 49 ------------------- 1 file changed, 49 deletions(-) delete mode 100644 src/ElectronNET.WebApp/electron.manifest.json diff --git a/src/ElectronNET.WebApp/electron.manifest.json b/src/ElectronNET.WebApp/electron.manifest.json deleted file mode 100644 index f423bab1..00000000 --- a/src/ElectronNET.WebApp/electron.manifest.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "executable": "ElectronNET.WebApp", - "splashscreen": { - "imageFile": "/wwwroot/assets/img/about@2x.png" - }, - "environment": "Production", - "singleInstance": false, - "build": { - "appId": "com.electronnetapidemos.app", - "productName": "ElectronNET API Demos", - "copyright": "Copyright ยฉ 2019-2024", - "buildVersion": "30.0.3", - "compression": "maximum", - "win": { - "icon": "Assets/electron.ico", - "publish": [ - { - "provider": "github", - "owner": "ElectronNET", - "repo": "electron.net-api-demos", - "token": ">> Insert GH_TOKEN here! <<" - } - ] - }, - "directories": { - "output": "../../../bin/Desktop", - "buildResources": "Assets" - }, - "extraResources": [ - { - "from": "./bin", - "to": "bin", - "filter": [ - "**/*" - ] - } - ], - "files": [ - { - "from": "./ElectronHostHook/node_modules", - "to": "ElectronHostHook/node_modules", - "filter": [ - "**/*" - ] - }, - "**/*" - ] - } -} From 78b59f62c9faac6ee1d0ae46919ecb2ab8a8979b Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 14:15:47 +0200 Subject: [PATCH 26/46] ElectronNET.WebApp: Adjust controllers for API changes --- src/ElectronNET.WebApp/Controllers/CrashHangController.cs | 4 ++-- src/ElectronNET.WebApp/Controllers/DialogsController.cs | 2 +- src/ElectronNET.WebApp/Controllers/WindowsController.cs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ElectronNET.WebApp/Controllers/CrashHangController.cs b/src/ElectronNET.WebApp/Controllers/CrashHangController.cs index 6df56ea8..e298dede 100644 --- a/src/ElectronNET.WebApp/Controllers/CrashHangController.cs +++ b/src/ElectronNET.WebApp/Controllers/CrashHangController.cs @@ -12,7 +12,7 @@ public IActionResult Index() { Electron.IpcMain.On("process-crash", async (args) => { - string viewPath = $"http://localhost:{BridgeSettings.WebPort}/crashhang/processcrash"; + string viewPath = $"http://localhost:{ElectronNetRuntime.AspNetWebPort}/crashhang/processcrash"; var browserWindow = await Electron.WindowManager.CreateWindowAsync(viewPath); browserWindow.WebContents.OnCrashed += async (killed) => @@ -38,7 +38,7 @@ public IActionResult Index() Electron.IpcMain.On("process-hang", async (args) => { - string viewPath = $"http://localhost:{BridgeSettings.WebPort}/crashhang/processhang"; + string viewPath = $"http://localhost:{ElectronNetRuntime.AspNetWebPort}/crashhang/processhang"; var browserWindow = await Electron.WindowManager.CreateWindowAsync(viewPath); browserWindow.OnUnresponsive += async () => diff --git a/src/ElectronNET.WebApp/Controllers/DialogsController.cs b/src/ElectronNET.WebApp/Controllers/DialogsController.cs index 419e8005..6e957c2f 100644 --- a/src/ElectronNET.WebApp/Controllers/DialogsController.cs +++ b/src/ElectronNET.WebApp/Controllers/DialogsController.cs @@ -27,7 +27,7 @@ public IActionResult Index() Electron.IpcMain.On("error-dialog", (args) => { - Electron.Dialog.ShowErrorBox("An Error Message", "Demonstrating an error message."); + Electron.Dialog.ShowErrorBox("An Error Message", "Demonstrating a really great message."); }); Electron.IpcMain.On("information-dialog", async (args) => diff --git a/src/ElectronNET.WebApp/Controllers/WindowsController.cs b/src/ElectronNET.WebApp/Controllers/WindowsController.cs index a528b279..bdf7472c 100644 --- a/src/ElectronNET.WebApp/Controllers/WindowsController.cs +++ b/src/ElectronNET.WebApp/Controllers/WindowsController.cs @@ -11,7 +11,7 @@ public IActionResult Index() { if (HybridSupport.IsElectronActive) { - string viewPath = $"http://localhost:{BridgeSettings.WebPort}/windows/demowindow"; + string viewPath = $"http://localhost:{ElectronNetRuntime.AspNetWebPort}/windows/demowindow"; Electron.IpcMain.On("new-window", async (args) => { From 2a26b46f91b74e7071b2301ab39dcc66e0683106 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 14:16:39 +0200 Subject: [PATCH 27/46] ElectronNET.WebApp: Add builder.json, launchsettings and publish profiles --- .../PublishProfiles/linux-x64.pubxml | 20 ++++++++++ .../Properties/PublishProfiles/win-x64.pubxml | 20 ++++++++++ .../Properties/electron-builder.json | 31 ++++++++++++++++ .../Properties/launchSettings.json | 37 +++++++++---------- 4 files changed, 88 insertions(+), 20 deletions(-) create mode 100644 src/ElectronNET.WebApp/Properties/PublishProfiles/linux-x64.pubxml create mode 100644 src/ElectronNET.WebApp/Properties/PublishProfiles/win-x64.pubxml create mode 100644 src/ElectronNET.WebApp/Properties/electron-builder.json diff --git a/src/ElectronNET.WebApp/Properties/PublishProfiles/linux-x64.pubxml b/src/ElectronNET.WebApp/Properties/PublishProfiles/linux-x64.pubxml new file mode 100644 index 00000000..3c9c8310 --- /dev/null +++ b/src/ElectronNET.WebApp/Properties/PublishProfiles/linux-x64.pubxml @@ -0,0 +1,20 @@ +๏ปฟ + + + + true + false + true + Release + FileSystem + publish\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\ + FileSystem + <_TargetId>Folder + + net8.0 + linux-x64 + 6ea447d9-343f-46b8-b456-66557bddbb9f + true + Any CPU + + \ No newline at end of file diff --git a/src/ElectronNET.WebApp/Properties/PublishProfiles/win-x64.pubxml b/src/ElectronNET.WebApp/Properties/PublishProfiles/win-x64.pubxml new file mode 100644 index 00000000..04d7a390 --- /dev/null +++ b/src/ElectronNET.WebApp/Properties/PublishProfiles/win-x64.pubxml @@ -0,0 +1,20 @@ +๏ปฟ + + + + true + false + true + Release + FileSystem + publish\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\ + FileSystem + <_TargetId>Folder + + net8.0 + win-x64 + 6ea447d9-343f-46b8-b456-66557bddbb9f + true + Any CPU + + \ No newline at end of file diff --git a/src/ElectronNET.WebApp/Properties/electron-builder.json b/src/ElectronNET.WebApp/Properties/electron-builder.json new file mode 100644 index 00000000..e5a106ab --- /dev/null +++ b/src/ElectronNET.WebApp/Properties/electron-builder.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://raw.githubusercontent.com/electron-userland/electron-builder/refs/heads/master/packages/app-builder-lib/scheme.json", + "compression": "maximum", + //"afterPack": "bin/Assets/afterPack.js", + //"beforePack": "bin/Assets/beforePack.js", + "buildNumber": "", + "linux": { + "target": [ + "tar.xz" + //"AppImage", + //"rpm", + //"deb", + //"pacman" + ], + "executableArgs": [ "--no-sandbox" ], + "icon": "bin/Assets/icon.png", + "artifactName": "${name}-${arch}-${version}.${ext}" + }, + "win": { + "target": [ + { + "target": "portable", + "arch": "x64" + } + ], + "icon": "bin/Assets/icon.ico" + }, + "mac": { + "icon": "bin/Assets/icon.icns" + } +} \ No newline at end of file diff --git a/src/ElectronNET.WebApp/Properties/launchSettings.json b/src/ElectronNET.WebApp/Properties/launchSettings.json index 7ea18a5d..2cd3aa83 100644 --- a/src/ElectronNET.WebApp/Properties/launchSettings.json +++ b/src/ElectronNET.WebApp/Properties/launchSettings.json @@ -1,32 +1,29 @@ { - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:50394/", - "sslPort": 0 - } - }, "profiles": { - "Electron.NET App": { - "commandName": "Executable", - "executablePath": "$(SolutionDir)ElectronNET.CLI\\bin\\Debug\\netcoreapp3.1\\dotnet-electronize.exe", - "commandLineArgs": "start", - "workingDirectory": "$(SolutionDir)ElectronNET.WebApp" + "ASP.Net (unpackaged)": { + "commandName": "Project", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "http://localhost:8001/" }, - "IIS Express": { - "commandName": "IISExpress", + "Electron (unpackaged)": { + "commandName": "Executable", + "executablePath": "node", + "commandLineArgs": "node_modules/electron/cli.js main.js -unpackedelectron", + "workingDirectory": "$(TargetDir).electron", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, - "ElectronNET.WebApp": { - "commandName": "Project", - "launchBrowser": true, + "WSL": { + "commandName": "WSL2", + "launchUrl": "http://localhost:8001/", "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" + "ASPNETCORE_ENVIRONMENT": "Development", + "ASPNETCORE_URLS": "http://localhost:8001/" }, - "applicationUrl": "http://localhost:50395/" + "distributionName": "" } } } \ No newline at end of file From ae12eb49ee7ae136e8da69d6d0c34eb49f0a28b6 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 14:17:02 +0200 Subject: [PATCH 28/46] ElectronNET.WebApp: Adjust startup to use new onAppReady callback --- src/ElectronNET.WebApp/Program.cs | 72 ++++++++++++++++++++++++++++- src/ElectronNET.WebApp/Startup.cs | 77 +------------------------------ 2 files changed, 72 insertions(+), 77 deletions(-) diff --git a/src/ElectronNET.WebApp/Program.cs b/src/ElectronNET.WebApp/Program.cs index 6a32e60d..9adf2ea0 100644 --- a/src/ElectronNET.WebApp/Program.cs +++ b/src/ElectronNET.WebApp/Program.cs @@ -5,6 +5,9 @@ namespace ElectronNET.WebApp { + using System.Threading.Tasks; + using ElectronNET.API.Entities; + public class Program { public static void Main(string[] args) @@ -16,8 +19,75 @@ public static IWebHostBuilder CreateWebHostBuilder(string[] args) { return WebHost.CreateDefaultBuilder(args) .ConfigureLogging((hostingContext, logging) => { logging.AddConsole(); }) - .UseElectron(args) + .UseElectron(args, ElectronBootstrap) .UseStartup(); } + + public static async Task ElectronBootstrap() + { + //AddDevelopmentTests(); + + var browserWindow = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions + { + Width = 1152, + Height = 940, + Show = false + }); + + await browserWindow.WebContents.Session.ClearCacheAsync(); + + browserWindow.OnReadyToShow += () => browserWindow.Show(); + } + + private static void AddDevelopmentTests() + { + // NOTE: on mac you will need to allow the app to post notifications when asked. + + _ = Electron.App.On("activate", (obj) => + { + // obj should be a boolean that represents where there are active windows or not. + var hasWindows = (bool)obj; + + Electron.Notification.Show( + new NotificationOptions("Activate", $"activate event has been captured. Active windows = {hasWindows}") + { + Silent = false, + }); + }); + + Electron.Dock.SetMenu(new[] + { + new MenuItem + { + Type = MenuType.normal, + Label = "MenuItem", + Click = () => + { + Electron.Notification.Show(new NotificationOptions( + "Dock MenuItem Click", + "A menu item added to the Dock was selected;")); + }, + }, + new MenuItem + { + Type = MenuType.submenu, + Label = "SubMenu", + Submenu = new[] + { + new MenuItem + { + Type = MenuType.normal, + Label = "Sub MenuItem", + Click = () => + { + Electron.Notification.Show(new NotificationOptions( + "Dock Sub MenuItem Click", + "A menu item added to the Dock was selected;")); + }, + }, + } + } + }); + } } } diff --git a/src/ElectronNET.WebApp/Startup.cs b/src/ElectronNET.WebApp/Startup.cs index f6c0c338..03442a53 100644 --- a/src/ElectronNET.WebApp/Startup.cs +++ b/src/ElectronNET.WebApp/Startup.cs @@ -1,6 +1,4 @@ -๏ปฟusing ElectronNET.API; -using ElectronNET.API.Entities; -using Microsoft.AspNetCore.Builder; +๏ปฟusing Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -40,79 +38,6 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}"); }); - - if (HybridSupport.IsElectronActive) - { - ElectronBootstrap(); - } - } - - public async void ElectronBootstrap() - { - //AddDevelopmentTests(); - - var browserWindow = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions - { - Width = 1152, - Height = 940, - Show = false - }); - - await browserWindow.WebContents.Session.ClearCacheAsync(); - - browserWindow.OnReadyToShow += () => browserWindow.Show(); - browserWindow.SetTitle(Configuration["DemoTitleInSettings"]); - } - - private static void AddDevelopmentTests() - { - // NOTE: on mac you will need to allow the app to post notifications when asked. - - Electron.App.On("activate", (obj) => - { - // obj should be a boolean that represents where there are active windows or not. - var hasWindows = (bool) obj; - - Electron.Notification.Show( - new NotificationOptions("Activate", $"activate event has been captured. Active windows = {hasWindows}") - { - Silent = false, - }); - }); - - Electron.Dock.SetMenu(new[] - { - new MenuItem - { - Type = MenuType.normal, - Label = "MenuItem", - Click = () => - { - Electron.Notification.Show(new NotificationOptions( - "Dock MenuItem Click", - "A menu item added to the Dock was selected;")); - }, - }, - new MenuItem - { - Type = MenuType.submenu, - Label = "SubMenu", - Submenu = new[] - { - new MenuItem - { - Type = MenuType.normal, - Label = "Sub MenuItem", - Click = () => - { - Electron.Notification.Show(new NotificationOptions( - "Dock Sub MenuItem Click", - "A menu item added to the Dock was selected;")); - }, - }, - } - } - }); } } } From 40d6558613e5244e109fb895b37b1def6ccbabf5 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 14:33:36 +0200 Subject: [PATCH 29/46] ElectronNET.WebApp: Update project file with these changes: - Add a ElectronNetDevMode property at the top This allows switching the project between using the nuget packages and consuming the core code directly via project references and direct imports or .props and .targets files - Add the project data which was previously in the manifest file - Add the Microsoft.TypeScript.MSBuild package This overrides the ASP.Net built-in TS support which is currently at version 5.6 only. With this package, we get 5.9.3 everywhere, so everything is consistent now. The only caveat is that it requires exclusion of folders (especially node_modules), so that they don't get attempted to be compiled --- .../ElectronNET.WebApp.csproj | 76 +++++++++++++------ 1 file changed, 54 insertions(+), 22 deletions(-) diff --git a/src/ElectronNET.WebApp/ElectronNET.WebApp.csproj b/src/ElectronNET.WebApp/ElectronNET.WebApp.csproj index 41ea283f..da1ddc2d 100644 --- a/src/ElectronNET.WebApp/ElectronNET.WebApp.csproj +++ b/src/ElectronNET.WebApp/ElectronNET.WebApp.csproj @@ -1,11 +1,54 @@ -๏ปฟ + + + + + False + + + + net8.0 OutOfProcess AspNetCoreModule - win-x64 - 4.2 + + + false + false + False + False + + + 128.png + wwwroot\assets\app-icon\win\app.ico + true + wwwroot\assets\app-icon\win\app.ico + ElectronNET API Demo1 + 1.0.2 + com.electronnet-apisamples.app + Electron.NET Demo Application + Electron.Net + Copyright ยฉ 2025, Electron.NET + Electron;.NET;ASP;NET;Sample;App + 30.4.0 + wwwroot\assets\img\about@2x.png + MIT + False + win-x64 + 26.0 + + + commonjs + true + ElectronHostHook/tsconfig.json + + + + + + + @@ -15,19 +58,6 @@ - - - - all - - - - - - - - - PreserveNewest @@ -37,13 +67,15 @@ - - Never - + + - - PreserveNewest - + + + + + + \ No newline at end of file From 43ce20d60fd8183a535eeac107dbab3e3eb2818f Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 14:25:57 +0200 Subject: [PATCH 30/46] Add ElectronNET.ConsoleApp test project --- .../Assets/electron.ico | Bin 0 -> 279958 bytes .../Assets/electron_32x32.png | Bin 0 -> 1281 bytes .../ElectronNET.ConsoleApp.csproj | 77 ++++++++++++++++++ src/ElectronNET.ConsoleApp/Program.cs | 50 ++++++++++++ .../PublishProfiles/linux-x64.pubxml | 15 ++++ .../PublishProfiles/publish-win-x64.pubxml | 19 +++++ .../Properties/PublishProfiles/win-x64.pubxml | 16 ++++ .../Properties/electron-builder.json | 31 +++++++ .../Properties/launchSettings.json | 30 +++++++ src/ElectronNET.ConsoleApp/app.ico | Bin 0 -> 162091 bytes 10 files changed, 238 insertions(+) create mode 100644 src/ElectronNET.ConsoleApp/Assets/electron.ico create mode 100644 src/ElectronNET.ConsoleApp/Assets/electron_32x32.png create mode 100644 src/ElectronNET.ConsoleApp/ElectronNET.ConsoleApp.csproj create mode 100644 src/ElectronNET.ConsoleApp/Program.cs create mode 100644 src/ElectronNET.ConsoleApp/Properties/PublishProfiles/linux-x64.pubxml create mode 100644 src/ElectronNET.ConsoleApp/Properties/PublishProfiles/publish-win-x64.pubxml create mode 100644 src/ElectronNET.ConsoleApp/Properties/PublishProfiles/win-x64.pubxml create mode 100644 src/ElectronNET.ConsoleApp/Properties/electron-builder.json create mode 100644 src/ElectronNET.ConsoleApp/Properties/launchSettings.json create mode 100644 src/ElectronNET.ConsoleApp/app.ico diff --git a/src/ElectronNET.ConsoleApp/Assets/electron.ico b/src/ElectronNET.ConsoleApp/Assets/electron.ico new file mode 100644 index 0000000000000000000000000000000000000000..3a104492d2e1a089e2e03b0eba36a53c94ccd009 GIT binary patch literal 279958 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 K@juhrH2)8&v+AD! literal 0 HcmV?d00001 diff --git a/src/ElectronNET.ConsoleApp/Assets/electron_32x32.png b/src/ElectronNET.ConsoleApp/Assets/electron_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..125dde6e575ca5da10d077cbd7b6bd394dc0b053 GIT binary patch literal 1281 zcmV+c1^)VpP)ZeIp+)F*ZgeBQs!v zkZqTwUVe<4;O#(8UM@00E-*nZFhFXNplg()M_Fl$$JRYbSt=_#CL}a5HAONuMl3Bo zEG|AJA~G2dAVpSYezL$OBQsokihHfRe6PNHuDyS?!$@0eC@45PMO9yak6(b0cc-&n zevNmiwqAdZEigbSDLHeXuXUueK~G;bJWMt{O*unTMOS8kwZv?dq)=#fbfT^;FF-<3 zVR4?Vc&NB5Ej>+Qa(k}3Asj3uAu%>SPIjfVf3w0-X?Z6lH8eX*ezU+I87Xz7vQ=s@?| zV1ki2Kv00T#e=!UK~P^=c7`GyEntI^Ux1G@IY>-laB!TeAsj7djhtzbpjUH(Cnh!| zAu?QhhkmoYa-OX}Oj{%%FmjUNkyNL{wvm z#M6er&roM~QE7OH!qH)al3sp}hrrKSc7-}cRbqveWQmwZdqc1Q00JdRL_t(|+P#w3 zR}(=P#i#79?g&b-u5EYR9WeqLY$RYTu||o(MKlt7?}CuTF7}St8!BMIg1uMlz4!LV z7+SW~KNogyL{m*KAIiGdG_Y zGwcQP3cW=vK<&X`h_d+$7+$zYHCHSyUb57KFwmA2Bb2{<#mZHy8G#0X_%&o!8PLZ?Q3+jq!2C1kF_wrlsEoZ`KCLV^?kgzejJ0c9$V z5Re`?c*re^ + + + + False + + + + + + net8.0 + exe + + + false + false + False + False + + + 128.png + app.ico + true + app.ico + ElectronNET API Demo1 + 1.0.2 + com.electronnet-apisamples.app + Electron.NET Demo Application + Electron.Net + Copyright ยฉ 2025, Electron.NET + Electron;.NET;ASP;NET;Sample;App + 30.4.0 + + MIT + commonjs + False + linux-x64 + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/ElectronNET.ConsoleApp/Program.cs b/src/ElectronNET.ConsoleApp/Program.cs new file mode 100644 index 00000000..858473cc --- /dev/null +++ b/src/ElectronNET.ConsoleApp/Program.cs @@ -0,0 +1,50 @@ +๏ปฟusing ElectronNET.API; + +namespace ElectronNET.WebApp +{ + using System; + using System.Threading.Tasks; + using ElectronNET.API.Entities; + + public class Program + { + public static async Task Main(string[] args) + { + var runtimeController = ElectronNetRuntime.RuntimeController; + + try + { + await runtimeController.Start(); + + await runtimeController.WaitReadyTask; + + await ElectronBootstrap(); + + await runtimeController.WaitStoppedTask; + } + catch (Exception ex) + { + Console.WriteLine(ex); + await runtimeController.Stop().ConfigureAwait(false); + + await runtimeController.WaitStoppedTask.WaitAsync(TimeSpan.FromSeconds(2)).ConfigureAwait(false); + } + } + + public static async Task ElectronBootstrap() + { + //AddDevelopmentTests(); + + var browserWindow = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions + { + Width = 1152, + Height = 940, + Show = false, + }, "https://github.com/ElectronNET/Electron.NET"); + + await browserWindow.WebContents.Session.ClearCacheAsync(); + + browserWindow.OnReadyToShow += () => browserWindow.Show(); + } + } +} diff --git a/src/ElectronNET.ConsoleApp/Properties/PublishProfiles/linux-x64.pubxml b/src/ElectronNET.ConsoleApp/Properties/PublishProfiles/linux-x64.pubxml new file mode 100644 index 00000000..c92d1b50 --- /dev/null +++ b/src/ElectronNET.ConsoleApp/Properties/PublishProfiles/linux-x64.pubxml @@ -0,0 +1,15 @@ +๏ปฟ + + + + Release + Any CPU + publish\Release\net8.0\linux-x64 + FileSystem + <_TargetId>Folder + net8.0 + linux-x64 + false + false + + \ No newline at end of file diff --git a/src/ElectronNET.ConsoleApp/Properties/PublishProfiles/publish-win-x64.pubxml b/src/ElectronNET.ConsoleApp/Properties/PublishProfiles/publish-win-x64.pubxml new file mode 100644 index 00000000..01940b38 --- /dev/null +++ b/src/ElectronNET.ConsoleApp/Properties/PublishProfiles/publish-win-x64.pubxml @@ -0,0 +1,19 @@ +๏ปฟ + + + + true + false + Release + Any CPU + FileSystem + publish\Release\net8.0\win-x64\ + FileSystem + <_TargetId>Folder + net8.0 + win-x64 + true + + \ No newline at end of file diff --git a/src/ElectronNET.ConsoleApp/Properties/PublishProfiles/win-x64.pubxml b/src/ElectronNET.ConsoleApp/Properties/PublishProfiles/win-x64.pubxml new file mode 100644 index 00000000..fbd20075 --- /dev/null +++ b/src/ElectronNET.ConsoleApp/Properties/PublishProfiles/win-x64.pubxml @@ -0,0 +1,16 @@ +๏ปฟ + + + + Release + Any CPU + publish\Release\net8.0\win-x64 + FileSystem + <_TargetId>Folder + net8.0 + win-x64 + false + false + false + + \ No newline at end of file diff --git a/src/ElectronNET.ConsoleApp/Properties/electron-builder.json b/src/ElectronNET.ConsoleApp/Properties/electron-builder.json new file mode 100644 index 00000000..81304250 --- /dev/null +++ b/src/ElectronNET.ConsoleApp/Properties/electron-builder.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://raw.githubusercontent.com/electron-userland/electron-builder/refs/heads/master/packages/app-builder-lib/scheme.json", + "compression": "maximum", + //"afterPack": "bin/Assets/afterPack.js", + //"beforePack": "bin/Assets/beforePack.js", + "buildNumber": "", + "linux": { + "target": [ + "tar.xz" + //"AppImage", + //"rpm", + //"deb", + //"pacman" + ], + "executableArgs": [ "--no-sandbox" ], + "icon": "bin/Assets/icon.png", + "artifactName": "${name}-${arch}-${version}.${ext}" + }, + "win": { + "target": [ + { + "target": "portable", + "arch": "x64" + } + ], + "icon": "bin/Assets/icon.ico" + }, + "mac": { + "icon": "bin/Assets/icon.icns" + } +} diff --git a/src/ElectronNET.ConsoleApp/Properties/launchSettings.json b/src/ElectronNET.ConsoleApp/Properties/launchSettings.json new file mode 100644 index 00000000..5eed0b9f --- /dev/null +++ b/src/ElectronNET.ConsoleApp/Properties/launchSettings.json @@ -0,0 +1,30 @@ +{ + "profiles": { + "DotNet (unpackaged)": { + "commandName": "Project", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "Electron (unpackaged)": { + "commandName": "Executable", + "executablePath": "node", + "commandLineArgs": "node_modules/electron/cli.js main.js -unpackedelectron", + "workingDirectory": "$(TargetDir).electron", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "WSL": { + "commandName": "WSL2", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "ASPNETCORE_URLS": "http://localhost:8001/" + }, + "distributionName": "" + }, + "Profile 1": { + "commandName": "Project" + } + } +} \ No newline at end of file diff --git a/src/ElectronNET.ConsoleApp/app.ico b/src/ElectronNET.ConsoleApp/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..4127fe84f4f5033f3a0163facdb138b5974df9f3 GIT binary patch literal 162091 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 R>KuT3tga!hR$Ot5{SRO?38Vl3 literal 0 HcmV?d00001 From d0d214cd24b5be89b59089629efce33b95bdc3bb Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 14:28:34 +0200 Subject: [PATCH 31/46] Introduce a common.props file, which provides version and other package metadata ...in a single place. There's some special sauce for myself, but we'll find a better way eventually, so that it can be removed. --- src/common.props | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/common.props diff --git a/src/common.props b/src/common.props new file mode 100644 index 00000000..a4bb3535 --- /dev/null +++ b/src/common.props @@ -0,0 +1,31 @@ + + + 0.0.18.0 + ElectronNET.Core + Gregor Biswanger, Florian Rappl, softworkz + Electron.NET + MIT + https://github.com/ElectronNET/Electron.NET/ + $(PackageProjectUrl) + git + true + electron aspnetcore + Changelog: https://github.com/ElectronNET/Electron.NET/blob/main/Changelog.md + PackageIcon.png + Building cross platform electron based desktop apps with .NET Core and - optionally - ASP.NET Core. + + + 50.0.24.0 + ElectronNET + / + false + + PackageIcon.png + + + $(Version) + $(Version) + $(Version) + + + From 471289813a44f13fa2cb39dd1f84a2ff1b0d7b15 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 14:34:43 +0200 Subject: [PATCH 32/46] Check in version 0.0.18 packages for convenient testing --- artifacts/ElectronNET.Core.0.0.18.nupkg | Bin 0 -> 87622 bytes artifacts/ElectronNET.Core.API.0.0.18.nupkg | Bin 0 -> 376509 bytes artifacts/ElectronNET.Core.API.0.0.18.snupkg | Bin 0 -> 110964 bytes artifacts/ElectronNET.Core.AspNet.0.0.18.nupkg | Bin 0 -> 58530 bytes .../ElectronNET.Core.AspNet.0.0.18.snupkg | Bin 0 -> 27759 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 artifacts/ElectronNET.Core.0.0.18.nupkg create mode 100644 artifacts/ElectronNET.Core.API.0.0.18.nupkg create mode 100644 artifacts/ElectronNET.Core.API.0.0.18.snupkg create mode 100644 artifacts/ElectronNET.Core.AspNet.0.0.18.nupkg create mode 100644 artifacts/ElectronNET.Core.AspNet.0.0.18.snupkg diff --git a/artifacts/ElectronNET.Core.0.0.18.nupkg b/artifacts/ElectronNET.Core.0.0.18.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..3c863a8c0428002f8294ca569b9d72520640a9e1 GIT binary patch literal 87622 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 literal 0 HcmV?d00001 diff --git a/artifacts/ElectronNET.Core.API.0.0.18.nupkg b/artifacts/ElectronNET.Core.API.0.0.18.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..9aa86ab8907a239ec5aa4925e0b33f86fe68f501 GIT binary patch literal 376509 zcmY(qby!s27cVR#Eg&JCf^-N`@ zwRCXf<@tL}NgTF&%ttDJ{sk)2x2&`_B>a7ijic82L)67%zNXh<>GVl#2Ma z0I(xZu;sfueX4w3H=4>0m{UZOpP0nFE&4j5*yyq1Ah$CTeU?KPU=W+yAtzMuPSoxB zmb*beTP{9d=N{UpP8;4%?2@hmsbH0kId}lT!8qvCDTI4p#5aKgs1xp$sX1c1HmF!TXHG3-Z=s2@O- zbFegbcXe`9lhfvradNffk=9V+arAI=wlqJ`8F!p~Me47xMqe)O7WW&CL4!bMih;qJy zQg{n+6ghsgWAS7LN5)|W`V@0*`Glo=>0Z`rVCkD-FzY!V*1(Q`IC>o+l4rd2Vb;lF@(In+Om7c8;kB6AT~nb_=XX` zU%Zh0;OT3KkBVtoTFNmr#4!gZzI^aIxMoUDO-2RaXXNuN?A@neBXi-Tl7 zch;D8Qm2Ns_~R@?lRS>Kghr1oJeH*}UdwOrNmXvckbQ)$u|>H@RWL_89xE`S=Hrx> z9C?DifqMCxnU%5J4>ZOPhq(;i7DO>G*}k(X|4Nf}C$48TCg1q>4WCZWE;bs~vT!T; zGPy~1qu1b@){2%N@z&ca2WE=SFK;b{0K~(gzrr`(J~FrIozKj8Llef(L`~AZorcmk zu^jkt!g`{T^1TN4vP$AnMO2JL=dwY3nj~U!ZP^a{F^TMYPnHCy{jaCJ71RiZ*w0gH zz?R*nZer5XQj2!0FSh3eyjmlZw$`&GwxWuNh(jelPRv`i!1m){x=iNJw73q^EU`a9M`r(0 z+r+enT8uU;pKykd!hPir=b{)B*|T2yU0PEaj!4#>)k;>qQ=4#4fbV2s(vL2HjLG$* z=l;kGVliwiO&y6m@faqD-|zn5lm{e9JU-6}&!|?N%UKUu4J5yz=82g6(;w8QkJQT& zX!Gm~eDr^ry_TvGq`Z#Ya`fTwu)=sm_h9x8wx4(%E!_oqUh)3lJK(SJTR1rEw|aq| zPtRcf8qG{k*3eRXNAxaQMr|h|=#N!ZPzZ)*;>VOw)(}NSp1c$+xt^gTA)UFxU62_iC!KQpFZ)7Y4OS+bJsF zjFZw|mswnuCv`B%r(`B)zG;$a^*t7R--{#jS(xV;Y4KT$3;y7(ejP_YfjjY9Ow}{K zPP@_#9~?IPE=w74p*}~({rp)Xd73+no=LtWk^#nzg)?77t?o`Mo-SRT~Ow8PuwjUpOc)%6M`N+SetH`EiMtcCCOBz zX5FXkXTgv!9kJ6|Hb2XG5!gj0GCrxX&r?haGw>|6!|YbnYb3l)W(rs^8#1Wzj%N#4 zlufM0EsafjclnJ>tR^kvnul@+efMhUOlI`byd6FXCgHxEf18WXrYYkwm%!sT{gO^D zfK`T6>Aq08=`ltfke-8E@pCe2(?^^UBdUmhSbW2vh$w7MZkZ2Nt$4oGz3C&iBE6r| zAc|)9Eo*m-h}f#j=lwtqa6mS3|JPe!?vMlXpasusw7>zzHg=O3(rHXwdvuZNlPi8d ztiF#Cz5|abZqUYG>2178X1&aMoL3yw{Ma*p#YUX}N$H17mHN2Iu$23Rb2s8s&a_oN zEp}xVNhucmXI!kGU3)`Dx0n;i66H6dY+B1tB5X40-;bol1zI)Fom!q9ew!GR z^{o3L$o4#&Igk5_l=bEC@r{O~&E}uHk;|ssJpAzQ{OxN#X0;jO%#XiZCN3)al=R{2 z(V<=CDb|T+aVNWbC38AWFCIWli+~+V4$^8Wh6(h;vG1urrQ%mFQp`Q8b?B>ch}iD! z2;-{Br2q<(IP|@5$W<}@g-@bilvFJ4laz^8pfJQ_nZ9r16Q{_XGRNunmgswp&07D* z6ZPt-D8*8jFj&F%6Y_`C& zoKmxnJ_4Zy170~|fQb>W96>}A2jcb+RC@qAw@2xef(RQ?S@zq0Z!?_Y2F`zo0R~3S ze+VKj6L<|#31UWtSqF?Jf(B+MwL@qc=~?RrK8$V*a#oHzTrnG5niex%LD4e~UeS`H zWUVHwR7l_a#j2$2Eb5WyZ=u>NgNB;RZ#U%Ge%JmCkKVBECu1yA@nj9H77O;KFTbM5 zm%D#2;t-)XSVd?+emN5Tcw3ICk*%EPGkPStk2GV3(N4ZwEXSN{_*%^-Ub@WY0V;hU zj1Q*&$cD>KzUns8^EP5HToTa3xXC%Q$0_+4^gR44xLOymF4L#yqIj8Zb1ES6Z?Hrc zF!?a3sR!MXfBr<>fIJ`f9S=M8vas=n7%y%nd2BhJG_c+w>`TnS;(!RBLt%VyJ4jYH zHA3^2jfP4`>S;Je&?e5#XJU6VI;>Cn@-!AhZhhXF7UI(Ucai*btdx9Tj~iv=-}Y%f zx#7KzS+E>vAbbtJ}VbkOFS`q!8_K;B^WM4PNpajoNe)BHkBOvJL{N| zT^)MikVX^9$p8(z=H9m|I_OKk3*R41io15`HTO{wbn1$kxe5FAMG?PDqXpjsUkMEA zK67WsE;@8x#5LRrB_IX98qys5nB9HLIVW4Q<|-b=jrma;57Rs%Z!)aioAS&ciseP32eVJ@x_W{jJ#zN4p-@3 zmrY}=*UBtS_!33FxrirzK5mkZCr+fIhZ~ppjS;noCPyU={u^4N5JrJ@R()^1ZhI!C zMrzC_F|5(W-hY#RRD7or(pPMd#MVA>cM31o_nZSoYgzSAc@>P zV&TtaMxD6U{D%WqnZ}+V%)iuJXXU9bc&}L6Soid`sc*b;e>cv|3co|AkLTwh z!O|eSx&{9Hddpsud-K+AM)1*4s|*C@?u!j2ixWH3q+!Yaj$h!1~5fG z{lwS7DJO}>P~)#wd*rBwX+HlcE2s^l9&Ikc>r2=#IU=DADe4iHmRJ)kon(nG=`e`4 zms-Q#h<4wL#Mc5ItgMWm)L5sCH75~Y4WG*_+jIDP>(QZ{>G<&{WO417tb@aLf4E`p zJh3qreY1@J+=_gw?{Zw_=i|tA%Y{HeQb)xRVKZFDXoC@yRR_+SWY-PjH=;(VegP^F z8y~)3$r(D-3B|5!&x$*oWxJ!~2lJ9Tt(2>7fqv8*81{IUU*D(-VrKbiEropYbZ^=x zeav@bpN;4JM%R8r*~@LS@6py;n6O&R9Ij5r01%rdF)i#B9P|Zio_GDNU!ny3v)C&- z_4bQGV^ITxNC)fZB_u?glY^jXZqy5-tuidm*9;aZBp7TcaW3lb>BN?-t|u|`@-?;g zRD)^}KP5gZ7+D+;$G$?)u;nzJs1G9@#_VmzKE2ujy}>^Gc4{^-_o&>C;r-Ph=E$!{ zr*Bf-nDk8|C*LdR%OYQ{jej!muIjGhEqnTD2mFU3J(KR$2LjymbOP1u`*#JvK?>V< zJ%;aNeCFZ=41(oyTLWH^!wGTiLTmQ@A{5`BMbu`nl>JyS*FBz5{wk++TQ2sBrRH(r z$2@2s-iNvEFyu>FvXsjdEp?(j7caeIMOQR;4WlqR)PP@;UQs99+w!c|;ziGFdiNJ0iW%P#@#--E zHQwz~^_cntArK_Hvj2oOh<|oS&{dC)da z+(K+P-!nVWNxSoyq>3{6ha}pWorM6|u%_pUmJOl+M_I$iO+*cV>mQ2U$us2h3oqF? ztbb!^@JCsIy61Erq^fC22P=8dmaX7wJ?w=G=_#xR-z3-3z)y*L%xgBDU9#e5OCt93 zP3CuB7Og2?#f3<``(7lzpji4lt+gP%@>BXJF;)LA%}1Fkyv6LyY@JWkDPO)SDKW<3 zMleJ$!A?zKNu~Svan(qY^6L6-0SNB-d?w>uA0L_a7?n}5BXA@GoL32|p(0#gwxK{0 zw)>+0*_|k!zbOr7h*Au8P032NIcP4Hm%w=SwAnb8?Yvi6&TQnPobW-$X0-21*G1N7 z^->A>`WLX8EA!{hH0Ut)6>rQqy>@5JFiz7a=uA^I1pE7J@j$k_;0tdvPuY=fU7`hS zv#HJflp+PDExV`H6r-GLd5zCK>pvQVPFmti+89jCkj&1I(4bUB#-0N;1Nwg9P^VS- zaMFct4Ld*8g)$QYW%~72OMzx5e&S>=5t^{2y^GZ5`|r&GwDGGOlES^Q5kB;Sd#=ow z>(_$(Jnu`EpmbC{`aanjgT5>3n^X=_!wTc1BF>J?NS{eA6rJ6DP}hxyS%9z*v%(gS zmE{LkbW^9+MQ0x_p#p5iq7$a7k7WJP&6l;VvX%rzV{GNdtm<~CvhcSi)sJ`lPkX#7jc1+T>Iok64uEtE_9y>xKw*kHV7fXL zr1CgA2B#jX&Q0{#<0F z2UOa)Qs%^CyEnZW3&J!c#88W%inR%(am98KE=L+GAw|93O`cO$AVJbd(VWTmBgKtL zD9VbBH=QXojjxW#sz@H4YNRu$I4#Kdr#LKSyu)!oPm6Lrn*p=NaJkAsWOS*uxm@QX zu1u->{NBGfa6kE^B^zI{qgqup6T}c|AX}+eks|YTiie_j5j};8SY=sRmCkX}Qfb-Q zMfr(!kP2I5LAmSkWD$JOj!5Vz+~x6NkasV}j*adK8r!d@yWyX%G;GaYyrZIV zlCKv~?GYec;}JRo9AFS&xpMOAA+wK&S6il=mpFEM=|3O)Fsh~O3*g$Jh}%`oo(LapavdxAf{5d4WOme32y)EAI4lTupDD@KS zkpEt8z%FM7(T9T>k6zYd#<4*;zfVp3!bwu<<(%K4vZuq>CYm} z?BI6Gu#txV?aSu1%|{gh{qc=;=a_dWbi&N3Bz!j#a?m8bO9L7TTDFH-4w zhek)fgav)>QPdwIOXdF3V?gn>Ov!({Jz0+8N=;@e!iu_axs^HHUunBNWuIRT%Wjm9 zpKD-@O!$MphuAmI@1t+iv9$vkkV=-p4o^O5y980|I2lH>_{&QC6#DI+l+cAzjnnOX zRK!#VKr>H>GnLs>Hc+O?kPTzcXvNO3khF}IwH+ebbRmt+ETFnN@+0~hdXzO*Acdco zjrJPNw<9Fma>roRP+N8I+Sqq_dlGd>T4zny-I}J>z3sMfhr-+0Hl zrPr~&57~GDZ#E%#o}3hEbg3G|U(M0)8_N=p=}G^9OH^D0BA`6FzT? z)7pxQ6R%5X8KN-Z+gg2mTKL22o2!QZRuWxeMNVdyPhkG` znRfhoMw(qH-7=lAFaZyj#yTk)qBD*wZh68BBaNKW{$jwQKw6ShD2pyXbL=1@T|?KJJd7*|nqPW<)~*Ur`AGb{Hd>c- zrIN$4>*d98Ka^2_I-xd)UZ;(iw3Vw>8pUd754^2FYUk{e6RI$gJ~i33|wUS2h%f&mfW$d6FaRPnI~^OeN-uwKFp zDN7O})&t~&(ykm|&V06P;Pxem08 zlH0TyTeGjRJkkb0wT8`IZH@^N1y5HL-L^5}X`kM`oIQUQcm2J~aBU3IKjc76(hvIc zR+6Q~=P40=a%4P98{hxZ%CjtUYfDiQ#>NQ=Y zr_uoo0zkuK#{w@oNdN|h(6w%OUERe*+4-t{dMenK@-n?>Q#og}2ma>`lps0+`t~SSKJ<|A(q|J2Y*+fiL>8@ckgMw7vq2J${buN4C(@ z^e?Gk&$*$g)ZL*NOVJNTMOUCVP*&=)5eV!YQ_@M=yNb&3N#Q9*NWuD=jI4-ODjD^5 zK~JwFVpdpzoVuRUJikOxFkRCjb3GQH{?xX59Pd&LHthF#;DTli{5{Ug2^tmiSMB%f zWeN~_K&?9{c4(wq504x0vK!9D3y|FNzeq3KwAYn~TG?JsY~!_uq^8%VR}{|mpL;{o z*CL}sKmTxT9SXo)W$QCSaUSvAhxiQ%b*%lleth3$~c&}Oj|UKm!pCD#izKZ`lIqx7gIh?Q{U@$4qn<>`H=@+cs``oXf)^Kqx7*O zesiIj@dx0=&#dCfE#%t(t;+LElMC7%c>Fb%d37%YSp`PM*pO=MJM6psskL29+oD*G z{d}cCI4E8<16iQ4{oV;a>3?P(iQ_ow- z+c~Gr(>&`x5yrOg^6FbwsA*%K%SqZFRXp2v{z+eY7vc^I5j{(c)0(OtEkhTkd@4FG z?C!usd!88QrwD6h{^Lm69Q&Cr?p=eeFy&)@La#nhgoWgL{)XhC@cu&u#Xq5JSB%8K zyq$3O%%>Q0mIQO^3H#QHX9P*N%>4oHT~6NYdeeA_ON-9u#<99*(%_4p(1?;H#wjbp zgn z)iP&xNv+uyV8%Inr8Ci<{^tee&-e6IMF%utcC@UpptxlM+O~u^gc1x~ur5S=qU1256i|1wGPA{}Zf}0=CB8G@x|6QfY?V|= zSztlM@m=k`Xl~MOY7&oYIVs1h_})YR*olkiso7b(n;+wjMl_Ic+SI$%ANL9hehYDb zSQP^)cZDDxrwz69MxHeW68;U|QCQn&K1!{kS2aYYdIZNO&u2Y&<~-=;Qu6qJ zGNY{WeYTT)Ovc0;U$wcwCU6)~oF}J73E!3ZQA$>HIQ9{pu1flPq?qJeUX=lRvI(cJ z`>*IMJXj1&lyu3Hrg1DEZkII3jK5)V8LS``6Q(DL&=HB{=*&pJlT$3>CVII5g%|N} z6A`w1!)ytc{zF^fm;DZ^{6>jY#H2GxpFI@JxVhKTsddD!WqsM#BOV(FRmWJur^y^*UBXlJdd}YZ zC}o7TuvKFh6iq@$aOB2e0-fTc*`m@h1V{x*6a}!jwYsIeu6IkhJSF^8d6MB*Su>qo zcC(dU)`#kATG{4zPf?SBc;5E~Y--@~PWkVx;${-XZ!jGe-g>N(R~;DnezcL2 zVEcnF$@Yg^f{l5b6vujblJST|VL4E9Ifwm7{o6UtfA*rvw3 zyz2xxV?k5jT{iMbjkQmI(?ed-!9|xc>pYqX@NZ{!E8&%s0z-9bUb&uGjzkrc!^f4A zmp{)9iZk*}iZha3vK-?)v()~+tQX%vXD(0bl^Tjq9$s5K<0tjsF4B>kg9@#q*#pK0 zSJ#U%$RoEej<+U%xi4)&9{s25NK6w@R#rwNxX=)qN(9*UyFAg%>4h8YoL@RZ^GI2@ zlM$ir|HlRTNCgbqgR zhQ#FtAS1z-fB$mb4F>^1!=n@cRQ+*Es#BtsQ^9;SyOz~aXbkMGX`qR)h5<-l@IYN( z?uTmco=KPP&0+@Jq3h5XH!gAu7~yl_VwUSVKzdz;HZ z+uKLbtF3K7@Fv11w*B|x@YQvXFej&tH^16#h1ry-(6$@+`m*~?N1qf+$OW8{8lLSd z_~Fu?sZ7n8lZhU%yU%~vs8LXL$>m>haES8~oKeO%pIUT;?iI4fQhs$^DO`}{CtX=U z?Lqy6x6d>hX(5iI=c7xDKTB7qIm8p&r6}4-XyOOaa=(Qf=mR%+Y)F~-8+_jMMPg1R z+|%|;CqxX}^93yH4&CNB2DGb9;kl_OTTSS4vTdE^lI8!`jcccsEWOHB!RMq>R4Ktam-SZv9w}61E=w*-^Z5bbAe%_Xg^Ded6&wm%WXp=lg}P z;vn2}4f*0fM{diH+;-cK+%ogXgxMV>;s4DUSt5zwU+i%wJ4wyB&KdQ31f$C-v`OaC*v1-*f;A-ZKNqoCb`buO^74WF zXY@S}d&+4a27gZrcunZ1%Ktc#THJs%tBt?p3d93VEdU=09IxA_#DQH@`HxSNQo(7F;FtexjNkPS z8YIPlxW`WlA8@d@r2-g%E)6Tzkv%b>)}l?M$C`b~zaW5n`lS916F~W25MY?vn>Icb z4;B!G4y0SH*{7v~8zR7#{}ZY*2(Nh%I{BYaWX&5W%frE<3;R3RTDEB~bnNl{pHP#B zDINwN$ba#|$s1_)$)N9-3e==360O%Rl$Mw=Mc-=#cs5}TC?S@nR4}knldsTVpjLkm) z1Y^OfP>@Ofy1lhLG+_GVl=`@S=AWW7c9(`3iQxKwp;d)4J)+_Fx_y2eIGFok`RTa< zfy4mhuYX3Bl?wKFFskBz_&>J=RXiA#AuYhkas%na4d{Fet^6B*JwWw5+B=|?}I;SkC;`|@)sUdXc;nZ&Z2diGu@o5b&0FJ!iaQGex{+SA< zIQA&~p8=F?A_pD}pyZzdI=k!O)Bq50;=s#cxK9s~3Z_{@a{LFtnONn-p_g%rOWQh! z5Wr*WVP|3!FNs=VJm;|J^WOe*17; zSZiB#g<`{Tz56Aw)W9Uo=SvmE9D+FT56>5NN^pI%KjBQ&1bguz3&!7{!8%@Y+PZ1< zhs|WE{H~>#Trr5T-7|>sUGXA88pKcne;dT?He2%@mVO8*z%5`#qG~BRCxmGK3_I`H z+wCsMTv_e?skb$1fEMxi4|TG8Y}F(UOEp?}O=k_AxL{s*LndKXsqsz_Ir`D@OMQLA zhWKHSa2C#$mB=Zr)h@Mh)K!wGKe_do*SFNkmc1d%mws)B77o{Qrq>R|2gBS8>*4ta z+j|c5KHf_ZA^3cNOIB04#loIiFC+&YQk)5CsB#F*aR5)vEf170oRRS?&~F!ascfU` zdR9W@meUMpp$4W1AGPcET-T}JZ4fkB{!W%v;BHFhy)BCjyA|A!g1q!=f&aMr;9DW~2KsvyNWBCSt$z`nE zBH<8j=?<-oc|Wknlb>2?y*dk9wY-mwPe2B)tvmd7$)1GideWrk#*^=W7Lz+*x;*sf z$N9aHLoVNz9SJqoAB88dV7)8=t~+0eS#F#+t(=24z0iNR)Nh`*Ke;j~MEPmvIkri^ zugQfUiQNg^K-UAijz}+B+jqUF2aiVkj_k4!CIiT`me`pi%FX*&gsJt*S%dYu+6v3< zE!R2}y{H(WMOAIZj9Tq&p#8Rw>Gr$gtisf+_4)iPayyvK0TNO>WyyN}8c-)S6<|d$ z+t4>RO5->OFF>F7N*saW(C$HwoPkn}m0h{>Lgf1`v$i?5bLUUzydp=S`mpAM*Y#%} zN8UfrvIx((J?G&gHBPz;bw^rR{_z%7;H()adbk5ZyviwZ63Ra)SxYkCplyxt$=ZW} zRqPSKEP`n$UOUuM?V32%ACTyuw!4pw*#GF;OdK#r?X;1re3u^QFm)iCB#1Z3hu1 zZHbr&{Mh1VMVJ0xK`2_cH4vIJbYQN*y-FCo6O{>`aev!-Oq&GdtUoZr z^v^Qc9N>djT<3N#zNLO}Ywnb^uq#*@g}SU6X_A zl|&nafavw1M2+Khv)w}95%OWbaUN(|^YcWGOYo<5lgAZ!s2mF<>p(0ummt3zgviFJ zM9R-uP$mbTNPBDl@Y)cBsMr~=Ikob`j$MS3XjI7B4XX`x5-)8_7NCN5OhQdwom^6~ zqoTJf*n3lxQXvr0iTl-uRk8y5*>p|8W@>To%Wg=*>z$Ys`j;j}UecCbCEe6ha- z*Y#PVzmfZy2l7LMzeL^H@S)q!Gj6nNN7s4yWX;jBqzyv%fXW=ve1I&eKiY?e3mVUP zM(hSk_Whw5v}%)ywA^xFclNAZE2j`fTDl14(z|*_LvjxEgsd4}&I$Xg)II&PRQX2$ z&A;^kzORI!74>huhF1_4FlQ7En_bgWZJ%Ekhv&3Iio%9tOOaoEx2e>ZH{@OhqA49k zFJ7eHzgWErS&(~&dKnab@TPU@IwNkd=WtMYDNT7X?cqAOn3mSWo7Tds*T}2a%**Qq zsB{HXdIBn40F@qqN;kmARjBb1^w)&yiq6N!3Z<-86Z%Ulscx~?uKE6vs38cyCvPoG zYtI}fRA#ILB19}gqq-0)Myg6n;-~hjtK%c-B zpkRWBX652z1WIO`KukA;HeU3A!U0U1NE^SqKU-XHUNsXp+dkxJOyGGlX$yNc7^j9l z9tW#;>kbwb3%eor9IK@&Ymf8$N*f+bd&?!3noN7Xx9{!o14&Yp$kCVTFv9ZNI_926 zA7&jh7dCC$<*&wbWhD5O@E!FbeD0Nf0xax~hw8%qCpDHWG;BZ!FtgBn6rTVj+;c!m>g%Z`2pM!@F84^>m@0@+>Ilt?1&uhJCQI0NWQTv1;O@u{_VmG* z_k$q!=Su3aPFRepC2q>lurkluN6i|!H0e`Pno{M5{Jwcx2l=Af{Z5~`9PS&36k2QXUSPLk%3-^T%ofIxd6=%A8yar?D&jl>|WNbyN}lYSCb$QLEt^p3ts9# z$-hV7CIeTlH zfTg{1z^Ke^vyNVyV?`|@4p(H2l$s$G;06h_zVwILl`q*4emT;AsDQxsJb(zvsc{hs zorZ_x1>BMk=OGtf+eo>IuxB*_qZuKb&zRP49cZoRLh3@zsFv? zXHSak&Y$?|G(x}od(96VnJk+GC37s6wK{Xd*ssM~9;F5f1qULM0}mKOc$w~X69NbO z+bnkwmKzB69eU$$wCHh&VndBwb~zm-hU`Ic)MX3*$Tmhri_CAwp4P2YX-77SHcA(f zh~Fy>3;{Y+0i0{x?>^oLc9YniI4OXNS9^}$f;0@T#E1g<@Z0c?Z{FNEb~~wcH86h6 z3PZ^3PVP669~ar~9?5`QsRE?dmL`8=JqwK99F#s2q_c4Pkbme$(WroS&i_O0XK<+4 z`Ek~@_QW-1BLI!?)$gFkbQUYp7~5lhwr{KFTDZqB6K!P>d>JpN725E-V3tolXU$h9y$LT_PU&YxGwwP z=X|io&)T~3XVcl8`fPJOj-)ewR9{Y~*xnG>VS0|**j2ODZru|~`yJQ1RRo4k-`*Jq zqYeU*z0v;RyITv?#+)}s+~LjdAG%E41Skh}OTYFzLXsQs-Go+4H-oh_{FPXFof`RZ zHk7ugTE>}7OY;IIo@|Nz&V2YZh;@fw$DOwUPawG-Tbv1uH37bIM9si;DJa6Df{)SJp z^tX$*hHJ~v$gG(UbbeU4c|YQ<+s{eQEl)+VRoEG{G^o2-P^LvSqxP`icrzMtWK8Jx z#M+91HO<$zG~#8^q1J?-XfD**lHV@g9sDq2BXcZ<-s@6fEz8RUWw>BF+V*XAc$1p4T3 z4v*m12Qnqmr_O}?9B4)nsRy+Nmb9J@TP(#|AjvpEAA0#lz|v0Du%psGw8UeLj7>_S z#B5xjMKs?#U0=r+5=KA_i8v*v#NTQfQ9bSQ)#e53om4c#6BcXLh>4(Q>W`gL(0_zz z6MV+3c75jjvhx%dB_r`Mg}v5QhWex{DQSc4nUwyrV;}_pKT&T}q-j;e6-1Jd_zjzs z<+0pXmAFZ8TSEMJ1F{(!O3n)s2m#_WLOPB-4b@QR-Q6>{XOvh){EJP%N>wali$ByMgN+? zNY_!<2jghv{bBlizNvDXp;SCeJnZFMZ{mitxGk}AT$O#bqPu&a?LIH7!?`CZUfSLL zW*&E1{v{5RbrW+|&W7aAPrED6CTI0xOgKs}zpzyA6AB;#i2RmGR{m@@7cYZ%&Tq3j z1-*)Ehy58VhL?67+y;LPFO}H4dCkmiHE#v+?rjC3do1@yNf=A zyIg*h+@Tizi8DV>jaPpW@vDbxF0%P%Dp^3I>haAQe9m^6+F6`Azdt)+k(=5 zSzuiUHkxOn*^kNBooG`KxPRqAeb|haDCc6)ZT8V$-Ht!>n#fl1yHo7h#tUg12H1^y z0RD`4B)=L4E=cO9SFyGvVD)|<6~5M>2!1PBU!ESd={7%Pus4bNY1r{~G!;ZMr^WeL;3p=*5&kYFYvdP9_LOcDF71|$RUaokZ^U%IQ z9X(02{`BXiL=s3N@}F`9%nAe+K{lT>SkLyK>YAq*P?wtK<1>@Qb4t3PeU{|aG5SeZIhO-Z00wo-c01Y2GqxsFa6P zhG#XOv6;Nu|1*A?_yJBA&+{-{cSYIQ%xOdgX9)VlRh|`jx0kC!(0ax~Wm@im-L6B6 zr#?_`1ZUQ>exlw4mbGHr;@LP~`QfMFJDn17!Liv9Q{6QvEZ1}u-Y+$f6DW{(_`Iy|{JSW^N%`DACjO{6`RK^Uzij}1eqIM{OB?@7{$rFHKG*9%ul0Zi zCLdnw(<4S-AQ0zQcctK?BYXcqsfU^E|C{+vI{m1JY5d&H9qL8(ee3!OJ%Tmqh~C?u z{`JJ@Ibj_%Fk$>JDc+nMI{Mhbw?Vf}ane=yA9W>;VLadIP4L^JkSS&S9WMSPz^IXK zGXUm)S$XZ+aD5_izIlB(NVq?E*m?6bAU1#t^lW%J2Q_4JRy1s~75gWn#W-&Pv&G(` zs7ZMsy+t@@wXEQx>a?Nqga7<%5ct#Fkq1mAGrMO&*-}cE{Pi;EIpsrs`HC$T?DUW{ zFJCVk{;2{Qo<8xAJU&hQmjwKqn9h&+o1gwK!40zosZwpi;Dz%S4+&xrH$bNw4*Q!5 zEQZ52sUXd6FYi^80F}uA*C_jrwGX2qas_(^ zV5x#5+A;WY$&rXMg0lDrlt9$q+G657Q#ogkiqUy3C6Cp^aW69t!G3UUPCy_P*`du@@8gV)GBp=yRs-`-pVt%v+oHBzj%+z`E-<$o zvD@rx&@x9O;Kxd7wwL(%9D60@R+e)qYRNr~Qhqv3H?q?_XH<;-dU4lxKlv(Tu(0AN zxFRbH0^PAj;?WraoM-2IMs+1Dzs~U=$~Cw+EL@u!=@kQcujkH^EEldmbU@N*ARd!* zXF9Zy){VLY%T^$L5KuuF=r=tI(cAxm8aG|wBv@!hIv5GeBOrR2kk--$AmOZM!6XEJ z>)xF?Y6Y zi)A9T?3{j8G^icGdi9kL`h1yv7!`2eYMyyCJliDBYYbDrclsPJ)~dFuacBP$<`=x4 zzZQ4&ymb?H%oDx7poSIaB_e!Sft0aRKi{N?T-szNn_9z)TRgrbnuWtevb|xW&<5`7 zt8BEh)`KcAcm(QUeF58EP+M4Dt&UiL#CJdfTwpDHEe{U>uQ{NtJ1_|c-g-b%vUZ&o zTGSTa79ve3Y7R)MfNvL%d4{e7Ag$JOg6k?(2NK~xbPveE&o0P$CM5VhyoHz4?YbQz zt+sG>F?SYhnZZZqaNTaUV44NYht1Hs(F-3etk=Z*9pRh5K3mRo2W%C*(?6IiUO9he z?FWI69uac48D(Jv1n&Iy`&lWG;XfnYU`;Q|K8v&)odqw94D7&};tK9Qw=4s`9PxuN zX=o~hzoF59ESj3{xoF~bcLq+sxp)XzCvqetW%hSzo|!K-hH~a$gM{=!1Q7fWkSu(N zzr!5Fnr7ZJW(4B6jx1=u#E4LQ9-)%m6-GBSbWFWHl(-!WSow9#x&7-HS?9B^H{!Fd z`%NgIFheLHW%Ya5g|4_`eaw7!OATS^^Ixai#vPhCZQ&lI72KrX8jQf`rnFx?QTAhj zNgwXXQ|}x}H17KyZ`++c>wbx}4OQ^TG84zORC;yClsbt^G)8FqCoVfa7D5C8i-pgL z+v;-G85Y#0T~L{+8N4RcQ8%B)$VnE}Q_y*93lE*7&z*}8)w!1flMabQm;70MB_Elp zwS#rZ!Y3u-wf*;MB5#)oo7FX%t%DCoxt3~K@(xKnnvc?dqNq<;lCvX`@Hay46+ZqM zkga;_JVZJiYbG5o>-|(WHju^25Y?>SvgILF;WKw-1TT>U4kN{kTdrnWw^C&6^$-*D z)67fhX+i+G-iLzbS@E%sXn#CdLKLc&{xuRDUia`p2K4N2>%l`GK>#=4`t?aY;9p7g zXyU?fZ4e$V3WZp2AT_xG@k9W`|2hu54584$KKKLq+k)u-(6(?61szNS{RDC{Bf+e7 zpaTXd^uLPM_PG}nei-ea;{w?C%UvL!d?-PlK9rPLRnOLuOtgUL*C(fSsbK2}F#W%} z+TSXl)I(kNf&4AO5)>StHu3`KA9^bv+B`??FXxp&wEwHCp&LR89yo(i!F8aU-t#uu ztoW?^{pGEyGZ854crSkBcu(DSeVRUNeVW|#*HymbuPbxf|Btb^4vOQ6+D5|?+}$O( zJHg$8ySsaEcL?rIaF^ijEWzD^>k>4$>#|&a@B7`V`~7#TrfPbpXQsE$w48IEK2Ps0 zu}I_SM9pTW*56&sqOnC}?Rh^QHNf}1s$+fxoMg*f)n?*i_&-(<5aWu*2%0L5cm;t5 zo-feG1V3>c@maLd{4AqtMj3aI=g=>jTBdSCoNzc#M!2MXhv%p!=GaJ{`aI4=X-b1= zFEdbH+~C>9mb4@>@q%Cx?=tqn64%s+R+9Ag;nB*%=0FMWhe0s)gTQc<3s_hr3$0lw z=bl9u3F%tQx?`sww82@tAveuK_()n6*1Y^{f}k|1q3RA(RU?es zDKy2XXt9rHM>oa%v3vtGrJ(9QQ&nS(Gmz{0&@mQR77H#%K;J zvhd^1sOWej*`JB1%5Azf@Gjo2RQmlz#}MHovd+iZMneb=6^T52F-4NuS**OP)g8GL zSbGO|{PT3qP59qW8DAE1p<7vHoD;r+yD4d*BYodRIubqPrHkJ@;qPIN6Dtcxu9Wj_ zQiCg|sbl`?<^H`n4mej+2A{-#?PAD&i>j)&+o#TlNqrAyE}LJS!1-S2SmkCKMz2;{ zr*`*DivKQcJ{}HrDilzGvO`*fl7z0F`jJRMc|C2}%?WFT!ZfpM+Rc$@+7+lk>0PWG zyWXEbyO@N2pdOZrZrH{M@#H^#r2la!y~Nt%@))~5{+b?Q%!g|5_UL5$=JiN_^`$D{ z_uZuqH=^xfta%0RO4b9+AE5btdfPiB`{i<{=dC^Qr3KPW`!ERXe7$6gj}0mb?5L`H ze>kij%ld#vFKzt|4<@xuzj1E+@KGASegNt+{%;rmvrx$U$m`tu=rL|DZ>M#ScZ6n=rHE6%9T{GI%3k{&8vK&~TqI#c3xY&DIN-{3jF7?8aDJ zuRG)m&6j>fizJ`7V)I_>3{85e?>7`2N$M`9GNgWiumcxVtqCpa89$3fn^&Ztc;H1dN#)M^_DmT2T;W-~Et0n*P%d%tcw=qKLae55gW8Xt1C}(XD+8g6>Iq}u zQZqk4y(o{q5!lh;IFK=YlQa-1V3Ud`T)Z8)HPQEF7h!dP=j+7T{Upp9_sAMNlEL5b z?MBT$9FT1`N+<~r-1y<>tm*;3zB)mz;%q8th**)_FBY)FL^xOPA=6(@ND0z8&DcHH zJ=JQrt?ll#@cKe-YrpmBrPhOo=T|?ZY5EtHi15abG3l>-xP z)~0HnH4kipMJ$vPDOhIFFwlSjNdq2LkSjPgjL&sSNTnbJa*zVa16K~>fu#y` zBFf}=)gfu_CiaQO0Mqe0xTY1pW&ip@?w$LVLqF=;XCs(M=li9WyKbn=!1}_n9m2GL z@YcK2BttR_ZzOp?Sz3xLSyU(O>-N+K`)2-S9+%` zN&7(KjTPHWW#~}yKJyH>34ZK|GgI~+>EPG0MjO<4DatPP8lL}%3aTrXv@g+bG>IjJ z`DC#=bt>jxvu`O+s+v17yid-oj!B(hUT_EU_8pXtu)Oilis9Kgu!bHUCp@fvnHXm)Tx? z?V^)c2gRhLK%c5f^-n$*D!#uqeJ>V|`Q#35Kl`**U4KK-j0#c-*Rhe0(s&Dlm4Eae zg3nNgcO@0|i$8&*eJ?S z-GCdSn+=K(Rm+yo{$(6;RPRSH?j1~6YlbowTxJAAQZ2lEgb3Qykp(qwjUO~8ZNQ_s?r-{=&Zy^%!i+5!;N6=5*@>O153Y(Xxb1b;#JlInr_Dh+&&t z4)va;(-0pBa-X;}1%<2SaIp2t2t(CiG73_?Hh?nN${uPp5np5W08iYJuy#xaB86>m z*OCAfe4E1H2xKk|Q5NV<#4&SnWvFN5ea6Dz5C9C9nP^_t@=6ENvr>_q-jHZAAclZW zOVk{ekg*T}+M8q3hI(iqFl)1@lAhM?mn*k<;ZFdnIfxC0%et@=pvN{ha4Ls)Y_8tu z!XlfAM%C_AfK`BLF)z#mOyJYq-Xwtp5Yk(6LtJ56tP6X2oZ$NYh*6)9iORsZn-!)4 z_&Mivp$zeli-YTs-8DsdV7ur+@URIgqF%6FjG%9@2^ykku)cJKw9rC0bFm>th`cc& zCD?O0A=`+@gQ8?Gcb0|qfEV^TWvDlTY__bB--!4F{pc{r zmL`>e1S^mYj0T%ZQLrg8vU)!|GI2?;IRUR0)F``iE+D}g}+ySwCv6)03|Ds1x)ThKRqIEdWbp>TXx7iB5ypDU`U`POMQJ> z+UM~8Bpx|wq8secEt?--SkTZ{r7>W$1@B5FSow*iBDdXx8`#x`RR-ZOIDVi?{9~Ii zJRfb4HBXDL;B@W+%$R_XVRFa&ef_Upjp4)_0Wv>!~IwMh?vhK)@O3X34?*pZy( zI!~72p9L%pqX{CkIyPH+NEKq%NIw^hg0)GP_7-v_EBQ?=qW)zljl}F9+PYpJM!Gr*M65E*oI+Nan4|)=(Av6TX$b<2DMlSu%6_(|Z z#&Fn6tE#k`K&LjC8ySS)1+m}6@nfddt9Gq5H^~FknSc;0vKTkbmfec)8CKGf4XT2x z@jK+8v^kwy0bkh~#GqE#oZ|ssIT}=_TM9}4)xQ(Z1(q~Y~QR+d3~)e<>7EH0kp9-NI~(iJEsELI2tse zcsQM#wYT#8kCf8ySYR*I`nQlbYl9t;9n|}UkT*+${Rld=p&r?t3ji0^pg{sLMu!$h=xAbxXD~~pI-3#fQ-%9e+y}4XE)u`LY-IiMRcki`7e^Y0V6x~J z=x{{3kD+YU2W?LvvZ{2Nz@{!37r8}66aktV(Pms!9;U^tFdd-BIj0BZh;OsUT}iTI zTal8%9!%R@`szGNXTYxO8eQo2but=@!HW<20MTYv)DOnpq%aJ?&oMV|uTR_eN0$10 zO4J(0-Lx z`4)y?=AUUzf>~>jKg^W5Nj`wZ1O$MYvNq`h{KBtP>j%K%(iLWh*ugBasgwi2haSmjShq)|GO78nn1Lv?cdLbBIZaToA9OtDIJqL81s#~{Vxm;0 zTVXGr1rhv&1x&+SlhLEI(|cmu0ABMD1TW(uL#_^Uqt7B%9*to2XV-pTG7<8dvV7bY zAO!I|qwmB!Bl6+5yfbr<;}E1)3OWd{gj%>-%x_b-_(o%`o(K6`MJnxN^MnV7&?LL0 z_0K+>irHwfmqvzOc^9rM!7#VI`fCPZ6XRa)^=rb5obs+I%;xD8cKI6=Z-0}%&nZp= z%S$XeF$q6iEzs*TE#>$ro{Qj>h+QSd+f6g+)qG$I?LxY%(nQF~C5bA)v0@N`mQ%MD zwy6US38j3~K6yXs`=*IlNxM7+i&CTE(xy8GKhR9F0<{db%b-76jSm@i4C$pAT2xsU zYY7CJH)5PYTbyZYpLCPv#D)D#RdNb#mw_RMP#blWB(A4s6CLdDZZOtd>4PB1k)N6F zi*$xx1Y)BNCUZ>~q>1Xp8ya%kJ0J<~0Yu(3-!{#cfO9vA|EWkCh5ox~8>DL4rCg=` zsrX8jyguM|CgpFXj;sA$h>lfn()dfA16F@4I2krYFCgAjoeL4W%y5? zvW@G_->dUpRF}F^LmUloz|ky0Mk+`04VfrR>P*{)NJl(&lX-NRIFv6F}BU`U+}+}qIJs&Ye-)8wL!umjz|h)o9F z7}}%G=U4waE|BW|!JL@Cgz_grsM@`Dbk|tR>$d;p2%LUfMaQk&8qfN6p5dt2#zvu; z#Pdv&{nX}I><|cyJmhILE{`n_Obu$DB5Rl~`HJVj+7uv2?qsTu@9urPyDOv7B#;MJ zX+DRWW=irJonQSs<1>9yGFM0r?j6r4{6{Iw@kMKg(<+vBknnR?)q~m9t3&A+Ey1|i zt%HaGPKI}q;0l(YkgVzSUTG$ZoR$6h)nuxm!8RYKLBKPufEsChWmguFrUx6tOnuQ& z>qpZ;Tw96$L1J#&($Lc(_NhH|PH|6D+XQ4$f%^4QX(Vtz{CypeI^k4H$^q? zGo0`k#@G6he5IK65T%AGD~(vI!-$crchw71q7}9zbhQFGN1ZB>m5Q&J6z~CwOgdt=?e}}*%<|gqKy{lhGP)TY9 zcids4rnllJG|?d;<((@W?5H>*S|UKxpyBG|rVZ0ekmok@2viGZm&p-s6hloH*1$j@ zhl09V3q}m?niuVpIR~DdD`;-#`v9Zw@UQu8KRQhY4I1vRuTxrzk=<1JFU@y{Z_K8? zXB0EbHxaot5mk}RBu+q#=Itv|w}j`3?wNbv)t{xq$X{h<68ctAIF`j=xMkq40`3xX3(w>cq&Nj zeEmkcA)$~11wF!@d^V6fv^&2FOVBJk7`)6+_n!SlLI@8BL$~S8iOx)_#La9z{ZIE9 zL&GQtLzVKtqyMX5+|4F**>}6bG_nb#gK%mI3{3(z%6myFE9@bS_Fy4p4m;jaIpvD@ z^r7t+*Kf=+v**qRop_|!1GKgl&540Ln9xc^jj2hFPfxbReLtYVeuO04dp{yBTtbQA zR(B|Zl&-Z1QaxK0hf~eI##z45Huul8RS5!K^hL1%xDVzZQ)>;j3xNraL&$ zrf|D%zw@Uq&)!+Uh)MA%9>u+N8AY3jk>jaA_K8J3Y zkx#oOOawenYsZC^Y5xQyUS3j)<#(%8h|#Sl@AzPQhUcUbJWmPc4i8|aU(orTOhaT2 zETN%Evj;jUX0UzO9I{Xj@*ZX<0AKBp)IFhO4BZ4zVq>L%>QxGnu*L=E0rFq8<$?*k z^NTVl>h?OHJ?xqSg`ijbwC%oL=P5G$LqXmw44y`I(CUvz-mDB}Ms`r`S47?{4X#CY z(CnW^-mD4M$M2AWYUgmS27EUMeTCVa=|4y82n!LwcBX~)VgUXBQu99L^YS#3Ma?N~ z4ED_2kkbaJ90Wv#MD|Fv=UqBz%aU1vOq~`go@f4S3(Q{SS*Img6L@Pu&9YzR0`jdv zJ}_q%CKUi96A(;&m!ZFPrrZlIwD-aa-GD#>ae+(dtVY5t!P928)0|)#Qk$*p+PYL+ zDHP|fzeI2RF4r#7%zHTI)BmM#o!=i3_1(tHy)Z-X_@-VQ3A}19T;e~?B#04&2OFr`Uyls_6}*H0qzDD% zyy^x(Oh9P$neV#-@2axz79eF9@NmB|Vx?uF7E}=DRXadZ1?mG?{savLgO7}l2+x78 zAsPiGhym{I?*M2;El&&evG9>PhQ4(4yXKf2Bnyv+0OORfKb&8AWqERD>i_J7pG!ZF6) ztV`_b(s%-!nqZm_bJa}7kB?jK{NRpG=qDTJul4Ej+_I{a`M3}(qqoTGyg`kHLu4*( zQ6yMBy22k&f~xj-Dkp|j)3T;HZlsXB*dP~b)R79?b7lFAB{c-6VNu5Vvf5`Q`}7tR zXvZGejhnnS23vaQGDP0okU<<14ikn#66kYmm64C8@Cd_Vy^WPiRdkcasZtmG@bPb) zDO-u{Wc<7gk0+wLei?iyndQNh_`Kp!TLi~-!IT8NYEVM>$3?;U$afl|tgycHAUfED z8_dm|%R4RESGKv)oEFxdf7K};-Le4i!Z~LQ1&xpYVeKO$YxI-D!qS_3D44x3AN4Y2 z_{aWXH9cl-(RmgOc?S^wZ53THP5@0&rnO+<^NK;yayS7N4l{TL6TUx(KH=ciu;n@6pbCuK0?u#%4#eMRwhk=ayGW` zMGXjr;qQG^c6GjFes)$A`k;#IJX^VKci3`96If_YY_`;ppNPCUAsLyz&PMt~38*cIrbNaX8lj)IJ0yN7+is@W8al4c+|v+MvBpF8x_> z#y{T<=d0MEoY!BzT$_Xm?#z%*MBajsTO78;5Ff;j;1DEiwt|pn#7eWm3H@Z21A)w6 zrSkYX#ldCBOq%^1uo?6q4pj6RGbTh6QD?f}4yMM` zBp$HL(Vzu&imy`<%!uD14s}YPQyc{tFT%{=;BT4qi|Xra(eLpUl=Cu6_XSJUdIe^#*HwfdQn zH;aSy2|AXDrrWRcHhR3i9|?H>b;utb-rOnY18n2fbx|Js&bECCNQIlzSu`m2n_d1d zoVzbd2hq>6chRD`|B~Z=p9K>f|{q- zC=XS}UmhwuO7*o62ek;N*b$0(i!XK0=PVxFq`9P$Qf8L3@T}G>>(V&pFbG|sm$tJMF}3l+=L!-6#86xmmpqP5Fvq7 zHjbTT+vmSoriP-1sZnW49kR`Jx6Af9Fxknn#7v_6oc^-54dD6SR*2ruEv|EF=oN1R zu+2eLfu4FVDX_ zc!hJ9>9TV2ff+P5o58(EH|9~QLxKAdn+ZRdWI!_IV;H)1ddlKT%5$arR$}!SgE>dF zFt5(PR0`-gM#n_Tsv1FD!gZ1#%(ocWA>YIX=W;irI71x_q|nbWR6ip$O7jP_f`QS3 z6*?y>K3}-PSjpTuSBq{i$39k&hM~~t&ref3-=eH2uBk95(N-lwZ>q>fdzI$ikSX)+ z*MGur>XwZ2c@x}5gwL+EY{~(x_XWkN-m~CdeZP7Y+s)ni{fF~XtUA?!k~1UYzIamH z!?rAJHAvsp4SNLg>iNn(RB6Dh_-mW!M?F8jCYiX)fi_B-l=4%xjaMtR8C#H|BevnE;&>Q8;-AYS zyx-Reub}k`Z8PYPB9&%hu{a>#^4&Ji?x<`V^`aIYS7IcU944>a+ z0YE9;obk)_LtG{q3X# zovu43S*4nzfXeu$1Y8CwKigi_d%j%HhIK|Jew&7q@izF4>fbs)3OB}nK?vp99GISv z<=E&ZUtO7gx9WsCYqwb%cjr_qv(s~HORf3IjC~r5*9d~SPFrVYtW zi4q>W=NY?CN@5V@wVEearEnvJ~rnRHo6`8qRw#8a1me6RKQ(q=zm;uc3u2PNrve%3TMH#mHqM*}bQ zUur41C5WMvQ1OaB8{3RFoPp-jj^;8MnRG5;a4E6*4_cqX zv2)$tjZH*=r~9ZljE$X^HBy1thO13s$|Wajkme$<^lWl|BeSGc85Q|Nj6`CMj=ep9 zZI~2)wPS6`4voY-tg=S^K5V8jqCF3R6_Csf=nPbWBuC3}WS~KxpquRPW<hfZ{ zJNUWJf41Og+-2t{r}g2KU-{Xlp%$v}7v;K>`5J+3J9oG#&0+6$6Q{+|FR%~pUsZv7 zxl$WXM7#*{vJ?-}PKKW?=4YM^w+Mj6`HKWjIC)~P;-3rVIo2mx8D7PeGGE2lt?R!n z^|fco@0GK>yem01vR<5NN5!{4^2PJSjvtWZ7zkgnJxOF6q_C+?nwAEdq)x)MUS4XX zPWn}kAM~0vI8wOomHwttq`6EFV;&J#WlV{8=jo^HY}kh~q|so(r^X{s`2zQVsfUW6 zj!H*KkQvYtkNZ!&-b7g`b5(uBg=gLV3$EWL_NrRoB4c}+_YBk}(_)xk#pu@mA<>FpvXZ}a}7Xw(3CX&{@s?l zy2-d^@z~En-K>EU;0ddrUL_n1ElM$Zn$Buaau!MqV3%eC;hEd% zEY&pEJTOGU|x3HRxdN|Qto3z}j zxWwr@n5a{Bta%-_j5AoK=?)xsG<5nH4K~-7J~*mR_3y+eJJC``bnbowmf_k~;ZSPM z4jR8tqDblASghg7b~l=hgxD&HxC+|5+SzZ=wVXFCmY+{plQgrKA2dBT#p?Qvy`60@^kljt`15I2+mX{bbW>&1EzE+C{j_u#@F9mwmO=SLLscpfrb~X9~Sj zc))XovM#<^p)hO+y}uwt2)?aVNpoiima1w!oO7qWL$t_`3_R2L)T5e**bq;I>o!zp zwlx2ykMu0Oz#xz*FMpfA9Jz(KKuS4^0O=LF73yn|amKsq#QmE)+$(ss^7)yu`0pkC zm3HX0w!&{Rs>W6!vb}nIUp>G-@AAV-I7J9KOBvv&9=Nt;AI)9&$LWa zL^EqY1tb9xj0}=3$Ugn#Ec3e=LQKa`iC=DjVK41u)o#L z#?U}TaJ2$^q&zoI%p5E{0}ty7ZjL@`%X@V+^W>&^b@ZJy$akcG(f1_5Jy+%SsA!z* z%(4_f+xp~ZGfsBgWT=|3HyeJfE%moPWoQQzCP))MNON&-R*Db8P@Ob~o)vDz!0bFiiar2HG$#}(o$_NTg7 zTQmLR4Yx<*@Hb+iJ@`SrmXMkzx6Zrg`e*wP@N?DE1{!$D47{Xr1t+`v1w^q4{ZEHR z9%2Pnoi=tftQvKXA?0rkPv>&JP|S7TBqktQr~@ul=?DTH#wYuM zC;Q@jkyHAk*^y&SbLyb@mgnkG_#2tf6aDD|t+n@m;HuG&IKwYNik1*SWhyhB`=S&V z+yy`U)ztv{wxfhkd-(X#FGbz<)|9T=pNo!+r4@L3jl%Zf0bkWmn#+4;BP0r1hlK5; z14fiJ*~x0>jR-<|)xPEBPf`Rd2_xT!u`#X`|f{+6Jx!T&>DhS}v-%_2+0 z?FWnphU1swNUYdI?Z)+0p+~yhs$dTA+jqJn76nv~V>rW$N^|s{{DzsmdPWz=9b5j`|nj@XbH>(nqGrO5r z^SU2DB>(h$9Sf4dd7lk=uZw%1L4~lWHspKC*JojxZ8x21ALCT#m_qgn?lV#O z-%IQ(o|tRAIuKgQ>d(lKYrKT~1aW?)>SrS6+jhCbS+dJcoe)kva5{c{uDnd)Te4m( zRr5d~?btP!1-`jw&Cr>1^cpryvpGStIm)j;Nv5#Fwqy7Xv-s4_C9OY6MkLXLjSkjbDc6M)dIq=Mq5z`ms;gss{f)>*ue7rAGcqk z<3HNQ?HrnWqqs%Cs)dX|!qYC>le(PJv#u(gYmG27`NU_N=}o@y#eauJ$q#o3NG%U{ z6rG}O0);@ACZJ&zu(@HKfX`zwW@}kn@zmz{Iv$vUc&kj`0bnjxvZlQK@7eCm$g5&3(W7xa;1*L&ay|exfTL5C$ z?nQI=B0=euF>~y|%M8S`Wq*H@p1+hO7_u5J9?t_^QJvnZl6dTBETz{-o~!jIdDGr_tD}@5FRzDdA*HG!j8&{t(ja*WOUc&0c z@06dBQf)l9Q@VCb4xcN6JYn`ce}-=0SbcYEe)b~p?E+MFl^uGP9fCJ-j*PWHZMf}` zOh?9ZmO%KUu^r5j9lK~?8D`Ka4!G6|T&s24E;+u#aA%jE0!&{AGn;;{6%EbMyS7e$ zE0_Vo-cTx{Nkf+D4vq1=j>k}*3oBNN8LQ?3h-_#rUd7>8=MG}@;NIu-KQR0tGkZ!U zsdEpEq*NKa&Y42rb=!EcKm&PSxX+43F!uuFu3bw4ENd58erOA;p4uJC6AF<$hU*i$n0C)83(@7kv}cz0fj zz9d4yOBWKI1+^t2fti2&vi`tPS3JroIi=?ckL3zidio|V{By72G5p7MSi;@<$MprM zE7M&(8>!)T{x!>9xvBG^!>mroHs2oD;Bm*>c0r|-x3T1QPCxC@LR(i-(~nx)`A}s? zB1BPJB2(sZm*q+VBXBm}Mtrm@5f{gaNf1fR(MEr`%Ndu*X(x0o|TCheR{0{;~f-6D!?Vp9M`$L->7Y z=N!+T824JHWz*xh1==t)oE9hvckO_pl-A#Z35T~vvrz2EupDyN83K@)62uf6T&?yw zHUf|-Z zmcKqCJE^(b^n7nwd~Z7E zcZOwu5*xN<Id58jkU9fO{yuOxzY6R<@W8YK zb2_Jo%TIUa{_G_GVzm3dGrq|XSnZQ|6kF4;IlW^?k#-adRFir*LZRX>qVp5wk>THA zWdxuNgw%f=Q*XhLqe1wMWwfSU-O*sje(TLK%IHpbmsYI;CpRE9?qjQ zi%4b1CbU7InE|8>bd&mX(#atg68=3<-0tC5C)i<*pAizemxi-iF?=9|lNnU}21HrV zy_P@FW!EvCy*~PO3MYN49le~0S?h=05@^{HsQKqbO!gGdVHS_NwxHGat>63gM^8XY z@e;#^UHqGu^>F&&=>g5iu@mgHm;OtCH?5;vvzKxbu&4O$V!Q(0|FP8Ydu^m61@n#& zhL2PAjw1rp>uPDV4>C#(4F&oekWURe{Oy0Y zDD<1(NTvdbm|rc5!vpBbuP+uv8_4?46C*;BMje2^C0ocUEk(8$gt3u`N}5|l;LqB% z+jeFg-ie!c#3uXL*Kf8M&mYiWU&S^dIyOPV&2PWvZGa^iZ#MF;DohT!Gavc?rawjD z-0BmVDLDyzx;=d4a$VdmnuE=5+2K#x*@I8t+4~fuap`hqdFk?rXr$qK{XQT@r6)Go z{B%Z9aehH|1Lq|_m!Sm7S&tSwKEY^wfkDyK}Oep>Is=x1xIdTzy z^NyCo{ulk6PQSMs+6m!3E;a|0Mw{u!(krhEB~l)u_*(>TV7M|4lK^i_||7sZ184PU-f)+yCoCWAvhN2WUh;CwRHBGQ>w4|;@uhv>zoD_ z=L@=a6>c2trbbixi3T0)1z)R8C;f-rx(?14C zX?0IZO#~Sy=aaf7Bd+1GkGffQej6rU<1L!=99Q+T!O`tjOIT;gZ)&qoSg*%k|ITMu zf1A>}<+h0W5p*Er8rNA)quYJ+=uTU{={QSFR8TtiFfs3Gp{cteAakC- zWZ|fuz^tohxco4#DqxJFyRo81^g!0|fNZ|=xk~PqG6U;&VQJ`75Z|=KQO3%#D{fz> zN2JYia(jk>Oe?Yeokr1lX30a*dXwk9L)+IU7H^rCOXt;%y3tI=+sS?u5mYFa_(^nr>t%xb zq4Aq2+%v%EY*66M^ba$?=(t1lR9a!U1jT(_&>~WiuIzsAC|<^X8Xvaw{k))NhU4Ecj89fs%QH2Vh@|^C7;ib^k{K-i#)n@$)$ZB zmJBp@ZiRJ)?G0j*2UXDT#_0PiJ{GCth^g?CAvc^eXcMxwsAk6^ntldaSeg`@g3&Q^L7DN_=WhdQW z^!`ER3HvAOdX@AISzIrn(&wyl+??rV43T*0Z(~`^sHYrh5q9hg@hlTGL1G>i>4uyj zsp{2g^hd=t@^oQiVmK#F?pSrk&1D=(p$SyQzG>*s-%Kqq=-*D=1PxH;{t;c9zsdD1 zW_NeBj(t^rpjCFqFbp30=^oBF3js&VTX%f$lqe&mTL*m}wxp?{xtdeI`XsBDSea z85!nl^VLb>ZaP)CwiBt5EV|JfThB{$3>oHshU=$n#`h$;iX+#bv~M)jZyCIPeGfYu z#q&xdjgJ_TO9IYeKY?L|udePMpWHm6_D@8|m&{YDC9B?S_eBD+qwiT!$!MZ}P|eN;=*#56(FR6$`DAHftKLACR1m9o)Y z9s7<2^AEMoF7d$qr@{D9XKby1Inoo|>97cgv{Ao|W&2ZNMAL0!O-uB8F`a~-~Wbwz`bqRFXdsabC* z)kEM2ew&dL1ud5IvroBEJxz=ruprb}EkvRAe!{8AwKpbsLYZO5BdoY)(AA&boH({i zR&6mpv-l#-Y(9Gk;FMD7`*9Ub(4U@?FfUGvMGvbLuhzvuGdp;f$Ed}hevm=mmwpfE zyTXjw8K>&(GjQVj3DcP#+Ttj5c{$Jw4G69XD*GM5Eilv4UTu!uw}nREN!xA zrj$d1z$m`-wtIBXIHpep&c34cz9OFH$2HYPw>XLVziIo5e`r`E8aZ*+elqD@5PzsN zXxkpK;t;FKC%@0&X)EyX|M-PqK!0sUj0Ju9iT-)l96BY?1nE07H35`co{(BUJZ)?4 z?J96!=D%R(LojplbI$K4`Lw4T`fINb1D0Zs72{bx<0YK8hCpC&UF!p;p~U+Z!+dR8;CGwoDu^>2C@FU=28C7zt{UtH?kvm$3^hZyYSE{geE9? zjEwP0B^Fqf0S;l&KXKi>re%lV%7UlUp9HEwP8fSm$(8HZw9zpn@8WlMMJYg-bucx1 zXi9QnXYoP84#O+Zk7frfbCW%Rbo7@=8?3CLkJtF)SKOEbEEQ9Df)J{5_-0BFv9DCS z6r~y+oIiBHPqRrkPC_2Z=QngPR}FJ}7ot+ED@Rm8Oe?df9A7q2z}2(~yoJ#_$u~?Z zv&yP$Um6(J5g_-TN9V8oh8W(ihX^y)E*@K{S&U{67fp|@HOwz)BuFtmj5o1U zVmC>&_=9Sie*L%>ix_|5*$WTFWlsJCm8|)k$$@stYDj1922SSZ)$oB`7n03d^Gqd^ zF!inm8IiyU#ZEy3%gr6C6zW-!5a>oOtYq7uS~W17VNK}E$k%K z6SJ&in&087KG$dv`2DsFLlu?~WBod?CMG6!uZi99UN6h6m~r_|q9^CJk{*6|sRkMW zHcZmknK75HpHQ?>w&t|X%BAW}V1W{tXhmha#Tj+|tP|EBvDdqqS{WmcBEPTJp1^v} z?8?5yh2P!}w4M3Ceflx`?w2}EFZ1miI~PbFMpflZNl&q3^s2-$|4fH%G-dS! zwCwwBMZC&n>3G{PU}f7njojk1I#J%4*?l_5Lh$9P$au}Y2I7jP*%5*GPnU61JUmR7 z?(R?ImIRFRw5>}ULu9iC`}n5x9z5>@UsaG_y`U>=1GHzx+x?kx3#9J z^s|Yni_eyIdKsPNnh|41jeib+;qgGWbq;%?uHe?wjOFhj4To#LE_YJ>3dXcfTiwHq ztR>x~69pZgtI4x1aldxv^DT^KJ}lBjl!?t&CO74&k35FTQ&gBsecY+BrozQbOJC97 za2YUUR%@4MkD~-P{7>bP!>qm9YrBt>?(UHfbmPbLi7BHube*sz7PQ8NdINxa$yQPB z%$XTK+2LC2YSv!MKeJ7_wH>T9FP92ynMDCpeIU}+<>MkRcTPgXx@O}fPM6pYdB5I( zdHK4h&a6K>^$)6Cw^9k~vWVxIy8PTB_Sy;Qt;VMCI=-xL8R)ay2T7L&&}B#PX6ar{ zYklHfaFF>Q*Z8-Y(khnB_}_68e@xPXnd)^*t7YqBkR6|4YZOezOu9{>@aGIn4Q3 zuhD=_xzB&*aqscYI@~d?&;;m1j+4z}4*WSiLrG@8>*P6wSSx&yqBN`NyB{zfL%*)v zOQq{g`f^i}u;DF{9LP9J%s8aEe1oy86usmL7-me80wXh1Qzhp<*oh z$xK#C2h;^zy0^^kI^j>5UWWczIC*^CdW913^SDZG2oRmx%H6(%BjVC}92B|wqRhJx ztkX+7%&fGE3h`?l+y&k9AY;yrLhC+dB?yy#Cc8Y^--9~b`*N{o zIzEa#J}NOaDq%;4X7m5?B5|ciaPeRSw6ITHipnQOR~~-RH%EOuno@3%c$>1fxK;X2 zS>Q$bEl?cw9t)!SWNY4%?=^?5r}9c)q5n+4Lu)URI;SjPFH-Oe-106ga-LQ2+*$Da z{{W{zSidAcA4-1aXMW~a`)Q})Cz?VFYCq-lf92;~^s|7qpLwS!{dD|3KMOEFow%O` zB|jfYemXHfoz#97(C`yYp#`;{a{9mWa~}Fx*xFAQm7hhw&(Ffl&*I$AB9fnvB|nQZ zKZ~pVEUe)tnnDX|KjrlA_VWnMosWK&kp1iikB)<_h>}zmo;8#%QQ&DQ@YLm^J_k=r zFi)Mir$0!ZK9M|iW}Z5$JuRW(DVjnHYER{K?y2PGj707I5d5~8jDD6en$Hy{6I^`D zgPDeK%E_Nko}&1MctklPe}TF@_DBVzv`>1O(>{rvCzfHoQIYpXS*bUk;_|;4TTqd8 zNJVvrlrbtdjaad~X;dVzriD2Q(z)Y^o>SC+)d4Uo@Xh!{4^N81Lqy@o2k&WYCbmx9 z({j2wrj+Y=UfQn(g{;1z$HvhD_FV((anw{bj$FTQ9J#Rmbm#q9N$SsMQgpeq&U9CI zri(^&p((VW_E}EZ>egG&yT&lupmgP%K z!8z*bB7BVUZ8+9dUtQPt+F)k@;YVTDbj;cZ9ii9oO=!t(oO!S)j^b>M;WSi?^fuTR zh8ewWke;U2MN~D)4~|1SM^k%?WqUiOSey~yS&dU3x7yIz3UkMyh44JK%X8S=;h*7# zFBB?NPC_L#?g|Iz$)(5$I|Z9KgI#WqO%~5fgKtaZw%oJu&DMzCg>Mwlw`yR}h&7#N zzWJeVXROW-U=Dpw$N5qm%hin*_g44e-l{p?Tg`@htJ*kMGFgktD5#0Bl<>1~X8{$- zZDcv$jB{+&f1o^^?p|%nhd+RnhtQVtg~M!Mo{OquE>ET^XOWs%C+1q-$Yyba2F}nM zw0cHSN_C_11`S-m4h%c5gB!F9(hb^0=?3kRe1nFy z(i^n;s%qf|?IliR6Lb-f1vhB*vC`Gj4H}lD#x6rQ)5M_^JL=lsg4UB0G<_MyMgw`ChtF|00>)qBJmU|flt((QaXPMZ zI&SF9PxCckbTpCrrJ+Q}E9q&zCX95jf$uFFdwbu7hP^+ zM-)=0=W@BD+Dpuur@fcBrYB@Md!8PBZKNmc0RdbP3H-|G_ki}5-(mO)b2UATikUDf zT4Af0Yzd>nmyHTY2`>Ui5LL}l9fzZ$6^@E{TaCvrb|@5PnHBm#C+Q+uKos7k-i#VX?s|Xj8z(;+xRy ztME;6Z03pzz!=P}i)?1Zk3#2m`5C8#8v?#qU}PVK4p7etO^xzLp^4v5to?E)+2*&! zpT=2#fbTzaVvc1u+qE{wg_f_ajo;^Ho&tF!Hw&BH%wyqZ9btRAXzt?+iRDdq5@c?}xCvvgq$epv3zd z3Ml&fF`R0#jzz7ACs6(u^O3JE0yO0Q2J_h8p#2^FeV-lAJ>|!9&!pqIU#0$j%8uur zs*mUHE05=Rf1@c!=8PjYoY_yiui^CBes~c z2Fvk{S`h=Fd`(4s4_3u@e<{8PeP4Wsu=oz;@!eO7@86{U4rTEjs*djvjra~>Av=iu zGZ-VcuT^|!rS+j0p zsqj1NXrsm7j?$Axgg+-)fRrjyM0(Wm)KrZ}9Y<`?$*IzAi9G=6;!ZT~nJZJW zP|p^8rbrhR1v@mT=MShS(uhy+Y_*jh{CqRPta1P6U-7 z*90V`H&rJ5c6Ei;o`!vxDEHwIUBq1I!lUpf z^VsDv`SQ4Yc|s3gb0axSDT%CK=kb0`lKS<7)UWeczs^(lYobQKqA9eX?pHb8qF)!U zlKPd92JMLLb$yf?NiyavdPorRUJ}95=!N|lL9F_fe^=20=Yr&RLiy-Ibz_@ z{^6kUYKxBiHI=4yXh$CV>Iqa)wn>L(a8~n{;<%0!HwX>u&9VZ$FsA|H4fAtTqae~lzGsrxay8qEcH0%g5Kr=tbQ=3|gsGbwV3k!+mnyxmBS zC4qc`aw5v5DEne=aw5np2_V0rO}j*pzs}8lHtOOp60~d1CitOUR)E;LEvvkkTGC6Hez#D?lbC#-F5{|cNk8$ zb@x}@G?LkA`O->~PZh83C`l6cf!ur$|-qi3IF+I+~9JxqkHd6YU#`rz`lfsUmn`w-Gdh$A4JlMEabDwspkx zX%)L4D=e^z z-F3EACS6QJ?|PFp2j9~kICG%;vC8CV{Ls5ba&|h{yuQnMdr7h~J>Qj*r1D(ov8PlP zAV1O8((A;lJF1d`Q7KD}WOZtwsVZr|CuM03Qf^t&xvJ#kjSGvblCL{K&fgF6{$-GM zM^l!TB!|Dki)$}COn6zu5b?H9Md;l z0FIu{&X-n(IQs*G>o-FBwq1cH>eq6R9y=iA^M0qJt;xpYJ-5=x-w6?wIep9CGQ{r) zl-jc$SnK!#SR1hn^v_TFu&4leeK$76i5&US>1Y{pY7%HBO@fFmvjh6j|KPA~CCLv| z8p)Dp`O?~wVQF=bwI!{#)}=h^mOx~-z0AwB+72>& zFUa3#CY_^km;rUIj{!E99RR+5dwIjFDj9GaSblT>dgD)&KU05U-dW*Aa4r&X z;ORzY)SixFKsrPd<^s~uz0D+=ePr5DQy|gPd3Y6_S#up&HjU8j7~IA?kn{VOO$(&R zgG{1Gj4yKxkPqf1jawg8n(8%26gmIm6?amKv?b9LRf)fNr8Fr=f-x@u^UC4-KMut1 z$l=R@qyp(qqG?-N9AKyq=6yQMPzY_S1F5&`f(g(dBG7i0opHf*l(u9Xq8D=jd2)1l zETC!>LG4B3M_(>YYEc9>-5-v=96-@TRy(4)WCqr7F?~k5ku)IlX-_ziuyYAJ0x4RE zd9@EPw3OE1Ku(_l6iCh?YPS z0a`^;b%2J)0ZJkJbf8)NIG|K=81rr~1+<==M&z>!&?a(S2kktw1JE||49op_fuTPT z-98U!C;5bE+-X2RlH7W*68R9&AyNR*aHQSy0GCSQ8HerjCt;7ATOGu-06Vggu008L;;#Dv_xcw z?Mx5?5e-B%R|rNl6YEPBdLZhA-Yyr0A=>#I&}v~E)}AL4YF{Tz#k@ApAa64unzwj5 zqQ4IgkuiE(#|x?;W=DDo1}@2Xsw1 zgJ=`B`jPMq(T#h6o(Qkd%J3Or<&E%<2=kyj^@xx{x_?mf<_pj)q$5Vq+=rS)bh(U> z_be6iegH)CuA@igbww~Q*J;SB#8FGE-A(rcqHU)DdFosct-x0M>P(1kU|uzyAEJwA z0oByiM>KXfpnAHNi2lIZ8|vC&?N?%;_5j^bL@TkK!vImu`WR=UIr{SspcvgW)Lf66 zvATFfUWjG@0{9tnY=+h-mZ*KtJp35q-iaf1`6mR0{j$S6xv=9$5Qloe!e?zJNr1vs_T$=Lo1T zuRa*_e6iI9I1-VSg8D9q?kxgTMBfk5l~p)v=!YPx7K8DkAAzVSdgQE+M6?oHT~p4(2yYXgYp{kRD7+Uu_&S~eL_7eG|AJl5Bfqu%IIFa1qK zb+OgG^>-LY8v*sv-$#^=F&LtMjHo&FJ+IJT{}Rzy?1=&TpAogiJ{zk46Hx%pHsN}~ z21nIuK%?}c4YcgUGiX_)-VyVbAA`JU95uzBNY%GP!shz+3I`Z2qA_&<{j6V%C=t=G`elf^ zBYLM_si^OxehuagAb|eXry+vBIub}e={F!cng`Hl{boeB@&o#!--f8R0nk_dPDIHf zpl|v;h+gLc^pAc&qC04X7}61yaR8(<96{uu1Ee<`N3=6HAcNr)qB?m2iH5U?jQIc= z4HpoNM=QAumk~`W0LaF04bgDy!Q6(Mj3cySYq*2xI+n|0xR2;8=H)d!L{t%dw=+CO z)ChY%pW!K@X6U=U;W?t)9)KJSuMqhmD@6>i5f$+QRNC+>qB9shE{5M(52B{0;XR`5 zZh-s@euAs;5|F>11|y=4RR9ezW3GVK z8=Mg>MgO)M${~uz`t}$qBD##NK4fr3v;aLiYw$oc9c#E|@I*8kTYcAHLKKFYPYhKN zT|%304Al{>#M(a?YUP&W`kSFH=B1#2Hez!`9gP?hVoO9WEGER(h(cIQhyg4Q<2tX{ z7SU`(c4B)(T`;opi9xIfFP_LL9`-h#D6JR6y*8Xs8~Lqu3MCJGAK}_C{of zwHFaXSPx>kqGCTpu2`;^H~`TJELU6{gs3vcX9+QsY1#w&K^%(cH}t)vI1JHn9F3*K z5s2(@G?o@eBC^48>nx5&Q~~qKh+`3Xqeo@M@r*GX9p%JGL_M%vd2s@33-&|>F&fck zY*|Gy2GK8Q#YK!ov<0nH5~ngvwBjnpA!>wH+{78oTeRXX#v`hT^Mr>u8&L=3ud_|rBN~Wvh_|>9(GHw7OyXiTjB1cWc zV~8Sgq&5{#B5IB!E>Jw97*(Cc^NN;r6)!4k?=D`>Ew7C|#j7k{&`NLdI-+E(VSsoG z(G;99hl+O*wZ|SDC1xOci&jR9j}$eG5uYkN8Y@0$<#3)DC%$4ak2Yh(*N9Hzyfj1n zm6gN3P7;4t^u%KEy`t4i#E*z>R{*q3{7X^$O7XLz+-mWwq6gQC{~+pzZJ~EEw(`8R zMKsvTHEb7cY-KAuL|a?g%1$w_t?b_}F`vT9ZqY$e?toYrQ9Wls>0(ht!zuwfC>BRl z73bDN;tzf8QjANNiY?+HO0@2^tgC52Sh>BppR5nI4O0fEA~ql<5EQ1&`OAL1)_$SH^jJF5e1`-YcVek85?U{$NB})IO7II zghUuOA*z7=8EM?2h?fb*ZHNwIxk<(yh>TcYtZ|njUZxuNAli!_O*8IOv}Km@fFkDS z7!M)3g^`tDJc4Kg?)(#t$80N*S*LUat8`Ta+aO2T4nJ`?1jB_PK%nnN|yXiJ<)Z0aR?zhB{2 z>B7#$&|of2cb$64=uE<|fdn0al)Rcu(|ua9>&4Upv`rx2`hYy%59Gl>kT=_dJc{Y_ zLoOMO#to+NjzQ72_lCL#MK`5VO3Bx9CQa$F6lAaFAkSxlJhTMlm_{?rnok}KpefBB zg8UP&yU}Zb_^UT0W{H$kli~2)&COF_-G(82~bmuW8+e_{4rpODN>8-&L$?enZ*~RgkJp#GL3(ogCsc0g4A%*bGpXEs`zI=2qg=dn zBBUIF^ljHcZfOeAA7#OY@2Py23D;*b!NS6rFI0|9{Q@zw*WgAY?Y@nhGf6*~#|=Dn zpwe__u4`cQ0`y3C81%Q!1`G2i6r#DGP#(Klipu!W;xy`GA~y)|<9=;iZ~xto_WR{3P!< zf9|8eQ=;M=%qh$}|AtM?xeu2HS?GtX>S9h|wXmMq*hd~I(Zl5H*zO=RGuKt)`e1rJf7NJnO0$+2tJtdk8zU^*nf^H1 zoDzZUtQIpNm%Ko3 zcmeYMPO#v8WUtxg)B5RD?rs5cPJ>f4eawbys&=wIcP85h-lo@o49_sPEoto&i)bvi z>IIcwR)X|I*#{$P$4ZcTZ2zifp^jd>6tKg}N~3`BTPoxaXb+C54)vhy(Jc@~u5C0mcs}65RWohjBmRM@*P)M(ZDN{#54-^{?(ts%sMuD_Pn`xoI`)y>u zGP1v~6If&O23yNmoU}(7F%UFw3;@Y;FJh@$m|J}mv|Nu-u`d{|OJPc>5bUu|!S2$E z-2QeK_n_$H1d#EKK#pt%atcim$lP9X?MnOBmcgc4UqcgX|J)XOU|j%6>)5tVVHV2t z0Z(`;t#UGvYxc|ox?%XZD3z|T^?(niWce(gXIbihML}J*?t5_(+IhiyTf5F zV!h3JiS<8=lbNA%Y<%r3d)Hy@NNWG*)gX&b7)f=?VQb$E0L{}l_Sd6K!qKs{8%V=I zkX3Mwx*h^DwJpepD37D`#o7~Fvgifb5&LKINNgeMBo2kTl5ltAf%DS%ULa54wQXyV ze%NCjhm3QF5gKFenLqtwXq#*A1o?P3$V2l%R!;{xe;&xSk3lX@0hxrF%TT^U{o5Ns zZW|4<`E0asAEYDdpTyh+m|G2V$6(oJS3&091JZ<=)i9+3N=HmDi}ED4@Gq?E3R*sc zElfk36|roK<{+n{!V_S@wyH|s!VL!|=_rr(NvtYE|18IL3Wb?FH zR3{qerTTqAZpO8MtspEm9`%yWOn~C|=jb>qedB`6qg?uZ5;Ey#$WvjJ{A~`Q9K4<4WO= zGQJDQO(Eoa^DS* z!8<`VLD?T=msKDKp&WxYE8gBg_b|_o?WKP0iJa@|MJio6<}S_uY-Q)sj&cajLN3E( zA475F8i^4&9oOqixOXawnx{g~Q)`dW+Wc^cy2cp)i5P(e@w!qcxc-DQUb|7Sd+d(s z??T|(9j|NRdUv#!JUSMl9@AVK zACL|xukHa^C>dn*WRMGEWV0Nbwc6v# zewXi8VfFu`2S|II8M@;v!5Dmw_fS)@Y&z~aI|f7U)sE8smhOkq+PQ(aZ^WJ9{DIGD z`V3r&>i78BUD6-WU$z*EFbO@THr3XQ|ND0#|Os+>_4Jzv0RYa`T*TIBGz)Xz~r21(|}gYaGVmd%Qasj{H8reaoa4ExZWQdq^Hl;CB%6eyq}H*_Tqj zdJnn|J^)!M4X@`w*(%{sssZ-)qfi@~vbI08;XTSX-Eb^my#WExsw=@D8+5XRdV@js zY0Xv#^gU3H4K`-ky7qFY+>-mV9ck?sPzH>1^icY4KA}o0N^_Uq0=a2bQ4eVqV5`Z% z!6iK;`^OdQLX3Yosy_pz^D2;IS)y5<79t#NC(;J7RbQ|;huuUp-SQ$ zJF9OcTBAc7@clvW${y;STe(3dnsN$b+i7rhdL4lg=-UqNni)H$?rbLvyKcK4Aio9G zGT+nr42C9i}JW0-3f7 z@0AAQT#7sV+&G&4#2$Wu_godQ4f_Vb$ohukx4~$Ti}1P+j?f@nseN%bxE}8TM}*?e za1h9!Q9cg@ISwO#Im$01>(c(I*%iEdi~EFPc>M);_@TJZOvPPCTWlM_eaQZ`!yUjEI00fzeiQl+^fBZ6Iq$76P1HXgKU?l7nQ%42I*W0s$}mYM;hkEEOi zdHWzprM@yZ>N!X##VkO}N6^}1_0Z;0Vkh)v485)`MB?>SOrJ^REgR6eT$<_3N1eqU zU@h5|)_VkMtaLO*;l(C;U25Ylt|O2I&iiS-^DDvGatpUZ^t!t{^z+IJ$1O^A_hIdX zQc=#Jf40(jtKPVbmJM$Ivvly{2K2vhm&!$X@6y~U1FhtTo`&Zf!&Dc}md*TT)OGWb%bvaH|CN7#5 zLXbkgyOn-Fg+4_1$_j(CwI80X{jpa1F$(=@*#3BhezKMRN`?Mf)ZdV8dv;~pp8Xd3 ziz*yPn`bO^`d+$bW%;(kvUMqF$&=W}?v|x8vTcub`=4a1uN+fM|Aj)|dNg%MUtU|) z@-|zRt!w#^Z7ra`cP)%rb>C*EnYR3YqMvfw*Q$p<<=8g0{y*93!<_kc3e@#so1u#K zO!7TC|9|@=ZpL?jUB|8(W>dIa+eJ10wkl$~O=|8vfRC_($c{(u*`}1k~mAb&ul<~{yb)6f< zX*{%T$x=2dYT1p~hpJfCW!VPhe0wog8Iumk_?ap>&AM8pE^0=X#LG1WUm1$)-4;Ab zwPe!t&?vU^3Br-`YZb8hM-{bByGviIUTM;_hI-ZA%+BwM@STvm%p{wO9p%v+;VNr+f`kD+2#F*Kvw#s5h&q z*1FEX*js~b+u{lRu+J0jl`>srj}CffHE%ePo~2HEDy8L}QK+NVO5OL;Jx}f2O&(JE z0_R5NU>1lEjREEm|x<0X*omEd>(7H$q+ zGDnVHa;YEawL>av8AA`6JAzdl7-esPd8!B^G&hcsNBH5GC96&lm;VBbsY7AtQ>S z{XDNI&C`)1JkO2h>Bt$Lw}0$ZFFm=;^UjZ*NzrYdXE!6!%RnCTyizlgDSE;4UQQfu z5Xmn*@7qKoh~xv$i@COx`u>IIEx48fe+t)`<(1sE*((>x2L zm52X5kW+RC<~&iLva3xx8Ff&hYAW<~l@hgBYNwY`FhzOI$g{bf-p-6_QIyY&DrVa0 z?aj!aA_p^CzQj(S-;6d=RKSdcMt1swW>khEM+u2H@0)am%*bUgpiuOEDsfpT5Smv8 z&?NHPk1xCmk)|BY*!!BI1dfXOfabok3>At7G8oS<7%@q~UCdO_dvJO!!M}HxD zksJD@5b>3?2}jiswdV+!E=58Rof4pTOObUPLGP9# zZxEdj3eE&%aAjyVq7tsG&#EVUptVOMiY28JzIZv4p6*f)ijrd4ZSfUm%`jPZgPWPjaM+?2#wAQAMu7 zi}dqk<=kABQ#8_3uFphf^1Ktd1Y#l!5hasNH}~mHBp&~IMIx!`QpDRt9&3zswCRVN(wdq58`Y_bT6_CM~q26wQd^qas z4(NohT!Rm}$Pk?eKT>qlmofHjq60+_dEVH~ABit{!SmubJ5cl+&olh^kyIsr^1Na{ zI>2|psqWnDXRm?}?M~d>icQFnWmEn2bw7%-ZmFLx=^;IV( zo|n1xBdI}Z^1RPm9VqgzDtlCuw5lqz3E!!N|Bl;349e)!l}ZY9J*qNA!Bu6ZYm#AA zWo~PdX{s9LAv$i$Y@XwY*}TRPvzei?xw0CIkig946xsMOEnOBp=^`G^7c()__INF=p*SkH*;AljnzTO=Osl`x7ih_u9Ey;=l=}6i$WRtu3 zVDDfO&rxxTI+3Fsc{EAYbtY#KO|q%g#Fum?H#jJ|s6X>C?+NSp&jfjqB0)$B?-@w~yY4ixp~d0+N@B;Cj$o|kXG14ZFHug{}Y zU3U_}QRE|E(w)R|H2hGit_O+dX!;>v(t|AIDB#gY(vxIz)Z-8!&pHe(kBIW_N&M=t z`nE<)p~#=*k?K2Vd-o#gh+-+4?;S!)*JpW-eoMUjl2DEs-AUE;Bk3G1TKlKik1TD# zP~jSDz5A0p9L=k>)q4POY$&00??I#|M=eqWGML2svv@Jh0`wly31JeVKM_3<`XO>? z#Ny@Ul8+QMZNxPD%$)B%m~`Rj+YEt(lI|P@%-m5tl=R{VzOp`qgfwFH6}o=Ldnj4S zQ9+8rNCro+A`Bz$jTy>pMt7}bEJsNZfUa^+jKY$`|cXtLXk z94NYKMuo^2@}41^j@LetaimZ)hWcJ}pr{l_aZgfp<4Hx1mOSw#Mo%PZ%h7zA7ezXAw2kIPkv<%)qLDR$4Cd$njjRb|BuBj$ zzww?(A~}j&{Enh292sd|G?~RwX_^;Jk~vDId6UR;j<(ahNn{;IHR$MwA!j*iLPtjo zxxrD%mmkSw@_{4MO9zVnk$hj8s*5GLnlp51sV|LL2aaw{`rCU7DZN3TFq5zKW`+OwR$Z(D_eHdnC29U7Lo*x=2EnXoZ*^1kJy_QlX?LRjizV`i3?zwb0}I$j&PJp(K7NE z*X()S-n5(y3uI^vMJvd@K&F{U(Ms}`qxBT6!atXa`^cvDrqyI6N5d&vLteFInzJZM zA*I_flt$5765NhyzHef0N+nk~%0u(gNRjqTvphxXNB~E*DOykB+B3~{4LnR62F zIWpFamY6P*435@P&8x(-yM$($u9J8(T4K6I-g5McYThIMJtQ>CltEUS(Gt@mV(7`x zkeVA!&qy#w?Q0$|Jtu28+V@sK(TM6-O)p8wUJO-VC6J$pA4eUlr+fcICUeyA z)pOI&B*Bbco8FLp99^u|&GZ}5_hzWwD}lTv#W@;+$iz|cx(*ZtaP(8Pcc$M-3P*=( z2tI$1w;YwP<>2$4)at`fr`lV+Kad2D8rLrA^C!8_5Z!gT`us(n^}n{Vk`J_^wAzrG)M4Pv}}cR zj%pMD^ns(lasx69U}%*NP(hBO;j5uS8IGQy6)%o*7Yv}NF-OmA14tgB3rC&w0VJ<5 zYyk7!zJ99CPT0s%>H5CJPPoF+huf*Td_taq4CTAyOY#Yx94(4Z)!7S!IocfWOYDUN zj$Y8U-$6Lf(O-1!cM#rkw0?Z5F2CS5h@tfHz9hd8z|ogwA4vfro}wPb-v zVd+q&IgX+qgc}^qrl_QlH;iefQdCNa<>)X)rG*P&O!GcP&VpeWLw`_IMyNH6X^yj&9xMj7kq{@bbz7?Lg;X&S*L!IPemb1lO^0TdE7*V_9EA zTdE7Sc;2w5_NE%bE{&ju8wMps1nHHG*kYr^sKJ$B{opjf4waa~0hgHx~RO z8QMZo6Cpm5X%?XSx~9Sjj!IJ0O!&ezkB+uCH5W!kF?5Zh7D9Ry(|kcuOW{37A1P`j zxKCi3ujbjCS_>&0eWs|5@MZ$j%s=1W6d;tF$WU2|0)?&SL z=1Gd$3+*|&Nl^zOKALGZp*!Os!7z!TwiI;~T25k`M<@ywVmUfTQ70jtYc`@g=LA7O6_5gey5WJgh7q2&~&8NSfo)K56UQ4B@>g}hUl z<~)i92>u+crf8rLIhASdq-c=vo}&{K4HjxmW14p;3Kd3j^opV(!lr3V(?rowpO@}_8%A{-V`G^&SvN_ zMU#cDvzg}K6vYbjILf!d-ZVwHz%`TC*_);c{&N`GMA0-Meh!aoisFP59NnX6y6}Z- zcBeLH2qP018cWekAw7X<&Zj6|c+b%mie?G!iA?hywK7{s;V3W7nhG+`-6A=RK<-X#n@s19g6M>7|K<|>XZB09rSWvs92 zQifV!UN?^R%mft6(GRHkjw90sUz%5L8AH`-yzyBlByn_d_Xmouab7N7S82TR=Oa<{-5P?U?$_8iN92tjaNUI#LLnvE%AHq|Rfk%5k;YT7#TG zJE1N{nhV+q^*mB>&=S?abp~AoEm4g^@&N6mnu1htv{gB&I@_=Z;ryLaha-&u?UcF& z=?!S7)spKCa@}iHPOD8mQ8DWob^IqPV?C=TBh7>JenG9f!JyU&s&YY%LYffwBe|d^ zej;wYq`Gg^uOp?2Vk1}8MjH)ne4w-Ss=5cM*f@)FRn0&e=ojjJO>MQwpn5kdS+A*M zKT$PnvU(6{DR6pBn(B#!t<(3+bbQ!LW+iC(*!LgyV+PVq>My)8iZKarR9j#^@y zK|AWG%00D?K~6Q30LscHD2a(>vczLYmAbksCDNFrkC-zI0RmoDPBQ=Nd`9yt(nDv?387VbnwDlMDGE%MJDL}P$ zRt7?fH-Reo2CBlXb)RYY1?SdbMdET5n-q+3K#Yor4O1$~F)mPb&3B(EZZ#vonN zOPPffN(C)|F#ts1`Hpx0hSm3L}Cq`IKxs>w)K zK>I^|gLF7xm-VCC_JBcmR~-h5Mw$~6>P<*0(r@=I3L$Th+U>I_l(-!<$R+rsm62$q z(X%gGIoW_T*!Pw-4{=T~=vH)w)rolNgzu$DtpwTje56r=qwP7?d}JT)*J@c&&~76g zxNT9K$r~gRFvhz82|r{|S^wXxE@b&3d4xh_lcDL)w}r?~os8$(Lge5f$I-b`n7l-1 zp}HTfMM%_PgUSNAlK8{Mel_ZSv=${fNFhMQi2D)aY<4IRp%f=Wj>s0dkqt*2EpqX7 zBW_2HdS3J|3Y3U+z~9}sBsg6JB|7RE?OTc5Ni_DW?K>8z`bmTA z!?;p~L?A7!XHh&zAEcEdElO1~9chAZNAGInCX!g!d6Hj|#0t=pIGr-6n_q&LCuw7l zez&Mj2B9YI7S%}>(#W(qzF!jW(*~W`Vo_?4h|{t~HA&=Y<2)31j!acl* zuNT>XWZm1u+lw4U8gp=yj~BUxl(K&vIG-c=rELasI%CkTr7l3_kdAJR1M)}u_TgTj z2&AF+4gvKl?(vXrSrUJb|s z$R)|>v$!pG#fub2Isp9w^+Xcil<_8&k;FG;yh%-@YAJTbhXf$`r&xgM8l;a2D`{#f z#Y$S6O0kkiq~Xi$iZAJgGiCDLptGmvaRS_5SUk~pNV!fhmo>__SmZdHQFaZ`(e$vKCXX(Pep z8q$DFD`KVGLXIjErdKnssdUq@(RfcS}pPcsSs$jiFVeY(xBBQE@$P@>kzlI z@`|fNYMgakaff{Ckd=m0d7RMA2b|{&O0+KVs!O7go+nt8dc=lQcb%$)k+bLI6%a;l zoinb0{xB1T5!dtbc=butdB^cC`PL_Q&Kspfta}a=alxPhfvfDjOzK{gWi}>*E;`Cw;oF#GTr^4%pG`C-{+EopY`Mz)nv&Q{hE~;D&@Y_iB5fO1 z!ml}rxNOk;OBN-9^g}u}#NDqYak}atPro)~$u(KCwq*S^S(mmX>zbo3n|<4ocFD$h z5Hm_!GSncYGt4M$$p_SGC;9rdBiePn6sI;x4S_7zu`X%t{n``P8wL&AJIvaF1l^EF zk0gz5811taiclg+G!k)&P&$$;H)PE^kvlgWHB0sFM8a_9m#^+M|L9ilVldMeOzE_gz=c{oKjcRc%fLt)%`%f|_)a6ddxZX$_( zvBd{FZ!OquaROB;U_&AvTr<=~GdxxisPr$zLnhu_3hx=45>NKk8g%1}4g>$CS{klq zRAhdWl4RJQO@OyM*dMN37D~?f8!{J4wmRCsW0`69@#aZCe74^3v;W$k(s#VfSWKIo zGLD)Em71%vMJLx8eH|Dc5E{g~f53oX3H3{z1HP8iS$`~{Me2HVpfFPWEbTEW6Rs+l zn}toLK?A#SPdQ??;aYA-2U=>y42nGMKIE(v=*Y%L6LN2!mA{x^b)(K>0Jr(vEB;}A zN=+#A^^5GQ+^CSqGepKdCkez>*`#4J&+8}I*#vua<5^d@%`0` zV>EnFX<`=G?JmCv`9nfN|HVV37U~KdjD{9K4Ctugd{a*aDqV=?ouAA&7RbLFRT#YN zPo__*lMNk6DNL#(3>|AN^YmZM^Nkh1v=A^y*_W?8?Xsdw0S$vy~4(@f~27ToipL~Io7~CFLq%Zu% z9+=$Ls>s_o{1Fx>^)^f4-NsXX%F5+};eJL&s=BM&tUrole(b$2FI$uJb`Rb|2e%!) z&c!EA7*!lvDb=&31;HX5!{2^!C_px^y3TU6{sg-wiyF%%vRBVOKQ;_M+rc~pW$SD2 zxf2FrOy$6xueSB`r0z(DSz*=-`nD9tVHj6a`Fo{xVx)tMzOlv7K>HMPDDZ~q%QQoCYxlfmO$S_VT?xQOoeNBFE3uDlo zG7-MXObzo2pYIVICZ_xs6Uzrs)q+jR-`!OXlfp*pWK1=GJA~5{Mqbvk6 z_MfWr1k6I*Tpn*l{*Wo2feZs9@I*|UI0@0uC;V11GxGemqRCCbbo@*oC-!%TkFT7Q zDjc~tl4l4#j+Zqu*vE*rce@jK4>!aX-sLVc*sy=x_I0(ee6njOx#E3NO?k$;nmq7`=VW(!DDlp1()W94+&R%3pzt;yb~(`|-J*h~u5;zqd=E#hzv&If0fn-bc4hu?7rWj1oe^5ce|J0+fv4HE-hNJwIuh6 zYS$#^YQbmj>C20sadw5e<-so%9d2DHbKVUYwN>9Q+gV%qk-N`0triSIZC}|HCqID2 zntVx7dzHspGQi89fHrxr?vt%m^Rg^6FjkR!>9XQp;vG;csoU|J7e&PC5hR!iO< zLd5b0#QR+q3DZJMK1ypHUib0T%FE&uL$*7VpL2vDRi%(0p@f`-c^MKfm&jFH0v@*F z+a~j0KDK+J%{?p!Cc{Lhjkt(iJD!{bX;?$J@oXWIm!w-@C{N$?928$pOZ9u>%CCIi zKG_^j_FLREg`gcgsgm1!23xuJ4#)xPi4RcGkLCTJ z-{JeIr$93BIyn##|0>j4(f9fBDs4Dv>Ik|wx#yvGtgF&_P|Hx6;jzd5P52 z)`Y|WaB^n)1N$@@L0-N-t{*Xp^7J5*Q-lhCKk1JB{(C-_>Z2I7hwG(>$!)&D6xtyM z-huwHtIVGE4I`t=oqJ@BY0b$kj-C8RnP?2ob9tSu-Lt(YK>r)~Iy+jgJ(MPQJXtEm z;Q=-FJCAt?@x;@G<};}&AEGv?njU>FVo$f3UZ_mNg zW&XzEEe1vVGLwHoc08_l_*M+VnfU>BCIUNp2zht>0DBVHgc5CkrkC=L--(Z{Y#Wto zK)6Tcl}0jgxN z>y`c6)tM0OtB23Oot1~Q!4ul$)4k1!%2dX`GdKlHFV&z*Ga<)XbvTR4;D+fMAt)MX z-fR+*&rZ_@GNi{=SsPh`<8-P}cAtV3K?LD_E}ir`cAVEV?Z~ff?2t-YC=wW&c}OT! zNRv!&cJ|NZZ6!x_u9IQ5t|g4WkzcL}Qt_e%umWdGIdmh@RwNkws-6A`-f7dl!O@vL z`4Z@#p@nnxQ(jcrPq-96IdSnTju0Mb5)vOm>%oW|;7G6H-}ZpnUJIm0L+gPIXWnjc z(9z`l+C~6BS_1aRlNRb!lHK%eQ0Jt|iBKYL-EaZVgS4C(UMsAr1SZ{g&=gD#3Qn$W zE))muu^G-!7y=Wbey7)NvjCZ*j6&eC4?A-{7cQtVCvI zRC6XRMHnbMA&+uHUcw(DSJ%3630U_>8vx6b*cJoEv`}u~q1Hlr4V)%rBc7lv9Q|m~ zzC|tZB(vJ9NGF|fD=GXeHQf1Q_jE7_CKKqJJB9r z!m#NQqZ&oWZ-(Gv7+_sR)gw6b zG@$49_#hXUCX^Hwp3J;o50Mv|pNy0?uzivj0{@traHD7^cDC?QKj_;DWJEqI9PP&G z!t4IZJW20ULBiw01xUqVBcH;y42<`?NEEUN7``&ksFs@C$3xb;O~ZK<)B7qrj8o?D z={pwIm~qL-DMwfoTI5aGU1D0Qv%d0#84OM3#F^c|C)U7il5TH;gT_JGa`MNfJ@R~} zI?7sIV8u~nuLS$@%)plVmh$-_1;aDV+vF}WYklP@383Nm{Ls_+N9ak5$~TeCio_9j z@rC;k_Ci^kZExTu*+P0fh7k59ieC;N(iL`=P{fhk_V#*U@+gr*?s{Mf4HPI0TtiE7 za`h{7PuK!8s4L%u&L{T;h(Meb=%xGd;B+A5_ZHmLZ3>vunhai^Jf9@uq1Lxd2;P8k z`Y=WW`KfG_I{RST94oF+lLh2WKguzpu!|^?s`qGrSkY(lugc|7^27hhJP4Sv4lq>? z&<)4OPJCuJuN--R&(NIH!|DSzyOu1}tOCMW5adKI-aht?RC;|+Bu@Fi+ajH@CM7LQ zyaZ@E7m^7D7<;*wE!mjz75g+E2I>0c!Pbug(90CBvR6-P!P;PO%#T($4sr_BAlILK z)f297sk zCf6-Lf6HrX4(wKtxQqsnV4scj^0^&$i6+9{&4^azd@C4$Kny%e-l zm%#VT3+Y@Q;>eCcTIeb8THaKxg(DBo>G@(5wf9-jk2ikQ=ssiY!BL2){O|NN?kJju z^SqMzZWKg}{AuiEOAz?ie)0v0c60d*0IiOS9e+XbJ!O+!Kiil#+E5S}K-(HiD@R$N zRP(LBVp!K;s-d8aR~tv7Uto0xsm*y5_q_>Dlw#CUQ&gSY*XGHz|99epSL0+2knL6b z+<$8I+ByErlsxb-(f^{hlmmiHS|a}~$HTh8c=~Ty&MteW74q`cv?GVPRmGe#cDBB) zGM`h#&emrRxbsOu-i_vS8cA&Y%Z|7baTuW~<>vq9s$lg9ZFa2C$1L+XH5T>+<4?FF z@@jdXI2N|mVJcHqBO+IXNLyZa$&LJnixF>Hrow;>&GSQKCXb&7RqD^lkFs}ug^aG* zb8(6^T7O`yUU}|s%|j~3PiinG3F6hIt;+UBa_2W>dQBSqAIY$|3NqB1Q$G?Kd4Gm< zmKgd!BHy3&F-!dXKTcuMLSp$pZ0o_IOxqHQ>Ux{(y~FubV9Cru>7YinwA^^MiGPTN zaMKx%CKgx&?ZNx<**0Juyg(2ZZhKMR6w(Yc`6U!d46vvXr~e<08f0!AKC0F;&+q1d zD|;I6775`rHE=Xe7YR`h`*RXj6X|Xg&h5OOCw}h1YnV7mR-&6Y%tXqDM9RgGA5sYH-oj8nmmG}6R2^r6SA~NyK?p!(voB$c>M+@}=Qqj(( z$H4`Wzm#a97Qol34b$pyS!9)}S*v1HFxuW}`p2k;02p+>KSJvF06iQ?GVu)N`6|T) zISO3(z_|=-fdqvWEq_BN=7(T~7L${ut)cVOa`L;X2As}&-7`;OTj9t2Hf2mh&(Qta zB-%Q#tIuEbOz6uA7}?Sd6v5>4OeRd_g!bNLEXcoBUK=l~6NG}k5|mM-+)K5)B`LE; zj5XpkshAL)4_sr5!5MrPT`HADB{#h*!q@TtJV+*lhrVSZnef3*gnADNCe<737kLN; z@B_OmT=Pg2EdqlNRsa(=1p!;cO&(yyIXl-P!axwas$I9VrpS-8-X6U&9fM^;i0wXe zr7kJAX^+-OeM19>n_kFiL1cQ=ZeHJ#4nND^WSKe#PCD$V(H0AnW`7^RTaRDw;xG+- zYYqV){2ie(X)9TyA2ldI5(_iUJ~hlo?f_K^#~aE8kTlzkjwTG~8BT`bLQ)8`Rs)~7 z5MFs-!150}I1_T~Bs{c@bsy99_k?6W!lUn+egX$pQMX*{A*TCk?;OBn_&$GZ%R>U} zTl#y*ojy*_BbEkk3(T5m7uc47(UG?vhdH}5-dZ$YF)W6sc_ab4Cpmy1=>aEIyne2~b*Q_x+Qgy_e=QEII6uJ+8i_YB9xb;r7s9 zLG~m?@HfNG0oUO>7m%=kueYCiHPE^flNiYwbBdIl|Dir}CG8ZNO;ts+Jk<>Bx2nF# z_Y#?Yk$EQcABd(O6EYoah_!e@>m~Ysv^L>rUavboy$E$y+#-Ei%>v3TBK`O00>b<% zy}XX9tWyR|C=sQYXdIFPG3(fi9XVhP+_c3VQS>vIs(Etu7_Fd5lFWqO{Mi0>ju5t$ z$}i{JL0VCVs(G~;w%(1xTaR4#{Z;eXfUKMi7178CicTEY>j0f!aUVCv z01JA*4vl|eBR#GIARKX#_T(hkbnv+og5S#6H5!iJ&!(RZ!j<@MwFL|%aYc21eNo*cNFTCK*GF*peQ!zH5o zwUt#|pouRci$NDd%J95rgiW)mh6{#&Dia<=?}OCzA5@d(J{L<@Ze zTs5Dib7W5OnLQ;iy(@2;!e7kVfA0|daNZg0M9@s$w5mD>Ch(#jmW~O}_<|w6YGiK@ zgK?4Ks=ZFvjhWNg^_U>T;Gze^X`xbGzYALS)oeGzr~?+TkB8p;LXDo)Msf$%L#3Zg zW(Ef^S8*d-<7lCBoR$Sjq58(=Fh3bUX!g}ew!V#%HbY&%az#B5R&QDb^;D5)Us9Gb zW`Utj4f<0_mBA0L_3et1C3=FU=Qv>-b<3HKw7ODz=Uk@I7`KcB)CU0M!m&~}+(~G< zihBVK828uo`eB%Vp1t>_X#CwW`9JHe04AG>-sL#19JQlQ-kSR-pR!8Md>bt__D`(5 z-d_j&R+*Ztevwol)s}92vpyM^m4l@MfJ2_7gFz|nYnmEO+06(HZa&40(Gz5X^jw8( zWt4{tx#5kmnC|H592mzToVqn1fLq0(>+RG0=;I>fs;5zjbvF)94`&s53L>$WcZ8RJ z`sw%v%(7)y`O{HEcZGlvt^}l^{aDH7NTd78p3RX8*_t{B=5MA#BUEcp)`XfWWn+{& z?d{eIADq0H(MQB|hx2<9$d&p9yxqEXVCmohzVxxXSq>q-!kj=*qQlA42?x%4-Re;p z_Ly|A`R2OIgyh7|YZBf3CR!*Za6jpH`YQwG@>vR!WWp4mL-PV(Z1n5WsqvE(yRQjC zA5N3;daBg$X%nd_Y&b}b8DK+CE0M{bif#Ji%JlUIz-OmbY8*3kXrKA49|MlBkp1wh znE^+k6eA`Pt5gsA(ps{dy1BB`#71m(_*+<^D=k$2u3@WpP9|7|+=BSAoyskfv=0+6 zQTcfPHSXAN8kiNG^i57ZHSA)34(xvRLuY*641{R7-Ef=_yFC!Fo1%R|r`j= za~C)&hbC!Wjxu1wQoG9iIXBq#R4X#ST6Fq~p?Ohn*X4H?j&Gtwonqc5uXn~G(cX^= z0(y*ygy5@`h+QGeXPKuj>Ns{I*ITx{p++$CYuSfEqbU%*!vJ~nuUg6ST$x)WSBd=( zN7p=U8Dw<|p*4G0hcg8#&-NKCpuWX=;@r_ITHcl}@EIz+b^1-&KeBshz9S(rf3Ydt zubvT>;olP$^uf7_)P%vkT+wAS3F8;!qwONX1TxM@P^{l?a?OaPh0`@nO&V~;a%!;KuJ z!@GV<^4mY!o%;bTI9~|+HYbxe@Z2!Tg`9p^LR1LbA2A4Olo#((8gDJlKtvhLb!v~z ze0lObaH|#i)S$Iq-sQauq2`Cs1lw_~kEf53%ilFVYC`%LGGnSVZ3ff9hTQc-1BrlX zJk+Az$j6zM`i?v9#-9lrr=nR2$|D3$#5rHmymJZcMUYdE+ux*PU1QR{cyMCSx)Vdz zfC#&0my>=;eO|(but*-0{fpXq^xgyAauty`;du%b$3qprJ`4kGO6JqE_Q;TX<+M-@ z&cj4+zXG$o}jqj zc(6}(%k0gRd3%$M(0)h!lnqG1xixJR;gwjVqu{9G z6`8?6&YS>n^{~#_%1fm{x)~=>D7_)Q^$SDx#mu0A0i$Zbt_=VX#o2XQpP;WyxqS6| zAiyL0kUF68^FOZ{5wncea8Kn@pOQa6{n%sdMwqH(Q+!tAYFPmpPFh0#RP23J|@K)!XVP_6}#%ps{u>MLxJg>(0 zz+FSbhJ#O;8pV57E!rnhG^flNk<`S19qBzH-OUhw>0R~3R4+R+zgZ8v58w&L0_z0wZLVVfvBbcRr1VHwp9M@SZBVdfpe1ygd zFq8L<(+_6w$}jb5IP1KCG}wbD+sw0JyI6hkK0me?Em^Y0JK*Y6Qm>;JGHZ8kheCw* z`G$mHVjT!r$m6)qn-fPJ)KkG|tIk9()yib!0LdO};2ZpH09)meA(26NNrJt;NljRB zw%E73h2_1ipmxG-`+~WR9r+ovS5ic1s7I*g!0ms>>2D3*S3T=N&8O}$Aw`Kq++rb{ z4@rS_e5FQro5xkTpOmsk8{M+g-ySoj(|nF><+w}$f0FK%f((qc091d)3i)>tlo`0I zIP8xY&p=y?uv-r;aNlk&-Mxxm7lqZh?O>D8JUeMf(8GPH-6WJ(SAyAx-sG!aEqrvp zjbI9@Gk@b8`E+%4pJ+R}nrri!96=+6920!yvC>g-!$i)k9LRW|ux{-N46YeU5^ z*+BGy7!ZaLs;1C>4s+qLtu)M%)a}NqQX^6jW@#`*K!P#ELh6dRj24M55lQ()&uZ=h z)=x1ef#o)NZAdu8VJPyaYZ?*!ALE?sEch84gFgNvo#~FSnYkyk|32)Snt)B)0eC?{ zK}S;?4ZsA#r}R@PAfSG*o1S7HO5WW{INYumf$i8vHv1p16{Pagj9rh zCABJxC4TA}#9S8%Ts^o>Zu%^?@}G!HKK=E|LlfIbGn>Ir2T`A3SZXprvPGci$c>I zMCuBqK7+?!Y}sPGUua>+`1$A_R@a}=X|$zfMe1gxj2$z;f_oriv8*v#VhzU6VS$bN zYGm#z5+c|`9*A$_*@ZAJ!I0q06V(p%T||={rAu3|)qZkpO$(sA0Rgm~ zH4X7&gQ((%6=0uY0&Y?Q`Xyb9a)IB!Gmg~)f0nQX%1+kY3~aKK=Gx<$T$RtzZg@9W z7q3;tWBi8C;2yc@L~<&O9yYL9fY}2Qr=t#M#7%~E zT|r}aa##2>v$a_>BTxfD$8}ObG_`ndMTb>CL?V}g=_VsxX~)$WPumto7}YTCUG)$f z>r>NVgA3Fox2rrf=0zGtwI1gS%O4wMRBtvI0A)tMr;JL#Q;PnQ&oreo5(L-r!hVJy z5(az-Pab%D_V50OGJDh4AlbhhIUy)eThzUZNMrgQQG~z+Y99TQ*z%~nsa}pD`AVaJ zx$2k+xK`48BEIax7x8bcth2)QKQp)<)(l>qzUEg4NGol2Gb5*kK88uWdiZQy9{j*2 z`N$Ax9XN2w@*lR&%(EWFmmY-ySD$IE^+Wm=uB19%r1+Q?L>VfNv^pE+`jEnAXZhuD zt8L?skK3v@ekEs$g81zsJ35-eKYSV*l!RvpD#$EVH`#nLqRlPPdXtX+WmojRgTsB3 z#PiJ(MEpd*EXF&L;6j=62vLu-93!-s#{ZpFHbm$EWdNlr$^X2vr6Il2lM0zRs0Yvn z5rPJpNwhahvyIc<-Ux%Or}e)ED^gb0^!zDLa8#hMs7UajT{&=qH9k5Q5;ylP8%B>X z59)QfHW|2%3O^|Ci@9)rxu8z zc0acG47w9Xj`IkHR;v9fJ?>({ZZ{45yiiw(+w4NGOYEh{=}wz{-Ye=`v{3%Gw9D0m0Nu+vO1W< zk)BY`7u3O@vLL~5w6)A0*oCOLILQa9doKWS4x`|%E&4=%dy{K;=76k8@@iPqPiO!i za#xXoXjPWO_?<~QYuAJF5mg4FO^0OqP}*NDtdlDuls#(@vnbQ_Cqa)u%vFUBN2x$l zD^l|~OGODH6Q>}2G_!rvWgtu`YdmcC-ym>7FqqIU5#u3`Em6448ff$*UAv}P(Eg3R zr>_Of6FR*S0Z9xuNXk@f!!?nibGJoXenCrZ!2) zFEv5v?^yCD#|A#qi&@}o%N$T)i3p7r!Kz>9auuy}%JfGpOt#L=d zxGzK>^sAJ$iN%gX^MVl;v{t1?)dkP%Sj~3ZI*a5E;$KQ@XOFRr6Wu6Y81RRM%lYl!$__ z03dvf0dzOQP%B}Q0`Z1CLi&t-})U%a&M7KjjrE>cFWn>T1c-G zzH5K#vHX0fRaD@M2MNNGT3|sb0~uww&#sQ{4V;*hYl_6IXlj~REXUJ^Pz*3E6Nz^pZDAc6v{=;p$2FS2SH2(OPC&5IjlwGR05Zd)FlXyH9KMMPm&I~^1^+(myqJo12*Q0NpabO(k)s_Zj01Eu!2wBR>?G@j(u^&|@;*0lqnA_WG$%1D5xeGn3N`r0! z`vHnLq(b6FzCz$d87d)~VWyGz%>_*aB!C5cDof=-924%&8Eos8xXPjpc>gxp-7*~f zRv=+j254BR$Xj%o6u1#&bD@p8`%EQ7F^qSeu#%&Rc*>lVZRaXK2m#9<4*VPB-ZHvl zY@+Qa!0L975%o85EXD4OwP!_zn!L|>pFSr`lu0BP5+6LVM^$7}3Ne8mVfuW6de(D) zj2F?Gn`jg3I*5@|U8tnGvwQE@*_*4A@I_KTLc~aw6?nW`wJN)8B?3plaZH3_$X|=| zoV+g6ztEU)glX7Mehivl&+QQ?n(5V_kcNqU-_lrtcYD0sK-`k<8;ULISxmt+*FwvD zLqrmS9grm_`DI+~MD+0<#JN+Kl&S6yE#v0ji^@wv4no`?c7xmy>!90>Q<>C3vb5Q2 z4Vhr52VxaKsJ8WDX_E(?+uwbsDq(kmkX7AsJdjYtQfmd6JDGr}qQus}^+Ke0)bdll zJlPX?A@Wi%iRmSlUiKEdzqAxLlh`^InM8_b1~c*J)pxkVJqFxnb&$_S;}TL3z8!yf z(Yb@}nh4*U@L}-+$%G8VrIdHP2V#q50Jw#BK+Taya*Z_rDg_#OUfzMXI3%JF1@LEN}(7iw$*_z#c`y#K> zcetR~oz(l@SYr0`Rx7eKk}emJ=g_)fhBg~*v@Uk%52gp??Ou#xf7D>(ruvq|oky3) z{Ke=c613Jr3oK12eUXefm9h!-sM*@0Q`_fsvb*oXw|ornY)c7 zM33dwi`_X`I`kw&k6vRb6}jchyc{3*ym-%{Pj_Q(t;?U5oLXPcI+cjakxvv5l+g`9xKJlP#tlg4++{lB(`>img@7EboUAG*bse!=$F_qB6KyrFpk8LA8Y zbl<%2M*j4ZXTg1fh?{Dyx_$DUkX|R5Wld4-ht3wB38=Hr1;UXtOgjxxEutWQUs2R? zAT4fMxCd=wUDCM`An)3@yD3tnL*qfRZJs;;nooEU?TPeFPEz5o@Ohx!p{o8jN*l07 zkBj*QV_Nk>$;f3zUD%0~Gi@G-C^+CdiTz^8fpc`wfEl2_I0B+oB}WFKXN>TofIL;n zftErqsL_K7;Z(2OWqGH-m`ALhov3&J0(R?3l{iAWgg`NWSem4uT*ryr`<(a8O<`Od zAthPx_foV?i_pB)D9w3L5Pef4G;b3-BG0fR!nnOF_$M$NmGXV-p~Cee6G|5cB;puR zwvWI6q5zCU9JQ926YMj}encWp-j`{H$w-bjYR(hfQ8r0H&Hr+VsO_`g2NV?s63i_9^d&Vdk4f+JHy%wp{}-^A%I=6P$hGZfj)CF*WKNbiC#`iF=>kd;W_j z?mqqbJZIBK<}dSHyn&<~(T^PSfsZ&p&^Oxc9kbW9AijPq>4@ zNav$v9mxl4C$!kszD)}qH=h*zEhX^ELRHmQ__a+R%{mdYe4&197|gf)(QRp^U3(Xg z&fyz)AJ8*M~Lmjwg@<*OM@M9%NB zQ^;*;%)if%H+g8Ub!nQKF*fYgvDQk|z}o-QL^j8?Mct09He$YSHLM4s93~ibE-GGd zWSY6CE?bs;nFfpdaG9_ z=P$SYVga0~?9?j`=V}br`S(!AfoPt@Lf8V_?ONbt+_?OG!5ND_!;8pEN$+L;yl!{f zB#%49Ff%$}IPV;|rGAH84;bF(-U8gYCavAEmi@2@k9}*|y=viKJcS6?cF;G_wt*de zu5CC8<=%2&PRMR5gO&rI|NC;8?IJ3UJ-L*P@$+p{>yn8r|8q<|;SX*#Y~JQiS{5+H zWE{>3uIQP?6*#FzPyTo#An$8 zY2U#7Nva9-J_e*D?CY)f#gOyA8S4HFToB7A7g5Awe@(j(`v7SYlaM#T$<9GBZxY`$8IT95< zJ>j>{%c>RKYH16<+jkeF*_y!3P+-3^vU>ZPQkVe{5I8b%rGLnz3vA4W_n7db_yXr7 zVRdIss(^2SaVFRFoeHt`y&Bn-BD77L!v0a;!RneOI!;XB7Aq9ZG$I>rJui%U@hX#U z>h2Y&Uw9v0m=JNT;95NZDsKhhmU(_TS}pMu264f8QGPu^T<}ZoYFIN~6aD9o6q6Ly zYmN3;6QZw#vQuuFCeITJUc*n72&TnsX7KJ{p4X`}giSVW&HuFK`B2U~^Ov%qSsjNR zKA`Fw2jA3R+2aLpiLy&M%S_}zHXJ!Ggfi%feo@UN1hR!IqB451afKy$=_bZw8&!qV zkq&KD1`DwCDf+@@MudX6Q<*BDwjbJD8V}_UMxGVYk{Z7A-8W1&6z7j{@ygiY$6XQ4`0Uz^J3xk(?a!(^fP_R~qHJwVr>~^mnnEnK!$ctK8o?t&h zwX&>JVIODDPzT^|0ZxaHY?1Es+o!`naaT8-34_PYtL4HqO=z5c`HHvePqvvSH=5Gy zUy~rwg{SSTdCVs3N@&c4gn1gG!el%SX{_(w{UT4lDK@jXG239R!NXuGw+3h@%)d;7 z#-Pk9qVl`yZuS_yPBrU|auEb9 z!eOdlM22Lx&2|)vUE>*nGa3xZ{O1lO2}2?yxyH_NKtZPtRfn1}IsTfVq2$eZ?$nvL z3lZ5SUI9RoeYk4e#7n!;Hbr|P@rIWa+26`WP`~f*`>h-KX}^8Zc!H*HR5A-z=}Ww( ziQsLbyA>Y8hSdxzDix0WsEqBIkoBw^vh+7uPx^JUYaz1|JSOgaeqWV;ZxMJ`iBvz2 z@hC0-c4yfi>lGotK60t>mW${ujd0;tcki<3W~<mw`Ok{yVg$sk8Ed4S>g%*F?*sj9 z3+{Fwx%j{BL)CR}mTJ&&NhRI8XY+-Mph3msvWo)Q=jq^1RCfjl(=0w%Ukj8K<2o6P zd{!a#ew-&-qGSFjsl;@<@u0b$9no|Ph=<<~4dwcqV#b@p*?GXQ=(Sbb7agW0_ZDGm zd(lRg_rV_h-N8ZacRY7mH@m#jwab81@3`HTxd4dBCq0UoH_F}Dc1-Sy->Py>UAEFp z*pPdh1ydN=!V0zUrxgB46s}FohdcE@?J0N?GEV6ryb-gv;+p9W4odHOqu96HW(uYf zi&~gVGY|Kp6|>O%>iMlIB@5e~_3ic11HZW0e*&Z>R1b#%iNG{vIz>Odw&*wytuh$^ z_qHv)e>(CoWX<}cnV4qZrr++noqEOC=)=f3-h)Spg4+czce{h5qfb}k1p%L4^`g_c zH|x{N-|&DBE!`QJRX`8sxen}g_3zgY*H30C)#B5*0@^iTV;uWoXc^~sIfE3nw$wq<%w{C>@w+SI7-?`84O%q>NB$zx4;@JA! zwihaQyFJHoXUK2jV=)jMF?ZN4NDHKy{C>6|lQt=)5?qkl!Z}=jb^g>>PSNJ>_2!Pu zmE#Stpr~!pOYz(Kq~X^As$8R@o?l+ZFcSXE>$^Z^K~(?M4NJRu`~!~QqvPNptvl&h z0ED+yBuiwV)HNb|O)+pr_>+2((tRnwv~(dj;r{$nNN|%q9Fu<+{|S@-`dd6E-X0Pp zxxdV;vw&n8SA6C2MK$SlFR+`#?zIKosu69DYnS3>B0ReCbj#1xi#I>--UzWxb6;t2 zUyzvGUBVOKzPHMX8{iX2b zY|Oya7;4O#+1^v3gXz?gZ7DIovXnQw;lreCcjW!i1xw(<=TCRC?VH%CqhEBSXN!29 zpR$xkUEj;xN(uZUF!ioPxMF3lR<>U#fOBNVp{ z%fin4Y*+gVF_J*a{;%cf7fA=UQVe%?i8;pt*aX1)Q2*^#{`(uhyKct&JE4_y)@6#U zWscj|=89|X)At%ul9#ndEOQPBKZ>z}{ku-aXJhwzX6FO7w62#M!IEux8KAY+u2Vh= z0gZI=O?$Cjw4hZ17dx{om-TI3x5RAD68xri=cbnSzBBmVz~x5z&QGUAV2Ki2VbH;E z_RX_al*P~jHPmZRQ`5vIRIUSS{c$So}Ww+04?6UuPb%PwzNf zXCAfx&{5Q?onXP~x9$h^hx5~g}~p)59(3-xQ^sjqaplM%_?=$k^CghJay6$ z{0z;Ezw>{dkvQs4`>F~52KQ_dHk%nQ5qam@bc`fm2SjO$m@OhuWEk5=u}82gUZEIbb&YHDoy_XFL` zl~0$UGu<(>M&lsz$%?-6)kA`2o+}+zW!_$l2O~xP?USvY$$v)a*?MV=a!f%rUv|&~ zdiTuL%;&qVu@;q_5-!Iiw&}+{G3Kpr?YO$9+^J8S4^&G%-xtP!Xl z^#@#SQOM+SrhU>t-+o;l@f-dueA-C6RE~ahIJ>lD*Ga4Nz?801|9A8$U>Zk6{3L{a zWF}XNc*C*7U(>we0qj$+7&X_qVc)%+e?;tkVdLwxOA~?1@HVyDEmK!zpntQqn+`H! zgGrwmNw7u7<&vIR*`ZpNEzwBZw_9%YLe*NnfQS{GWd zi!wORmdH#iT@|Qm(KGzW&)$+ATa=-YrR6fm$`787i1tw;`c0$dS8tv(uJ9}HqhVXw zmGLJnt7R+gN^idoHO0#oAl>QozR+ro*jb>WUpc5rn7$W7@r_&PrCiJQe(bEYY1)s8 z=TCSTFB7?WH*}RJe9DF&WtVw$bFD&+7^Eul+g&(T_cUNG<%dNC$pTja#0~~7EP1^m zxnlUPYsGOGsr={5yXW>V(*8lX0Y|EcJ>u%mnfDG`bQNBm9*kX5gz(f`T^ zo>uQJ@hkWAc3IOds5AgtYDF|w9b*=gr+gZ;15Yn{-{`wWPf>|enH>!S!%XgCf(<^#hoy@KxrP`@fehQ8(Mr3 zlk4pFj!ou|zrhk^$KjQ)Z)q|rtCEeli5@ddJ*|?Y<9ADlc8ZyqT00dpcNt};q?Z9K zdvwB$q{#^&F;qABr&;H@+v(Eiw6sRI_bYZJ!f)PKtDQ3N zW>*?rv6Y6L*5wqM%1UPsE!25g4E%Y?&c9m&l`od4 zKQR{sC6W}~9aSZnXng;Twu|kJizluEk7mw^r;3u8^*wtO7<8tG-#c=~NBipP4_eTQ zFKo^M>+;u%20wIuc@@vW^3XKwbh~Kqb0^%VGphI0;LC2cebM+oNZ(gMe;E@i^h31c zDBtO(dGQ3_w0=^8GdQB>R74rQp@=?Zfw6ce=Tjx6Jw>LR7O9|{ zm|%nU(o2)mkENH`tTEVXNGdGi;#Wh%ljniuTOBBOiyiUai$5H~ainYJUe`3E)9ORh zySXHu2V~-vgO(__)9kGstQ*V$ff2^G93L+G{Dv<#o|xzVv}<}6_}c8k=KI$o>+j!9 zY`%Z@(&M%BtZ(5wn;5W0=*b?gU#%!47yXRC%J2ZaKuU-8^RZw4MO*uV=zrbRZ0EM$ zy{p&t(^NyNyin?Qk@<7V=v}7Yx_aOj_{VcPFV-@pgR3y^#fT~Urq|Qq-Tv+UE`cf^ z-?q(+MV}sL2I)6b`kDomWux zB9$96k+J&n{?U1VOppZ4&dw0OMOxQ$TZToy$$h%DKL$sD=1yle;eOhUH}S3@8E2|SeR z`*)?Hh*Okf@1zonknE;7Q3;bQ$ueb|>?g9DnM524NwzFQDm&S;S7Pi_8v8PKnK8yT z470uWROkHqz5oCFem>9K&vUQOeP7r0{a)97V+4t6N=n$uC`2%Y-6N72RLSSQRb}R7 z2M#k%_ih>ZX4xU$T`zoU(32%6Id+vdyMzU49pAl_pU1~yl6>AE`1-~QuWULSJ$kNx zFg;u21&`t1f5ogm4LJExJLG28~sT;|I8(o7BuJezKyL72wDjRN2q+r zxX+>JT5)0O*Tuw4QjrnO>ilG`O+-yCuivM|pf<5uVQ(L0QB3gHS7SxP)wvcZ>ppF* zoQl*e{6*UR_dzcPS?c7V-uZ0e2*t^9ua zth@0|@;067*TMGhf~P*Jjv>e!-EC6%V)s6eG-7XR8*kZKwfK_!y8MZ|TIV2fDst$7 ziXN%*8bgs{+){{=abj>QXvi-{<#wGNHi?z{n(di~GGNG13UC%eG}zj$H?EbZ-(Wu^ zi?IU5SSQ6;s{f>_4S}BN3rE~*46S&36Gtj$kGiW}wrZWOa&#Z9aywXkM&G&f$h{G- z=T)M!f2D1x6-zpoG}PWL86S3ixj`suIO$RnIWq8JX=J#dX+!u`gK!1-P6L&&ibJk)xAY@ZT2gIxx(koZTsx&WATykD+@bH<< zy&gV?>`qJ7NartEJT56OLM-gvK37!ujIi}sqo}Xr7J^V@(R9Vx60=Eq$&b6vBWeWR ze?+VHQmhB~r&sIWz~fcy+KrFeH7-8DtC8-?`i2_U6)9U3UY$^L-Rz>&GDq&qjodG) z`u4)@>*2>z>qw(-jI_^(4F)TRU(S!dv~VtQuf3Z(KI{~qkyTwa`s$2|bLXaA#F;HK zq@r#yvoMGiCWc~#A?7xW2j@LmVd(~}PYKQiNaF%u+vQ{nP%v{bt1L7{Yk5EOLHXfS8l zp`qhb7$Zkn%9U0$mw&NjUG>Br$n1?n8~iBw^VDL5i%nj9zm^R>$^~Cux_I3AZqQI2 zTuHj^E>5tZ@o2=wq&$=j!^%rw-KPDbMf=L<*xBQEbKU!0Q#~uXPgXde+*HlZdYl=4^IY`gH6*4a^zv!SnlyRh?K= zKYeXDdsB+^CF0q}H~T9=>wZO^U$-ATr-YjH!%eEXZ``shOc1O%^vbQoQ97t+;D)a| z{;G}3fTnVDaezyr%^FTQx#h+4zhzx-s0>q##~xm_lqKF+n`|;+84^5bmamp{9m~y; z*R*!C;4o~n_eobXriK$Vn=54l9`}LF}nm`J=o4^ogH5)RX{9A@5eXXzztyA2A+#g?1TxwBR zMnqlhJF^jGww5(-I;7l`NzndQkspz1n_x39WQM&^QdlM%?2}+KNz6~woi`to8jPdr_XmOJD)Vl zS5)OKVc|ZH{IfEh_6by2gZm7)^A|{bRQa~;!dUudhQt-PeJP+9TMWIihy%xM{?QFl zR`w;mb$a?{+1dGDuJ?V*b-8ak+<0+>@9T#CU0UR@b`A+xJ%1%bdYH-Mj*6*j%53ei zyA_@O$ig13klord)gi3$xWIL(ie^&OprVc&Mr67crC(y*3QE{nxgitkLNZeX_XCxf zX(R30ssXv^S^rbog6=|hI~|8tecWqqNLqQ~+xm$jL)%NY7D^I!-V(}5kgQO=E?c8l zMV`^~m6JN(TXQ$nyP|u~u+xjGp_deVWuqancd&mt+8tJ1O0pUmEY`KLuj4%2+?B$eam7=oqva!$fpT{4EW}GfafE#o&WEaa>zbzlL z9w-w|`=lxTET>a^!_&_Np-%i-seQ-oec{YqU!T<&8`cxF(bmY@5q`@)=qLt8qxj?y?Sl$7i!Jy zrF(a60h!uwwA+Q%$}1!t!;wYG&&@Fmo!Z>O0ufHJ>!6})>|yH$(?wnGc7s5cZBmVB zR zIiS`O)MkL%+j5G6DF#1h?c7RKnWp@=SOilZgIe%qq%~bnl6c0*X>+3b-b-H#b1aR^ zGwx`01}0KOi2?m6xr=85*M;QEWfnChFRZ ztu#F0=d{$W85W@GoiSuG-=g^llcOXL8vaoe^SsJ>lgo#ZLTv8=R;M%9c4g*yRRS@n z>ubAZ;ddiQPvIyN$Qp-qv5lQ9=|peK>yp$-=kwM|Vdv*~Qlg<`sX5VM78gZy8Nl9Lm__UR&NsK&s7Md8K~@SjWzC<0Fzd zY@`|+AezYoaizSX5^7;x`ng1m_1{oT^I|-(Ma{0AmQf&M9RnRm7#a%T^wIif(niPr z^HOp4OEXB*-`<6)i_Zlrih(cV>=IHGVc)j6d>T@?4-x{EXbuWGHlA~Ag|6Al0XUCn zmu!pSwiE{9)7yE}!qWaUl0tax6nbjV?&EN}dkvIkEOe0H@~r*lrAmxX&N(ZXd(NS>*cOF@vghS}7Z?pCxFjw>ab6OvNbndgKtT{>*+>KlD07oQ z4T#|a&gK9rVz*pT0xegRKueIYpFqnMr3f2R&^#OjfNx3*4oJ|pvA+&RHpDPwM| zKSN)W&`w(2zUgfKq9=O~qhiBFY4euY^0DJi#v_I<%Y()514Bq}*aL2{2i#JM2pks? z(aEUp3QQsOD}Z0~^)L&4?LL2hJ`h}IF(0ZF-K-m`Jk=^PNMAKGoM=5=LhgQppLs?c zEwN=|zs;pp)w$n|A*~k94|yCa&mn0`5K3)AD7!`s;Tx4UIUK=NvSqdob$hx(syfAf zdutO(IW%&{k+*UzoiohM!l|LlmzexI!o7N9hk*@7+!|c^bAj#yGw%bd49YW{>Uw}L z@M&PLg&Lx^fi2H~*InrXB1a@6ND$%$G~;oh;E>18wPVYCb$}VgVI6E+46zIxUXzD> zHW|p0VqYO@Vp%<@Y^0{Lks3erm6&ozyu{*m!+YPaDG2xK&9i7y)c29RGf74wNB)_p z?auRl+tGZL3`Vm~mHe823JF*cZi5z^WV5a<cr;9oIQR$ck)|yWeRP05xq}Q_Xr@GgOiji$He-ATSgpc*TX0w{ zvg^jSY3n2#13nJl{gKCa78!_SJDlc?t)<#fbx$_XU~Hfn&jqttOS;Z{&f>P*GWGtP z9UFZBn0#zt#*(J-00H7%3vAD*+eY`;2*L-iAD>&8+2ti|+3&mXg;)iHZ;IiFfJYX% zD7D{-r&!WkTgOHpfE~<7+Y+!v+;^r6R0LS0jB1xOY5)@YP7m~CC5Q7m=@Os=Nd5rH zcWT^H;B=4%nYI0IlR~!?k^+Lo)><3sYvo$1cr8`fT)vhJ=DRu6r+n|P!tSra?yth` zUxDEOYpAkiduoO%8kvyhWTXWD;ZxV1BkAL1wznJFfM*3hR~Ia_N{*qH!R6kN0W7(Q zZCb;DF~F3If&duY$KY~$xx_YWK*d;K{+K2yntty59l1;F1UzjC&P!w=wY!`_D3Yj# z0X#R~4NLjdPWo0;Ob#DJvg)Pkh%qYLHc2oY( zyRle1)+INKT^br3dL_5D9B5_ze7`ruksNkl#Ij;gJ22S57nBSRRb+p8;e7HMo7jP- zDdNyAF;jy5$!wZQb*i?)pbo)%y(4n#V3yeXaF9gEFAz|=$4y3-tc6u-Zgnhcx@HTg$m z(Z-gF%HPvKK$tYA9z}QxJ09{0W;01Jh?)+0N2)mhNllL={m(XkNYl)cCAAcft1MwQ z7eBb^2RdB78jiUV%X6iDRdpfmaT#4(p_9oj2M!DZ24lZ&z>^F6y+lg_gk)XTPQJqL zmDHhR%m##eK}1|OLwq9GteWw^1aq8!X@l#h0&vh?Lvr1| zTI_i_YW>eQkGBy`qjUdKRSWpjG3`b&JnnIuqvp7`=?P;Yvn|@~$8Col7H-?JZrh@3 zx)w!0Qq;oGf_ocKcgPN8RtiH!E2RUj1V2?gx2R6hMq8z4i=TV2Nrdlq=n`6B>!2oFFu6+UQo zM3?b14i&=QiQ*6c2cT~9`IqoUVS*7Utb z^}QHCV9dBG1nYWY6=LDC23}u3DFGYp8&ekSbDwd2dox?la@g0os6-f?7j%$g3+J%< zDre`FJ%86q8T!f`c(OX!l!-x!+n9DFKPzibhK@9xlX0jk>-Q6%zE-iQcCu*H^_tT$ zvQoEh>r4V?wDen#yiLJh^pjn~)c0omKcn|W(PpAV^FPtQC=h)EgdN)fws`_28w0|t z^<;AmV(n&(l8%`CkIe}b(+wC2!)7FqJYgpQr`>GGrce7z;uvhsi$MeL4H5~E0Q7_8 zcXlGcPDBBN1jJ}y?A^epnX6?`1P00V;illtnGMu8bH+-89 z{`W0Zyjo0qeF<1@O1m$5_-se-(hW;-?5h9I?c6W>mPJwQ3b@Yxk9`lv+|w>bDnk-S z3j@>6i2cQa_N8I>C5S?@RvXhn)D|fCHl<7J9DB0^woL(wBZqIwzqJKBD^3szP-v}e zaReL#7g-u^Nvyg}l$}FvOJvEAW-}Q5_?g z-Gxc#@ERxCG`FT639e24pYkv11o9t9P&=+9wWfWHTWSO%;qP|sz38(ZX^q_J+rTfe zLm5>znX7|s=1<=FPMFxp8*0T|lr^{!AWw%LJ$9m>imr;rGV=dn5g;=F+-}=jw3{$$QWbbK2MXkq>H4 z#%p1rT28RF!cfEy|l{pw_o{dLKfn*rT2(SF*;Q}0l}(|#0e?t2fk|3!oDS1 z`TYGFDgGitd`hWv_Pii(DQ@}&Ozjh#_nfEd@!P!0D%$595@p@S*PsRrdhvwM6*Nzk z_ZxRqS61RM>uQ{lS9eyTy1b(I308pb_oEhF6Q@#0${*gZ^tai-v~FSk%jORZl#D@#X5>E|qzB3*zPklolVbZIMcujYM*+`?L$O^y&UKE@ z?%j}7a)?>KjOJ;3`pM98!Px2F@x6!8KbsxZHJST$PNSdxGpA=>O0@Xz;xOI|ba`g+ zml3MVep$$9>o1)KpUC{{mlTiB@@`1|oW)19w#%8;<*}BEG;_jO( zvO_DfH5tJF-1#2RbcuU^DA9xg=5a~MXZn%cDeD7{|FuYDI?pYzK1CQe(WccjOnd^BmgWS;9pAs zYdZ0(G0DG${FJP%!#}qCNPZRR#1>1Zfu=;tA0oC>jAqT0A^VIEi%Oip8ap-Rhh`ne z(Z5R5a#zMrW$a$Wh(0s1`yoScM#gg`;L*QUX_5%A15o(gsull5$z{tPq(joIwcp&{ zIngx-r`UkK<=FbCYTuPp0#CH4k#FcgMAmS7bEMcK6u}{AC^!VY91y+suNWLl?xl4R zQ>IJ2gTd7$^j{+_Q#$Y}+{wBo=6{Vkgs-;=$@+`Wv1b-a+}exjO#2z+%^KSN0?zUO zT0`oOH7Ekqj^Fvm2Eh=P?Y{tURqj95T#o@}&SSAgjnFi5`c4r%SGN9Uuulnp(95j- zuUb+5RV!$qm4CS^xZ^)>@E}(we&;HH)>R=|9I#msoX&bz{eyI%U-?1wk2qEOj}bP9 z00Oz1Li%Y9x+aZm1O>7+@UDTOUM2MpB^JVeQQ211zbXU6yMl@SBu=;6zpQ;L{6DQm z$2}##&j*}qgO@n|JJ@qFfa%Y;xh(R>`q@p+m;c8SHr@WEjjfP@AMzO;U(&aY06p2P z3@QEI_y>8@BN*-f&^2T&@E@Xmex_dhKT@NA{4TZcoZeLSlRm&&RBZpD>7&gg1`-Yd zJ_p#e`L7aWu?ZfmW0vpx1f)m&)BdG)KhV2@wtp_ugDhqA`o{>mCTaVL z{{dnPTdzN~f1>q29iAQfRrXhYRsQi`-G#}oHuA5jvGsfSAG>2`lxcti*z?ylabZ&= zaKwK|SGwuXwLRdeE-#fdaH~6cIPkUeUeNW!pxJ>=wW^^#VvgC?o^RyzEq43XvZBUM-$L>G-J^PdtX&C8H2J^C3OiFuE ze_Bnx=IoaLYRXJdJNjAE$uZn}oI;*+o*jXKi_J?O={2lFjD{>h{VIYgG+ML<&b;#; zwHgZ=bzG`jy0s~?$ye=cR-LbvzfmB3-N&u3-E7{%u%tGd5SKq+pk2IOncukmfN&!p zTa;me@T73}p)GP;e2d!qMNO5m=BO`}T;+;W%)Gt3wUn^~_2%XIZ>-B}oLmiGRyn&z z43D`eRdV(j>B z2V{>3YkfU+cilWYRz%sO9zOjcn$J1-+H|=HY}ns-I!Hv`gMM||PZ-rpCAOl@`Mx-w ziaX~#{K_Yu*HB$$VaTESWYGDcoGWkIcN*#`3w@n=cXIw*%8-Lmd}?Z!=c-=3nc>Hi zZ+ePct^Mwf#rZT1D7y@2IkVoRyvcqc{$>5$n|YP=@%u(!rBV}9kpsAMu0w@>AQDsZQKp`tJC{dk8^-kC+(K@ zkmB8%vf0)|NcFW!m+^ev0)&;=po?39_pN}UrMr}y1=UvWZjQI=ibSfHhHE{ED@9m0 zgaxss2t|WlLK=6kuCgg(+#%&u!ag$}ZMY7j`fSxJ$e&A^-||kYQ^m$f zPls#fdvZwhnVteakCA(KG5qR11nO-}wFdKZsWYN!dxbJT0JB2D7*X3~g2-z>gIFVU zdPWlRe8WkG*>=u4_;pdEGa9co4t&FXb~ee8PJiQD`|4|<(SYwQoU?OIthzf1SL_|z zgHT8JZN>ByXt0KA?33DUJP50QCY`VuUt0AR{95TVz-y!7M;h{h4!8}h*hu-M_xpGZ z%-XQNR=QVf)kc5wwXWu_8~aQO@sO=;7$b#xh}1Fqi?V2rWB3K8&E}j|Am#Uw=~eOa zAkCraui{tg5$~QoKW`#QdSyOrAUI^{n^Zx!+HQ+1OHDhDnBBD?pVXG&mB8~{V`e7} zb@8b^S@rM>i93{TiaD%yjIgC^%wTB_JO8PCe|0B9ERJXjN8x@?h%m#OGmLzO#kw=A z^K3;26Zr~kS3~+Rrt-f#Q4aPwPivq z^Rz8qE4a#96!dJH(DHjUK4-YsxZu^Q z6iq13={^G-Ma61Z0y^I*qtC`v5L;Pm?(?u`TdPmI!?5S-b z9P3jtLqWxg)h|)3|4D_qrBCy*f-@3tw`UlEm--AUnH4VH zeUtg+J=NvNn?Ci7fs)RJ{JB4ZDpFlAYel@~4K+=Dv-x8idW_lP=Eocl_*@y~0` zDSy&Rt~{&SfW;h_D8RqDRa9F?Xxx^*X4246y&XmnW)#}1GnFVF_2!ipt>&!-JprGJ zuU%0_lA1E>a>eV0&7JbA2C^gaY}1BBYA^WoNzpE%%o=Wzm$&jc`Ks}iun5bB)pEv( z5OUxlJow$bs|gj))Q7Izx~%UUxfyBRdpPI$zpGv+J6n%6AbG2dS zt<=mHaB6uv{;h#%toZy@mBj;NvnK0la$1hzi^q}-=Pk8}4x^sC&ht+`5GQXg%sq*> zNo#iSo9Aj*<$v`-%|uUCzx~ww-TEF;Nlpz+$8{s47~hz9{`4z~Eo!z#_l%x;r}58f z!lSHb(vD|%ms!uH9kWo)>2RArSJSF?!^5xV87`R}8?W$Q7gut;TuR6y7U-T9Tf!nyqAj^e%pePaj&%@m6j;&2gb+Hk=9^QfeyH=0LjvvZ$QT$-Es(;H9P99>JsEF4t&5(GziNWpz#pVRA)t#53S zL!2@Ke;*ER=l|RQhj2GIymd#-+sI!KDYoJzAvZ-n@5`s@G3@gDLf=?5Tq2?%wR7kVR0Be|Wl18zn=oKowmowRauMy1->&P}_?BZ(J*@m?!#J<8u%Uj$ zjymjf9dV1|rNy!pDQrYVxUacp?FZj-S)JgyO$^Ra(RuArthK$kEhbqXTr!vInK6un zXbhiQ@2+#xQu^Fq=iuJyBw>Z1yA+J9(?2{ipEVj;ebP{uJ=^=JzjM55z@E0a^8mhd z8n3C$-Q@h1aaucowS(&AjDsX7Sv(0rQ+mG8+#$6Agvk6H=2xdRTzRFUPZNn0i&!@K zmJBB)!%vsav*&S`OW1y=>?x;3K_Ld4nixhGnlI>_hq>7Kxv|R$Kb-2}F_Bt0T#If9vJWMFk-5v?pc^wlYg*ISXym@qz^7k7vfEv}u4h}) zXQ^nZ%x?iLaSK76J)*ij<*jjX);8!q`hz*&K;n|R#xwfXFfr;X{=o16;R|=6w*O{0 zs;7KgX2j{exVgw!@6H5I&ocFrh$2k|Tvh#A!a11|q`mAJ+mbZz*BM_4qeyeIh1P=8 z2y&6zyn5VO7VVlkH_U7za2{U#awVfL)f9iDVaBAuz|;!jN{QnvTzZ|bXjf3~Gm}vF z(yLmN_PXeF!$(40;JIY`N?ND7tCq15wmb)k$9^GG$-|8;Qs%Os|@UF`3-cWPa zXBx|+LAEj79bqZ^SfYwxtMq$AajhRFB^$x29$;0m@QDdZWS`RXvCrJ*OvrdO%PKD| zYdJH$Wv#qWB5(5wtO0H-Y$vNS>OyHvsp^%&X{?EpUQ^^Bo1MvlK`ip<_59kiZ8-E&qbnn}2>0cdO%a^xF}Ih|$nzmN zX`>w8IqHB&wX9-3MsnhrqlA8}Uz+y-Hk`F~#mvdZ659a}+!oQ$#^_bwv?2&MvcHettZw0!A^x?O{(_PLT#F)G&?#58Js}fR zq>kvYejU_OxA`q53!AC5ZN*r*qmgvOT>KTSbyCBZPprIp>Tc1s@Nvou>oW^>4`P#Q1Y>D7oz6rP{i5}s4#@D9Rm5$&N-4+xkX2uNRV%ndzDu&mGGiXCOg`mlSBuvWn2ovkaN-=Xs-^33Ws)pWAF=tgNw09a_`B zx-V??9> z`v6s0(!DczoCA^5@VFzDY>C%{qCMpkMp%r$E5zRdf~ zTKzRb7t_FcA^J@-q!ZG!))2L@Zu&BsOx+4j8Y~TBSwIAH+>~>$quF>%SG2zTaKSbI zD+9jF4pgz?v}Vv4ytwK`>e`9>bA9H1;?`Rp1TjS)jFeT4g=`&0qF{h7QJx!|BZKdz z*)n{WH#Us5%IDC=O8LeMDzguBkY#m-{V`czLYodSo5=5@lNga#uaKXnCSsJ1!MeZH ztxt)ehpTHnBq0^X&5eGRTK-NED0AmdFPgdemhwtd9qc~7V6<-yR-GLMyKg_D+S0@4Il*YVVDesr zZlft;wLrM5XVeZ;b$PSa*c3DR#`rhJ37>{WWd!T*MwaGX$``AmjBN7d1eNg)0wQ;F zz9E!kv(iB{+-nh2`|OCMPwzgLh#UH<7hd6)9#4XjLlX7T+?1?mfXl})0n zVsIC17GjzRuQ+j+&kU>gauKc?SLDarWaQd>kc2OX4p=CC_~6h%<*;Y_zPX5AnIYQjSqAM&L{kz$1iFB~O7w}kWw4&1o5p4^&M?we9g zI??w(v8=ZY3D>v8T$U|_6N+vQsBe`NFWoN8l||jYM060rUEb@u(1E_$slLVSa=f5` zs$yOWU?ZNp7)$YPx#wHD7A`DwtN|LS)^I&iH~PtQ@J|N3d@r5Yr>uC@SNFv1VoVgb z@^(&ZOd5~R>y9A~ic4EWMuh^V4l9 zP>UC;9E%3eo6bx(M0FRm1AqLdrwy)3QfC5KCx>p66!dwt=X=!2_TxXTxL z|C}{}|1KkrYjac-O?arZE1@$}&&ht)I%VmJj^kcjTi*t@c*cvCW8t+2*CwjAJ0Ybf zE7y9TvRBfR);2`0Y6?6{tb=k%G?gC8S!XXz~^WnYKw_HoSc<{_wDjMhAg zdC5GAOTeUy5{xfIYaS24Nrcy~zVZfHPV!WsVwF$T-()ASWG>)&+Mgn0UYe1Z~)(Ck|bHzCSXYI z0A+{E3fMA6*PejfCSK)L=_PsnejOXjN$UsOB2Yxa`wxOA=p7Q&9R~&*={bkP zhX_k|w&bGr`8dAz-bWzoL>I;zT!-=b%xYnD8Hn7tlD{_9R+VuHd}*CfAl$NxZ?c&O zaD9-F!g#(cz4INjxhSv-$@%>_NVxEpk<-h@eS{9-`Kvfci15(qawtoj(2>()mRs`3 zuEg7Eq=A>v0q^O{Me!;>^PS5a2aN@Llyf7X_N<~yxzE#y(5*u*uL``iWQb`ZP)j~# z#o?NR2+ReWt&Wt(+XGNZeYG_xn#;#A)SI7xzYr}-8hz5CH-E&m@sY6FSk2)x*ax+% z>E0rQ)J(me`yTp?)48&#=^9`fE;DX$ZNmJ8QY8();dCLF8S8mD95&PrWUOu=q!Y);-vrnBT z#T;mW}(5ZT~|%_wv1nLgaNzg4$55=43bFr01Xc9;>_iFT%_Zu zifdDGQkIdllX$6kD9ST_i!0%JY3y}1E|(dr^1TV6_UKG6E&=@MHEEfM*8Z1@UvE!ADYAsz2-{@vl98%H)2N@%u&z4QV@@;Qmg=zr?ZR@~__qrY}oM!&UD zZ}wDf9J*_->B-i{i?erg<5p%xy( z<19Vl7U;89sAiLeao|uQwDV*I#`GpSzZ)cTXv=jh*@W) zJDQ@ykOdyEB`}+*B0v-(hemz!yVMdgC8pXaa_dbN)$ljG7?Ako9DkVU)QT4L%7vBV zQJcCagvha1_q#YGQ8RMit)Q|@_Ox_hHg#UZf_KO;vh>1RIH%~%SybhNco7QfV)T>0 z$)VeqPc}0W!Xdj|W}DOQ-7nDLM5lCbSE*o(V|Bn zzcK&HjoY^}xva0VBKjmY49(S2E|2_;t^k$9wDN^uFGkNyXHUk43a5xlaHBMFZB5hD zlg1B()fAAbbb(Xjebf9C#^HA8ScyF-83E&7>X&8sg_ZRupz#p_4U{GyidVq6oqC+Q zmZ>NAw*(*LaFmn{efPHts(`5+pp0`!#d^+`5ihza6=?Yl#yA4KQ`swkevK-d`HpWI zK0^B~Do7qFM|V3lo-#e(j13X4Ij?<~sh%50oEH3m-=XYfPq(AiKqc3vl0M>hD|>m@ z??8btq-bSfx%y)CsCbholQ%bRYb9mbPiJLG484b}yV59zK7djYAos1PEpuo2ueO#v zY7&gnfFQN#45;RvX_b$V9m=b>gT?8(P)RP~Y{09&^_)WpdIMlLwL`Jrid%MIm5F6{@x(k&8Us68$Y z&h$G}N2p}ybnM5b{mQGi==Z3=l+8b(!%!Sip00FfYIUZ+NGyb##Vg=Bu`)k_e>7F3 z(YTw5I5l1|E&s9P;S@=osYs82)?ddMEKBIF91(-{*#zcFppCfq{jxM59z@ zsQanEMO9BxQC@y7o?%ncqO2WEjZ+y_D}BqUS^oL0 zkcX_DQ91D719W4k=80+aM;4EA*$Ji)T^=gg)Y|lbb--n2(_aWFD}ZgJs#75VbWc!w zSc14V{K|plXM;P)$IpKh$&I@?r9oB2T|QPSq`go1*;V=u;EPSAkPk}$Z5Yyd@LVph zdJGfNFxZRBEsxNhlHXS zN+J5`INg=wSC3CNX|imS=?^hB{oofWypWL_Lf)y|tMr8nDR?TwGVad1PJQ}~iUNN8>F@hd$8c@WKZPtyU5rjk`<)lHAJ>)_ z8MmARvT>?h%xk%E<%c5PqYo&18QGnq12D{=X#I%hYw?W#Ot>fC7v0-*7qiYY*ds>)js^ZA=?54Y^YEa36 z<8R)>KsaqP3LjE+mDjOwT*sSSO&oMxSF;Pr6kaF?-0BhzhBwQYRZ~A0>XpK zX?zd~mzkbVrqsGjJ^H6h%a?NF>i7klm8- zjhRoH)TGS8cz%^;P7oCw_jm-`-=dxNPK;@G3Q0LW*Ie>oYE1f`AUzc->3Je**;6;V zKK|y8rb8|>W1qB^$rq#R(eL<}9H)@7Cysmo@yyoQm7{chsHB9HcsPthdG*TFb*gce zUjIq)2o{ga%-W~;W!Q!2u*jUrPUvDoBz$r}w{-JlMkot}SSqEvk&*&Io>P~oG4 zA4`gz)yh2%xd7aT;GbT~!8}p01MRUB{LsbPcI9O`fhOK(=#Lhnz2|ulc{&>q{{p1hjyGs9$}sw%Dv~e#DXKs!%ixC~ZZk0U9Cy<%obnxW*pHN8-wx9op^~%{D;ih!>Xs5u zihLmRwG^ki?ZWS1-}a++2-JC$snO4}+Zs?0vIpp2=DY}+j=Y!H)k6ELOpJb)UCBwk z$F7W7j<^^tnsKdJVkf&&i5>^7=aZ`YXdE_$P#qFu{ti~>U`!PSt11(ugD&sewU^_w z21DZOKCnch#8ig_nSZj|K&bJVpfu&PS#-EGyM+` z?w0WcO<|@QyR>xKAXCrw^4ugWOgKPVZ6DJyH|}VFX7Ii!#OZ)tbd%gT$9C!E&MZA! z!weplut3nQRa5F==%RD`*GYVsov}g2KGu15sT(zcUFtoF4`r9~v37z|FB!Vasf~)6 zOUn`$OLI=h1EX)rNURrN-Tw>TVB=)c9)a%KoB~|mrtl%0A1kC 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

Fqilne9Y-77<_ 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 N)vwuh+YbLa`X9uegD?O9 literal 0 HcmV?d00001 diff --git a/artifacts/ElectronNET.Core.API.0.0.18.snupkg b/artifacts/ElectronNET.Core.API.0.0.18.snupkg new file mode 100644 index 0000000000000000000000000000000000000000..44772417efcc630987caa587a8d67d40061817cc GIT binary patch literal 110964 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%0AID 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 literal 0 HcmV?d00001 diff --git a/artifacts/ElectronNET.Core.AspNet.0.0.18.nupkg b/artifacts/ElectronNET.Core.AspNet.0.0.18.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..f6cde1d4adfc4f9f2db276d3bd0ab37a75bc0688 GIT binary patch literal 58530 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 literal 0 HcmV?d00001 diff --git a/artifacts/ElectronNET.Core.AspNet.0.0.18.snupkg b/artifacts/ElectronNET.Core.AspNet.0.0.18.snupkg new file mode 100644 index 0000000000000000000000000000000000000000..e6517aaa88841c74c86e421b9d1850155d4a44f3 GIT binary patch literal 27759 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 Date: Mon, 13 Oct 2025 14:28:47 +0200 Subject: [PATCH 33/46] ElectronNET.Core: Update solution file --- src/ElectronNET.sln | 62 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 53 insertions(+), 9 deletions(-) diff --git a/src/ElectronNET.sln b/src/ElectronNET.sln index d32cab97..641424ce 100644 --- a/src/ElectronNET.sln +++ b/src/ElectronNET.sln @@ -1,14 +1,11 @@ - Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2027 +# Visual Studio Version 17 +VisualStudioVersion = 17.12.35707.178 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElectronNET.WebApp", "ElectronNET.WebApp\ElectronNET.WebApp.csproj", "{7C048379-401C-4345-B5E7-BE232DEA8157}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElectronNET.API", "ElectronNET.API\ElectronNET.API.csproj", "{A78157BA-B754-45F1-969F-D6A513CA0E72}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElectronNET.CLI", "ElectronNET.CLI\ElectronNET.CLI.csproj", "{CE3EB0F2-DA39-427A-85D2-E00D660EBFDE}" -EndProject Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "ElectronNET.Host", "ElectronNET.Host\", "{B33E9B82-B6B4-4DB0-B6EE-61CC34641518}" ProjectSection(WebsiteProperties) = preProject TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.8" @@ -30,6 +27,32 @@ Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "ElectronNET.Host", "Electro SlnRelativePath = "ElectronNET.Host\" EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElectronNET.Build", "ElectronNET.Build\ElectronNET.Build.csproj", "{829FC339-4785-4229-ABA5-53ADB544DA00}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElectronNET", "ElectronNET\ElectronNET.csproj", "{8860606D-6847-F22A-5AED-DF4E0984DD24}" + ProjectSection(ProjectDependencies) = postProject + {829FC339-4785-4229-ABA5-53ADB544DA00} = {829FC339-4785-4229-ABA5-53ADB544DA00} + {B33E9B82-B6B4-4DB0-B6EE-61CC34641518} = {B33E9B82-B6B4-4DB0-B6EE-61CC34641518} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Config", "Config", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" + ProjectSection(SolutionItems) = preProject + ..\Changelog.md = ..\Changelog.md + common.props = common.props + global.json = global.json + ..\NuGet.config = ..\NuGet.config + ..\publish.cmd = ..\publish.cmd + ..\README.md = ..\README.md + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElectronNET.AspNet", "ElectronNET.AspNet\ElectronNET.AspNet.csproj", "{DD10D21A-D131-1D9C-33F9-406046E0C5B0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElectronNET.ConsoleApp", "ElectronNET.ConsoleApp\ElectronNET.ConsoleApp.csproj", "{EE38A326-5DE8-AF09-9EB9-DF0878938783}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{1BB6F634-2831-4496-83A6-BC6761DCEC8D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test Apps", "Test Apps", "{EDCBFC49-2AEE-4BAF-9368-4409298C52FC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -44,18 +67,39 @@ Global {A78157BA-B754-45F1-969F-D6A513CA0E72}.Debug|Any CPU.Build.0 = Debug|Any CPU {A78157BA-B754-45F1-969F-D6A513CA0E72}.Release|Any CPU.ActiveCfg = Release|Any CPU {A78157BA-B754-45F1-969F-D6A513CA0E72}.Release|Any CPU.Build.0 = Release|Any CPU - {CE3EB0F2-DA39-427A-85D2-E00D660EBFDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CE3EB0F2-DA39-427A-85D2-E00D660EBFDE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CE3EB0F2-DA39-427A-85D2-E00D660EBFDE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CE3EB0F2-DA39-427A-85D2-E00D660EBFDE}.Release|Any CPU.Build.0 = Release|Any CPU {B33E9B82-B6B4-4DB0-B6EE-61CC34641518}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B33E9B82-B6B4-4DB0-B6EE-61CC34641518}.Debug|Any CPU.Build.0 = Debug|Any CPU {B33E9B82-B6B4-4DB0-B6EE-61CC34641518}.Release|Any CPU.ActiveCfg = Debug|Any CPU {B33E9B82-B6B4-4DB0-B6EE-61CC34641518}.Release|Any CPU.Build.0 = Debug|Any CPU + {829FC339-4785-4229-ABA5-53ADB544DA00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {829FC339-4785-4229-ABA5-53ADB544DA00}.Debug|Any CPU.Build.0 = Debug|Any CPU + {829FC339-4785-4229-ABA5-53ADB544DA00}.Release|Any CPU.ActiveCfg = Release|Any CPU + {829FC339-4785-4229-ABA5-53ADB544DA00}.Release|Any CPU.Build.0 = Release|Any CPU + {8860606D-6847-F22A-5AED-DF4E0984DD24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8860606D-6847-F22A-5AED-DF4E0984DD24}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8860606D-6847-F22A-5AED-DF4E0984DD24}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8860606D-6847-F22A-5AED-DF4E0984DD24}.Release|Any CPU.Build.0 = Release|Any CPU + {DD10D21A-D131-1D9C-33F9-406046E0C5B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DD10D21A-D131-1D9C-33F9-406046E0C5B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DD10D21A-D131-1D9C-33F9-406046E0C5B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DD10D21A-D131-1D9C-33F9-406046E0C5B0}.Release|Any CPU.Build.0 = Release|Any CPU + {EE38A326-5DE8-AF09-9EB9-DF0878938783}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EE38A326-5DE8-AF09-9EB9-DF0878938783}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EE38A326-5DE8-AF09-9EB9-DF0878938783}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EE38A326-5DE8-AF09-9EB9-DF0878938783}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {7C048379-401C-4345-B5E7-BE232DEA8157} = {EDCBFC49-2AEE-4BAF-9368-4409298C52FC} + {A78157BA-B754-45F1-969F-D6A513CA0E72} = {1BB6F634-2831-4496-83A6-BC6761DCEC8D} + {B33E9B82-B6B4-4DB0-B6EE-61CC34641518} = {1BB6F634-2831-4496-83A6-BC6761DCEC8D} + {829FC339-4785-4229-ABA5-53ADB544DA00} = {1BB6F634-2831-4496-83A6-BC6761DCEC8D} + {8860606D-6847-F22A-5AED-DF4E0984DD24} = {1BB6F634-2831-4496-83A6-BC6761DCEC8D} + {DD10D21A-D131-1D9C-33F9-406046E0C5B0} = {1BB6F634-2831-4496-83A6-BC6761DCEC8D} + {EE38A326-5DE8-AF09-9EB9-DF0878938783} = {EDCBFC49-2AEE-4BAF-9368-4409298C52FC} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {81A62E71-9E04-4EFE-AD5C-23165375F8EF} EndGlobalSection From 2e051762dd67731ec0da49579a01164746a33099 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 15:23:59 +0200 Subject: [PATCH 34/46] Fix typos --- .../Runtime/Services/LifetimeServiceBase.cs | 2 +- .../Runtime/Services/AspNetLifetimeAdapter.cs | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/ElectronNET.API/Runtime/Services/LifetimeServiceBase.cs b/src/ElectronNET.API/Runtime/Services/LifetimeServiceBase.cs index c2bfc6fe..15c5823f 100644 --- a/src/ElectronNET.API/Runtime/Services/LifetimeServiceBase.cs +++ b/src/ElectronNET.API/Runtime/Services/LifetimeServiceBase.cs @@ -83,7 +83,7 @@ protected void TransitionState(LifetimeState newState) if (newState < this.state) { - throw new Exception($"Invalid state transision from {this.state} to {newState}: " + this.GetType().Name); + throw new Exception($"Invalid state transition from {this.state} to {newState}: " + this.GetType().Name); } var oldState = this.state; diff --git a/src/ElectronNET.AspNet/Runtime/Services/AspNetLifetimeAdapter.cs b/src/ElectronNET.AspNet/Runtime/Services/AspNetLifetimeAdapter.cs index 9c108a01..9971ed56 100644 --- a/src/ElectronNET.AspNet/Runtime/Services/AspNetLifetimeAdapter.cs +++ b/src/ElectronNET.AspNet/Runtime/Services/AspNetLifetimeAdapter.cs @@ -7,20 +7,20 @@ internal class AspNetLifetimeAdapter : LifetimeServiceBase { - private readonly IHostApplicationLifetime lifetimeSercice; + private readonly IHostApplicationLifetime lifetimeService; - public AspNetLifetimeAdapter(IHostApplicationLifetime lifetimeSercice) + public AspNetLifetimeAdapter(IHostApplicationLifetime lifetimeService) { - this.lifetimeSercice = lifetimeSercice; + this.lifetimeService = lifetimeService; - this.lifetimeSercice.ApplicationStarted.Register(() => this.TransitionState(LifetimeState.Ready)); - this.lifetimeSercice.ApplicationStopping.Register(() => this.TransitionState(LifetimeState.Stopping)); - this.lifetimeSercice.ApplicationStopped.Register(() => this.TransitionState(LifetimeState.Stopped)); + this.lifetimeService.ApplicationStarted.Register(() => this.TransitionState(LifetimeState.Ready)); + this.lifetimeService.ApplicationStopping.Register(() => this.TransitionState(LifetimeState.Stopping)); + this.lifetimeService.ApplicationStopped.Register(() => this.TransitionState(LifetimeState.Stopped)); } protected override Task StopCore() { - this.lifetimeSercice.StopApplication(); + this.lifetimeService.StopApplication(); return Task.CompletedTask; } } From 2d626ab319ce4d5a3efea936b1ca042b2b228108 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 20:14:18 +0200 Subject: [PATCH 35/46] Reduce pinned dotnet version to 8.0.305 and rollForward to 'feature' --- src/global.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/global.json b/src/global.json index 2523da8c..ceda25e3 100644 --- a/src/global.json +++ b/src/global.json @@ -1,7 +1,7 @@ { "sdk": { - "version": "8.0.316", - "rollForward": "patch", + "version": "8.0.305", + "rollForward": "feature", "allowPrerelease": false } } From 5d5e0b848c21434fda01a2323161910790f7ce59 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 21:00:38 +0200 Subject: [PATCH 36/46] Reset changelog --- Changelog.md | 392 +-------------------------------------------------- 1 file changed, 5 insertions(+), 387 deletions(-) diff --git a/Changelog.md b/Changelog.md index d8ffd287..01800388 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,393 +1,11 @@ -# 30.0.3 +# 0.0.18 -(none) -# 23.6.2 +## Major overhaul: ElectronNET.Core -## ElectronNET.API +- New features +- New package names +- Restart of versioning -* Fixed escaping of URL (#735) @cosmo0 -* Fixed huge memory waste in IpcMain.Once (#833) @Yuvix25 -* Fixed enabling of accessibility support (#798) @dlanorok -* Updated `Display` to current spec (#828) @Yuvix25 -* Changed `ZoomFactor` type from `int` to `double` (#754) @Yuvix25 -* Added splash screen size config (#822) @NickRimmer -* Added OSX ARM architecture detection (#821) @sajmonr -* Added support for `did-navigate` event (#819) @NickRimmer -* Added support for `will-redirect` event (#819) @NickRimmer -* Added support for `did-fail-load` event (#819) @NickRimmer -* Added support for `did-start-navigation` event (#819) @NickRimmer -* Added support for `did-redirect-navigation` event (#819) @NickRimmer -* Added support for `dom-ready` event (#813) @softworkz -## ElectronNET.CLI -* (none) - -## Infrastructure - -* Changed build system to NUKE (#757) @FlorianRappl -* Updated target framework for host project (#753) @r-pankevicius -* Fixed typo in README (#800) @franpersanchez - -# 23.6.1 - -## ElectronNET.CLI - -* New Feature: Upgrade to .NET 6 support - -## ElectronNET.API - -* New Feature: Native Electron 23.2.0 support, but not all new API features included (we search contributors) -* New Feature: Upgrade to .NET 6 support -* New Feature: Changed Web-Socket .NET Library to [SocketIOClient](https://github.com/doghappy/socket.io-client-csharp) -* Breaking Changes: We removed deprecated API events/methods from ElectronNET.API [(More Details)](https://www.electronjs.org/docs/latest/breaking-changes) - -# 13.5.1 - -ElectronNET.CLI: - -* New Feature: Using exit code instead of seek for the term 'error' (thanks [TSrgy](https://github.com/TSrgy)) [\#562](https://github.com/ElectronNET/Electron.NET/pull/562) -* Fixed bug: Allow for property overrides to be passed in (thanks [danatcofo](https://github.com/danatcofo)) [\#531](https://github.com/ElectronNET/Electron.NET/pull/531) -Use `/p:propertyName=value` or `/property:propertyName=value` to pass in property overrides. This is equivalent to the `-p:` option documented here: [https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-publish](https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-publish) -* Fixed bug: Add ability to pass an argument for "Version" for both the "dotnet publish" and "electron-builder" commands (thanks [tub5](https://github.com/tub5)) [\#546](https://github.com/ElectronNET/Electron.NET/pull/546) -* Fixed bug: Version flag not persisting with the referenced executable (thanks [tub5](https://github.com/tub5)) [\#585](https://github.com/ElectronNET/Electron.NET/pull/585) -* Fixed bug: Changes PublishSingleFile default to false for NET5 compatibility (thanks [cristiangiagante](https://github.com/cristiangiagante)) [\#570](https://github.com/ElectronNET/Electron.NET/pull/570) - -ElectronNET.API: - -* New Feature: Native Electron 13.1.5 support, but not all new features (we search contributors) -* Breaking API Changes (from native Electron 13.1.5): - - `Shell.MoveItemToTrashAsync` renamed with `Shell.TrashItemAsync` - - The deprecated extension APIs have been removed: `BrowserWindow.GetAllExtensionsAsync()`, `BrowserWindow.RemoveExtension()`, `BrowserWindow.AddExtensionAsync()`. Use the session APIs instead: `Session.GetAllExtensionsAsync()`, `Session.RemoveExtension()`, `Session.LoadExtensionAsync()`. -* New Feature: singleInstance handle command line arguments [\#520](https://github.com/ElectronNET/Electron.NET/issues/520) -* New Feature: Add WebContents [insertCSS](https://www.electronjs.org/docs/api/web-contents#contentsinsertcsscss-options) functionality (thanks [nfichter](https://github.com/nfichter)) [\#559](https://github.com/ElectronNET/Electron.NET/pull/559) -* New Feature: Allow IpcMain to send IPC messages to BrowserViews (thanks [nfichter](https://github.com/nfichter)) [\#560](https://github.com/ElectronNET/Electron.NET/pull/560) -* New Feature: Add support for proxies that require basic username/password authentication (thanks [nfichter](https://github.com/nfichter)) [\#561](https://github.com/ElectronNET/Electron.NET/pull/561) -* New Feature: Add PostData to LoadURLOptions to allow http-posts in LoadURL calls (thanks [Funkrusha](https://github.com/Funkrusha)) [\#547](https://github.com/ElectronNET/Electron.NET/pull/547) -* Fixed bug: Fix splash screen interaction causing crashes, ghost dragging, and resizable behavior #540 (thanks [MiniguyBrendan](https://github.com/MiniguyBrendan)) [\#540](https://github.com/ElectronNET/Electron.NET/pull/540) -* Fixed bug: Vibrancy serialization fix (thanks [tantumalice](https://github.com/tantumalice)) [\#573](https://github.com/ElectronNET/Electron.NET/pull/573) - -# 11.5.1 - -ElectronNET.CLI: - -* New Feature: Added new build and start commandline options for single exe (thanks [nathanwienand](https://github.com/nathanwienand)) [\#506](https://github.com/ElectronNET/Electron.NET/pull/506) -* New Feature: Set a description of the app in `electron.manifest.json` (thanks [BurtsevC](https://github.com/BurtsevC)) [\#433](https://github.com/ElectronNET/Electron.NET/pull/433) -* New Feature: Set a target for the start command (thanks [gabecook](https://github.com/gabecook)) [\#463](https://github.com/ElectronNET/Electron.NET/pull/463) -* New Feature: `electronize init` support for F# projects (thanks [kojo12228](https://github.com/kojo12228)) [\#457](https://github.com/ElectronNET/Electron.NET/pull/457) -* New Feature: Linux support for the buildAll.sh (thanks [duncanawoods](https://github.com/duncanawoods)) [\#465](https://github.com/ElectronNET/Electron.NET/pull/465) -* Fixed bug: ERR_UNKNOWN_URL_SCHEME by intercepting file:// protocol (thanks [duncanawoods](https://github.com/duncanawoods)) [\#467](https://github.com/ElectronNET/Electron.NET/pull/467) - -ElectronNET.API: - -* New Feature: Native Electron 11.1.1 support, but not all new features (we search contributors) -* Breaking API Changes (from native Electron 11.0): - Removed: BrowserView.{destroy, fromId, fromWebContents, getAllViews} and id property of BrowserView -* New Feature: Upgrade to .NET 5 (thanks [scottkuhl](https://github.com/scottkuhl)) [\#509](https://github.com/ElectronNET/Electron.NET/pull/509) -* New Feature: Extension Method for adding the Electron static class members to the standard MS DI Containers, this is a QOL issue only. `services.AddElectron()` (thanks [danatcofo](https://github.com/danatcofo )) [\#528](https://github.com/ElectronNET/Electron.NET/pull/528) -* New Feature: SetMenu completed for the Dock (MacOS) (thanks [danatcofo](https://github.com/danatcofo )) [\#528](https://github.com/ElectronNET/Electron.NET/pull/528) - -Example for the Dock Menu - -`Electron.Dock.SetMenu(new [] { - new MenuItem { - Label = "Dock Menu Item", - Click = () => { - // do something - } - }, -});` - -Example for consuming the activate event (MacOs only) - -`Electron.App.On("activate", obj => { - var hasWindows = (bool)obj; - // do something -});` - -* New Feature: On and Once implementations for the App and Tray to cover the plethora of events that are not mapped explicitly in those two modules. (thanks [danatcofo](https://github.com/danatcofo )) [\#528](https://github.com/ElectronNET/Electron.NET/pull/528) -* New Feature: Adding the `EnableRemoteModule` property to the WebPreferences object. As of Electron 10, this property defaulted to false and without it exposed you can't use the remote module within a window. (thanks [danatcofo](https://github.com/danatcofo )) [\#528](https://github.com/ElectronNET/Electron.NET/pull/528) -* New Feature: Adding a configurable default electron port. (thanks [aarong-av](https://github.com/aarong-av)) [\#505](https://github.com/ElectronNET/Electron.NET/pull/505) -* New Feature: Added support for launching the application with a file on MacOS (thanks [dlitty](https://github.com/dlitty)) [\#478](https://github.com/ElectronNET/Electron.NET/pull/478) -* Improved: Avoid Blocking Calls in App and AutoUpdater (thanks [freosc](https://github.com/freosc)) [\#474](https://github.com/ElectronNET/Electron.NET/pull/474) -* Fixed bug: Maintain references between socket.io connection events (thanks [danatcofo](https://github.com/danatcofo )) [\#468](https://github.com/ElectronNET/Electron.NET/pull/486) -* Fixed bug: Set default WebPreferences.DefaultFontSize (thanks [duncanawoods](https://github.com/duncanawoods)) [\#468](https://github.com/ElectronNET/Electron.NET/pull/468) - -# 9.31.2 - -* Electron-Builder fixed for Windows builds. - -# 9.31.1 - -ElectronNET.CLI: - -* New Feature: Added config parameter (thanks [konstantingross](https://github.com/konstantingross)) [\#409](https://github.com/ElectronNET/Electron.NET/pull/409) -* New Feature: Set the configuration environment with the electron.manifest.json file. -* Fixed bug: Custom user path removed and replaced by the correct directory with VS macro (When ElectronNET.CLI is the Startup Project, press F5 (Debug) and the ElectronNET.WebApp starts correctly without error!) (thanks [konstantingross](https://github.com/konstantingross)) [\#409](https://github.com/ElectronNET/Electron.NET/pull/409) - -ElectronNET.API: - -* New Feature: Native Electron 9.0.3 support, but not all new features (we search contributors) -* New Feature: PowerMonitor API Support (thanks [gustavo-lara-molina](https://github.com/gustavo-lara-molina)) [\#399](https://github.com/ElectronNET/Electron.NET/pull/399) [\#423](https://github.com/ElectronNET/Electron.NET/pull/423) -* New Feature: NativeTheme API Support (thanks [konstantingross](https://github.com/konstantingross)) [\#402](https://github.com/ElectronNET/Electron.NET/pull/402) -* New Feature: Cookie API Support (thanks [freosc](https://github.com/freosc)) [\#413](https://github.com/ElectronNET/Electron.NET/pull/413) -* Changed Feature: Removed dock methods from App API and moved to Dock API (thanks [konstantingross](https://github.com/konstantingross)) [\#422](https://github.com/ElectronNET/Electron.NET/pull/422) -* App-Api Enhancement: MenuItems with Submenus need an submenu type workaround [\#412](https://github.com/ElectronNET/Electron.NET/issues/412) -* App-Api Enhancement: Added UserAgentFallback (thanks [Mandrakia](https://github.com/Mandrakia)) [\#406](https://github.com/ElectronNET/Electron.NET/pull/406) -* App-Api Enhancement: Summaries rewritten, new App.IsReady / App.HasSingleInstanceLock property, App.Ready event, App.Focus with force parameter method, many parameters changes (thanks [konstantingross](https://github.com/konstantingross)) [\#415](https://github.com/ElectronNET/Electron.NET/pull/415) [\#422](https://github.com/ElectronNET/Electron.NET/pull/422) -* App-Api Enhancement: New App.IsReady property and App.Ready event (thanks [konstantingross](https://github.com/konstantingross)) [\#415](https://github.com/ElectronNET/Electron.NET/pull/415) -* Shell-Api Enhancement: API fixes for Electron 9.0.0 / Added missing parameters / Summaries rewritten (thanks [konstantingross](https://github.com/konstantingross)) [\#417](https://github.com/ElectronNET/Electron.NET/pull/417) [\#418](https://github.com/ElectronNET/Electron.NET/pull/418) -* Notification-Api Enhancement: Added missing properties in Notifications (thanks [konstantingross](https://github.com/konstantingross)) [\#410](https://github.com/ElectronNET/Electron.NET/pull/410) -* BrowserWindows-Api Enhancement: Add missing API call for SetProgressBar options (thanks [konstantingross](https://github.com/konstantingross)) [\#416](https://github.com/ElectronNET/Electron.NET/pull/416) -* BrowserWindow Enhancement: Add BrowserWindow.GetNativeWindowHandle() (thanks [kdlslyv](https://github.com/kdlslyv)) [\#429](https://github.com/ElectronNET/Electron.NET/pull/429) -* HostHook-Api Enhancement: HostHook.CallAsync should use TaskCompletionSource.SetException instead of throwing exception (thanks [Fre V](https://github.com/freosc)) [\#430](https://github.com/ElectronNET/Electron.NET/pull/430) -* MacOS Enhancement: Application exit logic (thanks [dafergu2](https://github.com/dafergu2)) [\#405](https://github.com/ElectronNET/Electron.NET/pull/405) -* Fixed bug: ElectronNET.API.Entities.WebPreferences.ContextIsolation [DefaultValue(true)] [\#411](https://github.com/ElectronNET/Electron.NET/issues/411) - -ElectronNET.WebApp (internal use): -* Improvement debugging and testing new API calls (without install ElectronNET.CLI) (thanks [konstantingross](https://github.com/konstantingross)) [\#425](https://github.com/ElectronNET/Electron.NET/pull/425) -* Fixed bug: Cannot find modules in ElectronHostHook (thanks [konstantingross](https://github.com/konstantingross)) [\#425](https://github.com/ElectronNET/Electron.NET/pull/425) - -Thank you for donation [Phil Seeman](https://github.com/mpnow) โค - -# 8.31.2 - -ElectronNET.CLI: -* New Feature: Deactivate PublishReadyToRun for build or start [\#395](https://github.com/ElectronNET/Electron.NET/issues/395) - - `electronize build /target win /PublishReadyToRun false` - `electronize start /PublishReadyToRun false` -* Fixed bug: Application window doesn't open after packaging [\#387](https://github.com/ElectronNET/Electron.NET/issues/387) - -ElectronNET.API: - -* New Feature: NativeImage Support (thanks [ThrDev](https://github.com/ThrDev)) [\#394](https://github.com/ElectronNET/Electron.NET/pull/394) -* New Feature: Update menu items for context menu and system tray on-the-fly. [\#270](https://github.com/ElectronNET/Electron.NET/pull/270) - - -# 8.31.1 - -ElectronNET.CLI: -* New Feature: Set a name and author of the app in `electron.manifest.json` [\#348](https://github.com/ElectronNET/Electron.NET/issues/348#issuecomment-615977950) [\#310](https://github.com/ElectronNET/Electron.NET/issues/310#issuecomment-617361086) -* New Feature: Live reload (thanks [syedadeel2](https://github.com/syedadeel2)) [\#390](https://github.com/ElectronNET/Electron.NET/pull/390) -`electronize start /watch` -* New Feature: Every new window will created with an clear cache [\#273](https://github.com/ElectronNET/Electron.NET/issues/273) -`electronize start /clear-cache` - -ElectronNET.API: - -* New Feature: Native Electron 8.2.3 support, but not all new features (we search contributors) -* New Feature: We incease the startup time for ~25-36% [\#356](https://github.com/ElectronNET/Electron.NET/issues/356) -* New Feature: Added print capability (thanks [x-xx-o](https://github.com/x-xx-o)) [\#355](https://github.com/ElectronNET/Electron.NET/pull/355) -* New Feature: BrowserView API [\#371](https://github.com/ElectronNET/Electron.NET/issues/371) -* Changed App.GetNameAsync and App.SetNameAsync to the App.Name Property [\#350](https://github.com/ElectronNET/Electron.NET/issues/350) -* Fixed bug: Splash Screen disappearing on click [\#357](https://github.com/ElectronNET/Electron.NET/issues/357) -* Fixed bug: Start MenuRole enum at 1 (thanks [jjuback](https://github.com/jjuback)) [\#369](https://github.com/ElectronNET/Electron.NET/pull/369) -* Fixed bug: BridgeConnector not connected (spam console) [\#347](https://github.com/ElectronNET/Electron.NET/issues/347) -* Fixed bug: BrowserWindowOptions is not setting Width and Height properly [\#373](https://github.com/ElectronNET/Electron.NET/issues/373) -* Fixed bug: IpcMain.Once(string) is not one time use, is not removing listener [\#366](https://github.com/ElectronNET/Electron.NET/issues/366) -* Fixed bug: IpcMain.RemoveAllListeners(string) is not removing the listeners [\#365](https://github.com/ElectronNET/Electron.NET/issues/365) -* Fixed bug: GetLoginItemSettingsAsync does not work [\#352](https://github.com/ElectronNET/Electron.NET/issues/352) -* Fixed bug: Using OnReadyToShow to display the main window in Blazor does not seem to work with Show set to false [\#361](https://github.com/ElectronNET/Electron.NET/issues/361) -* Fixed bug: Unable to disable WebSecurity along with NodeIntegration enabled [\#389](https://github.com/ElectronNET/Electron.NET/issues/389) - -# 7.30.2 - -ElectronNET.CLI: - -* New Feature: Different manifest file support [\#340](https://github.com/ElectronNET/Electron.NET/issues/340) - * Create a additional manifest file: `electronize init /manifest test` - * Start the app with your additional manifest file: `electronize start /manifest electron.manifest.test.json` - * Build the app with your additional manifest file: `electronize build /target win /manifest electron.manifest.test.json`. - -* New Feature: Command Line support [\#337](https://github.com/ElectronNET/Electron.NET/issues/337) - * You can start the app with: `electronize start /args --dog=woof --test=true` - * Or as binary: `myapp.exe /args --dog=woof --test=true` -* Fixed bug: Start process with listen port 8000 error. [\#308](https://github.com/ElectronNET/Electron.NET/issues/308) (thanks [thecodejedi](https://github.com/thecodejedi)) -* Fixed bug: `electronize build` with no arguments would throw a `KeyNotFoundException`. (thanks [jamiebrynes7](https://github.com/jamiebrynes7)) - -ElectronNET.API: - -* New Feature: Electron 7.1.2 support, but not all new features (we search contributors) [\#341](https://github.com/ElectronNET/Electron.NET/issues/341) -* New Feature: Electron.App.CommandLine API [\#337](https://github.com/ElectronNET/Electron.NET/issues/337) -* New Feature: Support of BrowserWindow.AddExtension, BrowserWindow.RemoveExtension, BrowserWindow.GetExtensions (thanks [Daddoon](https://github.com/Daddoon)) - -Thank you for donation [robertmclaws](https://github.com/robertmclaws) โค - -# 5.30.1 - -ElectronNET.CLI: - -* Move to .NET Core 3.0 -* Use npm npx instead of global installations (thanks [jimbuck](https://github.com/jimbuck)) - -ElectronNET.API: - -* Move to .NET Core 3.0 -* New Feature: Add BrowserWindow.RemoveMenu() (thanks [hack2root](https://github.com/hack2root)) - -Thanks to [MaherJendoubi](https://github.com/MaherJendoubi), [kant2002](https://github.com/kant2002), [raz-canva](https://github.com/raz-canva) and [Daddoon](https://github.com/Daddoon) to give .NET Core 3.0 feedback! -# 5.22.14 - -ElectronNET.CLI: - -* Fixed bug: Build fails with latest electron-builder version [\#288](https://github.com/ElectronNET/Electron.NET/issues/288) - -ElectronNET.API: - -* New Feature: Full support for Auto Updater [(Based on electron-updater - Version 4.0.6)](https://www.electron.build/auto-update) -* New Feature: Support for set a custom static Port to ASP.NET Backend [\#155](https://github.com/ElectronNET/Electron.NET/issues/155) -* Fixed bug: Electron tray icon TypeError ([Electron original issue](https://github.com/electron/electron/issues/7657)) (thanks [Tum4ik](https://github.com/Tum4ik)) -* Fixed bug: Wrong tray icon path in the application built via `electronize build` command (thanks [Tum4ik](https://github.com/Tum4ik)) -* Fixed bug: fix async issue where same port is considered open [\#261](https://github.com/ElectronNET/Electron.NET/issues/261) (thanks [netpoetica](https://github.com/netpoetica)) - -ElectronNET.WebApp: - -* Fixed usage of the `Electron.Tray.Show` according fixed bugs in the ElectronNET.CLI (thanks [Tum4ik](https://github.com/Tum4ik)) - -# 5.22.13 - -ElectronNET.API: - -* Fixed bug: Menu Item visibility [\#257](https://github.com/ElectronNET/Electron.NET/issues/257) -* Fixed bug: electron.manifest.json - singleInstance not working [\#258](https://github.com/ElectronNET/Electron.NET/issues/258) -* Fixed security issue: ASP.NET Core process is now bound to 127.0.0.1 instead of the broader localhost [\#258](https://github.com/ElectronNET/Electron.NET/pull/266) - -# 5.22.12 - -ElectronNET.CLI: - -* New Feature: Changed from **electron packager** to [**electron builder**](https://www.electron.build/) -* New Feature: 'add hosthook' command for add a ElectronHostHook-Directory -* Fixed bug: 'Unexpected firewall warnings' [\#181](https://github.com/ElectronNET/Electron.NET/issues/181) -* Fixed bug: 'found 8 vulnerabilities (1 low, 5 moderate, 2 high)' [\#199](https://github.com/ElectronNET/Electron.NET/pull/199) -* Merged pull request: Call electronize from the Path instead of via dotnet in launchSettings.json [\#243](https://github.com/ElectronNET/Electron.NET/pull/243) (thanks [grbd](https://github.com/grbd)) - -ElectronNET.API: - -* New Feature: Electron 5.0.1 support, but not all new features -* New Feature: Auto Updater [(Based on electron-updater)](https://www.electron.build/auto-update) -* New Feature: Splashscreen-Support -* New Feature: HostHook-API for execute own TypeScript/JavaScript code on native Electron Main-Process -* New Feature: Session-API functions -* Fixed bug: Node process running after stopping app [\#96](https://github.com/ElectronNET/Electron.NET/issues/96) -* Fixed bug: 'X and Y options to not work on Windows 10' [\#193](https://github.com/ElectronNET/Electron.NET/issues/193) -* Fixed bug: Unable to clear cache [\#66](https://github.com/ElectronNET/Electron.NET/issues/66) -* Merged pull request: Fix BrowserWindow::SetMenu [\#231](https://github.com/ElectronNET/Electron.NET/pull/231) thanks (thanks [CodeKenpachi](https://github.com/CodeKenpachi)) -* Merged pull request: FIX application hangs after socket reconnect [\#233](https://github.com/ElectronNET/Electron.NET/pull/233) (thanks [pedromrpinto](https://github.com/pedromrpinto)) -* Merged pull request: Reduce chance of detecting false positives when scanning subprocesses for errors. [\#236](https://github.com/ElectronNET/Electron.NET/pull/236) (thanks [BorisTheBrave](https://github.com/BorisTheBrave)) -* Merged pull request: Updates the C# API to accept floating point as in JS. [\#240](https://github.com/ElectronNET/Electron.NET/pull/240) (thanks [BorisTheBrave](https://github.com/BorisTheBrave)) -* Merged pull request: buildReleaseNuGetPackages should leave you in the same directory you โ€ฆ [\#241](https://github.com/ElectronNET/Electron.NET/pull/241) (thanks [BorisTheBrave](https://github.com/BorisTheBrave)) - -ElectronNET.WebApp: - -* Implemented a sample for the new HostHook-API -* Fixed bug: 'Electron.NET API Demo: unable to copy code?' [\#247](https://github.com/ElectronNET/Electron.NET/issues/247) - -# 0.0.11 - -ElectronNET.CLI: - -* Invoke 'npm install' without --prod flag to install needed devDependencies as well. -* Enable SourceLink -* NuGet Package License Information updated (deprecation of licenseUrl) - -ElectronNET.API: - -* Documentation added for WebContents.GetUrl() -* Enable SourceLink -* NuGet Package License Information updated (deprecation of licenseUrl) - -# 0.0.10 - -ElectronNET.API: - -* manifestJsonFilePath fixed (thanks @smack0007) -* Use Electron release 3.0.0 and updated packages (thanks @deinok) -* fixes for Socket interaction (thanks @mojinxun) -* Fixing SingleInstances (thanks @yaofeng) -* Enhance WebContent.GetUrl (thanks @ru-sh) - -ElectronNET.CLI: - -* Show Resultcode for better debugging when using Build/Start Command -* ElectronNET.CLI is now a global dotnet tool - -# 0.0.9 - -ElectronNET.API: - -* Better Async handling - thanks @danielmarbach - -ElectronNET.CLI: - -* More options on the 'build' command, e.g. for a 32bit debug build with electron prune: build /target custom win7-x86;win32 /dotnet-configuration Debug /electron-arch ia32 /electron-params "--prune=true " -* .NET Core project is now built with Release configuration but can be adjusted with the new params. -* Be aware: "Breaking" (but because of the alpha status of this project, we won't use SemVer) - -# 0.0.8 - -This version was skipped because we unfortunately released a pre-version of this on NuGet. - -# 0.0.7 - -ElectronNET.CLI: - -* Fixed electronize start for macos/linux - thanks @yamachu -* Skip NPM install on start when node_modules directory already exists - -# 0.0.6 - -ElectronNET.CLI: - -* nuget packages are now release bits and have the correct assembly version -* Version command -* better devCleanup.cmd -* Better Platform Support Issue - thanks to @Petermarcu -* Start Command should now work on OSX/Linux - thanks to @r105m - -ElectronNET.API: - -* Thread-Safe methods - thanks to @yeskunall - -# 0.0.5 - -ElectronNET.API: - -* The last nuget package didn't contain the actual webpreferences settings with defaults - hopefully now. - -# 0.0.4 - -ElectronNET.CLI: - -* dotnet electronize start fixed - -ElectronNET.API: - -* WebPreferences settings with default values - -# 0.0.3 - -ElectronNET.CLI: -* Init with Debug profile -* Build for all platforms (well... for newest OSX/Linux/Windows) - -ElectronNET.API: -* Moar XML documentation -* Hybrid support (e.g. running as normal website and electron app) -* Event bugfixing - -# 0.0.2 - -ElectronNET.CLI: -* Added Init to Help page -* Added XML documentation to NuGet output -* Maybe fixed for https://github.com/GregorBiswanger/Electron.NET/issues/2 - -ElectronNET.API: -* Add XML documentation to NuGet output -* Implemented Notification-, Dialog- & Tray-API - -# 0.0.1 - -* init everything and basic functionality From 1ea4c1343d7c36d58a9dd3527565521380a8234a Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 23:54:56 +0200 Subject: [PATCH 37/46] Add nuke project to solution --- src/ElectronNET.sln | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/ElectronNET.sln b/src/ElectronNET.sln index 641424ce..09b84900 100644 --- a/src/ElectronNET.sln +++ b/src/ElectronNET.sln @@ -35,7 +35,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElectronNET", "ElectronNET\ {B33E9B82-B6B4-4DB0-B6EE-61CC34641518} = {B33E9B82-B6B4-4DB0-B6EE-61CC34641518} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Config", "Config", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "!Config", "!Config", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" ProjectSection(SolutionItems) = preProject ..\Changelog.md = ..\Changelog.md common.props = common.props @@ -53,6 +53,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{1BB6F634-2 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test Apps", "Test Apps", "{EDCBFC49-2AEE-4BAF-9368-4409298C52FC}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{985D39A7-5216-4945-8167-2FD0CB387BD8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "_build", "..\nuke\_build.csproj", "{015CB06B-6CAE-209F-E050-21C3ACA5FE9F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -87,6 +91,8 @@ Global {EE38A326-5DE8-AF09-9EB9-DF0878938783}.Debug|Any CPU.Build.0 = Debug|Any CPU {EE38A326-5DE8-AF09-9EB9-DF0878938783}.Release|Any CPU.ActiveCfg = Release|Any CPU {EE38A326-5DE8-AF09-9EB9-DF0878938783}.Release|Any CPU.Build.0 = Release|Any CPU + {015CB06B-6CAE-209F-E050-21C3ACA5FE9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {015CB06B-6CAE-209F-E050-21C3ACA5FE9F}.Release|Any CPU.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -99,6 +105,7 @@ Global {8860606D-6847-F22A-5AED-DF4E0984DD24} = {1BB6F634-2831-4496-83A6-BC6761DCEC8D} {DD10D21A-D131-1D9C-33F9-406046E0C5B0} = {1BB6F634-2831-4496-83A6-BC6761DCEC8D} {EE38A326-5DE8-AF09-9EB9-DF0878938783} = {EDCBFC49-2AEE-4BAF-9368-4409298C52FC} + {015CB06B-6CAE-209F-E050-21C3ACA5FE9F} = {985D39A7-5216-4945-8167-2FD0CB387BD8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {81A62E71-9E04-4EFE-AD5C-23165375F8EF} From 0b05b2f5a48dbb2217903fabae95ef49dd7ece32 Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 23:55:46 +0200 Subject: [PATCH 38/46] Add solution ElectronNET.Lean for building core projects/packages only --- src/ElectronNET.Lean.sln | 61 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/ElectronNET.Lean.sln diff --git a/src/ElectronNET.Lean.sln b/src/ElectronNET.Lean.sln new file mode 100644 index 00000000..87a55e95 --- /dev/null +++ b/src/ElectronNET.Lean.sln @@ -0,0 +1,61 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.12.35707.178 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElectronNET.API", "ElectronNET.API\ElectronNET.API.csproj", "{A78157BA-B754-45F1-969F-D6A513CA0E72}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElectronNET.Build", "ElectronNET.Build\ElectronNET.Build.csproj", "{829FC339-4785-4229-ABA5-53ADB544DA00}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElectronNET", "ElectronNET\ElectronNET.csproj", "{8860606D-6847-F22A-5AED-DF4E0984DD24}" + ProjectSection(ProjectDependencies) = postProject + {829FC339-4785-4229-ABA5-53ADB544DA00} = {829FC339-4785-4229-ABA5-53ADB544DA00} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "!Config", "!Config", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" + ProjectSection(SolutionItems) = preProject + ..\Changelog.md = ..\Changelog.md + common.props = common.props + global.json = global.json + ..\NuGet.config = ..\NuGet.config + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElectronNET.AspNet", "ElectronNET.AspNet\ElectronNET.AspNet.csproj", "{DD10D21A-D131-1D9C-33F9-406046E0C5B0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{1BB6F634-2831-4496-83A6-BC6761DCEC8D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A78157BA-B754-45F1-969F-D6A513CA0E72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A78157BA-B754-45F1-969F-D6A513CA0E72}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A78157BA-B754-45F1-969F-D6A513CA0E72}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A78157BA-B754-45F1-969F-D6A513CA0E72}.Release|Any CPU.Build.0 = Release|Any CPU + {829FC339-4785-4229-ABA5-53ADB544DA00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {829FC339-4785-4229-ABA5-53ADB544DA00}.Debug|Any CPU.Build.0 = Debug|Any CPU + {829FC339-4785-4229-ABA5-53ADB544DA00}.Release|Any CPU.ActiveCfg = Release|Any CPU + {829FC339-4785-4229-ABA5-53ADB544DA00}.Release|Any CPU.Build.0 = Release|Any CPU + {8860606D-6847-F22A-5AED-DF4E0984DD24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8860606D-6847-F22A-5AED-DF4E0984DD24}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8860606D-6847-F22A-5AED-DF4E0984DD24}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8860606D-6847-F22A-5AED-DF4E0984DD24}.Release|Any CPU.Build.0 = Release|Any CPU + {DD10D21A-D131-1D9C-33F9-406046E0C5B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DD10D21A-D131-1D9C-33F9-406046E0C5B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DD10D21A-D131-1D9C-33F9-406046E0C5B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DD10D21A-D131-1D9C-33F9-406046E0C5B0}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {A78157BA-B754-45F1-969F-D6A513CA0E72} = {1BB6F634-2831-4496-83A6-BC6761DCEC8D} + {829FC339-4785-4229-ABA5-53ADB544DA00} = {1BB6F634-2831-4496-83A6-BC6761DCEC8D} + {8860606D-6847-F22A-5AED-DF4E0984DD24} = {1BB6F634-2831-4496-83A6-BC6761DCEC8D} + {DD10D21A-D131-1D9C-33F9-406046E0C5B0} = {1BB6F634-2831-4496-83A6-BC6761DCEC8D} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {81A62E71-9E04-4EFE-AD5C-23165375F8EF} + EndGlobalSection +EndGlobal From cf879042102fb4f83bd7e01307e2fdf3ff6ec39d Mon Sep 17 00:00:00 2001 From: softworkz Date: Mon, 13 Oct 2025 23:56:14 +0200 Subject: [PATCH 39/46] Mark ElectronNET.Build as non-packable --- src/ElectronNET.Build/ElectronNET.Build.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ElectronNET.Build/ElectronNET.Build.csproj b/src/ElectronNET.Build/ElectronNET.Build.csproj index 5b6931a8..1bcb4269 100644 --- a/src/ElectronNET.Build/ElectronNET.Build.csproj +++ b/src/ElectronNET.Build/ElectronNET.Build.csproj @@ -4,6 +4,7 @@ netstandard2.0 + False From 50b49068d8e01e030e064d3db0225418a66bf81d Mon Sep 17 00:00:00 2001 From: softworkz Date: Tue, 14 Oct 2025 00:12:05 +0200 Subject: [PATCH 40/46] Add VersionPostFix to common.props --- src/common.props | 1 + 1 file changed, 1 insertion(+) diff --git a/src/common.props b/src/common.props index a4bb3535..1cab6f20 100644 --- a/src/common.props +++ b/src/common.props @@ -25,6 +25,7 @@ $(Version) $(Version) + $(Version)$(VersionPostFix) $(Version) From bef7a42fbb717033c9eabd22d79d593f4ee33b55 Mon Sep 17 00:00:00 2001 From: softworkz Date: Tue, 14 Oct 2025 00:17:05 +0200 Subject: [PATCH 41/46] Update nuke build with the following changes: - Remove obsolete sample targets - Restore and build solution (.Lean) instead of projects - Read version from common.props, compare with latest changelog version and fail if not equal - Keep PostFix separate from version (AssemblyVersion may not have a postfix), so the postfix will go into the package version and file name as well as the informational version (visible in file properties dialog on Windows) - Add "ElectronNET.Core " as prefix to GitHub release names (to disambiguate with earlier versions) --- .nuke/build.schema.json | 22 ++--- .nuke/parameters.json | 2 +- nuke/Build.cs | 171 ++++++++------------------------------ nuke/CommonPropsParser.cs | 33 ++++++++ 4 files changed, 77 insertions(+), 151 deletions(-) create mode 100644 nuke/CommonPropsParser.cs diff --git a/.nuke/build.schema.json b/.nuke/build.schema.json index daa29e2f..466bf0fb 100644 --- a/.nuke/build.schema.json +++ b/.nuke/build.schema.json @@ -1,11 +1,15 @@ { "$schema": "http://json-schema.org/draft-04/schema#", - "title": "Build Schema", "$ref": "#/definitions/build", + "title": "Build Schema", "definitions": { "build": { "type": "object", "properties": { + "CommonPropsFilePath": { + "type": "string", + "description": "common.props file path - to determine the configured version" + }, "Configuration": { "type": "string", "description": "Configuration to build - Default is 'Debug' (local) or 'Release' (server)", @@ -64,7 +68,7 @@ }, "ReleaseNotesFilePath": { "type": "string", - "description": "ReleaseNotesFilePath - To determine the SemanticVersion" + "description": "ReleaseNotesFilePath - To determine the lates changelog version" }, "Root": { "type": "string", @@ -78,14 +82,8 @@ "enum": [ "Clean", "Compile", - "CompileSample", "CreatePackages", "Default", - "ElectronizeCustomWin7TargetSample", - "ElectronizeGenericTargetSample", - "ElectronizeLinuxTargetSample", - "ElectronizeMacOsTargetSample", - "ElectronizeWindowsTargetSample", "Package", "PrePublish", "Publish", @@ -109,14 +107,8 @@ "enum": [ "Clean", "Compile", - "CompileSample", "CreatePackages", "Default", - "ElectronizeCustomWin7TargetSample", - "ElectronizeGenericTargetSample", - "ElectronizeLinuxTargetSample", - "ElectronizeMacOsTargetSample", - "ElectronizeWindowsTargetSample", "Package", "PrePublish", "Publish", @@ -141,4 +133,4 @@ } } } -} \ No newline at end of file +} diff --git a/.nuke/parameters.json b/.nuke/parameters.json index abd31df8..39ee7a32 100644 --- a/.nuke/parameters.json +++ b/.nuke/parameters.json @@ -1,4 +1,4 @@ { "$schema": "./build.schema.json", - "Solution": "src/ElectronNET.sln" + "Solution": "src/ElectronNET.Lean.sln" } \ No newline at end of file diff --git a/nuke/Build.cs b/nuke/Build.cs index 77bbe7be..f7fdb39c 100644 --- a/nuke/Build.cs +++ b/nuke/Build.cs @@ -18,6 +18,7 @@ using static Nuke.Common.IO.FileSystemTasks; using static Nuke.Common.IO.PathConstruction; using static Nuke.Common.Tools.DotNet.DotNetTasks; +// ReSharper disable ArrangeThisQualifier class Build : NukeBuild { @@ -27,25 +28,20 @@ class Build : NukeBuild /// - Microsoft VisualStudio https://nuke.build/visualstudio /// - Microsoft VSCode https://nuke.build/vscode - public static int Main () => Execute(x => x.RunUnitTests); + public static int Main() => Execute(x => x.RunUnitTests); [Nuke.Common.Parameter("Configuration to build - Default is 'Debug' (local) or 'Release' (server)")] readonly Configuration Configuration = IsLocalBuild ? Configuration.Debug : Configuration.Release; - [Nuke.Common.Parameter("ReleaseNotesFilePath - To determine the SemanticVersion")] + [Nuke.Common.Parameter("ReleaseNotesFilePath - To determine the lates changelog version")] readonly AbsolutePath ReleaseNotesFilePath = RootDirectory / "Changelog.md"; + [Nuke.Common.Parameter("common.props file path - to determine the configured version")] + readonly AbsolutePath CommonPropsFilePath = RootDirectory / "src" / "common.props"; + [Solution] readonly Solution Solution; - string TargetProjectName => "ElectronNET"; - - string ApiTargetLibName => $"{TargetProjectName}.API"; - - string CliTargetLibName => $"{TargetProjectName}.CLI"; - - string DemoTargetLibName => $"{TargetProjectName}.WebApp"; - AbsolutePath SourceDirectory => RootDirectory / "src"; AbsolutePath ResultDirectory => RootDirectory / "artifacts"; @@ -60,18 +56,7 @@ class Build : NukeBuild string Version { get; set; } - AbsolutePath[] Projects - { - get - { - var api = SourceDirectory / ApiTargetLibName / $"{ApiTargetLibName}.csproj"; - var cli = SourceDirectory / CliTargetLibName / $"{CliTargetLibName}.csproj"; - var projects = new[] { api, cli }; - return projects; - } - } - - string Framework => Solution.GetProject(DemoTargetLibName).GetProperty("TargetFramework"); + string VersionPostFix { get; set; } protected override void OnBuildInitialized() { @@ -84,9 +69,19 @@ protected override void OnBuildInitialized() LatestReleaseNotes = ChangeLog.First(); LatestReleaseNotes.NotNull("LatestVersion could not be read!"); - Log.Debug("Using LastestVersion from ChangeLog: {LatestVersion}", LatestReleaseNotes.Version); + var propsParser = new CommonPropsParser(); + + var propsVersion = propsParser.Parse(CommonPropsFilePath); + + propsVersion.NotNull("Version from common.props could not be read!"); + + Assert.True(propsVersion == LatestReleaseNotes.Version, + $"The version in common.props ({propsVersion}) does not " + + $"equal the latest version in the changelog ({LatestReleaseNotes.Version})"); + + Log.Debug("Using version: {LatestVersion}", propsVersion); SemVersion = LatestReleaseNotes.SemVersion; - Version = LatestReleaseNotes.Version.ToString(); + Version = propsVersion.ToString(); if (GitHubActions != null) { @@ -96,13 +91,17 @@ protected override void OnBuildInitialized() if (ScheduledTargets.Contains(Default)) { - Version = $"{Version}-ci.{buildNumber}"; + VersionPostFix = $"-ci.{buildNumber}"; } else if (ScheduledTargets.Contains(PrePublish)) { - Version = $"{Version}-alpha.{buildNumber}"; + VersionPostFix = $"-pre.{buildNumber}"; } } + else if (ScheduledTargets.Contains(PrePublish)) + { + VersionPostFix = $"-pre"; + } Log.Information("Building version: {Version}", Version); } @@ -117,130 +116,32 @@ protected override void OnBuildInitialized() Target Restore => _ => _ .Executes(() => { - Projects.ForEach(project => - { - DotNetRestore(s => s - .SetProjectFile(project)); - }); + DotNetRestore(s => s.SetProjectFile(Solution.Path)); }); Target Compile => _ => _ .DependsOn(Restore) .Executes(() => { - Projects.ForEach(project => - { - DotNetBuild(s => s - .SetProjectFile(project) - .SetVersion(Version) - .SetConfiguration(Configuration) - .EnableNoRestore()); - }); + DotNetBuild(s => s + .SetProjectFile(Solution.Path) + .SetConfiguration(Configuration) + .SetProperty("GeneratePackageOnBuild", "True") + .SetProperty("VersionPostFix", VersionPostFix ?? string.Empty)); }); Target RunUnitTests => _ => _ .DependsOn(Compile) .Executes(() => { - Projects.ForEach(project => - { - DotNetTest(s => s - .SetProjectFile(project) - .SetConfiguration(Configuration) - .EnableNoRestore() - .EnableNoBuild()); - }); + // There aren't any yet }); Target CreatePackages => _ => _ .DependsOn(Compile) .Executes(() => { - Projects.ForEach(project => - { - DotNetPack(s => s - .SetProject(project) - .SetVersion(Version) - .SetConfiguration(Configuration) - .SetOutputDirectory(ResultDirectory) - .SetIncludeSymbols(true) - .SetSymbolPackageFormat("snupkg") - .EnableNoRestore() - ); - }); - }); - - Target CompileSample => _ => _ - .DependsOn(Compile) - .Executes(() => - { - var sample = SourceDirectory / DemoTargetLibName / $"{DemoTargetLibName}.csproj"; - DotNetBuild(s => s.SetProjectFile(sample).SetConfiguration(Configuration)); - }); - - Target ElectronizeGenericTargetSample => _ => _ - .DependsOn(CompileSample) - .Executes(() => - { - var sample = SourceDirectory / DemoTargetLibName; - var cli = SourceDirectory / CliTargetLibName / $"{CliTargetLibName}.csproj"; - var args = "build /target custom win7-x86;win /dotnet-configuration Debug /electron-arch ia32 /electron-params \"--publish never\""; - - var cmd = $"run --project {cli} --framework {Framework} -- {args}"; - Log.Debug(cmd); - DotNet(cmd, sample); - }); - - Target ElectronizeWindowsTargetSample => _ => _ - .DependsOn(CompileSample) - .Executes(() => - { - var sample = SourceDirectory / DemoTargetLibName; - var cli = SourceDirectory / CliTargetLibName / $"{CliTargetLibName}.csproj"; - var args = "build /target win /electron-params \"--publish never\""; - - var cmd =$"run --project {cli} --framework {Framework} -- {args}"; - Log.Debug(cmd); - DotNet(cmd, sample); - }); - - Target ElectronizeCustomWin7TargetSample => _ => _ - .DependsOn(CompileSample) - .Executes(() => - { - var sample = SourceDirectory / DemoTargetLibName; - var cli = SourceDirectory / CliTargetLibName / $"{CliTargetLibName}.csproj"; - var args = "build /target custom win7-x86;win /electron-params \"--publish never\""; - - var cmd =$"run --project {cli} --framework {Framework} -- {args}"; - Log.Debug(cmd); - DotNet(cmd, sample); - }); - - Target ElectronizeMacOsTargetSample => _ => _ - .DependsOn(CompileSample) - .Executes(() => - { - var sample = SourceDirectory / DemoTargetLibName; - var cli = SourceDirectory / CliTargetLibName / $"{CliTargetLibName}.csproj"; - var args = "build /target osx /electron-params \"--publish never\""; - - var cmd =$"run --project {cli} --framework {Framework} -- {args}"; - Log.Debug(cmd); - DotNet(cmd, sample); - }); - - Target ElectronizeLinuxTargetSample => _ => _ - .DependsOn(CompileSample) - .Executes(() => - { - var sample = SourceDirectory / DemoTargetLibName; - var cli = SourceDirectory / CliTargetLibName / $"{CliTargetLibName}.csproj"; - var args = "build /target linux /electron-params \"--publish never\""; - - var cmd =$"run --project {cli} --framework {Framework} -- {args}"; - Log.Debug(cmd); - DotNet(cmd, sample); + // Packages are created on build }); Target PublishPackages => _ => _ @@ -292,9 +193,9 @@ protected override void OnBuildInitialized() new InMemoryCredentialStore(credentials)); GitHubTasks.GitHubClient.Repository.Release - .Create("ElectronNET", "Electron.NET", new NewRelease(Version) + .Create("ElectronNET", "Electron.NET", new NewRelease(Version + VersionPostFix) { - Name = Version, + Name = "ElectronNET.Core " + Version + VersionPostFix, Body = String.Join(Environment.NewLine, LatestReleaseNotes.Notes), Prerelease = true, TargetCommitish = "develop", @@ -330,7 +231,7 @@ protected override void OnBuildInitialized() GitHubTasks.GitHubClient.Repository.Release .Create("ElectronNET", "Electron.NET", new NewRelease(Version) { - Name = Version, + Name = "ElectronNET.Core " + Version, Body = String.Join(Environment.NewLine, LatestReleaseNotes.Notes), Prerelease = false, TargetCommitish = "main", diff --git a/nuke/CommonPropsParser.cs b/nuke/CommonPropsParser.cs new file mode 100644 index 00000000..ac780bdc --- /dev/null +++ b/nuke/CommonPropsParser.cs @@ -0,0 +1,33 @@ +using System; +using System.Linq; +using System.Xml.Linq; + +///

+/// Parses a version from an MSBuild .props file (XML). +/// +public sealed class CommonPropsParser +{ + /// + /// Initializes a new instance of the class. + /// + public CommonPropsParser() + { + } + + public Version Parse(string propsPath) + { + var doc = XDocument.Load(propsPath); + + var versionElement = doc + .Descendants() + .FirstOrDefault(e => e.Name.LocalName == "Version"); + + if (Version.TryParse(versionElement?.Value.Trim(), out var version)) + { + version = new Version(version.Major, version.Minor, version.Build); + return version; + } + + return null; + } +} \ No newline at end of file From 868451408c4440e414692da5e15cbe880d3b0ad3 Mon Sep 17 00:00:00 2001 From: softworkz Date: Tue, 14 Oct 2025 03:48:03 +0200 Subject: [PATCH 42/46] Move global.json to repo root --- src/global.json => global.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/global.json => global.json (100%) diff --git a/src/global.json b/global.json similarity index 100% rename from src/global.json rename to global.json From 6060e355bdd1d1cda601f895d434f27200020d06 Mon Sep 17 00:00:00 2001 From: softworkz Date: Tue, 14 Oct 2025 03:48:22 +0200 Subject: [PATCH 43/46] Fix warnings --- src/ElectronNET.API/Bridge/Events.cs | 6 ++---- src/ElectronNET.API/Runtime/StartupManager.cs | 2 -- src/ElectronNET.WebApp/Controllers/WindowsController.cs | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/ElectronNET.API/Bridge/Events.cs b/src/ElectronNET.API/Bridge/Events.cs index 732819aa..8bcff02f 100644 --- a/src/ElectronNET.API/Bridge/Events.cs +++ b/src/ElectronNET.API/Bridge/Events.cs @@ -68,12 +68,10 @@ public async Task On(string moduleName, string eventName, Action action) await BridgeConnector.Socket.Emit(subscriber, eventName, listener).ConfigureAwait(false); } - /// - /// Subscribe to an unmapped electron event. - /// + /// Subscribe to an unmapped electron event. /// The name of the module, e.g. app, dock, etc... /// The name of the event - /// The event handler + /// The action. public async Task Once(string moduleName, string eventName, Action action) { var listener = $"{moduleName}{_textInfo.ToTitleCase(eventName)}Completed"; diff --git a/src/ElectronNET.API/Runtime/StartupManager.cs b/src/ElectronNET.API/Runtime/StartupManager.cs index c0e98ab8..147c4520 100644 --- a/src/ElectronNET.API/Runtime/StartupManager.cs +++ b/src/ElectronNET.API/Runtime/StartupManager.cs @@ -48,8 +48,6 @@ private RuntimeControllerBase CreateRuntimeController() default: throw new ArgumentOutOfRangeException(); } - - return null; } private StartupMethod DetectAppTypeAndStartup() diff --git a/src/ElectronNET.WebApp/Controllers/WindowsController.cs b/src/ElectronNET.WebApp/Controllers/WindowsController.cs index bdf7472c..eb037af1 100644 --- a/src/ElectronNET.WebApp/Controllers/WindowsController.cs +++ b/src/ElectronNET.WebApp/Controllers/WindowsController.cs @@ -34,7 +34,7 @@ public IActionResult Index() browserWindow.OnFocus += () => Electron.IpcMain.Send(mainBrowserWindow, "listen-to-window-focus"); browserWindow.OnBlur += () => Electron.IpcMain.Send(mainBrowserWindow, "listen-to-window-blur"); - Electron.IpcMain.On("listen-to-window-set-focus", (x) => browserWindow.Focus()); + _ = Electron.IpcMain.On("listen-to-window-set-focus", (x) => browserWindow.Focus()); }); Electron.IpcMain.On("frameless-window", async (args) => From bf3e149d43e72104cb0635eb9feb61425bad3781 Mon Sep 17 00:00:00 2001 From: softworkz Date: Tue, 14 Oct 2025 03:52:47 +0200 Subject: [PATCH 44/46] Add changelog entries (AI authored) --- Changelog.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 50 insertions(+), 4 deletions(-) diff --git a/Changelog.md b/Changelog.md index 01800388..bd13258f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,11 +1,57 @@ # 0.0.18 +## ElectronNET.Core -## Major overhaul: ElectronNET.Core +### Highlights +- **Complete MSBuild Integration**: Eliminated CLI tool dependency, moved all build processes to MSBuild with deep Visual Studio integration +- **Modernized Architecture**: Restructured process lifecycle with .NET launching first and running Electron as child process for better control and reliability +- **Cross-Platform Development**: Build and debug Linux applications directly from Windows Visual Studio via WSL integration +- **Flexible Electron Versioning**: Removed version lock-in, users can now select any Electron version with build-time validation +- **Enhanced Debugging Experience**: ASP.NET-first debugging with Hot Reload support and improved process termination handling +- **Console App Support**: No longer requires ASP.NET - now works with simple console applications for file system or remote server HTML/JS -- New features -- New package names -- Restart of versioning +### Build System & Project Structure +- Eliminated electron.manifest.json configuration file, replaced with MSBuild project properties +- Introduced new package structure: ElectronNET.Core (main package), ElectronNET.Core.Api (API definitions), ElectronNET.Core.AspNet (ASP.NET integration) +- Added Runtime Identifier (RID) selection as part of project configuration +- Restructured build folder layout to use standard .NET format (bin\net8.0\win-x64) instead of bin\Desktop +- Implemented incremental build support for Electron assets to improve build performance +- Added custom MSBuild tasks for Electron-specific build operations +### Development Experience +- Implemented unpackaged run-mode for development using regular .NET builds with unpackaged Electron configuration +- Added support for building Linux packages on Windows via WSL integration +- Enabled running and debugging Linux application outputs on Windows through WSL +- Integrated TypeScript compilation with ASP.NET tooling for consistent builds +- Added process orchestration supporting 8 different launch scenarios (packaged/unpackaged ื console/ASP.NET ื dotnet-first/electron-first) +### Debugging & Runtime +- Dramatically improved debugging experience with ASP.NET-first launch mode +- Added Hot Reload support for ASP.NET code during development +- Implemented proper process termination handling for all exit scenarios +- Minimized startup times through optimized build and launch procedures + +### Technical Improvements +- Enhanced splash screen handling with automatic path resolution +- Improved ElectronHostHook integration as proper npm package dependency +- Updated to latest TypeScript version with ESLint configuration +- Added support for custom main.js files in projects +- Implemented version management through common.props file +- Added build-time Electron version compatibility validation + +### Package & Distribution +- Integrated MSBuild publishing mechanisms for creating Electron packages +- Added folder publishing support with improved parameter handling +- Implemented automated package.json generation from MSBuild properties +- Added GitHub release automation with proper versioning +- Reduced package sizes by eliminating unnecessary TypeScript dependencies + +### Migration & Compatibility +- Maintained backward compatibility for existing ElectronHostHook implementations +- Removed ASP.NET requirement: Now works with simple console applications for file system or remote server HTML/JS scenarios +- Added support for both console and ASP.NET Core application types +- Preserved all existing Electron API functionality while modernizing architecture +- Added migration path for existing projects through updated package structure + +This represents a comprehensive modernization of Electron.NET, addressing the major pain points around debugging, build complexity, and platform limitations while maintaining full API compatibility. From c914bb8f142dda637281de218f1b2f332d7688bf Mon Sep 17 00:00:00 2001 From: softworkz Date: Tue, 14 Oct 2025 06:22:42 +0200 Subject: [PATCH 45/46] Draft for a ReadMe update --- README.md | 258 ++++++++++++------------------------------------------ 1 file changed, 55 insertions(+), 203 deletions(-) diff --git a/README.md b/README.md index c145a0d4..d60b56d1 100644 --- a/README.md +++ b/README.md @@ -2,47 +2,56 @@ [![donate](https://img.shields.io/badge/Donate-Donorbox-green.svg)](https://donorbox.org/electron-net) [![Gitter](https://badges.gitter.im/ElectronNET/community.svg)](https://gitter.im/ElectronNET/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Build status](https://github.com/ElectronNET/Electron.NET/actions/workflows/ci.yml/badge.svg)](https://github.com/ElectronNET/Electron.NET/actions/workflows/ci.yml) -Build cross platform desktop apps with .NET 8 and Blazor, ASP.NET Core (Razor Pages, MVC). +# Electron.Net Core is here! -Electron.NET is a __wrapper__ around a native Electron application with an embedded ASP.NET Core application. Via our Electron.NET IPC bridge we can invoke Electron APIs from .NET. +## A Complete Transformation -The CLI extensions hosts our toolset to build and start Electron.NET applications. +ElectronNET.Core represents a fundamental modernization of Electron.NET, addressing years of accumulated pain points while preserving full API compatibility. This isn't just an updateโ€”it's a complete rethinking of how .NET developers build and debug cross-platform desktop applications with Electron. -## Wait - you host a .NET Core app inside Electron? Why? +Read more: [**What's New in ElectronNET.Core**](WHATS_NEW.md) -Well... there are lots of different approaches how to get a X-plat desktop app running. We thought it would be nice for .NET devs to use the ASP.NET Core environment and just embed it inside a pretty robust X-plat enviroment called Electron. Porting Electron to .NET is not a goal of this project, at least we don't have any clue how to do it. We just combine ASP.NET Core & Electron. -## ๐Ÿ“ฆ NuGet +Build cross platform desktop applications with .NET 6/8 - from console apps to ASP.Net Core (Razor Pages, MVC) to Blazor -[![NuGet](https://img.shields.io/nuget/v/ElectronNET.API.svg?style=flat-square) ElectronNET.API ](https://www.nuget.org/packages/ElectronNET.API/) | [![NuGet](https://img.shields.io/nuget/v/ElectronNET.CLI.svg?style=flat-square) ElectronNET.CLI](https://www.nuget.org/packages/ElectronNET.CLI/) -## ๐Ÿ›  Requirements to Run +## Wait - how does that work exactly? -The current Electron.NET CLI builds Windows/macOS/Linux binaries. Our API uses .NET 8, so our minimum base OS is the same as [.NET 8](https://github.com/dotnet/core/blob/main/release-notes/8.0/supported-os.md). +Well... there are lots of different approaches how to get a X-plat desktop app running. Electron.NET provides a range of ways to build .NET based solutions using Electron at the side of presentation. While the classic Electron.Net setup, using an ASP.Net host ran by the Electron side is still the primary way, there's more flexibility now: both, dotnet and Electron are now able to launch the other for better lifetime management, and when you don't need a local web server - like when running content from files or remote servers, you can drop the ASP.Net stack altogether and got with a lightweight console app instead. -Also you should have installed: +## ๐Ÿ“ฆ NuGet -* npm [contained in nodejs (at least Version 16.17.1)](https://nodejs.org) +[![NuGet](https://img.shields.io/nuget/v/ElectronNET.Core.svg?style=flat-square) ElectronNET.Core ](https://www.nuget.org/packages/ElectronNET.Core.API/) | [![NuGet](https://img.shields.io/nuget/v/ElectronNET.Core.API.svg?style=flat-square) ElectronNET.Core.API ](https://www.nuget.org/packages/ElectronNET.Core.API/) | [![NuGet](https://img.shields.io/nuget/v/ElectronNET.Core.AspNet.svg?style=flat-square) ElectronNET.Core.AspNet ](https://www.nuget.org/packages/ElectronNET.Core.AspNet/) -## ๐Ÿ’ฌ Community -[![Gitter](https://badges.gitter.im/ElectronNET/community.svg)](https://gitter.im/ElectronNET/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +## ๐Ÿ›  Requirements to Run -Besides the chat on Gitter and the issues [discussed here](https://github.com/ElectronNET/Electron.NET/issues) you can also use [StackOverflow](https://stackoverflow.com/questions/tagged/electron.net) with the tag `electron.net`. + Our API uses .NET 6/8, so our + +Also you should have installed: + +* .NET 6/8 or later +* OS + minimum base OS is the same as [.NET 6](https://github.com/dotnet/core/blob/main/release-notes/6.0/supported-os.md) / [.NET 8](https://github.com/dotnet/core/blob/main/release-notes/8.0/supported-os.md). +* NodeJS (at least [Version 22.x](https://nodejs.org)) -If you want to sponsor the further maintenance and development of this project [see the donate section](#๐Ÿ™-donate). -## ๐Ÿ‘ฉโ€๐Ÿซ Usage +## ๐Ÿ‘ฉโ€๐Ÿซ Usage with ASP.Net -To activate and communicate with the "native" (sort of native...) Electron API include the [ElectronNET.API NuGet package](https://www.nuget.org/packages/ElectronNET.API/) in your ASP.NET Core app. +- Create a new ASP.Net Core project +- Install the following two nuget packages: ```ps1 -PM> Install-Package ElectronNET.API +PM> Install-Package ElectronNET.Core + +PM> Install-Package ElectronNET.Core.AspNet ``` -## Setup Using Minimal-API +### Enable Electron.NET on Startup + +To do so, use the `UseElectron` extension method on a `WebApplicationBuilder`, an `IWebHostBuilder` or any descendants. -You start Electron.NET up with an `UseElectron` WebHostBuilder-Extension and open the Electron Window: +> [!NOTE] +> New in Electron.NET Core is that you provide a callback method as an argument to `UseElectron()`, which ensures that you get to know the right moment to set up your application UI. ### Program.cs @@ -50,93 +59,29 @@ You start Electron.NET up with an `UseElectron` WebHostBuilder-Extension and ope using ElectronNET.API; using ElectronNET.API.Entities; -var builder = WebApplication.CreateBuilder(args); -builder.WebHost.UseElectron(args); - -// Is optional, but you can use the Electron.NET API-Classes directly with DI (relevant if you want more encoupled code) -builder.Services.AddElectron(); - -var app = builder.Build(); - -... - -await app.StartAsync(); + public static void Main(string[] args) + { + WebHost.CreateDefaultBuilder(args) + .UseElectron(args, ElectronAppReady) + .UseStartup() + .Build() + .Run(); + } -// Open the Electron-Window here -await Electron.WindowManager.CreateWindowAsync(); + public static async Task ElectronAppReady() + { + var browserWindow = await Electron.WindowManager.CreateWindowAsync( + new BrowserWindowOptions { Show = false }); -app.WaitForShutdown(); + browserWindow.OnReadyToShow += () => browserWindow.Show(); + } ``` -## Setup using Normal-API -### Program.cs - -You start Electron.NET up with an `UseElectron` WebHostBuilder-Extension. - -```csharp -public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.UseElectron(args); - webBuilder.UseStartup(); - }); -``` +## ๐Ÿš€ Starting and Debugging the Application -### Startup.cs +Just press F5 in Visual Studio or use dotnet for debugging. -Open the Electron Window in the *Startup.cs* file: - -```csharp -public void Configure(IApplicationBuilder app, IWebHostEnvironment env) -{ - //... - - Electron.WindowManager.CreateWindowAsync(); -} -``` - -## ๐Ÿš€ Starting the Application - -To start the application make sure you have installed the "[ElectronNET.CLI](https://www.nuget.org/packages/ElectronNET.CLI/)" packages as global tool: - -```sh -dotnet tool install ElectronNET.CLI -g -``` - -At the first time, you need an Electron.NET project initialization. Type the following command in your ASP.NET Core folder: - -```sh -electronize init -``` - -* Now a electronnet.manifest.json should appear in your ASP.NET Core project -* Now run the following: - -```sh -electronize start -``` - -### Note - -> Only the first `electronize start` is slow. The next will go on faster. - -## ๐Ÿ”ญ Develop Electron.NET apps using a file watcher - -The file watcher is included with version 8.31.1 of Electron.NET. For example, a file change can trigger compilation, test execution, or deployment. The Electron.NET window will automatically refresh and new code changes will be visible more quickly. The following Electron.NET CLI command is required: - -```sh -electronize start /watch -``` - -### Note - -> Only the first `electronize start` is slow. The next will go on faster. - -## ๐Ÿž Debugging the Application - -Start your Electron.NET application with the Electron.NET CLI command. In Visual Studio attach to your running application instance. Go in the __Debug__ Menu and click on __Attach to Process...__. Sort by your projectname on the right and select it on the list. ## ๐Ÿ“” Usage of the Electron API @@ -145,48 +90,17 @@ A complete documentation will follow. Until then take a look in the source code In this YouTube video, we show you how you can create a new project, use the Electron.NET API, debug a application and build an executable desktop app for Windows: [Electron.NET - Getting Started](https://www.youtube.com/watch?v=nuM6AojRFHk) -## โ› Building Release Artifacts - -Here you need the Electron.NET CLI as well. Type the following command in your ASP.NET Core folder: - -```sh -electronize build /target win -``` - -There are additional platforms available: - -```sh -electronize build /target win -electronize build /target osx -electronize build /target linux -``` - -Those three "default" targets will produce x64 packages for those platforms. - -For certain NuGet packages or certain scenarios you may want to build a pure x86 application. To support those things you can define the desired [.NET Core runtime](https://docs.microsoft.com/en-us/dotnet/core/rid-catalog), the [electron platform](https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#platform) and [electron architecture](https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#arch) like this: - -```sh -electronize build /target custom "win7-x86;win32" /electron-arch ia32 -``` - -The end result should be an electron app under your __/bin/desktop__ folder. ### Note > macOS builds can't be created on Windows machines because they require symlinks that aren't supported on Windows (per [this Electron issue](https://github.com/electron-userland/electron-packager/issues/71)). macOS builds can be produced on either Linux or macOS machines. - -## ๐Ÿ”„ Update - -After an update to the latest Electron.API package, an update to the latest Electron.CLI is always required. In addition, always update the CLI via NuGet: -```sh -dotnet tool update ElectronNET.CLI -g -``` ## ๐Ÿ‘จโ€๐Ÿ’ป Authors * **[Gregor Biswanger](https://github.com/GregorBiswanger)** - (Microsoft MVP, Intel Black Belt and Intel Software Innovator) is a freelance lecturer, consultant, trainer, author and speaker. He is a consultant for large and medium-sized companies, organizations and agencies for software architecture, web- and cross-platform development. You can find Gregor often on the road attending or speaking at international conferences. - [Cross-Platform-Blog](http://www.cross-platform-blog.com) - Twitter [@BFreakout](https://www.twitter.com/BFreakout) * **[Dr. Florian Rappl](https://github.com/FlorianRappl)** - Software Developer - from Munich, Germany. Microsoft MVP & Web Geek. - [The Art of Micro Frontends](https://microfrontends.art) - [Homepage](https://florian-rappl.de) - Twitter [@florianrappl](https://twitter.com/florianrappl) +* [**softworkz**](https://github.com/softworkz) - full range developer - likes to start where others gave up - MS MVP alumni and Munich citizen as well * **[Robert Muehsig](https://github.com/robertmuehsig)** - Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek. - [codeinside Blog](https://blog.codeinside.eu) - Twitter [@robert0muehsig](https://twitter.com/robert0muehsig) See also the list of [contributors](https://github.com/ElectronNET/Electron.NET/graphs/contributors) who participated in this project. @@ -225,78 +139,7 @@ MIT-licensed. See [LICENSE](./LICENSE) for details. **Enjoy!** -## ๐Ÿ“ Important notes - -### ElectronNET.API & ElectronNET.CLI Version 9.31.2 - -Make sure you also have the new Electron.NET API & CLI 9.31.2 version. - -```sh -dotnet tool update ElectronNET.CLI -g -``` - -This now uses [electron-builder](https://www.electron.build/configuration/configuration) and the necessary configuration to build is made in the **electron.manifest.json** file (on the build part). In addition, own Electron.NET configurations are stored (on the root). -Please make sure that your **electron.manifest.json** file has the following new structure: - -```json -{ - "executable": "{{executable}}", - "splashscreen": { - "imageFile": "" - }, - "name": "{{executable}}", - "author": "", - "singleInstance": false, - "build": { - "appId": "com.{{executable}}.app", - "productName": "{{executable}}", - "copyright": "Copyright ยฉ 2020", - "buildVersion": "1.0.0", - "compression": "maximum", - "directories": { - "output": "../../../bin/Desktop" - }, - "extraResources": [ - { - "from": "./bin", - "to": "bin", - "filter": ["**/*"] - } - ], - "files": [ - { - "from": "./ElectronHostHook/node_modules", - "to": "ElectronHostHook/node_modules", - "filter": ["**/*"] - }, - "**/*" - ] - } -} -``` - -### ElectronNET.CLI Version 0.0.9 - -In the Version 0.0.9 the CLI was not a global tool and needed to be registered like this in the *.csproj*: - -```xml - - - -``` - -After you edited the *.csproj* file, you need to restore your NuGet packages within your Project. Run the following command in your ASP.NET Core folder: - -```sh -dotnet restore -``` - -If you still use this version you will need to invoke it like this: - -```sh -electronize ... -``` ### Node.js Integration @@ -324,3 +167,12 @@ public void ConfigureServices(IServiceCollection services) services.AddElectron(); } ``` + +## ๐Ÿ’ฌ Community + +[![Gitter](https://badges.gitter.im/ElectronNET/community.svg)](https://gitter.im/ElectronNET/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) + +Besides the chat on Gitter and the issues [discussed here](https://github.com/ElectronNET/Electron.NET/issues) you can also use [StackOverflow](https://stackoverflow.com/questions/tagged/electron.net) with the tag `electron.net`. + +If you want to sponsor the further maintenance and development of this project [see the donate section](#๐Ÿ™-donate). + From fcb589d58e8a94bb691b6fd4b345a65346c4d634 Mon Sep 17 00:00:00 2001 From: softworkz Date: Tue, 14 Oct 2025 06:23:45 +0200 Subject: [PATCH 46/46] What's new doc page (AI writen) --- WHATS_NEW.md | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 WHATS_NEW.md diff --git a/WHATS_NEW.md b/WHATS_NEW.md new file mode 100644 index 00000000..2f658fb3 --- /dev/null +++ b/WHATS_NEW.md @@ -0,0 +1,127 @@ +# What's New in ElectronNET.Core + +## A Complete Transformation + +ElectronNET.Core represents a fundamental modernization of Electron.NET, addressing years of accumulated pain points while preserving full API compatibility. This isn't just an updateโ€”it's a complete rethinking of how .NET developers build and debug cross-platform desktop applications with Electron. + +## Complete Build System Overhaul + +### From CLI Complexity to MSBuild Simplicity + +The most visible change is the complete elimination of the CLI tool dependency. Where developers once needed to manage complex command-line operations and JSON configuration files, everything now flows through Visual Studio's native project system. + +The old `electron.manifest.json` file is gone, replaced by clean MSBuild project properties that integrate seamlessly with Visual Studio's project designer. This provides not just a better development experience, but also eliminates entire categories of configuration errors that plagued earlier versions. + +### Intelligent Package Structure + +The new package architecture reflects a clearer separation of concerns: + +- **ElectronNET.Core** - The main package containing build logic and project system integration +- **ElectronNET.Core.Api** - Pure API definitions for Electron integration +- **ElectronNET.Core.AspNet** - ASP.NET-specific runtime components + +This modular approach allows projects to include only what they need while maintaining the flexibility to scale from simple console applications to complex web applications. + +## Beyond ASP.NET: Console Application Support + +### A Fundamental Shift in Accessibility + +One of the most significant breakthroughs in ElectronNET.Core is the removal of the ASP.NET requirement. Developers can now build Electron applications using simple console applications, dramatically expanding the use cases and removing a major barrier to adoption. + +### Flexible Content Sources + +Console applications with ElectronNET.Core support multiple content scenarios: + +- **File System HTML/JS**: Serve static web content directly from the file system +- **Remote Server Integration**: Connect to existing web servers or APIs +- **Lightweight Architecture**: Avoid the overhead of ASP.NET when it's not needed +- **Simplified Deployment**: Package and distribute with minimal dependencies + +This capability transforms ElectronNET from a web-focused framework into a versatile platform that can integrate with any HTML/JS content source, making it accessible to a much broader range of development scenarios and team structures. + +## Revolutionary Development Experience + +### Debugging Reimagined + +The debugging experience has been completely transformed. The new ASP.NET-first launch mode means developers can now debug their .NET code directly, with full access to familiar debugging tools and Hot Reload capabilities. No more attaching to processes or working around limited debugging scenariosโ€”the development workflow now matches standard ASP.NET development patterns. + +### Cross-Platform Development Without Compromises + +One of the most significant breakthroughs is the ability to build and debug Linux applications directly from Windows Visual Studio through WSL integration. Developers can now: + +- Build Linux packages while working on Windows +- Debug Linux application behavior in real-time +- Test cross-platform functionality without context switching +- Deploy to Linux targets with confidence + +This capability eliminates the traditional barriers between Windows development environments and Linux deployment targets. + +### Flexible Runtime Identifier Support + +Runtime Identifier (RID) selection is now a first-class part of the project configuration, allowing developers to explicitly target specific platforms and architectures. The build system automatically structures output folders using standard .NET conventions (`bin\net8.0\win-x64`) instead of the ambiguous `bin\Desktop` layout, making multi-target builds clean and predictable. + +## Modernized Architecture + +### Process Lifecycle Revolution + +The underlying process architecture has been fundamentally redesigned. Instead of Electron launching first and managing the .NET process, ElectronNET.Core puts .NET in control. The .NET application launches first and runs Electron as a child process, providing: + +- Better process lifecycle management +- More reliable application termination +- Enhanced error handling and recovery +- Cleaner separation between web and native concerns + +This architecture supports eight different launch scenarios, covering every combination of packaged/unpackaged deployment, console/ASP.NET hosting, and dotnet-first/electron-first initialization. + +### Unpackaged Development Mode + +The new unpackaged run-mode transforms development workflows by using regular .NET builds with unpackaged Electron configurations. This approach leverages .NET's incremental build capabilities for both managed and native code, dramatically reducing rebuild times and improving the development feedback loop. + +## Enhanced Technical Foundation + +### TypeScript Integration + +TypeScript compilation is now fully integrated with ASP.NET tooling, providing consistent builds across different development environments. The updated toolchain uses modern TypeScript versions with ESLint configuration, eliminating the compatibility issues that previously affected custom ElectronHostHook implementations. + +### API Enhancements + +The improved splash screen handling with automatic path resolution eliminates common configuration pitfalls, while maintaining full backward compatibility with existing ElectronHostHook code. + +### Performance Optimizations + +Package sizes have been reduced by eliminating unnecessary dependencies, while build performance has improved through intelligent incremental compilation. The new architecture also minimizes startup times through optimized build and launch procedures. + +## Seamless Migration Path + +### Backward Compatibility Focus + +Despite the extensive changes, ElectronNET.Core maintains complete API compatibility with existing applications. The modular package structure allows for incremental adoption, and existing ElectronHostHook implementations continue to work without modification. + +### Clear Upgrade Journey + +The migration path is designed to be straightforward: +1. Update package references to the new structure +2. Remove the old manifest file +3. Configure project properties through Visual Studio +4. Adopt new debugging workflows at your own pace + +## Future Horizons + +### Unlocked Possibilities + +This modernization removes the technical debt that was limiting Electron.NET's evolution. The flexible Electron versioning, integrated build system, and cross-platform capabilities create a foundation for: + +- More frequent updates and feature additions +- Enhanced community contributions +- Better tooling and IDE integration +- Expanded platform support + +### Version Independence + +The removal of rigid Electron version coupling means developers can now choose the Electron version that best fits their needs, with build-time validation ensuring compatibility. This approach encourages community feedback and enables faster adoption of new Electron features. + +## Conclusion + +ElectronNET.Core represents more than just new featuresโ€”it's a complete reimagining of what .NET + Electron development can be. By eliminating friction points, removing the ASP.NET requirement to support console applications, improving debugging experiences, and enabling true cross-platform development, it transforms Electron.NET from a challenging framework to work with into a modern, efficient platform for building cross-platform desktop applications. + +The changes address the core issues that were driving developers away from Electron.NET while opening new possibilities for the future. This foundation will enable more rapid innovation and better support for the growing demands of cross-platform .NET development.