flex-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alex Harui <aha...@adobe.com.INVALID>
Subject Re: [FlexJS] Use of typeof
Date Wed, 05 Jul 2017 16:48:45 GMT
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" <joshtynjala@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 <aharui@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.lists@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.lists@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.lists@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 <joshtynjala@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.lists@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
>> >>>
>> >>
>> >
>>
>>

Mime
View raw message