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

Reply via email to