1{
2  "type": "Program",
3  "statements": [
4    {
5      "type": "FunctionDeclaration",
6      "function": {
7        "type": "ScriptFunction",
8        "id": {
9          "type": "Identifier",
10          "name": "makeBox",
11          "loc": {
12            "start": {
13              "line": 17,
14              "column": 10
15            },
16            "end": {
17              "line": 17,
18              "column": 17
19            }
20          }
21        },
22        "generator": false,
23        "async": false,
24        "expression": false,
25        "params": [
26          {
27            "type": "Identifier",
28            "name": "value",
29            "typeAnnotation": {
30              "type": "TSTypeReference",
31              "typeName": {
32                "type": "Identifier",
33                "name": "T",
34                "loc": {
35                  "start": {
36                    "line": 17,
37                    "column": 28
38                  },
39                  "end": {
40                    "line": 17,
41                    "column": 29
42                  }
43                }
44              },
45              "loc": {
46                "start": {
47                  "line": 17,
48                  "column": 28
49                },
50                "end": {
51                  "line": 17,
52                  "column": 29
53                }
54              }
55            },
56            "loc": {
57              "start": {
58                "line": 17,
59                "column": 21
60              },
61              "end": {
62                "line": 17,
63                "column": 26
64              }
65            }
66          }
67        ],
68        "typeParameters": {
69          "type": "TSTypeParameterDeclaration",
70          "params": [
71            {
72              "type": "TSTypeParameter",
73              "name": {
74                "type": "Identifier",
75                "name": "T",
76                "loc": {
77                  "start": {
78                    "line": 17,
79                    "column": 18
80                  },
81                  "end": {
82                    "line": 17,
83                    "column": 19
84                  }
85                }
86              },
87              "in": false,
88              "out": false,
89              "loc": {
90                "start": {
91                  "line": 17,
92                  "column": 18
93                },
94                "end": {
95                  "line": 17,
96                  "column": 20
97                }
98              }
99            }
100          ],
101          "loc": {
102            "start": {
103              "line": 17,
104              "column": 17
105            },
106            "end": {
107              "line": 17,
108              "column": 20
109            }
110          }
111        },
112        "body": {
113          "type": "BlockStatement",
114          "statements": [
115            {
116              "type": "ReturnStatement",
117              "argument": {
118                "type": "ObjectExpression",
119                "properties": [
120                  {
121                    "type": "Property",
122                    "method": false,
123                    "shorthand": true,
124                    "computed": false,
125                    "key": {
126                      "type": "Identifier",
127                      "name": "value",
128                      "loc": {
129                        "start": {
130                          "line": 18,
131                          "column": 14
132                        },
133                        "end": {
134                          "line": 18,
135                          "column": 19
136                        }
137                      }
138                    },
139                    "value": {
140                      "type": "Identifier",
141                      "name": "value",
142                      "loc": {
143                        "start": {
144                          "line": 18,
145                          "column": 14
146                        },
147                        "end": {
148                          "line": 18,
149                          "column": 19
150                        }
151                      }
152                    },
153                    "kind": "init",
154                    "loc": {
155                      "start": {
156                        "line": 18,
157                        "column": 14
158                      },
159                      "end": {
160                        "line": 18,
161                        "column": 19
162                      }
163                    }
164                  }
165                ],
166                "loc": {
167                  "start": {
168                    "line": 18,
169                    "column": 12
170                  },
171                  "end": {
172                    "line": 18,
173                    "column": 21
174                  }
175                }
176              },
177              "loc": {
178                "start": {
179                  "line": 18,
180                  "column": 5
181                },
182                "end": {
183                  "line": 18,
184                  "column": 22
185                }
186              }
187            }
188          ],
189          "loc": {
190            "start": {
191              "line": 17,
192              "column": 31
193            },
194            "end": {
195              "line": 19,
196              "column": 2
197            }
198          }
199        },
200        "loc": {
201          "start": {
202            "line": 17,
203            "column": 1
204          },
205          "end": {
206            "line": 19,
207            "column": 2
208          }
209        }
210      },
211      "loc": {
212        "start": {
213          "line": 17,
214          "column": 1
215        },
216        "end": {
217          "line": 19,
218          "column": 2
219        }
220      }
221    },
222    {
223      "type": "EmptyStatement",
224      "loc": {
225        "start": {
226          "line": 19,
227          "column": 2
228        },
229        "end": {
230          "line": 19,
231          "column": 3
232        }
233      }
234    },
235    {
236      "type": "VariableDeclaration",
237      "declarations": [
238        {
239          "type": "VariableDeclarator",
240          "id": {
241            "type": "Identifier",
242            "name": "makeStringBox",
243            "loc": {
244              "start": {
245                "line": 21,
246                "column": 7
247              },
248              "end": {
249                "line": 21,
250                "column": 20
251              }
252            }
253          },
254          "init": {
255            "type": "TypeArgumentsExpression",
256            "leftHandExpression": {
257              "type": "Identifier",
258              "name": "makeBox",
259              "loc": {
260                "start": {
261                  "line": 21,
262                  "column": 23
263                },
264                "end": {
265                  "line": 21,
266                  "column": 30
267                }
268              }
269            },
270            "typeArguments": {
271              "type": "TSTypeParameterInstantiation",
272              "params": [
273                {
274                  "type": "TSStringKeyword",
275                  "loc": {
276                    "start": {
277                      "line": 21,
278                      "column": 31
279                    },
280                    "end": {
281                      "line": 21,
282                      "column": 37
283                    }
284                  }
285                }
286              ],
287              "loc": {
288                "start": {
289                  "line": 21,
290                  "column": 30
291                },
292                "end": {
293                  "line": 21,
294                  "column": 38
295                }
296              }
297            },
298            "loc": {
299              "start": {
300                "line": 21,
301                "column": 23
302              },
303              "end": {
304                "line": 21,
305                "column": 38
306              }
307            }
308          },
309          "loc": {
310            "start": {
311              "line": 21,
312              "column": 7
313            },
314            "end": {
315              "line": 21,
316              "column": 38
317            }
318          }
319        }
320      ],
321      "kind": "const",
322      "loc": {
323        "start": {
324          "line": 21,
325          "column": 1
326        },
327        "end": {
328          "line": 21,
329          "column": 39
330        }
331      }
332    },
333    {
334      "type": "VariableDeclaration",
335      "declarations": [
336        {
337          "type": "VariableDeclarator",
338          "id": {
339            "type": "Identifier",
340            "name": "stringBox",
341            "loc": {
342              "start": {
343                "line": 22,
344                "column": 7
345              },
346              "end": {
347                "line": 22,
348                "column": 16
349              }
350            }
351          },
352          "init": {
353            "type": "CallExpression",
354            "callee": {
355              "type": "Identifier",
356              "name": "makeStringBox",
357              "loc": {
358                "start": {
359                  "line": 22,
360                  "column": 19
361                },
362                "end": {
363                  "line": 22,
364                  "column": 32
365                }
366              }
367            },
368            "arguments": [
369              {
370                "type": "StringLiteral",
371                "value": "abc",
372                "loc": {
373                  "start": {
374                    "line": 22,
375                    "column": 33
376                  },
377                  "end": {
378                    "line": 22,
379                    "column": 38
380                  }
381                }
382              }
383            ],
384            "optional": false,
385            "loc": {
386              "start": {
387                "line": 22,
388                "column": 19
389              },
390              "end": {
391                "line": 22,
392                "column": 39
393              }
394            }
395          },
396          "loc": {
397            "start": {
398              "line": 22,
399              "column": 7
400            },
401            "end": {
402              "line": 22,
403              "column": 39
404            }
405          }
406        }
407      ],
408      "kind": "const",
409      "loc": {
410        "start": {
411          "line": 22,
412          "column": 1
413        },
414        "end": {
415          "line": 22,
416          "column": 40
417        }
418      }
419    },
420    {
421      "type": "TSTypeAliasDeclaration",
422      "id": {
423        "type": "Identifier",
424        "name": "StringBoxMaker",
425        "loc": {
426          "start": {
427            "line": 24,
428            "column": 6
429          },
430          "end": {
431            "line": 24,
432            "column": 20
433          }
434        }
435      },
436      "typeAnnotation": {
437        "type": "TSTypeQuery",
438        "exprName": {
439          "type": "TypeArgumentsExpression",
440          "leftHandExpression": {
441            "type": "Identifier",
442            "name": "makeBox",
443            "loc": {
444              "start": {
445                "line": 24,
446                "column": 30
447              },
448              "end": {
449                "line": 24,
450                "column": 37
451              }
452            }
453          },
454          "typeArguments": {
455            "type": "TSTypeParameterInstantiation",
456            "params": [
457              {
458                "type": "TSStringKeyword",
459                "loc": {
460                  "start": {
461                    "line": 24,
462                    "column": 38
463                  },
464                  "end": {
465                    "line": 24,
466                    "column": 44
467                  }
468                }
469              }
470            ],
471            "loc": {
472              "start": {
473                "line": 24,
474                "column": 37
475              },
476              "end": {
477                "line": 24,
478                "column": 45
479              }
480            }
481          },
482          "loc": {
483            "start": {
484              "line": 24,
485              "column": 23
486            },
487            "end": {
488              "line": 24,
489              "column": 45
490            }
491          }
492        },
493        "loc": {
494          "start": {
495            "line": 24,
496            "column": 23
497          },
498          "end": {
499            "line": 24,
500            "column": 45
501          }
502        }
503      },
504      "loc": {
505        "start": {
506          "line": 24,
507          "column": 1
508        },
509        "end": {
510          "line": 24,
511          "column": 46
512        }
513      }
514    },
515    {
516      "type": "TSTypeAliasDeclaration",
517      "id": {
518        "type": "Identifier",
519        "name": "BoxFunc",
520        "loc": {
521          "start": {
522            "line": 25,
523            "column": 6
524          },
525          "end": {
526            "line": 25,
527            "column": 13
528          }
529        }
530      },
531      "typeAnnotation": {
532        "type": "TSTypeQuery",
533        "exprName": {
534          "type": "TypeArgumentsExpression",
535          "leftHandExpression": {
536            "type": "Identifier",
537            "name": "makeBox",
538            "loc": {
539              "start": {
540                "line": 25,
541                "column": 26
542              },
543              "end": {
544                "line": 25,
545                "column": 33
546              }
547            }
548          },
549          "typeArguments": {
550            "type": "TSTypeParameterInstantiation",
551            "params": [
552              {
553                "type": "TSTypeReference",
554                "typeName": {
555                  "type": "Identifier",
556                  "name": "T",
557                  "loc": {
558                    "start": {
559                      "line": 25,
560                      "column": 34
561                    },
562                    "end": {
563                      "line": 25,
564                      "column": 35
565                    }
566                  }
567                },
568                "loc": {
569                  "start": {
570                    "line": 25,
571                    "column": 34
572                  },
573                  "end": {
574                    "line": 25,
575                    "column": 35
576                  }
577                }
578              }
579            ],
580            "loc": {
581              "start": {
582                "line": 25,
583                "column": 33
584              },
585              "end": {
586                "line": 25,
587                "column": 36
588              }
589            }
590          },
591          "loc": {
592            "start": {
593              "line": 25,
594              "column": 19
595            },
596            "end": {
597              "line": 25,
598              "column": 36
599            }
600          }
601        },
602        "loc": {
603          "start": {
604            "line": 25,
605            "column": 19
606          },
607          "end": {
608            "line": 25,
609            "column": 36
610          }
611        }
612      },
613      "typeParameters": {
614        "type": "TSTypeParameterDeclaration",
615        "params": [
616          {
617            "type": "TSTypeParameter",
618            "name": {
619              "type": "Identifier",
620              "name": "T",
621              "loc": {
622                "start": {
623                  "line": 25,
624                  "column": 14
625                },
626                "end": {
627                  "line": 25,
628                  "column": 15
629                }
630              }
631            },
632            "in": false,
633            "out": false,
634            "loc": {
635              "start": {
636                "line": 25,
637                "column": 14
638              },
639              "end": {
640                "line": 25,
641                "column": 16
642              }
643            }
644          }
645        ],
646        "loc": {
647          "start": {
648            "line": 25,
649            "column": 13
650          },
651          "end": {
652            "line": 25,
653            "column": 16
654          }
655        }
656      },
657      "loc": {
658        "start": {
659          "line": 25,
660          "column": 1
661        },
662        "end": {
663          "line": 25,
664          "column": 37
665        }
666      }
667    },
668    {
669      "type": "TSTypeAliasDeclaration",
670      "id": {
671        "type": "Identifier",
672        "name": "Box",
673        "loc": {
674          "start": {
675            "line": 26,
676            "column": 6
677          },
678          "end": {
679            "line": 26,
680            "column": 9
681          }
682        }
683      },
684      "typeAnnotation": {
685        "type": "TSTypeReference",
686        "typeName": {
687          "type": "Identifier",
688          "name": "ReturnType",
689          "loc": {
690            "start": {
691              "line": 26,
692              "column": 15
693            },
694            "end": {
695              "line": 26,
696              "column": 25
697            }
698          }
699        },
700        "typeParameters": {
701          "type": "TSTypeParameterInstantiation",
702          "params": [
703            {
704              "type": "TSTypeQuery",
705              "exprName": {
706                "type": "TypeArgumentsExpression",
707                "leftHandExpression": {
708                  "type": "Identifier",
709                  "name": "makeBox",
710                  "loc": {
711                    "start": {
712                      "line": 26,
713                      "column": 33
714                    },
715                    "end": {
716                      "line": 26,
717                      "column": 40
718                    }
719                  }
720                },
721                "typeArguments": {
722                  "type": "TSTypeParameterInstantiation",
723                  "params": [
724                    {
725                      "type": "TSTypeReference",
726                      "typeName": {
727                        "type": "Identifier",
728                        "name": "T",
729                        "loc": {
730                          "start": {
731                            "line": 26,
732                            "column": 41
733                          },
734                          "end": {
735                            "line": 26,
736                            "column": 42
737                          }
738                        }
739                      },
740                      "loc": {
741                        "start": {
742                          "line": 26,
743                          "column": 41
744                        },
745                        "end": {
746                          "line": 26,
747                          "column": 42
748                        }
749                      }
750                    }
751                  ],
752                  "loc": {
753                    "start": {
754                      "line": 26,
755                      "column": 40
756                    },
757                    "end": {
758                      "line": 26,
759                      "column": 44
760                    }
761                  }
762                },
763                "loc": {
764                  "start": {
765                    "line": 26,
766                    "column": 26
767                  },
768                  "end": {
769                    "line": 26,
770                    "column": 44
771                  }
772                }
773              },
774              "loc": {
775                "start": {
776                  "line": 26,
777                  "column": 26
778                },
779                "end": {
780                  "line": 26,
781                  "column": 44
782                }
783              }
784            }
785          ],
786          "loc": {
787            "start": {
788              "line": 26,
789              "column": 25
790            },
791            "end": {
792              "line": 26,
793              "column": 44
794            }
795          }
796        },
797        "loc": {
798          "start": {
799            "line": 26,
800            "column": 15
801          },
802          "end": {
803            "line": 26,
804            "column": 25
805          }
806        }
807      },
808      "typeParameters": {
809        "type": "TSTypeParameterDeclaration",
810        "params": [
811          {
812            "type": "TSTypeParameter",
813            "name": {
814              "type": "Identifier",
815              "name": "T",
816              "loc": {
817                "start": {
818                  "line": 26,
819                  "column": 10
820                },
821                "end": {
822                  "line": 26,
823                  "column": 11
824                }
825              }
826            },
827            "in": false,
828            "out": false,
829            "loc": {
830              "start": {
831                "line": 26,
832                "column": 10
833              },
834              "end": {
835                "line": 26,
836                "column": 12
837              }
838            }
839          }
840        ],
841        "loc": {
842          "start": {
843            "line": 26,
844            "column": 9
845          },
846          "end": {
847            "line": 26,
848            "column": 12
849          }
850        }
851      },
852      "loc": {
853        "start": {
854          "line": 26,
855          "column": 1
856        },
857        "end": {
858          "line": 26,
859          "column": 45
860        }
861      }
862    },
863    {
864      "type": "TSTypeAliasDeclaration",
865      "id": {
866        "type": "Identifier",
867        "name": "StringBox",
868        "loc": {
869          "start": {
870            "line": 27,
871            "column": 6
872          },
873          "end": {
874            "line": 27,
875            "column": 15
876          }
877        }
878      },
879      "typeAnnotation": {
880        "type": "TSTypeReference",
881        "typeName": {
882          "type": "Identifier",
883          "name": "Box",
884          "loc": {
885            "start": {
886              "line": 27,
887              "column": 18
888            },
889            "end": {
890              "line": 27,
891              "column": 21
892            }
893          }
894        },
895        "typeParameters": {
896          "type": "TSTypeParameterInstantiation",
897          "params": [
898            {
899              "type": "TSStringKeyword",
900              "loc": {
901                "start": {
902                  "line": 27,
903                  "column": 22
904                },
905                "end": {
906                  "line": 27,
907                  "column": 28
908                }
909              }
910            }
911          ],
912          "loc": {
913            "start": {
914              "line": 27,
915              "column": 21
916            },
917            "end": {
918              "line": 27,
919              "column": 29
920            }
921          }
922        },
923        "loc": {
924          "start": {
925            "line": 27,
926            "column": 18
927          },
928          "end": {
929            "line": 27,
930            "column": 21
931          }
932        }
933      },
934      "loc": {
935        "start": {
936          "line": 27,
937          "column": 1
938        },
939        "end": {
940          "line": 27,
941          "column": 30
942        }
943      }
944    }
945  ],
946  "loc": {
947    "start": {
948      "line": 1,
949      "column": 1
950    },
951    "end": {
952      "line": 28,
953      "column": 1
954    }
955  }
956}
957