diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml new file mode 100644 index 00000000..ea520a77 --- /dev/null +++ b/.github/workflows/integration-tests.yml @@ -0,0 +1,209 @@ +name: Tests + +on: + push: + branches: [ develop, main ] + pull_request: + branches: [ develop, main ] + +concurrency: + group: integration-tests-${{ github.ref }} + cancel-in-progress: true + +jobs: + tests: + name: Integration Tests (${{ matrix.os }}) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-24.04 + rid: linux-x64 + - os: windows-2022 + rid: win-x64 + - os: macos-14 + rid: osx-arm64 + + env: + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 + DOTNET_NOLOGO: 1 + CI: true + ELECTRON_ENABLE_LOGGING: 1 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '10.0.x' + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + + - name: Restore + run: dotnet restore -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj + + - name: Build + run: dotnet build --no-restore -c Release -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj + + - name: Install Linux GUI dependencies + if: runner.os == 'Linux' + run: | + set -e + sudo apt-get update + # Core Electron dependencies + sudo apt-get install -y xvfb \ + libgtk-3-0 libnss3 libgdk-pixbuf-2.0-0 libdrm2 libgbm1 libxss1 libxtst6 libatk-bridge2.0-0 libatk1.0-0 libatspi2.0-0 libx11-xcb1 libasound2t64 + + - name: Run tests (Linux) + if: runner.os == 'Linux' + continue-on-error: true + run: | + mkdir -p test-results/Ubuntu + xvfb-run -a dotnet test src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj \ + -c Release --no-build -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} \ + --logger "trx;LogFileName=Ubuntu.trx" \ + --logger "console;verbosity=detailed" \ + --results-directory test-results + + - name: Run tests (Windows) + if: runner.os == 'Windows' + continue-on-error: true + run: | + New-Item -ItemType Directory -Force -Path test-results/Windows | Out-Null + dotnet test src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj -c Release --no-build -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} --logger "trx;LogFileName=Windows.trx" --logger "console;verbosity=detailed" --results-directory test-results + + - name: Run tests (macOS) + if: runner.os == 'macOS' + continue-on-error: true + run: | + mkdir -p test-results/macOS + dotnet test src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj -c Release --no-build -r ${{ matrix.rid }} -p:RuntimeIdentifier=${{ matrix.rid }} --logger "trx;LogFileName=macOS.trx" --logger "console;verbosity=detailed" --results-directory test-results + + - name: Upload raw test results + if: always() + uses: actions/upload-artifact@v4 + with: + name: test-results-${{ matrix.os }} + path: test-results/*.trx + retention-days: 7 + + summary: + name: Test Results + runs-on: ubuntu-24.04 + if: always() + needs: [tests] + + permissions: + actions: read + contents: read + checks: write + pull-requests: write + + steps: + - name: Download all test results + uses: actions/download-artifact@v4 + with: + path: test-results + + - name: Setup .NET (for CTRF conversion) + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '10.0.x' + + - name: Install CTRF TRX→CTRF converter (dotnet tool) + run: | + dotnet new tool-manifest + dotnet tool install DotnetCtrfJsonReporter --local + + - name: Convert TRX → CTRF and clean names (keep suites; set filePath=OS) + shell: bash + run: | + set -euo pipefail + mkdir -p ctrf + shopt -s globstar nullglob + conv=0 + for trx in test-results/**/*.trx; do + fname="$(basename "$trx")" + os="${fname%.trx}" + outdir="ctrf/${os}" + mkdir -p "$outdir" + out="${outdir}/ctrf-report.json" + + dotnet tool run DotnetCtrfJsonReporter -p "$trx" -d "$outdir" -f "ctrf-report.json" + + jq --arg os "$os" '.results.tests |= map(.filePath = $os)' "$out" > "${out}.tmp" && mv "${out}.tmp" "$out" + + echo "Converted & normalized $trx -> $out" + conv=$((conv+1)) + done + echo "Processed $conv TRX file(s)" + + + - name: Publish Test Report + if: always() + uses: ctrf-io/github-test-reporter@v1 + with: + report-path: 'ctrf/**/*.json' + + summary: true + pull-request: false + status-check: false + status-check-name: 'Integration Tests' + use-suite-name: true + update-comment: true + always-group-by: true + overwrite-comment: true + exit-on-fail: true + group-by: 'suite' + upload-artifact: true + fetch-previous-results: true + + summary-report: false + summary-delta-report: true + github-report: true + test-report: false + test-list-report: false + failed-report: true + failed-folded-report: false + skipped-report: true + suite-folded-report: true + suite-list-report: false + file-report: true + previous-results-report: true + insights-report: true + flaky-report: true + flaky-rate-report: true + fail-rate-report: false + slowest-report: false + + report-order: 'summary-delta-report,failed-report,skipped-report,suite-folded-report,file-report,previous-results-report,github-report' + env: + GITHUB_TOKEN: ${{ github.token }} + + + - name: Create PR Comment + if: always() + uses: ctrf-io/github-test-reporter@v1 + with: + report-path: 'ctrf/**/*.json' + + summary: true + pull-request: true + use-suite-name: true + update-comment: true + always-group-by: true + overwrite-comment: true + upload-artifact: false + + pull-request-report: true + env: + GITHUB_TOKEN: ${{ github.token }} + + - name: Summary + run: echo "All matrix test jobs completed." \ No newline at end of file diff --git a/.github/workflows/trailing-whitespace-check.yml b/.github/workflows/trailing-whitespace-check.yml new file mode 100644 index 00000000..299bb98f --- /dev/null +++ b/.github/workflows/trailing-whitespace-check.yml @@ -0,0 +1,85 @@ +name: Trailing Whitespace Check + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + check-trailing-whitespace: + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check for trailing whitespace + run: | + echo "Checking for trailing whitespace in changed files..." + + # Get the base branch + BASE_SHA="${{ github.event.pull_request.base.sha }}" + HEAD_SHA="${{ github.event.pull_request.head.sha }}" + + # Get list of changed files (excluding deleted files) + CHANGED_FILES=$(git diff --name-only --diff-filter=d "$BASE_SHA" "$HEAD_SHA") + + if [ -z "$CHANGED_FILES" ]; then + echo "No files to check." + exit 0 + fi + + # File patterns to check (text files) + PATTERNS="\.cs$|\.csproj$|\.sln$|\.ts$|\.html$|\.css$|\.scss$" + + # Directories and file patterns to exclude + EXCLUDE_PATTERNS="(^|\/)(\.|node_modules|bin|obj|artifacts|packages|\.vs|\.nuke\/temp)($|\/)" + + ERRORS_FOUND=0 + TEMP_FILE=$(mktemp) + + while IFS= read -r file; do + # Skip if file doesn't exist (shouldn't happen with --diff-filter=d, but just in case) + if [ ! -f "$file" ]; then + continue + fi + + # Check if file matches patterns to check + if ! echo "$file" | grep -qE "$PATTERNS"; then + continue + fi + + # Check if file should be excluded + if echo "$file" | grep -qE "$EXCLUDE_PATTERNS"; then + continue + fi + + # Find trailing whitespace lines, excluding XML doc placeholder lines that are exactly "/// " (one space) + MATCHES=$(grep -n '[[:space:]]$' "$file" | grep -vE '^[0-9]+:[[:space:]]*/// $' || true) + + if [ -n "$MATCHES" ]; then + echo "❌ Trailing whitespace found in: $file" + echo "$MATCHES" | head -10 + TOTAL=$(echo "$MATCHES" | wc -l) + if [ "$TOTAL" -gt 10 ]; then + echo " ... and $(($TOTAL - 10)) more lines" + fi + echo "1" >> "$TEMP_FILE" + fi + done <<< "$CHANGED_FILES" + + ERRORS_FOUND=$(wc -l < "$TEMP_FILE" 2>/dev/null || echo "0") + rm -f "$TEMP_FILE" + + if [ "$ERRORS_FOUND" -gt 0 ]; then + echo "" + echo "❌ Found trailing whitespace in $ERRORS_FOUND file(s)." + echo "Please remove trailing whitespace from the files listed above." + exit 1 + else + echo "✅ No trailing whitespace found in changed files." + exit 0 + fi diff --git a/Changelog.md b/Changelog.md index 560129ec..42934363 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,14 @@ +# 0.2.0 + +## ElectronNET.Core + +- Updated dependencies (#930) @softworkz +- Updated integration tests (#931) @softworkz +- Updated `ElectronNET.Host` (#935) @softworkz +- Removed transition period specific build configuration (#928) @softworkz +- Added `IsRunningBlazor` option to `BrowserWindowOptions` (#926) +- Added platform support attributes (#929) @softworkz + # 0.1.0 ## ElectronNET.Core diff --git a/README.md b/README.md index bbec26d1..3fb436ba 100644 --- a/README.md +++ b/README.md @@ -58,22 +58,22 @@ To do so, use the `UseElectron` extension method on a `WebApplicationBuilder`, a using ElectronNET.API; using ElectronNET.API.Entities; - public static void Main(string[] args) - { - WebHost.CreateDefaultBuilder(args) - .UseElectron(args, ElectronAppReady) - .UseStartup() - .Build() - .Run(); - } - - public static async Task ElectronAppReady() - { - var browserWindow = await Electron.WindowManager.CreateWindowAsync( - new BrowserWindowOptions { Show = false }); - - browserWindow.OnReadyToShow += () => browserWindow.Show(); - } +public static void Main(string[] args) +{ + WebHost.CreateDefaultBuilder(args) + .UseElectron(args, ElectronAppReady) + .UseStartup() + .Build() + .Run(); +} + +public static async Task ElectronAppReady() +{ + var browserWindow = await Electron.WindowManager.CreateWindowAsync( + new BrowserWindowOptions { Show = false }); + + browserWindow.OnReadyToShow += () => browserWindow.Show(); +} ``` ### Minimal API Example @@ -113,6 +113,56 @@ app.MapRazorPages(); app.Run(); ``` +### Blazor + +For a project with Blazor you can use: + +```cs +using ElectronNET.API; +using ElectronNET.API.Entities; + +var builder = WebApplication.CreateBuilder(args); + +builder.Services + .AddRazorComponents() + .AddInteractiveWebAssemblyComponents(); + +builder.Services.AddElectron(); // <-- might be useful to set up DI + +builder.UseElectron(args, async () => +{ + var options = new BrowserWindowOptions { + Show = false, + AutoHideMenuBar = true, + IsRunningBlazor = true, // <-- crucial + }; + var browserWindow = await Electron.WindowManager.CreateWindowAsync(options); + browserWindow.OnReadyToShow += () => browserWindow.Show(); +}); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseWebAssemblyDebugging(); +} +else +{ + app.UseExceptionHandler("/Error", createScopeForErrors: true); +} + +app.UseStaticFiles(); +app.UseAntiforgery(); + +app.MapRazorComponents() + .AddInteractiveWebAssemblyRenderMode(); + +app.Run(); +``` + +The `IsRunningBlazor` option makes sure to set up the renderer in a way that Blazor can just run without any interference. This includes things such as HMR for development. + ## 🚀 Starting and Debugging the Application Just press `F5` in Visual Studio or use dotnet for debugging. diff --git a/docs/GettingStarted/Console-App.md b/docs/GettingStarted/Console-App.md index c848373c..4a006713 100644 --- a/docs/GettingStarted/Console-App.md +++ b/docs/GettingStarted/Console-App.md @@ -54,7 +54,7 @@ Add the Electron.NET configuration to your `.csproj` file: - + ``` diff --git a/nuke/ReleaseNotesParser.cs b/nuke/ReleaseNotesParser.cs index d449a53e..7b7f5f0b 100644 --- a/nuke/ReleaseNotesParser.cs +++ b/nuke/ReleaseNotesParser.cs @@ -85,7 +85,7 @@ private IReadOnlyList ParseComplexFormat(string[] lines) // Parse content. var notes = new List(); - + while (true) { // Sanity checks. diff --git a/nuke/_build.csproj b/nuke/_build.csproj index 3258f31e..78e4653a 100644 --- a/nuke/_build.csproj +++ b/nuke/_build.csproj @@ -11,6 +11,8 @@ + + diff --git a/src/.editorconfig b/src/.editorconfig new file mode 100644 index 00000000..17389dfa --- /dev/null +++ b/src/.editorconfig @@ -0,0 +1,4 @@ +[*.cs] + +# CA1416: Validate platform compatibility +dotnet_diagnostic.CA1416.severity = error diff --git a/src/ElectronNET.API/API/ApiBase.cs b/src/ElectronNET.API/API/ApiBase.cs index ec63c743..95231fe1 100644 --- a/src/ElectronNET.API/API/ApiBase.cs +++ b/src/ElectronNET.API/API/ApiBase.cs @@ -1,4 +1,5 @@ // ReSharper disable InconsistentNaming + namespace ElectronNET.API { using Common; @@ -17,6 +18,7 @@ protected enum SocketTaskEventNameTypes DashesLowerFirst, NoDashUpperFirst } + protected enum SocketTaskMessageNameTypes { DashesLowerFirst, @@ -29,15 +31,15 @@ protected enum SocketEventNameTypes CamelCase, } - private const int PropertyTimeout = 1000; + private const int InvocationTimeout = 1000; private readonly string objectName; - private readonly ConcurrentDictionary propertyGetters; - private readonly ConcurrentDictionary propertyEventNames = new(); - private readonly ConcurrentDictionary propertyMessageNames = new(); + private readonly ConcurrentDictionary invocators; + private readonly ConcurrentDictionary invocationEventNames = new(); + private readonly ConcurrentDictionary invocationMessageNames = new(); private readonly ConcurrentDictionary methodMessageNames = new(); private static readonly ConcurrentDictionary eventContainers = new(); - private static readonly ConcurrentDictionary> AllPropertyGetters = new(); + private static readonly ConcurrentDictionary> AllInvocators = new(); private readonly object objLock = new object(); @@ -58,7 +60,7 @@ protected set protected ApiBase() { this.objectName = this.GetType().Name.LowerFirst(); - propertyGetters = AllPropertyGetters.GetOrAdd(objectName, _ => new ConcurrentDictionary()); + this.invocators = AllInvocators.GetOrAdd(this.objectName, _ => new ConcurrentDictionary()); } protected void CallMethod0([CallerMemberName] string callerName = null) @@ -113,21 +115,21 @@ protected void CallMethod3(object val1, object val2, object val3, [CallerMemberN } } - protected Task GetPropertyAsync(object arg = null, [CallerMemberName] string callerName = null) + protected Task InvokeAsync(object arg = null, [CallerMemberName] string callerName = null) { Debug.Assert(callerName != null, nameof(callerName) + " != null"); lock (this.objLock) { - return this.propertyGetters.GetOrAdd(callerName, _ => + return this.invocators.GetOrAdd(callerName, _ => { - var getter = new PropertyGetter(this, callerName, PropertyTimeout, arg); + var getter = new Invocator(this, callerName, InvocationTimeout, arg); getter.Task().ContinueWith(_ => { lock (this.objLock) { - return this.propertyGetters.TryRemove(callerName, out var _); + return this.invocators.TryRemove(callerName, out var _); } }); @@ -135,15 +137,15 @@ protected Task GetPropertyAsync(object arg = null, [CallerMemberName] stri }).Task(); } } - + protected void AddEvent(Action value, int? id = null, [CallerMemberName] string callerName = null) { Debug.Assert(callerName != null, nameof(callerName) + " != null"); - var eventName = EventName(callerName); - - var eventKey = EventKey(eventName, id); + var eventName = this.EventName(callerName); + + var eventKey = this.EventKey(eventName, id); - lock (objLock) + lock (this.objLock) { var container = eventContainers.GetOrAdd(eventKey, _ => { @@ -156,14 +158,14 @@ protected void AddEvent(Action value, int? id = null, [CallerMemberName] string container.Register(value); } } - + protected void RemoveEvent(Action value, int? id = null, [CallerMemberName] string callerName = null) { Debug.Assert(callerName != null, nameof(callerName) + " != null"); - var eventName = EventName(callerName); - var eventKey = EventKey(eventName, id); + var eventName = this.EventName(callerName); + var eventKey = this.EventKey(eventName, id); - lock (objLock) + lock (this.objLock) { if (eventContainers.TryGetValue(eventKey, out var container) && !container.Unregister(value)) { @@ -172,15 +174,15 @@ protected void RemoveEvent(Action value, int? id = null, [CallerMemberName] stri } } } - + protected void AddEvent(Action value, int? id = null, [CallerMemberName] string callerName = null) { Debug.Assert(callerName != null, nameof(callerName) + " != null"); - - var eventName = EventName(callerName); - var eventKey = EventKey(eventName, id); - lock (objLock) + var eventName = this.EventName(callerName); + var eventKey = this.EventKey(eventName, id); + + lock (this.objLock) { var container = eventContainers.GetOrAdd(eventKey, _ => { @@ -197,10 +199,10 @@ protected void AddEvent(Action value, int? id = null, [CallerMemberName] s protected void RemoveEvent(Action value, int? id = null, [CallerMemberName] string callerName = null) { Debug.Assert(callerName != null, nameof(callerName) + " != null"); - var eventName = EventName(callerName); - var eventKey = EventKey(eventName, id); + var eventName = this.EventName(callerName); + var eventKey = this.EventKey(eventName, id); - lock (objLock) + lock (this.objLock) { if (eventContainers.TryGetValue(eventKey, out var container) && !container.Unregister(value)) { @@ -212,33 +214,33 @@ protected void RemoveEvent(Action value, int? id = null, [CallerMemberName private string EventName(string callerName) { - switch (SocketEventNameType) + switch (this.SocketEventNameType) { case SocketEventNameTypes.DashedLower: - return $"{objectName}-{callerName.ToDashedEventName()}"; + return $"{this.objectName}-{callerName.ToDashedEventName()}"; case SocketEventNameTypes.CamelCase: - return $"{objectName}-{callerName.ToCamelCaseEventName()}"; + return $"{this.objectName}-{callerName.ToCamelCaseEventName()}"; default: throw new ArgumentOutOfRangeException(); } } - + private string EventKey(string eventName, int? id) { return string.Format(CultureInfo.InvariantCulture, "{0}{1:D}", eventName, id); } - internal abstract class PropertyGetter + internal abstract class Invocator { public abstract Task Task(); } - internal class PropertyGetter : PropertyGetter + internal class Invocator : Invocator { private readonly Task tcsTask; private TaskCompletionSource tcs; - public PropertyGetter(ApiBase apiBase, string callerName, int timeoutMs, object arg = null) + public Invocator(ApiBase apiBase, string callerName, int timeoutMs, object arg = null) { this.tcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); this.tcsTask = this.tcs.Task; @@ -249,22 +251,22 @@ public PropertyGetter(ApiBase apiBase, string callerName, int timeoutMs, object switch (apiBase.SocketTaskEventNameType) { case SocketTaskEventNameTypes.DashesLowerFirst: - eventName = apiBase.propertyEventNames.GetOrAdd(callerName, s => $"{apiBase.objectName}-{s.StripAsync().LowerFirst()}-completed"); + eventName = apiBase.invocationEventNames.GetOrAdd(callerName, s => $"{apiBase.objectName}-{s.StripAsync().LowerFirst()}-completed"); break; case SocketTaskEventNameTypes.NoDashUpperFirst: - eventName = apiBase.propertyEventNames.GetOrAdd(callerName, s => $"{apiBase.objectName}{s.StripAsync()}Completed"); + eventName = apiBase.invocationEventNames.GetOrAdd(callerName, s => $"{apiBase.objectName}{s.StripAsync()}Completed"); break; default: throw new ArgumentOutOfRangeException(); } - + switch (apiBase.SocketTaskMessageNameType) { case SocketTaskMessageNameTypes.DashesLowerFirst: - messageName = apiBase.propertyMessageNames.GetOrAdd(callerName, s => $"{apiBase.objectName}-{s.StripAsync().LowerFirst()}"); + messageName = apiBase.invocationMessageNames.GetOrAdd(callerName, s => $"{apiBase.objectName}-{s.StripAsync().LowerFirst()}"); break; case SocketTaskMessageNameTypes.NoDashUpperFirst: - messageName = apiBase.propertyMessageNames.GetOrAdd(callerName, s => apiBase.objectName + s.StripAsync()); + messageName = apiBase.invocationMessageNames.GetOrAdd(callerName, s => apiBase.objectName + s.StripAsync()); break; default: throw new ArgumentOutOfRangeException(); @@ -289,17 +291,17 @@ public PropertyGetter(ApiBase apiBase, string callerName, int timeoutMs, object } } }); - + if (arg != null) { - _ = apiBase.Id >= 0 ? BridgeConnector.Socket.Emit(messageName, apiBase.Id, arg) : BridgeConnector.Socket.Emit(messageName, arg); + _ = apiBase.Id >= 0 ? BridgeConnector.Socket.Emit(messageName, apiBase.Id, arg) : BridgeConnector.Socket.Emit(messageName, arg); } else { - _ = apiBase.Id >= 0 ? BridgeConnector.Socket.Emit(messageName, apiBase.Id) : BridgeConnector.Socket.Emit(messageName); + _ = apiBase.Id >= 0 ? BridgeConnector.Socket.Emit(messageName, apiBase.Id) : BridgeConnector.Socket.Emit(messageName); } - System.Threading.Tasks.Task.Delay(PropertyTimeout).ContinueWith(_ => + System.Threading.Tasks.Task.Delay(InvocationTimeout).ContinueWith(_ => { if (this.tcs != null) { @@ -321,7 +323,7 @@ public override Task Task() return this.tcsTask as Task; } } - + [SuppressMessage("ReSharper", "InconsistentlySynchronizedField")] private class EventContainer { @@ -330,44 +332,44 @@ private class EventContainer private Action GetEventActionT() { - return (Action)eventActionT; + return (Action)this.eventActionT; } private void SetEventActionT(Action actionT) { - eventActionT = actionT; + this.eventActionT = actionT; } - public void OnEventAction() => eventAction?.Invoke(); + public void OnEventAction() => this.eventAction?.Invoke(); - public void OnEventActionT(T p) => GetEventActionT()?.Invoke(p); + public void OnEventActionT(T p) => this.GetEventActionT()?.Invoke(p); public void Register(Action receiver) { - eventAction += receiver; + this.eventAction += receiver; } public void Register(Action receiver) { - var actionT = GetEventActionT(); + var actionT = this.GetEventActionT(); actionT += receiver; - SetEventActionT(actionT); + this.SetEventActionT(actionT); } public bool Unregister(Action receiver) { - eventAction -= receiver; + this.eventAction -= receiver; return this.eventAction != null; } public bool Unregister(Action receiver) { - var actionT = GetEventActionT(); + var actionT = this.GetEventActionT(); actionT -= receiver; - SetEventActionT(actionT); + this.SetEventActionT(actionT); return actionT != null; } } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/App.cs b/src/ElectronNET.API/API/App.cs index 5a27e758..c486f90a 100644 --- a/src/ElectronNET.API/API/App.cs +++ b/src/ElectronNET.API/API/App.cs @@ -2,6 +2,7 @@ using ElectronNET.API.Extensions; using System; using System.Runtime.InteropServices; +using System.Runtime.Versioning; using System.Text.Json; using System.Threading; using System.Threading.Tasks; @@ -58,7 +59,7 @@ public event Action WindowAllClosed private event Action _windowAllClosed; /// - /// Emitted before the application starts closing its windows. + /// Emitted before the application starts closing its windows. /// /// Note: If application quit was initiated by then /// is emitted after emitting close event on all windows and closing them. @@ -259,6 +260,8 @@ public event Action WebContentsCreated /// screen readers, are enabled or disabled. See https://www.chromium.org/developers/design-documents/accessibility for more details. /// /// when Chrome's accessibility support is enabled, otherwise. + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public event Action AccessibilitySupportChanged { add => AddEvent(value, GetHashCode()); @@ -316,6 +319,7 @@ internal set /// /// On Windows, you have to parse the arguments using App.CommandLine to get the filepath. /// + [SupportedOSPlatform("macOS")] public event Action OpenFile { add => AddEvent(value, GetHashCode()); @@ -327,6 +331,7 @@ public event Action OpenFile /// Emitted when a MacOS user wants to open a URL with the application. Your application's Info.plist file must /// define the URL scheme within the CFBundleURLTypes key, and set NSPrincipalClass to AtomApplication. /// + [SupportedOSPlatform("macOS")] public event Action OpenUrl { add => AddEvent(value, GetHashCode()); @@ -366,7 +371,7 @@ public Task NameAsync { get { - return this.GetPropertyAsync(); + return this.InvokeAsync(); } } @@ -399,7 +404,6 @@ internal static App Instance private static object _syncRoot = new object(); - /// /// Try to close all windows. The event will be emitted first. If all windows are successfully /// closed, the event will be emitted and by default the application will terminate. This method @@ -482,6 +486,7 @@ public void Focus(FocusOptions focusOptions) /// /// Hides all application windows without minimizing them. /// + [SupportedOSPlatform("macOS")] public void Hide() { this.CallMethod0(); @@ -490,6 +495,7 @@ public void Hide() /// /// Shows application windows after they were hidden. Does not automatically focus them. /// + [SupportedOSPlatform("macOS")] public void Show() { this.CallMethod0(); @@ -501,7 +507,7 @@ public void Show() public async Task GetAppPathAsync(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); - return await this.GetPropertyAsync().ConfigureAwait(false); + return await this.InvokeAsync().ConfigureAwait(false); } /// @@ -558,14 +564,14 @@ public void SetPath(PathName name, string path) } /// - /// The version of the loaded application. If no version is found in the application’s package.json file, + /// The version of the loaded application. If no version is found in the application’s package.json file, /// the version of the current bundle or executable is returned. /// /// The version of the loaded application. public async Task GetVersionAsync(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); - return await this.GetPropertyAsync().ConfigureAwait(false); + return await this.InvokeAsync().ConfigureAwait(false); } /// @@ -579,7 +585,7 @@ public async Task GetVersionAsync(CancellationToken cancellationToken = public async Task GetLocaleAsync(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); - return await this.GetPropertyAsync().ConfigureAwait(false); + return await this.InvokeAsync().ConfigureAwait(false); } /// @@ -587,6 +593,8 @@ public async Task GetLocaleAsync(CancellationToken cancellationToken = d /// list from the task bar, and on macOS you can visit it from dock menu. /// /// Path to add. + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void AddRecentDocument(string path) { this.CallMethod1(path); @@ -595,6 +603,8 @@ public void AddRecentDocument(string path) /// /// Clears the recent documents list. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void ClearRecentDocuments() { this.CallMethod0(); @@ -710,6 +720,8 @@ public async Task SetAsDefaultProtocolClientAsync(string protocol, string /// The name of your protocol, without ://. /// The cancellation token. /// Whether the call succeeded. + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task RemoveAsDefaultProtocolClientAsync(string protocol, CancellationToken cancellationToken = default) { return await this.RemoveAsDefaultProtocolClientAsync(protocol, null, null, cancellationToken).ConfigureAwait(false); @@ -723,6 +735,8 @@ public async Task RemoveAsDefaultProtocolClientAsync(string protocol, Canc /// Defaults to process.execPath. /// The cancellation token. /// Whether the call succeeded. + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task RemoveAsDefaultProtocolClientAsync(string protocol, string path, CancellationToken cancellationToken = default) { return await this.RemoveAsDefaultProtocolClientAsync(protocol, path, null, cancellationToken).ConfigureAwait(false); @@ -737,6 +751,8 @@ public async Task RemoveAsDefaultProtocolClientAsync(string protocol, stri /// Defaults to an empty array. /// The cancellation token. /// Whether the call succeeded. + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task RemoveAsDefaultProtocolClientAsync(string protocol, string path, string[] args, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); @@ -827,6 +843,7 @@ public async Task IsDefaultProtocolClientAsync(string protocol, string pat /// Array of objects. /// The cancellation token. /// Whether the call succeeded. + [SupportedOSPlatform("Windows")] public async Task SetUserTasksAsync(UserTask[] userTasks, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); @@ -847,10 +864,11 @@ public async Task SetUserTasksAsync(UserTask[] userTasks, CancellationToke /// /// The cancellation token. /// Jump List settings. + [SupportedOSPlatform("Windows")] public async Task GetJumpListSettingsAsync(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); - return await this.GetPropertyAsync().ConfigureAwait(false); + return await this.InvokeAsync().ConfigureAwait(false); } /// @@ -869,6 +887,7 @@ public async Task GetJumpListSettingsAsync(CancellationToken c /// omitted from the Jump List. The list of removed items can be obtained using . /// /// Array of objects. + [SupportedOSPlatform("Windows")] public void SetJumpList(JumpListCategory[] categories) { this.CallMethod1(categories); @@ -941,7 +960,7 @@ public void ReleaseSingleInstanceLock() public async Task HasSingleInstanceLockAsync(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); - return await this.GetPropertyAsync().ConfigureAwait(false); + return await this.InvokeAsync().ConfigureAwait(false); } /// @@ -951,6 +970,7 @@ public async Task HasSingleInstanceLockAsync(CancellationToken cancellatio /// /// Uniquely identifies the activity. Maps to NSUserActivity.activityType. /// App-specific state to store for use by another device. + [SupportedOSPlatform("macOS")] public void SetUserActivity(string type, object userInfo) { SetUserActivity(type, userInfo, null); @@ -968,6 +988,7 @@ public void SetUserActivity(string type, object userInfo) /// /// The webpage to load in a browser if no suitable app is installed on the resuming device. The scheme must be http or https. /// + [SupportedOSPlatform("macOS")] public void SetUserActivity(string type, object userInfo, string webpageUrl) { this.CallMethod3(type, userInfo, webpageUrl); @@ -977,15 +998,17 @@ public void SetUserActivity(string type, object userInfo, string webpageUrl) /// The type of the currently running activity. /// /// The cancellation token. + [SupportedOSPlatform("macOS")] public async Task GetCurrentActivityTypeAsync(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); - return await this.GetPropertyAsync().ConfigureAwait(false); + return await this.InvokeAsync().ConfigureAwait(false); } /// /// Invalidates the current Handoff user activity. /// + [SupportedOSPlatform("macOS")] public void InvalidateCurrentActivity() { this.CallMethod0(); @@ -994,6 +1017,7 @@ public void InvalidateCurrentActivity() /// /// Marks the current Handoff user activity as inactive without invalidating it. /// + [SupportedOSPlatform("macOS")] public void ResignCurrentActivity() { this.CallMethod0(); @@ -1003,6 +1027,7 @@ public void ResignCurrentActivity() /// Changes the Application User Model ID to id. /// /// Model Id. + [SupportedOSPlatform("Windows")] public void SetAppUserModelId(string id) { this.CallMethod1(id); @@ -1017,6 +1042,7 @@ public void SetAppUserModelId(string id) /// /// The cancellation token. /// Result of import. Value of 0 indicates success. + [SupportedOSPlatform("Linux")] public async Task ImportCertificateAsync(ImportCertificateOptions options, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); @@ -1043,7 +1069,7 @@ public async Task ImportCertificateAsync(ImportCertificateOptions options, public async Task GetAppMetricsAsync(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); - return await this.GetPropertyAsync().ConfigureAwait(false); + return await this.InvokeAsync().ConfigureAwait(false); } /// @@ -1055,7 +1081,7 @@ public async Task GetAppMetricsAsync(CancellationToken cancella public async Task GetGpuFeatureStatusAsync(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); - return await this.GetPropertyAsync().ConfigureAwait(false); + return await this.InvokeAsync().ConfigureAwait(false); } /// @@ -1068,6 +1094,8 @@ public async Task GetGpuFeatureStatusAsync(CancellationToken c /// Counter badge. /// The cancellation token. /// Whether the call succeeded. + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("macOS")] public async Task SetBadgeCountAsync(int count, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); @@ -1087,10 +1115,12 @@ public async Task SetBadgeCountAsync(int count, CancellationToken cancella /// The current value displayed in the counter badge. /// /// The cancellation token. + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("macOS")] public async Task GetBadgeCountAsync(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); - return await this.GetPropertyAsync().ConfigureAwait(false); + return await this.InvokeAsync().ConfigureAwait(false); } /// @@ -1102,16 +1132,19 @@ public async Task GetBadgeCountAsync(CancellationToken cancellationToken = /// Whether the current desktop environment is Unity launcher. /// /// The cancellation token. + [SupportedOSPlatform("Linux")] public async Task IsUnityRunningAsync(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); - return await this.GetPropertyAsync().ConfigureAwait(false); + return await this.InvokeAsync().ConfigureAwait(false); } /// /// If you provided path and args options to then you need to pass the same /// arguments here for to be set correctly. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task GetLoginItemSettingsAsync(CancellationToken cancellationToken = default) { return await this.GetLoginItemSettingsAsync(null, cancellationToken).ConfigureAwait(false); @@ -1123,6 +1156,8 @@ public async Task GetLoginItemSettingsAsync(CancellationToken /// /// /// The cancellation token. + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task GetLoginItemSettingsAsync(LoginItemSettingsOptions options, CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); @@ -1152,6 +1187,8 @@ public async Task GetLoginItemSettingsAsync(LoginItemSettings /// you'll want to set the launch path to Update.exe, and pass arguments that specify your application name. /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void SetLoginItemSettings(LoginSettings loginSettings) { this.CallMethod1(loginSettings); @@ -1163,10 +1200,12 @@ public void SetLoginItemSettings(LoginSettings loginSettings) /// See Chromium's accessibility docs for more details. /// /// if Chrome’s accessibility support is enabled, otherwise. + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task IsAccessibilitySupportEnabledAsync(CancellationToken cancellationToken = default) { cancellationToken.ThrowIfCancellationRequested(); - return await this.GetPropertyAsync().ConfigureAwait(false); + return await this.InvokeAsync().ConfigureAwait(false); } /// @@ -1179,6 +1218,8 @@ public async Task IsAccessibilitySupportEnabledAsync(CancellationToken can /// Note: Rendering accessibility tree can significantly affect the performance of your app. It should not be enabled by default. /// /// Enable or disable accessibility tree rendering. + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void SetAccessibilitySupportEnabled(bool enabled) { this.CallMethod1(enabled); @@ -1245,7 +1286,7 @@ public Task UserAgentFallbackAsync return Task.Run(() => { var taskCompletionSource = new TaskCompletionSource(); - + BridgeConnector.Socket.Once("appGetUserAgentFallbackCompleted", taskCompletionSource.SetResult); BridgeConnector.Socket.Emit("appGetUserAgentFallback"); @@ -1295,4 +1336,4 @@ public void Once(string eventName, Action action) public async Task Once(string eventName, Action action) => await Events.Instance.Once(ModuleName, eventName, action).ConfigureAwait(false); } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/AutoUpdater.cs b/src/ElectronNET.API/API/AutoUpdater.cs index 0b5fd75f..d0b178b9 100644 --- a/src/ElectronNET.API/API/AutoUpdater.cs +++ b/src/ElectronNET.API/API/AutoUpdater.cs @@ -10,7 +10,7 @@ namespace ElectronNET.API /// /// Enable apps to automatically update themselves. Based on electron-updater. /// - public sealed class AutoUpdater: ApiBase + public sealed class AutoUpdater : ApiBase { protected override SocketTaskEventNameTypes SocketTaskEventNameType => SocketTaskEventNameTypes.DashesLowerFirst; protected override SocketTaskMessageNameTypes SocketTaskMessageNameType => SocketTaskMessageNameTypes.DashesLowerFirst; @@ -23,7 +23,7 @@ public bool AutoDownload { get { - return Task.Run(() => GetPropertyAsync()).Result; + return Task.Run(() => this.InvokeAsync()).Result; } set { @@ -40,7 +40,7 @@ public bool AutoInstallOnAppQuit { get { - return Task.Run(() => GetPropertyAsync()).Result; + return Task.Run(() => this.InvokeAsync()).Result; } set { @@ -49,7 +49,7 @@ public bool AutoInstallOnAppQuit } /// - /// *GitHub provider only.* Whether to allow update to pre-release versions. + /// *GitHub provider only.* Whether to allow update to pre-release versions. /// Defaults to "true" if application version contains prerelease components (e.g. "0.12.1-alpha.1", here "alpha" is a prerelease component), otherwise "false". /// /// If "true", downgrade will be allowed("allowDowngrade" will be set to "true"). @@ -58,7 +58,7 @@ public bool AllowPrerelease { get { - return Task.Run(() => GetPropertyAsync()).Result; + return Task.Run(() => this.InvokeAsync()).Result; } set { @@ -67,14 +67,14 @@ public bool AllowPrerelease } /// - /// *GitHub provider only.* + /// *GitHub provider only.* /// Get all release notes (from current version to latest), not just the latest (Default is false). /// public bool FullChangelog { get { - return Task.Run(() => GetPropertyAsync()).Result; + return Task.Run(() => this.InvokeAsync()).Result; } set { @@ -91,7 +91,7 @@ public bool AllowDowngrade { get { - return Task.Run(() => GetPropertyAsync()).Result; + return Task.Run(() => this.InvokeAsync()).Result; } set { @@ -106,7 +106,7 @@ public string UpdateConfigPath { get { - return Task.Run(() => GetPropertyAsync()).Result; + return Task.Run(() => this.InvokeAsync()).Result; } } @@ -117,12 +117,12 @@ public Task CurrentVersionAsync { get { - return Task.Run(() => GetPropertyAsync()); + return Task.Run(() => this.InvokeAsync()); } } /// - /// Get the update channel. Not applicable for GitHub. + /// Get the update channel. Not applicable for GitHub. /// Doesn’t return channel from the update configuration, only if was previously set. /// [Obsolete("Use the asynchronous version ChannelAsync instead")] @@ -135,19 +135,19 @@ public string Channel } /// - /// Get the update channel. Not applicable for GitHub. + /// Get the update channel. Not applicable for GitHub. /// Doesn’t return channel from the update configuration, only if was previously set. /// public Task ChannelAsync { get { - return Task.Run(() => GetPropertyAsync()); + return Task.Run(() => this.InvokeAsync()); } } /// - /// Set the update channel. Not applicable for GitHub. + /// Set the update channel. Not applicable for GitHub. /// public string SetChannel { @@ -165,7 +165,7 @@ public Task> RequestHeadersAsync { get { - return Task.Run(() => GetPropertyAsync>()); + return Task.Run(() => this.InvokeAsync>()); } } @@ -199,7 +199,7 @@ public event Action OnCheckingForUpdate } /// - /// Emitted when there is an available update. + /// Emitted when there is an available update. /// The update is downloaded automatically if AutoDownload is true. /// public event Action OnUpdateAvailable @@ -332,11 +332,11 @@ public Task CheckForUpdatesAndNotifyAsync() } /// - /// Restarts the app and installs the update after it has been downloaded. - /// It should only be called after `update-downloaded` has been emitted. - /// - /// Note: QuitAndInstall() will close all application windows first and only emit `before-quit` event on `app` after that. - /// This is different from the normal quit event sequence. + /// Restarts the app and installs the update after it has been downloaded. + /// It should only be called after `update-downloaded` has been emitted. + /// + /// Note: QuitAndInstall() will close all application windows first and only emit `before-quit` event on `app` after that. + /// This is different from the normal quit event sequence. /// /// *windows-only* Runs the installer in silent mode. Defaults to `false`. /// Run the app after finish even on silent install. Not applicable for macOS. Ignored if `isSilent` is set to `false`. @@ -374,9 +374,5 @@ public Task GetFeedURLAsync() return tcs.Task; } - - } -} - - +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/BrowserView.cs b/src/ElectronNET.API/API/BrowserView.cs index 479d9712..21d393fe 100644 --- a/src/ElectronNET.API/API/BrowserView.cs +++ b/src/ElectronNET.API/API/BrowserView.cs @@ -8,10 +8,11 @@ namespace ElectronNET.API /// It is like a child window, except that it is positioned relative to its owning window. /// It is meant to be an alternative to the webview tag. /// - public class BrowserView: ApiBase + public class BrowserView : ApiBase { protected override SocketTaskEventNameTypes SocketTaskEventNameType => SocketTaskEventNameTypes.DashesLowerFirst; protected override SocketTaskMessageNameTypes SocketTaskMessageNameType => SocketTaskMessageNameTypes.DashesLowerFirst; + /// /// Gets the identifier. /// @@ -30,7 +31,7 @@ public Rectangle Bounds { get { - return Task.Run(() => GetPropertyAsync()).Result; + return Task.Run(() => this.InvokeAsync()).Result; } set { @@ -69,5 +70,4 @@ public void SetBackgroundColor(string color) BridgeConnector.Socket.Emit("browserView-setBackgroundColor", Id, color); } } -} - +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/BrowserWindow.cs b/src/ElectronNET.API/API/BrowserWindow.cs index f4e7529f..bd60b77d 100644 --- a/src/ElectronNET.API/API/BrowserWindow.cs +++ b/src/ElectronNET.API/API/BrowserWindow.cs @@ -1,10 +1,11 @@ -using ElectronNET.API.Entities; -using ElectronNET.API.Extensions; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; +using System.Runtime.Versioning; using System.Threading.Tasks; +using ElectronNET.API.Entities; +using ElectronNET.API.Extensions; // ReSharper disable InconsistentNaming @@ -27,7 +28,7 @@ public class BrowserWindow : ApiBase public override int Id { get; protected set; } /// - /// Emitted when the web page has been rendered (while not being shown) and + /// Emitted when the web page has been rendered (while not being shown) and /// window can be displayed without a visual flash. /// public event Action OnReadyToShow @@ -55,8 +56,8 @@ public event Action OnClose } /// - /// Emitted when the window is closed. - /// After you have received this event you should remove the + /// Emitted when the window is closed. + /// After you have received this event you should remove the /// reference to the window and avoid using it any more. /// public event Action OnClosed @@ -68,6 +69,7 @@ public event Action OnClosed /// /// Emitted when window session is going to end due to force shutdown or machine restart or session log off. /// + [SupportedOSPlatform("Windows")] public event Action OnSessionEnd { add => AddEvent(value, Id); @@ -187,6 +189,8 @@ public event Action OnMove /// /// macOS: Emitted once when the window is moved to a new position. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public event Action OnMoved { add => AddEvent(value, Id); @@ -230,14 +234,16 @@ public event Action OnLeaveHtmlFullScreen } /// - /// Emitted when an App Command is invoked. These are typically related to - /// keyboard media keys or browser commands, as well as the “Back” button + /// Emitted when an App Command is invoked. These are typically related to + /// keyboard media keys or browser commands, as well as the “Back” button /// built into some mice on Windows. /// - /// Commands are lowercased, underscores are replaced with hyphens, - /// and the APPCOMMAND_ prefix is stripped off.e.g.APPCOMMAND_BROWSER_BACKWARD + /// Commands are lowercased, underscores are replaced with hyphens, + /// and the APPCOMMAND_ prefix is stripped off.e.g.APPCOMMAND_BROWSER_BACKWARD /// is emitted as browser-backward. /// + [SupportedOSPlatform("Windows")] + [SupportedOSPlatform("Linux")] public event Action OnAppCommand { add => AddEvent(value, Id); @@ -247,6 +253,7 @@ public event Action OnAppCommand /// /// Emitted on 3-finger swipe. Possible directions are up, right, down, left. /// + [SupportedOSPlatform("macOS")] public event Action OnSwipe { add => AddEvent(value, Id); @@ -256,6 +263,7 @@ public event Action OnSwipe /// /// Emitted when the window opens a sheet. /// + [SupportedOSPlatform("macOS")] public event Action OnSheetBegin { add => AddEvent(value, Id); @@ -265,6 +273,7 @@ public event Action OnSheetBegin /// /// Emitted when the window has closed a sheet. /// + [SupportedOSPlatform("macOS")] public event Action OnSheetEnd { add => AddEvent(value, Id); @@ -274,6 +283,7 @@ public event Action OnSheetEnd /// /// Emitted when the native new tab button is clicked. /// + [SupportedOSPlatform("macOS")] public event Action OnNewWindowForTab { add => AddEvent(value, Id); @@ -287,15 +297,15 @@ internal BrowserWindow(int id) } /// - /// Force closing the window, the unload and beforeunload event won’t be - /// emitted for the web page, and close event will also not be emitted + /// Force closing the window, the unload and beforeunload event won’t be + /// emitted for the web page, and close event will also not be emitted /// for this window, but it guarantees the closed event will be emitted. /// public void Destroy() => this.CallMethod0(); /// - /// Try to close the window. This has the same effect as a user manually - /// clicking the close button of the window. The web page may cancel the close though. + /// Try to close the window. This has the same effect as a user manually + /// clicking the close button of the window. The web page may cancel the close though. /// public void Close() => this.CallMethod0(); @@ -313,13 +323,13 @@ internal BrowserWindow(int id) /// Whether the window is focused. /// /// - public Task IsFocusedAsync() => this.GetPropertyAsync(); + public Task IsFocusedAsync() => this.InvokeAsync(); /// /// Whether the window is destroyed. /// /// - public Task IsDestroyedAsync() => this.GetPropertyAsync(); + public Task IsDestroyedAsync() => this.InvokeAsync(); /// /// Shows and gives focus to the window. @@ -340,13 +350,13 @@ internal BrowserWindow(int id) /// Whether the window is visible to the user. /// /// - public Task IsVisibleAsync() => this.GetPropertyAsync(); + public Task IsVisibleAsync() => this.InvokeAsync(); /// /// Whether current window is a modal window. /// /// - public Task IsModalAsync() => this.GetPropertyAsync(); + public Task IsModalAsync() => this.InvokeAsync(); /// /// Maximizes the window. This will also show (but not focus) the window if it isn’t being displayed already. @@ -362,7 +372,7 @@ internal BrowserWindow(int id) /// Whether the window is maximized. /// /// - public Task IsMaximizedAsync() => this.GetPropertyAsync(); + public Task IsMaximizedAsync() => this.InvokeAsync(); /// /// Minimizes the window. On some platforms the minimized window will be shown in the Dock. @@ -378,7 +388,7 @@ internal BrowserWindow(int id) /// Whether the window is minimized. /// /// - public Task IsMinimizedAsync() => this.GetPropertyAsync(); + public Task IsMinimizedAsync() => this.InvokeAsync(); /// /// Sets whether the window should be in fullscreen mode. @@ -390,10 +400,10 @@ internal BrowserWindow(int id) /// Whether the window is in fullscreen mode. /// /// - public Task IsFullScreenAsync() => this.GetPropertyAsync(); + public Task IsFullScreenAsync() => this.InvokeAsync(); /// - /// This will make a window maintain an aspect ratio. The extra size allows a developer to have space, + /// This will make a window maintain an aspect ratio. The extra size allows a developer to have space, /// specified in pixels, not included within the aspect ratio calculations. This API already takes into /// account the difference between a window’s size and its content size. /// @@ -401,7 +411,7 @@ internal BrowserWindow(int id) /// of controls on the left edge, 25 pixels of controls on the right edge and 50 pixels of controls below /// the player. In order to maintain a 16:9 aspect ratio (standard aspect ratio for HD @1920x1080) within /// the player itself we would call this function with arguments of 16/9 and[40, 50]. The second argument - /// doesn’t care where the extra width and height are within the content view–only that they exist. Just + /// doesn’t care where the extra width and height are within the content view–only that they exist. Just /// sum any extra width and height areas you have within the overall content view. /// /// The aspect ratio to maintain for some portion of the content view. @@ -410,7 +420,7 @@ public void SetAspectRatio(double aspectRatio, Size extraSize) => this.CallMethod2(aspectRatio, extraSize); /// - /// This will make a window maintain an aspect ratio. The extra size allows a developer to have space, + /// This will make a window maintain an aspect ratio. The extra size allows a developer to have space, /// specified in pixels, not included within the aspect ratio calculations. This API already takes into /// account the difference between a window’s size and its content size. /// @@ -418,7 +428,7 @@ public void SetAspectRatio(double aspectRatio, Size extraSize) => /// of controls on the left edge, 25 pixels of controls on the right edge and 50 pixels of controls below /// the player. In order to maintain a 16:9 aspect ratio (standard aspect ratio for HD @1920x1080) within /// the player itself we would call this function with arguments of 16/9 and[40, 50]. The second argument - /// doesn’t care where the extra width and height are within the content view–only that they exist. Just + /// doesn’t care where the extra width and height are within the content view–only that they exist. Just /// sum any extra width and height areas you have within the overall content view. /// /// The aspect ratio to maintain for some portion of the content view. @@ -429,24 +439,27 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// /// Uses Quick Look to preview a file at a given path. /// - /// The absolute path to the file to preview with QuickLook. This is important as - /// Quick Look uses the file name and file extension on the path to determine the content type of the + /// The absolute path to the file to preview with QuickLook. This is important as + /// Quick Look uses the file name and file extension on the path to determine the content type of the /// file to open. + [SupportedOSPlatform("macOS")] public void PreviewFile(string path) => this.CallMethod1(path); /// /// Uses Quick Look to preview a file at a given path. /// - /// The absolute path to the file to preview with QuickLook. This is important as - /// Quick Look uses the file name and file extension on the path to determine the content type of the + /// The absolute path to the file to preview with QuickLook. This is important as + /// Quick Look uses the file name and file extension on the path to determine the content type of the /// file to open. - /// The name of the file to display on the Quick Look modal view. This is + /// The name of the file to display on the Quick Look modal view. This is /// purely visual and does not affect the content type of the file. Defaults to path. + [SupportedOSPlatform("macOS")] public void PreviewFile(string path, string displayname) => this.CallMethod2(path, displayname); /// /// Closes the currently open Quick Look panel. /// + [SupportedOSPlatform("macOS")] public void CloseFilePreview() => this.CallMethod0(); /// @@ -466,7 +479,7 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// Gets the bounds asynchronous. /// /// - public Task GetBoundsAsync() => this.GetPropertyAsync(); + public Task GetBoundsAsync() => this.InvokeAsync(); /// /// Resizes and moves the window’s client area (e.g. the web page) to the supplied bounds. @@ -485,7 +498,7 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// Gets the content bounds asynchronous. /// /// - public Task GetContentBoundsAsync() => this.GetPropertyAsync(); + public Task GetContentBoundsAsync() => this.InvokeAsync(); /// /// Resizes the window to width and height. @@ -506,7 +519,7 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// Contains the window’s width and height. /// /// - public Task GetSizeAsync() => this.GetPropertyAsync(); + public Task GetSizeAsync() => this.InvokeAsync(); /// /// Resizes the window’s client area (e.g. the web page) to width and height. @@ -527,7 +540,7 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// Contains the window’s client area’s width and height. /// /// - public Task GetContentSizeAsync() => this.GetPropertyAsync(); + public Task GetContentSizeAsync() => this.InvokeAsync(); /// /// Sets the minimum size of window to width and height. @@ -540,7 +553,7 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// Contains the window’s minimum width and height. /// /// - public Task GetMinimumSizeAsync() => this.GetPropertyAsync(); + public Task GetMinimumSizeAsync() => this.InvokeAsync(); /// /// Sets the maximum size of window to width and height. @@ -553,7 +566,7 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// Contains the window’s maximum width and height. /// /// - public Task GetMaximumSizeAsync() => this.GetPropertyAsync(); + public Task GetMaximumSizeAsync() => this.InvokeAsync(); /// /// Sets whether the window can be manually resized by user. @@ -565,12 +578,14 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// Whether the window can be manually resized by user. /// /// - public Task IsResizableAsync() => this.GetPropertyAsync(); + public Task IsResizableAsync() => this.InvokeAsync(); /// /// Sets whether the window can be moved by user. On Linux does nothing. /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void SetMovable(bool movable) => this.CallMethod1(movable); /// @@ -579,12 +594,16 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// On Linux always returns true. /// /// On Linux always returns true. - public Task IsMovableAsync() => this.GetPropertyAsync(); + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] + public Task IsMovableAsync() => this.InvokeAsync(); /// /// Sets whether the window can be manually minimized by user. On Linux does nothing. /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void SetMinimizable(bool minimizable) => this.CallMethod1(minimizable); /// @@ -593,12 +612,16 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// On Linux always returns true. /// /// On Linux always returns true. - public Task IsMinimizableAsync() => this.GetPropertyAsync(); + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] + public Task IsMinimizableAsync() => this.InvokeAsync(); /// /// Sets whether the window can be manually maximized by user. On Linux does nothing. /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void SetMaximizable(bool maximizable) => this.CallMethod1(maximizable); /// @@ -607,7 +630,9 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// On Linux always returns true. /// /// On Linux always returns true. - public Task IsMaximizableAsync() => this.GetPropertyAsync(); + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] + public Task IsMaximizableAsync() => this.InvokeAsync(); /// /// Sets whether the maximize/zoom window button toggles fullscreen mode or maximizes the window. @@ -619,12 +644,14 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// Whether the maximize/zoom window button toggles fullscreen mode or maximizes the window. /// /// - public Task IsFullScreenableAsync() => this.GetPropertyAsync(); + public Task IsFullScreenableAsync() => this.InvokeAsync(); /// /// Sets whether the window can be manually closed by user. On Linux does nothing. /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void SetClosable(bool closable) => this.CallMethod1(closable); /// @@ -633,37 +660,39 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// On Linux always returns true. /// /// On Linux always returns true. - public Task IsClosableAsync() => this.GetPropertyAsync(); + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] + public Task IsClosableAsync() => this.InvokeAsync(); /// - /// Sets whether the window should show always on top of other windows. - /// After setting this, the window is still a normal window, not a toolbox + /// Sets whether the window should show always on top of other windows. + /// After setting this, the window is still a normal window, not a toolbox /// window which can not be focused on. /// /// public void SetAlwaysOnTop(bool flag) => this.CallMethod1(flag); /// - /// Sets whether the window should show always on top of other windows. - /// After setting this, the window is still a normal window, not a toolbox + /// Sets whether the window should show always on top of other windows. + /// After setting this, the window is still a normal window, not a toolbox /// window which can not be focused on. /// /// - /// Values include normal, floating, torn-off-menu, modal-panel, main-menu, - /// status, pop-up-menu and screen-saver. The default is floating. + /// Values include normal, floating, torn-off-menu, modal-panel, main-menu, + /// status, pop-up-menu and screen-saver. The default is floating. /// See the macOS docs public void SetAlwaysOnTop(bool flag, OnTopLevel level) => this.CallMethod2(flag, level.GetDescription()); /// - /// Sets whether the window should show always on top of other windows. - /// After setting this, the window is still a normal window, not a toolbox + /// Sets whether the window should show always on top of other windows. + /// After setting this, the window is still a normal window, not a toolbox /// window which can not be focused on. /// /// - /// Values include normal, floating, torn-off-menu, modal-panel, main-menu, - /// status, pop-up-menu and screen-saver. The default is floating. + /// Values include normal, floating, torn-off-menu, modal-panel, main-menu, + /// status, pop-up-menu and screen-saver. The default is floating. /// See the macOS docs - /// The number of layers higher to set this window relative to the given level. + /// The number of layers higher to set this window relative to the given level. /// The default is 0. Note that Apple discourages setting levels higher than 1 above screen-saver. public void SetAlwaysOnTop(bool flag, OnTopLevel level, int relativeLevel) => this.CallMethod3(flag, level.GetDescription(), relativeLevel); @@ -671,7 +700,7 @@ public void SetAspectRatio(int aspectRatio, Size extraSize) => /// Whether the window is always on top of other windows. /// /// - public Task IsAlwaysOnTopAsync() => this.GetPropertyAsync(); + public Task IsAlwaysOnTopAsync() => this.InvokeAsync(); /// /// Moves window to the center of the screen. @@ -721,7 +750,7 @@ private bool isWindows10() /// Contains the window’s current position. /// /// - public Task GetPositionAsync() => this.GetPropertyAsync(); + public Task GetPositionAsync() => this.InvokeAsync(); /// /// Changes the title of native window to title. @@ -735,23 +764,25 @@ private bool isWindows10() /// Note: The title of web page can be different from the title of the native window. /// /// - public Task GetTitleAsync() => this.GetPropertyAsync(); + public Task GetTitleAsync() => this.InvokeAsync(); /// - /// Changes the attachment point for sheets on macOS. - /// By default, sheets are attached just below the window frame, + /// Changes the attachment point for sheets on macOS. + /// By default, sheets are attached just below the window frame, /// but you may want to display them beneath a HTML-rendered toolbar. /// /// + [SupportedOSPlatform("macOS")] public void SetSheetOffset(float offsetY) => this.CallMethod1(offsetY); /// - /// Changes the attachment point for sheets on macOS. - /// By default, sheets are attached just below the window frame, + /// Changes the attachment point for sheets on macOS. + /// By default, sheets are attached just below the window frame, /// but you may want to display them beneath a HTML-rendered toolbar. /// /// /// + [SupportedOSPlatform("macOS")] public void SetSheetOffset(float offsetY, float offsetX) => this.CallMethod2(offsetY, offsetX); /// @@ -764,6 +795,8 @@ private bool isWindows10() /// Makes the window not show in the taskbar. /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void SetSkipTaskbar(bool skip) => this.CallMethod1(skip); /// @@ -776,39 +809,43 @@ private bool isWindows10() /// Whether the window is in kiosk mode. /// /// - public Task IsKioskAsync() => this.GetPropertyAsync(); + public Task IsKioskAsync() => this.InvokeAsync(); /// /// Returns the native type of the handle is HWND on Windows, NSView* on macOS, and Window (unsigned long) on Linux. /// /// string of the native handle obtained, HWND on Windows, NSView* on macOS, and Window (unsigned long) on Linux. - public Task GetNativeWindowHandle() => this.GetPropertyAsync(); + public Task GetNativeWindowHandle() => this.InvokeAsync(); /// - /// Sets the pathname of the file the window represents, + /// Sets the pathname of the file the window represents, /// and the icon of the file will show in window’s title bar. /// /// + [SupportedOSPlatform("macOS")] public void SetRepresentedFilename(string filename) => this.CallMethod1(filename); /// /// The pathname of the file the window represents. /// /// - public Task GetRepresentedFilenameAsync() => this.GetPropertyAsync(); + [SupportedOSPlatform("macOS")] + public Task GetRepresentedFilenameAsync() => this.InvokeAsync(); /// - /// Specifies whether the window’s document has been edited, + /// Specifies whether the window’s document has been edited, /// and the icon in title bar will become gray when set to true. /// /// + [SupportedOSPlatform("macOS")] public void SetDocumentEdited(bool edited) => this.CallMethod1(edited); /// /// Whether the window’s document has been edited. /// /// - public Task IsDocumentEditedAsync() => this.GetPropertyAsync(); + [SupportedOSPlatform("macOS")] + public Task IsDocumentEditedAsync() => this.InvokeAsync(); /// /// Focuses the on web view. @@ -821,14 +858,14 @@ private bool isWindows10() public void BlurWebView() => this.CallMethod0(); /// - /// The url can be a remote address (e.g. http://) or + /// The url can be a remote address (e.g. http://) or /// a path to a local HTML file using the file:// protocol. /// /// public void LoadURL(string url) => this.CallMethod1(url); /// - /// The url can be a remote address (e.g. http://) or + /// The url can be a remote address (e.g. http://) or /// a path to a local HTML file using the file:// protocol. /// /// @@ -857,10 +894,12 @@ public IReadOnlyCollection MenuItems private List _items = new List(); /// - /// Sets the menu as the window’s menu bar, + /// Sets the menu as the window’s menu bar, /// setting it to null will remove the menu bar. /// /// + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] public void SetMenu(MenuItem[] menuItems) { menuItems.AddMenuItemsId(); @@ -878,6 +917,8 @@ public void SetMenu(MenuItem[] menuItems) /// /// Remove the window's menu bar. /// + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] public void RemoveMenu() => this.CallMethod0(); /// @@ -920,7 +961,7 @@ public void SetProgressBar(double progress, ProgressBarOptions progressBarOption /// On Windows and Linux always returns true. /// /// - public Task HasShadowAsync() => this.GetPropertyAsync(); + public Task HasShadowAsync() => this.InvokeAsync(); /// /// Gets the thumbar buttons. @@ -939,17 +980,18 @@ public IReadOnlyCollection ThumbarButtons private List _thumbarButtons = new List(); /// - /// Add a thumbnail toolbar with a specified set of buttons to the thumbnail - /// image of a window in a taskbar button layout. Returns a Boolean object + /// Add a thumbnail toolbar with a specified set of buttons to the thumbnail + /// image of a window in a taskbar button layout. Returns a Boolean object /// indicates whether the thumbnail has been added successfully. /// - /// The number of buttons in thumbnail toolbar should be no greater than 7 due + /// The number of buttons in thumbnail toolbar should be no greater than 7 due /// to the limited room.Once you setup the thumbnail toolbar, the toolbar cannot /// be removed due to the platform’s limitation.But you can call the API with an /// empty array to clean the buttons. /// /// /// Whether the buttons were added successfully. + [SupportedOSPlatform("Windows")] public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) { var tcs = new TaskCompletionSource(); @@ -977,55 +1019,67 @@ public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) /// an empty region: {x: 0, y: 0, width: 0, height: 0}. /// /// + [SupportedOSPlatform("Windows")] public void SetThumbnailClip(Rectangle rectangle) => this.CallMethod1(rectangle); /// /// Sets the toolTip that is displayed when hovering over the window thumbnail in the taskbar. /// /// + [SupportedOSPlatform("Windows")] public void SetThumbnailToolTip(string tooltip) => this.CallMethod1(tooltip); /// /// Sets the properties for the window’s taskbar button. /// - /// Note: relaunchCommand and relaunchDisplayName must always be set together. + /// Note: relaunchCommand and relaunchDisplayName must always be set together. /// If one of those properties is not set, then neither will be used. /// /// + [SupportedOSPlatform("Windows")] public void SetAppDetails(AppDetailsOptions options) => this.CallMethod1(options); /// /// Same as webContents.showDefinitionForSelection(). /// + [SupportedOSPlatform("macOS")] public void ShowDefinitionForSelection() => this.CallMethod0(); /// - /// Sets whether the window menu bar should hide itself automatically. + /// Sets whether the window menu bar should hide itself automatically. /// Once set the menu bar will only show when users press the single Alt key. /// /// If the menu bar is already visible, calling setAutoHideMenuBar(true) won’t hide it immediately. /// /// + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] public void SetAutoHideMenuBar(bool hide) => this.CallMethod1(hide); /// /// Whether menu bar automatically hides itself. /// /// - public Task IsMenuBarAutoHideAsync() => this.GetPropertyAsync(); + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] + public Task IsMenuBarAutoHideAsync() => this.InvokeAsync(); /// /// Sets whether the menu bar should be visible. If the menu bar is auto-hide, /// users can still bring up the menu bar by pressing the single Alt key. /// /// + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] public void SetMenuBarVisibility(bool visible) => this.CallMethod1(visible); /// /// Whether the menu bar is visible. /// /// - public Task IsMenuBarVisibleAsync() => this.GetPropertyAsync(); + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] + public Task IsMenuBarVisibleAsync() => this.InvokeAsync(); /// /// Sets whether the window should be visible on all workspaces. @@ -1033,6 +1087,8 @@ public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) /// Note: This API does nothing on Windows. /// /// + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("macOS")] public void SetVisibleOnAllWorkspaces(bool visible) => this.CallMethod1(visible); /// @@ -1041,12 +1097,14 @@ public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) /// Note: This API always returns false on Windows. /// /// - public Task IsVisibleOnAllWorkspacesAsync() => this.GetPropertyAsync(); + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("macOS")] + public Task IsVisibleOnAllWorkspacesAsync() => this.InvokeAsync(); /// /// Makes the window ignore all mouse events. /// - /// All mouse events happened in this window will be passed to the window + /// All mouse events happened in this window will be passed to the window /// below this window, but if this window has focus, it will still receive keyboard events. /// /// @@ -1055,20 +1113,24 @@ public Task SetThumbarButtonsAsync(ThumbarButton[] thumbarButtons) /// /// Prevents the window contents from being captured by other apps. /// - /// On macOS it sets the NSWindow’s sharingType to NSWindowSharingNone. + /// On macOS it sets the NSWindow’s sharingType to NSWindowSharingNone. /// On Windows it calls SetWindowDisplayAffinity with WDA_MONITOR. /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void SetContentProtection(bool enable) => this.CallMethod1(enable); /// /// Changes whether the window can be focused. /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void SetFocusable(bool focusable) => this.CallMethod1(focusable); /// - /// Sets parent as current window’s parent window, + /// Sets parent as current window’s parent window, /// passing null will turn current window into a top-level window. /// /// @@ -1090,7 +1152,7 @@ public void SetParentWindow(BrowserWindow parent) /// public async Task GetParentWindowAsync() { - var browserWindowId = await this.GetPropertyAsync().ConfigureAwait(false); + var browserWindowId = await this.InvokeAsync().ConfigureAwait(false); var browserWindow = Electron.WindowManager.BrowserWindows.ToList().Single(x => x.Id == browserWindowId); return browserWindow; } @@ -1101,7 +1163,7 @@ public async Task GetParentWindowAsync() /// public async Task> GetChildWindowsAsync() { - var browserWindowIds = await this.GetPropertyAsync().ConfigureAwait(false); + var browserWindowIds = await this.InvokeAsync().ConfigureAwait(false); var browserWindows = new List(); foreach (var id in browserWindowIds) @@ -1117,15 +1179,17 @@ public async Task> GetChildWindowsAsync() /// Controls whether to hide cursor when typing. /// /// + [SupportedOSPlatform("macOS")] public void SetAutoHideCursor(bool autoHide) => this.CallMethod1(autoHide); /// - /// Adds a vibrancy effect to the browser window. + /// Adds a vibrancy effect to the browser window. /// Passing null or an empty string will remove the vibrancy effect on the window. /// - /// Can be appearance-based, light, dark, titlebar, selection, - /// menu, popover, sidebar, medium-light or ultra-dark. + /// Can be appearance-based, light, dark, titlebar, selection, + /// menu, popover, sidebar, medium-light or ultra-dark. /// See the macOS documentation for more details. + [SupportedOSPlatform("macOS")] public void SetVibrancy(Vibrancy type) => this.CallMethod1(type.GetDescription()); /// @@ -1134,8 +1198,8 @@ public async Task> GetChildWindowsAsync() public WebContents WebContents { get; internal set; } /// - /// A BrowserView can be used to embed additional web content into a BrowserWindow. - /// It is like a child window, except that it is positioned relative to its owning window. + /// A BrowserView can be used to embed additional web content into a BrowserWindow. + /// It is like a child window, except that it is positioned relative to its owning window. /// It is meant to be an alternative to the webview tag. /// /// @@ -1144,4 +1208,4 @@ public void SetBrowserView(BrowserView browserView) // This message name does not match the default ApiBase naming convention. BridgeConnector.Socket.Emit("browserWindow-setBrowserView", Id, browserView.Id); } -} \ No newline at end of file +} diff --git a/src/ElectronNET.API/API/Clipboard.cs b/src/ElectronNET.API/API/Clipboard.cs index 5d067f6a..c25e3dd5 100644 --- a/src/ElectronNET.API/API/Clipboard.cs +++ b/src/ElectronNET.API/API/Clipboard.cs @@ -1,7 +1,9 @@ using ElectronNET.API.Entities; using ElectronNET.API.Serialization; +using System.Runtime.Versioning; using System.Text.Json; using System.Threading.Tasks; + // ReSharper disable InconsistentNaming namespace ElectronNET.API @@ -9,7 +11,7 @@ namespace ElectronNET.API /// /// Perform copy and paste operations on the system clipboard. /// - public sealed class Clipboard: ApiBase + public sealed class Clipboard : ApiBase { protected override SocketTaskEventNameTypes SocketTaskEventNameType => SocketTaskEventNameTypes.DashesLowerFirst; protected override SocketTaskMessageNameTypes SocketTaskMessageNameType => SocketTaskMessageNameTypes.DashesLowerFirst; @@ -45,7 +47,7 @@ internal static Clipboard Instance /// /// /// The content in the clipboard as plain text. - public Task ReadTextAsync(string type = "") => GetPropertyAsync(type); + public Task ReadTextAsync(string type = "") => this.InvokeAsync(type); /// /// Writes the text into the clipboard as plain text. @@ -62,7 +64,7 @@ public void WriteText(string text, string type = "") /// /// /// - public Task ReadHTMLAsync(string type = "") => GetPropertyAsync(type); + public Task ReadHTMLAsync(string type = "") => this.InvokeAsync(type); /// /// Writes markup to the clipboard. @@ -79,7 +81,7 @@ public void WriteHTML(string markup, string type = "") /// /// /// - public Task ReadRTFAsync(string type = "") => GetPropertyAsync(type); + public Task ReadRTFAsync(string type = "") => this.InvokeAsync(type); /// /// Writes the text into the clipboard in RTF. @@ -92,23 +94,27 @@ public void WriteRTF(string text, string type = "") } /// - /// Returns an Object containing title and url keys representing - /// the bookmark in the clipboard. The title and url values will + /// Returns an Object containing title and url keys representing + /// the bookmark in the clipboard. The title and url values will /// be empty strings when the bookmark is unavailable. /// /// - public Task ReadBookmarkAsync() => GetPropertyAsync(); + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] + public Task ReadBookmarkAsync() => this.InvokeAsync(); /// /// Writes the title and url into the clipboard as a bookmark. /// /// Note: Most apps on Windows don’t support pasting bookmarks - /// into them so you can use clipboard.write to write both a + /// into them so you can use clipboard.write to write both a /// bookmark and fallback text to the clipboard. /// /// /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public void WriteBookmark(string title, string url, string type = "") { BridgeConnector.Socket.Emit("clipboard-writeBookmark", title, url, type); @@ -120,13 +126,15 @@ public void WriteBookmark(string title, string url, string type = "") /// find pasteboard whenever the application is activated. /// /// - public Task ReadFindTextAsync() => GetPropertyAsync(); + [SupportedOSPlatform("macOS")] + public Task ReadFindTextAsync() => this.InvokeAsync(); /// - /// macOS: Writes the text into the find pasteboard as plain text. This method uses + /// macOS: Writes the text into the find pasteboard as plain text. This method uses /// synchronous IPC when called from the renderer process. /// /// + [SupportedOSPlatform("macOS")] public void WriteFindText(string text) { BridgeConnector.Socket.Emit("clipboard-writeFindText", text); @@ -146,7 +154,7 @@ public void Clear(string type = "") /// /// /// - public Task AvailableFormatsAsync(string type = "") => GetPropertyAsync(type); + public Task AvailableFormatsAsync(string type = "") => this.InvokeAsync(type); /// /// Writes data to the clipboard. @@ -163,7 +171,7 @@ public void Write(Data data, string type = "") /// /// /// - public Task ReadImageAsync(string type = "") => GetPropertyAsync(type); + public Task ReadImageAsync(string type = "") => this.InvokeAsync(type); /// /// Writes an image to the clipboard. @@ -175,4 +183,4 @@ public void WriteImage(NativeImage image, string type = "") BridgeConnector.Socket.Emit("clipboard-writeImage", JsonSerializer.Serialize(image, ElectronJson.Options), type); } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Cookies.cs b/src/ElectronNET.API/API/Cookies.cs index 8540598d..dac0d2d0 100644 --- a/src/ElectronNET.API/API/Cookies.cs +++ b/src/ElectronNET.API/API/Cookies.cs @@ -59,7 +59,5 @@ public event Action OnChanged } private event Action _changed; - - } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Dialog.cs b/src/ElectronNET.API/API/Dialog.cs index 933c6ea4..21816463 100644 --- a/src/ElectronNET.API/API/Dialog.cs +++ b/src/ElectronNET.API/API/Dialog.cs @@ -1,5 +1,6 @@ using ElectronNET.API.Entities; using System; +using System.Runtime.Versioning; using System.Text.Json; using System.Threading.Tasks; @@ -37,8 +38,8 @@ internal static Dialog Instance } /// - /// Note: On Windows and Linux an open dialog can not be both a file selector - /// and a directory selector, so if you set properties to ['openFile', 'openDirectory'] + /// Note: On Windows and Linux an open dialog can not be both a file selector + /// and a directory selector, so if you set properties to ['openFile', 'openDirectory'] /// on these platforms, a directory selector will be shown. /// /// The browserWindow argument allows the dialog to attach itself to a parent window, making it modal. @@ -50,9 +51,9 @@ public Task ShowOpenDialogAsync(BrowserWindow browserWindow, OpenDialo var guid = Guid.NewGuid().ToString(); BridgeConnector.Socket.Once("showOpenDialogComplete" + guid, tcs.SetResult); - BridgeConnector.Socket.Emit("showOpenDialog", - browserWindow, - options, + BridgeConnector.Socket.Emit("showOpenDialog", + browserWindow, + options, guid); return tcs.Task; @@ -167,9 +168,9 @@ public Task ShowMessageBoxAsync(BrowserWindow browserWindow, M /// /// Displays a modal dialog that shows an error message. /// - /// This API can be called safely before the ready event the app module emits, - /// it is usually used to report errors in early stage of startup.If called - /// before the app readyevent on Linux, the message will be emitted to stderr, + /// This API can be called safely before the ready event the app module emits, + /// it is usually used to report errors in early stage of startup.If called + /// before the app readyevent on Linux, the message will be emitted to stderr, /// and no GUI dialog will appear. /// /// The title to display in the error box. @@ -181,11 +182,13 @@ public void ShowErrorBox(string title, string content) /// /// On macOS, this displays a modal dialog that shows a message and certificate information, - /// and gives the user the option of trusting/importing the certificate. If you provide a + /// and gives the user the option of trusting/importing the certificate. If you provide a /// browserWindow argument the dialog will be attached to the parent window, making it modal. /// /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public Task ShowCertificateTrustDialogAsync(CertificateTrustDialogOptions options) { return ShowCertificateTrustDialogAsync(null, options); @@ -193,12 +196,14 @@ public Task ShowCertificateTrustDialogAsync(CertificateTrustDialogOptions option /// /// On macOS, this displays a modal dialog that shows a message and certificate information, - /// and gives the user the option of trusting/importing the certificate. If you provide a + /// and gives the user the option of trusting/importing the certificate. If you provide a /// browserWindow argument the dialog will be attached to the parent window, making it modal. /// /// /// /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public Task ShowCertificateTrustDialogAsync(BrowserWindow browserWindow, CertificateTrustDialogOptions options) { var tcs = new TaskCompletionSource(); @@ -212,7 +217,5 @@ public Task ShowCertificateTrustDialogAsync(BrowserWindow browserWindow, Certifi return tcs.Task; } - - } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Dock.cs b/src/ElectronNET.API/API/Dock.cs index 0a84b27d..1186d37a 100644 --- a/src/ElectronNET.API/API/Dock.cs +++ b/src/ElectronNET.API/API/Dock.cs @@ -1,16 +1,16 @@ -using ElectronNET.API.Entities; -using ElectronNET.API.Extensions; -using ElectronNET.API.Serialization; using System.Collections.Generic; -using System.Text.Json; +using System.Runtime.Versioning; using System.Threading; using System.Threading.Tasks; +using ElectronNET.API.Entities; +using ElectronNET.API.Extensions; namespace ElectronNET.API { /// /// Control your app in the macOS dock. /// + [SupportedOSPlatform("macOS")] public sealed class Dock { private static Dock _dock; @@ -208,7 +208,5 @@ public void SetIcon(string image) { BridgeConnector.Socket.Emit("dock-setIcon", image); } - - } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Electron.cs b/src/ElectronNET.API/API/Electron.cs index 9148016a..2866c6e6 100644 --- a/src/ElectronNET.API/API/Electron.cs +++ b/src/ElectronNET.API/API/Electron.cs @@ -140,7 +140,7 @@ public static Clipboard Clipboard /// /// Allows you to execute native JavaScript/TypeScript code from the host process. /// - /// It is only possible if the Electron.NET CLI has previously added an + /// It is only possible if the Electron.NET CLI has previously added an /// ElectronHostHook directory: /// electronize add HostHook /// @@ -153,7 +153,7 @@ public static HostHook HostHook } /// - /// Allows you to execute native Lock and Unlock process. + /// Allows you to execute native Lock and Unlock process. /// public static PowerMonitor PowerMonitor { diff --git a/src/ElectronNET.API/API/Entities/AutoResizeOptions.cs b/src/ElectronNET.API/API/Entities/AutoResizeOptions.cs index 32289d43..e4b350d2 100644 --- a/src/ElectronNET.API/API/Entities/AutoResizeOptions.cs +++ b/src/ElectronNET.API/API/Entities/AutoResizeOptions.cs @@ -35,4 +35,4 @@ public class AutoResizeOptions [DefaultValue(false)] public bool Vertical { get; set; } = false; } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/BitmapOptions.cs b/src/ElectronNET.API/API/Entities/BitmapOptions.cs index d3aaebba..6c7a463b 100644 --- a/src/ElectronNET.API/API/Entities/BitmapOptions.cs +++ b/src/ElectronNET.API/API/Entities/BitmapOptions.cs @@ -10,4 +10,4 @@ public class BitmapOptions /// public float ScaleFactor { get; set; } = 1.0f; } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/BlockMapDataHolder.cs b/src/ElectronNET.API/API/Entities/BlockMapDataHolder.cs index 24b45f60..9260b7c8 100644 --- a/src/ElectronNET.API/API/Entities/BlockMapDataHolder.cs +++ b/src/ElectronNET.API/API/Entities/BlockMapDataHolder.cs @@ -28,4 +28,4 @@ public class BlockMapDataHolder /// public bool IsAdminRightsRequired { get; set; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/BrowserViewConstructorOptions.cs b/src/ElectronNET.API/API/Entities/BrowserViewConstructorOptions.cs index a0b3411e..f9eb8ef3 100644 --- a/src/ElectronNET.API/API/Entities/BrowserViewConstructorOptions.cs +++ b/src/ElectronNET.API/API/Entities/BrowserViewConstructorOptions.cs @@ -22,4 +22,4 @@ public class BrowserViewConstructorOptions /// public string ProxyCredentials { get; set; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/BrowserWindowOptions.cs b/src/ElectronNET.API/API/Entities/BrowserWindowOptions.cs index 5f3e92fe..9b1e1fd8 100644 --- a/src/ElectronNET.API/API/Entities/BrowserWindowOptions.cs +++ b/src/ElectronNET.API/API/Entities/BrowserWindowOptions.cs @@ -1,5 +1,4 @@ using ElectronNET.Converter; - using System.ComponentModel; using System.Text.Json.Serialization; @@ -126,6 +125,11 @@ public class BrowserWindowOptions /// public bool SkipTaskbar { get; set; } + /// + /// Determines if Blazor is used. Will disable "module" and "process" globals. Default is false. + /// + public bool IsRunningBlazor { get; set; } + /// /// The kiosk mode. Default is false. /// @@ -291,8 +295,4 @@ public class BrowserWindowOptions /// public string ProxyCredentials { get; set; } } -} - - - - +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/CPUUsage.cs b/src/ElectronNET.API/API/Entities/CPUUsage.cs index f9b73261..acd4746f 100644 --- a/src/ElectronNET.API/API/Entities/CPUUsage.cs +++ b/src/ElectronNET.API/API/Entities/CPUUsage.cs @@ -11,9 +11,9 @@ public class CPUUsage public double PercentCPUUsage { get; set; } /// - /// The number of average idle cpu wakeups per second since the last call to + /// The number of average idle cpu wakeups per second since the last call to /// getCPUUsage.First call returns 0. /// public int IdleWakeupsPerSecond { get; set; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/ChromeExtensionInfo.cs b/src/ElectronNET.API/API/Entities/ChromeExtensionInfo.cs index 52bc2dc4..36115a9f 100644 --- a/src/ElectronNET.API/API/Entities/ChromeExtensionInfo.cs +++ b/src/ElectronNET.API/API/Entities/ChromeExtensionInfo.cs @@ -26,4 +26,4 @@ public ChromeExtensionInfo(string name, string version) /// public string Version { get; set; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/ClearStorageDataOptions.cs b/src/ElectronNET.API/API/Entities/ClearStorageDataOptions.cs index 45ebb974..d3940e7f 100644 --- a/src/ElectronNET.API/API/Entities/ClearStorageDataOptions.cs +++ b/src/ElectronNET.API/API/Entities/ClearStorageDataOptions.cs @@ -21,4 +21,4 @@ public class ClearStorageDataOptions /// public string[] Quotas { get; set; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/CookieChangedCause.cs b/src/ElectronNET.API/API/Entities/CookieChangedCause.cs index 0038357f..ae1a42db 100644 --- a/src/ElectronNET.API/API/Entities/CookieChangedCause.cs +++ b/src/ElectronNET.API/API/Entities/CookieChangedCause.cs @@ -1,10 +1,9 @@ - using System.Text.Json.Serialization; namespace ElectronNET.API.Entities { /// - /// The cause of the change + /// The cause of the change /// public enum CookieChangedCause { @@ -35,4 +34,4 @@ public enum CookieChangedCause [JsonPropertyName("expired_overwrite")] expiredOverwrite } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/CookieDetails.cs b/src/ElectronNET.API/API/Entities/CookieDetails.cs index 3c44de6a..389e8ce5 100644 --- a/src/ElectronNET.API/API/Entities/CookieDetails.cs +++ b/src/ElectronNET.API/API/Entities/CookieDetails.cs @@ -49,7 +49,7 @@ public class CookieDetails public bool HttpOnly { get; set; } /// - /// (optional) - The expiration date of the cookie as the number of seconds since the UNIX epoch. + /// (optional) - The expiration date of the cookie as the number of seconds since the UNIX epoch. /// If omitted then the cookie becomes a session cookie and will not be retained between sessions. /// [DefaultValue(0)] diff --git a/src/ElectronNET.API/API/Entities/CreateFromBitmapOptions.cs b/src/ElectronNET.API/API/Entities/CreateFromBitmapOptions.cs index 6b80c219..b2239983 100644 --- a/src/ElectronNET.API/API/Entities/CreateFromBitmapOptions.cs +++ b/src/ElectronNET.API/API/Entities/CreateFromBitmapOptions.cs @@ -20,4 +20,4 @@ public class CreateFromBitmapOptions /// public float ScaleFactor { get; set; } = 1.0f; } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/CreateInterruptedDownloadOptions.cs b/src/ElectronNET.API/API/Entities/CreateInterruptedDownloadOptions.cs index e7d066e7..b28f6166 100644 --- a/src/ElectronNET.API/API/Entities/CreateInterruptedDownloadOptions.cs +++ b/src/ElectronNET.API/API/Entities/CreateInterruptedDownloadOptions.cs @@ -64,4 +64,4 @@ public CreateInterruptedDownloadOptions(string path, string[] urlChain, int offs ETag = eTag; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/EnableNetworkEmulationOptions.cs b/src/ElectronNET.API/API/Entities/EnableNetworkEmulationOptions.cs index 967cc53d..64fed7a1 100644 --- a/src/ElectronNET.API/API/Entities/EnableNetworkEmulationOptions.cs +++ b/src/ElectronNET.API/API/Entities/EnableNetworkEmulationOptions.cs @@ -25,4 +25,4 @@ public class EnableNetworkEmulationOptions /// public int UploadThroughput { get; set; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/Extension.cs b/src/ElectronNET.API/API/Entities/Extension.cs index 6bd8cbe1..d4edd975 100644 --- a/src/ElectronNET.API/API/Entities/Extension.cs +++ b/src/ElectronNET.API/API/Entities/Extension.cs @@ -35,4 +35,4 @@ public class Extension /// public string Version { get; set; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/GPUFeatureStatus.cs b/src/ElectronNET.API/API/Entities/GPUFeatureStatus.cs index 1a49de9b..1904958c 100644 --- a/src/ElectronNET.API/API/Entities/GPUFeatureStatus.cs +++ b/src/ElectronNET.API/API/Entities/GPUFeatureStatus.cs @@ -1,4 +1,3 @@ - using System.Text.Json.Serialization; namespace ElectronNET.API.Entities diff --git a/src/ElectronNET.API/API/Entities/InputEvent.cs b/src/ElectronNET.API/API/Entities/InputEvent.cs index 8c0cb632..98370e5e 100644 --- a/src/ElectronNET.API/API/Entities/InputEvent.cs +++ b/src/ElectronNET.API/API/Entities/InputEvent.cs @@ -77,6 +77,4 @@ public class InputEvent /// public InputEventType Type { get; set; } } -} - - +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/JumpListCategory.cs b/src/ElectronNET.API/API/Entities/JumpListCategory.cs index 9c99d8ff..660a7825 100644 --- a/src/ElectronNET.API/API/Entities/JumpListCategory.cs +++ b/src/ElectronNET.API/API/Entities/JumpListCategory.cs @@ -1,4 +1,3 @@ - using System.Text.Json.Serialization; namespace ElectronNET.API.Entities @@ -23,5 +22,4 @@ public class JumpListCategory /// public JumpListCategoryType Type { get; set; } } -} - +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/JumpListItem.cs b/src/ElectronNET.API/API/Entities/JumpListItem.cs index b2e41df2..9c57ba82 100644 --- a/src/ElectronNET.API/API/Entities/JumpListItem.cs +++ b/src/ElectronNET.API/API/Entities/JumpListItem.cs @@ -1,4 +1,3 @@ - using System.Text.Json.Serialization; namespace ElectronNET.API.Entities @@ -54,6 +53,4 @@ public class JumpListItem /// public JumpListItemType Type { get; set; } } -} - - +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/MemoryInfo.cs b/src/ElectronNET.API/API/Entities/MemoryInfo.cs index 840cb5d7..a7eb0949 100644 --- a/src/ElectronNET.API/API/Entities/MemoryInfo.cs +++ b/src/ElectronNET.API/API/Entities/MemoryInfo.cs @@ -11,7 +11,7 @@ public class MemoryInfo public int WorkingSetSize { get; set; } /// - /// The maximum amount of memory that has ever been pinned to actual physical RAM. + /// The maximum amount of memory that has ever been pinned to actual physical RAM. /// public int PeakWorkingSetSize { get; set; } diff --git a/src/ElectronNET.API/API/Entities/MenuItem.cs b/src/ElectronNET.API/API/Entities/MenuItem.cs index 200b5cd4..b50b9658 100644 --- a/src/ElectronNET.API/API/Entities/MenuItem.cs +++ b/src/ElectronNET.API/API/Entities/MenuItem.cs @@ -9,7 +9,7 @@ namespace ElectronNET.API.Entities public class MenuItem { /// - /// Will be called with click(menuItem, browserWindow, event) when the menu item is + /// Will be called with click(menuItem, browserWindow, event) when the menu item is /// clicked. /// [JsonIgnore] @@ -96,6 +96,4 @@ public class MenuItem /// public string Position { get; set; } } -} - - +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/MessageBoxOptions.cs b/src/ElectronNET.API/API/Entities/MessageBoxOptions.cs index 22284d66..b4f7e09d 100644 --- a/src/ElectronNET.API/API/Entities/MessageBoxOptions.cs +++ b/src/ElectronNET.API/API/Entities/MessageBoxOptions.cs @@ -1,4 +1,3 @@ - using System.Text.Json.Serialization; namespace ElectronNET.API.Entities @@ -97,6 +96,4 @@ public MessageBoxOptions(string message) Message = message; } } -} - - +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/MessageBoxResult.cs b/src/ElectronNET.API/API/Entities/MessageBoxResult.cs index 835c292c..1894c09c 100644 --- a/src/ElectronNET.API/API/Entities/MessageBoxResult.cs +++ b/src/ElectronNET.API/API/Entities/MessageBoxResult.cs @@ -21,4 +21,4 @@ public class MessageBoxResult /// public bool CheckboxChecked { get; set; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/NativeImageJsonConverter.cs b/src/ElectronNET.API/API/Entities/NativeImageJsonConverter.cs index 00ac690c..dddcbccc 100644 --- a/src/ElectronNET.API/API/Entities/NativeImageJsonConverter.cs +++ b/src/ElectronNET.API/API/Entities/NativeImageJsonConverter.cs @@ -35,5 +35,4 @@ public override NativeImage Read(ref Utf8JsonReader reader, Type typeToConvert, return new NativeImage(newDictionary); } } -} - +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/NotificationOptions.cs b/src/ElectronNET.API/API/Entities/NotificationOptions.cs index ce9fb680..4093f523 100644 --- a/src/ElectronNET.API/API/Entities/NotificationOptions.cs +++ b/src/ElectronNET.API/API/Entities/NotificationOptions.cs @@ -1,4 +1,5 @@ using System; +using System.Runtime.Versioning; using System.Text.Json.Serialization; namespace ElectronNET.API.Entities @@ -43,6 +44,8 @@ public class NotificationOptions /// /// The timeout duration of the notification. Can be 'default' or 'never'. /// + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] public string TimeoutType { get; set; } /// @@ -58,6 +61,7 @@ public class NotificationOptions /// /// The urgency level of the notification. Can be 'normal', 'critical', or 'low'. /// + [SupportedOSPlatform("Linux")] public string Urgency { get; set; } /// @@ -127,6 +131,7 @@ public class NotificationOptions /// The string the user entered into the inline reply field /// [JsonIgnore] + [SupportedOSPlatform("macOS")] public Action OnReply { get; set; } /// @@ -142,6 +147,7 @@ public class NotificationOptions /// macOS only - The index of the action that was activated /// [JsonIgnore] + [SupportedOSPlatform("macOS")] public Action OnAction { get; set; } /// @@ -164,4 +170,4 @@ public NotificationOptions(string title, string body) Body = body; } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.API/API/Entities/OnDidFailLoadInfo.cs b/src/ElectronNET.API/API/Entities/OnDidFailLoadInfo.cs index a3f03176..2a57182f 100644 --- a/src/ElectronNET.API/API/Entities/OnDidFailLoadInfo.cs +++ b/src/ElectronNET.API/API/Entities/OnDidFailLoadInfo.cs @@ -15,4 +15,4 @@ public class OnDidFailLoadInfo /// Validated URL. /// public string ValidatedUrl { get; set; } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/OnDidNavigateInfo.cs b/src/ElectronNET.API/API/Entities/OnDidNavigateInfo.cs index 5f8ccb9f..52c2b149 100644 --- a/src/ElectronNET.API/API/Entities/OnDidNavigateInfo.cs +++ b/src/ElectronNET.API/API/Entities/OnDidNavigateInfo.cs @@ -14,4 +14,4 @@ public class OnDidNavigateInfo /// HTTP response code. /// public int HttpResponseCode { get; set; } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/OpenDevToolsOptions.cs b/src/ElectronNET.API/API/Entities/OpenDevToolsOptions.cs index d280579b..b94da91f 100644 --- a/src/ElectronNET.API/API/Entities/OpenDevToolsOptions.cs +++ b/src/ElectronNET.API/API/Entities/OpenDevToolsOptions.cs @@ -1,4 +1,3 @@ - using System.Text.Json.Serialization; namespace ElectronNET.API.Entities @@ -15,5 +14,4 @@ public class OpenDevToolsOptions /// public DevToolsMode Mode { get; set; } } -} - +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/OpenDialogOptions.cs b/src/ElectronNET.API/API/Entities/OpenDialogOptions.cs index f6c58198..26cd6ecc 100644 --- a/src/ElectronNET.API/API/Entities/OpenDialogOptions.cs +++ b/src/ElectronNET.API/API/Entities/OpenDialogOptions.cs @@ -1,4 +1,3 @@ - using System.Text.Json.Serialization; namespace ElectronNET.API.Entities @@ -41,7 +40,7 @@ public class OpenDialogOptions public string Message { get; set; } /// - /// The filters specifies an array of file types that can be displayed or + /// The filters specifies an array of file types that can be displayed or /// selected when you want to limit the user to a specific type. For example: /// /// @@ -57,5 +56,4 @@ public class OpenDialogOptions /// public FileFilter[] Filters { get; set; } } -} - +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/PageSize.cs b/src/ElectronNET.API/API/Entities/PageSize.cs index 607a59c3..42562256 100644 --- a/src/ElectronNET.API/API/Entities/PageSize.cs +++ b/src/ElectronNET.API/API/Entities/PageSize.cs @@ -17,4 +17,4 @@ public PageSize() public static implicit operator string(PageSize pageSize) => pageSize?._value; public static implicit operator PageSize(string value) => new(value); -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/PathName.cs b/src/ElectronNET.API/API/Entities/PathName.cs index e9500c21..e83ba8b0 100644 --- a/src/ElectronNET.API/API/Entities/PathName.cs +++ b/src/ElectronNET.API/API/Entities/PathName.cs @@ -20,7 +20,7 @@ public enum PathName AppData, /// - /// The directory for storing your app’s configuration files, + /// The directory for storing your app’s configuration files, /// which by default it is the appData directory appended with your app’s name. /// [Description("userData")] @@ -92,4 +92,4 @@ public enum PathName [Description("PepperFlashSystemPlugin")] PepperFlashSystemPlugin } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/ProcessVersions.cs b/src/ElectronNET.API/API/Entities/ProcessVersions.cs index 4e6fe54c..d7d3c012 100644 --- a/src/ElectronNET.API/API/Entities/ProcessVersions.cs +++ b/src/ElectronNET.API/API/Entities/ProcessVersions.cs @@ -7,4 +7,4 @@ namespace ElectronNET.API.Entities /// Value representing Electron's version string /// public record ProcessVersions(string Chrome, string Electron); -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/ProgressBarOptions.cs b/src/ElectronNET.API/API/Entities/ProgressBarOptions.cs index 898486e6..ee01720a 100644 --- a/src/ElectronNET.API/API/Entities/ProgressBarOptions.cs +++ b/src/ElectronNET.API/API/Entities/ProgressBarOptions.cs @@ -1,4 +1,3 @@ - using System.Text.Json.Serialization; namespace ElectronNET.API.Entities @@ -13,5 +12,4 @@ public class ProgressBarOptions /// public ProgressBarMode Mode { get; set; } } -} - +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/ProgressInfo.cs b/src/ElectronNET.API/API/Entities/ProgressInfo.cs index 75c94970..1427cf8c 100644 --- a/src/ElectronNET.API/API/Entities/ProgressInfo.cs +++ b/src/ElectronNET.API/API/Entities/ProgressInfo.cs @@ -30,4 +30,4 @@ public class ProgressInfo /// public string Transferred { get; set; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/ProxyConfig.cs b/src/ElectronNET.API/API/Entities/ProxyConfig.cs index 3dd9ac00..c9df6475 100644 --- a/src/ElectronNET.API/API/Entities/ProxyConfig.cs +++ b/src/ElectronNET.API/API/Entities/ProxyConfig.cs @@ -33,4 +33,4 @@ public ProxyConfig(string pacScript, string proxyRules, string proxyBypassRules) ProxyBypassRules = proxyBypassRules; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/ReleaseNoteInfo.cs b/src/ElectronNET.API/API/Entities/ReleaseNoteInfo.cs index c9ebf2aa..6b0c9777 100644 --- a/src/ElectronNET.API/API/Entities/ReleaseNoteInfo.cs +++ b/src/ElectronNET.API/API/Entities/ReleaseNoteInfo.cs @@ -15,4 +15,4 @@ public class ReleaseNoteInfo /// public string Note { get; set; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/RemovePassword.cs b/src/ElectronNET.API/API/Entities/RemovePassword.cs index 811c19ed..b2afb415 100644 --- a/src/ElectronNET.API/API/Entities/RemovePassword.cs +++ b/src/ElectronNET.API/API/Entities/RemovePassword.cs @@ -1,4 +1,3 @@ - using System.Text.Json.Serialization; namespace ElectronNET.API.Entities @@ -25,7 +24,7 @@ public class RemovePassword public string Realm { get; set; } /// - /// Scheme of the authentication. Can be basic, digest, ntlm, negotiate. + /// Scheme of the authentication. Can be basic, digest, ntlm, negotiate. /// Must be provided if removing by origin. /// public Scheme Scheme { get; set; } @@ -49,6 +48,4 @@ public RemovePassword(string type) Type = type; } } -} - - +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/ResizeOptions.cs b/src/ElectronNET.API/API/Entities/ResizeOptions.cs index 1490ccdb..e506cb82 100644 --- a/src/ElectronNET.API/API/Entities/ResizeOptions.cs +++ b/src/ElectronNET.API/API/Entities/ResizeOptions.cs @@ -20,4 +20,4 @@ public class ResizeOptions /// public string Quality { get; set; } = "best"; } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/SaveDialogOptions.cs b/src/ElectronNET.API/API/Entities/SaveDialogOptions.cs index 16811d70..9c549a7f 100644 --- a/src/ElectronNET.API/API/Entities/SaveDialogOptions.cs +++ b/src/ElectronNET.API/API/Entities/SaveDialogOptions.cs @@ -27,7 +27,7 @@ public class SaveDialogOptions public string ButtonLabel { get; set; } /// - /// The filters specifies an array of file types that can be displayed or + /// The filters specifies an array of file types that can be displayed or /// selected when you want to limit the user to a specific type. For example: /// /// diff --git a/src/ElectronNET.API/API/Entities/ShortcutLinkOperation.cs b/src/ElectronNET.API/API/Entities/ShortcutLinkOperation.cs index fda0aaee..c2b6d3f9 100644 --- a/src/ElectronNET.API/API/Entities/ShortcutLinkOperation.cs +++ b/src/ElectronNET.API/API/Entities/ShortcutLinkOperation.cs @@ -25,4 +25,4 @@ public enum ShortcutLinkOperation [Description("replace")] Replace } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/ThumbarButton.cs b/src/ElectronNET.API/API/Entities/ThumbarButton.cs index 051976f5..af9bcce7 100644 --- a/src/ElectronNET.API/API/Entities/ThumbarButton.cs +++ b/src/ElectronNET.API/API/Entities/ThumbarButton.cs @@ -56,5 +56,4 @@ public ThumbarButton(string icon) Icon = icon; } } -} - +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/TitleBarStyle.cs b/src/ElectronNET.API/API/Entities/TitleBarStyle.cs index f28ac954..7d117f30 100644 --- a/src/ElectronNET.API/API/Entities/TitleBarStyle.cs +++ b/src/ElectronNET.API/API/Entities/TitleBarStyle.cs @@ -1,4 +1,3 @@ - using System.Text.Json.Serialization; namespace ElectronNET.API.Entities diff --git a/src/ElectronNET.API/API/Entities/ToBitmapOptions.cs b/src/ElectronNET.API/API/Entities/ToBitmapOptions.cs index 1a08c3bf..98593fa7 100644 --- a/src/ElectronNET.API/API/Entities/ToBitmapOptions.cs +++ b/src/ElectronNET.API/API/Entities/ToBitmapOptions.cs @@ -10,4 +10,4 @@ public class ToBitmapOptions /// public float ScaleFactor { get; set; } = 1.0f; } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/ToDataUrlOptions.cs b/src/ElectronNET.API/API/Entities/ToDataUrlOptions.cs index 0df4aa99..748b206a 100644 --- a/src/ElectronNET.API/API/Entities/ToDataUrlOptions.cs +++ b/src/ElectronNET.API/API/Entities/ToDataUrlOptions.cs @@ -10,4 +10,4 @@ public class ToDataUrlOptions /// public float ScaleFactor { get; set; } = 1.0f; } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/ToPNGOptions.cs b/src/ElectronNET.API/API/Entities/ToPNGOptions.cs index f4e36b10..47a2cd0b 100644 --- a/src/ElectronNET.API/API/Entities/ToPNGOptions.cs +++ b/src/ElectronNET.API/API/Entities/ToPNGOptions.cs @@ -10,4 +10,4 @@ public class ToPNGOptions /// public float ScaleFactor { get; set; } = 1.0f; } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/UpdateCheckResult.cs b/src/ElectronNET.API/API/Entities/UpdateCheckResult.cs index 66c75aa2..ed3b4097 100644 --- a/src/ElectronNET.API/API/Entities/UpdateCheckResult.cs +++ b/src/ElectronNET.API/API/Entities/UpdateCheckResult.cs @@ -20,4 +20,4 @@ public class UpdateCheckResult /// public UpdateCancellationToken CancellationToken { get; set; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/UpdateFileInfo.cs b/src/ElectronNET.API/API/Entities/UpdateFileInfo.cs index 5f5d6f62..4163ac1f 100644 --- a/src/ElectronNET.API/API/Entities/UpdateFileInfo.cs +++ b/src/ElectronNET.API/API/Entities/UpdateFileInfo.cs @@ -10,4 +10,4 @@ public class UpdateFileInfo : BlockMapDataHolder /// public string Url { get; set; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Entities/WebPreferences.cs b/src/ElectronNET.API/API/Entities/WebPreferences.cs index 12d8bf40..07f51001 100644 --- a/src/ElectronNET.API/API/Entities/WebPreferences.cs +++ b/src/ElectronNET.API/API/Entities/WebPreferences.cs @@ -213,4 +213,4 @@ public class WebPreferences [DefaultValue(false)] public bool EnableRemoteModule { get; set; } = false; } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Extensions/ThumbarButtonExtensions.cs b/src/ElectronNET.API/API/Extensions/ThumbarButtonExtensions.cs index 3b155546..11cdaf12 100644 --- a/src/ElectronNET.API/API/Extensions/ThumbarButtonExtensions.cs +++ b/src/ElectronNET.API/API/Extensions/ThumbarButtonExtensions.cs @@ -36,4 +36,4 @@ public static ThumbarButton GetThumbarButton(this List thumbarBut return result; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/GlobalShortcut.cs b/src/ElectronNET.API/API/GlobalShortcut.cs index 9786fe6c..46a6b911 100644 --- a/src/ElectronNET.API/API/GlobalShortcut.cs +++ b/src/ElectronNET.API/API/GlobalShortcut.cs @@ -39,10 +39,10 @@ internal static GlobalShortcut Instance private Dictionary _shortcuts = new Dictionary(); /// - /// Registers a global shortcut of accelerator. + /// Registers a global shortcut of accelerator. /// The callback is called when the registered shortcut is pressed by the user. /// - /// When the accelerator is already taken by other applications, this call will + /// When the accelerator is already taken by other applications, this call will /// silently fail.This behavior is intended by operating systems, since they don’t /// want applications to fight for global shortcuts. /// @@ -66,7 +66,7 @@ public void Register(string accelerator, Action function) } /// - /// When the accelerator is already taken by other applications, + /// When the accelerator is already taken by other applications, /// this call will still return false. This behavior is intended by operating systems, /// since they don’t want applications to fight for global shortcuts. /// diff --git a/src/ElectronNET.API/API/HostHook.cs b/src/ElectronNET.API/API/HostHook.cs index 634f7603..31bbc455 100644 --- a/src/ElectronNET.API/API/HostHook.cs +++ b/src/ElectronNET.API/API/HostHook.cs @@ -8,7 +8,7 @@ namespace ElectronNET.API /// /// Allows you to execute native JavaScript/TypeScript code from the host process. /// - /// It is only possible if the Electron.NET CLI has previously added an + /// It is only possible if the Electron.NET CLI has previously added an /// ElectronHostHook directory: /// electronize add HostHook /// @@ -48,10 +48,7 @@ internal static HostHook Instance /// Optional parameters. public void Call(string socketEventName, params dynamic[] arguments) { - BridgeConnector.Socket.Once(socketEventName + "Error" + oneCallguid, (result) => - { - Electron.Dialog.ShowErrorBox("Host Hook Exception", result); - }); + BridgeConnector.Socket.Once(socketEventName + "Error" + oneCallguid, (result) => { Electron.Dialog.ShowErrorBox("Host Hook Exception", result); }); BridgeConnector.Socket.Emit(socketEventName, arguments, oneCallguid); } @@ -95,7 +92,5 @@ public Task CallAsync(string socketEventName, params dynamic[] arguments) return tcs.Task; } - - } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/IpcMain.cs b/src/ElectronNET.API/API/IpcMain.cs index 21c25922..239098b8 100644 --- a/src/ElectronNET.API/API/IpcMain.cs +++ b/src/ElectronNET.API/API/IpcMain.cs @@ -39,7 +39,7 @@ internal static IpcMain Instance } /// - /// Listens to channel, when a new message arrives listener would be called with + /// Listens to channel, when a new message arrives listener would be called with /// listener(event, args...). /// /// Channelname. @@ -71,7 +71,7 @@ private static List FormatArguments(JsonElement args) } /// - /// Send a message to the renderer process synchronously via channel, + /// Send a message to the renderer process synchronously via channel, /// you can also send arbitrary arguments. /// /// Note: Sending a synchronous message will block the whole renderer process, @@ -160,7 +160,5 @@ public void Send(BrowserView browserView, string channel, params object[] data) { BridgeConnector.Socket.Emit("sendToIpcRendererBrowserView", browserView.Id, channel, data); } - - } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Menu.cs b/src/ElectronNET.API/API/Menu.cs index c037532c..7571ef02 100644 --- a/src/ElectronNET.API/API/Menu.cs +++ b/src/ElectronNET.API/API/Menu.cs @@ -129,7 +129,5 @@ public void ContextMenuPopup(BrowserWindow browserWindow) { BridgeConnector.Socket.Emit("menu-contextMenuPopup", browserWindow.Id); } - - } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/NativeTheme.cs b/src/ElectronNET.API/API/NativeTheme.cs index c817b9d8..71b35cf5 100644 --- a/src/ElectronNET.API/API/NativeTheme.cs +++ b/src/ElectronNET.API/API/NativeTheme.cs @@ -1,4 +1,5 @@ using System; +using System.Runtime.Versioning; using System.Threading.Tasks; using ElectronNET.API.Entities; using ElectronNET.API.Extensions; @@ -8,7 +9,7 @@ namespace ElectronNET.API /// /// Read and respond to changes in Chromium's native color theme. /// - public sealed class NativeTheme: ApiBase + public sealed class NativeTheme : ApiBase { protected override SocketTaskEventNameTypes SocketTaskEventNameType => SocketTaskEventNameTypes.DashesLowerFirst; protected override SocketEventNameTypes SocketEventNameType => SocketEventNameTypes.DashedLower; @@ -59,7 +60,7 @@ internal static NativeTheme Instance /// /// /// The 'updated' event will be emitted - /// + /// /// /// /// Settings this property to will have the following effects: @@ -79,7 +80,7 @@ internal static NativeTheme Instance /// /// The 'updated' event will be emitted /// - /// + /// /// The usage of this property should align with a classic "dark mode" state machine in your application where the user has three options. /// /// @@ -107,26 +108,30 @@ public void SetThemeSource(ThemeSourceMode themeSourceMode) /// A property that can be , or . It is used to override () and /// supercede the value that Chromium has chosen to use internally. /// - public Task GetThemeSourceAsync() => GetPropertyAsync(); + public Task GetThemeSourceAsync() => this.InvokeAsync(); /// /// A for if the OS / Chromium currently has a dark mode enabled or is /// being instructed to show a dark-style UI. If you want to modify this value you /// should use . /// - public Task ShouldUseDarkColorsAsync() => GetPropertyAsync(); + public Task ShouldUseDarkColorsAsync() => this.InvokeAsync(); /// /// A for if the OS / Chromium currently has high-contrast mode enabled or is /// being instructed to show a high-contrast UI. /// - public Task ShouldUseHighContrastColorsAsync() => GetPropertyAsync(); + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] + public Task ShouldUseHighContrastColorsAsync() => this.InvokeAsync(); /// /// A for if the OS / Chromium currently has an inverted color scheme or is /// being instructed to use an inverted color scheme. /// - public Task ShouldUseInvertedColorSchemeAsync() => GetPropertyAsync(); + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] + public Task ShouldUseInvertedColorSchemeAsync() => this.InvokeAsync(); /// /// Emitted when something in the underlying NativeTheme has changed. This normally means that either the value of , @@ -138,4 +143,4 @@ public event Action Updated remove => RemoveEvent(value, GetHashCode()); } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.API/API/Notification.cs b/src/ElectronNET.API/API/Notification.cs index aaa0c479..a5f03f94 100644 --- a/src/ElectronNET.API/API/Notification.cs +++ b/src/ElectronNET.API/API/Notification.cs @@ -9,7 +9,7 @@ namespace ElectronNET.API /// /// Create OS desktop notifications /// - public sealed class Notification: ApiBase + public sealed class Notification : ApiBase { protected override SocketTaskEventNameTypes SocketTaskEventNameType => SocketTaskEventNameTypes.NoDashUpperFirst; private static Notification _notification; @@ -88,10 +88,7 @@ private static void GenerateIDsForDefinedActions(NotificationOptions notificatio isActionDefined = true; BridgeConnector.Socket.Off("NotificationEventReply"); - BridgeConnector.Socket.On("NotificationEventReply", (args) => - { - _notificationOptions.Single(x => x.ReplyID == args[0]).OnReply(args[1]); - }); + BridgeConnector.Socket.On("NotificationEventReply", (args) => { _notificationOptions.Single(x => x.ReplyID == args[0]).OnReply(args[1]); }); } if (notificationOptions.OnAction != null) @@ -100,10 +97,7 @@ private static void GenerateIDsForDefinedActions(NotificationOptions notificatio isActionDefined = true; BridgeConnector.Socket.Off("NotificationEventAction"); - BridgeConnector.Socket.On("NotificationEventAction", (args) => - { - _notificationOptions.Single(x => x.ActionID == args[0]).OnAction(args[1]); - }); + BridgeConnector.Socket.On("NotificationEventAction", (args) => { _notificationOptions.Single(x => x.ActionID == args[0]).OnAction(args[1]); }); } if (isActionDefined) @@ -116,6 +110,6 @@ private static void GenerateIDsForDefinedActions(NotificationOptions notificatio /// Whether or not desktop notifications are supported on the current system. /// /// - public Task IsSupportedAsync() => GetPropertyAsync(); + public Task IsSupportedAsync() => this.InvokeAsync(); } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/PowerMonitor.cs b/src/ElectronNET.API/API/PowerMonitor.cs index 51ae2818..776af480 100644 --- a/src/ElectronNET.API/API/PowerMonitor.cs +++ b/src/ElectronNET.API/API/PowerMonitor.cs @@ -1,4 +1,5 @@ using System; +using System.Runtime.Versioning; // ReSharper disable InconsistentNaming @@ -7,14 +8,16 @@ namespace ElectronNET.API /// /// Monitor power state changes.. /// - public sealed class PowerMonitor: ApiBase + public sealed class PowerMonitor : ApiBase { protected override SocketTaskEventNameTypes SocketTaskEventNameType => SocketTaskEventNameTypes.DashesLowerFirst; protected override SocketEventNameTypes SocketEventNameType => SocketEventNameTypes.DashedLower; /// - /// Emitted when the system is about to lock the screen. + /// Emitted when the system is about to lock the screen. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public event Action OnLockScreen { add => AddEvent(value); @@ -22,8 +25,10 @@ public event Action OnLockScreen } /// - /// Emitted when the system is about to unlock the screen. + /// Emitted when the system is about to unlock the screen. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public event Action OnUnLockScreen { add => AddEvent(value); @@ -51,6 +56,8 @@ public event Action OnResume /// /// Emitted when the system changes to AC power. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public event Action OnAC { add => AddEvent(value); @@ -60,6 +67,8 @@ public event Action OnAC /// /// Emitted when system changes to battery power. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public event Action OnBattery { add => AddEvent(value); @@ -72,6 +81,8 @@ public event Action OnBattery /// order for the app to exit cleanly.If `e.preventDefault()` is called, the app /// should exit as soon as possible by calling something like `app.quit()`. /// + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("macOS")] public event Action OnShutdown { add => AddEvent(value); @@ -104,4 +115,4 @@ internal static PowerMonitor Instance } } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.API/API/Process.cs b/src/ElectronNET.API/API/Process.cs index 328b0074..e3c2d264 100644 --- a/src/ElectronNET.API/API/Process.cs +++ b/src/ElectronNET.API/API/Process.cs @@ -9,10 +9,11 @@ namespace ElectronNET.API /// Electron's process object is extended from the Node.js process object. It adds the /// events, properties, and methods. /// - public sealed class Process: ApiBase + public sealed class Process : ApiBase { protected override SocketTaskEventNameTypes SocketTaskEventNameType => SocketTaskEventNameTypes.DashesLowerFirst; protected override SocketTaskMessageNameTypes SocketTaskMessageNameType => SocketTaskMessageNameTypes.DashesLowerFirst; + internal Process() { } @@ -43,8 +44,8 @@ internal static Process Instance /// /// The process.execPath property returns the absolute pathname of the executable that /// started the Node.js process. Symbolic links, if any, are resolved. - /// - public Task ExecPathAsync => GetPropertyAsync(); + /// + public Task ExecPathAsync => this.InvokeAsync(); /// /// The process.argv property returns an array containing the command-line arguments passed @@ -53,56 +54,56 @@ internal static Process Instance /// will be the path to the JavaScript file being executed. The remaining elements will be /// any additional command-line arguments /// - public Task ArgvAsync => GetPropertyAsync(); + public Task ArgvAsync => this.InvokeAsync(); /// /// The process.execPath property returns the absolute pathname of the executable that /// started the Node.js process. Symbolic links, if any, are resolved. /// - public Task TypeAsync => GetPropertyAsync(); + public Task TypeAsync => this.InvokeAsync(); /// /// The process.versions property returns an object listing the version strings of /// chrome and electron. - /// - public Task VersionsAsync => GetPropertyAsync(); + /// + public Task VersionsAsync => this.InvokeAsync(); /// /// A Boolean. When app is started by being passed as parameter to the default app, this /// property is true in the main process, otherwise it is false. /// - public Task DefaultAppAsync => GetPropertyAsync(); + public Task DefaultAppAsync => this.InvokeAsync(); /// /// A Boolean, true when the current renderer context is the "main" renderer frame. If you /// want the ID of the current frame you should use webFrame.routingId /// - public Task IsMainFrameAsync => GetPropertyAsync(); + public Task IsMainFrameAsync => this.InvokeAsync(); /// /// A String representing the path to the resources directory. /// - public Task ResourcesPathAsync => GetPropertyAsync(); + public Task ResourcesPathAsync => this.InvokeAsync(); /// /// The number of seconds the current Node.js process has been running. The return value /// includes fractions of a second. Use Math.floor() to get whole seconds. /// - public Task UpTimeAsync => GetPropertyAsync(); + public Task UpTimeAsync => this.InvokeAsync(); /// /// The PID of the electron process /// - public Task PidAsync => GetPropertyAsync(); + public Task PidAsync => this.InvokeAsync(); /// /// The operating system CPU architecture for which the Node.js binary was compiled /// - public Task ArchAsync => GetPropertyAsync(); + public Task ArchAsync => this.InvokeAsync(); /// /// A string identifying the operating system platform on which the Node.js process is running /// - public Task PlatformAsync => GetPropertyAsync(); + public Task PlatformAsync => this.InvokeAsync(); } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Screen.cs b/src/ElectronNET.API/API/Screen.cs index 8c2b5cb0..5c81e583 100644 --- a/src/ElectronNET.API/API/Screen.cs +++ b/src/ElectronNET.API/API/Screen.cs @@ -1,6 +1,7 @@ using ElectronNET.API.Entities; using System; using System.Linq; +using System.Runtime.Versioning; using System.Text.Json; using System.Threading.Tasks; using ElectronNET.API.Serialization; @@ -10,7 +11,7 @@ namespace ElectronNET.API /// /// Retrieve information about screen size, displays, cursor position, etc. /// - public sealed class Screen: ApiBase + public sealed class Screen : ApiBase { protected override SocketTaskEventNameTypes SocketTaskEventNameType => SocketTaskEventNameTypes.DashesLowerFirst; protected override SocketTaskMessageNameTypes SocketTaskMessageNameType => SocketTaskMessageNameTypes.DashesLowerFirst; @@ -35,8 +36,8 @@ public event Action OnDisplayRemoved } /// - /// Emitted when one or more metrics change in a display. - /// The changedMetrics is an array of strings that describe the changes. + /// Emitted when one or more metrics change in a display. + /// The changedMetrics is an array of strings that describe the changes. /// Possible changes are bounds, workArea, scaleFactor and rotation. /// public event Action OnDisplayMetricsChanged @@ -56,6 +57,7 @@ public event Action OnDisplayMetricsChanged BridgeConnector.Socket.Emit("register-screen-display-metrics-changed", GetHashCode()); } + _onDisplayMetricsChanged += value; } remove @@ -101,37 +103,38 @@ internal static Screen Instance /// The current absolute position of the mouse pointer. /// /// - public Task GetCursorScreenPointAsync() => GetPropertyAsync(); + public Task GetCursorScreenPointAsync() => this.InvokeAsync(); /// /// macOS: The height of the menu bar in pixels. /// /// The height of the menu bar in pixels. - public Task GetMenuBarWorkAreaAsync() => GetPropertyAsync(); + [SupportedOSPlatform("macOS")] + public Task GetMenuBarWorkAreaAsync() => this.InvokeAsync(); /// /// The primary display. /// /// - public Task GetPrimaryDisplayAsync() => GetPropertyAsync(); + public Task GetPrimaryDisplayAsync() => this.InvokeAsync(); /// /// An array of displays that are currently available. /// /// An array of displays that are currently available. - public Task GetAllDisplaysAsync() => GetPropertyAsync(); + public Task GetAllDisplaysAsync() => this.InvokeAsync(); /// /// The display nearest the specified point. /// /// The display nearest the specified point. - public Task GetDisplayNearestPointAsync(Point point) => GetPropertyAsync(point); + public Task GetDisplayNearestPointAsync(Point point) => this.InvokeAsync(point); /// /// The display that most closely intersects the provided bounds. /// /// /// The display that most closely intersects the provided bounds. - public Task GetDisplayMatchingAsync(Rectangle rectangle) => GetPropertyAsync(rectangle); + public Task GetDisplayMatchingAsync(Rectangle rectangle) => this.InvokeAsync(rectangle); } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Session.cs b/src/ElectronNET.API/API/Session.cs index bee7566c..ef3b44df 100644 --- a/src/ElectronNET.API/API/Session.cs +++ b/src/ElectronNET.API/API/Session.cs @@ -373,7 +373,5 @@ public Task LoadExtensionAsync(string path, bool allowFileAccess = fa return tcs.Task; } - - } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Shell.cs b/src/ElectronNET.API/API/Shell.cs index 14bfcbcb..e8acb0ee 100644 --- a/src/ElectronNET.API/API/Shell.cs +++ b/src/ElectronNET.API/API/Shell.cs @@ -1,8 +1,7 @@ +using System.Runtime.Versioning; +using System.Threading.Tasks; using ElectronNET.API.Entities; using ElectronNET.API.Extensions; -using ElectronNET.API.Serialization; -using System.Text.Json; -using System.Threading.Tasks; namespace ElectronNET.API { @@ -68,7 +67,7 @@ public Task OpenPathAsync(string path) } /// - /// Open the given external protocol URL in the desktop’s default manner. + /// Open the given external protocol URL in the desktop’s default manner. /// (For example, mailto: URLs in the user’s default mail agent). /// /// Max 2081 characters on windows. @@ -79,7 +78,7 @@ public Task OpenExternalAsync(string url) } /// - /// Open the given external protocol URL in the desktop’s default manner. + /// Open the given external protocol URL in the desktop’s default manner. /// (For example, mailto: URLs in the user’s default mail agent). /// /// Max 2081 characters on windows. @@ -133,6 +132,7 @@ public void Beep() /// Default is /// Structure of a shortcut. /// Whether the shortcut was created successfully. + [SupportedOSPlatform("Windows")] public Task WriteShortcutLinkAsync(string shortcutPath, ShortcutLinkOperation operation, ShortcutDetails options) { var tcs = new TaskCompletionSource(); @@ -149,6 +149,7 @@ public Task WriteShortcutLinkAsync(string shortcutPath, ShortcutLinkOperat /// /// The path tot the shortcut. /// of the shortcut. + [SupportedOSPlatform("Windows")] public Task ReadShortcutLinkAsync(string shortcutPath) { var tcs = new TaskCompletionSource(); @@ -158,7 +159,5 @@ public Task ReadShortcutLinkAsync(string shortcutPath) return tcs.Task; } - - } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/Tray.cs b/src/ElectronNET.API/API/Tray.cs index a18b178e..b31edd64 100644 --- a/src/ElectronNET.API/API/Tray.cs +++ b/src/ElectronNET.API/API/Tray.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Versioning; using System.Text.Json; using System.Threading.Tasks; using ElectronNET.API.Serialization; @@ -14,7 +15,7 @@ namespace ElectronNET.API /// /// Add icons and context menus to the system's notification area. /// - public sealed class Tray: ApiBase + public sealed class Tray : ApiBase { protected override SocketTaskEventNameTypes SocketTaskEventNameType => SocketTaskEventNameTypes.DashesLowerFirst; protected override SocketEventNameTypes SocketEventNameType => SocketEventNameTypes.DashedLower; @@ -38,6 +39,7 @@ public event Action OnClick BridgeConnector.Socket.Emit("register-tray-click", GetHashCode()); } + _click += value; } remove @@ -56,6 +58,8 @@ public event Action OnClick /// /// macOS, Windows: Emitted when the tray icon is right clicked. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public event Action OnRightClick { add @@ -72,6 +76,7 @@ public event Action OnRightClick BridgeConnector.Socket.Emit("register-tray-right-click", GetHashCode()); } + _rightClick += value; } remove @@ -90,6 +95,8 @@ public event Action OnRightClick /// /// macOS, Windows: Emitted when the tray icon is double clicked. /// + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public event Action OnDoubleClick { add @@ -106,6 +113,7 @@ public event Action OnDoubleClick BridgeConnector.Socket.Emit("register-tray-double-click", GetHashCode()); } + _doubleClick += value; } remove @@ -124,6 +132,7 @@ public event Action OnDoubleClick /// /// Windows: Emitted when the tray balloon shows. /// + [SupportedOSPlatform("Windows")] public event Action OnBalloonShow { add => AddEvent(value, GetHashCode()); @@ -133,6 +142,7 @@ public event Action OnBalloonShow /// /// Windows: Emitted when the tray balloon is clicked. /// + [SupportedOSPlatform("Windows")] public event Action OnBalloonClick { add => AddEvent(value, GetHashCode()); @@ -140,9 +150,10 @@ public event Action OnBalloonClick } /// - /// Windows: Emitted when the tray balloon is closed + /// Windows: Emitted when the tray balloon is closed /// because of timeout or user manually closes it. /// + [SupportedOSPlatform("Windows")] public event Action OnBalloonClosed { add => AddEvent(value, GetHashCode()); @@ -248,6 +259,7 @@ public async Task SetImage(string image) /// Sets the image associated with this tray icon when pressed on macOS. /// /// + [SupportedOSPlatform("macOS")] public async Task SetPressedImage(string image) { await BridgeConnector.Socket.Emit("tray-setPressedImage", image).ConfigureAwait(false); @@ -266,6 +278,7 @@ public async Task SetToolTip(string toolTip) /// macOS: Sets the title displayed aside of the tray icon in the status bar. /// /// + [SupportedOSPlatform("macOS")] public async Task SetTitle(string title) { await BridgeConnector.Socket.Emit("tray-setTitle", title).ConfigureAwait(false); @@ -275,6 +288,7 @@ public async Task SetTitle(string title) /// Windows: Displays a tray balloon. /// /// + [SupportedOSPlatform("Windows")] public async Task DisplayBalloon(DisplayBalloonOptions options) { await BridgeConnector.Socket.Emit("tray-displayBalloon", options).ConfigureAwait(false); @@ -295,7 +309,6 @@ public async Task IsDestroyedAsync() } - private const string ModuleName = "tray"; /// @@ -330,4 +343,4 @@ public void Once(string eventName, Action action) public async Task Once(string eventName, Action action) => await Events.Instance.Once(ModuleName, eventName, action).ConfigureAwait(false); } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/WebContents.cs b/src/ElectronNET.API/API/WebContents.cs index 761bfed4..2ded9f60 100644 --- a/src/ElectronNET.API/API/WebContents.cs +++ b/src/ElectronNET.API/API/WebContents.cs @@ -9,7 +9,7 @@ namespace ElectronNET.API; /// /// Render and control web pages. /// -public class WebContents: ApiBase +public class WebContents : ApiBase { protected override SocketTaskEventNameTypes SocketTaskEventNameType => SocketTaskEventNameTypes.DashesLowerFirst; protected override SocketTaskMessageNameTypes SocketTaskMessageNameType => SocketTaskMessageNameTypes.DashesLowerFirst; @@ -139,24 +139,25 @@ public void OpenDevTools(OpenDevToolsOptions openDevToolsOptions) /// Get system printers. /// /// printers - public Task GetPrintersAsync() => GetPropertyAsync(); + public Task GetPrintersAsync() => this.InvokeAsync(); /// /// Prints window's web page. /// /// /// success - public Task PrintAsync(PrintOptions options) => GetPropertyAsync(options); + public Task PrintAsync(PrintOptions options) => this.InvokeAsync(options); + /// /// Prints window's web page. /// /// success - public Task PrintAsync() => GetPropertyAsync(string.Empty); + public Task PrintAsync() => this.InvokeAsync(string.Empty); /// /// Prints window's web page as PDF with Chromium's preview printing custom - /// settings.The landscape will be ignored if @page CSS at-rule is used in the web page. - /// By default, an empty options will be regarded as: Use page-break-before: always; + /// settings.The landscape will be ignored if @page CSS at-rule is used in the web page. + /// By default, an empty options will be regarded as: Use page-break-before: always; /// CSS style to force to print to a new page. /// /// @@ -222,7 +223,7 @@ public Task GetUrl() } /// - /// The async method will resolve when the page has finished loading, + /// The async method will resolve when the page has finished loading, /// and rejects if the page fails to load. /// /// A noop rejection handler is already attached, which avoids unhandled rejection @@ -239,7 +240,7 @@ public Task LoadURLAsync(string url) } /// - /// The async method will resolve when the page has finished loading, + /// The async method will resolve when the page has finished loading, /// and rejects if the page fails to load. /// /// A noop rejection handler is already attached, which avoids unhandled rejection @@ -261,10 +262,7 @@ public Task LoadURLAsync(string url, LoadURLOptions options) tcs.SetResult(null); }); - BridgeConnector.Socket.Once("webContents-loadURL-error" + Id, (error) => - { - tcs.SetException(new InvalidOperationException(error)); - }); + BridgeConnector.Socket.Once("webContents-loadURL-error" + Id, (error) => { tcs.SetException(new InvalidOperationException(error)); }); BridgeConnector.Socket.Emit("webContents-loadURL", Id, url, options); @@ -282,4 +280,4 @@ public void InsertCSS(bool isBrowserWindow, string path) { BridgeConnector.Socket.Emit("webContents-insertCSS", Id, isBrowserWindow, path); } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/WebRequest.cs b/src/ElectronNET.API/API/WebRequest.cs index 0bbd5efa..a39a97b7 100644 --- a/src/ElectronNET.API/API/WebRequest.cs +++ b/src/ElectronNET.API/API/WebRequest.cs @@ -59,4 +59,4 @@ public void RemoveListener(Action> listen } } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/API/WindowManager.cs b/src/ElectronNET.API/API/WindowManager.cs index 665aef0a..20a6b193 100644 --- a/src/ElectronNET.API/API/WindowManager.cs +++ b/src/ElectronNET.API/API/WindowManager.cs @@ -158,8 +158,8 @@ private bool IsWindows10() } /// - /// A BrowserView can be used to embed additional web content into a BrowserWindow. - /// It is like a child window, except that it is positioned relative to its owning window. + /// A BrowserView can be used to embed additional web content into a BrowserWindow. + /// It is like a child window, except that it is positioned relative to its owning window. /// It is meant to be an alternative to the webview tag. /// /// @@ -169,8 +169,8 @@ public Task CreateBrowserViewAsync() } /// - /// A BrowserView can be used to embed additional web content into a BrowserWindow. - /// It is like a child window, except that it is positioned relative to its owning window. + /// A BrowserView can be used to embed additional web content into a BrowserWindow. + /// It is like a child window, except that it is positioned relative to its owning window. /// It is meant to be an alternative to the webview tag. /// /// @@ -192,6 +192,5 @@ public async Task CreateBrowserViewAsync(BrowserViewConstructorOpti return await tcs.Task.ConfigureAwait(false); } - } } \ No newline at end of file diff --git a/src/ElectronNET.API/Bridge/SocketIOFacade.cs b/src/ElectronNET.API/Bridge/SocketIOFacade.cs index ed13afc9..06015a0a 100644 --- a/src/ElectronNET.API/Bridge/SocketIOFacade.cs +++ b/src/ElectronNET.API/Bridge/SocketIOFacade.cs @@ -121,4 +121,4 @@ public void DisposeSocket() { _socket.Dispose(); } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/Common/Extensions.cs b/src/ElectronNET.API/Common/Extensions.cs index 515488b0..a5de118c 100644 --- a/src/ElectronNET.API/Common/Extensions.cs +++ b/src/ElectronNET.API/Common/Extensions.cs @@ -51,14 +51,14 @@ public static string StripAsync(this string str) return str; } - + public static string StripOn(this string str) { if (string.IsNullOrWhiteSpace(str) || !str.StartsWith("On", StringComparison.Ordinal)) { return str; } - + return str.Substring(2); } @@ -66,7 +66,7 @@ public static string ToDashedEventName(this string str) { return string.Join("-", Regex.Split(str.StripOn(), "(? Read(ref Utf8JsonReader reader, Type typeToCo { throw new JsonException("Expected array for ModifierType list"); } + while (reader.Read()) { if (reader.TokenType == JsonTokenType.EndArray) break; @@ -30,6 +31,7 @@ public override List Read(ref Utf8JsonReader reader, Type typeToCo var s = reader.GetString(); list.Add((ModifierType)Enum.Parse(typeof(ModifierType), s, ignoreCase: true)); } + return list; } @@ -40,6 +42,7 @@ public override void Write(Utf8JsonWriter writer, List value, Json { writer.WriteStringValue(modifier.ToString()); } + writer.WriteEndArray(); } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/Converter/PageSizeConverter.cs b/src/ElectronNET.API/Converter/PageSizeConverter.cs index c79dc278..d896c7ad 100644 --- a/src/ElectronNET.API/Converter/PageSizeConverter.cs +++ b/src/ElectronNET.API/Converter/PageSizeConverter.cs @@ -42,5 +42,4 @@ public override void Write(Utf8JsonWriter writer, PageSize value, JsonSerializer JsonSerializer.Serialize(writer, value, ElectronJson.Options); } } -} - +} \ No newline at end of file diff --git a/src/ElectronNET.API/Converter/TitleBarOverlayConverter.cs b/src/ElectronNET.API/Converter/TitleBarOverlayConverter.cs index 2d6044a9..e41fca09 100644 --- a/src/ElectronNET.API/Converter/TitleBarOverlayConverter.cs +++ b/src/ElectronNET.API/Converter/TitleBarOverlayConverter.cs @@ -42,5 +42,4 @@ public override void Write(Utf8JsonWriter writer, TitleBarOverlay value, JsonSer JsonSerializer.Serialize(writer, value, ElectronJson.Options); } } -} - +} \ No newline at end of file diff --git a/src/ElectronNET.API/ElectronNetRuntime.cs b/src/ElectronNET.API/ElectronNetRuntime.cs index 8fd0f0b0..78d976e8 100644 --- a/src/ElectronNET.API/ElectronNetRuntime.cs +++ b/src/ElectronNET.API/ElectronNetRuntime.cs @@ -24,6 +24,8 @@ static ElectronNetRuntime() StartupManager.Initialize(); } + public static string ElectronExtraArguments { get; set; } + public static int? ElectronSocketPort { get; internal set; } public static int? AspNetWebPort { get; internal set; } @@ -52,4 +54,4 @@ internal static SocketIoFacade GetSocket() return RuntimeControllerCore?.Socket; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerDotNetFirst.cs b/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerDotNetFirst.cs index 8e1633dd..70591674 100644 --- a/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerDotNetFirst.cs +++ b/src/ElectronNET.API/Runtime/Controllers/RuntimeControllerDotNetFirst.cs @@ -40,7 +40,7 @@ protected override Task StartCore() { var isUnPacked = ElectronNetRuntime.StartupMethod.IsUnpackaged(); var electronBinaryName = ElectronNetRuntime.ElectronExecutable; - var args = Environment.CommandLine; + var args = string.Format("{0} {1}", ElectronNetRuntime.ElectronExtraArguments, Environment.CommandLine).Trim(); this.port = ElectronNetRuntime.ElectronSocketPort; if (!this.port.HasValue) @@ -49,10 +49,15 @@ protected override Task StartCore() ElectronNetRuntime.ElectronSocketPort = this.port; } + Console.Error.WriteLine("[StartCore]: isUnPacked: {0}", isUnPacked); + Console.Error.WriteLine("[StartCore]: electronBinaryName: {0}", electronBinaryName); + Console.Error.WriteLine("[StartCore]: args: {0}", args); + this.electronProcess = new ElectronProcessActive(isUnPacked, electronBinaryName, args, this.port.Value); this.electronProcess.Ready += this.ElectronProcess_Ready; this.electronProcess.Stopped += this.ElectronProcess_Stopped; + Console.Error.WriteLine("[StartCore]: Before Start"); return this.electronProcess.Start(); } @@ -82,11 +87,11 @@ private void ElectronProcess_Stopped(object sender, EventArgs e) private void HandleStopped() { - if (this.socketBridge.State != LifetimeState.Stopped) + if (this.socketBridge != null && this.socketBridge.State != LifetimeState.Stopped) { this.socketBridge.Stop(); } - else if (this.electronProcess.State != LifetimeState.Stopped) + else if (this.electronProcess != null && this.electronProcess.State != LifetimeState.Stopped) { this.electronProcess.Stop(); } diff --git a/src/ElectronNET.API/Runtime/Data/DotnetAppType.cs b/src/ElectronNET.API/Runtime/Data/DotnetAppType.cs index d52328a6..9a48304b 100644 --- a/src/ElectronNET.API/Runtime/Data/DotnetAppType.cs +++ b/src/ElectronNET.API/Runtime/Data/DotnetAppType.cs @@ -8,4 +8,4 @@ public enum DotnetAppType /// ASP.NET Core cross-platform app. AspNetCoreApp, } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/Runtime/Data/LifetimeState.cs b/src/ElectronNET.API/Runtime/Data/LifetimeState.cs index 1785887a..a643a043 100644 --- a/src/ElectronNET.API/Runtime/Data/LifetimeState.cs +++ b/src/ElectronNET.API/Runtime/Data/LifetimeState.cs @@ -9,4 +9,4 @@ public enum LifetimeState Stopping, Stopped, } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/Runtime/Data/StartupMethod.cs b/src/ElectronNET.API/Runtime/Data/StartupMethod.cs index 9d3e380b..2dcf68a8 100644 --- a/src/ElectronNET.API/Runtime/Data/StartupMethod.cs +++ b/src/ElectronNET.API/Runtime/Data/StartupMethod.cs @@ -34,4 +34,4 @@ public enum StartupMethod /// UnpackedDotnetFirst, } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/Runtime/Helpers/LaunchOrderDetector.cs b/src/ElectronNET.API/Runtime/Helpers/LaunchOrderDetector.cs index 8320cfe0..203fb476 100644 --- a/src/ElectronNET.API/Runtime/Helpers/LaunchOrderDetector.cs +++ b/src/ElectronNET.API/Runtime/Helpers/LaunchOrderDetector.cs @@ -69,4 +69,4 @@ public static bool CheckIsLaunchedByDotNet() return null; } } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/Runtime/Helpers/PortHelper.cs b/src/ElectronNET.API/Runtime/Helpers/PortHelper.cs index 3a141082..f627c971 100644 --- a/src/ElectronNET.API/Runtime/Helpers/PortHelper.cs +++ b/src/ElectronNET.API/Runtime/Helpers/PortHelper.cs @@ -21,6 +21,5 @@ public static int GetFreePort(int? defaultPost) port += 2; } } - } -} +} \ No newline at end of file diff --git a/src/ElectronNET.API/Runtime/Helpers/UnpackagedDetector.cs b/src/ElectronNET.API/Runtime/Helpers/UnpackagedDetector.cs index d4fbd9da..f5c5f549 100644 --- a/src/ElectronNET.API/Runtime/Helpers/UnpackagedDetector.cs +++ b/src/ElectronNET.API/Runtime/Helpers/UnpackagedDetector.cs @@ -106,4 +106,4 @@ public static bool CheckIsUnpackaged() return null; } } -} +} \ 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 index 297c17c5..0cf21c54 100644 --- a/src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessActive.cs +++ b/src/ElectronNET.API/Runtime/Services/ElectronProcess/ElectronProcessActive.cs @@ -5,6 +5,7 @@ using System; using System.ComponentModel; using System.IO; + using System.Runtime.InteropServices; using System.Threading.Tasks; /// @@ -42,6 +43,11 @@ protected override Task StartCore() var electrondir = Path.Combine(dir.FullName, ".electron"); startCmd = Path.Combine(electrondir, "node_modules", "electron", "dist", "electron"); + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + startCmd = Path.Combine(electrondir, "node_modules", "electron", "dist", "Electron.app", "Contents", "MacOS", "Electron"); + } + args = $"main.js -unpackeddotnet --trace-warnings -electronforcedport={this.socketPort:D} " + this.extraArguments; workingDir = electrondir; } @@ -68,22 +74,40 @@ protected override Task StopCore() private async Task StartInternal(string startCmd, string args, string directoriy) { - await Task.Delay(10).ConfigureAwait(false); + try + { + await Task.Delay(10).ConfigureAwait(false); - this.process = new ProcessRunner("ElectronRunner"); - this.process.ProcessExited += this.Process_Exited; - this.process.Run(startCmd, args, directoriy); + Console.Error.WriteLine("[StartInternal]: startCmd: {0}", startCmd); + Console.Error.WriteLine("[StartInternal]: args: {0}", args); - await Task.Delay(500).ConfigureAwait(false); + this.process = new ProcessRunner("ElectronRunner"); + this.process.ProcessExited += this.Process_Exited; + this.process.Run(startCmd, args, directoriy); - if (!this.process.IsRunning) - { - Task.Run(() => this.TransitionState(LifetimeState.Stopped)); + await Task.Delay(500).ConfigureAwait(false); - throw new Exception("Failed to launch the Electron process."); - } + Console.Error.WriteLine("[StartInternal]: after run:"); + + if (!this.process.IsRunning) + { + Console.Error.WriteLine("[StartInternal]: Process is not running: " + this.process.StandardError); + Console.Error.WriteLine("[StartInternal]: Process is not running: " + this.process.StandardOutput); - this.TransitionState(LifetimeState.Ready); + Task.Run(() => this.TransitionState(LifetimeState.Stopped)); + + throw new Exception("Failed to launch the Electron process."); + } + + this.TransitionState(LifetimeState.Ready); + } + catch (Exception ex) + { + Console.Error.WriteLine("[StartInternal]: Exception: " + this.process?.StandardError); + Console.Error.WriteLine("[StartInternal]: Exception: " + this.process?.StandardOutput); + Console.Error.WriteLine("[StartInternal]: Exception: " + ex); + throw; + } } private void Process_Exited(object sender, EventArgs e) diff --git a/src/ElectronNET.API/Runtime/StartupManager.cs b/src/ElectronNET.API/Runtime/StartupManager.cs index 607d58b9..125b6dee 100644 --- a/src/ElectronNET.API/Runtime/StartupManager.cs +++ b/src/ElectronNET.API/Runtime/StartupManager.cs @@ -132,13 +132,19 @@ private BuildInfo GatherBuildInfo() if (electronAssembly == null) { + Console.WriteLine("GatherBuildInfo: Early exit"); return buildInfo; } if (electronAssembly.GetName().Name == "testhost" || electronAssembly.GetName().Name == "ReSharperTestRunner") { + Console.WriteLine("GatherBuildInfo: Detected testhost"); electronAssembly = AppDomain.CurrentDomain.GetData("ElectronTestAssembly") as Assembly ?? electronAssembly; } + else + { + Console.WriteLine("GatherBuildInfo: No testhost detected: " + electronAssembly.GetName().Name); + } var attributes = electronAssembly.GetCustomAttributes().ToList(); diff --git a/src/ElectronNET.API/Serialization/ElectronJson.cs b/src/ElectronNET.API/Serialization/ElectronJson.cs index 37209850..3fa06ddf 100644 --- a/src/ElectronNET.API/Serialization/ElectronJson.cs +++ b/src/ElectronNET.API/Serialization/ElectronJson.cs @@ -30,5 +30,4 @@ internal static class ElectronJson internal partial class ElectronJsonContext : JsonSerializerContext { } -} - +} \ No newline at end of file diff --git a/src/ElectronNET.Build/ElectronNET.Build.csproj b/src/ElectronNET.Build/ElectronNET.Build.csproj index 1bcb4269..e7cb1b9e 100644 --- a/src/ElectronNET.Build/ElectronNET.Build.csproj +++ b/src/ElectronNET.Build/ElectronNET.Build.csproj @@ -1,36 +1,36 @@  - + - - netstandard2.0 - False - + + netstandard2.0 + False + - - - + + + - - - <_DllTargetPath>$(MSBuildThisFileDirectory)\..\ElectronNET\build + - + <_DllTargetPath>$(MSBuildThisFileDirectory)\..\ElectronNET\build - + - - - + + + + + - + - + - + diff --git a/src/ElectronNET.ConsoleApp/ElectronNET.ConsoleApp.csproj b/src/ElectronNET.ConsoleApp/ElectronNET.ConsoleApp.csproj index 731744f8..11ad090d 100644 --- a/src/ElectronNET.ConsoleApp/ElectronNET.ConsoleApp.csproj +++ b/src/ElectronNET.ConsoleApp/ElectronNET.ConsoleApp.csproj @@ -5,7 +5,7 @@ true - + net8.0 @@ -69,9 +69,9 @@ - + - + \ No newline at end of file diff --git a/src/ElectronNET.Host/.vscode/launch.json b/src/ElectronNET.Host/.vscode/launch.json index bb2469e6..df908dc1 100644 --- a/src/ElectronNET.Host/.vscode/launch.json +++ b/src/ElectronNET.Host/.vscode/launch.json @@ -1,20 +1,21 @@ { - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "type": "node", - "request": "launch", - "name": "Launch Electron App", - "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron", - "program": "${workspaceFolder}/main.js", - "sourceMaps": true, - "args": [ - "--test=true", - "--blub=wuhuu" - ] - } - ] + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Launch Electron App", + "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron", + "program": "${workspaceFolder}/main.js", + "skipFiles": [ "/**" ], + "cwd": "${workspaceFolder}", + "console": "externalTerminal", + "args": [ + "--test=true" + ] + } + ] } \ No newline at end of file diff --git a/src/ElectronNET.Host/ElectronHostHook/connector.js b/src/ElectronNET.Host/ElectronHostHook/connector.js index 5e5a0e81..b71a2012 100644 --- a/src/ElectronNET.Host/ElectronHostHook/connector.js +++ b/src/ElectronNET.Host/ElectronHostHook/connector.js @@ -1,7 +1,10 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Connector = void 0; +const socket_io_1 = require("socket.io"); class Connector { + socket; + app; constructor(socket, // @ts-ignore app) { diff --git a/src/ElectronNET.Host/ElectronHostHook/connector.js.map b/src/ElectronNET.Host/ElectronHostHook/connector.js.map index dfa3a4f7..8ab02c0d 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":";;;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 +{"version":3,"file":"connector.js","sourceRoot":"","sources":["connector.ts"],"names":[],"mappings":";;;AAAA,yCAAmC;AAEnC,MAAa,SAAS;IACE;IAET;IAFX,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 b/src/ElectronNET.Host/ElectronHostHook/index.js index 813f7a15..6576b124 100644 --- a/src/ElectronNET.Host/ElectronHostHook/index.js +++ b/src/ElectronNET.Host/ElectronHostHook/index.js @@ -1,8 +1,45 @@ "use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); Object.defineProperty(exports, "__esModule", { value: true }); exports.HookService = void 0; +// @ts-ignore +const Electron = __importStar(require("electron")); +const socket_io_1 = require("socket.io"); const connector_1 = require("./connector"); class HookService extends connector_1.Connector { + app; constructor(socket, app) { super(socket, app); this.app = app; diff --git a/src/ElectronNET.Host/ElectronHostHook/index.js.map b/src/ElectronNET.Host/ElectronHostHook/index.js.map index ff24e734..3c7b0ed4 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":";;;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 +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,aAAa;AACb,mDAAqC;AACrC,yCAAmC;AACnC,2CAAwC;AAExC,MAAa,WAAY,SAAQ,qBAAS;IACH;IAAnC,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/ElectronNET.Host.esproj b/src/ElectronNET.Host/ElectronNET.Host.esproj new file mode 100644 index 00000000..0f56fbfb --- /dev/null +++ b/src/ElectronNET.Host/ElectronNET.Host.esproj @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/ElectronNET.Host/api/autoUpdater.js.map b/src/ElectronNET.Host/api/autoUpdater.js.map index d4c8e43e..d5eeed11 100644 --- a/src/ElectronNET.Host/api/autoUpdater.js.map +++ b/src/ElectronNET.Host/api/autoUpdater.js.map @@ -1 +1 @@ -{"version":3,"file":"autoUpdater.js","sourceRoot":"","sources":["autoUpdater.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"autoUpdater.js","sourceRoot":"","sources":["autoUpdater.ts"],"names":[],"mappings":";AACA,uDAA+C;AAC/C,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IAExB,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC3C,8BAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,cAAc,CAAC,IAAI,CAAC,mBAAmB,GAAG,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0CAA0C,EAAE,CAAC,EAAE,EAAE,EAAE;QACzD,8BAAW,CAAC,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;YACvC,cAAc,CAAC,IAAI,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uCAAuC,EAAE,CAAC,EAAE,EAAE,EAAE;QACtD,8BAAW,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,UAAU,EAAE,EAAE;YAC9C,cAAc,CAAC,IAAI,CAAC,8BAA8B,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2CAA2C,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1D,8BAAW,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,UAAU,EAAE,EAAE;YAClD,cAAc,CAAC,IAAI,CAAC,kCAAkC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wCAAwC,EAAE,CAAC,EAAE,EAAE,EAAE;QACvD,8BAAW,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,YAAY,EAAE,EAAE;YACjD,cAAc,CAAC,IAAI,CAAC,+BAA+B,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wCAAwC,EAAE,CAAC,EAAE,EAAE,EAAE;QACvD,8BAAW,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,UAAU,EAAE,EAAE;YAC/C,cAAc,CAAC,IAAI,CAAC,+BAA+B,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,mBAAmB;IAEnB,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACvC,cAAc,CAAC,IAAI,CAAC,oCAAoC,EAAE,8BAAW,CAAC,YAAY,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,KAAK,EAAE,EAAE;QAChD,8BAAW,CAAC,YAAY,GAAG,KAAK,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC/C,cAAc,CAAC,IAAI,CAAC,4CAA4C,EAAE,8BAAW,CAAC,oBAAoB,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sCAAsC,EAAE,CAAC,KAAK,EAAE,EAAE;QACxD,8BAAW,CAAC,oBAAoB,GAAG,KAAK,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC1C,cAAc,CAAC,IAAI,CAAC,uCAAuC,EAAE,8BAAW,CAAC,eAAe,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,KAAK,EAAE,EAAE;QACnD,8BAAW,CAAC,eAAe,GAAG,KAAK,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACxC,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE,8BAAW,CAAC,aAAa,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,KAAK,EAAE,EAAE;QACjD,8BAAW,CAAC,aAAa,GAAG,KAAK,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACzC,cAAc,CAAC,IAAI,CAAC,sCAAsC,EAAE,8BAAW,CAAC,cAAc,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,KAAK,EAAE,EAAE;QAClD,8BAAW,CAAC,cAAc,GAAG,KAAK,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC3C,cAAc,CAAC,IAAI,CAAC,wCAAwC,EAAE,8BAAW,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,KAAK,EAAE,EAAE;QACpD,8BAAW,CAAC,gBAAgB,GAAG,KAAK,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACzC,cAAc,CAAC,IAAI,CAAC,sCAAsC,EAAE,8BAAW,CAAC,cAAc,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAClC,cAAc,CAAC,IAAI,CAAC,+BAA+B,EAAE,8BAAW,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,EAAE;QAC3C,8BAAW,CAAC,OAAO,GAAG,KAAK,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACzC,cAAc,CAAC,IAAI,CAAC,sCAAsC,EAAE,8BAAW,CAAC,cAAc,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,KAAK,EAAE,EAAE;QAClD,8BAAW,CAAC,cAAc,GAAG,KAAK,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,sCAAsC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC7D,8BAAW,CAAC,wBAAwB,EAAE,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,EAAE;YAC9D,cAAc,CAAC,IAAI,CAAC,gDAAgD,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACpG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,cAAc,CAAC,IAAI,CAAC,2CAA2C,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACpD,8BAAW,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,EAAE;YACrD,cAAc,CAAC,IAAI,CAAC,uCAAuC,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,cAAc,CAAC,IAAI,CAAC,kCAAkC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE;QACxE,8BAAW,CAAC,cAAc,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACnD,MAAM,cAAc,GAAG,MAAM,8BAAW,CAAC,cAAc,EAAE,CAAC;QAC1D,cAAc,CAAC,IAAI,CAAC,sCAAsC,GAAG,IAAI,EAAE,cAAc,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC/C,MAAM,OAAO,GAAG,MAAM,8BAAW,CAAC,UAAU,EAAE,CAAC;QAC/C,cAAc,CAAC,IAAI,CAAC,kCAAkC,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/browserView.js.map b/src/ElectronNET.Host/api/browserView.js.map index a61597d3..9409e77b 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 b/src/ElectronNET.Host/api/browserWindows.js index f229a438..2e6d14ec 100644 --- a/src/ElectronNET.Host/api/browserWindows.js +++ b/src/ElectronNET.Host/api/browserWindows.js @@ -1,179 +1,197 @@ "use strict"; const electron_1 = require("electron"); const browserView_1 = require("./browserView"); -const path = require('path'); -const windows = (global['browserWindows'] = global['browserWindows'] || []); +const path = require("path"); +const windows = (global["browserWindows"] = + global["browserWindows"] || []); let readyToShowWindowsIds = []; let window, lastOptions, electronSocket; let mainWindowURL; -const proxyToCredentialsMap = (global['proxyToCredentialsMap'] = global['proxyToCredentialsMap'] || []); +const proxyToCredentialsMap = (global["proxyToCredentialsMap"] = global["proxyToCredentialsMap"] || []); module.exports = (socket, app) => { electronSocket = socket; - app.on('login', (event, webContents, request, authInfo, callback) => { + app.on("login", (event, webContents, request, authInfo, callback) => { if (authInfo.isProxy) { let proxy = `${authInfo.host}:${authInfo.port}`; - if (proxy in proxyToCredentialsMap && proxyToCredentialsMap[proxy].split(':').length === 2) { + if (proxy in proxyToCredentialsMap && + proxyToCredentialsMap[proxy].split(":").length === 2) { event.preventDefault(); - let user = proxyToCredentialsMap[proxy].split(':')[0]; - let pass = proxyToCredentialsMap[proxy].split(':')[1]; + let user = proxyToCredentialsMap[proxy].split(":")[0]; + let pass = proxyToCredentialsMap[proxy].split(":")[1]; callback(user, pass); } } }); - socket.on('register-browserWindow-ready-to-show', (id) => { + socket.on("register-browserWindow-ready-to-show", (id) => { if (readyToShowWindowsIds.includes(id)) { - readyToShowWindowsIds = readyToShowWindowsIds.filter(value => value !== id); - electronSocket.emit('browserWindow-ready-to-show' + id); + readyToShowWindowsIds = readyToShowWindowsIds.filter((value) => value !== id); + electronSocket.emit("browserWindow-ready-to-show" + id); } - getWindowById(id).on('ready-to-show', () => { + getWindowById(id).on("ready-to-show", () => { readyToShowWindowsIds.push(id); - electronSocket.emit('browserWindow-ready-to-show' + id); + electronSocket.emit("browserWindow-ready-to-show" + id); }); }); - socket.on('register-browserWindow-page-title-updated', (id) => { - getWindowById(id).on('page-title-updated', (event, title) => { - electronSocket.emit('browserWindow-page-title-updated' + id, title); + socket.on("register-browserWindow-page-title-updated", (id) => { + getWindowById(id).on("page-title-updated", (event, title) => { + electronSocket.emit("browserWindow-page-title-updated" + id, title); }); }); - socket.on('register-browserWindow-close', (id) => { - getWindowById(id).on('close', () => { - electronSocket.emit('browserWindow-close' + id); + socket.on("register-browserWindow-close", (id) => { + getWindowById(id).on("close", () => { + electronSocket.emit("browserWindow-close" + id); }); }); - socket.on('register-browserWindow-closed', (id) => { - getWindowById(id).on('closed', () => { - electronSocket.emit('browserWindow-closed' + id); + socket.on("register-browserWindow-closed", (id) => { + getWindowById(id).on("closed", () => { + electronSocket.emit("browserWindow-closed" + id); }); }); - socket.on('register-browserWindow-session-end', (id) => { - getWindowById(id).on('session-end', () => { - electronSocket.emit('browserWindow-session-end' + id); + socket.on("register-browserWindow-session-end", (id) => { + getWindowById(id).on("session-end", () => { + electronSocket.emit("browserWindow-session-end" + id); }); }); - socket.on('register-browserWindow-unresponsive', (id) => { - getWindowById(id).on('unresponsive', () => { - electronSocket.emit('browserWindow-unresponsive' + id); + socket.on("register-browserWindow-unresponsive", (id) => { + getWindowById(id).on("unresponsive", () => { + electronSocket.emit("browserWindow-unresponsive" + id); }); }); - socket.on('register-browserWindow-responsive', (id) => { - getWindowById(id).on('responsive', () => { - electronSocket.emit('browserWindow-responsive' + id); + socket.on("register-browserWindow-responsive", (id) => { + getWindowById(id).on("responsive", () => { + electronSocket.emit("browserWindow-responsive" + id); }); }); - socket.on('register-browserWindow-blur', (id) => { - getWindowById(id).on('blur', () => { - electronSocket.emit('browserWindow-blur' + id); + socket.on("register-browserWindow-blur", (id) => { + getWindowById(id).on("blur", () => { + electronSocket.emit("browserWindow-blur" + id); }); }); - socket.on('register-browserWindow-focus', (id) => { - getWindowById(id).on('focus', () => { - electronSocket.emit('browserWindow-focus' + id); + socket.on("register-browserWindow-focus", (id) => { + getWindowById(id).on("focus", () => { + electronSocket.emit("browserWindow-focus" + id); }); }); - socket.on('register-browserWindow-show', (id) => { - getWindowById(id).on('show', () => { - electronSocket.emit('browserWindow-show' + id); + socket.on("register-browserWindow-show", (id) => { + getWindowById(id).on("show", () => { + electronSocket.emit("browserWindow-show" + id); }); }); - socket.on('register-browserWindow-hide', (id) => { - getWindowById(id).on('hide', () => { - electronSocket.emit('browserWindow-hide' + id); + socket.on("register-browserWindow-hide", (id) => { + getWindowById(id).on("hide", () => { + electronSocket.emit("browserWindow-hide" + id); }); }); - socket.on('register-browserWindow-maximize', (id) => { - getWindowById(id).on('maximize', () => { - electronSocket.emit('browserWindow-maximize' + id); + socket.on("register-browserWindow-maximize", (id) => { + getWindowById(id).on("maximize", () => { + electronSocket.emit("browserWindow-maximize" + id); }); }); - socket.on('register-browserWindow-unmaximize', (id) => { - getWindowById(id).on('unmaximize', () => { - electronSocket.emit('browserWindow-unmaximize' + id); + socket.on("register-browserWindow-unmaximize", (id) => { + getWindowById(id).on("unmaximize", () => { + electronSocket.emit("browserWindow-unmaximize" + id); }); }); - socket.on('register-browserWindow-minimize', (id) => { - getWindowById(id).on('minimize', () => { - electronSocket.emit('browserWindow-minimize' + id); + socket.on("register-browserWindow-minimize", (id) => { + getWindowById(id).on("minimize", () => { + electronSocket.emit("browserWindow-minimize" + id); }); }); - socket.on('register-browserWindow-restore', (id) => { - getWindowById(id).on('restore', () => { - electronSocket.emit('browserWindow-restore' + id); + socket.on("register-browserWindow-restore", (id) => { + getWindowById(id).on("restore", () => { + electronSocket.emit("browserWindow-restore" + id); }); }); - socket.on('register-browserWindow-resize', (id) => { - getWindowById(id).on('resize', () => { - electronSocket.emit('browserWindow-resize' + id); + socket.on("register-browserWindow-resize", (id) => { + getWindowById(id).on("resize", () => { + electronSocket.emit("browserWindow-resize" + id); }); }); - socket.on('register-browserWindow-move', (id) => { - getWindowById(id).on('move', () => { - electronSocket.emit('browserWindow-move' + id); + socket.on("register-browserWindow-move", (id) => { + getWindowById(id).on("move", () => { + electronSocket.emit("browserWindow-move" + id); }); }); - socket.on('register-browserWindow-moved', (id) => { - getWindowById(id).on('moved', () => { - electronSocket.emit('browserWindow-moved' + id); + socket.on("register-browserWindow-moved", (id) => { + getWindowById(id).on("moved", () => { + electronSocket.emit("browserWindow-moved" + id); }); }); - socket.on('register-browserWindow-enter-full-screen', (id) => { - getWindowById(id).on('enter-full-screen', () => { - electronSocket.emit('browserWindow-enter-full-screen' + id); + socket.on("register-browserWindow-enter-full-screen", (id) => { + getWindowById(id).on("enter-full-screen", () => { + electronSocket.emit("browserWindow-enter-full-screen" + id); }); }); - socket.on('register-browserWindow-leave-full-screen', (id) => { - getWindowById(id).on('leave-full-screen', () => { - electronSocket.emit('browserWindow-leave-full-screen' + id); + socket.on("register-browserWindow-leave-full-screen", (id) => { + getWindowById(id).on("leave-full-screen", () => { + electronSocket.emit("browserWindow-leave-full-screen" + id); }); }); - socket.on('register-browserWindow-enter-html-full-screen', (id) => { - getWindowById(id).on('enter-html-full-screen', () => { - electronSocket.emit('browserWindow-enter-html-full-screen' + id); + socket.on("register-browserWindow-enter-html-full-screen", (id) => { + getWindowById(id).on("enter-html-full-screen", () => { + electronSocket.emit("browserWindow-enter-html-full-screen" + id); }); }); - socket.on('register-browserWindow-leave-html-full-screen', (id) => { - getWindowById(id).on('leave-html-full-screen', () => { - electronSocket.emit('browserWindow-leave-html-full-screen' + id); + socket.on("register-browserWindow-leave-html-full-screen", (id) => { + getWindowById(id).on("leave-html-full-screen", () => { + electronSocket.emit("browserWindow-leave-html-full-screen" + id); }); }); - socket.on('register-browserWindow-app-command', (id) => { - getWindowById(id).on('app-command', (event, command) => { - electronSocket.emit('browserWindow-app-command' + id, command); + socket.on("register-browserWindow-app-command", (id) => { + getWindowById(id).on("app-command", (event, command) => { + electronSocket.emit("browserWindow-app-command" + id, command); }); }); - socket.on('register-browserWindow-swipe', (id) => { - getWindowById(id).on('swipe', (event, direction) => { - electronSocket.emit('browserWindow-swipe' + id, direction); + socket.on("register-browserWindow-swipe", (id) => { + getWindowById(id).on("swipe", (event, direction) => { + electronSocket.emit("browserWindow-swipe" + id, direction); }); }); - socket.on('register-browserWindow-sheet-begin', (id) => { - getWindowById(id).on('sheet-begin', () => { - electronSocket.emit('browserWindow-sheet-begin' + id); + socket.on("register-browserWindow-sheet-begin", (id) => { + getWindowById(id).on("sheet-begin", () => { + electronSocket.emit("browserWindow-sheet-begin" + id); }); }); - socket.on('register-browserWindow-sheet-end', (id) => { - getWindowById(id).on('sheet-end', () => { - electronSocket.emit('browserWindow-sheet-end' + id); + socket.on("register-browserWindow-sheet-end", (id) => { + getWindowById(id).on("sheet-end", () => { + electronSocket.emit("browserWindow-sheet-end" + id); }); }); - socket.on('register-browserWindow-new-window-for-tab', (id) => { - getWindowById(id).on('new-window-for-tab', () => { - electronSocket.emit('browserWindow-new-window-for-tab' + id); + socket.on("register-browserWindow-new-window-for-tab", (id) => { + getWindowById(id).on("new-window-for-tab", () => { + electronSocket.emit("browserWindow-new-window-for-tab" + id); }); }); - socket.on('createBrowserWindow', (options, loadUrl) => { - if (options.webPreferences && !('nodeIntegration' in options.webPreferences)) { - options = { ...options, webPreferences: { ...options.webPreferences, nodeIntegration: true, contextIsolation: false } }; + socket.on("createBrowserWindow", (options, loadUrl) => { + if (options.webPreferences && + !("nodeIntegration" in options.webPreferences)) { + options = { + ...options, + webPreferences: { + ...options.webPreferences, + nodeIntegration: true, + contextIsolation: false, + }, + }; } else if (!options.webPreferences) { - options = { ...options, webPreferences: { nodeIntegration: true, contextIsolation: false } }; + options = { + ...options, + webPreferences: { nodeIntegration: true, contextIsolation: false }, + }; + } + if (options.isRunningBlazor) { + options.webPreferences["preload"] = path.join(__dirname, "..", "scripts", "blazor-preload.js"); } + delete options.isRunningBlazor; // we dont want to recreate the window when watch is ready. - if (app.commandLine.hasSwitch('watch') && app['mainWindowURL'] === loadUrl) { - window = app['mainWindow']; + if (app.commandLine.hasSwitch("watch") && + app["mainWindowURL"] === loadUrl) { + window = app["mainWindow"]; if (window) { window.reload(); windows.push(window); - electronSocket.emit('BrowserWindowCreated', window.id); + electronSocket.emit("BrowserWindowCreated", window.id); return; } } @@ -186,32 +204,32 @@ module.exports = (socket, app) => { if (options.proxy && options.proxyCredentials) { proxyToCredentialsMap[options.proxy] = options.proxyCredentials; } - window.on('ready-to-show', () => { + window.on("ready-to-show", () => { if (readyToShowWindowsIds.includes(window.id)) { - readyToShowWindowsIds = readyToShowWindowsIds.filter(value => value !== window.id); + readyToShowWindowsIds = readyToShowWindowsIds.filter((value) => value !== window.id); } else { readyToShowWindowsIds.push(window.id); } }); lastOptions = options; - window.on('closed', (sender) => { + window.on("closed", (sender) => { for (let index = 0; index < windows.length; index++) { const windowItem = windows[index]; try { windowItem.id; } catch (error) { - if (error.message === 'Object has been destroyed') { + if (error.message === "Object has been destroyed") { windows.splice(index, 1); const ids = []; - windows.forEach(x => ids.push(x.id)); - electronSocket.emit('BrowserWindowClosed', ids); + windows.forEach((x) => ids.push(x.id)); + electronSocket.emit("BrowserWindowClosed", ids); } } } }); - app.on('activate', () => { + app.on("activate", () => { // On macOS it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (window === null && lastOptions) { @@ -221,204 +239,204 @@ module.exports = (socket, app) => { if (loadUrl) { window.loadURL(loadUrl); } - if (app.commandLine.hasSwitch('clear-cache') && - app.commandLine.getSwitchValue('clear-cache')) { + if (app.commandLine.hasSwitch("clear-cache") && + app.commandLine.getSwitchValue("clear-cache")) { window.webContents.session.clearCache(); - console.log('auto clear-cache active for new window.'); + console.log("auto clear-cache active for new window."); } // set main window url - if (app['mainWindowURL'] == undefined || app['mainWindowURL'] == "") { - app['mainWindowURL'] = loadUrl; - app['mainWindow'] = window; + if (app["mainWindowURL"] == undefined || app["mainWindowURL"] == "") { + app["mainWindowURL"] = loadUrl; + app["mainWindow"] = window; } windows.push(window); - electronSocket.emit('BrowserWindowCreated', window.id); + electronSocket.emit("BrowserWindowCreated", window.id); }); - socket.on('browserWindowDestroy', (id) => { + socket.on("browserWindowDestroy", (id) => { getWindowById(id).destroy(); }); - socket.on('browserWindowClose', (id) => { + socket.on("browserWindowClose", (id) => { getWindowById(id).close(); }); - socket.on('browserWindowFocus', (id) => { + socket.on("browserWindowFocus", (id) => { getWindowById(id).focus(); }); - socket.on('browserWindowBlur', (id) => { + socket.on("browserWindowBlur", (id) => { getWindowById(id).blur(); }); - socket.on('browserWindowIsFocused', (id) => { + socket.on("browserWindowIsFocused", (id) => { const isFocused = getWindowById(id).isFocused(); - electronSocket.emit('browserWindow-isFocused-completed', isFocused); + electronSocket.emit("browserWindow-isFocused-completed", isFocused); }); - socket.on('browserWindowIsDestroyed', (id) => { + socket.on("browserWindowIsDestroyed", (id) => { const isDestroyed = getWindowById(id).isDestroyed(); - electronSocket.emit('browserWindow-isDestroyed-completed', isDestroyed); + electronSocket.emit("browserWindow-isDestroyed-completed", isDestroyed); }); - socket.on('browserWindowShow', (id) => { + socket.on("browserWindowShow", (id) => { getWindowById(id).show(); }); - socket.on('browserWindowShowInactive', (id) => { + socket.on("browserWindowShowInactive", (id) => { getWindowById(id).showInactive(); }); - socket.on('browserWindowHide', (id) => { + socket.on("browserWindowHide", (id) => { getWindowById(id).hide(); }); - socket.on('browserWindowIsVisible', (id) => { + socket.on("browserWindowIsVisible", (id) => { const isVisible = getWindowById(id).isVisible(); - electronSocket.emit('browserWindow-isVisible-completed', isVisible); + electronSocket.emit("browserWindow-isVisible-completed", isVisible); }); - socket.on('browserWindowIsModal', (id) => { + socket.on("browserWindowIsModal", (id) => { const isModal = getWindowById(id).isModal(); - electronSocket.emit('browserWindow-isModal-completed', isModal); + electronSocket.emit("browserWindow-isModal-completed", isModal); }); - socket.on('browserWindowMaximize', (id) => { + socket.on("browserWindowMaximize", (id) => { getWindowById(id).maximize(); }); - socket.on('browserWindowUnmaximize', (id) => { + socket.on("browserWindowUnmaximize", (id) => { getWindowById(id).unmaximize(); }); - socket.on('browserWindowIsMaximized', (id) => { + socket.on("browserWindowIsMaximized", (id) => { const isMaximized = getWindowById(id).isMaximized(); - electronSocket.emit('browserWindow-isMaximized-completed', isMaximized); + electronSocket.emit("browserWindow-isMaximized-completed", isMaximized); }); - socket.on('browserWindowMinimize', (id) => { + socket.on("browserWindowMinimize", (id) => { getWindowById(id).minimize(); }); - socket.on('browserWindowRestore', (id) => { + socket.on("browserWindowRestore", (id) => { getWindowById(id).restore(); }); - socket.on('browserWindowIsMinimized', (id) => { + socket.on("browserWindowIsMinimized", (id) => { const isMinimized = getWindowById(id).isMinimized(); - electronSocket.emit('browserWindow-isMinimized-completed', isMinimized); + electronSocket.emit("browserWindow-isMinimized-completed", isMinimized); }); - socket.on('browserWindowSetFullScreen', (id, fullscreen) => { + socket.on("browserWindowSetFullScreen", (id, fullscreen) => { getWindowById(id).setFullScreen(fullscreen); }); - socket.on('browserWindowIsFullScreen', (id) => { + socket.on("browserWindowIsFullScreen", (id) => { const isFullScreen = getWindowById(id).isFullScreen(); - electronSocket.emit('browserWindow-isFullScreen-completed', isFullScreen); + electronSocket.emit("browserWindow-isFullScreen-completed", isFullScreen); }); - socket.on('browserWindowSetAspectRatio', (id, aspectRatio, extraSize) => { + socket.on("browserWindowSetAspectRatio", (id, aspectRatio, extraSize) => { getWindowById(id).setAspectRatio(aspectRatio, extraSize); }); - socket.on('browserWindowPreviewFile', (id, path, displayname) => { + socket.on("browserWindowPreviewFile", (id, path, displayname) => { getWindowById(id).previewFile(path, displayname); }); - socket.on('browserWindowCloseFilePreview', (id) => { + socket.on("browserWindowCloseFilePreview", (id) => { getWindowById(id).closeFilePreview(); }); - socket.on('browserWindowSetBounds', (id, bounds, animate) => { + socket.on("browserWindowSetBounds", (id, bounds, animate) => { getWindowById(id).setBounds(bounds, animate); }); - socket.on('browserWindowGetBounds', (id) => { + socket.on("browserWindowGetBounds", (id) => { const rectangle = getWindowById(id).getBounds(); - electronSocket.emit('browserWindow-getBounds-completed', rectangle); + electronSocket.emit("browserWindow-getBounds-completed", rectangle); }); - socket.on('browserWindowSetContentBounds', (id, bounds, animate) => { + socket.on("browserWindowSetContentBounds", (id, bounds, animate) => { getWindowById(id).setContentBounds(bounds, animate); }); - socket.on('browserWindowGetContentBounds', (id) => { + socket.on("browserWindowGetContentBounds", (id) => { const rectangle = getWindowById(id).getContentBounds(); - electronSocket.emit('browserWindow-getContentBounds-completed', rectangle); + electronSocket.emit("browserWindow-getContentBounds-completed", rectangle); }); - socket.on('browserWindowSetSize', (id, width, height, animate) => { + socket.on("browserWindowSetSize", (id, width, height, animate) => { getWindowById(id).setSize(width, height, animate); }); - socket.on('browserWindowGetSize', (id) => { + socket.on("browserWindowGetSize", (id) => { const size = getWindowById(id).getSize(); - electronSocket.emit('browserWindow-getSize-completed', size); + electronSocket.emit("browserWindow-getSize-completed", size); }); - socket.on('browserWindowSetContentSize', (id, width, height, animate) => { + socket.on("browserWindowSetContentSize", (id, width, height, animate) => { getWindowById(id).setContentSize(width, height, animate); }); - socket.on('browserWindowGetContentSize', (id) => { + socket.on("browserWindowGetContentSize", (id) => { const size = getWindowById(id).getContentSize(); - electronSocket.emit('browserWindow-getContentSize-completed', size); + electronSocket.emit("browserWindow-getContentSize-completed", size); }); - socket.on('browserWindowSetMinimumSize', (id, width, height) => { + socket.on("browserWindowSetMinimumSize", (id, width, height) => { getWindowById(id).setMinimumSize(width, height); }); - socket.on('browserWindowGetMinimumSize', (id) => { + socket.on("browserWindowGetMinimumSize", (id) => { const size = getWindowById(id).getMinimumSize(); - electronSocket.emit('browserWindow-getMinimumSize-completed', size); + electronSocket.emit("browserWindow-getMinimumSize-completed", size); }); - socket.on('browserWindowSetMaximumSize', (id, width, height) => { + socket.on("browserWindowSetMaximumSize", (id, width, height) => { getWindowById(id).setMaximumSize(width, height); }); - socket.on('browserWindowGetMaximumSize', (id) => { + socket.on("browserWindowGetMaximumSize", (id) => { const size = getWindowById(id).getMaximumSize(); - electronSocket.emit('browserWindow-getMaximumSize-completed', size); + electronSocket.emit("browserWindow-getMaximumSize-completed", size); }); - socket.on('browserWindowSetResizable', (id, resizable) => { + socket.on("browserWindowSetResizable", (id, resizable) => { getWindowById(id).setResizable(resizable); }); - socket.on('browserWindowIsResizable', (id) => { + socket.on("browserWindowIsResizable", (id) => { const resizable = getWindowById(id).isResizable(); - electronSocket.emit('browserWindow-isResizable-completed', resizable); + electronSocket.emit("browserWindow-isResizable-completed", resizable); }); - socket.on('browserWindowSetMovable', (id, movable) => { + socket.on("browserWindowSetMovable", (id, movable) => { getWindowById(id).setMovable(movable); }); - socket.on('browserWindowIsMovable', (id) => { + socket.on("browserWindowIsMovable", (id) => { const movable = getWindowById(id).isMovable(); - electronSocket.emit('browserWindow-isMovable-completed', movable); + electronSocket.emit("browserWindow-isMovable-completed", movable); }); - socket.on('browserWindowSetMinimizable', (id, minimizable) => { + socket.on("browserWindowSetMinimizable", (id, minimizable) => { getWindowById(id).setMinimizable(minimizable); }); - socket.on('browserWindowIsMinimizable', (id) => { + socket.on("browserWindowIsMinimizable", (id) => { const minimizable = getWindowById(id).isMinimizable(); - electronSocket.emit('browserWindow-isMinimizable-completed', minimizable); + electronSocket.emit("browserWindow-isMinimizable-completed", minimizable); }); - socket.on('browserWindowSetMaximizable', (id, maximizable) => { + socket.on("browserWindowSetMaximizable", (id, maximizable) => { getWindowById(id).setMaximizable(maximizable); }); - socket.on('browserWindowIsMaximizable', (id) => { + socket.on("browserWindowIsMaximizable", (id) => { const maximizable = getWindowById(id).isMaximizable(); - electronSocket.emit('browserWindow-isMaximizable-completed', maximizable); + electronSocket.emit("browserWindow-isMaximizable-completed", maximizable); }); - socket.on('browserWindowSetFullScreenable', (id, fullscreenable) => { + socket.on("browserWindowSetFullScreenable", (id, fullscreenable) => { getWindowById(id).setFullScreenable(fullscreenable); }); - socket.on('browserWindowIsFullScreenable', (id) => { + socket.on("browserWindowIsFullScreenable", (id) => { const fullscreenable = getWindowById(id).isFullScreenable(); - electronSocket.emit('browserWindow-isFullScreenable-completed', fullscreenable); + electronSocket.emit("browserWindow-isFullScreenable-completed", fullscreenable); }); - socket.on('browserWindowSetClosable', (id, closable) => { + socket.on("browserWindowSetClosable", (id, closable) => { getWindowById(id).setClosable(closable); }); - socket.on('browserWindowIsClosable', (id) => { + socket.on("browserWindowIsClosable", (id) => { const closable = getWindowById(id).isClosable(); - electronSocket.emit('browserWindow-isClosable-completed', closable); + electronSocket.emit("browserWindow-isClosable-completed", closable); }); - socket.on('browserWindowSetAlwaysOnTop', (id, flag, level, relativeLevel) => { + socket.on("browserWindowSetAlwaysOnTop", (id, flag, level, relativeLevel) => { getWindowById(id).setAlwaysOnTop(flag, level, relativeLevel); }); - socket.on('browserWindowIsAlwaysOnTop', (id) => { + socket.on("browserWindowIsAlwaysOnTop", (id) => { const isAlwaysOnTop = getWindowById(id).isAlwaysOnTop(); - electronSocket.emit('browserWindow-isAlwaysOnTop-completed', isAlwaysOnTop); + electronSocket.emit("browserWindow-isAlwaysOnTop-completed", isAlwaysOnTop); }); - socket.on('browserWindowCenter', (id) => { + socket.on("browserWindowCenter", (id) => { getWindowById(id).center(); }); - socket.on('browserWindowSetPosition', (id, x, y, animate) => { + socket.on("browserWindowSetPosition", (id, x, y, animate) => { getWindowById(id).setPosition(x, y, animate); }); - socket.on('browserWindowGetPosition', (id) => { + socket.on("browserWindowGetPosition", (id) => { const position = getWindowById(id).getPosition(); - electronSocket.emit('browserWindow-getPosition-completed', position); + electronSocket.emit("browserWindow-getPosition-completed", position); }); - socket.on('browserWindowSetTitle', (id, title) => { + socket.on("browserWindowSetTitle", (id, title) => { getWindowById(id).setTitle(title); }); - socket.on('browserWindowGetTitle', (id) => { + socket.on("browserWindowGetTitle", (id) => { const title = getWindowById(id).getTitle(); - electronSocket.emit('browserWindow-getTitle-completed', title); + electronSocket.emit("browserWindow-getTitle-completed", title); }); - socket.on('browserWindowSetTitle', (id, title) => { + socket.on("browserWindowSetTitle", (id, title) => { getWindowById(id).setTitle(title); }); - socket.on('browserWindowSetSheetOffset', (id, offsetY, offsetX) => { + socket.on("browserWindowSetSheetOffset", (id, offsetY, offsetX) => { if (offsetX) { getWindowById(id).setSheetOffset(offsetY, offsetX); } @@ -426,77 +444,80 @@ module.exports = (socket, app) => { getWindowById(id).setSheetOffset(offsetY); } }); - socket.on('browserWindowFlashFrame', (id, flag) => { + socket.on("browserWindowFlashFrame", (id, flag) => { getWindowById(id).flashFrame(flag); }); - socket.on('browserWindowSetSkipTaskbar', (id, skip) => { + socket.on("browserWindowSetSkipTaskbar", (id, skip) => { getWindowById(id).setSkipTaskbar(skip); }); - socket.on('browserWindowSetKiosk', (id, flag) => { + socket.on("browserWindowSetKiosk", (id, flag) => { getWindowById(id).setKiosk(flag); }); - socket.on('browserWindowIsKiosk', (id) => { + socket.on("browserWindowIsKiosk", (id) => { const isKiosk = getWindowById(id).isKiosk(); - electronSocket.emit('browserWindow-isKiosk-completed', isKiosk); + electronSocket.emit("browserWindow-isKiosk-completed", isKiosk); }); - socket.on('browserWindowGetNativeWindowHandle', (id) => { - const nativeWindowHandle = getWindowById(id).getNativeWindowHandle().readInt32LE(0).toString(16); - electronSocket.emit('browserWindow-getNativeWindowHandle-completed', nativeWindowHandle); + socket.on("browserWindowGetNativeWindowHandle", (id) => { + const nativeWindowHandle = getWindowById(id) + .getNativeWindowHandle() + .readInt32LE(0) + .toString(16); + electronSocket.emit("browserWindow-getNativeWindowHandle-completed", nativeWindowHandle); }); - socket.on('browserWindowSetRepresentedFilename', (id, filename) => { + socket.on("browserWindowSetRepresentedFilename", (id, filename) => { const win = getWindowById(id); try { - if (win && typeof win.setRepresentedFilename === 'function') { + if (win && typeof win.setRepresentedFilename === "function") { win.setRepresentedFilename(filename); } } catch (e) { - console.warn('setRepresentedFilename failed (likely unsupported platform):', e); + console.warn("setRepresentedFilename failed (likely unsupported platform):", e); } }); - socket.on('browserWindowGetRepresentedFilename', (id) => { + socket.on("browserWindowGetRepresentedFilename", (id) => { const win = getWindowById(id); - let pathname = ''; + let pathname = ""; try { - if (win && typeof win.getRepresentedFilename === 'function') { - pathname = win.getRepresentedFilename() || ''; + if (win && typeof win.getRepresentedFilename === "function") { + pathname = win.getRepresentedFilename() || ""; } } catch (e) { - console.warn('getRepresentedFilename failed (likely unsupported platform):', e); + console.warn("getRepresentedFilename failed (likely unsupported platform):", e); } - electronSocket.emit('browserWindow-getRepresentedFilename-completed', pathname); + electronSocket.emit("browserWindow-getRepresentedFilename-completed", pathname); }); - socket.on('browserWindowSetDocumentEdited', (id, edited) => { + socket.on("browserWindowSetDocumentEdited", (id, edited) => { getWindowById(id).setDocumentEdited(edited); }); - socket.on('browserWindowIsDocumentEdited', (id) => { + socket.on("browserWindowIsDocumentEdited", (id) => { const edited = getWindowById(id).isDocumentEdited(); - electronSocket.emit('browserWindow-isDocumentEdited-completed', edited); + electronSocket.emit("browserWindow-isDocumentEdited-completed", edited); }); - socket.on('browserWindowFocusOnWebView', (id) => { + socket.on("browserWindowFocusOnWebView", (id) => { getWindowById(id).focusOnWebView(); }); - socket.on('browserWindowBlurWebView', (id) => { + socket.on("browserWindowBlurWebView", (id) => { getWindowById(id).blurWebView(); }); - socket.on('browserWindowLoadURL', (id, url, options) => { + socket.on("browserWindowLoadURL", (id, url, options) => { getWindowById(id).loadURL(url, options); }); - socket.on('browserWindowReload', (id) => { + socket.on("browserWindowReload", (id) => { getWindowById(id).reload(); }); - socket.on('browserWindowSetMenu', (id, menuItems) => { + socket.on("browserWindowSetMenu", (id, menuItems) => { let menu = null; if (menuItems) { menu = electron_1.Menu.buildFromTemplate(menuItems); addMenuItemClickConnector(menu.items, (id) => { - electronSocket.emit('windowMenuItemClicked', id); + electronSocket.emit("windowMenuItemClicked", id); }); } getWindowById(id).setMenu(menu); }); - socket.on('browserWindowRemoveMenu', (id) => { + socket.on("browserWindowRemoveMenu", (id) => { getWindowById(id).removeMenu(); }); function addMenuItemClickConnector(menuItems, callback) { @@ -504,34 +525,36 @@ module.exports = (socket, app) => { if (item.submenu && item.submenu.items.length > 0) { addMenuItemClickConnector(item.submenu.items, callback); } - if ('id' in item && item.id) { - item.click = () => { callback(item.id); }; + if ("id" in item && item.id) { + item.click = () => { + callback(item.id); + }; } }); } - socket.on('browserWindowSetProgressBar', (id, progress) => { + socket.on("browserWindowSetProgressBar", (id, progress) => { getWindowById(id).setProgressBar(progress); }); - socket.on('browserWindowSetProgressBar', (id, progress, options) => { + socket.on("browserWindowSetProgressBar", (id, progress, options) => { getWindowById(id).setProgressBar(progress, options); }); - socket.on('browserWindowSetHasShadow', (id, hasShadow) => { + socket.on("browserWindowSetHasShadow", (id, hasShadow) => { getWindowById(id).setHasShadow(hasShadow); }); - socket.on('browserWindowHasShadow', (id) => { + socket.on("browserWindowHasShadow", (id) => { const hasShadow = getWindowById(id).hasShadow(); - electronSocket.emit('browserWindow-hasShadow-completed', hasShadow); + electronSocket.emit("browserWindow-hasShadow-completed", hasShadow); }); - socket.on('browserWindowSetThumbarButtons', (id, thumbarButtons) => { - thumbarButtons.forEach(thumbarButton => { + socket.on("browserWindowSetThumbarButtons", (id, thumbarButtons) => { + thumbarButtons.forEach((thumbarButton) => { const originalIconPath = thumbarButton.icon.toString(); - const path = require('path'); - const fs = require('fs'); + const path = require("path"); + const fs = require("fs"); let imagePath = originalIconPath; if (!path.isAbsolute(originalIconPath)) { - imagePath = path.join(__dirname.replace('api', ''), 'bin', originalIconPath); + imagePath = path.join(__dirname.replace("api", ""), "bin", originalIconPath); } - const { nativeImage } = require('electron'); + const { nativeImage } = require("electron"); if (fs.existsSync(imagePath)) { thumbarButton.icon = nativeImage.createFromPath(imagePath); } @@ -540,55 +563,55 @@ module.exports = (socket, app) => { thumbarButton.icon = nativeImage.createEmpty(); } thumbarButton.click = () => { - electronSocket.emit('thumbarButtonClicked', thumbarButton['id']); + electronSocket.emit("thumbarButtonClicked", thumbarButton["id"]); }; }); const success = getWindowById(id).setThumbarButtons(thumbarButtons); - electronSocket.emit('browserWindowSetThumbarButtons-completed', success); + electronSocket.emit("browserWindowSetThumbarButtons-completed", success); }); - socket.on('browserWindowSetThumbnailClip', (id, rectangle) => { + socket.on("browserWindowSetThumbnailClip", (id, rectangle) => { getWindowById(id).setThumbnailClip(rectangle); }); - socket.on('browserWindowSetThumbnailToolTip', (id, toolTip) => { + socket.on("browserWindowSetThumbnailToolTip", (id, toolTip) => { getWindowById(id).setThumbnailToolTip(toolTip); }); - socket.on('browserWindowSetAppDetails', (id, options) => { + socket.on("browserWindowSetAppDetails", (id, options) => { getWindowById(id).setAppDetails(options); }); - socket.on('browserWindowShowDefinitionForSelection', (id) => { + socket.on("browserWindowShowDefinitionForSelection", (id) => { getWindowById(id).showDefinitionForSelection(); }); - socket.on('browserWindowSetAutoHideMenuBar', (id, hide) => { + socket.on("browserWindowSetAutoHideMenuBar", (id, hide) => { getWindowById(id).setAutoHideMenuBar(hide); }); - socket.on('browserWindowIsMenuBarAutoHide', (id) => { + socket.on("browserWindowIsMenuBarAutoHide", (id) => { const isMenuBarAutoHide = getWindowById(id).isMenuBarAutoHide(); - electronSocket.emit('browserWindow-isMenuBarAutoHide-completed', isMenuBarAutoHide); + electronSocket.emit("browserWindow-isMenuBarAutoHide-completed", isMenuBarAutoHide); }); - socket.on('browserWindowSetMenuBarVisibility', (id, visible) => { + socket.on("browserWindowSetMenuBarVisibility", (id, visible) => { getWindowById(id).setMenuBarVisibility(visible); }); - socket.on('browserWindowIsMenuBarVisible', (id) => { + socket.on("browserWindowIsMenuBarVisible", (id) => { const isMenuBarVisible = getWindowById(id).isMenuBarVisible(); - electronSocket.emit('browserWindow-isMenuBarVisible-completed', isMenuBarVisible); + electronSocket.emit("browserWindow-isMenuBarVisible-completed", isMenuBarVisible); }); - socket.on('browserWindowSetVisibleOnAllWorkspaces', (id, visible) => { + socket.on("browserWindowSetVisibleOnAllWorkspaces", (id, visible) => { getWindowById(id).setVisibleOnAllWorkspaces(visible); }); - socket.on('browserWindowIsVisibleOnAllWorkspaces', (id) => { + socket.on("browserWindowIsVisibleOnAllWorkspaces", (id) => { const isVisibleOnAllWorkspaces = getWindowById(id).isVisibleOnAllWorkspaces(); - electronSocket.emit('browserWindow-isVisibleOnAllWorkspaces-completed', isVisibleOnAllWorkspaces); + electronSocket.emit("browserWindow-isVisibleOnAllWorkspaces-completed", isVisibleOnAllWorkspaces); }); - socket.on('browserWindowSetIgnoreMouseEvents', (id, ignore) => { + socket.on("browserWindowSetIgnoreMouseEvents", (id, ignore) => { getWindowById(id).setIgnoreMouseEvents(ignore); }); - socket.on('browserWindowSetContentProtection', (id, enable) => { + socket.on("browserWindowSetContentProtection", (id, enable) => { getWindowById(id).setContentProtection(enable); }); - socket.on('browserWindowSetFocusable', (id, focusable) => { + socket.on("browserWindowSetFocusable", (id, focusable) => { getWindowById(id).setFocusable(focusable); }); - socket.on('browserWindowSetParentWindow', (id, parent) => { + socket.on("browserWindowSetParentWindow", (id, parent) => { const child = getWindowById(id); if (!parent) { // Clear parent: make this window top-level @@ -598,25 +621,25 @@ module.exports = (socket, app) => { const browserWindow = electron_1.BrowserWindow.fromId(parent.id); child.setParentWindow(browserWindow); }); - socket.on('browserWindowGetParentWindow', (id) => { + socket.on("browserWindowGetParentWindow", (id) => { const browserWindow = getWindowById(id).getParentWindow(); - electronSocket.emit('browserWindow-getParentWindow-completed', browserWindow.id); + electronSocket.emit("browserWindow-getParentWindow-completed", browserWindow.id); }); - socket.on('browserWindowGetChildWindows', (id) => { + socket.on("browserWindowGetChildWindows", (id) => { const browserWindows = getWindowById(id).getChildWindows(); const ids = []; - browserWindows.forEach(x => { + browserWindows.forEach((x) => { ids.push(x.id); }); - electronSocket.emit('browserWindow-getChildWindows-completed', ids); + electronSocket.emit("browserWindow-getChildWindows-completed", ids); }); - socket.on('browserWindowSetAutoHideCursor', (id, autoHide) => { + socket.on("browserWindowSetAutoHideCursor", (id, autoHide) => { getWindowById(id).setAutoHideCursor(autoHide); }); - socket.on('browserWindowSetVibrancy', (id, type) => { + socket.on("browserWindowSetVibrancy", (id, type) => { getWindowById(id).setVibrancy(type); }); - socket.on('browserWindow-setBrowserView', (id, browserViewId) => { + socket.on("browserWindow-setBrowserView", (id, browserViewId) => { getWindowById(id).setBrowserView((0, browserView_1.browserViewMediateService)(browserViewId)); }); function getWindowById(id) { diff --git a/src/ElectronNET.Host/api/browserWindows.js.map b/src/ElectronNET.Host/api/browserWindows.js.map index becb38d5..6fc574ef 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":"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"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/browserWindows.ts b/src/ElectronNET.Host/api/browserWindows.ts index 6e9516b5..b54f5a04 100644 --- a/src/ElectronNET.Host/api/browserWindows.ts +++ b/src/ElectronNET.Host/api/browserWindows.ts @@ -1,798 +1,877 @@ -import { Socket } from 'net'; -import { BrowserWindow, Menu, nativeImage } from 'electron'; -import { browserViewMediateService } from './browserView'; -const path = require('path'); -const windows: Electron.BrowserWindow[] = (global['browserWindows'] = global['browserWindows'] || []) as Electron.BrowserWindow[]; +import { Socket } from "net"; +import { BrowserWindow, Menu, nativeImage } from "electron"; +import { browserViewMediateService } from "./browserView"; +const path = require("path"); +const windows: Electron.BrowserWindow[] = (global["browserWindows"] = + global["browserWindows"] || []) as Electron.BrowserWindow[]; let readyToShowWindowsIds: number[] = []; let window, lastOptions, electronSocket; let mainWindowURL; -const proxyToCredentialsMap: { [proxy: string]: string } = (global['proxyToCredentialsMap'] = global['proxyToCredentialsMap'] || []) as { [proxy: string]: string }; +const proxyToCredentialsMap: { [proxy: string]: string } = (global[ + "proxyToCredentialsMap" +] = global["proxyToCredentialsMap"] || []) as { [proxy: string]: string }; export = (socket: Socket, app: Electron.App) => { - electronSocket = socket; - - app.on('login', (event, webContents, request, authInfo, callback) => { - if (authInfo.isProxy) { - let proxy = `${authInfo.host}:${authInfo.port}` - if (proxy in proxyToCredentialsMap && proxyToCredentialsMap[proxy].split(':').length === 2) { - event.preventDefault() - let user = proxyToCredentialsMap[proxy].split(':')[0] - let pass = proxyToCredentialsMap[proxy].split(':')[1] - callback(user, pass) - } - } - }) - - socket.on('register-browserWindow-ready-to-show', (id) => { - if (readyToShowWindowsIds.includes(id)) { - readyToShowWindowsIds = readyToShowWindowsIds.filter(value => value !== id); - electronSocket.emit('browserWindow-ready-to-show' + id); - } + electronSocket = socket; + + app.on("login", (event, webContents, request, authInfo, callback) => { + if (authInfo.isProxy) { + let proxy = `${authInfo.host}:${authInfo.port}`; + if ( + proxy in proxyToCredentialsMap && + proxyToCredentialsMap[proxy].split(":").length === 2 + ) { + event.preventDefault(); + let user = proxyToCredentialsMap[proxy].split(":")[0]; + let pass = proxyToCredentialsMap[proxy].split(":")[1]; + callback(user, pass); + } + } + }); + + socket.on("register-browserWindow-ready-to-show", (id) => { + if (readyToShowWindowsIds.includes(id)) { + readyToShowWindowsIds = readyToShowWindowsIds.filter( + (value) => value !== id + ); + electronSocket.emit("browserWindow-ready-to-show" + id); + } - getWindowById(id).on('ready-to-show', () => { - readyToShowWindowsIds.push(id); - electronSocket.emit('browserWindow-ready-to-show' + id); - }); + getWindowById(id).on("ready-to-show", () => { + readyToShowWindowsIds.push(id); + electronSocket.emit("browserWindow-ready-to-show" + id); }); + }); - socket.on('register-browserWindow-page-title-updated', (id) => { - getWindowById(id).on('page-title-updated', (event, title) => { - electronSocket.emit('browserWindow-page-title-updated' + id, title); - }); + socket.on("register-browserWindow-page-title-updated", (id) => { + getWindowById(id).on("page-title-updated", (event, title) => { + electronSocket.emit("browserWindow-page-title-updated" + id, title); }); + }); - socket.on('register-browserWindow-close', (id) => { - getWindowById(id).on('close', () => { - electronSocket.emit('browserWindow-close' + id); - }); + socket.on("register-browserWindow-close", (id) => { + getWindowById(id).on("close", () => { + electronSocket.emit("browserWindow-close" + id); }); + }); - socket.on('register-browserWindow-closed', (id) => { - getWindowById(id).on('closed', () => { - electronSocket.emit('browserWindow-closed' + id); - }); + socket.on("register-browserWindow-closed", (id) => { + getWindowById(id).on("closed", () => { + electronSocket.emit("browserWindow-closed" + id); }); + }); - socket.on('register-browserWindow-session-end', (id) => { - getWindowById(id).on('session-end', () => { - electronSocket.emit('browserWindow-session-end' + id); - }); + socket.on("register-browserWindow-session-end", (id) => { + getWindowById(id).on("session-end", () => { + electronSocket.emit("browserWindow-session-end" + id); }); + }); - socket.on('register-browserWindow-unresponsive', (id) => { - getWindowById(id).on('unresponsive', () => { - electronSocket.emit('browserWindow-unresponsive' + id); - }); + socket.on("register-browserWindow-unresponsive", (id) => { + getWindowById(id).on("unresponsive", () => { + electronSocket.emit("browserWindow-unresponsive" + id); }); + }); - socket.on('register-browserWindow-responsive', (id) => { - getWindowById(id).on('responsive', () => { - electronSocket.emit('browserWindow-responsive' + id); - }); + socket.on("register-browserWindow-responsive", (id) => { + getWindowById(id).on("responsive", () => { + electronSocket.emit("browserWindow-responsive" + id); }); + }); - socket.on('register-browserWindow-blur', (id) => { - getWindowById(id).on('blur', () => { - electronSocket.emit('browserWindow-blur' + id); - }); + socket.on("register-browserWindow-blur", (id) => { + getWindowById(id).on("blur", () => { + electronSocket.emit("browserWindow-blur" + id); }); + }); - socket.on('register-browserWindow-focus', (id) => { - getWindowById(id).on('focus', () => { - electronSocket.emit('browserWindow-focus' + id); - }); + socket.on("register-browserWindow-focus", (id) => { + getWindowById(id).on("focus", () => { + electronSocket.emit("browserWindow-focus" + id); }); + }); - socket.on('register-browserWindow-show', (id) => { - getWindowById(id).on('show', () => { - electronSocket.emit('browserWindow-show' + id); - }); + socket.on("register-browserWindow-show", (id) => { + getWindowById(id).on("show", () => { + electronSocket.emit("browserWindow-show" + id); }); + }); - socket.on('register-browserWindow-hide', (id) => { - getWindowById(id).on('hide', () => { - electronSocket.emit('browserWindow-hide' + id); - }); + socket.on("register-browserWindow-hide", (id) => { + getWindowById(id).on("hide", () => { + electronSocket.emit("browserWindow-hide" + id); }); + }); - socket.on('register-browserWindow-maximize', (id) => { - getWindowById(id).on('maximize', () => { - electronSocket.emit('browserWindow-maximize' + id); - }); + socket.on("register-browserWindow-maximize", (id) => { + getWindowById(id).on("maximize", () => { + electronSocket.emit("browserWindow-maximize" + id); }); + }); - socket.on('register-browserWindow-unmaximize', (id) => { - getWindowById(id).on('unmaximize', () => { - electronSocket.emit('browserWindow-unmaximize' + id); - }); + socket.on("register-browserWindow-unmaximize", (id) => { + getWindowById(id).on("unmaximize", () => { + electronSocket.emit("browserWindow-unmaximize" + id); }); + }); - socket.on('register-browserWindow-minimize', (id) => { - getWindowById(id).on('minimize', () => { - electronSocket.emit('browserWindow-minimize' + id); - }); + socket.on("register-browserWindow-minimize", (id) => { + getWindowById(id).on("minimize", () => { + electronSocket.emit("browserWindow-minimize" + id); }); + }); - socket.on('register-browserWindow-restore', (id) => { - getWindowById(id).on('restore', () => { - electronSocket.emit('browserWindow-restore' + id); - }); + socket.on("register-browserWindow-restore", (id) => { + getWindowById(id).on("restore", () => { + electronSocket.emit("browserWindow-restore" + id); }); + }); - socket.on('register-browserWindow-resize', (id) => { - getWindowById(id).on('resize', () => { - electronSocket.emit('browserWindow-resize' + id); - }); + socket.on("register-browserWindow-resize", (id) => { + getWindowById(id).on("resize", () => { + electronSocket.emit("browserWindow-resize" + id); }); + }); - socket.on('register-browserWindow-move', (id) => { - getWindowById(id).on('move', () => { - electronSocket.emit('browserWindow-move' + id); - }); + socket.on("register-browserWindow-move", (id) => { + getWindowById(id).on("move", () => { + electronSocket.emit("browserWindow-move" + id); }); + }); - socket.on('register-browserWindow-moved', (id) => { - getWindowById(id).on('moved', () => { - electronSocket.emit('browserWindow-moved' + id); - }); + socket.on("register-browserWindow-moved", (id) => { + getWindowById(id).on("moved", () => { + electronSocket.emit("browserWindow-moved" + id); }); + }); - socket.on('register-browserWindow-enter-full-screen', (id) => { - getWindowById(id).on('enter-full-screen', () => { - electronSocket.emit('browserWindow-enter-full-screen' + id); - }); + socket.on("register-browserWindow-enter-full-screen", (id) => { + getWindowById(id).on("enter-full-screen", () => { + electronSocket.emit("browserWindow-enter-full-screen" + id); }); + }); - socket.on('register-browserWindow-leave-full-screen', (id) => { - getWindowById(id).on('leave-full-screen', () => { - electronSocket.emit('browserWindow-leave-full-screen' + id); - }); + socket.on("register-browserWindow-leave-full-screen", (id) => { + getWindowById(id).on("leave-full-screen", () => { + electronSocket.emit("browserWindow-leave-full-screen" + id); }); + }); - socket.on('register-browserWindow-enter-html-full-screen', (id) => { - getWindowById(id).on('enter-html-full-screen', () => { - electronSocket.emit('browserWindow-enter-html-full-screen' + id); - }); + socket.on("register-browserWindow-enter-html-full-screen", (id) => { + getWindowById(id).on("enter-html-full-screen", () => { + electronSocket.emit("browserWindow-enter-html-full-screen" + id); }); + }); - socket.on('register-browserWindow-leave-html-full-screen', (id) => { - getWindowById(id).on('leave-html-full-screen', () => { - electronSocket.emit('browserWindow-leave-html-full-screen' + id); - }); + socket.on("register-browserWindow-leave-html-full-screen", (id) => { + getWindowById(id).on("leave-html-full-screen", () => { + electronSocket.emit("browserWindow-leave-html-full-screen" + id); }); + }); - socket.on('register-browserWindow-app-command', (id) => { - getWindowById(id).on('app-command', (event, command) => { - electronSocket.emit('browserWindow-app-command' + id, command); - }); + socket.on("register-browserWindow-app-command", (id) => { + getWindowById(id).on("app-command", (event, command) => { + electronSocket.emit("browserWindow-app-command" + id, command); }); + }); - socket.on('register-browserWindow-swipe', (id) => { - getWindowById(id).on('swipe', (event, direction) => { - electronSocket.emit('browserWindow-swipe' + id, direction); - }); + socket.on("register-browserWindow-swipe", (id) => { + getWindowById(id).on("swipe", (event, direction) => { + electronSocket.emit("browserWindow-swipe" + id, direction); }); + }); - socket.on('register-browserWindow-sheet-begin', (id) => { - getWindowById(id).on('sheet-begin', () => { - electronSocket.emit('browserWindow-sheet-begin' + id); - }); + socket.on("register-browserWindow-sheet-begin", (id) => { + getWindowById(id).on("sheet-begin", () => { + electronSocket.emit("browserWindow-sheet-begin" + id); }); + }); - socket.on('register-browserWindow-sheet-end', (id) => { - getWindowById(id).on('sheet-end', () => { - electronSocket.emit('browserWindow-sheet-end' + id); - }); + socket.on("register-browserWindow-sheet-end", (id) => { + getWindowById(id).on("sheet-end", () => { + electronSocket.emit("browserWindow-sheet-end" + id); }); + }); - socket.on('register-browserWindow-new-window-for-tab', (id) => { - getWindowById(id).on('new-window-for-tab', () => { - electronSocket.emit('browserWindow-new-window-for-tab' + id); - }); + socket.on("register-browserWindow-new-window-for-tab", (id) => { + getWindowById(id).on("new-window-for-tab", () => { + electronSocket.emit("browserWindow-new-window-for-tab" + id); }); + }); - socket.on('createBrowserWindow', (options, loadUrl) => { - if (options.webPreferences && !('nodeIntegration' in options.webPreferences)) { - options = { ...options, webPreferences: { ...options.webPreferences, nodeIntegration: true, contextIsolation: false } }; - } else if (!options.webPreferences) { - options = { ...options, webPreferences: { nodeIntegration: true, contextIsolation: false } }; - } - - // we dont want to recreate the window when watch is ready. - if (app.commandLine.hasSwitch('watch') && app['mainWindowURL'] === loadUrl) { - window = app['mainWindow']; - if (window) { - window.reload(); - windows.push(window); - electronSocket.emit('BrowserWindowCreated', window.id); - return; - } - } else { - window = new BrowserWindow(options); - } - - if (options.proxy) { - window.webContents.session.setProxy({proxyRules: options.proxy}); - } - - if (options.proxy && options.proxyCredentials) { - proxyToCredentialsMap[options.proxy] = options.proxyCredentials; - } - - window.on('ready-to-show', () => { - if (readyToShowWindowsIds.includes(window.id)) { - readyToShowWindowsIds = readyToShowWindowsIds.filter(value => value !== window.id); - } else { - readyToShowWindowsIds.push(window.id); - } - }); - - lastOptions = options; - - window.on('closed', (sender) => { - for (let index = 0; index < windows.length; index++) { - const windowItem = windows[index]; - try { - windowItem.id; - } catch (error) { - if (error.message === 'Object has been destroyed') { - windows.splice(index, 1); - - const ids = []; - windows.forEach(x => ids.push(x.id)); - electronSocket.emit('BrowserWindowClosed', ids); - } - } - } - }); - - app.on('activate', () => { - // On macOS it's common to re-create a window in the app when the - // dock icon is clicked and there are no other windows open. - if (window === null && lastOptions) { - window = new BrowserWindow(lastOptions); - } - }); - - if (loadUrl) { - window.loadURL(loadUrl); - } + socket.on("createBrowserWindow", (options, loadUrl) => { + if ( + options.webPreferences && + !("nodeIntegration" in options.webPreferences) + ) { + options = { + ...options, + webPreferences: { + ...options.webPreferences, + nodeIntegration: true, + contextIsolation: false, + }, + }; + } else if (!options.webPreferences) { + options = { + ...options, + webPreferences: { nodeIntegration: true, contextIsolation: false }, + }; + } - if (app.commandLine.hasSwitch('clear-cache') && - app.commandLine.getSwitchValue('clear-cache')) { - window.webContents.session.clearCache(); - console.log('auto clear-cache active for new window.'); - } + if (options.isRunningBlazor) { + options.webPreferences["preload"] = path.join( + __dirname, + "..", + "scripts", + "blazor-preload.js" + ); + } - // set main window url - if (app['mainWindowURL'] == undefined || app['mainWindowURL'] == "") { - app['mainWindowURL'] = loadUrl; - app['mainWindow'] = window; - } + delete options.isRunningBlazor; + // we dont want to recreate the window when watch is ready. + if ( + app.commandLine.hasSwitch("watch") && + app["mainWindowURL"] === loadUrl + ) { + window = app["mainWindow"]; + if (window) { + window.reload(); windows.push(window); - electronSocket.emit('BrowserWindowCreated', window.id); - }); - - socket.on('browserWindowDestroy', (id) => { - getWindowById(id).destroy(); - }); + electronSocket.emit("BrowserWindowCreated", window.id); + return; + } + } else { + window = new BrowserWindow(options); + } - socket.on('browserWindowClose', (id) => { - getWindowById(id).close(); - }); + if (options.proxy) { + window.webContents.session.setProxy({ proxyRules: options.proxy }); + } - socket.on('browserWindowFocus', (id) => { - getWindowById(id).focus(); - }); + if (options.proxy && options.proxyCredentials) { + proxyToCredentialsMap[options.proxy] = options.proxyCredentials; + } - socket.on('browserWindowBlur', (id) => { - getWindowById(id).blur(); + window.on("ready-to-show", () => { + if (readyToShowWindowsIds.includes(window.id)) { + readyToShowWindowsIds = readyToShowWindowsIds.filter( + (value) => value !== window.id + ); + } else { + readyToShowWindowsIds.push(window.id); + } }); - socket.on('browserWindowIsFocused', (id) => { - const isFocused = getWindowById(id).isFocused(); + lastOptions = options; - electronSocket.emit('browserWindow-isFocused-completed', isFocused); + window.on("closed", (sender) => { + for (let index = 0; index < windows.length; index++) { + const windowItem = windows[index]; + try { + windowItem.id; + } catch (error) { + if (error.message === "Object has been destroyed") { + windows.splice(index, 1); + + const ids = []; + windows.forEach((x) => ids.push(x.id)); + electronSocket.emit("BrowserWindowClosed", ids); + } + } + } }); - socket.on('browserWindowIsDestroyed', (id) => { - const isDestroyed = getWindowById(id).isDestroyed(); - - electronSocket.emit('browserWindow-isDestroyed-completed', isDestroyed); + app.on("activate", () => { + // On macOS it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + if (window === null && lastOptions) { + window = new BrowserWindow(lastOptions); + } }); - socket.on('browserWindowShow', (id) => { - getWindowById(id).show(); - }); + if (loadUrl) { + window.loadURL(loadUrl); + } - socket.on('browserWindowShowInactive', (id) => { - getWindowById(id).showInactive(); - }); + if ( + app.commandLine.hasSwitch("clear-cache") && + app.commandLine.getSwitchValue("clear-cache") + ) { + window.webContents.session.clearCache(); + console.log("auto clear-cache active for new window."); + } - socket.on('browserWindowHide', (id) => { - getWindowById(id).hide(); - }); + // set main window url + if (app["mainWindowURL"] == undefined || app["mainWindowURL"] == "") { + app["mainWindowURL"] = loadUrl; + app["mainWindow"] = window; + } - socket.on('browserWindowIsVisible', (id) => { - const isVisible = getWindowById(id).isVisible(); + windows.push(window); + electronSocket.emit("BrowserWindowCreated", window.id); + }); - electronSocket.emit('browserWindow-isVisible-completed', isVisible); - }); + socket.on("browserWindowDestroy", (id) => { + getWindowById(id).destroy(); + }); - socket.on('browserWindowIsModal', (id) => { - const isModal = getWindowById(id).isModal(); + socket.on("browserWindowClose", (id) => { + getWindowById(id).close(); + }); - electronSocket.emit('browserWindow-isModal-completed', isModal); - }); + socket.on("browserWindowFocus", (id) => { + getWindowById(id).focus(); + }); - socket.on('browserWindowMaximize', (id) => { - getWindowById(id).maximize(); - }); + socket.on("browserWindowBlur", (id) => { + getWindowById(id).blur(); + }); - socket.on('browserWindowUnmaximize', (id) => { - getWindowById(id).unmaximize(); - }); + socket.on("browserWindowIsFocused", (id) => { + const isFocused = getWindowById(id).isFocused(); - socket.on('browserWindowIsMaximized', (id) => { - const isMaximized = getWindowById(id).isMaximized(); + electronSocket.emit("browserWindow-isFocused-completed", isFocused); + }); - electronSocket.emit('browserWindow-isMaximized-completed', isMaximized); - }); + socket.on("browserWindowIsDestroyed", (id) => { + const isDestroyed = getWindowById(id).isDestroyed(); - socket.on('browserWindowMinimize', (id) => { - getWindowById(id).minimize(); - }); + electronSocket.emit("browserWindow-isDestroyed-completed", isDestroyed); + }); - socket.on('browserWindowRestore', (id) => { - getWindowById(id).restore(); - }); + socket.on("browserWindowShow", (id) => { + getWindowById(id).show(); + }); - socket.on('browserWindowIsMinimized', (id) => { - const isMinimized = getWindowById(id).isMinimized(); + socket.on("browserWindowShowInactive", (id) => { + getWindowById(id).showInactive(); + }); - electronSocket.emit('browserWindow-isMinimized-completed', isMinimized); - }); + socket.on("browserWindowHide", (id) => { + getWindowById(id).hide(); + }); - socket.on('browserWindowSetFullScreen', (id, fullscreen) => { - getWindowById(id).setFullScreen(fullscreen); - }); + socket.on("browserWindowIsVisible", (id) => { + const isVisible = getWindowById(id).isVisible(); - socket.on('browserWindowIsFullScreen', (id) => { - const isFullScreen = getWindowById(id).isFullScreen(); + electronSocket.emit("browserWindow-isVisible-completed", isVisible); + }); - electronSocket.emit('browserWindow-isFullScreen-completed', isFullScreen); - }); + socket.on("browserWindowIsModal", (id) => { + const isModal = getWindowById(id).isModal(); - socket.on('browserWindowSetAspectRatio', (id, aspectRatio, extraSize) => { - getWindowById(id).setAspectRatio(aspectRatio, extraSize); - }); + electronSocket.emit("browserWindow-isModal-completed", isModal); + }); - socket.on('browserWindowPreviewFile', (id, path, displayname) => { - getWindowById(id).previewFile(path, displayname); - }); + socket.on("browserWindowMaximize", (id) => { + getWindowById(id).maximize(); + }); - socket.on('browserWindowCloseFilePreview', (id) => { - getWindowById(id).closeFilePreview(); - }); + socket.on("browserWindowUnmaximize", (id) => { + getWindowById(id).unmaximize(); + }); - socket.on('browserWindowSetBounds', (id, bounds, animate) => { - getWindowById(id).setBounds(bounds, animate); - }); + socket.on("browserWindowIsMaximized", (id) => { + const isMaximized = getWindowById(id).isMaximized(); - socket.on('browserWindowGetBounds', (id) => { - const rectangle = getWindowById(id).getBounds(); + electronSocket.emit("browserWindow-isMaximized-completed", isMaximized); + }); - electronSocket.emit('browserWindow-getBounds-completed', rectangle); - }); + socket.on("browserWindowMinimize", (id) => { + getWindowById(id).minimize(); + }); - socket.on('browserWindowSetContentBounds', (id, bounds, animate) => { - getWindowById(id).setContentBounds(bounds, animate); - }); + socket.on("browserWindowRestore", (id) => { + getWindowById(id).restore(); + }); - socket.on('browserWindowGetContentBounds', (id) => { - const rectangle = getWindowById(id).getContentBounds(); + socket.on("browserWindowIsMinimized", (id) => { + const isMinimized = getWindowById(id).isMinimized(); - electronSocket.emit('browserWindow-getContentBounds-completed', rectangle); - }); + electronSocket.emit("browserWindow-isMinimized-completed", isMinimized); + }); - socket.on('browserWindowSetSize', (id, width, height, animate) => { - getWindowById(id).setSize(width, height, animate); - }); + socket.on("browserWindowSetFullScreen", (id, fullscreen) => { + getWindowById(id).setFullScreen(fullscreen); + }); - socket.on('browserWindowGetSize', (id) => { - const size = getWindowById(id).getSize(); + socket.on("browserWindowIsFullScreen", (id) => { + const isFullScreen = getWindowById(id).isFullScreen(); - electronSocket.emit('browserWindow-getSize-completed', size); - }); + electronSocket.emit("browserWindow-isFullScreen-completed", isFullScreen); + }); - socket.on('browserWindowSetContentSize', (id, width, height, animate) => { - getWindowById(id).setContentSize(width, height, animate); - }); + socket.on("browserWindowSetAspectRatio", (id, aspectRatio, extraSize) => { + getWindowById(id).setAspectRatio(aspectRatio, extraSize); + }); - socket.on('browserWindowGetContentSize', (id) => { - const size = getWindowById(id).getContentSize(); + socket.on("browserWindowPreviewFile", (id, path, displayname) => { + getWindowById(id).previewFile(path, displayname); + }); - electronSocket.emit('browserWindow-getContentSize-completed', size); - }); + socket.on("browserWindowCloseFilePreview", (id) => { + getWindowById(id).closeFilePreview(); + }); - socket.on('browserWindowSetMinimumSize', (id, width, height) => { - getWindowById(id).setMinimumSize(width, height); - }); + socket.on("browserWindowSetBounds", (id, bounds, animate) => { + getWindowById(id).setBounds(bounds, animate); + }); - socket.on('browserWindowGetMinimumSize', (id) => { - const size = getWindowById(id).getMinimumSize(); + socket.on("browserWindowGetBounds", (id) => { + const rectangle = getWindowById(id).getBounds(); - electronSocket.emit('browserWindow-getMinimumSize-completed', size); - }); + electronSocket.emit("browserWindow-getBounds-completed", rectangle); + }); - socket.on('browserWindowSetMaximumSize', (id, width, height) => { - getWindowById(id).setMaximumSize(width, height); - }); + socket.on("browserWindowSetContentBounds", (id, bounds, animate) => { + getWindowById(id).setContentBounds(bounds, animate); + }); - socket.on('browserWindowGetMaximumSize', (id) => { - const size = getWindowById(id).getMaximumSize(); + socket.on("browserWindowGetContentBounds", (id) => { + const rectangle = getWindowById(id).getContentBounds(); - electronSocket.emit('browserWindow-getMaximumSize-completed', size); - }); + electronSocket.emit("browserWindow-getContentBounds-completed", rectangle); + }); - socket.on('browserWindowSetResizable', (id, resizable) => { - getWindowById(id).setResizable(resizable); - }); + socket.on("browserWindowSetSize", (id, width, height, animate) => { + getWindowById(id).setSize(width, height, animate); + }); - socket.on('browserWindowIsResizable', (id) => { - const resizable = getWindowById(id).isResizable(); + socket.on("browserWindowGetSize", (id) => { + const size = getWindowById(id).getSize(); - electronSocket.emit('browserWindow-isResizable-completed', resizable); - }); + electronSocket.emit("browserWindow-getSize-completed", size); + }); - socket.on('browserWindowSetMovable', (id, movable) => { - getWindowById(id).setMovable(movable); - }); + socket.on("browserWindowSetContentSize", (id, width, height, animate) => { + getWindowById(id).setContentSize(width, height, animate); + }); - socket.on('browserWindowIsMovable', (id) => { - const movable = getWindowById(id).isMovable(); + socket.on("browserWindowGetContentSize", (id) => { + const size = getWindowById(id).getContentSize(); - electronSocket.emit('browserWindow-isMovable-completed', movable); - }); + electronSocket.emit("browserWindow-getContentSize-completed", size); + }); - socket.on('browserWindowSetMinimizable', (id, minimizable) => { - getWindowById(id).setMinimizable(minimizable); - }); + socket.on("browserWindowSetMinimumSize", (id, width, height) => { + getWindowById(id).setMinimumSize(width, height); + }); - socket.on('browserWindowIsMinimizable', (id) => { - const minimizable = getWindowById(id).isMinimizable(); + socket.on("browserWindowGetMinimumSize", (id) => { + const size = getWindowById(id).getMinimumSize(); - electronSocket.emit('browserWindow-isMinimizable-completed', minimizable); - }); + electronSocket.emit("browserWindow-getMinimumSize-completed", size); + }); - socket.on('browserWindowSetMaximizable', (id, maximizable) => { - getWindowById(id).setMaximizable(maximizable); - }); + socket.on("browserWindowSetMaximumSize", (id, width, height) => { + getWindowById(id).setMaximumSize(width, height); + }); - socket.on('browserWindowIsMaximizable', (id) => { - const maximizable = getWindowById(id).isMaximizable(); + socket.on("browserWindowGetMaximumSize", (id) => { + const size = getWindowById(id).getMaximumSize(); - electronSocket.emit('browserWindow-isMaximizable-completed', maximizable); - }); + electronSocket.emit("browserWindow-getMaximumSize-completed", size); + }); - socket.on('browserWindowSetFullScreenable', (id, fullscreenable) => { - getWindowById(id).setFullScreenable(fullscreenable); - }); + socket.on("browserWindowSetResizable", (id, resizable) => { + getWindowById(id).setResizable(resizable); + }); - socket.on('browserWindowIsFullScreenable', (id) => { - const fullscreenable = getWindowById(id).isFullScreenable(); + socket.on("browserWindowIsResizable", (id) => { + const resizable = getWindowById(id).isResizable(); - electronSocket.emit('browserWindow-isFullScreenable-completed', fullscreenable); - }); + electronSocket.emit("browserWindow-isResizable-completed", resizable); + }); - socket.on('browserWindowSetClosable', (id, closable) => { - getWindowById(id).setClosable(closable); - }); + socket.on("browserWindowSetMovable", (id, movable) => { + getWindowById(id).setMovable(movable); + }); - socket.on('browserWindowIsClosable', (id) => { - const closable = getWindowById(id).isClosable(); + socket.on("browserWindowIsMovable", (id) => { + const movable = getWindowById(id).isMovable(); - electronSocket.emit('browserWindow-isClosable-completed', closable); - }); + electronSocket.emit("browserWindow-isMovable-completed", movable); + }); - socket.on('browserWindowSetAlwaysOnTop', (id, flag, level, relativeLevel) => { - getWindowById(id).setAlwaysOnTop(flag, level, relativeLevel); - }); + socket.on("browserWindowSetMinimizable", (id, minimizable) => { + getWindowById(id).setMinimizable(minimizable); + }); - socket.on('browserWindowIsAlwaysOnTop', (id) => { - const isAlwaysOnTop = getWindowById(id).isAlwaysOnTop(); + socket.on("browserWindowIsMinimizable", (id) => { + const minimizable = getWindowById(id).isMinimizable(); - electronSocket.emit('browserWindow-isAlwaysOnTop-completed', isAlwaysOnTop); - }); + electronSocket.emit("browserWindow-isMinimizable-completed", minimizable); + }); - socket.on('browserWindowCenter', (id) => { - getWindowById(id).center(); - }); + socket.on("browserWindowSetMaximizable", (id, maximizable) => { + getWindowById(id).setMaximizable(maximizable); + }); - socket.on('browserWindowSetPosition', (id, x, y, animate) => { - getWindowById(id).setPosition(x, y, animate); - }); + socket.on("browserWindowIsMaximizable", (id) => { + const maximizable = getWindowById(id).isMaximizable(); - socket.on('browserWindowGetPosition', (id) => { - const position = getWindowById(id).getPosition(); + electronSocket.emit("browserWindow-isMaximizable-completed", maximizable); + }); - electronSocket.emit('browserWindow-getPosition-completed', position); - }); + socket.on("browserWindowSetFullScreenable", (id, fullscreenable) => { + getWindowById(id).setFullScreenable(fullscreenable); + }); - socket.on('browserWindowSetTitle', (id, title) => { - getWindowById(id).setTitle(title); - }); + socket.on("browserWindowIsFullScreenable", (id) => { + const fullscreenable = getWindowById(id).isFullScreenable(); - socket.on('browserWindowGetTitle', (id) => { - const title = getWindowById(id).getTitle(); + electronSocket.emit( + "browserWindow-isFullScreenable-completed", + fullscreenable + ); + }); - electronSocket.emit('browserWindow-getTitle-completed', title); - }); + socket.on("browserWindowSetClosable", (id, closable) => { + getWindowById(id).setClosable(closable); + }); - socket.on('browserWindowSetTitle', (id, title) => { - getWindowById(id).setTitle(title); - }); - - socket.on('browserWindowSetSheetOffset', (id, offsetY, offsetX) => { - if (offsetX) { - getWindowById(id).setSheetOffset(offsetY, offsetX); - } else { - getWindowById(id).setSheetOffset(offsetY); - } - }); - - socket.on('browserWindowFlashFrame', (id, flag) => { - getWindowById(id).flashFrame(flag); - }); - - socket.on('browserWindowSetSkipTaskbar', (id, skip) => { - getWindowById(id).setSkipTaskbar(skip); - }); - - socket.on('browserWindowSetKiosk', (id, flag) => { - getWindowById(id).setKiosk(flag); - }); - - socket.on('browserWindowIsKiosk', (id) => { - const isKiosk = getWindowById(id).isKiosk(); - - electronSocket.emit('browserWindow-isKiosk-completed', isKiosk); - }); - - socket.on('browserWindowGetNativeWindowHandle', (id) => { - const nativeWindowHandle = getWindowById(id).getNativeWindowHandle().readInt32LE(0).toString(16); - electronSocket.emit('browserWindow-getNativeWindowHandle-completed', nativeWindowHandle); - }); - - socket.on('browserWindowSetRepresentedFilename', (id, filename) => { - const win = getWindowById(id); - try { - if (win && typeof win.setRepresentedFilename === 'function') { - win.setRepresentedFilename(filename); - } - } catch (e) { - console.warn('setRepresentedFilename failed (likely unsupported platform):', e); - } - }); + socket.on("browserWindowIsClosable", (id) => { + const closable = getWindowById(id).isClosable(); - socket.on('browserWindowGetRepresentedFilename', (id) => { - const win = getWindowById(id); - let pathname = ''; - try { - if (win && typeof win.getRepresentedFilename === 'function') { - pathname = win.getRepresentedFilename() || ''; - } - } catch (e) { - console.warn('getRepresentedFilename failed (likely unsupported platform):', e); - } - electronSocket.emit('browserWindow-getRepresentedFilename-completed', pathname); - }); - - socket.on('browserWindowSetDocumentEdited', (id, edited) => { - getWindowById(id).setDocumentEdited(edited); - }); + electronSocket.emit("browserWindow-isClosable-completed", closable); + }); - socket.on('browserWindowIsDocumentEdited', (id) => { - const edited = getWindowById(id).isDocumentEdited(); + socket.on("browserWindowSetAlwaysOnTop", (id, flag, level, relativeLevel) => { + getWindowById(id).setAlwaysOnTop(flag, level, relativeLevel); + }); - electronSocket.emit('browserWindow-isDocumentEdited-completed', edited); - }); + socket.on("browserWindowIsAlwaysOnTop", (id) => { + const isAlwaysOnTop = getWindowById(id).isAlwaysOnTop(); - socket.on('browserWindowFocusOnWebView', (id) => { - getWindowById(id).focusOnWebView(); - }); + electronSocket.emit("browserWindow-isAlwaysOnTop-completed", isAlwaysOnTop); + }); - socket.on('browserWindowBlurWebView', (id) => { - getWindowById(id).blurWebView(); - }); - - socket.on('browserWindowLoadURL', (id, url, options) => { - getWindowById(id).loadURL(url, options); - }); + socket.on("browserWindowCenter", (id) => { + getWindowById(id).center(); + }); - socket.on('browserWindowReload', (id) => { - getWindowById(id).reload(); - }); + socket.on("browserWindowSetPosition", (id, x, y, animate) => { + getWindowById(id).setPosition(x, y, animate); + }); - socket.on('browserWindowSetMenu', (id, menuItems) => { - let menu = null; + socket.on("browserWindowGetPosition", (id) => { + const position = getWindowById(id).getPosition(); - if (menuItems) { - menu = Menu.buildFromTemplate(menuItems); + electronSocket.emit("browserWindow-getPosition-completed", position); + }); - addMenuItemClickConnector(menu.items, (id) => { - electronSocket.emit('windowMenuItemClicked', id); - }); - } + socket.on("browserWindowSetTitle", (id, title) => { + getWindowById(id).setTitle(title); + }); - getWindowById(id).setMenu(menu); - }); + socket.on("browserWindowGetTitle", (id) => { + const title = getWindowById(id).getTitle(); - socket.on('browserWindowRemoveMenu', (id) => { - getWindowById(id).removeMenu(); - }); + electronSocket.emit("browserWindow-getTitle-completed", title); + }); - function addMenuItemClickConnector(menuItems, callback) { - menuItems.forEach((item) => { - if (item.submenu && item.submenu.items.length > 0) { - addMenuItemClickConnector(item.submenu.items, callback); - } + socket.on("browserWindowSetTitle", (id, title) => { + getWindowById(id).setTitle(title); + }); - if ('id' in item && item.id) { - item.click = () => { callback(item.id); }; - } - }); + socket.on("browserWindowSetSheetOffset", (id, offsetY, offsetX) => { + if (offsetX) { + getWindowById(id).setSheetOffset(offsetY, offsetX); + } else { + getWindowById(id).setSheetOffset(offsetY); } + }); + + socket.on("browserWindowFlashFrame", (id, flag) => { + getWindowById(id).flashFrame(flag); + }); + + socket.on("browserWindowSetSkipTaskbar", (id, skip) => { + getWindowById(id).setSkipTaskbar(skip); + }); + + socket.on("browserWindowSetKiosk", (id, flag) => { + getWindowById(id).setKiosk(flag); + }); + + socket.on("browserWindowIsKiosk", (id) => { + const isKiosk = getWindowById(id).isKiosk(); + + electronSocket.emit("browserWindow-isKiosk-completed", isKiosk); + }); + + socket.on("browserWindowGetNativeWindowHandle", (id) => { + const nativeWindowHandle = getWindowById(id) + .getNativeWindowHandle() + .readInt32LE(0) + .toString(16); + electronSocket.emit( + "browserWindow-getNativeWindowHandle-completed", + nativeWindowHandle + ); + }); + + socket.on("browserWindowSetRepresentedFilename", (id, filename) => { + const win = getWindowById(id); + try { + if (win && typeof win.setRepresentedFilename === "function") { + win.setRepresentedFilename(filename); + } + } catch (e) { + console.warn( + "setRepresentedFilename failed (likely unsupported platform):", + e + ); + } + }); + + socket.on("browserWindowGetRepresentedFilename", (id) => { + const win = getWindowById(id); + let pathname = ""; + try { + if (win && typeof win.getRepresentedFilename === "function") { + pathname = win.getRepresentedFilename() || ""; + } + } catch (e) { + console.warn( + "getRepresentedFilename failed (likely unsupported platform):", + e + ); + } + electronSocket.emit( + "browserWindow-getRepresentedFilename-completed", + pathname + ); + }); - socket.on('browserWindowSetProgressBar', (id, progress) => { - getWindowById(id).setProgressBar(progress); - }); - - socket.on('browserWindowSetProgressBar', (id, progress, options) => { - getWindowById(id).setProgressBar(progress, options); - }); - - socket.on('browserWindowSetHasShadow', (id, hasShadow) => { - getWindowById(id).setHasShadow(hasShadow); - }); - - socket.on('browserWindowHasShadow', (id) => { - const hasShadow = getWindowById(id).hasShadow(); - - electronSocket.emit('browserWindow-hasShadow-completed', hasShadow); - }); - - socket.on('browserWindowSetThumbarButtons', (id, thumbarButtons: Electron.ThumbarButton[]) => { - thumbarButtons.forEach(thumbarButton => { - const originalIconPath = thumbarButton.icon.toString(); - const path = require('path'); - const fs = require('fs'); - let imagePath = originalIconPath; - if (!path.isAbsolute(originalIconPath)) { - imagePath = path.join(__dirname.replace('api', ''), 'bin', originalIconPath); - } - const { nativeImage } = require('electron'); - if (fs.existsSync(imagePath)) { - thumbarButton.icon = nativeImage.createFromPath(imagePath); - } else { - // Fallback to empty image to avoid failure - thumbarButton.icon = nativeImage.createEmpty(); - } - thumbarButton.click = () => { - electronSocket.emit('thumbarButtonClicked', thumbarButton['id']); - }; - }); - - const success = getWindowById(id).setThumbarButtons(thumbarButtons); - electronSocket.emit('browserWindowSetThumbarButtons-completed', success); - }); - - socket.on('browserWindowSetThumbnailClip', (id, rectangle) => { - getWindowById(id).setThumbnailClip(rectangle); - }); - - socket.on('browserWindowSetThumbnailToolTip', (id, toolTip) => { - getWindowById(id).setThumbnailToolTip(toolTip); - }); - - socket.on('browserWindowSetAppDetails', (id, options) => { - getWindowById(id).setAppDetails(options); - }); - - socket.on('browserWindowShowDefinitionForSelection', (id) => { - getWindowById(id).showDefinitionForSelection(); - }); + socket.on("browserWindowSetDocumentEdited", (id, edited) => { + getWindowById(id).setDocumentEdited(edited); + }); - socket.on('browserWindowSetAutoHideMenuBar', (id, hide) => { - getWindowById(id).setAutoHideMenuBar(hide); - }); + socket.on("browserWindowIsDocumentEdited", (id) => { + const edited = getWindowById(id).isDocumentEdited(); - socket.on('browserWindowIsMenuBarAutoHide', (id) => { - const isMenuBarAutoHide = getWindowById(id).isMenuBarAutoHide(); + electronSocket.emit("browserWindow-isDocumentEdited-completed", edited); + }); - electronSocket.emit('browserWindow-isMenuBarAutoHide-completed', isMenuBarAutoHide); - }); + socket.on("browserWindowFocusOnWebView", (id) => { + getWindowById(id).focusOnWebView(); + }); - socket.on('browserWindowSetMenuBarVisibility', (id, visible) => { - getWindowById(id).setMenuBarVisibility(visible); - }); + socket.on("browserWindowBlurWebView", (id) => { + getWindowById(id).blurWebView(); + }); - socket.on('browserWindowIsMenuBarVisible', (id) => { - const isMenuBarVisible = getWindowById(id).isMenuBarVisible(); + socket.on("browserWindowLoadURL", (id, url, options) => { + getWindowById(id).loadURL(url, options); + }); - electronSocket.emit('browserWindow-isMenuBarVisible-completed', isMenuBarVisible); - }); + socket.on("browserWindowReload", (id) => { + getWindowById(id).reload(); + }); - socket.on('browserWindowSetVisibleOnAllWorkspaces', (id, visible) => { - getWindowById(id).setVisibleOnAllWorkspaces(visible); - }); + socket.on("browserWindowSetMenu", (id, menuItems) => { + let menu = null; - socket.on('browserWindowIsVisibleOnAllWorkspaces', (id) => { - const isVisibleOnAllWorkspaces = getWindowById(id).isVisibleOnAllWorkspaces(); + if (menuItems) { + menu = Menu.buildFromTemplate(menuItems); - electronSocket.emit('browserWindow-isVisibleOnAllWorkspaces-completed', isVisibleOnAllWorkspaces); - }); - - socket.on('browserWindowSetIgnoreMouseEvents', (id, ignore) => { - getWindowById(id).setIgnoreMouseEvents(ignore); - }); - - socket.on('browserWindowSetContentProtection', (id, enable) => { - getWindowById(id).setContentProtection(enable); - }); - - socket.on('browserWindowSetFocusable', (id, focusable) => { - getWindowById(id).setFocusable(focusable); - }); + addMenuItemClickConnector(menu.items, (id) => { + electronSocket.emit("windowMenuItemClicked", id); + }); + } - socket.on('browserWindowSetParentWindow', (id, parent) => { - const child = getWindowById(id); - if (!parent) { - // Clear parent: make this window top-level - child.setParentWindow(null); - return; + getWindowById(id).setMenu(menu); + }); + + socket.on("browserWindowRemoveMenu", (id) => { + getWindowById(id).removeMenu(); + }); + + function addMenuItemClickConnector(menuItems, callback) { + menuItems.forEach((item) => { + if (item.submenu && item.submenu.items.length > 0) { + addMenuItemClickConnector(item.submenu.items, callback); + } + + if ("id" in item && item.id) { + item.click = () => { + callback(item.id); + }; + } + }); + } + + socket.on("browserWindowSetProgressBar", (id, progress) => { + getWindowById(id).setProgressBar(progress); + }); + + socket.on("browserWindowSetProgressBar", (id, progress, options) => { + getWindowById(id).setProgressBar(progress, options); + }); + + socket.on("browserWindowSetHasShadow", (id, hasShadow) => { + getWindowById(id).setHasShadow(hasShadow); + }); + + socket.on("browserWindowHasShadow", (id) => { + const hasShadow = getWindowById(id).hasShadow(); + + electronSocket.emit("browserWindow-hasShadow-completed", hasShadow); + }); + + socket.on( + "browserWindowSetThumbarButtons", + (id, thumbarButtons: Electron.ThumbarButton[]) => { + thumbarButtons.forEach((thumbarButton) => { + const originalIconPath = thumbarButton.icon.toString(); + const path = require("path"); + const fs = require("fs"); + let imagePath = originalIconPath; + if (!path.isAbsolute(originalIconPath)) { + imagePath = path.join( + __dirname.replace("api", ""), + "bin", + originalIconPath + ); } - const browserWindow = BrowserWindow.fromId(parent.id); - child.setParentWindow(browserWindow); - }); + const { nativeImage } = require("electron"); + if (fs.existsSync(imagePath)) { + thumbarButton.icon = nativeImage.createFromPath(imagePath); + } else { + // Fallback to empty image to avoid failure + thumbarButton.icon = nativeImage.createEmpty(); + } + thumbarButton.click = () => { + electronSocket.emit("thumbarButtonClicked", thumbarButton["id"]); + }; + }); - socket.on('browserWindowGetParentWindow', (id) => { - const browserWindow = getWindowById(id).getParentWindow(); + const success = getWindowById(id).setThumbarButtons(thumbarButtons); + electronSocket.emit("browserWindowSetThumbarButtons-completed", success); + } + ); + + socket.on("browserWindowSetThumbnailClip", (id, rectangle) => { + getWindowById(id).setThumbnailClip(rectangle); + }); + + socket.on("browserWindowSetThumbnailToolTip", (id, toolTip) => { + getWindowById(id).setThumbnailToolTip(toolTip); + }); + + socket.on("browserWindowSetAppDetails", (id, options) => { + getWindowById(id).setAppDetails(options); + }); + + socket.on("browserWindowShowDefinitionForSelection", (id) => { + getWindowById(id).showDefinitionForSelection(); + }); + + socket.on("browserWindowSetAutoHideMenuBar", (id, hide) => { + getWindowById(id).setAutoHideMenuBar(hide); + }); + + socket.on("browserWindowIsMenuBarAutoHide", (id) => { + const isMenuBarAutoHide = getWindowById(id).isMenuBarAutoHide(); + + electronSocket.emit( + "browserWindow-isMenuBarAutoHide-completed", + isMenuBarAutoHide + ); + }); + + socket.on("browserWindowSetMenuBarVisibility", (id, visible) => { + getWindowById(id).setMenuBarVisibility(visible); + }); + + socket.on("browserWindowIsMenuBarVisible", (id) => { + const isMenuBarVisible = getWindowById(id).isMenuBarVisible(); + + electronSocket.emit( + "browserWindow-isMenuBarVisible-completed", + isMenuBarVisible + ); + }); + + socket.on("browserWindowSetVisibleOnAllWorkspaces", (id, visible) => { + getWindowById(id).setVisibleOnAllWorkspaces(visible); + }); + + socket.on("browserWindowIsVisibleOnAllWorkspaces", (id) => { + const isVisibleOnAllWorkspaces = + getWindowById(id).isVisibleOnAllWorkspaces(); + + electronSocket.emit( + "browserWindow-isVisibleOnAllWorkspaces-completed", + isVisibleOnAllWorkspaces + ); + }); + + socket.on("browserWindowSetIgnoreMouseEvents", (id, ignore) => { + getWindowById(id).setIgnoreMouseEvents(ignore); + }); + + socket.on("browserWindowSetContentProtection", (id, enable) => { + getWindowById(id).setContentProtection(enable); + }); + + socket.on("browserWindowSetFocusable", (id, focusable) => { + getWindowById(id).setFocusable(focusable); + }); + + socket.on("browserWindowSetParentWindow", (id, parent) => { + const child = getWindowById(id); + if (!parent) { + // Clear parent: make this window top-level + child.setParentWindow(null); + return; + } + const browserWindow = BrowserWindow.fromId(parent.id); + child.setParentWindow(browserWindow); + }); - electronSocket.emit('browserWindow-getParentWindow-completed', browserWindow.id); - }); + socket.on("browserWindowGetParentWindow", (id) => { + const browserWindow = getWindowById(id).getParentWindow(); - socket.on('browserWindowGetChildWindows', (id) => { - const browserWindows = getWindowById(id).getChildWindows(); + electronSocket.emit( + "browserWindow-getParentWindow-completed", + browserWindow.id + ); + }); - const ids = []; + socket.on("browserWindowGetChildWindows", (id) => { + const browserWindows = getWindowById(id).getChildWindows(); - browserWindows.forEach(x => { - ids.push(x.id); - }); + const ids = []; - electronSocket.emit('browserWindow-getChildWindows-completed', ids); + browserWindows.forEach((x) => { + ids.push(x.id); }); - socket.on('browserWindowSetAutoHideCursor', (id, autoHide) => { - getWindowById(id).setAutoHideCursor(autoHide); - }); + electronSocket.emit("browserWindow-getChildWindows-completed", ids); + }); - socket.on('browserWindowSetVibrancy', (id, type) => { - getWindowById(id).setVibrancy(type); - }); + socket.on("browserWindowSetAutoHideCursor", (id, autoHide) => { + getWindowById(id).setAutoHideCursor(autoHide); + }); - socket.on('browserWindow-setBrowserView', (id, browserViewId) => { - getWindowById(id).setBrowserView(browserViewMediateService(browserViewId)); - }); + socket.on("browserWindowSetVibrancy", (id, type) => { + getWindowById(id).setVibrancy(type); + }); - function getWindowById(id: number): Electron.BrowserWindow { - for (let index = 0; index < windows.length; index++) { - const element = windows[index]; - if (element.id === id) { - return element; - } - } + socket.on("browserWindow-setBrowserView", (id, browserViewId) => { + getWindowById(id).setBrowserView(browserViewMediateService(browserViewId)); + }); + + function getWindowById(id: number): Electron.BrowserWindow { + for (let index = 0; index < windows.length; index++) { + const element = windows[index]; + if (element.id === id) { + return element; + } } + } }; diff --git a/src/ElectronNET.Host/api/ipc.js b/src/ElectronNET.Host/api/ipc.js index efbe120a..b95352ef 100644 --- a/src/ElectronNET.Host/api/ipc.js +++ b/src/ElectronNET.Host/api/ipc.js @@ -58,11 +58,10 @@ module.exports = (socket) => { catch { /* ignore */ } }); electron_1.ipcMain.on('integration-click-context-menu', (event, windowId, id) => { - var _a, _b; try { const entries = global['contextMenuItems'] || []; const entry = entries.find((x) => x.browserWindowId === windowId); - const mi = (_b = (_a = entry === null || entry === void 0 ? void 0 : entry.menu) === null || _a === void 0 ? void 0 : _a.items) === null || _b === void 0 ? void 0 : _b.find((i) => i.id === id); + const mi = entry?.menu?.items?.find((i) => i.id === id); if (mi && typeof mi.click === 'function') { const bw = electron_1.BrowserWindow.fromId(windowId); mi.click(undefined, bw, undefined); diff --git a/src/ElectronNET.Host/api/ipc.js.map b/src/ElectronNET.Host/api/ipc.js.map index 4f55f751..b641b15d 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":"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"} \ 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/nativeTheme.js.map b/src/ElectronNET.Host/api/nativeTheme.js.map index b47cf7c4..0b57ff1f 100644 --- a/src/ElectronNET.Host/api/nativeTheme.js.map +++ b/src/ElectronNET.Host/api/nativeTheme.js.map @@ -1 +1 @@ -{"version":3,"file":"nativeTheme.js","sourceRoot":"","sources":["nativeTheme.ts"],"names":[],"mappings":";AACA,uCAAuC;AACvC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IAExB,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC9C,MAAM,mBAAmB,GAAG,sBAAW,CAAC,mBAAmB,CAAC;QAE5D,cAAc,CAAC,IAAI,CAAC,2CAA2C,EAAE,mBAAmB,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACtD,MAAM,2BAA2B,GAAG,sBAAW,CAAC,2BAA2B,CAAC;QAE5E,cAAc,CAAC,IAAI,CAAC,mDAAmD,EAAE,2BAA2B,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACvD,MAAM,4BAA4B,GAAG,sBAAW,CAAC,4BAA4B,CAAC;QAE9E,cAAc,CAAC,IAAI,CAAC,oDAAoD,EAAE,4BAA4B,CAAC,CAAC;IAC5G,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC1C,MAAM,WAAW,GAAG,sBAAW,CAAC,WAAW,CAAC;QAE5C,cAAc,CAAC,IAAI,CAAC,sCAAsC,EAAE,WAAW,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE;QACjD,sBAAW,CAAC,WAAW,GAAG,WAAW,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,sBAAW,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC3B,cAAc,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"nativeTheme.js","sourceRoot":"","sources":["nativeTheme.ts"],"names":[],"mappings":";AACA,uCAAuC;AACvC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IAExB,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC9C,MAAM,mBAAmB,GAAG,sBAAW,CAAC,mBAAmB,CAAC;QAE5D,cAAc,CAAC,IAAI,CAAC,2CAA2C,EAAE,mBAAmB,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACtD,MAAM,2BAA2B,GAAG,sBAAW,CAAC,2BAA2B,CAAC;QAE5E,cAAc,CAAC,IAAI,CAAC,mDAAmD,EAAE,2BAA2B,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACvD,MAAM,4BAA4B,GAAG,sBAAW,CAAC,4BAA4B,CAAC;QAE9E,cAAc,CAAC,IAAI,CAAC,oDAAoD,EAAE,4BAA4B,CAAC,CAAC;IAC5G,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACzC,MAAM,WAAW,GAAG,sBAAW,CAAC,WAAW,CAAC;QAE5C,cAAc,CAAC,IAAI,CAAC,sCAAsC,EAAE,WAAW,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE;QACjD,sBAAW,CAAC,WAAW,GAAG,WAAW,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC7C,sBAAW,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC3B,cAAc,CAAC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ 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 267b9b31..fc26d37c 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,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,EAAE,CAAC;QAC/C,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,EAAE,CAAC;QAC/C,cAAc,CAAC,IAAI,CAAC,kCAAkC,EAAE,WAAW,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/powerMonitor.js.map b/src/ElectronNET.Host/api/powerMonitor.js.map index f83530e0..01f7be39 100644 --- a/src/ElectronNET.Host/api/powerMonitor.js.map +++ b/src/ElectronNET.Host/api/powerMonitor.js.map @@ -1 +1 @@ -{"version":3,"file":"powerMonitor.js","sourceRoot":"","sources":["powerMonitor.ts"],"names":[],"mappings":";AACA,uCAAwC;AACxC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACtC,uBAAY,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YAChC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACxC,uBAAY,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YAClC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAClC,uBAAY,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC5B,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QACjC,uBAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC3B,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAChC,uBAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1B,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACrC,uBAAY,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YAC/B,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACnC,uBAAY,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAC7B,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"powerMonitor.js","sourceRoot":"","sources":["powerMonitor.ts"],"names":[],"mappings":";AACA,uCAAwC;AACxC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAChD,uBAAY,CAAC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YAChC,cAAc,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAClD,uBAAY,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YAClC,cAAc,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC5C,uBAAY,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC5B,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC3C,uBAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC3B,cAAc,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACvC,uBAAY,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1B,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC5C,uBAAY,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YAC/B,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC7C,uBAAY,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAC7B,cAAc,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/process.ts b/src/ElectronNET.Host/api/process.ts index e7a6b541..6d3afd0f 100644 --- a/src/ElectronNET.Host/api/process.ts +++ b/src/ElectronNET.Host/api/process.ts @@ -37,7 +37,7 @@ export = (socket: Socket) => { electronSocket.emit('process-isMainFrame-completed', false); return; } - electronSocket.emit('process-isMainFrame-completed', process.isMainFrame); + electronSocket.emit('process-isMainFrame-completed', process.isMainFrame); }); socket.on('process-resourcesPath', () => { diff --git a/src/ElectronNET.Host/api/screen.js.map b/src/ElectronNET.Host/api/screen.js.map index a395faf5..9fd43df0 100644 --- a/src/ElectronNET.Host/api/screen.js.map +++ b/src/ElectronNET.Host/api/screen.js.map @@ -1 +1 @@ -{"version":3,"file":"screen.js","sourceRoot":"","sources":["screen.ts"],"names":[],"mappings":";AACA,uCAAkC;AAClC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IAExB,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,iBAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC1C,cAAc,CAAC,IAAI,CAAC,sBAAsB,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,EAAE;QAChD,iBAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC5C,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,EAAE,EAAE,EAAE;QACxD,iBAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE;YACpE,cAAc,CAAC,IAAI,CAAC,gCAAgC,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC1C,MAAM,KAAK,GAAG,iBAAM,CAAC,oBAAoB,EAAE,CAAC;QAC5C,cAAc,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACtC,MAAM,MAAM,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QACnD,cAAc,CAAC,IAAI,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACvC,MAAM,OAAO,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC;QAC3C,cAAc,CAAC,IAAI,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACpC,MAAM,OAAO,GAAG,iBAAM,CAAC,cAAc,EAAE,CAAC;QACxC,cAAc,CAAC,IAAI,CAAC,gCAAgC,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,KAAK,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,iBAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACrD,cAAc,CAAC,IAAI,CAAC,wCAAwC,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,SAAS,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,iBAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACrD,cAAc,CAAC,IAAI,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"screen.js","sourceRoot":"","sources":["screen.ts"],"names":[],"mappings":";AACA,uCAAkC;AAClC,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IAExB,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,EAAE,EAAE,EAAE;QAC9C,iBAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC1C,cAAc,CAAC,IAAI,CAAC,sBAAsB,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,iCAAiC,EAAE,CAAC,EAAE,EAAE,EAAE;QAChD,iBAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC5C,cAAc,CAAC,IAAI,CAAC,wBAAwB,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,EAAE,EAAE,EAAE;QACxD,iBAAM,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE;YACpE,cAAc,CAAC,IAAI,CAAC,gCAAgC,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC1C,MAAM,KAAK,GAAG,iBAAM,CAAC,oBAAoB,EAAE,CAAC;QAC5C,cAAc,CAAC,IAAI,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC;QACnD,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE,MAAM,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACvC,MAAM,OAAO,GAAG,iBAAM,CAAC,iBAAiB,EAAE,CAAC;QAC3C,cAAc,CAAC,IAAI,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACpC,MAAM,OAAO,GAAG,iBAAM,CAAC,cAAc,EAAE,CAAC;QACxC,cAAc,CAAC,IAAI,CAAC,iCAAiC,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,KAAK,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,iBAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACrD,cAAc,CAAC,IAAI,CAAC,yCAAyC,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,SAAS,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,iBAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACrD,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"} \ No newline at end of file diff --git a/src/ElectronNET.Host/api/screen.ts b/src/ElectronNET.Host/api/screen.ts index beac16a0..61289cf5 100644 --- a/src/ElectronNET.Host/api/screen.ts +++ b/src/ElectronNET.Host/api/screen.ts @@ -4,7 +4,7 @@ let electronSocket; export = (socket: Socket) => { electronSocket = socket; - + socket.on('register-screen-display-added', (id) => { screen.on('display-added', (event, display) => { electronSocket.emit('screen-display-added' + id, display); diff --git a/src/ElectronNET.Host/api/shell.ts b/src/ElectronNET.Host/api/shell.ts index 9a0dfd7f..eac4dc46 100644 --- a/src/ElectronNET.Host/api/shell.ts +++ b/src/ElectronNET.Host/api/shell.ts @@ -39,7 +39,7 @@ export = (socket: Socket) => { await shell.trashItem(fullPath); success = true; } catch (error) { - success = false; + success = false; } electronSocket.emit('shell-trashItem-completed', success); diff --git a/src/ElectronNET.Host/api/webContents.js b/src/ElectronNET.Host/api/webContents.js index 7b16a712..3d0c8b0e 100644 --- a/src/ElectronNET.Host/api/webContents.js +++ b/src/ElectronNET.Host/api/webContents.js @@ -1,78 +1,84 @@ "use strict"; const electron_1 = require("electron"); const browserView_1 = require("./browserView"); -const fs = require('fs'); +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) => { + socket.on("register-webContents-crashed", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('crashed'); + browserWindow.webContents.removeAllListeners("crashed"); // @ts-expect-error No overload matches this call - browserWindow.webContents.on('crashed', (event, killed) => { - electronSocket.emit('webContents-crashed' + id, killed); + browserWindow.webContents.on("crashed", (event, killed) => { + electronSocket.emit("webContents-crashed" + id, killed); }); }); - socket.on('register-webContents-didFinishLoad', (id) => { + socket.on("register-webContents-didFinishLoad", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-finish-load'); - browserWindow.webContents.on('did-finish-load', () => { - electronSocket.emit('webContents-didFinishLoad' + id); + browserWindow.webContents.removeAllListeners("did-finish-load"); + browserWindow.webContents.on("did-finish-load", () => { + electronSocket.emit("webContents-didFinishLoad" + id); }); }); - socket.on('register-webContents-didStartNavigation', (id) => { + socket.on("register-webContents-didStartNavigation", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-start-navigation'); - browserWindow.webContents.on('did-start-navigation', (_, url) => { - electronSocket.emit('webContents-didStartNavigation' + id, url); + browserWindow.webContents.removeAllListeners("did-start-navigation"); + browserWindow.webContents.on("did-start-navigation", (_, url) => { + electronSocket.emit("webContents-didStartNavigation" + id, url); }); }); - socket.on('register-webContents-didNavigate', (id) => { + socket.on("register-webContents-didNavigate", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-navigate'); - browserWindow.webContents.on('did-navigate', (_, url, httpResponseCode) => { - electronSocket.emit('webContents-didNavigate' + id, { url, httpResponseCode }); + browserWindow.webContents.removeAllListeners("did-navigate"); + browserWindow.webContents.on("did-navigate", (_, url, httpResponseCode) => { + electronSocket.emit("webContents-didNavigate" + id, { + url, + httpResponseCode, + }); }); }); - socket.on('register-webContents-willRedirect', (id) => { + socket.on("register-webContents-willRedirect", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('will-redirect'); - browserWindow.webContents.on('will-redirect', (_, url) => { - electronSocket.emit('webContents-willRedirect' + id, url); + browserWindow.webContents.removeAllListeners("will-redirect"); + browserWindow.webContents.on("will-redirect", (_, url) => { + electronSocket.emit("webContents-willRedirect" + id, url); }); }); - socket.on('register-webContents-didFailLoad', (id) => { + socket.on("register-webContents-didFailLoad", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-fail-load'); - browserWindow.webContents.on('did-fail-load', (_, errorCode, validatedUrl) => { - electronSocket.emit('webContents-didFailLoad' + id, { errorCode, validatedUrl }); + browserWindow.webContents.removeAllListeners("did-fail-load"); + browserWindow.webContents.on("did-fail-load", (_, errorCode, validatedUrl) => { + electronSocket.emit("webContents-didFailLoad" + id, { + errorCode, + validatedUrl, + }); }); }); - socket.on('register-webContents-didRedirectNavigation', (id) => { + socket.on("register-webContents-didRedirectNavigation", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-redirect-navigation'); - browserWindow.webContents.on('did-redirect-navigation', (_, url) => { - electronSocket.emit('webContents-didRedirectNavigation' + id, url); + browserWindow.webContents.removeAllListeners("did-redirect-navigation"); + browserWindow.webContents.on("did-redirect-navigation", (_, url) => { + electronSocket.emit("webContents-didRedirectNavigation" + id, url); }); }); - socket.on('register-webContents-input-event', (id) => { + socket.on("register-webContents-input-event", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('input-event'); - browserWindow.webContents.on('input-event', (_, eventArgs) => { - if (eventArgs.type !== 'char') { - electronSocket.emit('webContents-input-event' + id, eventArgs); + browserWindow.webContents.removeAllListeners("input-event"); + browserWindow.webContents.on("input-event", (_, eventArgs) => { + if (eventArgs.type !== "char") { + electronSocket.emit("webContents-input-event" + id, eventArgs); } }); }); - socket.on('register-webContents-domReady', (id) => { + 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); + browserWindow.webContents.removeAllListeners("dom-ready"); + browserWindow.webContents.on("dom-ready", () => { + electronSocket.emit("webContents-domReady" + id); }); }); - socket.on('webContentsOpenDevTools', (id, options) => { + socket.on("webContentsOpenDevTools", (id, options) => { if (options) { getWindowById(id).webContents.openDevTools(options); } @@ -80,38 +86,38 @@ module.exports = (socket) => { getWindowById(id).webContents.openDevTools(); } }); - socket.on('webContents-getPrinters', async (id) => { + socket.on("webContents-getPrinters", async (id) => { const printers = await getWindowById(id).webContents.getPrintersAsync(); - electronSocket.emit('webContents-getPrinters-completed', printers); + electronSocket.emit("webContents-getPrinters-completed", printers); }); - socket.on('webContents-print', async (id, options = {}) => { + socket.on("webContents-print", async (id, options = {}) => { await getWindowById(id).webContents.print(options); - electronSocket.emit('webContents-print-completed', true); + electronSocket.emit("webContents-print-completed", true); }); - socket.on('webContents-printToPDF', async (id, options = {}, path) => { + socket.on("webContents-printToPDF", async (id, options = {}, path) => { const buffer = await getWindowById(id).webContents.printToPDF(options); fs.writeFile(path, buffer, (error) => { if (error) { - electronSocket.emit('webContents-printToPDF-completed', false); + electronSocket.emit("webContents-printToPDF-completed", false); } else { - electronSocket.emit('webContents-printToPDF-completed', true); + electronSocket.emit("webContents-printToPDF-completed", true); } }); }); - socket.on('webContents-executeJavaScript', async (id, code, userGesture = false) => { + socket.on("webContents-executeJavaScript", async (id, code, userGesture = false) => { const result = await getWindowById(id).webContents.executeJavaScript(code, userGesture); - electronSocket.emit('webContents-executeJavaScript-completed', result); + electronSocket.emit("webContents-executeJavaScript-completed", result); }); - socket.on('webContents-getUrl', function (id) { + socket.on("webContents-getUrl", function (id) { const browserWindow = getWindowById(id); - electronSocket.emit('webContents-getUrl' + id, browserWindow.webContents.getURL()); + electronSocket.emit("webContents-getUrl" + id, browserWindow.webContents.getURL()); }); - socket.on('webContents-session-allowNTLMCredentialsForDomains', (id, domains) => { + socket.on("webContents-session-allowNTLMCredentialsForDomains", (id, domains) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.allowNTLMCredentialsForDomains(domains); }); - socket.on('webContents-session-clearAuthCache', async (...args) => { + socket.on("webContents-session-clearAuthCache", async (...args) => { // Overload support: (id, guid) OR (id, options, guid) const browserWindow = getWindowById(args[0]); let guid; @@ -124,6 +130,7 @@ module.exports = (socket) => { const options = args[1]; guid = args[2]; try { + // @ts-ignore await browserWindow.webContents.session.clearAuthCache(options); } catch { @@ -134,87 +141,87 @@ module.exports = (socket) => { else { return; // invalid invocation } - electronSocket.emit('webContents-session-clearAuthCache-completed' + guid); + electronSocket.emit("webContents-session-clearAuthCache-completed" + guid); }); - socket.on('webContents-session-clearCache', async (id, guid) => { + socket.on("webContents-session-clearCache", async (id, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearCache(); - electronSocket.emit('webContents-session-clearCache-completed' + guid); + electronSocket.emit("webContents-session-clearCache-completed" + guid); }); - socket.on('webContents-session-clearHostResolverCache', async (id, guid) => { + socket.on("webContents-session-clearHostResolverCache", async (id, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearHostResolverCache(); - electronSocket.emit('webContents-session-clearHostResolverCache-completed' + guid); + electronSocket.emit("webContents-session-clearHostResolverCache-completed" + guid); }); - socket.on('webContents-session-clearStorageData', async (id, guid) => { + socket.on("webContents-session-clearStorageData", async (id, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearStorageData({}); - electronSocket.emit('webContents-session-clearStorageData-completed' + guid); + electronSocket.emit("webContents-session-clearStorageData-completed" + guid); }); - socket.on('webContents-session-clearStorageData-options', async (id, options, guid) => { + socket.on("webContents-session-clearStorageData-options", async (id, options, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearStorageData(options); - electronSocket.emit('webContents-session-clearStorageData-options-completed' + guid); + electronSocket.emit("webContents-session-clearStorageData-options-completed" + guid); }); - socket.on('webContents-session-createInterruptedDownload', (id, options) => { + socket.on("webContents-session-createInterruptedDownload", (id, options) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.createInterruptedDownload(options); }); - socket.on('webContents-session-disableNetworkEmulation', (id) => { + socket.on("webContents-session-disableNetworkEmulation", (id) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.disableNetworkEmulation(); }); - socket.on('webContents-session-enableNetworkEmulation', (id, options) => { + socket.on("webContents-session-enableNetworkEmulation", (id, options) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.enableNetworkEmulation(options); }); - socket.on('webContents-session-flushStorageData', (id) => { + socket.on("webContents-session-flushStorageData", (id) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.flushStorageData(); }); - socket.on('webContents-session-getBlobData', async (id, identifier, guid) => { + socket.on("webContents-session-getBlobData", async (id, identifier, guid) => { const browserWindow = getWindowById(id); const buffer = await browserWindow.webContents.session.getBlobData(identifier); - electronSocket.emit('webContents-session-getBlobData-completed' + guid, buffer.buffer); + electronSocket.emit("webContents-session-getBlobData-completed" + guid, buffer.buffer); }); - socket.on('webContents-session-getCacheSize', async (id, guid) => { + socket.on("webContents-session-getCacheSize", async (id, guid) => { const browserWindow = getWindowById(id); const size = await browserWindow.webContents.session.getCacheSize(); - electronSocket.emit('webContents-session-getCacheSize-completed' + guid, size); + electronSocket.emit("webContents-session-getCacheSize-completed" + guid, size); }); - socket.on('webContents-session-getPreloads', (id, guid) => { + socket.on("webContents-session-getPreloads", (id, guid) => { const browserWindow = getWindowById(id); const preloads = browserWindow.webContents.session.getPreloads(); - electronSocket.emit('webContents-session-getPreloads-completed' + guid, preloads); + electronSocket.emit("webContents-session-getPreloads-completed" + guid, preloads); }); - socket.on('webContents-session-getUserAgent', (id, guid) => { + socket.on("webContents-session-getUserAgent", (id, guid) => { const browserWindow = getWindowById(id); const userAgent = browserWindow.webContents.session.getUserAgent(); - electronSocket.emit('webContents-session-getUserAgent-completed' + guid, userAgent); + electronSocket.emit("webContents-session-getUserAgent-completed" + guid, userAgent); }); - socket.on('webContents-session-resolveProxy', async (id, url, guid) => { + socket.on("webContents-session-resolveProxy", async (id, url, guid) => { const browserWindow = getWindowById(id); const proxy = await browserWindow.webContents.session.resolveProxy(url); - electronSocket.emit('webContents-session-resolveProxy-completed' + guid, proxy); + electronSocket.emit("webContents-session-resolveProxy-completed" + guid, proxy); }); - socket.on('webContents-session-setDownloadPath', (id, path) => { + socket.on("webContents-session-setDownloadPath", (id, path) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.setDownloadPath(path); }); - socket.on('webContents-session-setPreloads', (id, preloads) => { + socket.on("webContents-session-setPreloads", (id, preloads) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.setPreloads(preloads); }); - socket.on('webContents-session-setProxy', async (id, configuration, guid) => { + socket.on("webContents-session-setProxy", async (id, configuration, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.setProxy(configuration); - electronSocket.emit('webContents-session-setProxy-completed' + guid); + electronSocket.emit("webContents-session-setProxy-completed" + guid); }); - socket.on('webContents-session-setUserAgent', (id, userAgent, acceptLanguages) => { + socket.on("webContents-session-setUserAgent", (id, userAgent, acceptLanguages) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.setUserAgent(userAgent, acceptLanguages); }); - socket.on('register-webContents-session-webRequest-onBeforeRequest', (id, filter) => { + socket.on("register-webContents-session-webRequest-onBeforeRequest", (id, filter) => { const browserWindow = getWindowById(id); const session = browserWindow.webContents.session; session.webRequest.onBeforeRequest(filter, (details, callback) => { @@ -225,83 +232,88 @@ module.exports = (socket) => { }); }); }); - socket.on('register-webContents-session-cookies-changed', (id) => { + socket.on("register-webContents-session-cookies-changed", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.session.cookies.removeAllListeners('changed'); - browserWindow.webContents.session.cookies.on('changed', (event, cookie, cause, removed) => { - electronSocket.emit('webContents-session-cookies-changed' + id, [cookie, cause, removed]); + browserWindow.webContents.session.cookies.removeAllListeners("changed"); + browserWindow.webContents.session.cookies.on("changed", (event, cookie, cause, removed) => { + electronSocket.emit("webContents-session-cookies-changed" + id, [ + cookie, + cause, + removed, + ]); }); }); - socket.on('webContents-session-cookies-get', async (id, filter, guid) => { + socket.on("webContents-session-cookies-get", async (id, filter, guid) => { const browserWindow = getWindowById(id); const cookies = await browserWindow.webContents.session.cookies.get(filter); - electronSocket.emit('webContents-session-cookies-get-completed' + guid, cookies); + electronSocket.emit("webContents-session-cookies-get-completed" + guid, cookies); }); - socket.on('webContents-session-cookies-set', async (id, details, guid) => { + socket.on("webContents-session-cookies-set", async (id, details, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.cookies.set(details); - electronSocket.emit('webContents-session-cookies-set-completed' + guid); + electronSocket.emit("webContents-session-cookies-set-completed" + guid); }); - socket.on('webContents-session-cookies-remove', async (id, url, name, guid) => { + socket.on("webContents-session-cookies-remove", async (id, url, name, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.cookies.remove(url, name); - electronSocket.emit('webContents-session-cookies-remove-completed' + guid); + electronSocket.emit("webContents-session-cookies-remove-completed" + guid); }); - socket.on('webContents-session-cookies-flushStore', async (id, guid) => { + socket.on("webContents-session-cookies-flushStore", async (id, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.cookies.flushStore(); - electronSocket.emit('webContents-session-cookies-flushStore-completed' + guid); + electronSocket.emit("webContents-session-cookies-flushStore-completed" + guid); }); - socket.on('webContents-loadURL', (id, url, options) => { + socket.on("webContents-loadURL", (id, url, options) => { const browserWindow = getWindowById(id); browserWindow.webContents .loadURL(url, options) .then(() => { - electronSocket.emit('webContents-loadURL-complete' + id); + electronSocket.emit("webContents-loadURL-complete" + id); }) .catch((error) => { console.error(error); - electronSocket.emit('webContents-loadURL-error' + id, error); + electronSocket.emit("webContents-loadURL-error" + id, error); }); }); - socket.on('webContents-insertCSS', (id, isBrowserWindow, path) => { + socket.on("webContents-insertCSS", (id, isBrowserWindow, path) => { if (isBrowserWindow) { const browserWindow = getWindowById(id); if (browserWindow) { - browserWindow.webContents.insertCSS(fs.readFileSync(path, 'utf8')); + browserWindow.webContents.insertCSS(fs.readFileSync(path, "utf8")); } } else { - const browserViews = (global['browserViews'] = global['browserViews'] || []); + const browserViews = (global["browserViews"] = + global["browserViews"] || []); let view = null; for (let i = 0; i < browserViews.length; i++) { - if (browserViews[i]['id'] + 1000 === id) { + if (browserViews[i]["id"] + 1000 === id) { view = browserViews[i]; break; } } if (view) { - view.webContents.insertCSS(fs.readFileSync(path, 'utf8')); + view.webContents.insertCSS(fs.readFileSync(path, "utf8")); } } }); - socket.on('webContents-session-getAllExtensions', (id) => { + socket.on("webContents-session-getAllExtensions", (id) => { const browserWindow = getWindowById(id); const extensionsList = browserWindow.webContents.session.getAllExtensions(); const chromeExtensionInfo = []; Object.keys(extensionsList).forEach((key) => { chromeExtensionInfo.push(extensionsList[key]); }); - electronSocket.emit('webContents-session-getAllExtensions-completed', chromeExtensionInfo); + electronSocket.emit("webContents-session-getAllExtensions-completed", chromeExtensionInfo); }); - socket.on('webContents-session-removeExtension', (id, name) => { + socket.on("webContents-session-removeExtension", (id, name) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.removeExtension(name); }); - socket.on('webContents-session-loadExtension', async (id, path, allowFileAccess = false) => { + socket.on("webContents-session-loadExtension", async (id, path, allowFileAccess = false) => { const browserWindow = getWindowById(id); const extension = await browserWindow.webContents.session.loadExtension(path, { allowFileAccess: allowFileAccess }); - electronSocket.emit('webContents-session-loadExtension-completed', extension); + electronSocket.emit("webContents-session-loadExtension-completed", extension); }); function getWindowById(id) { if (id >= 1000) { diff --git a/src/ElectronNET.Host/api/webContents.js.map b/src/ElectronNET.Host/api/webContents.js.map index 72f434f6..c3f3e451 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 diff --git a/src/ElectronNET.Host/api/webContents.ts b/src/ElectronNET.Host/api/webContents.ts index e9eadb06..2d156619 100644 --- a/src/ElectronNET.Host/api/webContents.ts +++ b/src/ElectronNET.Host/api/webContents.ts @@ -1,98 +1,107 @@ -import { Socket } from 'net'; -import { BrowserWindow, BrowserView } from 'electron'; -import { browserViewMediateService } from './browserView'; -const fs = require('fs'); +import { Socket } from "net"; +import { BrowserWindow, BrowserView } from "electron"; +import { browserViewMediateService } from "./browserView"; +const fs = require("fs"); let electronSocket; export = (socket: Socket) => { electronSocket = socket; // The crashed event has been removed in Electron 29 - socket.on('register-webContents-crashed', (id) => { + socket.on("register-webContents-crashed", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('crashed'); + browserWindow.webContents.removeAllListeners("crashed"); // @ts-expect-error No overload matches this call - browserWindow.webContents.on('crashed', (event, killed) => { - electronSocket.emit('webContents-crashed' + id, killed); + browserWindow.webContents.on("crashed", (event, killed) => { + electronSocket.emit("webContents-crashed" + id, killed); }); }); - socket.on('register-webContents-didFinishLoad', (id) => { + socket.on("register-webContents-didFinishLoad", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-finish-load'); - browserWindow.webContents.on('did-finish-load', () => { - electronSocket.emit('webContents-didFinishLoad' + id); + browserWindow.webContents.removeAllListeners("did-finish-load"); + browserWindow.webContents.on("did-finish-load", () => { + electronSocket.emit("webContents-didFinishLoad" + id); }); }); - socket.on('register-webContents-didStartNavigation', (id) => { + socket.on("register-webContents-didStartNavigation", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-start-navigation'); - browserWindow.webContents.on('did-start-navigation', (_, url) => { - electronSocket.emit('webContents-didStartNavigation' + id, url); + browserWindow.webContents.removeAllListeners("did-start-navigation"); + browserWindow.webContents.on("did-start-navigation", (_, url) => { + electronSocket.emit("webContents-didStartNavigation" + id, url); }); }); - socket.on('register-webContents-didNavigate', (id) => { + socket.on("register-webContents-didNavigate", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-navigate'); - browserWindow.webContents.on('did-navigate', (_, url, httpResponseCode) => { - electronSocket.emit('webContents-didNavigate' + id, {url, httpResponseCode}); + browserWindow.webContents.removeAllListeners("did-navigate"); + browserWindow.webContents.on("did-navigate", (_, url, httpResponseCode) => { + electronSocket.emit("webContents-didNavigate" + id, { + url, + httpResponseCode, + }); }); }); - socket.on('register-webContents-willRedirect', (id) => { + socket.on("register-webContents-willRedirect", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('will-redirect'); - browserWindow.webContents.on('will-redirect', (_, url) => { - electronSocket.emit('webContents-willRedirect' + id, url); + browserWindow.webContents.removeAllListeners("will-redirect"); + browserWindow.webContents.on("will-redirect", (_, url) => { + electronSocket.emit("webContents-willRedirect" + id, url); }); }); - socket.on('register-webContents-didFailLoad', (id) => { + socket.on("register-webContents-didFailLoad", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-fail-load'); - browserWindow.webContents.on('did-fail-load', (_, errorCode, validatedUrl) => { - electronSocket.emit('webContents-didFailLoad' + id, {errorCode, validatedUrl}); - }); + browserWindow.webContents.removeAllListeners("did-fail-load"); + browserWindow.webContents.on( + "did-fail-load", + (_, errorCode, validatedUrl) => { + electronSocket.emit("webContents-didFailLoad" + id, { + errorCode, + validatedUrl, + }); + } + ); }); - socket.on('register-webContents-didRedirectNavigation', (id) => { + socket.on("register-webContents-didRedirectNavigation", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('did-redirect-navigation'); - browserWindow.webContents.on('did-redirect-navigation', (_, url) => { - electronSocket.emit('webContents-didRedirectNavigation' + id, url); + browserWindow.webContents.removeAllListeners("did-redirect-navigation"); + browserWindow.webContents.on("did-redirect-navigation", (_, url) => { + electronSocket.emit("webContents-didRedirectNavigation" + id, url); }); }); - socket.on('register-webContents-input-event', (id) => { + socket.on("register-webContents-input-event", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.removeAllListeners('input-event'); - browserWindow.webContents.on('input-event', (_, eventArgs) => { - if (eventArgs.type !== 'char') { - electronSocket.emit('webContents-input-event' + id, eventArgs); + browserWindow.webContents.removeAllListeners("input-event"); + browserWindow.webContents.on("input-event", (_, eventArgs) => { + if (eventArgs.type !== "char") { + electronSocket.emit("webContents-input-event" + id, eventArgs); } }); }); - socket.on('register-webContents-domReady', (id) => { + 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); + browserWindow.webContents.removeAllListeners("dom-ready"); + browserWindow.webContents.on("dom-ready", () => { + electronSocket.emit("webContents-domReady" + id); }); }); - socket.on('webContentsOpenDevTools', (id, options) => { + socket.on("webContentsOpenDevTools", (id, options) => { if (options) { getWindowById(id).webContents.openDevTools(options); } else { @@ -100,55 +109,68 @@ export = (socket: Socket) => { } }); - socket.on('webContents-getPrinters', async (id) => { + socket.on("webContents-getPrinters", async (id) => { const printers = await getWindowById(id).webContents.getPrintersAsync(); - electronSocket.emit('webContents-getPrinters-completed', printers); + electronSocket.emit("webContents-getPrinters-completed", printers); }); - socket.on('webContents-print', async (id, options = {}) => { + socket.on("webContents-print", async (id, options = {}) => { await getWindowById(id).webContents.print(options); - electronSocket.emit('webContents-print-completed', true); + electronSocket.emit("webContents-print-completed", true); }); - socket.on('webContents-printToPDF', async (id, options = {}, path) => { + socket.on("webContents-printToPDF", async (id, options = {}, path) => { const buffer = await getWindowById(id).webContents.printToPDF(options); fs.writeFile(path, buffer, (error) => { if (error) { - electronSocket.emit('webContents-printToPDF-completed', false); + electronSocket.emit("webContents-printToPDF-completed", false); } else { - electronSocket.emit('webContents-printToPDF-completed', true); + electronSocket.emit("webContents-printToPDF-completed", true); } }); }); - 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-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) { + socket.on("webContents-getUrl", function (id) { const browserWindow = getWindowById(id); - electronSocket.emit('webContents-getUrl' + id, browserWindow.webContents.getURL()); + electronSocket.emit( + "webContents-getUrl" + id, + browserWindow.webContents.getURL() + ); }); - socket.on('webContents-session-allowNTLMCredentialsForDomains', (id, domains) => { - const browserWindow = getWindowById(id); - browserWindow.webContents.session.allowNTLMCredentialsForDomains(domains); - }); + socket.on( + "webContents-session-allowNTLMCredentialsForDomains", + (id, domains) => { + const browserWindow = getWindowById(id); + browserWindow.webContents.session.allowNTLMCredentialsForDomains(domains); + } + ); - socket.on('webContents-session-clearAuthCache', async (...args) => { + socket.on("webContents-session-clearAuthCache", async (...args) => { // Overload support: (id, guid) OR (id, options, guid) const browserWindow = getWindowById(args[0]); let guid: string; - if (args.length ===2) { + if (args.length === 2) { // No options guid = args[1]; await browserWindow.webContents.session.clearAuthCache(); - } else if (args.length ===3) { + } else if (args.length === 3) { const options = args[1]; guid = args[2]; try { + // @ts-ignore await browserWindow.webContents.session.clearAuthCache(options); } catch { // Fallback to clearing without options if Electron version rejects custom options @@ -157,199 +179,258 @@ export = (socket: Socket) => { } else { return; // invalid invocation } - electronSocket.emit('webContents-session-clearAuthCache-completed' + guid); + electronSocket.emit("webContents-session-clearAuthCache-completed" + guid); }); - socket.on('webContents-session-clearCache', async (id, guid) => { + socket.on("webContents-session-clearCache", async (id, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearCache(); - electronSocket.emit('webContents-session-clearCache-completed' + guid); + electronSocket.emit("webContents-session-clearCache-completed" + guid); }); - socket.on('webContents-session-clearHostResolverCache', async (id, guid) => { + socket.on("webContents-session-clearHostResolverCache", async (id, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearHostResolverCache(); - electronSocket.emit('webContents-session-clearHostResolverCache-completed' + guid); + electronSocket.emit( + "webContents-session-clearHostResolverCache-completed" + guid + ); }); - socket.on('webContents-session-clearStorageData', async (id, guid) => { + socket.on("webContents-session-clearStorageData", async (id, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.clearStorageData({}); - electronSocket.emit('webContents-session-clearStorageData-completed' + guid); + electronSocket.emit( + "webContents-session-clearStorageData-completed" + guid + ); }); - socket.on('webContents-session-clearStorageData-options', async (id, options, guid) => { - const browserWindow = getWindowById(id); - await browserWindow.webContents.session.clearStorageData(options); + socket.on( + "webContents-session-clearStorageData-options", + async (id, options, guid) => { + const browserWindow = getWindowById(id); + await browserWindow.webContents.session.clearStorageData(options); - electronSocket.emit('webContents-session-clearStorageData-options-completed' + guid); - }); + electronSocket.emit( + "webContents-session-clearStorageData-options-completed" + guid + ); + } + ); - socket.on('webContents-session-createInterruptedDownload', (id, options) => { + socket.on("webContents-session-createInterruptedDownload", (id, options) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.createInterruptedDownload(options); }); - socket.on('webContents-session-disableNetworkEmulation', (id) => { + socket.on("webContents-session-disableNetworkEmulation", (id) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.disableNetworkEmulation(); }); - socket.on('webContents-session-enableNetworkEmulation', (id, options) => { + socket.on("webContents-session-enableNetworkEmulation", (id, options) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.enableNetworkEmulation(options); }); - socket.on('webContents-session-flushStorageData', (id) => { + socket.on("webContents-session-flushStorageData", (id) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.flushStorageData(); }); - socket.on('webContents-session-getBlobData', async (id, identifier, guid) => { + socket.on("webContents-session-getBlobData", async (id, identifier, guid) => { const browserWindow = getWindowById(id); - const buffer = await browserWindow.webContents.session.getBlobData(identifier); + const buffer = await browserWindow.webContents.session.getBlobData( + identifier + ); - electronSocket.emit('webContents-session-getBlobData-completed' + guid, buffer.buffer); + electronSocket.emit( + "webContents-session-getBlobData-completed" + guid, + buffer.buffer + ); }); - socket.on('webContents-session-getCacheSize', async (id, guid) => { + socket.on("webContents-session-getCacheSize", async (id, guid) => { const browserWindow = getWindowById(id); const size = await browserWindow.webContents.session.getCacheSize(); - electronSocket.emit('webContents-session-getCacheSize-completed' + guid, size); + electronSocket.emit( + "webContents-session-getCacheSize-completed" + guid, + size + ); }); - socket.on('webContents-session-getPreloads', (id, guid) => { + socket.on("webContents-session-getPreloads", (id, guid) => { const browserWindow = getWindowById(id); const preloads = browserWindow.webContents.session.getPreloads(); - electronSocket.emit('webContents-session-getPreloads-completed' + guid, preloads); + electronSocket.emit( + "webContents-session-getPreloads-completed" + guid, + preloads + ); }); - socket.on('webContents-session-getUserAgent', (id, guid) => { + socket.on("webContents-session-getUserAgent", (id, guid) => { const browserWindow = getWindowById(id); const userAgent = browserWindow.webContents.session.getUserAgent(); - electronSocket.emit('webContents-session-getUserAgent-completed' + guid, userAgent); + electronSocket.emit( + "webContents-session-getUserAgent-completed" + guid, + userAgent + ); }); - socket.on('webContents-session-resolveProxy', async (id, url, guid) => { + socket.on("webContents-session-resolveProxy", async (id, url, guid) => { const browserWindow = getWindowById(id); const proxy = await browserWindow.webContents.session.resolveProxy(url); - electronSocket.emit('webContents-session-resolveProxy-completed' + guid, proxy); + electronSocket.emit( + "webContents-session-resolveProxy-completed" + guid, + proxy + ); }); - socket.on('webContents-session-setDownloadPath', (id, path) => { + socket.on("webContents-session-setDownloadPath", (id, path) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.setDownloadPath(path); }); - socket.on('webContents-session-setPreloads', (id, preloads) => { + socket.on("webContents-session-setPreloads", (id, preloads) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.setPreloads(preloads); }); - socket.on('webContents-session-setProxy', async (id, configuration, guid) => { + socket.on("webContents-session-setProxy", async (id, configuration, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.setProxy(configuration); - electronSocket.emit('webContents-session-setProxy-completed' + guid); + electronSocket.emit("webContents-session-setProxy-completed" + guid); }); - socket.on('webContents-session-setUserAgent', (id, userAgent, acceptLanguages) => { - const browserWindow = getWindowById(id); - browserWindow.webContents.session.setUserAgent(userAgent, acceptLanguages); - }); + socket.on( + "webContents-session-setUserAgent", + (id, userAgent, acceptLanguages) => { + const browserWindow = getWindowById(id); + browserWindow.webContents.session.setUserAgent( + userAgent, + acceptLanguages + ); + } + ); - socket.on('register-webContents-session-webRequest-onBeforeRequest', (id, filter) => { + 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.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) => { + socket.on("register-webContents-session-cookies-changed", (id) => { const browserWindow = getWindowById(id); - browserWindow.webContents.session.cookies.removeAllListeners('changed'); - browserWindow.webContents.session.cookies.on('changed', (event, cookie, cause, removed) => { - electronSocket.emit('webContents-session-cookies-changed' + id, [cookie, cause, removed]); - }); + browserWindow.webContents.session.cookies.removeAllListeners("changed"); + browserWindow.webContents.session.cookies.on( + "changed", + (event, cookie, cause, removed) => { + electronSocket.emit("webContents-session-cookies-changed" + id, [ + cookie, + cause, + removed, + ]); + } + ); }); - socket.on('webContents-session-cookies-get', async (id, filter, guid) => { + socket.on("webContents-session-cookies-get", async (id, filter, guid) => { const browserWindow = getWindowById(id); const cookies = await browserWindow.webContents.session.cookies.get(filter); - electronSocket.emit('webContents-session-cookies-get-completed' + guid, cookies); + electronSocket.emit( + "webContents-session-cookies-get-completed" + guid, + cookies + ); }); - socket.on('webContents-session-cookies-set', async (id, details, guid) => { + socket.on("webContents-session-cookies-set", async (id, details, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.cookies.set(details); - electronSocket.emit('webContents-session-cookies-set-completed' + guid); + electronSocket.emit("webContents-session-cookies-set-completed" + guid); }); - socket.on('webContents-session-cookies-remove', async (id, url, name, guid) => { - const browserWindow = getWindowById(id); - await browserWindow.webContents.session.cookies.remove(url, name); + socket.on( + "webContents-session-cookies-remove", + async (id, url, name, guid) => { + const browserWindow = getWindowById(id); + await browserWindow.webContents.session.cookies.remove(url, name); - electronSocket.emit('webContents-session-cookies-remove-completed' + guid); - }); + electronSocket.emit( + "webContents-session-cookies-remove-completed" + guid + ); + } + ); - socket.on('webContents-session-cookies-flushStore', async (id, guid) => { + socket.on("webContents-session-cookies-flushStore", async (id, guid) => { const browserWindow = getWindowById(id); await browserWindow.webContents.session.cookies.flushStore(); - electronSocket.emit('webContents-session-cookies-flushStore-completed' + guid); + electronSocket.emit( + "webContents-session-cookies-flushStore-completed" + guid + ); }); - socket.on('webContents-loadURL', (id, url, options) => { + socket.on("webContents-loadURL", (id, url, options) => { const browserWindow = getWindowById(id); browserWindow.webContents .loadURL(url, options) .then(() => { - electronSocket.emit('webContents-loadURL-complete' + id); + electronSocket.emit("webContents-loadURL-complete" + id); }) .catch((error) => { console.error(error); - electronSocket.emit('webContents-loadURL-error' + id, error); + electronSocket.emit("webContents-loadURL-error" + id, error); }); }); - socket.on('webContents-insertCSS', (id, isBrowserWindow, path) => { + socket.on("webContents-insertCSS", (id, isBrowserWindow, path) => { if (isBrowserWindow) { const browserWindow = getWindowById(id); if (browserWindow) { - browserWindow.webContents.insertCSS(fs.readFileSync(path, 'utf8')); + browserWindow.webContents.insertCSS(fs.readFileSync(path, "utf8")); } } else { - const browserViews: BrowserView[] = (global['browserViews'] = global['browserViews'] || []) as BrowserView[]; + const browserViews: BrowserView[] = (global["browserViews"] = + global["browserViews"] || []) as BrowserView[]; let view: BrowserView = null; for (let i = 0; i < browserViews.length; i++) { - if (browserViews[i]['id'] + 1000 === id) { + if (browserViews[i]["id"] + 1000 === id) { view = browserViews[i]; break; } } if (view) { - view.webContents.insertCSS(fs.readFileSync(path, 'utf8')); + view.webContents.insertCSS(fs.readFileSync(path, "utf8")); } } }); - socket.on('webContents-session-getAllExtensions', (id) => { + socket.on("webContents-session-getAllExtensions", (id) => { const browserWindow = getWindowById(id); const extensionsList = browserWindow.webContents.session.getAllExtensions(); const chromeExtensionInfo = []; @@ -358,22 +439,36 @@ export = (socket: Socket) => { chromeExtensionInfo.push(extensionsList[key]); }); - electronSocket.emit('webContents-session-getAllExtensions-completed', chromeExtensionInfo); + electronSocket.emit( + "webContents-session-getAllExtensions-completed", + chromeExtensionInfo + ); }); - socket.on('webContents-session-removeExtension', (id, name) => { + socket.on("webContents-session-removeExtension", (id, name) => { const browserWindow = getWindowById(id); browserWindow.webContents.session.removeExtension(name); }); - socket.on('webContents-session-loadExtension', async (id, path, allowFileAccess = false) => { - const browserWindow = getWindowById(id); - const extension = await browserWindow.webContents.session.loadExtension(path, { allowFileAccess: allowFileAccess }); - - electronSocket.emit('webContents-session-loadExtension-completed', extension); - }); + socket.on( + "webContents-session-loadExtension", + async (id, path, allowFileAccess = false) => { + const browserWindow = getWindowById(id); + const extension = await browserWindow.webContents.session.loadExtension( + path, + { allowFileAccess: allowFileAccess } + ); + + electronSocket.emit( + "webContents-session-loadExtension-completed", + extension + ); + } + ); - function getWindowById(id: number): Electron.BrowserWindow | Electron.BrowserView { + function getWindowById( + id: number + ): Electron.BrowserWindow | Electron.BrowserView { if (id >= 1000) { return browserViewMediateService(id - 1000); } diff --git a/src/ElectronNET.Host/eslint.config.js b/src/ElectronNET.Host/eslint.config.js new file mode 100644 index 00000000..c91642f0 --- /dev/null +++ b/src/ElectronNET.Host/eslint.config.js @@ -0,0 +1,7 @@ +module.exports = [ + { + rules: { + // Add rules here. + } + } +]; \ No newline at end of file diff --git a/src/ElectronNET.Host/globals.d.ts b/src/ElectronNET.Host/globals.d.ts new file mode 100644 index 00000000..1570d942 --- /dev/null +++ b/src/ElectronNET.Host/globals.d.ts @@ -0,0 +1,5 @@ +// Ambient declarations to silence implicit any / global index usage +// Minimal surface expand only if further errors appear. +declare var browserViews: any; +declare var tray: any; +declare var electronsocket: any; diff --git a/src/ElectronNET.Host/package-lock.json b/src/ElectronNET.Host/package-lock.json index 4a45d86d..db517ef0 100644 --- a/src/ElectronNET.Host/package-lock.json +++ b/src/ElectronNET.Host/package-lock.json @@ -19,7 +19,7 @@ "devDependencies": { "@types/node": "^22.18", "electron": "^30.0.3", - "eslint": "^9.37.0", + "eslint": "^9.39.1", "typescript": "^5.9.3" } }, @@ -39,6 +39,7 @@ "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", @@ -60,6 +61,7 @@ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" }, @@ -78,6 +80,7 @@ "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, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -86,21 +89,23 @@ } }, "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==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, + "license": "MIT", "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==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.6", + "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -109,22 +114,24 @@ } }, "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==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.16.0" + "@eslint/core": "^0.17.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==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@types/json-schema": "^7.0.15" }, @@ -137,6 +144,7 @@ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -156,10 +164,11 @@ } }, "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==", + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", + "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -168,21 +177,23 @@ } }, "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==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, + "license": "Apache-2.0", "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==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.16.0", + "@eslint/core": "^0.17.0", "levn": "^0.4.1" }, "engines": { @@ -194,6 +205,7 @@ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=18.18.0" } @@ -203,6 +215,7 @@ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" @@ -216,6 +229,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -229,6 +243,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=18.18" }, @@ -242,6 +257,7 @@ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -252,13 +268,15 @@ "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==" + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" }, "node_modules/@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, + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.0" }, @@ -271,6 +289,7 @@ "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -282,6 +301,7 @@ "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": "*" } @@ -290,33 +310,38 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/http-cache-semantics": { "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 + "dev": true, + "license": "MIT" }, "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 + "dev": true, + "license": "MIT" }, "node_modules/@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, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/node": { - "version": "22.18.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.10.tgz", - "integrity": "sha512-anNG/V/Efn/YZY4pRzbACnKxNKoBng2VTFydVu8RRs5hQjikP8CQfaeAV59VFSCzKNp90mXiVXW2QzV56rwMrg==", + "version": "22.19.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.1.tgz", + "integrity": "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==", + "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } @@ -326,6 +351,7 @@ "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -335,6 +361,7 @@ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" @@ -344,6 +371,7 @@ "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==", + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -357,6 +385,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -369,6 +398,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -378,6 +408,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -394,6 +425,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -407,12 +439,14 @@ "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==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" }, "node_modules/async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "license": "MIT", "dependencies": { "lodash": "^4.17.14" } @@ -421,12 +455,14 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "license": "MIT", "engines": { "node": "^4.5.0 || >= 5.9" } @@ -437,6 +473,7 @@ "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, + "license": "MIT", "optional": true }, "node_modules/brace-expansion": { @@ -444,6 +481,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -454,6 +492,7 @@ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -462,6 +501,7 @@ "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==", + "license": "MIT", "dependencies": { "debug": "^4.3.4", "sax": "^1.2.4" @@ -475,6 +515,7 @@ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.6.0" } @@ -484,6 +525,7 @@ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dev": true, + "license": "MIT", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -502,6 +544,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -511,6 +554,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -527,6 +571,7 @@ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -539,6 +584,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -550,18 +596,21 @@ "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 + "dev": true, + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cookie": { "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" } @@ -570,6 +619,7 @@ "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -583,6 +633,7 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -595,12 +646,14 @@ "node_modules/dasherize": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", - "integrity": "sha512-APql/TZ6FdLEpf2z7/X2a2zyqK8juYtqaSVqxw9mYoQ64CXkfU15AeLh8pUszT8+fnYjgm6t0aIYpWKJbnLkuA==" + "integrity": "sha512-APql/TZ6FdLEpf2z7/X2a2zyqK8juYtqaSVqxw9mYoQ64CXkfU15AeLh8pUszT8+fnYjgm6t0aIYpWKJbnLkuA==", + "license": "MIT" }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -618,6 +671,7 @@ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -633,6 +687,7 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -644,13 +699,15 @@ "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 + "dev": true, + "license": "MIT" }, "node_modules/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, + "license": "MIT", "engines": { "node": ">=10" } @@ -660,6 +717,7 @@ "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, + "license": "MIT", "optional": true, "dependencies": { "es-define-property": "^1.0.0", @@ -678,6 +736,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "define-data-property": "^1.0.1", @@ -696,6 +755,7 @@ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/electron": { @@ -704,6 +764,7 @@ "integrity": "sha512-AhL7+mZ8Lg14iaNfoYTkXQ2qee8mmsQyllKdqxlpv/zrKgfxz6jNVtcRRbQtLxtF8yzcImWdfTQROpYiPumdbw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "@electron/get": "^2.0.0", "@types/node": "^20.9.0", @@ -724,6 +785,7 @@ "version": "6.6.2", "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.6.2.tgz", "integrity": "sha512-Cr4GDOkbAUqRHP5/oeOmH/L2Bn6+FQPxVLZtPbcmKZC63a1F3uu5EefYOssgZXG3u/zBlubbJ5PJdITdMVggbw==", + "license": "MIT", "dependencies": { "builder-util-runtime": "9.3.1", "fs-extra": "^10.1.0", @@ -739,6 +801,7 @@ "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==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -752,6 +815,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -763,6 +827,7 @@ "version": "7.7.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -774,15 +839,17 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/electron/node_modules/@types/node": { - "version": "20.19.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.21.tgz", - "integrity": "sha512-CsGG2P3I5y48RPMfprQGfy4JPRZ6csfC3ltBZSRItG3ngggmNY/qs2uZKp4p9VbrpqNNSMzUZNFZKzgOGnd/VA==", + "version": "20.19.25", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.25.tgz", + "integrity": "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } @@ -792,6 +859,7 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } @@ -800,6 +868,7 @@ "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/cors": "^2.8.12", "@types/node": ">=10.0.0", @@ -819,6 +888,7 @@ "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" } @@ -827,6 +897,7 @@ "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.3" }, @@ -844,6 +915,7 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -853,6 +925,7 @@ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">= 0.4" @@ -863,6 +936,7 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">= 0.4" @@ -873,6 +947,7 @@ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/escape-string-regexp": { @@ -880,6 +955,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -888,24 +964,24 @@ } }, "node_modules/eslint": { - "version": "9.37.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.37.0.tgz", - "integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==", + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", + "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, + "license": "MIT", "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/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.37.0", - "@eslint/plugin-kit": "^0.4.0", + "@eslint/js": "9.39.1", + "@eslint/plugin-kit": "^0.4.1", "@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", @@ -952,6 +1028,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -968,6 +1045,7 @@ "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, + "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -980,6 +1058,7 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", @@ -997,6 +1076,7 @@ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -1009,6 +1089,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -1021,6 +1102,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -1030,6 +1112,7 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -1039,6 +1122,7 @@ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -1058,25 +1142,29 @@ "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 + "dev": true, + "license": "MIT" }, "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 + "dev": true, + "license": "MIT" }, "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 + "dev": true, + "license": "MIT" }, "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, + "license": "MIT", "dependencies": { "pend": "~1.2.0" } @@ -1086,6 +1174,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^4.0.0" }, @@ -1098,6 +1187,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -1114,6 +1204,7 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" @@ -1126,13 +1217,15 @@ "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 + "dev": true, + "license": "ISC" }, "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, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -1147,6 +1240,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -1162,6 +1256,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -1174,6 +1269,7 @@ "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", "dev": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -1192,6 +1288,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, + "license": "ISC", "optional": true, "bin": { "semver": "bin/semver.js" @@ -1205,6 +1302,7 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -1217,6 +1315,7 @@ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "define-properties": "^1.2.1", @@ -1234,6 +1333,7 @@ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">= 0.4" @@ -1247,6 +1347,7 @@ "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -1270,13 +1371,15 @@ "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==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "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, + "license": "MIT", "engines": { "node": ">=8" } @@ -1286,6 +1389,7 @@ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "es-define-property": "^1.0.0" @@ -1298,13 +1402,15 @@ "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 + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/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, + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -1318,6 +1424,7 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -1326,6 +1433,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", + "license": "MIT", "dependencies": { "queue": "6.0.2" }, @@ -1341,6 +1449,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -1357,6 +1466,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -1364,13 +1474,15 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, "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, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1380,6 +1492,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -1391,6 +1504,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "license": "ISC", "dependencies": { "lodash.isfinite": "^3.3.2" } @@ -1399,12 +1513,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "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==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -1416,25 +1532,29 @@ "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 + "dev": true, + "license": "MIT" }, "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 + "dev": true, + "license": "MIT" }, "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 + "dev": true, + "license": "MIT" }, "node_modules/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, + "license": "ISC", "optional": true }, "node_modules/jsonfile": { @@ -1442,6 +1562,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -1451,6 +1572,7 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -1458,13 +1580,15 @@ "node_modules/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==" + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "license": "MIT" }, "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, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -1478,6 +1602,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -1491,35 +1616,41 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" }, "node_modules/lodash.escaperegexp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==" + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "license": "MIT" }, "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==", - "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead." + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" }, "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==" + "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==", + "license": "MIT" }, "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 + "dev": true, + "license": "MIT" }, "node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1529,6 +1660,7 @@ "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "escape-string-regexp": "^4.0.0" @@ -1541,6 +1673,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1549,6 +1682,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==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -1561,6 +1695,7 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -1570,6 +1705,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1580,18 +1716,21 @@ "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "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 + "dev": true, + "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==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1601,6 +1740,7 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -1612,6 +1752,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1621,6 +1762,7 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">= 0.4" @@ -1631,6 +1773,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -1640,6 +1783,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -1657,6 +1801,7 @@ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1666,6 +1811,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -1681,6 +1827,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -1696,6 +1843,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -1708,6 +1856,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1717,6 +1866,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1725,12 +1875,14 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/portscanner": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "license": "MIT", "dependencies": { "async": "^2.6.0", "is-number-like": "^1.0.3" @@ -1745,6 +1897,7 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -1754,6 +1907,7 @@ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -1763,6 +1917,7 @@ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -1773,6 +1928,7 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1781,6 +1937,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "license": "MIT", "dependencies": { "inherits": "~2.0.3" } @@ -1790,6 +1947,7 @@ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -1801,13 +1959,15 @@ "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 + "dev": true, + "license": "MIT" }, "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, + "license": "MIT", "engines": { "node": ">=4" } @@ -1817,6 +1977,7 @@ "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, + "license": "MIT", "dependencies": { "lowercase-keys": "^2.0.0" }, @@ -1829,6 +1990,7 @@ "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", "dev": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -1843,15 +2005,17 @@ } }, "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", + "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", + "license": "BlueOak-1.0.0" }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -1861,6 +2025,7 @@ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/serialize-error": { @@ -1868,6 +2033,7 @@ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "type-fest": "^0.13.1" @@ -1884,6 +2050,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -1896,6 +2063,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1904,6 +2072,7 @@ "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", @@ -1921,6 +2090,7 @@ "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": { "debug": "~4.3.4", "ws": "~8.17.1" @@ -1930,6 +2100,7 @@ "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.3" }, @@ -1946,6 +2117,7 @@ "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" @@ -1958,6 +2130,7 @@ "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.3" }, @@ -1974,6 +2147,7 @@ "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.3" }, @@ -1991,6 +2165,7 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true, + "license": "BSD-3-Clause", "optional": true }, "node_modules/strip-json-comments": { @@ -1998,6 +2173,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -2010,6 +2186,7 @@ "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "debug": "^4.1.0" }, @@ -2022,6 +2199,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2032,13 +2210,15 @@ "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==" + "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==", + "license": "MIT" }, "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, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -2051,6 +2231,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "optional": true, "engines": { "node": ">=10" @@ -2064,6 +2245,7 @@ "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" @@ -2075,13 +2257,15 @@ "node_modules/undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" }, "node_modules/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, + "license": "MIT", "engines": { "node": ">= 4.0.0" } @@ -2091,6 +2275,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -2099,6 +2284,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -2108,6 +2294,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -2123,6 +2310,7 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2131,12 +2319,14 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ws": { "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" }, @@ -2158,6 +2348,7 @@ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -2168,6 +2359,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/src/ElectronNET.Host/package.json b/src/ElectronNET.Host/package.json index 183fca0a..95bfc01c 100644 --- a/src/ElectronNET.Host/package.json +++ b/src/ElectronNET.Host/package.json @@ -6,23 +6,27 @@ "url": "https://github.com/ElectronNET/Electron.NET" }, "main": "main.js", - "author": "Gregor Biswanger, Florian Rappl", - "license": "MIT", + "type": "commonjs", "scripts": { + "build": "tsc --build", + "clean": "tsc --build --clean", "start": "tsc -p ." }, + "keywords": [], + "author": "Gregor Biswanger, Florian Rappl", + "license": "MIT", "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" + "dasherize": "^2.0.0", + "electron-host-hook": "file:./ElectronHostHook", + "image-size": "^1.2.1", + "portscanner": "^2.2.0", + "electron-updater": "^6.6.2", + "socket.io": "^4.8.1" }, "devDependencies": { - "@types/node": "^22.18", - "electron": "^30.0.3", - "eslint": "^9.37.0", - "typescript": "^5.9.3" + "@types/node": "^22.18", + "electron": "^30.0.3", + "eslint": "^9.39.1", + "typescript": "^5.9.3" } } diff --git a/src/ElectronNET.Host/scripts/blazor-preload.js b/src/ElectronNET.Host/scripts/blazor-preload.js new file mode 100644 index 00000000..e2754628 --- /dev/null +++ b/src/ElectronNET.Host/scripts/blazor-preload.js @@ -0,0 +1,2 @@ +global.process = undefined; +global.module = undefined; diff --git a/src/ElectronNET.Host/tsconfig.json b/src/ElectronNET.Host/tsconfig.json index 6c0db629..11f7ad5e 100644 --- a/src/ElectronNET.Host/tsconfig.json +++ b/src/ElectronNET.Host/tsconfig.json @@ -1,13 +1,29 @@ { + "exclude": [ + "node_modules", + "ElectronHostHook" + ], "compilerOptions": { "module": "commonjs", - "target": "ES2019", + "moduleResolution": "node", + "target": "es2020", + "lib": ["es2020"], + "types": ["node"], "sourceMap": true, + "strict": false, + "noImplicitAny": false, "skipLibCheck": true, - "newLine": "crlf" + "isolatedModules": false, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "baseUrl": ".", + "paths": { + "electron-updater": ["node_modules/electron-updater/dist/index.d.ts"] + } }, - "exclude": [ - "node_modules", - "ElectronHostHook" + "include": [ + "**/*.ts", + "types-shims.d.ts", + "globals.d.ts" ] -} \ No newline at end of file +} diff --git a/src/ElectronNET.Host/tsconfig.tsbuildinfo b/src/ElectronNET.Host/tsconfig.tsbuildinfo new file mode 100644 index 00000000..149ba25c --- /dev/null +++ b/src/ElectronNET.Host/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./globals.d.ts","./types-shims.d.ts","./api/app.ts","./api/autoupdater.ts","./api/browserview.ts","./api/browserwindows.ts","./api/clipboard.ts","./api/commandline.ts","./api/dialog.ts","./api/dock.ts","./api/globalshortcut.ts","./api/ipc.ts","./api/menu.ts","./api/nativetheme.ts","./api/notification.ts","./api/powermonitor.ts","./api/process.ts","./api/screen.ts","./api/shell.ts","./api/tray.ts","./api/webcontents.ts"],"version":"5.9.3"} \ No newline at end of file diff --git a/src/ElectronNET.Host/types-shims.d.ts b/src/ElectronNET.Host/types-shims.d.ts new file mode 100644 index 00000000..f6432a13 --- /dev/null +++ b/src/ElectronNET.Host/types-shims.d.ts @@ -0,0 +1,8 @@ +// Simplified ambient module declarations to silence unresolved external module TS errors +// and missing extended tsconfig references inside node_modules. +// This is internal only. +declare module 'electron-updater' { + export const autoUpdater: any; +} + +declare module '@ljharb/tsconfig'; diff --git a/src/ElectronNET.IntegrationTests/Common/SkipOnWslFactAttribute.cs b/src/ElectronNET.IntegrationTests/Common/SkipOnWslFactAttribute.cs new file mode 100644 index 00000000..8c1a3d02 --- /dev/null +++ b/src/ElectronNET.IntegrationTests/Common/SkipOnWslFactAttribute.cs @@ -0,0 +1,49 @@ +namespace ElectronNET.IntegrationTests.Common +{ + using System.Runtime.InteropServices; + + [AttributeUsage(AttributeTargets.Method)] + internal sealed class SkipOnWslFactAttribute : FactAttribute + { + private static readonly bool IsOnWsl; + + static SkipOnWslFactAttribute() + { + IsOnWsl = DetectWsl(); + } + + /// + /// Initializes a new instance of the class. + /// + public SkipOnWslFactAttribute() + { + if (IsOnWsl) + { + this.Skip = "Skipping test on WSL environment."; + } + } + + private static bool DetectWsl() + { + try + { + if (!RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + return false; + } + + if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("WSL_DISTRO_NAME")) || + !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("WSL_INTEROP"))) + { + return true; + } + + return false; + } + catch + { + return false; + } + } + } +} diff --git a/src/ElectronNET.IntegrationTests/ElectronFixture.cs b/src/ElectronNET.IntegrationTests/ElectronFixture.cs index 68a1ec9b..cfaf8df2 100644 --- a/src/ElectronNET.IntegrationTests/ElectronFixture.cs +++ b/src/ElectronNET.IntegrationTests/ElectronFixture.cs @@ -1,38 +1,65 @@ namespace ElectronNET.IntegrationTests { + using System.Diagnostics.CodeAnalysis; using System.Reflection; using ElectronNET.API; using ElectronNET.API.Entities; // Shared fixture that starts Electron runtime once + [SuppressMessage("ReSharper", "MethodHasAsyncOverload")] public class ElectronFixture : IAsyncLifetime { public BrowserWindow MainWindow { get; private set; } = null!; public async Task InitializeAsync() { - AppDomain.CurrentDomain.SetData("ElectronTestAssembly", Assembly.GetExecutingAssembly()); - var runtimeController = ElectronNetRuntime.RuntimeController; - await runtimeController.Start(); - await runtimeController.WaitReadyTask; - - // create hidden window for tests (avoid showing UI) - this.MainWindow = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions + try { - Show = false, - Width = 800, - Height = 600, - }); + Console.Error.WriteLine("[ElectronFixture] InitializeAsync: start"); + AppDomain.CurrentDomain.SetData("ElectronTestAssembly", Assembly.GetExecutingAssembly()); + + Console.WriteLine("[ElectronFixture] Acquire RuntimeController"); + var runtimeController = ElectronNetRuntime.RuntimeController; + ElectronNetRuntime.ElectronExtraArguments = "--no-sandbox"; + + Console.Error.WriteLine("[ElectronFixture] Starting Electron runtime..."); + await runtimeController.Start(); + + Console.Error.WriteLine("[ElectronFixture] Waiting for Ready..."); + await Task.WhenAny(runtimeController.WaitReadyTask, Task.Delay(TimeSpan.FromSeconds(10))); - // Clear potential cache side-effects - await this.MainWindow.WebContents.Session.ClearCacheAsync(); + if (!runtimeController.WaitReadyTask.IsCompleted) + { + throw new TimeoutException("The Electron process did not start within 10 seconds"); + } + + Console.Error.WriteLine("[ElectronFixture] Runtime Ready"); + + // create hidden window for tests (avoid showing UI) + this.MainWindow = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions + { + Show = false, + Width = 800, + Height = 600, + }, "about:blank"); + + await this.MainWindow.WebContents.Session.ClearCacheAsync(); + } + catch (Exception ex) + { + Console.Error.WriteLine("[ElectronFixture] InitializeAsync: exception"); + Console.Error.WriteLine(ex.ToString()); + throw; + } } public async Task DisposeAsync() { var runtimeController = ElectronNetRuntime.RuntimeController; + Console.Error.WriteLine("[ElectronFixture] Stopping Electron runtime..."); await runtimeController.Stop(); await runtimeController.WaitStoppedTask; + Console.Error.WriteLine("[ElectronFixture] Runtime stopped"); } } diff --git a/src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj b/src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj index 373440c2..c12d1e57 100644 --- a/src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj +++ b/src/ElectronNET.IntegrationTests/ElectronNET.IntegrationTests.csproj @@ -5,10 +5,10 @@ true - + - net8.0 + net10.0 enable enable false @@ -16,14 +16,14 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + @@ -37,6 +37,12 @@ false - + + + PreserveNewest + + + + diff --git a/src/ElectronNET.IntegrationTests/Tests/AppTests.cs b/src/ElectronNET.IntegrationTests/Tests/AppTests.cs index 4512f6b9..1a15efdb 100644 --- a/src/ElectronNET.IntegrationTests/Tests/AppTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/AppTests.cs @@ -1,10 +1,10 @@ namespace ElectronNET.IntegrationTests.Tests { - using System.Runtime.InteropServices; using ElectronNET.API; using ElectronNET.API.Entities; using System; using System.IO; + using System.Runtime.Versioning; using System.Threading.Tasks; [Collection("ElectronCollection")] @@ -12,6 +12,7 @@ public class AppTests { // ReSharper disable once NotAccessedField.Local private readonly ElectronFixture fx; + public AppTests(ElectronFixture fx) { this.fx = fx; @@ -46,28 +47,6 @@ public async Task Can_get_special_paths() Directory.Exists(temp).Should().BeTrue(); } - - [Fact(Timeout = 20000)] - public async Task Badge_count_roundtrip_where_supported() - { - if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - { - var ok = await Electron.App.SetBadgeCountAsync(3); - ok.Should().BeTrue(); - var count = await Electron.App.GetBadgeCountAsync(); - count.Should().Be(3); - // reset - await Electron.App.SetBadgeCountAsync(0); - } - else - { - // On Windows it's usually unsupported; ensure badge query works and returns a non-negative value - await Electron.App.SetBadgeCountAsync(0); // ignore return value - var count = await Electron.App.GetBadgeCountAsync(); - count.Should().BeGreaterOrEqualTo(0); - } - } - [Fact(Timeout = 20000)] public async Task Can_get_app_metrics() { @@ -83,21 +62,15 @@ public async Task Can_get_gpu_feature_status() status.Should().NotBeNull(); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task Can_get_login_item_settings() { var settings = await Electron.App.GetLoginItemSettingsAsync(); settings.Should().NotBeNull(); } - [Fact(Timeout = 20000)] - public async Task Can_set_app_logs_path() - { - var tempDir = Path.Combine(Path.GetTempPath(), "ElectronLogsTest" + Guid.NewGuid().ToString("N")); - Directory.CreateDirectory(tempDir); - Electron.App.SetAppLogsPath(tempDir); - } - [Fact(Timeout = 20000)] public async Task CommandLine_append_and_query_switch() { @@ -107,7 +80,9 @@ public async Task CommandLine_append_and_query_switch() (await Electron.App.CommandLine.GetSwitchValueAsync(switchName)).Should().Be("value123"); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task Accessibility_support_toggle() { Electron.App.SetAccessibilitySupportEnabled(true); @@ -126,13 +101,15 @@ public async Task UserAgentFallback_roundtrip() Electron.App.UserAgentFallback = original; // restore } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("macOS")] public async Task BadgeCount_set_and_reset_where_supported() { await Electron.App.SetBadgeCountAsync(2); var count = await Electron.App.GetBadgeCountAsync(); // Some platforms may always return0; just ensure call didn't throw and is non-negative - count.Should().BeGreaterOrEqualTo(0); + count.Should().BeGreaterThanOrEqualTo(0); await Electron.App.SetBadgeCountAsync(0); } @@ -143,17 +120,6 @@ public async Task App_metrics_have_cpu_info() metrics[0].Cpu.Should().NotBeNull(); } - [Fact(Timeout = 20000)] - public async Task App_badge_count_roundtrip() - { - // Set then get (non-mac platforms treat as no-op but should return0 or set value) - var success = await Electron.App.SetBadgeCountAsync(3); - success.Should().BeTrue(); - var count = await Electron.App.GetBadgeCountAsync(); - // Allow fallback to0 on platforms without badge support - (count ==3 || count ==0).Should().BeTrue(); - } - [Fact(Timeout = 20000)] public async Task App_gpu_feature_status_has_some_fields() { @@ -163,4 +129,4 @@ public async Task App_gpu_feature_status_has_some_fields() status.VideoDecode.Should().NotBeNull(); } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.IntegrationTests/Tests/AutoUpdaterTests.cs b/src/ElectronNET.IntegrationTests/Tests/AutoUpdaterTests.cs index 4da2734b..1bcb3c04 100644 --- a/src/ElectronNET.IntegrationTests/Tests/AutoUpdaterTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/AutoUpdaterTests.cs @@ -7,18 +7,19 @@ public class AutoUpdaterTests { private readonly ElectronFixture fx; + public AutoUpdaterTests(ElectronFixture fx) { this.fx = fx; } - + [Fact(Timeout = 20000)] public async Task AutoDownload_check() { Electron.AutoUpdater.AutoDownload = false; - var test1 = Electron.AutoUpdater.AutoDownload; + var test1 = Electron.AutoUpdater.AutoDownload; Electron.AutoUpdater.AutoDownload = true; - var test2 = Electron.AutoUpdater.AutoDownload; + var test2 = Electron.AutoUpdater.AutoDownload; test1.Should().BeFalse(); test2.Should().BeTrue(); } @@ -27,9 +28,9 @@ public async Task AutoDownload_check() public async Task AutoInstallOnAppQuit_check() { Electron.AutoUpdater.AutoInstallOnAppQuit = false; - var test1 = Electron.AutoUpdater.AutoInstallOnAppQuit; + var test1 = Electron.AutoUpdater.AutoInstallOnAppQuit; Electron.AutoUpdater.AutoInstallOnAppQuit = true; - var test2 = Electron.AutoUpdater.AutoInstallOnAppQuit; + var test2 = Electron.AutoUpdater.AutoInstallOnAppQuit; test1.Should().BeFalse(); test2.Should().BeTrue(); } @@ -38,9 +39,9 @@ public async Task AutoInstallOnAppQuit_check() public async Task AllowPrerelease_check() { Electron.AutoUpdater.AllowPrerelease = false; - var test1 = Electron.AutoUpdater.AllowPrerelease; + var test1 = Electron.AutoUpdater.AllowPrerelease; Electron.AutoUpdater.AllowPrerelease = true; - var test2 = Electron.AutoUpdater.AllowPrerelease; + var test2 = Electron.AutoUpdater.AllowPrerelease; test1.Should().BeFalse(); test2.Should().BeTrue(); } @@ -49,9 +50,9 @@ public async Task AllowPrerelease_check() public async Task FullChangelog_check() { Electron.AutoUpdater.FullChangelog = false; - var test1 = Electron.AutoUpdater.FullChangelog; + var test1 = Electron.AutoUpdater.FullChangelog; Electron.AutoUpdater.FullChangelog = true; - var test2 = Electron.AutoUpdater.FullChangelog; + var test2 = Electron.AutoUpdater.FullChangelog; test1.Should().BeFalse(); test2.Should().BeTrue(); } @@ -60,9 +61,9 @@ public async Task FullChangelog_check() public async Task AllowDowngrade_check() { Electron.AutoUpdater.AllowDowngrade = false; - var test1 = Electron.AutoUpdater.AllowDowngrade; + var test1 = Electron.AutoUpdater.AllowDowngrade; Electron.AutoUpdater.AllowDowngrade = true; - var test2 = Electron.AutoUpdater.AllowDowngrade; + var test2 = Electron.AutoUpdater.AllowDowngrade; test1.Should().BeFalse(); test2.Should().BeTrue(); } @@ -70,10 +71,10 @@ public async Task AllowDowngrade_check() [Fact(Timeout = 20000)] public async Task UpdateConfigPath_check() { - var test1 = Electron.AutoUpdater.UpdateConfigPath; + var test1 = Electron.AutoUpdater.UpdateConfigPath; test1.Should().Be(string.Empty); } - + [Fact(Timeout = 20000)] public async Task CurrentVersionAsync_check() { @@ -88,6 +89,7 @@ public async Task ChannelAsync_check() var test = await Electron.AutoUpdater.ChannelAsync; test.Should().Be(string.Empty); Electron.AutoUpdater.SetChannel = "beta"; + await Task.Delay(500); test = await Electron.AutoUpdater.ChannelAsync; test.Should().Be("beta"); } @@ -107,26 +109,26 @@ public async Task RequestHeadersAsync_check() test.Count.Should().Be(1); test["key1"].Should().Be("value1"); } - + [Fact(Timeout = 20000)] public async Task CheckForUpdatesAsync_check() { var test = await Electron.AutoUpdater.CheckForUpdatesAsync(); test.Should().BeNull(); } - + [Fact(Timeout = 20000)] public async Task CheckForUpdatesAndNotifyAsync_check() { var test = await Electron.AutoUpdater.CheckForUpdatesAsync(); test.Should().BeNull(); } - + [Fact(Timeout = 20000)] public async Task GetFeedURLAsync_check() { var test = await Electron.AutoUpdater.GetFeedURLAsync(); test.Should().Contain("Deprecated"); } - } -} + } +} \ No newline at end of file diff --git a/src/ElectronNET.IntegrationTests/Tests/BrowserViewTests.cs b/src/ElectronNET.IntegrationTests/Tests/BrowserViewTests.cs index 3e1b626f..8405da75 100644 --- a/src/ElectronNET.IntegrationTests/Tests/BrowserViewTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/BrowserViewTests.cs @@ -7,6 +7,7 @@ namespace ElectronNET.IntegrationTests.Tests public class BrowserViewTests { private readonly ElectronFixture fx; + public BrowserViewTests(ElectronFixture fx) { this.fx = fx; diff --git a/src/ElectronNET.IntegrationTests/Tests/BrowserWindowTests.cs b/src/ElectronNET.IntegrationTests/Tests/BrowserWindowTests.cs index e7e69021..6c0bd7e2 100644 --- a/src/ElectronNET.IntegrationTests/Tests/BrowserWindowTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/BrowserWindowTests.cs @@ -1,8 +1,10 @@ namespace ElectronNET.IntegrationTests.Tests { using System.Runtime.InteropServices; + using System.Runtime.Versioning; using ElectronNET.API; using ElectronNET.API.Entities; + using ElectronNET.IntegrationTests.Common; [Collection("ElectronCollection")] public class BrowserWindowTests @@ -19,6 +21,7 @@ public async Task Can_set_and_get_title() { const string title = "Integration Test Title"; this.fx.MainWindow.SetTitle(title); + await Task.Delay(500); var roundTrip = await this.fx.MainWindow.GetTitleAsync(); roundTrip.Should().Be(title); } @@ -27,6 +30,7 @@ public async Task Can_set_and_get_title() public async Task Can_resize_and_get_size() { this.fx.MainWindow.SetSize(643, 482); + await Task.Delay(500); var size = await this.fx.MainWindow.GetSizeAsync(); size.Should().HaveCount(2); size[0].Should().Be(643); @@ -42,7 +46,7 @@ public async Task Can_set_progress_bar_and_clear() await Task.Delay(50); } - [Fact(Timeout = 20000)] + [SkipOnWslFact(Timeout = 20000)] public async Task Can_set_and_get_position() { this.fx.MainWindow.SetPosition(134, 246); @@ -56,6 +60,7 @@ public async Task Can_set_and_get_bounds() { var bounds = new Rectangle { X = 10, Y = 20, Width = 400, Height = 300 }; this.fx.MainWindow.SetBounds(bounds); + await Task.Delay(500); var round = await this.fx.MainWindow.GetBoundsAsync(); round.Should().BeEquivalentTo(bounds); @@ -68,6 +73,7 @@ public async Task Can_set_and_get_content_bounds() { var bounds = new Rectangle { X = 0, Y = 0, Width = 300, Height = 200 }; this.fx.MainWindow.SetContentBounds(bounds); + await Task.Delay(500); var round = await this.fx.MainWindow.GetContentBoundsAsync(); round.Width.Should().BeGreaterThan(0); round.Height.Should().BeGreaterThan(0); @@ -77,8 +83,10 @@ public async Task Can_set_and_get_content_bounds() public async Task Show_hide_visibility_roundtrip() { this.fx.MainWindow.Show(); + await Task.Delay(500); (await this.fx.MainWindow.IsVisibleAsync()).Should().BeTrue(); this.fx.MainWindow.Hide(); + await Task.Delay(500); (await this.fx.MainWindow.IsVisibleAsync()).Should().BeFalse(); } @@ -86,32 +94,40 @@ public async Task Show_hide_visibility_roundtrip() public async Task AlwaysOnTop_toggle_and_query() { this.fx.MainWindow.SetAlwaysOnTop(true); + await Task.Delay(500); (await this.fx.MainWindow.IsAlwaysOnTopAsync()).Should().BeTrue(); this.fx.MainWindow.SetAlwaysOnTop(false); + await Task.Delay(500); (await this.fx.MainWindow.IsAlwaysOnTopAsync()).Should().BeFalse(); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] public async Task MenuBar_auto_hide_and_visibility() { this.fx.MainWindow.SetAutoHideMenuBar(true); + await Task.Delay(500); (await this.fx.MainWindow.IsMenuBarAutoHideAsync()).Should().BeTrue(); this.fx.MainWindow.SetMenuBarVisibility(false); + await Task.Delay(500); (await this.fx.MainWindow.IsMenuBarVisibleAsync()).Should().BeFalse(); this.fx.MainWindow.SetMenuBarVisibility(true); + await Task.Delay(500); (await this.fx.MainWindow.IsMenuBarVisibleAsync()).Should().BeTrue(); } [Fact(Timeout = 20000)] public async Task ReadyToShow_event_fires_after_content_ready() { - var window = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { Show = false }); + var window = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { Show = false }, "about:blank"); var tcs = new TaskCompletionSource(); window.OnReadyToShow += () => tcs.TrySetResult(); // Trigger a navigation and wait for DOM ready so the renderer paints, which emits ready-to-show var domReadyTcs = new TaskCompletionSource(); window.WebContents.OnDomReady += () => domReadyTcs.TrySetResult(); + await Task.Delay(500); await window.WebContents.LoadURLAsync("about:blank"); await domReadyTcs.Task; @@ -125,13 +141,14 @@ public async Task ReadyToShow_event_fires_after_content_ready() [Fact(Timeout = 20000)] public async Task PageTitleUpdated_event_fires_on_title_change() { - var window = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { Show = true }); + var window = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { Show = true }, "about:blank"); var tcs = new TaskCompletionSource(); window.OnPageTitleUpdated += title => tcs.TrySetResult(title); // Navigate and wait for DOM ready, then change the document.title to trigger the event var domReadyTcs = new TaskCompletionSource(); window.WebContents.OnDomReady += () => domReadyTcs.TrySetResult(); + await Task.Delay(500); await window.WebContents.LoadURLAsync("about:blank"); await domReadyTcs.Task; await window.WebContents.ExecuteJavaScriptAsync("document.title='NewTitle';"); @@ -145,9 +162,10 @@ public async Task PageTitleUpdated_event_fires_on_title_change() [Fact(Timeout = 20000)] public async Task Resize_event_fires_on_size_change() { - var window = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { Show = false }); + var window = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { Show = false }, "about:blank"); var resized = false; window.OnResize += () => resized = true; + await Task.Delay(500); window.SetSize(500, 400); await Task.Delay(300); resized.Should().BeTrue(); @@ -158,29 +176,38 @@ public async Task Progress_bar_and_always_on_top_toggle() { var win = this.fx.MainWindow; win.SetProgressBar(0.5); + await Task.Delay(50); win.SetProgressBar(0.8, new ProgressBarOptions { Mode = ProgressBarMode.normal }); + await Task.Delay(50); win.SetAlwaysOnTop(true); + await Task.Delay(500); (await win.IsAlwaysOnTopAsync()).Should().BeTrue(); win.SetAlwaysOnTop(false); + await Task.Delay(500); (await win.IsAlwaysOnTopAsync()).Should().BeFalse(); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("Linux")] + [SupportedOSPlatform("Windows")] public async Task Menu_bar_visibility_and_auto_hide() { var win = this.fx.MainWindow; win.SetAutoHideMenuBar(true); + await Task.Delay(500); (await win.IsMenuBarAutoHideAsync()).Should().BeTrue(); win.SetMenuBarVisibility(true); + await Task.Delay(500); (await win.IsMenuBarVisibleAsync()).Should().BeTrue(); } [Fact(Timeout = 20000)] public async Task Parent_child_relationship_roundtrip() { - var child = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { Show = false, Width = 300, Height = 200 }); + var child = await Electron.WindowManager.CreateWindowAsync(new BrowserWindowOptions { Show = false, Width = 300, Height = 200 }, "about:blank"); this.fx.MainWindow.SetParentWindow(null); // ensure top-level child.SetParentWindow(this.fx.MainWindow); + await Task.Delay(500); var parent = await child.GetParentWindowAsync(); parent.Id.Should().Be(this.fx.MainWindow.Id); var kids = await this.fx.MainWindow.GetChildWindowsAsync(); @@ -188,36 +215,28 @@ public async Task Parent_child_relationship_roundtrip() child.Destroy(); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("macOS")] public async Task Represented_filename_and_edited_flags() { var win = this.fx.MainWindow; var temp = Path.Combine(Path.GetTempPath(), "electronnet_test.txt"); File.WriteAllText(temp, "test"); win.SetRepresentedFilename(temp); + + await Task.Delay(500); + var represented = await win.GetRepresentedFilenameAsync(); - if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - represented.Should().Be(temp); - } - else - { - // Non-macOS platforms may not support represented filename; empty is acceptable - represented.Should().BeEmpty(); - } + represented.Should().Be(temp); win.SetDocumentEdited(true); + + await Task.Delay(500); + var edited = await win.IsDocumentEditedAsync(); - if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - edited.Should().BeTrue(); - } - else - { - edited.Should().BeFalse(); // unsupported on non-mac platforms - } + edited.Should().BeTrue(); win.SetDocumentEdited(false); } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.IntegrationTests/Tests/ClipboardTests.cs b/src/ElectronNET.IntegrationTests/Tests/ClipboardTests.cs index b3bd2dd1..17ff0dd6 100644 --- a/src/ElectronNET.IntegrationTests/Tests/ClipboardTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/ClipboardTests.cs @@ -1,5 +1,6 @@ namespace ElectronNET.IntegrationTests.Tests { + using System.Runtime.Versioning; using ElectronNET.API; [Collection("ElectronCollection")] @@ -31,7 +32,9 @@ public async Task Available_formats_contains_text_after_write() formats.Should().Contain(f => f.Contains("text") || f.Contains("TEXT") || f.Contains("plain")); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task Bookmark_write_and_read() { var url = "https://electron-test.com"; @@ -40,4 +43,4 @@ public async Task Bookmark_write_and_read() bookmark.Url.Should().Be(url); } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.IntegrationTests/Tests/CookiesTests.cs b/src/ElectronNET.IntegrationTests/Tests/CookiesTests.cs index 3113fe52..1cba009b 100644 --- a/src/ElectronNET.IntegrationTests/Tests/CookiesTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/CookiesTests.cs @@ -4,6 +4,7 @@ namespace ElectronNET.IntegrationTests.Tests public class CookiesTests { private readonly ElectronFixture fx; + public CookiesTests(ElectronFixture fx) { this.fx = fx; diff --git a/src/ElectronNET.IntegrationTests/Tests/IpcMainTests.cs b/src/ElectronNET.IntegrationTests/Tests/IpcMainTests.cs index 73901897..2596e9bd 100644 --- a/src/ElectronNET.IntegrationTests/Tests/IpcMainTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/IpcMainTests.cs @@ -6,6 +6,7 @@ namespace ElectronNET.IntegrationTests.Tests public class IpcMainTests { private readonly ElectronFixture fx; + public IpcMainTests(ElectronFixture fx) { this.fx = fx; diff --git a/src/ElectronNET.IntegrationTests/Tests/MenuTests.cs b/src/ElectronNET.IntegrationTests/Tests/MenuTests.cs index d40d8984..85a9d847 100644 --- a/src/ElectronNET.IntegrationTests/Tests/MenuTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/MenuTests.cs @@ -7,6 +7,7 @@ namespace ElectronNET.IntegrationTests.Tests public class MenuTests { private readonly ElectronFixture fx; + public MenuTests(ElectronFixture fx) { this.fx = fx; diff --git a/src/ElectronNET.IntegrationTests/Tests/NativeImageTests.cs b/src/ElectronNET.IntegrationTests/Tests/NativeImageTests.cs index da59c925..fd8cac8a 100644 --- a/src/ElectronNET.IntegrationTests/Tests/NativeImageTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/NativeImageTests.cs @@ -5,7 +5,7 @@ namespace ElectronNET.IntegrationTests.Tests { using System.Drawing; using ElectronNET.API.Entities; - + [SupportedOSPlatform("Windows")] public class NativeImageTests { diff --git a/src/ElectronNET.IntegrationTests/Tests/NativeThemeTests.cs b/src/ElectronNET.IntegrationTests/Tests/NativeThemeTests.cs index f6b8f5ce..4128a223 100644 --- a/src/ElectronNET.IntegrationTests/Tests/NativeThemeTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/NativeThemeTests.cs @@ -1,5 +1,6 @@ namespace ElectronNET.IntegrationTests.Tests { + using System.Runtime.Versioning; using ElectronNET.API; using ElectronNET.API.Entities; @@ -12,15 +13,19 @@ public async Task ThemeSource_roundtrip() // Capture initial _ = await Electron.NativeTheme.ShouldUseDarkColorsAsync(); // Force light + await Task.Delay(50); Electron.NativeTheme.SetThemeSource(ThemeSourceMode.Light); + await Task.Delay(500); var useDarkAfterLight = await Electron.NativeTheme.ShouldUseDarkColorsAsync(); var themeSourceLight = await Electron.NativeTheme.GetThemeSourceAsync(); // Force dark Electron.NativeTheme.SetThemeSource(ThemeSourceMode.Dark); + await Task.Delay(500); var useDarkAfterDark = await Electron.NativeTheme.ShouldUseDarkColorsAsync(); var themeSourceDark = await Electron.NativeTheme.GetThemeSourceAsync(); // Restore system Electron.NativeTheme.SetThemeSource(ThemeSourceMode.System); + await Task.Delay(500); var themeSourceSystem = await Electron.NativeTheme.GetThemeSourceAsync(); // Assertions are tolerant (platform dependent) useDarkAfterLight.Should().BeFalse("forcing Light should result in light colors"); @@ -45,19 +50,23 @@ public async Task Updated_event_fires_on_change() fired.Should().BeTrue(); } - - [Fact(Timeout = 20000)] + + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task Should_use_high_contrast_colors_check() { var metrics = await Electron.NativeTheme.ShouldUseHighContrastColorsAsync(); metrics.Should().Be(false); } - - [Fact(Timeout = 20000)] + + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("macOS")] + [SupportedOSPlatform("Windows")] public async Task Should_use_inverted_colors_check() { var metrics = await Electron.NativeTheme.ShouldUseInvertedColorSchemeAsync(); metrics.Should().Be(false); } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.IntegrationTests/Tests/NotificationTests.cs b/src/ElectronNET.IntegrationTests/Tests/NotificationTests.cs index c192dcea..a974bdc2 100644 --- a/src/ElectronNET.IntegrationTests/Tests/NotificationTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/NotificationTests.cs @@ -1,19 +1,24 @@ namespace ElectronNET.IntegrationTests.Tests { + using System.Runtime.InteropServices; using ElectronNET.API; using ElectronNET.API.Entities; [Collection("ElectronCollection")] public class NotificationTests { - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] public async Task Notification_create_check() { + Skip.If(RuntimeInformation.IsOSPlatform(OSPlatform.Linux), "Always returns false. Might need full-blown desktop environment"); + var tcs = new TaskCompletionSource(); var options = new NotificationOptions("Notification Title", "Notification test 123"); options.OnShow = () => tcs.SetResult(); + await Task.Delay(500); + Electron.Notification.Show(options); await Task.WhenAny(tcs.Task, Task.Delay(5_000)); @@ -21,9 +26,11 @@ public async Task Notification_create_check() tcs.Task.IsCompletedSuccessfully.Should().BeTrue(); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] public async Task Notification_is_supported_check() { + Skip.If(RuntimeInformation.IsOSPlatform(OSPlatform.Linux), "Always returns false. Might need full-blown desktop environment"); + var supported = await Electron.Notification.IsSupportedAsync(); supported.Should().BeTrue(); } diff --git a/src/ElectronNET.IntegrationTests/Tests/ProcessTests.cs b/src/ElectronNET.IntegrationTests/Tests/ProcessTests.cs index d581c3b4..3fe27248 100644 --- a/src/ElectronNET.IntegrationTests/Tests/ProcessTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/ProcessTests.cs @@ -9,7 +9,7 @@ public class ProcessTests public async Task Process_info_is_accessible() { // Use renderer to fetch process info and round-trip - var execPath = await Electron.WindowManager.CreateWindowAsync(new API.Entities.BrowserWindowOptions { Show = false }); + var execPath = await Electron.WindowManager.CreateWindowAsync(new API.Entities.BrowserWindowOptions { Show = false }, "about:blank"); var result = await execPath.WebContents.ExecuteJavaScriptAsync("process.execPath && process.platform ? 'ok' : 'fail'"); result.Should().Be("ok"); } @@ -19,41 +19,39 @@ public async Task Process_properties_are_populated() { var execPath = await Electron.Process.ExecPathAsync; execPath.Should().NotBeNullOrWhiteSpace(); - + var pid = await Electron.Process.PidAsync; pid.Should().BeGreaterThan(0); - + var platform = await Electron.Process.PlatformAsync; platform.Should().NotBeNullOrWhiteSpace(); - + var argv = await Electron.Process.ArgvAsync; argv.Should().NotBeNull(); argv.Length.Should().BeGreaterThan(0); - + var type = await Electron.Process.TypeAsync; type.Should().NotBeNullOrWhiteSpace(); - + var version = await Electron.Process.VersionsAsync; version.Should().NotBeNull(); version.Chrome.Should().NotBeNullOrWhiteSpace(); version.Electron.Should().NotBeNullOrWhiteSpace(); - + var defaultApp = await Electron.Process.DefaultAppAsync; defaultApp.Should().BeTrue(); - + var isMainFrame = await Electron.Process.IsMainFrameAsync; isMainFrame.Should().BeFalse(); - + var resourcePath = await Electron.Process.ResourcesPathAsync; resourcePath.Should().NotBeNullOrWhiteSpace(); var upTime = await Electron.Process.UpTimeAsync; upTime.Should().BeGreaterThan(0); - + var arch = await Electron.Process.ArchAsync; arch.Should().NotBeNullOrWhiteSpace(); - } - } } \ No newline at end of file diff --git a/src/ElectronNET.IntegrationTests/Tests/ScreenTests.cs b/src/ElectronNET.IntegrationTests/Tests/ScreenTests.cs index 1cdb5347..2ecf9ecb 100644 --- a/src/ElectronNET.IntegrationTests/Tests/ScreenTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/ScreenTests.cs @@ -1,8 +1,9 @@ -using ElectronNET.API.Entities; - namespace ElectronNET.IntegrationTests.Tests { + using System.Runtime.Versioning; using ElectronNET.API; + using ElectronNET.API.Entities; + using ElectronNET.IntegrationTests.Common; [Collection("ElectronCollection")] public class ScreenTests @@ -15,7 +16,7 @@ public ScreenTests(ElectronFixture fx) this.fx = fx; } - [Fact(Timeout = 20000)] + [SkipOnWslFact(Timeout = 20000)] public async Task Primary_display_has_positive_dimensions() { var display = await Electron.Screen.GetPrimaryDisplayAsync(); @@ -23,7 +24,7 @@ public async Task Primary_display_has_positive_dimensions() display.Size.Height.Should().BeGreaterThan(0); } - [Fact(Timeout = 20000)] + [SkipOnWslFact(Timeout = 20000)] public async Task GetAllDisplays_returns_at_least_one() { var displays = await Electron.Screen.GetAllDisplaysAsync(); @@ -40,7 +41,8 @@ public async Task GetCursorScreenPoint_check() point.Y.Should().BeGreaterThanOrEqualTo(0); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("macOS")] public async Task GetMenuBarWorkArea_check() { var area = await Electron.Screen.GetMenuBarWorkAreaAsync(); @@ -51,7 +53,7 @@ public async Task GetMenuBarWorkArea_check() area.Width.Should().BeGreaterThan(0); } - [Fact(Timeout = 20000)] + [SkipOnWslFact(Timeout = 20000)] public async Task GetDisplayNearestPoint_check() { var point = new Point @@ -64,8 +66,8 @@ public async Task GetDisplayNearestPoint_check() display.Size.Width.Should().BeGreaterThan(0); display.Size.Height.Should().BeGreaterThan(0); } - - [Fact(Timeout = 20000)] + + [SkipOnWslFact(Timeout = 20000)] public async Task GetDisplayMatching_check() { var rectangle = new Rectangle @@ -81,4 +83,4 @@ public async Task GetDisplayMatching_check() display.Size.Height.Should().BeGreaterThan(0); } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.IntegrationTests/Tests/ShellTests.cs b/src/ElectronNET.IntegrationTests/Tests/ShellTests.cs index e81c762c..ff185db1 100644 --- a/src/ElectronNET.IntegrationTests/Tests/ShellTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/ShellTests.cs @@ -5,7 +5,7 @@ namespace ElectronNET.IntegrationTests.Tests [Collection("ElectronCollection")] public class ShellTests { - [Fact(Timeout = 20000)] + [Fact(Skip = "This can keep the test process hanging until the e-mail window is closed")] public async Task OpenExternal_invalid_scheme_returns_error_or_empty() { var error = await Electron.Shell.OpenExternalAsync("mailto:test@example.com"); diff --git a/src/ElectronNET.IntegrationTests/Tests/ThumbarButtonTests.cs b/src/ElectronNET.IntegrationTests/Tests/ThumbarButtonTests.cs index 2ba58b14..15253bd5 100644 --- a/src/ElectronNET.IntegrationTests/Tests/ThumbarButtonTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/ThumbarButtonTests.cs @@ -1,6 +1,6 @@ namespace ElectronNET.IntegrationTests.Tests { - using System.Runtime.InteropServices; + using System.Runtime.Versioning; using ElectronNET.API.Entities; [Collection("ElectronCollection")] @@ -13,7 +13,8 @@ public ThumbarButtonTests(ElectronFixture fx) this.fx = fx; } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("Windows")] public async Task SetThumbarButtons_returns_success() { var btn = new ThumbarButton("icon.png") { Tooltip = "Test" }; @@ -21,14 +22,10 @@ public async Task SetThumbarButtons_returns_success() success.Should().BeTrue(); } - [Fact(Timeout = 20000)] + [SkippableFact(Timeout = 20000)] + [SupportedOSPlatform("Windows")] public async Task Thumbar_button_click_invokes_callback() { - if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - return; // only meaningful on Windows taskbar - } - var icon = Path.Combine(Directory.GetCurrentDirectory(), "ElectronNET.WebApp", "wwwroot", "icon.png"); if (!File.Exists(icon)) { @@ -41,4 +38,4 @@ public async Task Thumbar_button_click_invokes_callback() ok.Should().BeTrue(); } } -} \ No newline at end of file +} diff --git a/src/ElectronNET.IntegrationTests/Tests/TrayTests.cs b/src/ElectronNET.IntegrationTests/Tests/TrayTests.cs index c52a9137..f5b07ff1 100644 --- a/src/ElectronNET.IntegrationTests/Tests/TrayTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/TrayTests.cs @@ -7,6 +7,7 @@ public class TrayTests { // ReSharper disable once NotAccessedField.Local private readonly ElectronFixture fx; + public TrayTests(ElectronFixture fx) { this.fx = fx; diff --git a/src/ElectronNET.IntegrationTests/Tests/WebContentsTests.cs b/src/ElectronNET.IntegrationTests/Tests/WebContentsTests.cs index c7bdde7a..a3d62b29 100644 --- a/src/ElectronNET.IntegrationTests/Tests/WebContentsTests.cs +++ b/src/ElectronNET.IntegrationTests/Tests/WebContentsTests.cs @@ -71,11 +71,11 @@ public async Task Can_basic_print() var ok = await this.fx.MainWindow.WebContents.PrintAsync(new PrintOptions { Silent = true, PrintBackground = true }); ok.Should().BeTrue(); } - + [SkippableFact(Timeout = 20000)] public async Task GetPrintersAsync_check() { - Skip.If(Environment.GetEnvironmentVariable("GITHUB_TOKEN") != null, "Skipping printer test in CI environment."); + Skip.If(Environment.GetEnvironmentVariable("GITHUB_TOKEN") != null, "Skipping printer test in CI environment."); var info = await fx.MainWindow.WebContents.GetPrintersAsync(); info.Should().NotBeNull(); } diff --git a/src/ElectronNET.IntegrationTests/xunit.runner.json b/src/ElectronNET.IntegrationTests/xunit.runner.json new file mode 100644 index 00000000..9283731d --- /dev/null +++ b/src/ElectronNET.IntegrationTests/xunit.runner.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json", + "methodDisplay": "method", + "diagnosticMessages": true, + "parallelizeTestCollections": false, + "longRunningTestSeconds": 60 +} diff --git a/src/ElectronNET.WebApp/Controllers/HomeController.cs b/src/ElectronNET.WebApp/Controllers/HomeController.cs index e4dfa304..45c4d875 100644 --- a/src/ElectronNET.WebApp/Controllers/HomeController.cs +++ b/src/ElectronNET.WebApp/Controllers/HomeController.cs @@ -10,38 +10,22 @@ public IActionResult Index() { if (HybridSupport.IsElectronActive) { - Electron.PowerMonitor.OnLockScreen += () => + if (OperatingSystem.IsMacOS() || OperatingSystem.IsWindows()) { - Console.WriteLine("Screen Locked detected from C#"); - }; + Electron.PowerMonitor.OnLockScreen += () => { Console.WriteLine("Screen Locked detected from C#"); }; - Electron.PowerMonitor.OnUnLockScreen += () => - { - Console.WriteLine("Screen unlocked detected from C# "); - }; + Electron.PowerMonitor.OnUnLockScreen += () => { Console.WriteLine("Screen unlocked detected from C# "); }; - Electron.PowerMonitor.OnSuspend += () => - { - Console.WriteLine("The system is going to sleep"); - }; + Electron.PowerMonitor.OnSuspend += () => { Console.WriteLine("The system is going to sleep"); }; - Electron.PowerMonitor.OnResume += () => - { - Console.WriteLine("The system is resuming"); - }; + Electron.PowerMonitor.OnResume += () => { Console.WriteLine("The system is resuming"); }; - Electron.PowerMonitor.OnAC += () => - { - Console.WriteLine("The system changes to AC power"); - }; - - Electron.PowerMonitor.OnBattery += () => - { - Console.WriteLine("The system is about to change to battery power"); - }; + Electron.PowerMonitor.OnAC += () => { Console.WriteLine("The system changes to AC power"); }; + Electron.PowerMonitor.OnBattery += () => { Console.WriteLine("The system is about to change to battery power"); }; + } } - + return View(); } } diff --git a/src/ElectronNET.WebApp/Controllers/HostHookController.cs b/src/ElectronNET.WebApp/Controllers/HostHookController.cs index bfc5291f..db7a52e6 100644 --- a/src/ElectronNET.WebApp/Controllers/HostHookController.cs +++ b/src/ElectronNET.WebApp/Controllers/HostHookController.cs @@ -16,7 +16,7 @@ public IActionResult Index() var mainWindow = Electron.WindowManager.BrowserWindows.First(); var options = new OpenDialogOptions { - Properties = new OpenDialogProperty[] + Properties = new OpenDialogProperty[] { OpenDialogProperty.openDirectory } diff --git a/src/ElectronNET.WebApp/Controllers/UpdateController.cs b/src/ElectronNET.WebApp/Controllers/UpdateController.cs index 1f2c8919..e145ec77 100644 --- a/src/ElectronNET.WebApp/Controllers/UpdateController.cs +++ b/src/ElectronNET.WebApp/Controllers/UpdateController.cs @@ -31,7 +31,7 @@ public IActionResult Index() { // Electron.NET CLI Command for deploy: // electronize build /target win /electron-params --publish=always - + var currentVersion = await Electron.App.GetVersionAsync(); var updateCheckResult = await Electron.AutoUpdater.CheckForUpdatesAndNotifyAsync(); var availableVersion = updateCheckResult.UpdateInfo.Version; diff --git a/src/ElectronNET.WebApp/ElectronHostHook/connector.ts b/src/ElectronNET.WebApp/ElectronHostHook/connector.ts index 7ba9c0b3..55125575 100644 --- a/src/ElectronNET.WebApp/ElectronHostHook/connector.ts +++ b/src/ElectronNET.WebApp/ElectronHostHook/connector.ts @@ -1,7 +1,7 @@ import { Socket } from 'socket.io'; -export class Connector { - constructor(private socket: Socket, +export class Connector { + constructor(private socket: Socket, public app: any) { } on(key: string, javaScriptCode: Function): void { diff --git a/src/ElectronNET.WebApp/ElectronHostHook/package-lock.json b/src/ElectronNET.WebApp/ElectronHostHook/package-lock.json index 289cba32..4582c86f 100644 --- a/src/ElectronNET.WebApp/ElectronHostHook/package-lock.json +++ b/src/ElectronNET.WebApp/ElectronHostHook/package-lock.json @@ -1269,9 +1269,9 @@ "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==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "dependencies": { "argparse": "^2.0.1" @@ -3017,9 +3017,9 @@ "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==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "requires": { "argparse": "^2.0.1" diff --git a/src/ElectronNET.WebApp/ElectronNET.WebApp.csproj b/src/ElectronNET.WebApp/ElectronNET.WebApp.csproj index 15a0acc1..9b849f89 100644 --- a/src/ElectronNET.WebApp/ElectronNET.WebApp.csproj +++ b/src/ElectronNET.WebApp/ElectronNET.WebApp.csproj @@ -5,7 +5,7 @@ true - + net8.0 @@ -42,6 +42,10 @@ true ElectronHostHook/tsconfig.json + + true + true + @@ -71,11 +75,11 @@ - - + + - + \ No newline at end of file diff --git a/src/ElectronNET.WebApp/Program.cs b/src/ElectronNET.WebApp/Program.cs index 9adf2ea0..d3a36968 100644 --- a/src/ElectronNET.WebApp/Program.cs +++ b/src/ElectronNET.WebApp/Program.cs @@ -55,39 +55,42 @@ private static void AddDevelopmentTests() }); }); - Electron.Dock.SetMenu(new[] + if (System.OperatingSystem.IsMacOS()) { - new MenuItem + Electron.Dock.SetMenu(new[] { - Type = MenuType.normal, - Label = "MenuItem", - Click = () => + new MenuItem { - Electron.Notification.Show(new NotificationOptions( - "Dock MenuItem Click", - "A menu item added to the Dock was selected;")); + 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 { - new MenuItem + Type = MenuType.submenu, + Label = "SubMenu", + Submenu = new[] { - Type = MenuType.normal, - Label = "Sub MenuItem", - Click = () => + new MenuItem { - Electron.Notification.Show(new NotificationOptions( - "Dock Sub MenuItem Click", - "A menu item added to the Dock was selected;")); + 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.sln b/src/ElectronNET.sln index 3f46f97b..6cadc125 100644 --- a/src/ElectronNET.sln +++ b/src/ElectronNET.sln @@ -1,38 +1,20 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.12.35707.178 +# Visual Studio Version 18 +VisualStudioVersion = 18.0.11205.157 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElectronNET.WebApp", "ElectronNET.WebApp\ElectronNET.WebApp.csproj", "{7C048379-401C-4345-B5E7-BE232DEA8157}" + ProjectSection(ProjectDependencies) = postProject + {1C5FD66E-A1C6-C436-DF7C-3ECE4FEDDFE6} = {1C5FD66E-A1C6-C436-DF7C-3ECE4FEDDFE6} + {8860606D-6847-F22A-5AED-DF4E0984DD24} = {8860606D-6847-F22A-5AED-DF4E0984DD24} + EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElectronNET.API", "ElectronNET.API\ElectronNET.API.csproj", "{A78157BA-B754-45F1-969F-D6A513CA0E72}" EndProject -Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "ElectronNET.Host", "ElectronNET.Host\", "{B33E9B82-B6B4-4DB0-B6EE-61CC34641518}" - ProjectSection(WebsiteProperties) = preProject - TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.8" - Debug.AspNetCompiler.VirtualPath = "/localhost_56840" - Debug.AspNetCompiler.PhysicalPath = "ElectronNET.Host\" - Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_56840\" - Debug.AspNetCompiler.Updateable = "true" - Debug.AspNetCompiler.ForceOverwrite = "true" - Debug.AspNetCompiler.FixedNames = "false" - Debug.AspNetCompiler.Debug = "True" - Release.AspNetCompiler.VirtualPath = "/localhost_56840" - Release.AspNetCompiler.PhysicalPath = "ElectronNET.Host\" - Release.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_56840\" - Release.AspNetCompiler.Updateable = "true" - Release.AspNetCompiler.ForceOverwrite = "true" - Release.AspNetCompiler.FixedNames = "false" - Release.AspNetCompiler.Debug = "False" - VWDPort = "56840" - 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}" @@ -48,6 +30,10 @@ 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}" + ProjectSection(ProjectDependencies) = postProject + {1C5FD66E-A1C6-C436-DF7C-3ECE4FEDDFE6} = {1C5FD66E-A1C6-C436-DF7C-3ECE4FEDDFE6} + {8860606D-6847-F22A-5AED-DF4E0984DD24} = {8860606D-6847-F22A-5AED-DF4E0984DD24} + EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{1BB6F634-2831-4496-83A6-BC6761DCEC8D}" EndProject @@ -70,6 +56,11 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test Projects", "Test Projects", "{75129C45-FC6F-41B0-A485-07F4A7E031ED}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElectronNET.IntegrationTests", "ElectronNET.IntegrationTests\ElectronNET.IntegrationTests.csproj", "{AE877E48-6B44-63C2-8EA0-DB58D096B553}" + ProjectSection(ProjectDependencies) = postProject + {1C5FD66E-A1C6-C436-DF7C-3ECE4FEDDFE6} = {1C5FD66E-A1C6-C436-DF7C-3ECE4FEDDFE6} + EndProjectSection +EndProject +Project("{54A90642-561A-4BB1-A94E-469ADEE60C69}") = "ElectronNET.Host", "ElectronNET.Host\ElectronNET.Host.esproj", "{1C5FD66E-A1C6-C436-DF7C-3ECE4FEDDFE6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -85,10 +76,6 @@ 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 - {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}.Release|Any CPU.ActiveCfg = Release|Any CPU {829FC339-4785-4229-ABA5-53ADB544DA00}.Release|Any CPU.Build.0 = Release|Any CPU @@ -112,6 +99,12 @@ Global {AE877E48-6B44-63C2-8EA0-DB58D096B553}.Debug|Any CPU.Build.0 = Debug|Any CPU {AE877E48-6B44-63C2-8EA0-DB58D096B553}.Release|Any CPU.ActiveCfg = Release|Any CPU {AE877E48-6B44-63C2-8EA0-DB58D096B553}.Release|Any CPU.Build.0 = Release|Any CPU + {1C5FD66E-A1C6-C436-DF7C-3ECE4FEDDFE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C5FD66E-A1C6-C436-DF7C-3ECE4FEDDFE6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C5FD66E-A1C6-C436-DF7C-3ECE4FEDDFE6}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {1C5FD66E-A1C6-C436-DF7C-3ECE4FEDDFE6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C5FD66E-A1C6-C436-DF7C-3ECE4FEDDFE6}.Release|Any CPU.Build.0 = Release|Any CPU + {1C5FD66E-A1C6-C436-DF7C-3ECE4FEDDFE6}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -119,7 +112,6 @@ Global 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} @@ -127,6 +119,7 @@ Global {015CB06B-6CAE-209F-E050-21C3ACA5FE9F} = {985D39A7-5216-4945-8167-2FD0CB387BD8} {06CAADC7-DE5B-47B4-AB2A-E9501459A2D1} = {D36CDFFD-3438-42E4-A7FF-88BA19AC4964} {AE877E48-6B44-63C2-8EA0-DB58D096B553} = {75129C45-FC6F-41B0-A485-07F4A7E031ED} + {1C5FD66E-A1C6-C436-DF7C-3ECE4FEDDFE6} = {1BB6F634-2831-4496-83A6-BC6761DCEC8D} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {81A62E71-9E04-4EFE-AD5C-23165375F8EF} diff --git a/src/ElectronNET.sln.DotSettings b/src/ElectronNET.sln.DotSettings new file mode 100644 index 00000000..1eab21f2 --- /dev/null +++ b/src/ElectronNET.sln.DotSettings @@ -0,0 +1,7 @@ + + False + False + True + True + True + True \ No newline at end of file diff --git a/src/ElectronNET/build/ElectronNET.Core.props b/src/ElectronNET/build/ElectronNET.Core.props index c9e1eedf..29d2c913 100644 --- a/src/ElectronNET/build/ElectronNET.Core.props +++ b/src/ElectronNET/build/ElectronNET.Core.props @@ -1,6 +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 + + + \ No newline at end of file diff --git a/src/ElectronNET/build/ElectronNET.Core.targets b/src/ElectronNET/build/ElectronNET.Core.targets index 4bee5104..04022f71 100644 --- a/src/ElectronNET/build/ElectronNET.Core.targets +++ b/src/ElectronNET/build/ElectronNET.Core.targets @@ -1,6 +1,26 @@ - + + win + $(Title) + $(PackageId) + - + + <_IsMsAspNetProject>False + <_IsMsAspNetProject Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true'">True + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/ElectronNET/build/ElectronNET.props b/src/ElectronNET/build/ElectronNET.props deleted file mode 100644 index f616fbbd..00000000 --- a/src/ElectronNET/build/ElectronNET.props +++ /dev/null @@ -1,32 +0,0 @@ - - - - - 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 deleted file mode 100644 index 518cdb78..00000000 --- a/src/ElectronNET/build/ElectronNET.targets +++ /dev/null @@ -1,26 +0,0 @@ - - - - - win - $(Title) - $(PackageId) - - - - <_IsMsAspNetProject>False - <_IsMsAspNetProject Condition="'$(UsingMicrosoftNETSdkWeb)' == 'true'">True - - - - - - - - - - - - - - diff --git a/src/common.props b/src/common.props index 4773795a..554f4bf8 100644 --- a/src/common.props +++ b/src/common.props @@ -1,6 +1,6 @@ - 0.1.0 + 0.2.0 ElectronNET.Core Gregor Biswanger, Florian Rappl, softworkz Electron.NET @@ -14,16 +14,6 @@ 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)$(VersionPostFix) diff --git a/src/testEnvironments.json b/src/testEnvironments.json new file mode 100644 index 00000000..1208edc7 --- /dev/null +++ b/src/testEnvironments.json @@ -0,0 +1,17 @@ +{ + "version": "1", + "environments": [ + // See https://aka.ms/remotetesting for more details + // about how to configure remote environments. + { + "name": "WSL Ubuntu", + "type": "wsl", + "wslDistribution": "UbuFresh" + } + //{ + // "name": "Docker dotnet/sdk", + // "type": "docker", + // "dockerImage": "mcr.microsoft.com/dotnet/sdk" + //} + ] +} \ No newline at end of file