buildChildren(node) {
			const children = [];
			for (let child of node.children) {
				if (child.type === 'JSXText') {
					let { value } = child;
					if (value !== '') {
						if (visitingCtx && visitingCtx.generatorOpts.compact) {
							// Newlines must be replaced with a space character, but only if
							// we're inside a text node
							//
							// <p>hello
							//    world</p>  -> <p>hello world</p>
							//
							// <p>
							//    hello world  -> <p>hello world</p>
							// </p>
							//
							// We can drop the whole matched string if it only contains
							// whitespace characters, because that means we're at the
							// beginning or at the end of the JSXText node
							if (/[^\s]/.test(value)) {
								value = value.replace(/(^\s*\n\s*|\s*\n\s*$)/g, '');
								value = value.replace(/\s*\n+\s*/g, ' ');
							} else {
								value = value.replace(/\s*\n+\s*/g, '');
							}
						}
						children.push(TYPES.stringLiteral(value));
					}
					continue;
				}
				if (child.type === 'JSXExpressionContainer') child = child.expression;
				if (child.type === 'JSXEmptyExpression') continue;
				children.push(child);
			}
			return children;
		}
Note: we're optimizing for source parity and don't collapse whitespace.
@param {Node} node