I'm currently working to implement a new Royale target that outputs ECMAScript 2015 standard modules instead of goog.provide modules. I got a pure AS3 project working well with native imports, but once I start trying to use anything involving EventDispatcher, the GCL dependencies become a hurdle. It looks like I either still need to continue to call goog.require() for those classes specifically (but I'm actually hoping to get rid of the base.js loader from GCL for this target), or I need to generate <script> tags in the HTML for the GCL classes that are referenced.
-- Josh Tynjala Bowler Hat LLC <https://bowlerhat.dev> On Fri, Feb 21, 2025 at 12:02 AM Harbs <harbs.li...@gmail.com> wrote: > One of the things I’ve wanted to tackle for a long time is getting rid of > the dependency on goog events. > > There’s really no technical reason why we still need it. Most of the > advantage of the goog event library is with handling really old browsers > which there’s no reason to support anymore. > > Harbs > > > On Feb 21, 2025, at 7:03 AM, Greg Dove <greg.d...@gmail.com> wrote: > > > > Thanks Josh, that's all helpful to know. > > > > iirc I think we are also currently blocked from updating our closure > > compiler version because of some local subclasses or overrides where the > > base classes or implementation was changed inside in a more recent GCC > > version, but it's been some time since I tried to look into that, so I > > might be wrong. > > > > In terms of events, I'd be happy to look at that in several months time > if > > we can wait, I will likely not find time before that. > > > > Lots of things changed in js since the start, and it seems that if we > > really wanted to we could support weak event listeners now, for example. > > > > more modern outputs from our compiler are another future option, which > > might make debugging in the js version of the code much easier. > > > > -Greg > > > > > > > > On Fri, Feb 21, 2025 at 12:20 PM Josh Tynjala <joshtynj...@bowlerhat.dev > > > > wrote: > > > >> Hi team, > >> > >> Today, I noticed that the GitHub repo for Google's Closure Library is > now > >> archived/read-only, and the README contains the following message. > >> > >> Closure Library has been archived. We no longer see it as meeting the > needs > >>> of modern JavaScript development, and we recommend that users look for > >>> alternative solutions. > >>> > >>> Please see https://github.com/google/closure-library/issues/1214 for > >> more > >>> details. > >> > >> > >> This applies to Closure Library only. We also use the related Closure > >> Compiler in Royale. Google addresses Closure Compiler specifically in > the > >> issue mentioned above: > >> > >> We still believe that Closure Compiler is the best advanced optimizer in > >>> terms of minified size, as long as it can assume that all input code > >> meets > >>> its strict requirements. While these requirements are sometimes > difficult > >>> to guarantee for hand-written JavaScript, it's still very relevant as a > >>> compilation target for languages such as Java (via J2cl) or C++ (via > >>> emscripten), which can enforce the compiler's requirements more > >>> effectively. For users hand-writing JavaScript, we see TypeScript as a > >>> better authoring language, even if Closure Compiler continues to be > used > >>> for optimization. > >>> > >>> All this said, Closure Compiler and Library have a number of > intersection > >>> points where they interdepend on one another. We are committed to > >> retaining > >>> the core functionality in Closure Compiler, while dropping its > dependency > >>> on Closure Library. This includes Closure dependency management ( > >>> goog.module, goog.require, etc), reflection (goog.reflect.object, > >>> goog.reflect.objectProperty), defines (goog.define), and a few others. > >> > >> > >> So even if we decide to eventually drop Closure Library, we can > continue to > >> use Closure Compiler to create optimized release builds. > >> > >> It also appears that we can continue to use the > goog.provide/goog.require > >> module system with Closure Compiler. The parts of Closure Library that > >> include the module system appear to have been migrated (or are in the > >> process of being migrated) to Closure Compiler here: > >> > >> https://github.com/google/closure-compiler/tree/master/lib > >> > >> In the royale-asjs codebase, you can search for "import goog." to > discover > >> which other parts of Closure Library that we currently use in Royale. > >> Ideally, that usage should probably start trending downward. > >> > >> We use the goog.html package for HTML sanitation. I see that Google > >> specifically recommends the following library as a replacement: > >> > >> https://github.com/google/safevalues > >> > >> Our biggest use is probably of the goog.events package. I think that we > can > >> reduce some of it relatively easily (like the goog.events.EventType > >> constants). Calls to goog.events.listen() may be easy to replace too. > >> > >> However, the trickiest part is our EventDispatcher class that extends > >> goog.events.EventTarget. Extending goog.events.EventTarget instead of > >> writing a custom implementation was probably mostly for convenience. If > we > >> want to replace it with our own custom implementation, we'll definitely > >> want a good set of automated tests to ensure no regressions. Starling > >> Framework, an AS3 library with its own EventDispatcher implementation, > has > >> a good set of tests that we might consider adopting, if we choose to > >> migrate away from goog.events.EventTarget. > >> > >> Anyway, I just wanted to spread awareness of the state of Closure > Library, > >> since we currently depend on it. It was officially deprecated in > November > >> 2023, and archived and made read-only in August 2024. > >> > >> -- > >> Josh Tynjala > >> Bowler Hat LLC <https://bowlerhat.dev> > >> > >