I'm going to work on this utility to generate AS classes from a JSON result today unless someone is already working on it.
-Alex On 2/7/18, 11:13 AM, "Alex Harui" <[email protected]> wrote: >Two more thoughts on this utility. I think you create a UID for each >child class. I think the UID can consist of the sorted property values >and their types so for the snippet below the UID would be: > > >"baseClassname:String;description:String;members:Array;qname:String;tags:A >r >ray;type:String;" > >Then before creating a new child class, you first build the UID and see if >already exists. That way you can handle an Employee class being used in >two different fields of a Company object. > >Also, you build out a cache of instances so you don't loop for references >back to parent objects. > >If anyone gets started on the utility, let us know so we don't have more >than one person working on it. > >Thanks, >-Alex > >On 2/6/18, 9:53 AM, "Alex Harui" <[email protected]> wrote: > >>Pretty sure something like this was done for Flash Builder. You could >>direct FB to generate ValueObjects from a WSDL. >> >>I'm imagining an AIR app that lets you specify a path to an output folder >>and a class name and lets you paste a JSON result. >> >>If you look at the ASDoc structure for DataGrid.json, it looks like this: >> >>{ "type": "class", >> "qname": "org.apache.royale.express.DataGrid", >> "baseClassname": "org.apache.royale.html.DataGrid", >> "description": "This class extends DataGrid and adds beads for drag and >>drop and column reordering.", >> "tags": [ >> { "tagName": "flexdocurl", >> "values": >>["https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fflex.a >>p >>ache.org%2Fasdoc%2Fspark%2Fcomponents%2FDataGrid.html&data=02%7C01%7Cahar >>u >>i%40adobe.com%7C364fbca7fc9144384fd808d56d8a96c0%7C71f1da39c0a84d5a8d88a6 >>7 >>b23c30bf4%7C0%7C0%7C636535364360288547&sdata=5%2FZyPUsg30zGUdqwPxr3XFu6Qi >>o >>FFL3%2BZ1RBl5kDADw%3D&reserved=0"]}, >> { "tagName": "flexcomponent", >> "values": ["spark.components.DataGrid"]}], >> "members": [ >> { "type": "method", >> "qname": "org.apache.royale.express.DataGrid", >> "namespace": "", >> "return": "", >> "params": []}, >> { "type": "method", >> "qname": "addedToParent", >> "namespace": "public", >> "override": true, >> "return": "void", >> "params": []}] >>} >> >>So, I might call this "ClassData". The utility would JSON.parse the >>structure and walk each property. If it sees the value is a String then >>it sets the property type to String, if a number, then Number or int if >>the value doesn't have decimal places. True and false are Booleans. >>Array for Arrays. >> >>If the value is an Array, it looks at the first element in the Array. IF >>the first element Is an Object, like it is for tags, it would create the >>class ClassData_tags and walk the object. Same for any value of a field >>that is an Object. >> >>IMO, it doesn't have to be perfect, just save you most of the tedious >>work. And if you don't like the generated class names, the IDEs should >>support refactoring (now or eventually). >> >>Of course, I could be wrong... >> >>-Alex >> >> >> >>On 2/6/18, 9:16 AM, "Gabe Harbs" <[email protected]> wrote: >> >>>I’m really not sure how you plan on going about strongly typing >>>hierarchical data. >>> >>>> On Feb 6, 2018, at 7:13 PM, Gabe Harbs <[email protected]> wrote: >>>> >>>> What kind of utility do you have in mind? >>>> >>>> >>>>> On Feb 6, 2018, at 7:09 PM, Alex Harui <[email protected]> >>>>>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" <[email protected]> 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 <[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%2Fapa >>>>>>>>c >>>>>>>>h >>>>>>>>ero >>>>>>>> ya >>>>>>>> >>>>>>>> >>>>>>>>leci.westus2.cloudapp.azure.com%3A8080%2Fjob%2FRoyaleDocs_Staging%2 >>>>>>>>F >>>>>>>>l >>>>>>>>ast >>>>>>>> Su >>>>>>>> >>>>>>>> >>>>>>>>ccessfulBuild%2Fartifact%2F_site%2Fcreate-an-application%2Fapplicat >>>>>>>>i >>>>>>>>o >>>>>>>>n-t >>>>>>>> ut >>>>>>>> >>>>>>>> >>>>>>>>orial%2Fvalue-objects.html&data=02%7C01%7Caharui%40adobe.com%7C924b >>>>>>>>2 >>>>>>>>2 >>>>>>>>9e4 >>>>>>>> 9b >>>>>>>> >>>>>>>> >>>>>>>>b443ddbf708d56d50cd97%7C71f1da39c0a84d5a8d88a67b23c30bf4%7C0%7C0%7C >>>>>>>>6 >>>>>>>>3 >>>>>>>>653 >>>>>>>> 51 >>>>>>>> >>>>>>>> >>>>>>>>16172815360&sdata=e9FoFwJfNJfjmFlWF4%2FRIwCNU4R5mhEEQ9GYz70W3Ls%3D& >>>>>>>>r >>>>>>>>e >>>>>>>>ser >>>>>>>> ve >>>>>>>> d=0 >>>>>>>> >>>>>>>> >>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fap >>>>>>>>a >>>>>>>>c >>>>>>>>her >>>>>>>> oy >>>>>>>> >>>>>>>> >>>>>>>>aleci.westus2.cloudapp.azure.com%3A8080%2Fjob%2FRoyaleDocs_Staging% >>>>>>>>2 >>>>>>>>F >>>>>>>>las >>>>>>>> tS >>>>>>>> >>>>>>>> >>>>>>>>uccessfulBuild%2Fartifact%2F_site%2Fcreate-an-application%2Fapplica >>>>>>>>t >>>>>>>>i >>>>>>>>on- >>>>>>>> tu >>>>>>>> >>>>>>>> >>>>>>>>torial%2Fvalue-objects.html&data=02%7C01%7Caharui%40adobe.com%7C924 >>>>>>>>b >>>>>>>>2 >>>>>>>>29e >>>>>>>> 49 >>>>>>>> >>>>>>>> >>>>>>>>bb443ddbf708d56d50cd97%7C71f1da39c0a84d5a8d88a67b23c30bf4%7C0%7C0%7 >>>>>>>>C >>>>>>>>6 >>>>>>>>365 >>>>>>>> 35 >>>>>>>> >>>>>>>> >>>>>>>>116172825365&sdata=3m3kTW910JYWV8MaM4%2F%2B3v82l5EvxIqgRjqAtIC7N%2B >>>>>>>>U >>>>>>>>% >>>>>>>>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%2Fap >>>>>>>>>a >>>>>>>>>c >>>>>>>>>her >>>>>>>>> oy >>>>>>>>> >>>>>>>>> >>>>>>>>>aleci.westus2.cloudapp.azure.com%3A8080%2Fjob%2FRoyaleDocs_Staging >>>>>>>>>% >>>>>>>>>2 >>>>>>>>>Fla >>>>>>>>> st >>>>>>>>> >>>>>>>>> >>>>>>>>>SuccessfulBuild%2Fartifact%2F_site%2Fcreate-an-application%2Fappli >>>>>>>>>c >>>>>>>>>a >>>>>>>>>tio >>>>>>>>> n- >>>>>>>>> >>>>>>>>> >>>>>>>>>tutorial%2Fdata.html&data=02%7C01%7Caharui%40adobe.com%7C924b229e4 >>>>>>>>>9 >>>>>>>>>b >>>>>>>>>b44 >>>>>>>>> 3d >>>>>>>>> >>>>>>>>> >>>>>>>>>dbf708d56d50cd97%7C71f1da39c0a84d5a8d88a67b23c30bf4%7C0%7C0%7C6365 >>>>>>>>>3 >>>>>>>>>5 >>>>>>>>>116 >>>>>>>>> 17 >>>>>>>>> >>>>>>>>> >>>>>>>>>2825365&sdata=IgeSJZENyrUXHWMMzG7U5ZIBYdBe5so%2BeO81N%2B1u%2B%2Fc% >>>>>>>>>3 >>>>>>>>>D >>>>>>>>>&re >>>>>>>>> se >>>>>>>>> rved=0 >>>>>>>>> >>>>>>>>> >>>>>>>>><https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fa >>>>>>>>>p >>>>>>>>>a >>>>>>>>>che >>>>>>>>> ro >>>>>>>>> >>>>>>>>> >>>>>>>>>yaleci.westus2.cloudapp.azure.com%3A8080%2Fjob%2FRoyaleDocs_Stagin >>>>>>>>>g >>>>>>>>>% >>>>>>>>>2Fl >>>>>>>>> as >>>>>>>>> >>>>>>>>> >>>>>>>>>tSuccessfulBuild%2Fartifact%2F_site%2Fcreate-an-application%2Fappl >>>>>>>>>i >>>>>>>>>c >>>>>>>>>ati >>>>>>>>> on >>>>>>>>> >>>>>>>>> >>>>>>>>>-tutorial%2Fdata.html&data=02%7C01%7Caharui%40adobe.com%7C924b229e >>>>>>>>>4 >>>>>>>>>9 >>>>>>>>>bb4 >>>>>>>>> 43 >>>>>>>>> >>>>>>>>> >>>>>>>>>ddbf708d56d50cd97%7C71f1da39c0a84d5a8d88a67b23c30bf4%7C0%7C0%7C636 >>>>>>>>>5 >>>>>>>>>3 >>>>>>>>>511 >>>>>>>>> 61 >>>>>>>>> >>>>>>>>> >>>>>>>>>72825365&sdata=IgeSJZENyrUXHWMMzG7U5ZIBYdBe5so%2BeO81N%2B1u%2B%2Fc >>>>>>>>>% >>>>>>>>>3 >>>>>>>>>D&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 >>>>>>>>>><[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? >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >
