diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/Internal/EnumToStringConverter.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/Internal/EnumToStringConverter.cs new file mode 100644 index 000000000..7a2e16d39 --- /dev/null +++ b/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/Internal/EnumToStringConverter.cs @@ -0,0 +1,34 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using System.Diagnostics.CodeAnalysis; +using Jint; +using Jint.Native; +using Jint.Runtime.Interop; + +namespace Squidex.Domain.Apps.Core.Scripting.Internal; + +internal sealed class EnumToStringConverter : IObjectConverter +{ + public static readonly EnumToStringConverter Instance = new EnumToStringConverter(); + + private EnumToStringConverter() + { + } + + public bool TryConvert(Engine engine, object value, [MaybeNullWhen(false)] out JsValue result) + { + if (value is Enum) + { + result = value.ToString(); + return true; + } + + result = JsValue.Null; + return false; + } +} diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/JintScript.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/JintScript.cs index c7fc8f791..48e1d9267 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/JintScript.cs +++ b/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/JintScript.cs @@ -54,8 +54,8 @@ internal sealed class JintScript : IScript, IAsyncScript, IDisposable engine = new Engine(options => { - options.AddObjectConverter(JintObjectConverter.Instance); - options.AllowOperatorOverloading(); + options.AddObjectConverter(JintObjectConverter.Instance, JintObjectConverter.HandledTypes); + options.AddObjectConverter(EnumToStringConverter.Instance); options.AllowClrWrite(!scriptOptions.Readonly); options.SetTypeConverter(engine => new CustomClrConverter(engine)); options.SetReferencesResolver(NullPropagation.Instance); diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleEnqueuerTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleEnqueuerTests.cs index 882833246..193839487 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleEnqueuerTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/RuleEnqueuerTests.cs @@ -398,7 +398,6 @@ public class RuleEnqueuerTests : GivenContext Assert.Same(contexts[2].Context.Rules, contexts[3].Context.Rules); } - private static RulesContext MatchingContext(Rule rule) { // These two properties must not be set to true for performance reasons.