Skip to content

Commit 1c13218

Browse files
committed
Added a module based on the Topaz
1 parent a47f37a commit 1c13218

20 files changed

+1690
-9
lines changed

JavaScriptEngineSwitcher.NoSamples.sln

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
3-
# Visual Studio Version 16
4-
VisualStudioVersion = 16.0.29613.14
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.5.33424.131
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{19575E10-6B8E-4CF0-B7D2-898FFF47E157}"
77
ProjectSection(SolutionItems) = preProject
@@ -87,6 +87,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JavaScriptEngineSwitcher.Ni
8787
EndProject
8888
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JavaScriptEngineSwitcher.Node", "src\JavaScriptEngineSwitcher.Node\JavaScriptEngineSwitcher.Node.csproj", "{89F9DDDD-5236-4D9A-99E4-3C1358B81149}"
8989
EndProject
90+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JavaScriptEngineSwitcher.Topaz", "src\JavaScriptEngineSwitcher.Topaz\JavaScriptEngineSwitcher.Topaz.csproj", "{C5FB0DE1-496F-4A78-A6DC-448649E77172}"
91+
EndProject
9092
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JavaScriptEngineSwitcher.Benchmarks", "test\JavaScriptEngineSwitcher.Benchmarks\JavaScriptEngineSwitcher.Benchmarks.csproj", "{24A8F6A6-EA4E-43A6-A2D7-E1916F8CB4EE}"
9193
EndProject
9294
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JavaScriptEngineSwitcher.Tests", "test\JavaScriptEngineSwitcher.Tests\JavaScriptEngineSwitcher.Tests.csproj", "{E95FDEF6-18A0-4E26-8FDF-B4B590E6EDAF}"
@@ -185,6 +187,10 @@ Global
185187
{E95FDEF6-18A0-4E26-8FDF-B4B590E6EDAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
186188
{E95FDEF6-18A0-4E26-8FDF-B4B590E6EDAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
187189
{E95FDEF6-18A0-4E26-8FDF-B4B590E6EDAF}.Release|Any CPU.Build.0 = Release|Any CPU
190+
{C5FB0DE1-496F-4A78-A6DC-448649E77172}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
191+
{C5FB0DE1-496F-4A78-A6DC-448649E77172}.Debug|Any CPU.Build.0 = Debug|Any CPU
192+
{C5FB0DE1-496F-4A78-A6DC-448649E77172}.Release|Any CPU.ActiveCfg = Release|Any CPU
193+
{C5FB0DE1-496F-4A78-A6DC-448649E77172}.Release|Any CPU.Build.0 = Release|Any CPU
188194
EndGlobalSection
189195
GlobalSection(SolutionProperties) = preSolution
190196
HideSolutionNode = FALSE
@@ -212,6 +218,7 @@ Global
212218
{89F9DDDD-5236-4D9A-99E4-3C1358B81149} = {0C281F46-F1D2-4A1C-8560-375EDA65D680}
213219
{24A8F6A6-EA4E-43A6-A2D7-E1916F8CB4EE} = {53B43213-2E66-42C2-8476-600A2FD2DA75}
214220
{E95FDEF6-18A0-4E26-8FDF-B4B590E6EDAF} = {53B43213-2E66-42C2-8476-600A2FD2DA75}
221+
{C5FB0DE1-496F-4A78-A6DC-448649E77172} = {0C281F46-F1D2-4A1C-8560-375EDA65D680}
215222
EndGlobalSection
216223
GlobalSection(ExtensibilityGlobals) = postSolution
217224
SolutionGuid = {8184BE59-ACBC-4CD1-9419-D59A0FAC6131}

global.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"sdk": {
3-
"version": "7.0.201"
3+
"version": "7.0.202"
44
}
55
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using IOriginalEngine = Tenray.Topaz.ITopazEngine;
2+
using OriginalArray = Tenray.Topaz.API.JsArray;
3+
using OriginalGlobalThis = Tenray.Topaz.API.GlobalThis;
4+
using OriginalJSONObject = Tenray.Topaz.API.JSONObject;
5+
using OriginalConcurrentObject = Tenray.Topaz.API.ConcurrentJsObject;
6+
using OriginalObject = Tenray.Topaz.API.JsObject;
7+
using OriginalUndefined = Tenray.Topaz.Undefined;
8+
using OriginalVariableKind = Tenray.Topaz.VariableKind;
9+
10+
namespace JavaScriptEngineSwitcher.Topaz
11+
{
12+
/// <summary>
13+
/// Default built-in objects initializer
14+
/// </summary>
15+
public static class DefaultBuiltinObjectsInitializer
16+
{
17+
/// <summary>
18+
/// Initializes a built-in objects in the global scope
19+
/// </summary>
20+
/// <param name="engine">Original JS engine</param>
21+
public static void Initialize(IOriginalEngine engine)
22+
{
23+
// Constants
24+
engine.SetValueAndKind("Infinity", double.PositiveInfinity, OriginalVariableKind.Const);
25+
engine.SetValueAndKind("NaN", double.NaN, OriginalVariableKind.Const);
26+
engine.SetValueAndKind("undefined", OriginalUndefined.Value, OriginalVariableKind.Const);
27+
28+
// Constructors
29+
engine.AddType(engine.IsThreadSafe ? typeof(OriginalConcurrentObject) :typeof(OriginalObject), "Object");
30+
engine.AddType(typeof(OriginalArray), "Array");
31+
32+
// Objects
33+
engine.SetValue("globalThis", new OriginalGlobalThis(engine.GlobalScope));
34+
engine.SetValue("JSON", new OriginalJSONObject());
35+
}
36+
}
37+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<Product>JS Engine Switcher: Topaz</Product>
5+
<VersionPrefix>3.20.10</VersionPrefix>
6+
<TargetFrameworks>net6.0;net7.0</TargetFrameworks>
7+
<OutputType>Library</OutputType>
8+
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
9+
<NoWarn>$(NoWarn);CS1591</NoWarn>
10+
<GenerateDocumentationFile>true</GenerateDocumentationFile>
11+
</PropertyGroup>
12+
13+
<Import Project="../../build/common.props" />
14+
15+
<PropertyGroup>
16+
<Description>JavaScriptEngineSwitcher.Topaz contains adapter `TopazJsEngine` (wrapper for the Topaz JavaScript Engine (https://github.com/koculu/Topaz) version 1.3.0).</Description>
17+
<PackageTags>$(PackageCommonTags);Topaz</PackageTags>
18+
</PropertyGroup>
19+
20+
<ItemGroup>
21+
<PackageReference Include="Topaz" Version="1.3.0" />
22+
23+
<ProjectReference Include="../JavaScriptEngineSwitcher.Core/JavaScriptEngineSwitcher.Core.csproj" />
24+
</ItemGroup>
25+
26+
</Project>
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
using System;
2+
3+
using JavaScriptEngineSwitcher.Core;
4+
5+
namespace JavaScriptEngineSwitcher.Topaz
6+
{
7+
/// <summary>
8+
/// JS engine factory collection extensions
9+
/// </summary>
10+
public static class JsEngineFactoryCollectionExtensions
11+
{
12+
/// <summary>
13+
/// Adds a instance of <see cref="TopazJsEngineFactory"/> to
14+
/// the specified <see cref="JsEngineFactoryCollection"/>
15+
/// </summary>
16+
/// <param name="source">Instance of <see cref="JsEngineFactoryCollection"/></param>
17+
/// <returns>Instance of <see cref="JsEngineFactoryCollection"/></returns>
18+
public static JsEngineFactoryCollection AddTopaz(this JsEngineFactoryCollection source)
19+
{
20+
if (source == null)
21+
{
22+
throw new ArgumentNullException(nameof(source));
23+
}
24+
25+
return source.AddTopaz(new TopazSettings());
26+
}
27+
28+
/// <summary>
29+
/// Adds a instance of <see cref="TopazJsEngineFactory"/> to
30+
/// the specified <see cref="JsEngineFactoryCollection"/>
31+
/// </summary>
32+
/// <param name="source">Instance of <see cref="JsEngineFactoryCollection"/></param>
33+
/// <param name="configure">The delegate to configure the provided <see cref="TopazSettings"/></param>
34+
/// <returns>Instance of <see cref="JsEngineFactoryCollection"/></returns>
35+
public static JsEngineFactoryCollection AddTopaz(this JsEngineFactoryCollection source,
36+
Action<TopazSettings> configure)
37+
{
38+
if (source == null)
39+
{
40+
throw new ArgumentNullException(nameof(source));
41+
}
42+
43+
if (configure == null)
44+
{
45+
throw new ArgumentNullException(nameof(configure));
46+
}
47+
48+
var settings = new TopazSettings();
49+
configure(settings);
50+
51+
return source.AddTopaz(settings);
52+
}
53+
54+
/// <summary>
55+
/// Adds a instance of <see cref="TopazJsEngineFactory"/> to
56+
/// the specified <see cref="JsEngineFactoryCollection"/>
57+
/// </summary>
58+
/// <param name="source">Instance of <see cref="JsEngineFactoryCollection"/></param>
59+
/// <param name="settings">Settings of the Topaz JS engine</param>
60+
/// <returns>Instance of <see cref="JsEngineFactoryCollection"/></returns>
61+
public static JsEngineFactoryCollection AddTopaz(this JsEngineFactoryCollection source,
62+
TopazSettings settings)
63+
{
64+
if (source == null)
65+
{
66+
throw new ArgumentNullException(nameof(source));
67+
}
68+
69+
if (settings == null)
70+
{
71+
throw new ArgumentNullException(nameof(settings));
72+
}
73+
74+
source.Add(new TopazJsEngineFactory(settings));
75+
76+
return source;
77+
}
78+
}
79+
}

0 commit comments

Comments
 (0)