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 >>>>>>>> >>>>>>> >>>>>> >>>>> >>>>> >>> >> >