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