MCPcopy Create free account
hub / github.com/Snapchat/Valdi / outputJSXElement

Method outputJSXElement

compiler/companion/src/JSXProcessor.ts:791–851  ·  view source on GitHub ↗
(
    jsxElement: JSXElement,
    output: JSXOutputState,
    transformContext: ts.TransformationContext,
    nodeTypeStr: string,
    attributeStatements: JSXAttributeStatements,
  )

Source from the content-addressed store, hash-verified

789 }
790
791 private outputJSXElement(
792 jsxElement: JSXElement,
793 output: JSXOutputState,
794 transformContext: ts.TransformationContext,
795 nodeTypeStr: string,
796 attributeStatements: JSXAttributeStatements,
797 ): JSXNodeOutput {
798 let makeNodePrototypeParams: ts.Expression[] = [createStringLiteral(nodeTypeStr, transformContext)];
799
800 if (attributeStatements.staticAttributesLiteral) {
801 makeNodePrototypeParams.push(attributeStatements.staticAttributesLiteral);
802 }
803
804 const nodeIdentifier = this.appendInitializedVariable(
805 '__node',
806 nodeTypeStr,
807 this.createRendererCallExpr('makeNodePrototype', makeNodePrototypeParams, transformContext),
808 output,
809 transformContext,
810 );
811
812 const keyOrUndefined = attributeStatements.key || transformContext.factory.createIdentifier('undefined');
813
814 if (attributeStatements.lazy) {
815 const beginIfNeeded = this.createRendererCallExpr(
816 'beginRenderIfNeeded',
817 [nodeIdentifier, keyOrUndefined],
818 transformContext,
819 );
820
821 const innerStatements = this.outputElementInner(jsxElement, attributeStatements, output, transformContext);
822 const endRenderStatement = innerStatements[innerStatements.length - 1];
823
824 const beginRenderStatement = transformContext.factory.createIfStatement(
825 beginIfNeeded,
826 transformContext.factory.createBlock(innerStatements),
827 );
828 return {
829 beginRenderStatement,
830 endRenderStatement,
831 statements: [beginRenderStatement],
832 };
833 } else {
834 const beginRenderStatement = this.createRendererCall(
835 'beginRender',
836 [nodeIdentifier, keyOrUndefined],
837 undefined,
838 transformContext,
839 );
840 const statements: ts.Statement[] = [];
841 statements.push(beginRenderStatement);
842 statements.push(...this.outputElementInner(jsxElement, attributeStatements, output, transformContext));
843 const endRenderStatement = statements[statements.length - 1];
844
845 return {
846 beginRenderStatement,
847 endRenderStatement,
848 statements,

Callers 1

outputJSXMethod · 0.95

Calls 6

outputElementInnerMethod · 0.95
createRendererCallMethod · 0.95
createStringLiteralFunction · 0.85
pushMethod · 0.45

Tested by

no test coverage detected