dotnet-websharper / core

WebSharper - Full-stack, functional, reactive web apps and microservices in F# and C#
https://websharper.com
Apache License 2.0
595 stars 50 forks source link

Import attribute handling #1392

Closed Jooseppi12 closed 6 months ago

Jooseppi12 commented 7 months ago

Consider the following code:

[<Import ("myFunction", "myModule")>]
let myFunction (str: string) = X<unit>

The above would describe a function in F# that would be translated to a call myFunction from the myModule import. At the moment the above code does not compile, as the X is failing, as this Import is not treated as an inline.

Known workaround at the moment is to apply an inline as well, like this:

[<Import ("myFunction", "myModule"); Inline "$import($str)">]
let myFunction (str: string) = X<unit>

Ideally we don't want to rely on the Inline to make this work, just applying the import attribute should work.

Jand42 commented 7 months ago

The Import attribute alone has previously not marked the member on its own for client-side. Now it auto-implies Stub if there is no JavaScript or Inline or Direct present.

Fixed the behavior of Stub+Import. For a class, it's valid to mark the class itself with Import, then all the members will follow existing Stub logic, while the JS class constructor is set by the Import.