What kind of utility do you have in mind?
> On Feb 6, 2018, at 7:09 PM, Alex Harui <aha...@adobe.com.INVALID> wrote: > > Don't bother making VO's by hand for ASDoc. Let's write a utility to > generate it. It will save everyone time. If you want to see > bin/js-release, change the build to not use ADVANCED_OPTIMIZATIONS for now. > > There are lots of reasons to avoid using plain Object in a Royale app > other than as a hash map. IMO, most C and Java apps don't use generic > untyped dynamic bags of properties. If I add a warning about Object use, > there will be a directive to suppress it. Objects are prone to error, and > there is some indication that runtimes work better with type information. > The JS runtimes wouldn't bother type inferencing otherwise. WASM hints > that it wants types. > > My 2 cents, > -Alex > > On 2/6/18, 8:45 AM, "Gabe Harbs" <harbs.li...@gmail.com> wrote: > >> Huh? >> >> I don’t see how it’s possible to avoid Object completely. Even using VOs >> require constructing them from Objects when coming from outside sources. >> >> Again: I’m not arguing against using VOs when possible/practical. I’m >> just arguing that use of dot notation on Objects shouldn’t blow up your >> app. >> >> Right now, I’m creating VOs for the ASDoc app. It’s kind of tedious work… >> >> Harbs >> >>> On Feb 6, 2018, at 6:40 PM, Alex Harui <aha...@adobe.com.INVALID> wrote: >>> >>> Good catch. I fixed that. >>> >>> Actually, you are arguing in favor of ValueObjects. The error was there >>> because commitObj was a plain Object so the compiler couldn't understand >>> more about it. We want to not have any plain objects in a Royale app. >>> They only create potential problems. In fact, maybe it is time for me >>> to >>> figure out how to generate warnings on every use of plain Object. >>> Eventually we will have typedefs for the GitHub value objects and then >>> there wouldn't be an issue like this. >>> >>> Thanks for proving my point. >>> >>> -Alex >>> >>> On 2/6/18, 2:59 AM, "Gabe Harbs" <harbs.li...@gmail.com> wrote: >>> >>>> To illustrate that the VO solution is also error prone, I’m pretty sure >>>> that this page has a mistake: >>>> >>>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fapachero >>>> ya >>>> >>>> leci.westus2.cloudapp.azure.com%3A8080%2Fjob%2FRoyaleDocs_Staging%2Flast >>>> Su >>>> >>>> ccessfulBuild%2Fartifact%2F_site%2Fcreate-an-application%2Fapplication-t >>>> ut >>>> >>>> orial%2Fvalue-objects.html&data=02%7C01%7Caharui%40adobe.com%7C924b229e4 >>>> 9b >>>> >>>> b443ddbf708d56d50cd97%7C71f1da39c0a84d5a8d88a67b23c30bf4%7C0%7C0%7C63653 >>>> 51 >>>> >>>> 16172815360&sdata=e9FoFwJfNJfjmFlWF4%2FRIwCNU4R5mhEEQ9GYz70W3Ls%3D&reser >>>> ve >>>> d=0 >>>> >>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fapacher >>>> oy >>>> >>>> aleci.westus2.cloudapp.azure.com%3A8080%2Fjob%2FRoyaleDocs_Staging%2Flas >>>> tS >>>> >>>> uccessfulBuild%2Fartifact%2F_site%2Fcreate-an-application%2Fapplication- >>>> tu >>>> >>>> torial%2Fvalue-objects.html&data=02%7C01%7Caharui%40adobe.com%7C924b229e >>>> 49 >>>> >>>> bb443ddbf708d56d50cd97%7C71f1da39c0a84d5a8d88a67b23c30bf4%7C0%7C0%7C6365 >>>> 35 >>>> >>>> 116172825365&sdata=3m3kTW910JYWV8MaM4%2F%2B3v82l5EvxIqgRjqAtIC7N%2BU%3D& >>>> re >>>> served=0> >>>> >>>> Unless I’m missing something, the following line can be renamed: >>>> data.message = commitObj.message; >>>> >>>> I think it should have been: >>>> data.message = commitObj[“message”]; >>>> >>>> Harbs >>>> >>>>> On Feb 6, 2018, at 12:48 PM, Gabe Harbs <harbs.li...@gmail.com> wrote: >>>>> >>>>> Related: >>>>> >>>>> On this page: >>>>> >>>>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fapacher >>>>> oy >>>>> >>>>> aleci.westus2.cloudapp.azure.com%3A8080%2Fjob%2FRoyaleDocs_Staging%2Fla >>>>> st >>>>> >>>>> SuccessfulBuild%2Fartifact%2F_site%2Fcreate-an-application%2Fapplicatio >>>>> n- >>>>> >>>>> tutorial%2Fdata.html&data=02%7C01%7Caharui%40adobe.com%7C924b229e49bb44 >>>>> 3d >>>>> >>>>> dbf708d56d50cd97%7C71f1da39c0a84d5a8d88a67b23c30bf4%7C0%7C0%7C636535116 >>>>> 17 >>>>> >>>>> 2825365&sdata=IgeSJZENyrUXHWMMzG7U5ZIBYdBe5so%2BeO81N%2B1u%2B%2Fc%3D&re >>>>> se >>>>> rved=0 >>>>> >>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fapache >>>>> ro >>>>> >>>>> yaleci.westus2.cloudapp.azure.com%3A8080%2Fjob%2FRoyaleDocs_Staging%2Fl >>>>> as >>>>> >>>>> tSuccessfulBuild%2Fartifact%2F_site%2Fcreate-an-application%2Fapplicati >>>>> on >>>>> >>>>> -tutorial%2Fdata.html&data=02%7C01%7Caharui%40adobe.com%7C924b229e49bb4 >>>>> 43 >>>>> >>>>> ddbf708d56d50cd97%7C71f1da39c0a84d5a8d88a67b23c30bf4%7C0%7C0%7C63653511 >>>>> 61 >>>>> >>>>> 72825365&sdata=IgeSJZENyrUXHWMMzG7U5ZIBYdBe5so%2BeO81N%2B1u%2B%2Fc%3D&r >>>>> es >>>>> erved=0> >>>>> >>>>> Shouldn’t the following code have trouble with minification? >>>>> >>>>> { >>>>> repos = configurator.json.repos; >>>>> projectName = configurator.json.projectName; >>>>> } >>>>> >>>>> What’s preventing json.repos and json.projectName from being renamed? >>>>> >>>>>> On Feb 5, 2018, at 11:34 PM, Alex Harui <aha...@adobe.com.INVALID >>>>>> <mailto:aha...@adobe.com.INVALID>> wrote: >>>>>> >>>>>> Maybe I'm missing something. I don't think Royale has any extra >>>>>> problems >>>>>> with JSON objects than other JS Frameworks have. If you want to >>>>>> minify, >>>>>> you have to use brackets and strings. If you don't want to minify, >>>>>> then >>>>>> you don't need to worry about that. Am I wrong about that? >>>>>> >>>>>> >>>>>> JSON has something like a "reviver". Has anyone played with that to >>>>>> see >>>>>> if it can be used to convert straight to VO's? >>>>>> >>>>>> Thanks, >>>>>> -Alex >>>>>> >>>>>> On 2/5/18, 1:08 PM, "Gabe Harbs" <harbs.li...@gmail.com >>>>>> <mailto:harbs.li...@gmail.com>> wrote: >>>>>> >>>>>>> An additional point: >>>>>>> >>>>>>> How do you propose handling json that’s multiple levels deep? Walk >>>>>>> the >>>>>>> json and construct VOs on each level? That seems to me just as bad >>>>>>> as >>>>>>> the >>>>>>> problem. Imagine you just want foo.baz.thingy.uid? You’d need to >>>>>>> create a >>>>>>> VO of foo, baz and thingy or be forced to use >>>>>>> foo[“baz”][“thingy”][“uid”]. Of course the average user is not going >>>>>>> to >>>>>>> remember to do that until their release build doesn’t work… >>>>>>> >>>>>>> Creating VOs means you can’t simply use JSON.parse(). You’d need >>>>>>> your >>>>>>> own >>>>>>> parser for each type of json you’re consuming. OK. Maybe not full >>>>>>> parsing, but the constructors for these VOs will get pretty messy — >>>>>>> especially if the structure is a bit fluid. >>>>>>> >>>>>>> Harbs >>>>>>> >>>>>>> >>>>>>>> On Feb 5, 2018, at 10:36 PM, Gabe Harbs <harbs.li...@gmail.com >>>>>>>> <mailto:harbs.li...@gmail.com>> wrote: >>>>>>>> >>>>>>>> In theory, everything you say is true. It might even be good >>>>>>>> practice. >>>>>>>> >>>>>>>> I’m telling you that this was a pain point when migrating my app. >>>>>>>> Simply declaring types as VOs didn't solve the problem for me. The >>>>>>>> way >>>>>>>> I’ve found that’s needed to solve the problem was passing the >>>>>>>> object >>>>>>>> literal into a VO constructor and declaring the variables using >>>>>>>> bracketed access. I was likely going about it wrong, but it was >>>>>>>> easier >>>>>>>> to just go with the bracketed literals. >>>>>>>> >>>>>>>> Again: Suggesting using VOs (if we can figure out easy instructions >>>>>>>> to >>>>>>>> do so) is probably a good idea and better recommended practice, but >>>>>>>> people live on the edge using other JS frameworks, and I’d rather >>>>>>>> not >>>>>>>> make it harder than it needs to be if they do want to use untyped >>>>>>>> object >>>>>>>> literals. >>>>>>>> >>>>>>>> Harbs >>>>>>>> >>>>>>>>> On Feb 5, 2018, at 8:01 PM, Alex Harui <aha...@adobe.com.INVALID >>>>>>>>> <mailto:aha...@adobe.com.INVALID>> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>> It was great to skip type-checking in Flash at times, but the >>>>>>>>> runtime >>>>>>>>> was >>>>>>>>> also strongly typed. Also, JS was not a practical language for >>>>>>>>> Flash. >>>>>>>>> It >>>>>>>>> is more risky to do skip type-checking in Royale for JS. These >>>>>>>>> new >>>>>>>>> cars >>>>>>>>> with lane warnings are a rough analogy. They only let you be less >>>>>>>>> attentive on nice new painted highways. Flash's runtime wouldn't >>>>>>>>> let >>>>>>>>> you >>>>>>>>> make type mismatches so it effectively had lane lines. JS is a >>>>>>>>> road >>>>>>>>> without lane lines. A ValueObject keeps your eyes on the road. >>>>>>>>> An >>>>>>>>> ounce >>>>>>>>> of prevention is better than a pound of cure. >>>>>>>>> >>>>>>>>> IMO, you might be better off writing a bead that you can pass a >>>>>>>>> JSON >>>>>>>>> object and it will generate the AS class for you to copy from the >>>>>>>>> clipboard and paste into a file. Then you could guess at the >>>>>>>>> types. >>>>>>>>> That >>>>>>>>> wouldn't require compiler changes and would encourage early >>>>>>>>> prevention. >>>>>>>>> >>>>>>>>> Just an idea, >>>>>>>>> -Alex >>>>>>>>> >>>>>>>>> On 2/5/18, 9:39 AM, "Gabe Harbs" <harbs.li...@gmail.com >>>>>>>>> <mailto:harbs.li...@gmail.com>> wrote: >>>>>>>>> >>>>>>>>>> Yeah. That’s what you’ve argued in the past, and in a pure world >>>>>>>>>> you’d be >>>>>>>>>> right. >>>>>>>>>> >>>>>>>>>> However, I’d prefer the option to be practical when dealing with >>>>>>>>>> more >>>>>>>>>> data types. Being forced to fiddle with properly typed objects >>>>>>>>>> *always* >>>>>>>>>> is too confining IMO. What I personally ended up doing when >>>>>>>>>> dealing >>>>>>>>>> with >>>>>>>>>> APIs and the like was the make sure to quote everything in my app >>>>>>>>>> rather >>>>>>>>>> than declare VOs even though finding all the instances were a >>>>>>>>>> pain. >>>>>>>>>> >>>>>>>>>> I think it’s pretty common for folks to use untyped objects >>>>>>>>>> *especially* >>>>>>>>>> when dealing with APIs in classic Flex apps. It seem overly >>>>>>>>>> draconian >>>>>>>>>> to >>>>>>>>>> make that a requirement for Royale. >>>>>>>>>> >>>>>>>>>> Part of the attraction of ActionScript has been that it’s >>>>>>>>>> *optionally* >>>>>>>>>> typed. Minification in JS makes the optional typing pretty weak. >>>>>>>>>> >>>>>>>>>>> If you don't care about SWF support, you can quickly make >>>>>>>>>>> ValueObjects >>>>>>>>>>> just for the compiler. >>>>>>>>>> >>>>>>>>>> Quickly? I’m not sure how. >>>>>>>>>> >>>>>>>>>> My $0.02. >>>>>>>>>> Harbs >>>>>>>>>> >>>>>>>>>>> On Feb 5, 2018, at 7:28 PM, Alex Harui <aha...@adobe.com.INVALID >>>>>>>>>>> <mailto:aha...@adobe.com.INVALID>> >>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>> IMO, your proposal sort of defeats the purpose of ActionScript >>>>>>>>>>> and >>>>>>>>>>> Royale, >>>>>>>>>>> which is to provide a type system at compile time. Not only >>>>>>>>>>> should >>>>>>>>>>> you >>>>>>>>>>> want to address your JSON fields, but you should want to have >>>>>>>>>>> them >>>>>>>>>>> type-checked, and that you spelled the field name correctly. >>>>>>>>>>> Otherwise, >>>>>>>>>>> the compiler is going to also allow you to mistype: >>>>>>>>>>> >>>>>>>>>>> var name = myProps["nme"]; >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> And there will be no errors. And similarly: >>>>>>>>>>> >>>>>>>>>>> var myObj:Object = { >>>>>>>>>>> nme: "foo", >>>>>>>>>>> age : 30.1415 >>>>>>>>>>> } >>>>>>>>>>> >>>>>>>>>>> Will be allowed when it probably shouldn't. And also, you could >>>>>>>>>>> then >>>>>>>>>>> use >>>>>>>>>>> myObj when you intended to use myOtherObj and nobody will know >>>>>>>>>>> until >>>>>>>>>>> you >>>>>>>>>>> try to debug in JS. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> If you don't care about SWF support, you can quickly make >>>>>>>>>>> ValueObjects >>>>>>>>>>> just for the compiler. In ASDoc, the ValueObject is never >>>>>>>>>>> instantiated. >>>>>>>>>>> It is just like a typedef for the compiler. >>>>>>>>>>> >>>>>>>>>>> HTH, >>>>>>>>>>> -Alex >>>>>>>>>>> >>>>>>>>>>> On 2/5/18, 8:43 AM, "Gabe Harbs" <harbs.li...@gmail.com >>>>>>>>>>> <mailto:harbs.li...@gmail.com>> wrote: >>>>>>>>>>> >>>>>>>>>>>>> JSON Objects are not destroyed. >>>>>>>>>>>> >>>>>>>>>>>> Yeah. I know, but untyped js literals are pretty much useless >>>>>>>>>>>> in >>>>>>>>>>>> minified >>>>>>>>>>>> Royale apps. >>>>>>>>>>>> >>>>>>>>>>>>> Propose a way to determine that a data structure >>>>>>>>>>>>> is external and what the compiler should generate and >>>>>>>>>>>>> implement >>>>>>>>>>>>> it. >>>>>>>>>>>>> IMO, >>>>>>>>>>>>> the answer is to create ValueObjects. That is essentially >>>>>>>>>>>>> typedefs >>>>>>>>>>>>> and >>>>>>>>>>>>> AFAIK, there is no way to automate typedef generation. >>>>>>>>>>>> >>>>>>>>>>>> I already made a suggestion once: >>>>>>>>>>>> >>>>>>>>>>>> For untyped Objects, the compiler could convert dot notation to >>>>>>>>>>>> bracket >>>>>>>>>>>> notation. >>>>>>>>>>>> >>>>>>>>>>>> The other half of that would be to convert all object literals >>>>>>>>>>>> to >>>>>>>>>>>> “quoted” literals automatically. >>>>>>>>>>>> >>>>>>>>>>>> So if I have a function: >>>>>>>>>>>> >>>>>>>>>>>> function parseMyJson(json:String):Object{ >>>>>>>>>>>> return JSON.parse(json); >>>>>>>>>>>> } >>>>>>>>>>>> >>>>>>>>>>>> var myProps:Object = parseMyJson(json); >>>>>>>>>>>> >>>>>>>>>>>> var name:string = myProps.name; >>>>>>>>>>>> >>>>>>>>>>>> Would become: >>>>>>>>>>>> >>>>>>>>>>>> function parseMyJson(json){ >>>>>>>>>>>> return JSON.parse(json); >>>>>>>>>>>> } >>>>>>>>>>>> >>>>>>>>>>>> var myProps = parseMyJson(json); >>>>>>>>>>>> >>>>>>>>>>>> var name = myProps["name"]; >>>>>>>>>>>> >>>>>>>>>>>> And this: >>>>>>>>>>>> var myObj:Object = { >>>>>>>>>>>> name: "foo", >>>>>>>>>>>> age : 30 >>>>>>>>>>>> } >>>>>>>>>>>> >>>>>>>>>>>> Would become: >>>>>>>>>>>> var myObj = { >>>>>>>>>>>> "name": "foo", >>>>>>>>>>>> "age" : 30 >>>>>>>>>>>> } >>>>>>>>>>>> >>>>>>>>>>>> These two features would have solved almost all minification >>>>>>>>>>>> issues >>>>>>>>>>>> I’ve >>>>>>>>>>>> run into. >>>>>>>>>>>> >>>>>>>>>>>> I’d love to work on this myself, but I’m still not up to making >>>>>>>>>>>> any >>>>>>>>>>>> major >>>>>>>>>>>> changes to the compiler… :-( >>>>>>>>>>>> >>>>>>>>>>>>> On Feb 5, 2018, at 6:13 PM, Alex Harui >>>>>>>>>>>>> <aha...@adobe.com.INVALID <mailto:aha...@adobe.com.INVALID>> >>>>>>>>>>>>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On 2/5/18, 2:01 AM, "Gabe Harbs" <harbs.li...@gmail.com >>>>>>>>>>>>> <mailto:harbs.li...@gmail.com>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> I’ll try to work on this. It’s pretty slow loading the debug >>>>>>>>>>>>>> build. >>>>>>>>>>>>>> >>>>>>>>>>>>>> I still maintain there should be a compiler setting or >>>>>>>>>>>>>> language >>>>>>>>>>>>>> feature >>>>>>>>>>>>>> to prevent objects produced from JSON being destroyed on >>>>>>>>>>>>>> minification. >>>>>>>>>>>>> >>>>>>>>>>>>> JSON Objects are not destroyed. The code referencing their >>>>>>>>>>>>> fields >>>>>>>>>>>>> by >>>>>>>>>>>>> name >>>>>>>>>>>>> has those names changed. Propose a way to determine that a >>>>>>>>>>>>> data >>>>>>>>>>>>> structure >>>>>>>>>>>>> is external and what the compiler should generate and >>>>>>>>>>>>> implement >>>>>>>>>>>>> it. >>>>>>>>>>>>> IMO, >>>>>>>>>>>>> the answer is to create ValueObjects. That is essentially >>>>>>>>>>>>> typedefs >>>>>>>>>>>>> and >>>>>>>>>>>>> AFAIK, there is no way to automate typedef generation. >>>>>>>>>>>>> >>>>>>>>>>>>> Also, you can turn off minification for the app as a whole. >>>>>>>>>>>>> >>>>>>>>>>>>> Other ideas welcome, >>>>>>>>>>>>> -Alex >>>>>>>>>>>>> >>>>>>>>>>>>>> This remains a pain point for developing apps and having to >>>>>>>>>>>>>> create >>>>>>>>>>>>>> VOs >>>>>>>>>>>>>> for every API is a drag. >>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Feb 5, 2018, at 10:21 AM, Alex Harui >>>>>>>>>>>>>>> <aha...@adobe.com.INVALID <mailto:aha...@adobe.com.INVALID>> >>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On 2/4/18, 1:10 AM, "Gabe Harbs" <harbs.li...@gmail.com >>>>>>>>>>>>>>> <mailto:harbs.li...@gmail.com>> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Typo. I meant js-reease. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Yeah, at some later point in time someone should build Value >>>>>>>>>>>>>>> Objects >>>>>>>>>>>>>>> for >>>>>>>>>>>>>>> the JSON and get js-release working. Maybe after this >>>>>>>>>>>>>>> release. >>>>>>>>>>>>>>> I'm >>>>>>>>>>>>>>> just >>>>>>>>>>>>>>> trying to make the ASDoc useful. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I'm going to add Events to the class detail page and anchor >>>>>>>>>>>>>>> links >>>>>>>>>>>>>>> from >>>>>>>>>>>>>>> the >>>>>>>>>>>>>>> lists to the details and maybe a simple search-for-class >>>>>>>>>>>>>>> feature, >>>>>>>>>>>>>>> then I >>>>>>>>>>>>>>> think it will be time for a release. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -Alex >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Feb 4, 2018, at 8:08 AM, Alex Harui >>>>>>>>>>>>>>>>> <aha...@adobe.com.INVALID >>>>>>>>>>>>>>>>> <mailto:aha...@adobe.com.INVALID>> >>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> 1. Why is bin-release not working? >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Do you mean SWF support? >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >