Hi Josh,

El mar., 16 jul. 2019 a las 17:02, Josh Tynjala (<[email protected]>)
escribió:

> Before I committed my changes, I confirmed that dialogPolyfill seemed to be
> properly working in a release build of TourDeJewel. With that in mind, I
> don't think that it will cause any problems to keep dialogPolyfill and hljs
> in Jewel. However, I think that the best practice would be to move them
> into a separate library. In fact, that library should probably be in
> royale-typedefs, since these classes are type definitions for JS libraries.
>

Ok, I'll try to add to it as I have time, I think as well Jewel is not the
best place since that classes can be needed for other libs too.


>
> I'm curious. Is hljs actually used for anything in the Jewel components? If
> it's only used in examples, the .as source file with @externs could just be
> added to those examples instead of being included in any SWCs.
>

You're right, is not used in Jewel. I think I needed to put in that library
due to some limitations with @externs at that moment
but maybe now it can moved

I think the reason was this one here:

https://royale.apache.org/using-external-javascript-libraries-in-apache-royale/

"Note: Currently the inject_html injection only works if your @externs
class is located in a Royale library. It will not work if is located in the
application project."

if that could be solved, then we can move that class to the example and get
the inject_html work as expected and fix that example

thanks!


>
> --
> Josh Tynjala
> Bowler Hat LLC <https://bowlerhat.dev>
>
>
> On Tue, Jul 16, 2019 at 7:10 AM Carlos Rovira <[email protected]>
> wrote:
>
> > Hi,
> >
> > thanks Josh for the update!
> > One question about it: should separate the @extern classes in Jewel
> > (dialogPollyfill and hljs classes) or with this change now can live in
> that
> > library?
> > Just to know it, although for other organizational purposes I think it
> > should be probably separated.
> >
> > @Greg Dove <[email protected]>  just merged locally this changes and
> > rebuild Crux branch and seems some changes are needed there when building
> > ANT SDK. I probably can't do changes to try to solve this before you
> reach
> > the problem since I'm busy with work things. Just copy here my log so it
> > could be of help for you
> >
> > I suppose is the need to change in this branch from library-path to
> > external-library-path
> >
> >
> > compile-swf:
> >
> >      [echo] Compiling libs/Crux.swc
> >
> >      [echo] ROYALE_HOME:
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs
> >
> >      [echo] ROYALE_SWF_COMPILER_HOME:
> > /Users/carlosrovira/Dev/Royale/Source/royale-asjs
> >
> >      [echo] ROYALE_COMPILER_HOME:
> > /Users/carlosrovira/Dev/Royale/Source/royale-asjs/js
> >
> >      [java] args:
> >
> >      [java]
> > +royalelib=/Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks
> >
> >      [java] +playerglobal.version=11.1
> >
> >      [java] +env.AIR_HOME=/Users/carlosrovira/Dev/Air/Sdks/AIR_SDK_25
> >
> >      [java] -compiler.strict-xml=true
> >
> >      [java] -compiler.targets=SWF,JSRoyale
> >
> >      [java] -metadata.date=07/16/19 12:12 +0200
> >
> >      [java] -metadata.dateFormat=MM/dd/yy HH:mm Z
> >
> >      [java] -swf-debugfile-alias=/org/apache/royale/0.9.6
> >
> >      [java]
> >
> >
> -output=/Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/projects/Crux/target/Crux.swc
> >
> >      [java]
> >
> >
> -load-config=/Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/projects/Crux/src/main/config/compile-swf-config.xml
> >
> >      [java]
> >
> >
> -js-load-config=/Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js-config.xml
> >
> >      [java]
> >
> >
> -js-load-config+=/Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/projects/Crux/../../js/projects/CruxJS/src/main/config/compile-js-config.xml
> >
> >      [java] target:SWF
> >
> >      [java] target:JSRoyale
> >
> >      [java] COMPC
> >
> >      [java] Loading configuration:
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/projects/Crux/src/main/config/compile-swf-config.xml
> >
> >      [java]
> >
> >      [java] 128421 bytes written to
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/projects/Crux/target/Crux.swc
> > in 3,234 seconds
> >
> >      [java] COMPCJSCRoyale
> >
> >      [java] 6.474858102 seconds
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > The definition XMLList depended on by mx.messaging.config.ServerConfig in
> > the SWC
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > could not be found
> >
> >      [java]
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > The definition XML depended on by mx.messaging.config.ServerConfig in the
> > SWC
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > could not be found
> >
> >      [java]
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > The definition XML depended on by mx.messaging.channels.PollingChannel in
> > the SWC
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > could not be found
> >
> >      [java]
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > The definition QName depended on by mx.utils.ObjectUtil in the SWC
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > could not be found
> >
> >      [java]
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > The definition XMLList depended on by mx.utils.ObjectUtil in the SWC
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > could not be found
> >
> >      [java]
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > The definition XML depended on by mx.utils.ObjectUtil in the SWC
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > could not be found
> >
> >      [java]
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > The definition XMLList depended on by mx.messaging.Channel in the SWC
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > could not be found
> >
> >      [java]
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > The definition XML depended on by mx.messaging.Channel in the SWC
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > could not be found
> >
> >      [java]
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > The definition XML depended on by mx.messaging.channels.AMFChannel in the
> > SWC
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > could not be found
> >
> >      [java]
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > The definition XMLList depended on by mx.utils.UIDUtil in the SWC
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/MXRoyaleJS.swc
> > could not be found
> >
> >      [java]
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/ReflectionJS.swc
> > The definition org.apache.royale.utils.Language depended on by
> > org.apache.royale.reflection.nativejs.AS3Vector in the SWC
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/ReflectionJS.swc
> > could not be found
> >
> >      [java]
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/ReflectionJS.swc
> > The definition org.apache.royale.utils.Language depended on by
> > org.apache.royale.reflection.describeType in the SWC
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/ReflectionJS.swc
> > could not be found
> >
> >      [java]
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/ReflectionJS.swc
> > The definition org.apache.royale.utils.Language depended on by
> > org.apache.royale.reflection.getQualifiedClassName in the SWC
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/js/libs/ReflectionJS.swc
> > could not be found
> >
> >      [java]
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/processors/EventHandlerProcessor.as(23):
> > col: 10 Definition org.apache.royale.utils.Language could not be found.
> >
> >      [java]
> >
> >      [java] import org.apache.royale.utils.Language;
> >
> >      [java]        ^
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/processors/EventHandlerProcessor.as(106):
> > col: 16 Access of possibly undefined property Language.
> >
> >      [java]
> >
> >      [java] method = Language.closure(method, bean.source,
> > eventHandlerTag.host.name);
> >
> >      [java]          ^
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/processors/EventHandlerProcessor.as(127):
> > col: 15 Access of possibly undefined property Language.
> >
> >      [java]
> >
> >      [java] method = Language.closure(method, bean.source,
> > eventHandlerTag.host.name);
> >
> >      [java]          ^
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/processors/InjectProcessor.as(123):
> > col: 61 Access of possibly undefined property QName.
> >
> >      [java]
> >
> >      [java] var bind:Boolean = injectTag.bind && !( destPropName is QName
> > );
> >
> >      [java]                                                         ^
> >
> >      [java]
> >
> >      [java]
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/projects/Crux/src/main/royale/org/apache/royale/crux/processors/InjectProcessor.as(137):
> > col: 26 Access of possibly undefined property QName.
> >
> >      [java]
> >
> >      [java] if( destPropName is QName && injectTag.bind == true )
> >
> >      [java]                     ^
> >
> >      [java]
> >
> >      [java] Java Result: 3
> >
> >
> > BUILD FAILED
> >
> > /Users/carlosrovira/Dev/Royale/Source/royale-asjs/build.xml:652: The
> > following error occurred while executing this line:
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/build.xml:143:
> > The following error occurred while executing this line:
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/build.xml:370:
> > The following error occurred while executing this line:
> >
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/projects/Crux/build.xml:85:
> > The following error occurred while executing this line:
> >
> >
> >
> /Users/carlosrovira/Dev/Royale/Source/royale-asjs/frameworks/projects/Crux/build.xml:111:
> > condition satisfied
> >
> >
> > Total time: 12 minutes 8 seconds
> >
> > Error:Build stopped - build SDK with ANT
> >
> >
> > Thanks!
> >
> > Carlos
> >
> >
> >
> >
> > El mar., 16 jul. 2019 a las 0:20, Josh Tynjala (<
> [email protected]
> > >)
> > escribió:
> >
> > > The Maven royale-compiler build is fixed now. :)
> > >
> > > --
> > > Josh Tynjala
> > > Bowler Hat LLC <https://bowlerhat.dev>
> > >
> > >
> > > On Mon, Jul 15, 2019 at 1:19 PM Josh Tynjala <
> [email protected]>
> > > wrote:
> > >
> > > > FYI: Found an issue building royale-compiler with Maven. Working on
> the
> > > > fix.
> > > >
> > > > --
> > > > Josh Tynjala
> > > > Bowler Hat LLC <https://bowlerhat.dev>
> > > >
> > > >
> > > > On Mon, Jul 15, 2019 at 12:32 PM Josh Tynjala <
> > [email protected]
> > > >
> > > > wrote:
> > > >
> > > >> Hey folks,
> > > >>
> > > >> I just pushed some commits to royale-compiler and royale-asjs, and I
> > > >> wanted to add a little explanation, and some possible
> troubleshooting
> > > >> advice if anything seems to have broken in your apps.
> > > >>
> > > >> My work over the last week has been to fix an issue related to
> > > specifying
> > > >> dependencies when compiling libraries for JS. As you probably know,
> > the
> > > >> compiler supports two options for adding libraries as dependencies,
> > > >> library-path and external-library-path. The library-path compiler
> > option
> > > >> basically says "include all classes that I use from this SWC in the
> > > final
> > > >> output". It's typically what you use when compiling an app that
> uses a
> > > >> library. The external-library-path compiler option basically says
> "if
> > I
> > > use
> > > >> anything from this SWC, check that I'm using the types correctly,
> but
> > > don't
> > > >> include any of classes from this SWC in the final output".
> > > >>
> > > >> If you're compiling an app, you typically use library-path for
> > > >> everything. You use external-library-path only for dependencies like
> > > >> playerglobal.swc/airglobal.swc in Flash or typedef SWCs in JS.
> > > Basically,
> > > >> for an app project, external-library-path is for classes that are
> > > provided
> > > >> natively by the Flash runtime or a web browser, like Chrome or
> > Firefox.
> > > >>
> > > >> When compiling libraries, external-library-path is also used to
> > prevent
> > > >> the compiler from creating a "fat" library that stuffs in all of the
> > > >> dependencies. Let's say that you have a library, A.swc. It provides
> > some
> > > >> core functionality that is needed by both B.swc and C.swc. When we
> > > compile
> > > >> B.swc and C.swc, we don't want the classes from A.swc duplicated in
> > > both of
> > > >> them. So we add A.swc to the external-library-path when compiling
> > B.swc
> > > or
> > > >> C.swc. Then, if you use those SWCs when compiling an app, you need
> to
> > > add
> > > >> A.swc, B.swc, and C.swc to the library-path.
> > > >>
> > > >> To put that in Royale terms, A.swc is something like LanguageJS.swc
> or
> > > >> CoreJS.swc. They're some of our lowest-level SWCs in the framework.
> > > B.swc
> > > >> and C.swc are more like BasicJS.swc or JewelJS.swc, and they tend to
> > > share
> > > >> multiple classes from the lower-level stuff.
> > > >>
> > > >> Up until now, library-path and external-library-path were a little
> > > quirky
> > > >> when compiling to JS. It was related to the goog.provide() and
> > > >> goog.require() calls that you might have seen in the generated JS.
> > These
> > > >> are from the module system that we use in Royale. The compiler
> didn't
> > > know
> > > >> how to differentiate between classes that had goog.provide() and
> > classes
> > > >> that were typedefs for JS libraries. It treated everything on the
> > > >> external-library-path as a typedef, and this led to missing
> > > goog.require()
> > > >> calls in the generated JS. To work around this, when we specified
> > > >> dependencies in our framework SWCs, we used library-path to ensure
> > that
> > > >> goog.require() would be used.
> > > >>
> > > >> This workaround of using library-path led to "fat" SWCs that
> contained
> > > >> all of their dependencies. Low-level classes in SWCs like CoreJS
> were
> > > >> duplicated in higher-level SWCs. This led to the compiler getting
> > > confused
> > > >> about exactly where a class was defined.
> > > >>
> > > >> This has resulted in some minor issues here and there, but nothing
> too
> > > >> major until recently. However, Harbs noticed the other day that it
> > > caused
> > > >> the compiler to copy extra default CSS into apps from SWCs that you
> > may
> > > not
> > > >> have been using. So, you might build an app with the Basic
> components,
> > > but
> > > >> you'd get extra CSS from Jewel or MaterialDesignLite. This could
> mess
> > up
> > > >> your app's styling pretty dramatically.
> > > >>
> > > >> I updated the compiler to better detect when a class needs
> > > goog.require()
> > > >> and when it's a typedef. If that class comes from a SWC, the
> compiler
> > > knows
> > > >> to check for an included file like, js/out/com/example/MyClass.js.
> If
> > > the
> > > >> generated JS is there, goog.require() is necessary. If it's missing,
> > > it's
> > > >> treated as a typedef class instead. If the class is an .as source
> file
> > > >> instead, the compiler looks for the @externs asdoc tag to determine
> if
> > > it's
> > > >> a typedef class (and everything else needs goog.require() instead).
> > > >>
> > > >> By the way, if we ever support other module systems, it shouldn't be
> > too
> > > >> difficult to extend this code to detect different SWC layouts for
> each
> > > >> module system.
> > > >>
> > > >> If your project is an app, this change should not cause any
> problems.
> > > >> You're probably using library-path and external-library-path
> > correctly.
> > > >>
> > > >> If you have a project that is a library, you should check your
> > compiler
> > > >> options to see if you are using library-path and
> external-library-path
> > > >> correctly. If your library depends on another library, you probably
> > > should
> > > >> be using external-library-path because you don't want a "fat" SWC.
> In
> > > other
> > > >> words, if you're using library-path in a library project, you
> probably
> > > need
> > > >> to change that to external-library-path.
> > > >>
> > > >> If you have any custom typedef SWCs, you may want to recompile them.
> > At
> > > >> one point, the compiler had a bug where classes in typedef SWCs were
> > > being
> > > >> incorrectly added to the "js/out" folder in the SWC, but that was
> > > >> incorrect. They should have been placed in an "externs" folder
> > instead.
> > > The
> > > >> compiler handles this correctly now, but old typedef SWCs may look
> > like
> > > >> goog.require() SWCs instead. To be sure, you can open a SWC file in
> > any
> > > >> program that can read ZIP files, and you'll see the internal folder
> > > >> structure. If a typedef SWC has a "js/out" folder, it's not going to
> > > work
> > > >> properly.
> > > >>
> > > >> If you're working directly out of the royale-compiler and
> royale-asjs
> > > Git
> > > >> repos, be sure to update and rebuild them both. The nightly builds
> > > should
> > > >> be updated shortly.
> > > >>
> > > >> When you build any apps, be sure to clean first, just to be sure
> that
> > > you
> > > >> have the latest JS files from the SWCs.
> > > >>
> > > >> If you run into any other problems with these changes, please let me
> > > >> know. I'll get them fixed right away!
> > > >>
> > > >> --
> > > >> Josh Tynjala
> > > >> Bowler Hat LLC <https://bowlerhat.dev>
> > > >>
> > > >
> > >
> >
> >
> > --
> > Carlos Rovira
> > http://about.me/carlosrovira
> >
>


-- 
Carlos Rovira
http://about.me/carlosrovira

Reply via email to