An ECMA 2015 target sounds really good!

Out of curiosity: Is dealing with circular dependencies any tricker with that 
target than goog.provide?

Maybe we should coordinate the work on migrating events?

> On Feb 21, 2025, at 6:48 PM, Josh Tynjala <joshtynj...@bowlerhat.dev> wrote:
> 
> 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>
>>>> 
>> 
>> 

Reply via email to