diff --git a/src/designer/elsa-workflows-studio/src/components/controls/elsa-monaco/elsa-monaco.tsx b/src/designer/elsa-workflows-studio/src/components/controls/elsa-monaco/elsa-monaco.tsx
index 7474000f2..e3bfc0245 100644
--- a/src/designer/elsa-workflows-studio/src/components/controls/elsa-monaco/elsa-monaco.tsx
+++ b/src/designer/elsa-workflows-studio/src/components/controls/elsa-monaco/elsa-monaco.tsx
@@ -1,6 +1,8 @@
-import {Component, Host, h, Prop, State, Listen, Method, Watch, Event, EventEmitter} from '@stencil/core';
+import {Component, Event, EventEmitter, h, Host, Method, Prop, Watch} from '@stencil/core';
import {initializeMonacoWorker} from "./elsa-monaco-utils";
import state from '../../../utils/store';
+import {languages} from "monaco-editor";
+import ScriptTarget = languages.typescript.ScriptTarget;
// Until I figure out why the ESM loader doesn't work properly, we need to include these scripts manually from index.html
// import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
@@ -52,10 +54,20 @@ export class ElsaMonaco {
async addJavaScriptLib(libSource: string, libUri: string) {
const monaco = this.monaco;
monaco.languages.typescript.javascriptDefaults.setExtraLibs([{
+ content: "",
+ filePath: "lib.d.ts"
+ }, {
content: libSource,
filePath: libUri
}]);
+ monaco.languages.typescript.javascriptDefaults.setCompilerOptions({
+ target: ScriptTarget.ES2020,
+ allowJs: true,
+ checkJs: true,
+
+ })
+
const oldModel = monaco.editor.getModel(libUri);
if (oldModel)
diff --git a/src/scripting/Elsa.Scripting.JavaScript/Providers/DefaultActivityTypeDefinitionRenderer.cs b/src/scripting/Elsa.Scripting.JavaScript/Providers/DefaultActivityTypeDefinitionRenderer.cs
index ae6e295dc..44a4fa551 100644
--- a/src/scripting/Elsa.Scripting.JavaScript/Providers/DefaultActivityTypeDefinitionRenderer.cs
+++ b/src/scripting/Elsa.Scripting.JavaScript/Providers/DefaultActivityTypeDefinitionRenderer.cs
@@ -48,7 +48,7 @@ namespace Elsa.Scripting.JavaScript.Providers
CancellationToken cancellationToken = default)
{
var typeScriptType = notification.GetTypeScriptType(propertyType);
- writer.AppendLine($"{propertyName}(): {typeScriptType}");
+ writer.AppendLine($"{propertyName}(): {typeScriptType};");
return new ValueTask();
}
}
diff --git a/src/scripting/Elsa.Scripting.JavaScript/Providers/DotNetTypeScriptDefinitionProvider.cs b/src/scripting/Elsa.Scripting.JavaScript/Providers/DotNetTypeScriptDefinitionProvider.cs
index f7f3a67bd..03921c4a7 100644
--- a/src/scripting/Elsa.Scripting.JavaScript/Providers/DotNetTypeScriptDefinitionProvider.cs
+++ b/src/scripting/Elsa.Scripting.JavaScript/Providers/DotNetTypeScriptDefinitionProvider.cs
@@ -159,10 +159,8 @@ namespace Elsa.Scripting.JavaScript.Providers
var returnType = method.ReturnType;
- if (returnType != typeof(void))
- {
+ if (returnType != typeof(void))
output.AppendFormat(":{0}", GetTypeScriptType(context, returnType, collectedTypes));
- }
output.AppendLine(";");
}
diff --git a/src/scripting/Elsa.Scripting.JavaScript/Typings/EnumerableTypeDefinitionProvider.cs b/src/scripting/Elsa.Scripting.JavaScript/Typings/EnumerableTypeDefinitionProvider.cs
index 9f7d80673..1bec423e5 100644
--- a/src/scripting/Elsa.Scripting.JavaScript/Typings/EnumerableTypeDefinitionProvider.cs
+++ b/src/scripting/Elsa.Scripting.JavaScript/Typings/EnumerableTypeDefinitionProvider.cs
@@ -1,12 +1,29 @@
using System;
using System.Collections;
+using System.Linq;
using Elsa.Scripting.JavaScript.Services;
+using Microsoft.Extensions.DependencyInjection;
namespace Elsa.Scripting.JavaScript.Typings
{
public class EnumerableTypeDefinitionProvider : TypeDefinitionProvider
{
- public override bool SupportsType(TypeDefinitionContext context, Type type) => typeof(IEnumerable).IsAssignableFrom(type);
- public override string GetTypeDefinition(TypeDefinitionContext context, Type type) => "[]";
+ private readonly IServiceProvider _serviceProvider;
+
+ public EnumerableTypeDefinitionProvider(IServiceProvider serviceProvider)
+ {
+ _serviceProvider = serviceProvider;
+ }
+
+ public override bool SupportsType(TypeDefinitionContext context, Type type) => typeof(string) != type && typeof(IEnumerable).IsAssignableFrom(type);
+
+ public override string GetTypeDefinition(TypeDefinitionContext context, Type type)
+ {
+ var providers = _serviceProvider.GetServices().Where(x => x is not EnumerableTypeDefinitionProvider).ToList();
+ var elementType = type.IsArray ? type.GetElementType()! : type.GetGenericArguments().FirstOrDefault();
+ var typeScriptType = elementType != null ? providers.FirstOrDefault(x => x.SupportsType(context, elementType))?.GetTypeDefinition(context, elementType) : null;
+
+ return typeScriptType == null ? "[]" : $"Array<{typeScriptType}>";
+ }
}
}
\ No newline at end of file