Skip to content

Commit

Permalink
fixed extractJSXChildren and extractTopLevelJSXElements to support ch…
Browse files Browse the repository at this point in the history
…ildren values inside JSX elements
  • Loading branch information
wpdas committed Apr 23, 2024
1 parent a77e8de commit 475d3f8
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 9 deletions.
1 change: 0 additions & 1 deletion lib/actions/processChildrenWidget.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ const processChildrenWidget = (htmlContent, fileSchemas) => {
let childChildren = extractJSXChildren(htmlElement);
// INFO: Se tiver child dentro deste child (childChildren), chama essa mesma função recursivamente?
// ja esta sendo feito pelo "transformSchemaToWidgets"
// TODO:
if (childChildren) {
// childChildren = processChildrenWidget(childChildren, fileSchemas);
childProps = { ...childProps, children: childChildren };
Expand Down
4 changes: 4 additions & 0 deletions lib/parsers/extractJSXChildren.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ function extractJSXChildren(code) {
});

if (childrenAsString) {
if (childrenAsString.startsWith("<>")) {
return childrenAsString;
}

return `<>${childrenAsString}</>`;
}

Expand Down
43 changes: 36 additions & 7 deletions lib/parsers/extractTopLevelJSXElements.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,32 +20,61 @@ const generate = require("@babel/generator").default;
* @returns {string[]} - Lista de strings representando cada elemento JSX de nível superior.
*/
function extractTopLevelJSXElements(code) {
// V2: trata childrens que usam valores dinamicos dentro do JSX. Isso estava falhando antes
// por não ter essa tratativa.
const topLevelElements = [];

// Configuração do Babel para analisar JSX
const ast = babel.parse(code, {
plugins: [pluginSyntaxJsx],
});

// Percorre a AST para encontrar elementos JSX de nível superior
traverse(ast, {
JSXFragment(path) {
// Processa cada filho direto do fragmento JSX
path.node.children.forEach((child) => {
// Ignora espaços em branco e outros nós que não são JSXElement ou JSXText
if (babel.types.isJSXElement(child) || babel.types.isJSXText(child)) {
// Gera código a partir do nó AST do elemento JSX
const { code } = generate(child, { concise: true });
topLevelElements.push(code);
} else if (babel.types.isJSXExpressionContainer(child)) {
// Trata expressões dentro de containers, ex: {variable}
const { code } = generate(child.expression, { concise: true });
topLevelElements.push(`{${code}}`); // Adiciona chaves para simular a expressão embutida
}
});

// Interrompe a travessia após processar os filhos do fragmento JSX
path.stop();
path.stop(); // Interrompe após processar os filhos do fragmento
},
});

return topLevelElements;
}

// function extractTopLevelJSXElements(code) {
// const topLevelElements = [];

// // Configuração do Babel para analisar JSX
// const ast = babel.parse(code, {
// plugins: [pluginSyntaxJsx],
// });

// // Percorre a AST para encontrar elementos JSX de nível superior
// traverse(ast, {
// JSXFragment(path) {
// // Processa cada filho direto do fragmento JSX
// path.node.children.forEach((child) => {
// // Ignora espaços em branco e outros nós que não são JSXElement ou JSXText
// if (babel.types.isJSXElement(child) || babel.types.isJSXText(child)) {
// // Gera código a partir do nó AST do elemento JSX
// const { code } = generate(child, { concise: true });
// topLevelElements.push(code);
// }
// });

// // Interrompe a travessia após processar os filhos do fragmento JSX
// path.stop();
// },
// });

// return topLevelElements;
// }

module.exports = extractTopLevelJSXElements;
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "alem",
"description": "Create web3 applications for NEAR BOS with a focus on performance and friendly development.",
"version": "1.0.0-beta.25",
"version": "1.0.0-beta.26",
"main": "main.js",
"types": "index.d.ts",
"author": "Wenderson Pires - wendersonpires.near",
Expand Down

0 comments on commit 475d3f8

Please sign in to comment.