Adding node.swc makes things like require be recognized, but global is still 
not. Odd. I thought I saw it in the typedefs.

> On Jul 13, 2017, at 8:04 PM, Harbs <harbs.li...@gmail.com> wrote:
> 
> Are you saying we should add node.swc to Core?
> 
> FWIW, I just tried setting targets to JSNode and global is still not 
> recognized. node.swc does not seem to be used even when that’s the target. 
> That does not seem right either.
> 
>> On Jul 13, 2017, at 7:42 PM, Josh Tynjala <joshtynj...@gmail.com> wrote:
>> 
>> I think the correct solution is to add node.swc to the
>> -external-library-path when you need access to global. You need js.swc on
>> the -external-library-path when you want to access window. You can't use
>> window in a SWF-only project, for instance.
>> 
>> - Josh
>> 
>> On Thu, Jul 13, 2017 at 9:29 AM, Harbs <harbs.li...@gmail.com> wrote:
>> 
>>> There is a mention of window in the NativeJSType enums. Not sure why it’s
>>> needed there.
>>> 
>>> global should already be in node.js (I think). I’m pretty sure it’s
>>> defined in the node typedefs
>>> 
>>> I don’t really care how it’s achieved, but by default (without doing any
>>> special imports) global should be recognized. (just like window is)
>>> 
>>> Right now, typing global into a FlexJS project targeting “JSFlex” or any
>>> one of the framework projects results in a compiler error. How do we fix
>>> that?
>>> 
>>>> On Jul 13, 2017, at 7:17 PM, Alex Harui <aha...@adobe.com.INVALID>
>>> wrote:
>>>> 
>>>> IIRC, the compiler doesn't special case handling of that code.  "window"
>>>> is defined in missing.js so the js.swc knows there is such an entity.  Is
>>>> there any reason not to add a "global" to node.swc?
>>>> 
>>>> -Alex
>>>> 
>>>> On 7/13/17, 12:29 AM, "Harbs" <harbs.li...@gmail.com> wrote:
>>>> 
>>>>> Right now, if you have code that looks like this, the compiler will
>>>>> report and error and it will fail:
>>>>> 
>>>>> global[“foo”];
>>>>> 
>>>>> I would like for that to be legal code in a COMPILE::JS block and it
>>>>> should compile to:
>>>>> 
>>>>> global[“foo”];
>>>>> 
>>>>> Exactly the same as window:
>>>>> 
>>>>> If you write:
>>>>> window[“foo”];
>>>>> 
>>>>> It’s legal code and will compile to:
>>>>> window[“foo”];
>>>>> 
>>>>> That’s it.
>>>>> 
>>>>>> On Jul 13, 2017, at 10:18 AM, Alex Harui <aha...@adobe.com.INVALID>
>>>>>> wrote:
>>>>>> 
>>>>>> I'm still not clear what changes are needed.
>>>>>> 
>>>>>> Are you trying to access APIs that are global but not defined in JS.SWC
>>>>>> or
>>>>>> Node.SWC?  Otherwise, the APIs on window/global should be defined in
>>>>>> those
>>>>>> SWCs.
>>>>>> 
>>>>>> I'm not sure what the test case is supposed to look like.
>>>>>> 
>>>>>> Thanks,
>>>>>> -Alex
>>>>>> 
>>>>>> On 7/13/17, 12:11 AM, "Harbs" <harbs.li...@gmail.com> wrote:
>>>>>> 
>>>>>>> Electron has both window and global. Node has global and no window. I
>>>>>>> think CEF has window and no global. Browsers have window but not
>>>>>>> global.
>>>>>>> Depending on which environment you are writing for, you’re going to
>>>>>>> need
>>>>>>> either window or global for accessing global variables.
>>>>>>> 
>>>>>>> I’m more concerned with general global access in Node than my specific
>>>>>>> use case. If general global access works, then that gives a solution
>>>>>>> for
>>>>>>> my specific case as well as an other arbitrary one where you’d use
>>>>>>> window
>>>>>>> in the browser.
>>>>>>> 
>>>>>>> I think it’s fine to cross compile global[“foo”] to the exact same
>>>>>>> global[“foo”] in JS. In other words, the compiler should accept global
>>>>>>> with bracket notation and pass it through unchanged.
>>>>>>> 
>>>>>>>> On Jul 13, 2017, at 9:33 AM, Alex Harui <aha...@adobe.com.INVALID>
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> I think the only thing the compiler does with "window" is allow you
>>> to
>>>>>>>> use
>>>>>>>> "window" to disambiguate between a "global" API and another API in a
>>>>>>>> package with the same name.
>>>>>>>> 
>>>>>>>> And then the JS.SWC typedefs specify certain APIs.
>>>>>>>> 
>>>>>>>> AIUI, Electron is another runtime that has a window variable and you
>>>>>>>> want
>>>>>>>> to detect the difference between Browser, Node and Electron?  Or are
>>>>>>>> you
>>>>>>>> willing to just try to check for features instead?
>>>>>>>> 
>>>>>>>> If you can show what JS code you'd want to end up with we can look
>>>>>>>> into
>>>>>>>> changing the compiler so you can write AS to generate that JS.
>>>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> -Alex
>>>>>>>> 
>>>>>>>> On 7/12/17, 9:03 PM, "Harbs" <harbs.li...@gmail.com> wrote:
>>>>>>>> 
>>>>>>>>> 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