Skip to content

Commit 7adbc4d

Browse files
authored
Merge branch 'trunk' into mri-rbe
2 parents 072bc5e + 7ca11b9 commit 7adbc4d

59 files changed

Lines changed: 603 additions & 316 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.bazelrc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,16 @@ build --enable_runfiles
2020
build --flag_alias=pin_browsers=//common:pin_browsers
2121
build --flag_alias=headless=//common:headless
2222

23-
# Set the default java toolchain
23+
# Set the default java toolchain.
24+
# When bumping these, also update java_runtime in //common/remote-build/java to match.
2425
build --java_language_version=25
2526
build --java_runtime_version=remotejdk_25
2627
build --tool_java_language_version=25
2728
build --tool_java_runtime_version=remotejdk_25
2829

30+
# Silence protobuf sun.misc.Unsafe warnings from the JDK 25 Java compile workers.
31+
build --extra_toolchains=//common/remote-build/java:java-toolchain_definition
32+
2933
# We target java 11 by default
3034
build --javacopt="--release 11"
3135

.github/workflows/bazel.yml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,14 @@ jobs:
171171
- name: Setup Fluxbox and Xvfb
172172
if: inputs.needs-display && inputs.os == 'ubuntu'
173173
run: |
174-
sudo apt-get update && sudo apt-get -y install fluxbox
174+
sudo apt-get update && sudo apt-get -y install fluxbox x11-utils
175175
Xvfb :99 &
176+
# X server must start before fluxbox
177+
for _ in $(seq 1 30); do
178+
xdpyinfo -display :99 >/dev/null 2>&1 && break
179+
sleep 0.5
180+
done
181+
xdpyinfo -display :99 >/dev/null 2>&1 || { echo "::error::X server :99 failed to start"; exit 1; }
176182
fluxbox -display :99 &
177183
echo "DISPLAY=:99" >> "$GITHUB_ENV"
178184
- name: Set resolution
@@ -196,7 +202,7 @@ jobs:
196202
- name: Delete browsers and drivers
197203
if: inputs.os == 'ubuntu' || inputs.os == 'macos'
198204
run: ./scripts/github-actions/delete-browsers-drivers.sh
199-
- name: Delete browsers and drivers (Windows)
205+
- name: Delete drivers (Windows)
200206
if: inputs.os == 'windows'
201207
shell: pwsh
202208
run: ./scripts/github-actions/delete-browsers-drivers.ps1

.github/workflows/ci-python.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,19 @@ jobs:
8585
rerun-with-debug: true
8686
run: |
8787
bazel test --local_test_jobs 1 --flaky_test_attempts 3 //py:test-${{ matrix.browser }}
88+
89+
selenium-manager-tests:
90+
name: Selenium Manager Tests
91+
needs: build
92+
uses: ./.github/workflows/bazel.yml
93+
strategy:
94+
fail-fast: false
95+
matrix:
96+
os: [ubuntu, windows, macos]
97+
with:
98+
name: Integration Tests Selenium Manager (${{ matrix.os }})
99+
needs-display: true
100+
os: ${{ matrix.os }}
101+
rerun-with-debug: true
102+
run: |
103+
bazel test --local_test_jobs 1 --flaky_test_attempts 3 --pin_browsers=false --build_tests_only --test_tag_filters=se-manager //py/...

Rakefile

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,17 @@ task :format do |_task, arguments|
143143
Rake::Task['all:format'].invoke(*args)
144144
end
145145

146-
desc 'Run linters (may auto-fix some issues; stricter checks than :format)'
147-
task :lint do
148-
puts 'Linting shell scripts and GitHub Actions...'
146+
def lint_actions
149147
shellcheck = Bazel.execute('build', [], '@multitool//tools/shellcheck')
150148
Bazel.execute('run', ['--', '-shellcheck', shellcheck], '@multitool//tools/actionlint:cwd')
149+
end
151150

152-
Rake::Task['all:lint'].invoke
151+
desc 'Run linters (may auto-fix some issues; stricter checks than :format)'
152+
task :lint do
153+
SeleniumRake.aggregate_errors(
154+
shellcheck_and_actionlint: -> { lint_actions },
155+
all: -> { Rake::Task['all:lint'].invoke }
156+
)
153157
end
154158

