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

Reply via email to