{#--- Constants #}
{%- for constant in module.constants %}
  var {{constant.name}} = {{constant.value|expression_to_text}};
{%- endfor %}

{#--- Enums #}
{%- from "enum_definition.tmpl" import enum_def %}
{%- for enum in enums %}
  var {{ enum_def(enum.name, enum) }}
{%-  endfor %}

{#--- Struct definitions #}
{%  for struct in structs %}
{%-   include "struct_definition.tmpl" %}
{%- endfor -%}

{#--- Union definitions #}
{%- from "union_definition.tmpl" import union_def %}
{%- for union in unions %}
{{union_def(union)|indent(2)}}
{%- endfor %}

{#--- Interface definitions #}
{%- for interface in interfaces -%}
{%-   include "interface_definition.tmpl" %}
{%- endfor %}

{%- if use_new_js_bindings %}
  var exports = mojo.internal.exposeNamespace("{{module.namespace}}");
{%- else %}
  var exports = {};
{%- endif %}

{%- for constant in module.constants %}
  exports.{{constant.name}} = {{constant.name}};
{%- endfor %}
{%- for enum in enums %}
  exports.{{enum.name}} = {{enum.name}};
{%- endfor %}
{%- for struct in structs if struct.exported %}
  exports.{{struct.name}} = {{struct.name}};
{%- endfor %}
{%- for union in unions %}
  exports.{{union.name}} = {{union.name}};
{%- endfor %}
{%- for interface in interfaces %}
  exports.{{interface.name}} = {{interface.name}};
  exports.{{interface.name}}Ptr = {{interface.name}}Ptr;
{%- endfor %}
