schema.sbn 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. {{~for enum in __enums~}}{{~if enum.comment != '' ~}}
  2. /**
  3. * {{enum.comment | html.escape}}
  4. */
  5. {{~end~}}
  6. export const {{full_name enum}} = Object.freeze({
  7. {{~for item in enum.items ~}}
  8. {{~if item.comment != '' ~}}
  9. /**
  10. * {{escape_comment item.comment}}
  11. */
  12. {{~end~}}
  13. {{item.name}}: {{item.int_value}},
  14. {{~end~}}
  15. });
  16. {{~end~}}
  17. {{~
  18. func get_ref_name
  19. ret (format_property_name __code_style $0.name) + '_ref'
  20. end
  21. func generate_resolve_field_ref
  22. field = $0
  23. fieldName = format_property_name __code_style field.name
  24. refTable = get_ref_table field
  25. if can_generate_ref field
  26. tableName = refTable.name
  27. if field.is_nullable
  28. ret 'this.'+(get_ref_name field) + ' = this.' + fieldName + '!= null ? tables.' + tableName + '.get(this.' + fieldName + ') : null'
  29. else
  30. ret 'this.'+(get_ref_name field) + ' = tables.' + tableName + '.get(this.' + fieldName + ')'
  31. end
  32. else
  33. if (is_field_bean_need_resolve_ref field)
  34. ret 'this.'+fieldName + '?.resolve(tables);'
  35. else if (is_field_array_like_need_resolve_ref field)
  36. ret 'for (let _e of ' + 'this.' + fieldName + ') { _e?.resolve(tables); }'
  37. else if (is_field_map_need_resolve_ref field)
  38. ret 'for (let [_, _e] of ' + 'this.' + fieldName + ') { _e?.resolve(tables); }'
  39. else
  40. ret ''
  41. end
  42. end
  43. end
  44. ~}}
  45. {{~for bean in __beans~}}
  46. {{~if bean.comment != '' ~}}
  47. /**
  48. * {{escape_comment bean.comment}}
  49. */
  50. {{~end~}}
  51. export class {{full_name bean}}{{if bean.parent_def_type}} extends {{full_name bean.parent_def_type}}{{end}} {
  52. {{~if bean.is_abstract_type~}}
  53. static constructorFrom(_json_) {
  54. switch (_json_["$type"]) {
  55. {{~ for child in bean.hierarchy_not_abstract_children~}}
  56. case '{{impl_data_type child bean}}': return new {{full_name child}}(_json_);
  57. {{~end~}}
  58. default: throw new Error();
  59. }
  60. }
  61. {{~end~}}
  62. constructor(_json_) {
  63. {{~if bean.parent_def_type~}}
  64. super(_json_);
  65. {{~end~}}
  66. {{~ for field in bean.export_fields ~}}
  67. {{~if !field.ctype.is_nullable~}}
  68. if (_json_.{{field.name}} === undefined) { throw new Error() };
  69. {{~end~}}
  70. {{deserialize ('this.' + format_field_name __code_style field.name) ( '_json_.' + field.name) field.ctype}};
  71. {{~end~}}
  72. }
  73. resolve(tables) {
  74. {{~if bean.parent_def_type~}}
  75. super.resolve(tables);
  76. {{~end~}}
  77. {{~ for field in bean.export_fields ~}}
  78. {{generate_resolve_field_ref field}}
  79. {{~end~}}
  80. }
  81. }
  82. {{~end~}}
  83. {{~for table in __tables
  84. key_type = table.key_ttype
  85. value_type = table.value_ttype
  86. ~}}
  87. {{~if table.comment != '' ~}}
  88. /**
  89. * {{escape_comment table.comment}}
  90. */
  91. {{~end~}}
  92. export class {{full_name table}} {
  93. {{~if table.is_map_table ~}}
  94. constructor(_json_) {
  95. this._dataMap = new Map();
  96. this._dataList = [];
  97. for(var _json2_ of _json_) {
  98. let _v;
  99. {{deserialize '_v' '_json2_' value_type}};
  100. this._dataList.push(_v);
  101. this._dataMap.set(_v.{{format_field_name __code_style table.index_field.name}}, _v);
  102. }
  103. }
  104. getDataMap() { return this._dataMap; }
  105. getDataList() { return this._dataList; }
  106. get(key) { return this._dataMap.get(key); }
  107. resolve(tables) {
  108. for(let data of this._dataList) {
  109. data.resolve(tables);
  110. }
  111. }
  112. {{~else if table.is_list_table ~}}
  113. constructor(_json_) {
  114. this._dataList = [];
  115. for(var _json2_ of _json_) {
  116. let _v;
  117. {{deserialize '_v' '_json2_' value_type}};
  118. this._dataList.push(_v);
  119. }
  120. }
  121. getDataList() { return this._dataList }
  122. get(index) { return this._dataList[index] }
  123. resolve(tables) {
  124. for(let data of this._dataList) {
  125. data.resolve(tables);
  126. }
  127. }
  128. {{~else~}}
  129. constructor(_json_) {
  130. if (_json_.length != 1) throw new Error('table mode=one, but size != 1');
  131. {{deserialize 'this._data' '_json_[0]' value_type}};
  132. }
  133. getData() { return this._data; }
  134. {{~ for field in value_type.def_bean.hierarchy_export_fields ~}}
  135. {{~if field.comment != '' ~}}
  136. /**
  137. * {{escape_comment field.comment}}
  138. */
  139. {{~end~}}
  140. get {{format_field_name __code_style field.name}}() { return this._data.{{format_field_name __code_style field.name}}; }
  141. {{~if can_generate_ref field~}}
  142. get {{format_field_name __code_style field.name}}_ref(): { return this._data.{{format_field_name __code_style field.name}}_ref; }
  143. {{~end~}}
  144. {{~end~}}
  145. resolve(tables) {
  146. this._data.resolve(tables);
  147. }
  148. {{end}}
  149. }
  150. {{~end~}}
  151. export class {{__name}} {
  152. {{~ for table in __tables ~}}
  153. {{~if table.comment != '' ~}}
  154. /**
  155. * {{escape_comment table.comment}}
  156. */
  157. {{~end~}}
  158. get {{table.name}}() { return this._{{table.name}};}
  159. {{~end~}}
  160. constructor(loader) {
  161. {{~for table in __tables ~}}
  162. this._{{table.name}} = new {{full_name table}}(loader('{{table.output_data_file}}'));
  163. {{~end~}}
  164. {{~for table in __tables ~}}
  165. this._{{table.name}}.resolve(this);
  166. {{~end~}}
  167. }
  168. }