155159
# Legacy aliases - call namespaced tasks
@@ -215,24 +219,18 @@ namespace :all do
215219
desc 'Validate release credentials for all languages'
216220
task :check_credentials do |_task, arguments|
217221
args = arguments.to_a
218-
failures = []
219-
%w[java py rb dotnet node].each do |lang|
220-
Rake::Task["#{lang}:check_credentials"].invoke(*args)
221-
rescue StandardError => e
222-
failures << "#{lang}: #{e.message}"
222+
steps = %w[java py rb dotnet node].to_h do |lang|
223+
[lang.to_sym, -> { Rake::Task["#{lang}:check_credentials"].invoke(*args) }]
223224
end
224-
raise "Credential check failed:\n#{failures.join("\n")}" unless failures.empty?
225+
SeleniumRake.aggregate_errors(**steps)
225226
end
226227

227228
desc 'Verify all packages are published to their registries'
228229
task :verify do
229-
failures = []
230-
%w[java py rb dotnet node].each do |lang|
231-
Rake::Task["#{lang}:verify"].invoke
232-
rescue StandardError => e
233-
failures << "#{lang}: #{e.message}"
230+
steps = %w[java py rb dotnet node].to_h do |lang|
231+
[lang.to_sym, -> { Rake::Task["#{lang}:verify"].invoke }]
234232
end
235-
raise "Verification failed:\n#{failures.join("\n")}" unless failures.empty?
233+
SeleniumRake.aggregate_errors(**steps)
236234
end
237235

238236
desc 'Release all artifacts for all language bindings'
@@ -257,15 +255,10 @@ namespace :all do
257255

258256
desc 'Run linters for all language bindings'
259257
task :lint do
260-
all_langs = %w[java py rb dotnet node]
261-
failures = []
262-
all_langs.each do |lang|
263-
puts "Linting #{lang}..."
264-
Rake::Task["#{lang}:lint"].invoke
265-
rescue StandardError => e
266-
failures << "#{lang}: #{e.message}"
258+
steps = %w[java py rb dotnet node].to_h do |lang|
259+
[lang.to_sym, -> { Rake::Task["#{lang}:lint"].invoke }]
267260
end
268-
raise "Lint failed:\n#{failures.join("\n")}" unless failures.empty?
261+
SeleniumRake.aggregate_errors(**steps)
269262
end
270263

271264
desc 'Update versions for all language bindings'
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
load("@rules_java//toolchains:default_java_toolchain.bzl", "DEFAULT_TOOLCHAIN_CONFIGURATION", "default_java_toolchain")
2+
3+
package(default_visibility = ["//visibility:public"])
4+
5+
# Quiet protobuf's sun.misc.Unsafe warnings spammed by the JDK 25 compile workers.
6+
_SILENCE_UNSAFE_WARNING = ["--sun-misc-unsafe-memory-access=allow"]
7+
8+
default_java_toolchain(
9+
name = "java-toolchain",
10+
configuration = DEFAULT_TOOLCHAIN_CONFIGURATION | {
11+
"java_runtime": "@rules_java//toolchains:remotejdk_25",
12+
"jvm_opts": DEFAULT_TOOLCHAIN_CONFIGURATION["jvm_opts"] + _SILENCE_UNSAFE_WARNING,
13+
"turbine_jvm_opts": DEFAULT_TOOLCHAIN_CONFIGURATION["turbine_jvm_opts"] + _SILENCE_UNSAFE_WARNING,
14+
},
15+
toolchain_definition = False,
16+
)
17+
18+
# No version target_setting, so it applies regardless of --java_language_version.
19+
toolchain(
20+
name = "java-toolchain_definition",
21+
toolchain = ":java-toolchain",
22+
toolchain_type = "@bazel_tools//tools/jdk:toolchain_type",
23+
)

common/repositories.bzl

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ def pin_browsers():
1111

