From be8e61f1b4dacfb2197e9c6755088223ac8c2da0 Mon Sep 17 00:00:00 2001 From: "lucas.hipolito" Date: Tue, 15 Jul 2025 16:30:41 +0200 Subject: [PATCH] Implemented custom js functions: streamToBytes and streamToBase64 --- .../Handlers/ConfigureEngineWithCommonFunctions.cs | 11 ++++++++++- .../Providers/CommonFunctionsDefinitionProvider.cs | 12 +++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/modules/Elsa.JavaScript/Handlers/ConfigureEngineWithCommonFunctions.cs b/src/modules/Elsa.JavaScript/Handlers/ConfigureEngineWithCommonFunctions.cs index 0af980344..cd9ae1774 100644 --- a/src/modules/Elsa.JavaScript/Handlers/ConfigureEngineWithCommonFunctions.cs +++ b/src/modules/Elsa.JavaScript/Handlers/ConfigureEngineWithCommonFunctions.cs @@ -59,6 +59,8 @@ public class ConfigureEngineWithCommonFunctions(IOptions options) : engine.SetValue("bytesFromBase64", (Func)(value => Convert.FromBase64String(value))); engine.SetValue("stringToBase64", (Func)(value => Convert.ToBase64String(Encoding.UTF8.GetBytes(value)))); engine.SetValue("stringFromBase64", (Func)(value => Encoding.UTF8.GetString(Convert.FromBase64String(value)))); + engine.SetValue("streamToBytes", (Func)(value => StreamToBytes(value))); + engine.SetValue("streamToBase64", (Func)(value => Convert.ToBase64String(StreamToBytes(value)))); // Deprecated, use newGuidString instead. engine.SetValue("getGuidString", (Func)(() => Guid.NewGuid().ToString())); @@ -67,7 +69,7 @@ public class ConfigureEngineWithCommonFunctions(IOptions options) : engine.SetValue("getShortGuid", (Func)(() => Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", ""))); return Task.CompletedTask; } - + private string Serialize(object value) { return JsonSerializer.Serialize(value, _jsonSerializerOptions); @@ -82,4 +84,11 @@ public class ConfigureEngineWithCommonFunctions(IOptions options) : options.Converters.Add(new JsonStringEnumConverter()); return options; } + + private byte[] StreamToBytes(Stream stream) + { + using var memoryStream = new MemoryStream(); + stream.CopyTo(memoryStream); + return memoryStream.ToArray(); + } } \ No newline at end of file diff --git a/src/modules/Elsa.JavaScript/Providers/CommonFunctionsDefinitionProvider.cs b/src/modules/Elsa.JavaScript/Providers/CommonFunctionsDefinitionProvider.cs index 76598428d..4922924cd 100644 --- a/src/modules/Elsa.JavaScript/Providers/CommonFunctionsDefinitionProvider.cs +++ b/src/modules/Elsa.JavaScript/Providers/CommonFunctionsDefinitionProvider.cs @@ -136,6 +136,16 @@ internal class CommonFunctionsDefinitionProvider(ITypeAliasRegistry typeAliasReg .Name("stringToBase64") .Parameter("value", "string") .ReturnType("string")); + + yield return CreateFunctionDefinition(builder => builder + .Name("streamToBytes") + .Parameter("value", "Stream") + .ReturnType("Byte[]")); + + yield return CreateFunctionDefinition(builder => builder + .Name("streamToBase64") + .Parameter("value", "Stream") + .ReturnType("string")); if (!options.Value.DisableWrappers) { @@ -151,7 +161,7 @@ internal class CommonFunctionsDefinitionProvider(ITypeAliasRegistry typeAliasReg // set{Variable}. yield return CreateFunctionDefinition(builder => builder.Name($"set{pascalName}").Parameter("value", typeAlias)); - } + } } } } \ No newline at end of file