It's not ideal, but one way that I've found to define a typedef function
that exposes "static" functions similar to a class is to put those "static"
functions into a package with the same name as the root function.

package
{
/**
* @externs
*/
COMPILE::JS
public function marked(s:String):String {
return null;
};
}

package marked
{
/**
* @externs
* configure marked with options
*/
COMPILE::JS
public function setOptions(o:Object):void {};
}

Another option is to use dynamic access, but that won't be checked by the
compiler.

marked["setOptions"]()

--
Josh Tynjala
Bowler Hat LLC <https://bowlerhat.dev>


On Wed, Apr 15, 2020 at 7:39 AM Carlos Rovira <carlosrov...@apache.org>
wrote:

> Hi Yishay,
>
> this finally worked (declaring as a function):
>
> package
> {
> /**
> * @externs
> */
> COMPILE::JS
> public function marked(s:String):String {
> return null;
> };
> }
>
> I see two problems with this approach
>
>    1.  inject_html is not valid, So I need other wrapper class to add the
>    inject_html and use marked within, to make usable as a piece of code
> (don't
>    like let the user to add the .js script to the html template
>    2. Since is a function I can add other API functions like setOptions.
> ie:
>
> /**
> * configure marked with options
> */
> COMPILE::JS
> public function setOptions(o:Object):void {};
>
> Would like to be know how to declare this as a class to add other function
> APIs available in the js library
>
>
> El mié., 15 abr. 2020 a las 11:14, Yishay Weiss (<yishayj...@hotmail.com>)
> escribió:
>
> > You can just return null.
> >
> > I think the best thing for you to do is to go to one of the typedefs,
> > build, and look at the generated sources.
> >
> > For example
> >
> > cd …\royale-typedefs
> > cd google_maps
> > ant;
> > cd target\generated-sources
> >
> > Explore the .as classes there.
> >
> > Hope this helps.
> >
> > From: Carlos Rovira<mailto:carlosrov...@apache.org>
> > Sent: Wednesday, April 15, 2020 12:05 PM
> > To: Apache Royale Development<mailto:dev@royale.apache.org>
> > Subject: Re: Problems to create AS3 externs when JS library returns some
> > kind of object
> >
> > Hi,
> >
> > additional to this, is how we can create an extern function that return
> > something:
> >
> > public function someFoo(s:String):String {};
> >
> > AS3 expect here some return value inside the brackets. So how we can
> write
> > this in AS3 without errors?
> >
> > thanks
> >
> > El mié., 15 abr. 2020 a las 10:48, Carlos Rovira (<
> carlosrov...@apache.org
> > >)
> > escribió:
> >
> > > Hi,
> > >
> > > I'm playing with a js markdown library [1] to see if is an option to
> make
> > > a Royale website that load markdown and render it (I'm experimenting to
> > see
> > > if we can't remove wordpress from our website and make a web based on
> > > markdown similar to royale-docs)
> > >
> > > I'm having problems trying to create the extern as3 file. I'm trying
> > > something similar to what we did with hljs. Here's my try:
> > >
> > >
> > > package
> > > {
> > > /**
> > > * marked js library
> > > */
> > > COMPILE::JS
> > > public class marked
> > > {
> > > /**
> > > *
> > > * <inject_html>
> > > * <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js
> > > "></script>
> > > * </inject_html>
> > > *
> > > * @royaleignorecoercion String
> > > */
> > > public function marked(s:String):String {};
> > >
> > > /**
> > > * configure marked with options
> > > */
> > > public function setOptions(o:Object):void {};
> > > }
> > > }
> > >
> > > The problem is
> > >
> > > public function marked(s:String):String {};
> > >
> > > since the library gets a String and returns a String, but AS3
> > constructors
> > > must be void
> > >
> > > I remember Josh posted alternative ways to create this kind of AS3
> stubs,
> > > but he posted in a paste apache that is now gone.
> > > Anyway would be good to know if this is a limitation of AS3 language
> and
> > > we can't create this kind of AS3 classes that model a JS library with
> > > constructors that return something like a string.
> > >
> > > Thanks
> > >
> > > [1] https://marked.js.org/#/README.md#usage
> > >
> > > --
> > > Carlos Rovira
> > > http://about.me/carlosrovira
> > >
> > >
> >
> > --
> > Carlos Rovira
> > http://about.me/carlosrovira
> >
> >
>
> --
> Carlos Rovira
> http://about.me/carlosrovira
>

Reply via email to