1212
http_archive(
1313
name = "linux_firefox",
14-
url = "https://ftp.mozilla.org/pub/firefox/releases/151.0.2/linux-x86_64/en-US/firefox-151.0.2.tar.xz",
15-
sha256 = "1f77a1aacc2a0ccbb36998875f04a9c22229103dc35cb4bbb89784f0809161e0",
14+
url = "https://ftp.mozilla.org/pub/firefox/releases/151.0.3/linux-x86_64/en-US/firefox-151.0.3.tar.xz",
15+
sha256 = "b2405272cc3a8dde0fadeb5cea2b1fb03fc0a181b3015bd60985a63b04e70ed7",
1616
build_file_content = """
1717
load("@aspect_rules_js//js:defs.bzl", "js_library")
1818
package(default_visibility = ["//visibility:public"])
@@ -33,8 +33,8 @@ js_library(
3333

3434
dmg_archive(
3535
name = "mac_firefox",
36-
url = "https://ftp.mozilla.org/pub/firefox/releases/151.0.2/mac/en-US/Firefox%20151.0.2.dmg",
37-
sha256 = "232631dd169b8a4fc661a7a6756da3910cc669ba34b81858b7915ca138752e79",
36+
url = "https://ftp.mozilla.org/pub/firefox/releases/151.0.3/mac/en-US/Firefox%20151.0.3.dmg",
37+
sha256 = "60d5cb29412b161c76ecc58f3f8a960cd0048081cf84c6fe91579f1957564277",
3838
build_file_content = """
3939
load("@aspect_rules_js//js:defs.bzl", "js_library")
4040
package(default_visibility = ["//visibility:public"])
@@ -50,8 +50,8 @@ js_library(
5050

5151
http_archive(
5252
name = "linux_beta_firefox",
53-
url = "https://ftp.mozilla.org/pub/firefox/releases/152.0b5/linux-x86_64/en-US/firefox-152.0b5.tar.xz",
54-
sha256 = "c9215e26c5ee9d08ab7afbd04b7605f18a77beba062d3c013629c27860d5c106",
53+
url = "https://ftp.mozilla.org/pub/firefox/releases/152.0b8/linux-x86_64/en-US/firefox-152.0b8.tar.xz",
54+
sha256 = "930f7979bee3b06962fc0d468ee96ff3d5cdaa8c6d48d204e324fdd55315b18c",
5555
build_file_content = """
5656
load("@aspect_rules_js//js:defs.bzl", "js_library")
5757
package(default_visibility = ["//visibility:public"])
@@ -72,8 +72,8 @@ js_library(
7272

7373
dmg_archive(
7474
name = "mac_beta_firefox",
75-
url = "https://ftp.mozilla.org/pub/firefox/releases/152.0b5/mac/en-US/Firefox%20152.0b5.dmg",
76-
sha256 = "595f550d5e7c6230ec783777a6b4de287a73ea87b8fad739ad9c301f2d899ca0",
75+
url = "https://ftp.mozilla.org/pub/firefox/releases/152.0b8/mac/en-US/Firefox%20152.0b8.dmg",
76+
sha256 = "ac32904e4db06c9476b0fffc54ed86a9415911619b971f3bd9b45c4eab4f4e00",
7777
build_file_content = """
7878
load("@aspect_rules_js//js:defs.bzl", "js_library")
7979
package(default_visibility = ["//visibility:public"])
@@ -89,8 +89,8 @@ js_library(
8989

9090
http_archive(
9191
name = "linux_geckodriver",
92-
url = "https://github.com/mozilla/geckodriver/releases/download/v0.36.0/geckodriver-v0.36.0-linux64.tar.gz",
93-
sha256 = "0bde38707eb0a686a20c6bd50f4adcc7d60d4f73c60eb83ee9e0db8f65823e04",
92+
url = "https://github.com/mozilla/geckodriver/releases/download/v0.37.0/geckodriver-v0.37.0-linux64.tar.gz",
93+
sha256 = "90d4e33bd9816684400c160d1309aaffec23a3f65103511d5a62d8501062e548",
9494
build_file_content = """
9595
load("@aspect_rules_js//js:defs.bzl", "js_library")
9696
package(default_visibility = ["//visibility:public"])
@@ -106,8 +106,8 @@ js_library(
106106

107107
http_archive(
108108
name = "mac_geckodriver",
109-
url = "https://github.com/mozilla/geckodriver/releases/download/v0.36.0/geckodriver-v0.36.0-macos-aarch64.tar.gz",
110-
sha256 = "c045c8c0d859e6045defbb1c31b37ebeb3c942fc61daaf11e21fc634f2d71c52",
109+
url = "https://github.com/mozilla/geckodriver/releases/download/v0.37.0/geckodriver-v0.37.0-macos-aarch64.tar.gz",
110+
sha256 = "369165b614164f8adc43d8e017f55fe1ced208afe474be2f0cc1c01fc6529725",
111111
build_file_content = """
112112
load("@aspect_rules_js//js:defs.bzl", "js_library")
113113
package(default_visibility = ["//visibility:public"])
@@ -123,10 +123,10 @@ js_library(
123123

124124
pkg_archive(
125125
name = "mac_edge",
126-
url = "https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/eff0de67-2c4d-45ce-b8e2-f1ce8c69c595/MicrosoftEdge-148.0.3967.96.pkg",
127-
sha256 = "d2056a5eb9972b7d7a3cb34fbfa313b43c2ddcd9c7282b1bbba7a48b55028087",
126+
url = "https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/20523184-11bb-436b-a567-0e33fcaff5f2/MicrosoftEdge-149.0.4022.52.pkg",
127+
sha256 = "d5c2e2616d8f397bda51b13fbcb87497cbc988662add896ffac4a093dd144195",
128128
move = {
129-
"MicrosoftEdge-148.0.3967.96.pkg/Payload/Microsoft Edge.app": "Edge.app",
129+
"MicrosoftEdge-149.0.4022.52.pkg/Payload/Microsoft Edge.app": "Edge.app",
130130
},
131131
build_file_content = """
132132
load("@aspect_rules_js//js:defs.bzl", "js_library")
@@ -143,8 +143,8 @@ js_library(
143143

144144
deb_archive(
145145
name = "linux_edge",
146-
url = "https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/microsoft-edge-stable_148.0.3967.96-1_amd64.deb",
147-
sha256 = "ff447b27cb72767e033d38c5814709bd3b1eccadb32ac2a45f0fffdea8a5af49",
146+
url = "https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/microsoft-edge-stable_149.0.4022.52-1_amd64.deb",
147+
sha256 = "de51617f1912f343f9f5d934d25a41a7ef0820552f4842551864df020871c388",
148148
build_file_content = """
149149
load("@aspect_rules_js//js:defs.bzl", "js_library")
150150
package(default_visibility = ["//visibility:public"])
@@ -165,8 +165,8 @@ js_library(
165165

166166
http_archive(
167167
name = "linux_edgedriver",
168-
url = "https://msedgedriver.microsoft.com/148.0.3967.96/edgedriver_linux64.zip",
169-
sha256 = "b4f53b446acd6801396117eee46bdd100ea8a6110e6c1d8d3bb421d8dff4d5b8",
168+
url = "https://msedgedriver.microsoft.com/149.0.4022.52/edgedriver_linux64.zip",
169+
sha256 = "edf675b58fd133c0a36d9575f37a2b71ca6bf9e299c188bce89245a96dd3648b",
170170
build_file_content = """
171171
load("@aspect_rules_js//js:defs.bzl", "js_library")
172172
package(default_visibility = ["//visibility:public"])
@@ -182,8 +182,8 @@ js_library(
182182

183183
http_archive(
184184
name = "mac_edgedriver",
185-
url = "https://msedgedriver.microsoft.com/148.0.3967.96/edgedriver_mac64_m1.zip",
186-
sha256 = "934a9aa94bd3faa60773507e65c3ea75f45d571bf24a229256638f9c88bf97aa",
185+
url = "https://msedgedriver.microsoft.com/149.0.4022.52/edgedriver_mac64_m1.zip",
186+
sha256 = "1433027e3ef2bb847ca1ad77cb5235d7ef215fea287827ecdd644d0c69435fb3",
187187
build_file_content = """
188188
load("@aspect_rules_js//js:defs.bzl", "js_library")
189189
package(default_visibility = ["//visibility:public"])
@@ -199,8 +199,8 @@ js_library(
199199

200200
http_archive(
201201
name = "linux_chrome",
202-
url = "https://storage.googleapis.com/chrome-for-testing-public/148.0.7778.178/linux64/chrome-linux64.zip",
203-
sha256 = "05b6843867b4ee40f280327b748397a158b84ccbe20b94c3e89740d15422988f",
202+
url = "https://storage.googleapis.com/chrome-for-testing-public/149.0.7827.54/linux64/chrome-linux64.zip",
203+
sha256 = "a77e3ba8fa8cf299a1a980313a162ea1a5d33297f632d5d3c7f553f7cf6780d4",
204204
build_file_content = """
205205
load("@aspect_rules_js//js:defs.bzl", "js_library")
206206
package(default_visibility = ["//visibility:public"])
@@ -220,8 +220,8 @@ js_library(
220220
)
221221
http_archive(
222222
name = "mac_chrome",
223-
url = "https://storage.googleapis.com/chrome-for-testing-public/148.0.7778.178/mac-arm64/chrome-mac-arm64.zip",
224-
sha256 = "2d6a26edcbdd39d38ddfe7a0f11cb315eea7d0c5bbf2e3200ecdaa2855bc2bf5",
223+
url = "https://storage.googleapis.com/chrome-for-testing-public/149.0.7827.54/mac-arm64/chrome-mac-arm64.zip",
224+
sha256 = "376b22526a92345db188f8750be8a5abc45d1c8dda3805bfe89bf3327a10062f",
225225
strip_prefix = "chrome-mac-arm64",
226226
patch_cmds = [
227227
"mv 'Google Chrome for Testing.app' Chrome.app",
@@ -241,8 +241,8 @@ js_library(
241241
)
242242
http_archive(
243243
name = "linux_chromedriver",
244-
url = "https://storage.googleapis.com/chrome-for-testing-public/148.0.7778.178/linux64/chromedriver-linux64.zip",
245-
sha256 = "8fd9b1efe5c97191690d1e90f5d61eb323d82b44e38da09e65fecf9bbed86730",
244+
url = "https://storage.googleapis.com/chrome-for-testing-public/149.0.7827.54/linux64/chromedriver-linux64.zip",
245+
sha256 = "27a25d270195552a75e72c86d425b39e4bd1da51d7a6df9fc9071629e3a0acbf",
246246
strip_prefix = "chromedriver-linux64",
247247
build_file_content = """
248248
load("@aspect_rules_js//js:defs.bzl", "js_library")
@@ -259,8 +259,8 @@ js_library(
259259

260260
http_archive(
261261
name = "mac_chromedriver",
262-
url = "https://storage.googleapis.com/chrome-for-testing-public/148.0.7778.178/mac-arm64/chromedriver-mac-arm64.zip",
263-
sha256 = "7be431042c78b6452ee0684afa2e3f0838653266503557513613362aeea7a4b8",
262+
url = "https://storage.googleapis.com/chrome-for-testing-public/149.0.7827.54/mac-arm64/chromedriver-mac-arm64.zip",
263+
sha256 = "58cb81188172ecf2db41f7704538942017ebc9e1bdb822151f9721c7066849c2",
264264
strip_prefix = "chromedriver-mac-arm64",
265265
build_file_content = """
266266
load("@aspect_rules_js//js:defs.bzl", "js_library")
@@ -277,8 +277,8 @@ js_library(
277277

278278
http_archive(
279279
name = "linux_beta_chrome",
280-
url = "https://storage.googleapis.com/chrome-for-testing-public/149.0.7827.54/linux64/chrome-linux64.zip",
281-
sha256 = "a77e3ba8fa8cf299a1a980313a162ea1a5d33297f632d5d3c7f553f7cf6780d4",
280+
url = "https://storage.googleapis.com/chrome-for-testing-public/150.0.7871.5/linux64/chrome-linux64.zip",
281+
sha256 = "71b143f17eb6eeefb07bcee867f42d39942940b8e6bb57072410235a5fd7215c",
282282
build_file_content = """
283283
load("@aspect_rules_js//js:defs.bzl", "js_library")
284284
package(default_visibility = ["//visibility:public"])
@@ -298,8 +298,8 @@ js_library(
298298
)
299299
http_archive(
300300
name = "mac_beta_chrome",
301-
url = "https://storage.googleapis.com/chrome-for-testing-public/149.0.7827.54/mac-arm64/chrome-mac-arm64.zip",
302-
sha256 = "376b22526a92345db188f8750be8a5abc45d1c8dda3805bfe89bf3327a10062f",
301+
url = "https://storage.googleapis.com/chrome-for-testing-public/150.0.7871.5/mac-arm64/chrome-mac-arm64.zip",
302+
sha256 = "24975dcc97ede4093437e84d8a05d270a7cc176e86d9fd64ad91fc705694d20e",
303303
strip_prefix = "chrome-mac-arm64",
304304
patch_cmds = [
305305
"mv 'Google Chrome for Testing.app' Chrome.app",
@@ -319,8 +319,8 @@ js_library(
319319
)
320320
http_archive(
321321
name = "linux_beta_chromedriver",
322-
url = "https://storage.googleapis.com/chrome-for-testing-public/149.0.7827.54/linux64/chromedriver-linux64.zip",
323-
sha256 = "27a25d270195552a75e72c86d425b39e4bd1da51d7a6df9fc9071629e3a0acbf",
322+
url = "https://storage.googleapis.com/chrome-for-testing-public/150.0.7871.5/linux64/chromedriver-linux64.zip",
323+
sha256 = "98552d432041578e922d91065fcee2536ececa6b3c3b8a9a01686636bca8763a",
324324
strip_prefix = "chromedriver-linux64",
325325
build_file_content = """
326326
load("@aspect_rules_js//js:defs.bzl", "js_library")
@@ -337,8 +337,8 @@ js_library(
337337

338338
http_archive(
339339
name = "mac_beta_chromedriver",
340-
url = "https://storage.googleapis.com/chrome-for-testing-public/149.0.7827.54/mac-arm64/chromedriver-mac-arm64.zip",
341-
sha256 = "58cb81188172ecf2db41f7704538942017ebc9e1bdb822151f9721c7066849c2",
340+
url = "https://storage.googleapis.com/chrome-for-testing-public/150.0.7871.5/mac-arm64/chromedriver-mac-arm64.zip",
341+
sha256 = "144c0245b33c58b62b31a120b008a677977400c7982729a86823b22580510710",
342342
strip_prefix = "chromedriver-mac-arm64",
343343
build_file_content = """
344344
load("@aspect_rules_js//js:defs.bzl", "js_library")

dotnet/src/webdriver/BiDi/Broker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ private void ProcessReceivedMessage(ReadOnlySpan<byte> data)
263263
var propName = reader.GetString()!;
264264
reader.Read();
265265
additionalMessageData ??= [];
266-
additionalMessageData[propName] = JsonSerializer.Deserialize<JsonElement>(ref reader);
266+
additionalMessageData[propName] = JsonElement.ParseValue(ref reader);
267267
}
268268

269269
reader.Skip();

dotnet/src/webdriver/BiDi/Input/SourceActions.cs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,7 @@ public interface ISourceAction;
4141
public interface IKeySourceAction : ISourceAction;
4242

4343
public sealed record KeySourceActions(string Id, ImmutableArray<IKeySourceAction> Actions)
44-
: SourceActions<IKeySourceAction>(Id, Actions)
45-
{
46-
[Obsolete("This helper method will be removed in a future version. Use KeyDownAction and KeyUpAction directly instead.")]
47-
public KeySourceActions Type(string text) => this with
48-
{
49-
Actions = [.. Actions, .. text.SelectMany<char, IKeySourceAction>(c => [new KeyDownAction(c), new KeyUpAction(c)])]
50-
};
51-
}
44+
: SourceActions<IKeySourceAction>(Id, Actions);
5245

5346
[JsonPolymorphic(TypeDiscriminatorPropertyName = "type")]
5447
[JsonDerivedType(typeof(PauseAction), "pause")]

0 commit comments

Comments
 (0)