Merge pull request #6797 from elsa-workflows/feat/6796-streamtobase64-streamtobytes-custom-js-functions

Implemented custom js functions: streamToBytes and streamToBase64
This commit is contained in:
Lucas Hipólito 2025-07-16 09:17:45 +02:00 committed by GitHub
commit 51fb7bfaef
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 21 additions and 2 deletions

View file

@ -59,6 +59,8 @@ public class ConfigureEngineWithCommonFunctions(IOptions<JintOptions> options) :
engine.SetValue("bytesFromBase64", (Func<string, byte[]>)(value => Convert.FromBase64String(value)));
engine.SetValue("stringToBase64", (Func<string, string>)(value => Convert.ToBase64String(Encoding.UTF8.GetBytes(value))));
engine.SetValue("stringFromBase64", (Func<string, string>)(value => Encoding.UTF8.GetString(Convert.FromBase64String(value))));
engine.SetValue("streamToBytes", (Func<Stream, byte[]>)(value => StreamToBytes(value)));
engine.SetValue("streamToBase64", (Func<Stream, string>)(value => Convert.ToBase64String(StreamToBytes(value))));
// Deprecated, use newGuidString instead.
engine.SetValue("getGuidString", (Func<string>)(() => Guid.NewGuid().ToString()));
@ -67,7 +69,7 @@ public class ConfigureEngineWithCommonFunctions(IOptions<JintOptions> options) :
engine.SetValue("getShortGuid", (Func<string>)(() => 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<JintOptions> options) :
options.Converters.Add(new JsonStringEnumConverter());
return options;
}
private byte[] StreamToBytes(Stream stream)
{
using var memoryStream = new MemoryStream();
stream.CopyTo(memoryStream);
return memoryStream.ToArray();
}
}

View file

@ -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));
}
}
}
}
}