I'm still not clear what changes are needed. Are you trying to access APIs that are global but not defined in JS.SWC or Node.SWC? Otherwise, the APIs on window/global should be defined in those SWCs.
I'm not sure what the test case is supposed to look like. Thanks, -Alex On 7/13/17, 12:11 AM, "Harbs" <harbs.li...@gmail.com> wrote: >Electron has both window and global. Node has global and no window. I >think CEF has window and no global. Browsers have window but not global. >Depending on which environment you are writing for, you’re going to need >either window or global for accessing global variables. > >I’m more concerned with general global access in Node than my specific >use case. If general global access works, then that gives a solution for >my specific case as well as an other arbitrary one where you’d use window >in the browser. > >I think it’s fine to cross compile global[“foo”] to the exact same >global[“foo”] in JS. In other words, the compiler should accept global >with bracket notation and pass it through unchanged. > >> On Jul 13, 2017, at 9:33 AM, Alex Harui <aha...@adobe.com.INVALID> >>wrote: >> >> 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 >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >