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 <[email protected]> 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" <[email protected]> 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%2Fapacheroya >> leci.westus2.cloudapp.azure.com%3A8080%2Fjob%2FRoyaleDocs_Staging%2FlastSu >> ccessfulBuild%2Fartifact%2F_site%2Fcreate-an-application%2Fapplication-tut >> orial%2Fvalue-objects.html&data=02%7C01%7Caharui%40adobe.com%7C924b229e49b >> b443ddbf708d56d50cd97%7C71f1da39c0a84d5a8d88a67b23c30bf4%7C0%7C0%7C6365351 >> 16172815360&sdata=e9FoFwJfNJfjmFlWF4%2FRIwCNU4R5mhEEQ9GYz70W3Ls%3D&reserve >> d=0 >> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fapacheroy >> aleci.westus2.cloudapp.azure.com%3A8080%2Fjob%2FRoyaleDocs_Staging%2FlastS >> uccessfulBuild%2Fartifact%2F_site%2Fcreate-an-application%2Fapplication-tu >> torial%2Fvalue-objects.html&data=02%7C01%7Caharui%40adobe.com%7C924b229e49 >> bb443ddbf708d56d50cd97%7C71f1da39c0a84d5a8d88a67b23c30bf4%7C0%7C0%7C636535 >> 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 <[email protected]> wrote: >>> >>> Related: >>> >>> On this page: >>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fapacheroy >>> aleci.westus2.cloudapp.azure.com%3A8080%2Fjob%2FRoyaleDocs_Staging%2Flast >>> SuccessfulBuild%2Fartifact%2F_site%2Fcreate-an-application%2Fapplication- >>> tutorial%2Fdata.html&data=02%7C01%7Caharui%40adobe.com%7C924b229e49bb443d >>> dbf708d56d50cd97%7C71f1da39c0a84d5a8d88a67b23c30bf4%7C0%7C0%7C63653511617 >>> 2825365&sdata=IgeSJZENyrUXHWMMzG7U5ZIBYdBe5so%2BeO81N%2B1u%2B%2Fc%3D&rese >>> rved=0 >>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fapachero >>> yaleci.westus2.cloudapp.azure.com%3A8080%2Fjob%2FRoyaleDocs_Staging%2Flas >>> tSuccessfulBuild%2Fartifact%2F_site%2Fcreate-an-application%2Fapplication >>> -tutorial%2Fdata.html&data=02%7C01%7Caharui%40adobe.com%7C924b229e49bb443 >>> ddbf708d56d50cd97%7C71f1da39c0a84d5a8d88a67b23c30bf4%7C0%7C0%7C6365351161 >>> 72825365&sdata=IgeSJZENyrUXHWMMzG7U5ZIBYdBe5so%2BeO81N%2B1u%2B%2Fc%3D&res >>> 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 <[email protected] >>>> <mailto:[email protected]>> 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" <[email protected] >>>> <mailto:[email protected]>> 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 <[email protected] >>>>>> <mailto:[email protected]>> 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 <[email protected] >>>>>>> <mailto:[email protected]>> >>>>>>> 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" <[email protected] >>>>>>> <mailto:[email protected]>> 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 <[email protected] >>>>>>>>> <mailto:[email protected]>> >>>>>>>>> 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" <[email protected] >>>>>>>>> <mailto:[email protected]>> 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 >>>>>>>>>>> <[email protected] <mailto:[email protected]>> >>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On 2/5/18, 2:01 AM, "Gabe Harbs" <[email protected] >>>>>>>>>>> <mailto:[email protected]>> 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 >>>>>>>>>>>>> <[email protected] <mailto:[email protected]>> >>>>>>>>>>>>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On 2/4/18, 1:10 AM, "Gabe Harbs" <[email protected] >>>>>>>>>>>>> <mailto:[email protected]>> 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 >>>>>>>>>>>>>>> <[email protected] <mailto:[email protected]>> >>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> 1. Why is bin-release not working? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Do you mean SWF support? >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >
