summary refs log tree commit diff
path: root/ReferenceClientProxyImplementation/Patches/Implementations/JSPatches/NullCoalescingPatch.cs
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2026-02-23 02:03:20 +0100
committerRory& <root@rory.gay>2026-02-23 02:03:20 +0100
commit77a609758bb80bac9497d2e3988550f8be578407 (patch)
tree991a9d258ca4fece1132a1a344d0fe11e3b03d51 /ReferenceClientProxyImplementation/Patches/Implementations/JSPatches/NullCoalescingPatch.cs
downloadReferenceClientProxyImplementation-master.tar.xz
Initial commit HEAD master
Diffstat (limited to '')
-rw-r--r--ReferenceClientProxyImplementation/Patches/Implementations/JSPatches/NullCoalescingPatch.cs32
1 files changed, 32 insertions, 0 deletions
diff --git a/ReferenceClientProxyImplementation/Patches/Implementations/JSPatches/NullCoalescingPatch.cs b/ReferenceClientProxyImplementation/Patches/Implementations/JSPatches/NullCoalescingPatch.cs
new file mode 100644

index 0000000..98156c8 --- /dev/null +++ b/ReferenceClientProxyImplementation/Patches/Implementations/JSPatches/NullCoalescingPatch.cs
@@ -0,0 +1,32 @@ +using System.Text; +using System.Text.RegularExpressions; + +namespace ReferenceClientProxyImplementation.Patches.Implementations.JSPatches; + +public partial class NullCoalescingPatch : IPatch { + public int GetOrder() => 1; + + public string GetName() => "Patch null-coalescing expressions in JS"; + public bool Applies(string relativeName, byte[] content) => relativeName.EndsWith(".js"); + + public async Task<byte[]> Execute(string relativePath, byte[] content) { + var stringContent = Encoding.UTF8.GetString(content); + + stringContent = NullCoalescingRegex().Replace( + stringContent, + m => $"{m.Groups[1].Value}?.{m.Groups[2].Value}" + ); + // stringContent = ParenNullCheckRegex().Replace( + // stringContent, + // m => $"{m.Groups[1].Value} == null" + // ); + + return Encoding.UTF8.GetBytes(stringContent); + } + + [GeneratedRegex(@"null == ([a-zA-Z0-9_]+?) \? undefined : \1\.([a-zA-Z0-9_]+?)", RegexOptions.Compiled)] + private static partial Regex NullCoalescingRegex(); + + [GeneratedRegex(@"\(([^()]+?)\) == null", RegexOptions.Compiled)] + private static partial Regex ParenNullCheckRegex(); +} \ No newline at end of file