Browse Source

Update scripting.

pull/802/head
Sebastian 4 years ago
parent
commit
ac85296355
  1. 1
      backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/ContentWrapper/ContentDataProperty.cs
  2. 4
      backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/ContentWrapper/JsonMapper.cs
  3. 2
      backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/Internal/Parser.cs
  4. 12
      backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/JintScriptEngine.cs
  5. 2
      backend/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj
  6. 1
      backend/src/Squidex/Config/Domain/InfrastructureServices.cs
  7. 4
      backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/Scripting/ContentDataObjectTests.cs
  8. 4
      backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/Scripting/JintScriptEngineTests.cs
  9. 2
      backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/Scripting/JintUserTests.cs

1
backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/ContentWrapper/ContentDataProperty.cs

@ -5,6 +5,7 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using Jint;
using Jint.Native;
using Jint.Runtime;
using Squidex.Domain.Apps.Core.Contents;

4
backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/ContentWrapper/JsonMapper.cs

@ -1,4 +1,4 @@
// ==========================================================================
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
@ -50,7 +50,7 @@ namespace Squidex.Domain.Apps.Core.Scripting.ContentWrapper
target[i] = Map(arr[i], engine);
}
return engine.Array.Construct(target);
return engine.Realm.Intrinsics.Array.Construct(target);
}
private static JsValue FromObject(JsonObject obj, Engine engine)

2
backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/Internal/Parser.cs

@ -17,7 +17,7 @@ namespace Squidex.Domain.Apps.Core.Scripting.Internal
private static readonly TimeSpan CacheDuration = TimeSpan.FromMinutes(10);
private static readonly ParserOptions DefaultParserOptions = new ParserOptions
{
AdaptRegexp = true, Tolerant = true, Loc = true
AdaptRegexp = true, Tolerant = true
};
private readonly IMemoryCache cache;

12
backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/JintScriptEngine.cs

@ -88,11 +88,11 @@ namespace Squidex.Domain.Apps.Core.Scripting
tcs.TrySetResult(JsonMapper.Map(value));
}));
Execute(context.Engine, script);
var result = Execute(context.Engine, script);
if (!context.IsAsync)
{
tcs.TrySetResult(JsonMapper.Map(context.Engine.GetCompletionValue()));
tcs.TrySetResult(JsonMapper.Map(result));
}
return await tcs.Task;
@ -169,9 +169,9 @@ namespace Squidex.Domain.Apps.Core.Scripting
.Extend(vars, options)
.Extend(extensions);
Execute(context.Engine, script);
var result = Execute(context.Engine, script);
return JsonMapper.Map(context.Engine.GetCompletionValue());
return JsonMapper.Map(result);
}
private ScriptExecutionContext CreateEngine(ScriptOptions options)
@ -204,13 +204,13 @@ namespace Squidex.Domain.Apps.Core.Scripting
return context;
}
private void Execute(Engine engine, string script)
private JsValue Execute(Engine engine, string script)
{
try
{
var program = parser.Parse(script);
engine.Execute(program);
return engine.Evaluate(program);
}
catch (ArgumentException ex)
{

2
backend/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj

@ -19,6 +19,7 @@
<ItemGroup>
<PackageReference Include="Fluid.Core.Squidex" Version="1.0.0-beta" />
<PackageReference Include="GeoJSON.Net" Version="1.2.19" />
<PackageReference Include="Jint" Version="3.0.0-beta-2036" />
<PackageReference Include="Meziantou.Analyzer" Version="1.0.676">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
@ -27,7 +28,6 @@
<PackageReference Include="Microsoft.OData.Core" Version="7.9.4" />
<PackageReference Include="NJsonSchema" Version="10.5.2" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.Jint" Version="3.0.0-beta-0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.Collections.Immutable" Version="6.0.0" />
<PackageReference Include="System.Linq.Async" Version="5.0.0" />

1
backend/src/Squidex/Config/Domain/InfrastructureServices.cs

@ -61,7 +61,6 @@ namespace Squidex.Config.Domain
{
TimeoutExecution = timeoutExecution,
TimeoutScript = timeoutScript
}).As<IScriptEngine>();
services.AddSingletonAs(_ => SystemClock.Instance)

4
backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/Scripting/ContentDataObjectTests.cs

@ -244,7 +244,7 @@ namespace Squidex.Domain.Apps.Core.Operations.Scripting
engine.SetValue("data", new ContentDataObject(engine, content));
var result = engine.Execute(@"
var result = engine.Evaluate(@"
var result = [];
for (var x in data) {
var field = data[x];
@ -253,7 +253,7 @@ namespace Squidex.Domain.Apps.Core.Operations.Scripting
result.push(field[y]);
}
}
result;").GetCompletionValue().ToObject();
result;").ToObject();
Assert.Equal(new[] { "1", "2", "3", "4" }, result);
}

4
backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/Scripting/JintScriptEngineTests.cs

@ -65,7 +65,7 @@ namespace Squidex.Domain.Apps.Core.Operations.Scripting
public async Task ExecuteAsync_should_catch_script_syntax_errors()
{
const string script = @"
invalid()
invalid(()
";
await Assert.ThrowsAsync<ValidationException>(() => sut.ExecuteAsync(new ScriptVars(), script));
@ -151,7 +151,7 @@ namespace Squidex.Domain.Apps.Core.Operations.Scripting
var context = new ScriptVars { ["data"] = content };
const string script = @"
invalid();
invalid(();
";
await Assert.ThrowsAsync<ValidationException>(() => sut.TransformAsync(context, script, contentOptions));

2
backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/Scripting/JintUserTests.cs

@ -94,7 +94,7 @@ namespace Squidex.Domain.Apps.Core.Operations.Scripting
engine.SetValue("user", JintUser.Create(engine, new ClaimsPrincipal(new[] { identity })));
return engine.Execute(script).GetCompletionValue().ToObject();
return engine.Evaluate(script).ToObject();
}
}
}

Loading…
Cancel
Save