I think the only thing the compiler does with "window" is allow you to use "window" to disambiguate between a "global" API and another API in a package with the same name.
And then the JS.SWC typedefs specify certain APIs. AIUI, Electron is another runtime that has a window variable and you want to detect the difference between Browser, Node and Electron? Or are you willing to just try to check for features instead? If you can show what JS code you'd want to end up with we can look into changing the compiler so you can write AS to generate that JS. Thanks, -Alex On 7/12/17, 9:03 PM, "Harbs" <harbs.li...@gmail.com> wrote: >What do we currently do with window? > >global in Node is the same as window in the browser. All global variables >are attached to the global object. > >global[“foo”] could compile to global[“foo”], global.foo, or just plain >foo, and it all means the same thing. > >> On Jul 13, 2017, at 2:14 AM, Alex Harui <aha...@adobe.com.INVALID> >>wrote: >> >> What AS do you want to write and what JS do you want as output? >> >> -Alex >> >> On 7/9/17, 12:53 AM, "Harbs" <harbs.li...@gmail.com> wrote: >> >>> Checking for window will work for Node, but it will not work for >>>Electron. >>> >>> I tried adding global to Falcon, but I was obviously going about it >>> wrong, because what I tried did not work. >>> >>> This is not really high priority for me right now, so I’m moving on to >>> something else… >>> >>>> On Jul 6, 2017, at 3:05 AM, Alex Harui <aha...@adobe.com.INVALID> >>>>wrote: >>>> >>>> I've noticed lots of advice on the internet to use feature detection >>>> instead of browser/runtime detection. Did you rule out doing that? >>>> Browsers may implement new features over time. >>>> >>>> But otherwise, I see some clever tests that check for "window" and a >>>>few >>>> other things. >>>> >>>> HTH, >>>> -Alex >>>> >>>> On 7/5/17, 1:54 PM, "Harbs" <harbs.li...@gmail.com> wrote: >>>> >>>>> No. I was trying to use process to check whether it’s running in a >>>>>Node >>>>> runtime (such as Node or Electron). window does not have process. >>>>> >>>>> I’m trying to add a class that lets the client know what environment >>>>> it’s >>>>> running in. >>>>> >>>>> Adding global sounds like a good idea. Between window and global, I >>>>> think >>>>> that would offer a solution everywhere. >>>>> >>>>>> On Jul 5, 2017, at 7:48 PM, Alex Harui <aha...@adobe.com.INVALID> >>>>>> wrote: >>>>>> >>>>>> Sure, I know it wouldn't work at runtime, but it sounded like Harbs >>>>>> couldn't even get the compiler to accept window["process"] which it >>>>>> should. >>>>>> >>>>>> So, it should be ok to write: >>>>>> >>>>>> if(typeof window !== "undefined") >>>>>> { >>>>>> theProcess = window["process"]; >>>>>> } >>>>>> else >>>>>> >>>>>> theProcess = global.process >>>>>> >>>>>> But is there really a process property in the browser? >>>>>> >>>>>> We could create or own single variable if we want. How often do >>>>>> libraries >>>>>> need stuff in window/global? Classes that need it should be able to >>>>>> use >>>>>> inject_html and run some JS that maps window to global or the other >>>>>> way >>>>>> around. >>>>>> >>>>>> HTH, >>>>>> -Alex >>>>>> >>>>>> On 7/5/17, 6:43 AM, "Josh Tynjala" <joshtynj...@gmail.com> wrote: >>>>>> >>>>>>> Node.js doesn't have a window variable, so window["process"] won't >>>>>>> work. >>>>>>> They have a global variable instead. >>>>>>> >>>>>>> I remember reading that there is a proposal for ECMAScript to >>>>>>> standardize >>>>>>> a >>>>>>> single variable that refers to window in the browser and global in >>>>>>> Node.js, >>>>>>> but that doesn't exist yet. >>>>>>> >>>>>>> - Josh >>>>>>> >>>>>>> On Tue, Jul 4, 2017 at 11:35 PM, Alex Harui >>>>>>> <aha...@adobe.com.invalid> >>>>>>> wrote: >>>>>>> >>>>>>>> What class in Core needs this dependency? I think one drawback is >>>>>>>> that >>>>>>>> users of that class will need to add node.swc to their project >>>>>>>> dependencies. But I don't think every consumer of Core will need >>>>>>>> node.swc. >>>>>>>> >>>>>>>> But first, why didn't window["process"] work? In theory Falcon >>>>>>>>will >>>>>>>> let >>>>>>>> you access anything off of window. We could also add global if we >>>>>>>> want. >>>>>>>> Or maybe we should only allow global and have some bootstrap code >>>>>>>> that >>>>>>>> maps global to window? >>>>>>>> >>>>>>>> -Alex >>>>>>>> >>>>>>>> On 7/4/17, 2:09 PM, "Harbs" <harbs.li...@gmail.com> wrote: >>>>>>>> >>>>>>>>> Actually, I see that the Node typedefs has all the process >>>>>>>>> declarations >>>>>>>>> in global.js. >>>>>>>>> >>>>>>>>> Is there an issue with adding a dependency in CoreJS to node.swc? >>>>>>>>> >>>>>>>>> Should a class that has this dependency go somewhere else? (I >>>>>>>>>don’t >>>>>>>>> really see an issue with adding the dependency, but I’m throwing >>>>>>>>> this >>>>>>>> out >>>>>>>>> in case I’m missing something.) >>>>>>>>> >>>>>>>>> Harbs >>>>>>>>> >>>>>>>>>> On Jul 5, 2017, at 12:00 AM, Harbs <harbs.li...@gmail.com> >>>>>>>>>>wrote: >>>>>>>>>> >>>>>>>>>> Looks like it. >>>>>>>>>> >>>>>>>>>> I see this in missing.js: >>>>>>>>>> >>>>>>>>>> /** >>>>>>>>>> * @export >>>>>>>>>> * This gets mapped to org.apache.flex.utils.Language.trace() by >>>>>>>>>> the >>>>>>>>>> compiler >>>>>>>>>> * @param {...} rest >>>>>>>>>> */ >>>>>>>>>> function trace(rest) {} >>>>>>>>>> >>>>>>>>>> /** >>>>>>>>>> * @type {!Console} >>>>>>>>>> * @const >>>>>>>>>> */ >>>>>>>>>> var console; >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> I guess I can add another one like so: >>>>>>>>>> >>>>>>>>>> /** >>>>>>>>>> * @type {!Process} >>>>>>>>>> * @const >>>>>>>>>> */ >>>>>>>>>> var process; >>>>>>>>>> >>>>>>>>>> However, it seems like a drag to have to add a typedef every >>>>>>>>>>time >>>>>>>>>> a >>>>>>>>>> developer needs to check for the existence of a global that we >>>>>>>>>>did >>>>>>>>>> not >>>>>>>>>> think of. >>>>>>>>>> >>>>>>>>>>> On Jul 4, 2017, at 9:13 PM, Harbs <harbs.li...@gmail.com> >>>>>>>>>>>wrote: >>>>>>>>>>> >>>>>>>>>>> Thanks. Here’s what I see: >>>>>>>>>>> >>>>>>>>>>> if(typeof window !== "undefined") >>>>>>>>>>> { >>>>>>>>>>> theConsole = window.console; >>>>>>>>>>> } >>>>>>>>>>> else if(typeof console !== "undefined") >>>>>>>>>>> { >>>>>>>>>>> theConsole = console; >>>>>>>>>>> } >>>>>>>>>>> >>>>>>>>>>> Did you define console in a typedef maybe? >>>>>>>>>>> >>>>>>>>>>> I’m thinking that Falcon should really allow undefined >>>>>>>>>>>variables >>>>>>>> when >>>>>>>>>>> used with “typeof”. >>>>>>>>>>> >>>>>>>>>>> Truth be told, I really need to do something like one of these: >>>>>>>>>>> if(typeof (process) != 'undefined' && {}.toString.call(process) >>>>>>>>>>> == >>>>>>>>>>> '[object process]’) >>>>>>>>>>> or: >>>>>>>>>>> if(typeof process != 'undefined' && process && >>>>>>>>>>> process.constructor.name == "process”) >>>>>>>>>>> >>>>>>>>>>> Of course every reference to process causes a compiler error. I >>>>>>>> wonder >>>>>>>>>>> if there’s some way to tell the compiler to accept it without >>>>>>>>>>> complaining… >>>>>>>>>>> >>>>>>>>>>>> On Jul 4, 2017, at 8:54 PM, Josh Tynjala >>>>>>>>>>>><joshtynj...@gmail.com> >>>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>> I don't remember exactly what I did, but in order to get >>>>>>>>>>>>trace() >>>>>>>>>>>> working in >>>>>>>>>>>> Node.js, I had to figure out how to find the console object on >>>>>>>> window >>>>>>>>>>>> versus global. I feel like I remember using typeof, but maybe >>>>>>>>>>>>it >>>>>>>> was >>>>>>>>>>>> something else. Take a look at the implementation of >>>>>>>> Language.trace() >>>>>>>>>>>> to >>>>>>>>>>>> see what I did. >>>>>>>>>>>> >>>>>>>>>>>> - Josh >>>>>>>>>>>> >>>>>>>>>>>> On Jul 4, 2017 5:26 AM, "Harbs" <harbs.li...@gmail.com> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> I’m trying to figure out how to solve this dilemma: >>>>>>>>>>>>> >>>>>>>>>>>>> Browsers attach global variables to window. >>>>>>>>>>>>> >>>>>>>>>>>>> Node.js attaches globals to global. >>>>>>>>>>>>> >>>>>>>>>>>>> I’m trying to check for the existence of a global called >>>>>>>>>>>>> process. >>>>>>>> In >>>>>>>>>>>>> JS, >>>>>>>>>>>>> you’d generally do that by checking typeof process == >>>>>>>>>>>>> ‘undefined’. >>>>>>>>>>>>> Falcon >>>>>>>>>>>>> does not allow you to do that and complains that process is >>>>>>>>>>>>>an >>>>>>>>>>>>> undefined >>>>>>>>>>>>> property. In the browser you can use window[“process”] == >>>>>>>> undefined >>>>>>>>>>>>> and in >>>>>>>>>>>>> node you can (theoretically) use global[“process”] == >>>>>>>>>>>>> undefined. >>>>>>>>>>>>> I >>>>>>>>>>>>> can’t >>>>>>>>>>>>> think of a generic way to do this though. >>>>>>>>>>>>> >>>>>>>>>>>>> Thoughts? >>>>>>>>>>>>> Harbs >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>> >>>>> >>>> >>> >> >