1+
2+ export class User {
3+ name : string ;
4+ authentication : Authentication ;
5+ childAccount : boolean ;
6+ age : number ;
7+ address : Address ;
8+ addresses : Address [ ] ;
9+ taggedAddresses : { [ index : string ] : Address } ;
10+ groupedAddresses : { [ index : string ] : Address [ ] } ;
11+ listOfTaggedAddresses : { [ index : string ] : Address } [ ] ;
12+ tags : string [ ] ;
13+ mapping : { [ index : string ] : string } ;
14+ listOfListOfString : string [ ] [ ] ;
15+ orders : PagedList < Order , Authentication > ;
16+ allOrders : PagedList < Order , Authentication > [ ] ;
17+ shape : ShapeUnion ;
18+ shapes : ShapeUnion [ ] ;
19+
20+ constructor ( data : User ) {
21+ this . name = data . name ;
22+ this . authentication = data . authentication ;
23+ this . childAccount = data . childAccount ;
24+ this . age = data . age ;
25+ this . address = data . address ;
26+ this . addresses = data . addresses ;
27+ this . taggedAddresses = data . taggedAddresses ;
28+ this . groupedAddresses = data . groupedAddresses ;
29+ this . listOfTaggedAddresses = data . listOfTaggedAddresses ;
30+ this . tags = data . tags ;
31+ this . mapping = data . mapping ;
32+ this . listOfListOfString = data . listOfListOfString ;
33+ this . orders = data . orders ;
34+ this . allOrders = data . allOrders ;
35+ this . shape = data . shape ;
36+ this . shapes = data . shapes ;
37+ }
38+
39+ static fromData ( data : User , target ?: User ) : User {
40+ if ( ! data ) {
41+ return data ;
42+ }
43+ const instance = target || new User ( data ) ;
44+ instance . name = data . name ;
45+ instance . authentication = data . authentication ;
46+ instance . childAccount = data . childAccount ;
47+ instance . age = data . age ;
48+ instance . address = Address . fromData ( data . address ) ;
49+ instance . addresses = __getCopyArrayFn ( Address . fromData ) ( data . addresses ) ;
50+ instance . taggedAddresses = __getCopyObjectFn ( Address . fromData ) ( data . taggedAddresses ) ;
51+ instance . groupedAddresses = __getCopyObjectFn ( __getCopyArrayFn ( Address . fromData ) ) ( data . groupedAddresses ) ;
52+ instance . listOfTaggedAddresses = __getCopyArrayFn ( __getCopyObjectFn ( Address . fromData ) ) ( data . listOfTaggedAddresses ) ;
53+ instance . tags = __getCopyArrayFn ( __identity < string > ( ) ) ( data . tags ) ;
54+ instance . mapping = __getCopyObjectFn ( __identity < string > ( ) ) ( data . mapping ) ;
55+ instance . listOfListOfString = __getCopyArrayFn ( __getCopyArrayFn ( __identity < string > ( ) ) ) ( data . listOfListOfString ) ;
56+ instance . orders = PagedList . fromDataFn < Order , Authentication > ( Order . fromData , __identity < Authentication > ( ) ) ( data . orders ) ;
57+ instance . allOrders = __getCopyArrayFn ( PagedList . fromDataFn < Order , Authentication > ( Order . fromData , __identity < Authentication > ( ) ) ) ( data . allOrders ) ;
58+ instance . shape = Shape . fromDataUnion ( data . shape ) ;
59+ instance . shapes = __getCopyArrayFn ( Shape . fromDataUnion ) ( data . shapes ) ;
60+ return instance ;
61+ }
62+ }
63+
64+ export class Address {
65+ street : string ;
66+ city : string ;
67+
68+ constructor ( data : Address ) {
69+ this . street = data . street ;
70+ this . city = data . city ;
71+ }
72+
73+ static fromData ( data : Address , target ?: Address ) : Address {
74+ if ( ! data ) {
75+ return data ;
76+ }
77+ const instance = target || new Address ( data ) ;
78+ instance . street = data . street ;
79+ instance . city = data . city ;
80+ return instance ;
81+ }
82+ }
83+
84+ export class PagedList < T , A > {
85+ page : number ;
86+ items : T [ ] ;
87+ additionalInfo : A ;
88+
89+ constructor ( data : PagedList < T , A > ) {
90+ this . page = data . page ;
91+ this . items = data . items ;
92+ this . additionalInfo = data . additionalInfo ;
93+ }
94+
95+ static fromDataFn < T , A > ( constructorFnOfT : ( data : T ) => T , constructorFnOfA : ( data : A ) => A ) : ( data : PagedList < T , A > ) => PagedList < T , A > {
96+ return data => PagedList . fromData ( data , constructorFnOfT , constructorFnOfA ) ;
97+ }
98+
99+ static fromData < T , A > ( data : PagedList < T , A > , constructorFnOfT : ( data : T ) => T , constructorFnOfA : ( data : A ) => A , target ?: PagedList < T , A > ) : PagedList < T , A > {
100+ if ( ! data ) {
101+ return data ;
102+ }
103+ const instance = target || new PagedList < T , A > ( data ) ;
104+ instance . page = data . page ;
105+ instance . items = __getCopyArrayFn ( constructorFnOfT ) ( data . items ) ;
106+ instance . additionalInfo = constructorFnOfA ( data . additionalInfo ) ;
107+ return instance ;
108+ }
109+ }
110+
111+ export class Order {
112+ id : string ;
113+
114+ constructor ( data : Order ) {
115+ this . id = data . id ;
116+ }
117+
118+ static fromData ( data : Order , target ?: Order ) : Order {
119+ if ( ! data ) {
120+ return data ;
121+ }
122+ const instance = target || new Order ( data ) ;
123+ instance . id = data . id ;
124+ return instance ;
125+ }
126+ }
127+
128+ export class Shape {
129+ kind : "square" | "rectangle" | "circle" ;
130+ metadata : ShapeMetadata ;
131+
132+ constructor ( data : Shape ) {
133+ this . kind = data . kind ;
134+ this . metadata = data . metadata ;
135+ }
136+
137+ static fromData ( data : Shape , target ?: Shape ) : Shape {
138+ if ( ! data ) {
139+ return data ;
140+ }
141+ const instance = target || new Shape ( data ) ;
142+ instance . kind = data . kind ;
143+ instance . metadata = ShapeMetadata . fromData ( data . metadata ) ;
144+ return instance ;
145+ }
146+
147+ static fromDataUnion ( data : ShapeUnion ) : ShapeUnion {
148+ if ( ! data ) {
149+ return data ;
150+ }
151+ switch ( data . kind ) {
152+ case "square" :
153+ return Square . fromData ( data ) ;
154+ case "rectangle" :
155+ return Rectangle . fromData ( data ) ;
156+ case "circle" :
157+ return Circle . fromData ( data ) ;
158+ }
159+ }
160+ }
161+
162+ export class ShapeMetadata {
163+ group : string ;
164+
165+ constructor ( data : ShapeMetadata ) {
166+ this . group = data . group ;
167+ }
168+
169+ static fromData ( data : ShapeMetadata , target ?: ShapeMetadata ) : ShapeMetadata {
170+ if ( ! data ) {
171+ return data ;
172+ }
173+ const instance = target || new ShapeMetadata ( data ) ;
174+ instance . group = data . group ;
175+ return instance ;
176+ }
177+ }
178+
179+ export class Square extends Shape {
180+ kind : "square" ;
181+ size : number ;
182+
183+ constructor ( data : Square ) {
184+ super ( data ) ;
185+ this . size = data . size ;
186+ }
187+
188+ static fromData ( data : Square , target ?: Square ) : Square {
189+ if ( ! data ) {
190+ return data ;
191+ }
192+ const instance = target || new Square ( data ) ;
193+ super . fromData ( data , instance ) ;
194+ instance . size = data . size ;
195+ return instance ;
196+ }
197+ }
198+
199+ export class Rectangle extends Shape {
200+ kind : "rectangle" ;
201+ width : number ;
202+ height : number ;
203+
204+ constructor ( data : Rectangle ) {
205+ super ( data ) ;
206+ this . width = data . width ;
207+ this . height = data . height ;
208+ }
209+
210+ static fromData ( data : Rectangle , target ?: Rectangle ) : Rectangle {
211+ if ( ! data ) {
212+ return data ;
213+ }
214+ const instance = target || new Rectangle ( data ) ;
215+ super . fromData ( data , instance ) ;
216+ instance . width = data . width ;
217+ instance . height = data . height ;
218+ return instance ;
219+ }
220+ }
221+
222+ export class Circle extends Shape {
223+ kind : "circle" ;
224+ radius : number ;
225+
226+ constructor ( data : Circle ) {
227+ super ( data ) ;
228+ this . radius = data . radius ;
229+ }
230+
231+ static fromData ( data : Circle , target ?: Circle ) : Circle {
232+ if ( ! data ) {
233+ return data ;
234+ }
235+ const instance = target || new Circle ( data ) ;
236+ super . fromData ( data , instance ) ;
237+ instance . radius = data . radius ;
238+ return instance ;
239+ }
240+ }
241+
242+ export type Authentication = "Password" | "Token" | "Fingerprint" | "Voice" ;
243+
244+ export type ShapeUnion = Square | Rectangle | Circle ;
245+
246+ function __getCopyArrayFn < T > ( itemCopyFn : ( item : T ) => T ) : ( array : T [ ] ) => T [ ] {
247+ return ( array : T [ ] ) => __copyArray ( array , itemCopyFn ) ;
248+ }
249+
250+ function __copyArray < T > ( array : T [ ] , itemCopyFn : ( item : T ) => T ) : T [ ] {
251+ return array && array . map ( item => item && itemCopyFn ( item ) ) ;
252+ }
253+
254+ function __getCopyObjectFn < T > ( itemCopyFn : ( item : T ) => T ) : ( object : { [ index : string ] : T } ) => { [ index : string ] : T } {
255+ return ( object : { [ index : string ] : T } ) => __copyObject ( object , itemCopyFn ) ;
256+ }
257+
258+ function __copyObject < T > ( object : { [ index : string ] : T } , itemCopyFn : ( item : T ) => T ) : { [ index : string ] : T } {
259+ if ( ! object ) {
260+ return object ;
261+ }
262+ const result : any = { } ;
263+ for ( const key in object ) {
264+ if ( object . hasOwnProperty ( key ) ) {
265+ const value = object [ key ] ;
266+ result [ key ] = value && itemCopyFn ( value ) ;
267+ }
268+ }
269+ return result ;
270+ }
271+
272+ function __identity < T > ( ) : ( value : T ) => T {
273+ return value => value ;
274+ }
0 commit comments