“use strict”;

Object.defineProperty(exports, “__esModule”, {

value: true

}); exports.JSXAttribute = JSXAttribute; exports.JSXIdentifier = JSXIdentifier; exports.JSXNamespacedName = JSXNamespacedName; exports.JSXMemberExpression = JSXMemberExpression; exports.JSXSpreadAttribute = JSXSpreadAttribute; exports.JSXExpressionContainer = JSXExpressionContainer; exports.JSXSpreadChild = JSXSpreadChild; exports.JSXText = JSXText; exports.JSXElement = JSXElement; exports.JSXOpeningElement = JSXOpeningElement; exports.JSXClosingElement = JSXClosingElement; exports.JSXEmptyExpression = JSXEmptyExpression; exports.JSXFragment = JSXFragment; exports.JSXOpeningFragment = JSXOpeningFragment; exports.JSXClosingFragment = JSXClosingFragment;

function JSXAttribute(node) {

this.print(node.name, node);

if (node.value) {
  this.token("=");
  this.print(node.value, node);
}

}

function JSXIdentifier(node) {

this.word(node.name);

}

function JSXNamespacedName(node) {

this.print(node.namespace, node);
this.token(":");
this.print(node.name, node);

}

function JSXMemberExpression(node) {

this.print(node.object, node);
this.token(".");
this.print(node.property, node);

}

function JSXSpreadAttribute(node) {

this.token("{");
this.token("...");
this.print(node.argument, node);
this.token("}");

}

function JSXExpressionContainer(node) {

this.token("{");
this.print(node.expression, node);
this.token("}");

}

function JSXSpreadChild(node) {

this.token("{");
this.token("...");
this.print(node.expression, node);
this.token("}");

}

function JSXText(node) {

const raw = this.getPossibleRaw(node);

if (raw != null) {
  this.token(raw);
} else {
  this.token(node.value);
}

}

function JSXElement(node) {

const open = node.openingElement;
this.print(open, node);
if (open.selfClosing) return;
this.indent();

for (const child of node.children) {
  this.print(child, node);
}

this.dedent();
this.print(node.closingElement, node);

}

function spaceSeparator() {

this.space();

}

function JSXOpeningElement(node) {

this.token("<");
this.print(node.name, node);
this.print(node.typeParameters, node);

if (node.attributes.length > 0) {
  this.space();
  this.printJoin(node.attributes, node, {
    separator: spaceSeparator
  });
}

if (node.selfClosing) {
  this.space();
  this.token("/>");
} else {
  this.token(">");
}

}

function JSXClosingElement(node) {

this.token("</");
this.print(node.name, node);
this.token(">");

}

function JSXEmptyExpression(node) {

this.printInnerComments(node);

}

function JSXFragment(node) {

this.print(node.openingFragment, node);
this.indent();

for (const child of node.children) {
  this.print(child, node);
}

this.dedent();
this.print(node.closingFragment, node);

}

function JSXOpeningFragment() {

this.token("<");
this.token(">");

}

function JSXClosingFragment() {

this.token("</");
this.token(">");

}