From 166a693c6eb3c86eef5a462cf410fee679258d36 Mon Sep 17 00:00:00 2001 From: Doug Jacob Date: Mon, 10 Mar 2025 11:57:20 -0600 Subject: [PATCH 1/3] Updated ClearScript to v7.5.0; switched IArrayBuffer creation to read in ReadOnlySpan instead of byte[] to prevent creating an unnecessary extra copy of data --- Directory.Packages.props | 10 +++++----- Trell.Engine/ClearScriptWrappers/EngineWrapper.cs | 4 ++-- Trell/Rpc/ToEngine.cs | 6 ++---- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 63ec6e8..ca65be1 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -4,10 +4,10 @@ - - - - + + + + @@ -32,4 +32,4 @@ - + \ No newline at end of file diff --git a/Trell.Engine/ClearScriptWrappers/EngineWrapper.cs b/Trell.Engine/ClearScriptWrappers/EngineWrapper.cs index 260e4d8..4cc1035 100644 --- a/Trell.Engine/ClearScriptWrappers/EngineWrapper.cs +++ b/Trell.Engine/ClearScriptWrappers/EngineWrapper.cs @@ -193,7 +193,7 @@ internal IScriptObject CreateJsStringArray(IList? list) { return arr; } - public IArrayBuffer CreateJsBuffer(byte[] contents) { + public IArrayBuffer CreateJsBuffer(ReadOnlySpan contents) { var buf = (IArrayBuffer)((ScriptObject)this.engine.Evaluate("ArrayBuffer")).Invoke(true, [contents.Length]); if (contents.Length > 0) { buf.WriteBytes(contents, 0, (ulong)contents.Length, 0); @@ -201,7 +201,7 @@ public IArrayBuffer CreateJsBuffer(byte[] contents) { return buf; } - public ScriptObject CreateJsFile(string filename, string type, byte[] contents) { + public ScriptObject CreateJsFile(string filename, string type, ReadOnlySpan contents) { return (ScriptObject)((ScriptObject)this.engine.Evaluate("File")).Invoke( true, [ diff --git a/Trell/Rpc/ToEngine.cs b/Trell/Rpc/ToEngine.cs index 5917f77..9eeab30 100644 --- a/Trell/Rpc/ToEngine.cs +++ b/Trell/Rpc/ToEngine.cs @@ -80,12 +80,10 @@ public static EngineWrapper.Work.RawArg ToFunctionArg(this Function fn, EngineWr ["url"] = fn.OnRequest.Url, ["method"] = fn.OnRequest.Method, ["headers"] = engine.CreateScriptObject(fn.OnRequest.Headers.ToDictionary(x => x.Key, y => (object)y.Value)), - // TODO: Replace this with Span<> equivalent once ClearScript is updated to support it: - // https://github.com/xledger/trell/issues/28 - ["body"] = engine.CreateJsBuffer(fn.OnRequest.Body.ToByteArray()), + ["body"] = engine.CreateJsBuffer(fn.OnRequest.Body.Span), })), Function.ValueOneofCase.OnUpload => new EngineWrapper.Work.RawArg("file", - engine.CreateJsFile(fn.OnUpload.Filename, fn.OnUpload.Type, fn.OnUpload.Content.ToByteArray()) + engine.CreateJsFile(fn.OnUpload.Filename, fn.OnUpload.Type, fn.OnUpload.Content.Span) ), Function.ValueOneofCase.Dynamic => new EngineWrapper.Work.RawArg("argv", engine.CreateJsStringArray(fn.Dynamic.Arguments)), From b2a16a1f9fd34bd8fd374b343dc7466c0f69d727 Mon Sep 17 00:00:00 2001 From: Doug Jacob Date: Mon, 10 Mar 2025 16:28:15 -0600 Subject: [PATCH 2/3] Changed module importing step so that the modules loaded from documents are no longer considered 'transient' and their exports can be accessed again --- Trell.Engine/ClearScriptWrappers/EngineWrapper.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Trell.Engine/ClearScriptWrappers/EngineWrapper.cs b/Trell.Engine/ClearScriptWrappers/EngineWrapper.cs index 4cc1035..f50a400 100644 --- a/Trell.Engine/ClearScriptWrappers/EngineWrapper.cs +++ b/Trell.Engine/ClearScriptWrappers/EngineWrapper.cs @@ -226,8 +226,11 @@ public ScriptObject CreateJsFile(string filename, string type, ReadOnlySpan loadTask ? await loadTask : loadEvaluation; + Log.Information("Evaluated `{Js}` to {M}", loadWorkerJs, module); if (module is Task moduleResultTask) { From 98887d3b082ae64c7352412ab9c71da9cbddf684 Mon Sep 17 00:00:00 2001 From: Doug Jacob Date: Tue, 11 Mar 2025 08:28:15 -0600 Subject: [PATCH 3/3] Changed worker name evaluation to only allocate the worker name string once --- Trell.Engine/ClearScriptWrappers/EngineWrapper.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Trell.Engine/ClearScriptWrappers/EngineWrapper.cs b/Trell.Engine/ClearScriptWrappers/EngineWrapper.cs index f50a400..452daf2 100644 --- a/Trell.Engine/ClearScriptWrappers/EngineWrapper.cs +++ b/Trell.Engine/ClearScriptWrappers/EngineWrapper.cs @@ -220,14 +220,12 @@ public ScriptObject CreateJsFile(string filename, string type, ReadOnlySpan loadTask ? await loadTask : loadEvaluation; @@ -235,7 +233,7 @@ public ScriptObject CreateJsFile(string filename, string type, ReadOnlySpan moduleResultTask) { throw new TrellUserException( - new TrellError(TrellErrorCode.TIMEOUT, $"worker.js took longer than {limits.MaxStartupDuration} to load")); + new TrellError(TrellErrorCode.TIMEOUT, $"{workerFileName} took longer than {limits.MaxStartupDuration} to load")); } }