UNPKG

svelte-draft

Version:
71 lines (70 loc) 3.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const typedraft_1 = require("typedraft"); class JSXExpressionContainerVisitor { Visit(container, generator) { if (!container.parentPath.isJSXElement()) return; const name = container.parentPath.get("openingElement").get("name"); if (!name.isJSXIdentifier()) return; const tag_name = name.node.name; if (tag_name === "each") { const expression = container.get("expression"); if (expression.isArrowFunctionExpression()) { generator.TraverseTag(expression.get("body")); } } else if (tag_name === "await") { const info = container.get("expression"); if (!info.isObjectExpression()) return; const props = info.get("properties"); const loading = props.find(prop => prop.isObjectProperty() && prop.node.key.name === "loading"); const loading_jsx = loading === null || loading === void 0 ? void 0 : loading.get("value"); if (loading_jsx) { generator.TraverseTag(loading_jsx); } const promise = props.find(prop => prop.isObjectProperty() && prop.node.key.name === "promise"); const promise_js = promise.get("value"); const [arg_last] = promise_js.get("arguments"); const callee = promise_js.get("callee"); const object = callee.get("object"); if (object.isIdentifier()) { TraversePromiseClause("then", arg_last, generator); } else if (object.isCallExpression()) { const [arg_first] = object.get("arguments"); TraversePromiseClause("then", arg_first, generator); TraversePromiseClause("catch", arg_last, generator); } } else if (tag_name === "debug") { const to_debug = container.get("expression").get("elements"); const variable_list = to_debug.map(each => typedraft_1.ToString(each.node)).join(", "); generator.Append(variable_list); } else if (tag_name === "raw-html") { const node = container.get("expression").node; generator.Append(typedraft_1.ToString(node)); } else { const expression = container.get("expression"); if (expression.isArrowFunctionExpression()) { generator.TraverseTag(expression.get("body")); } else { generator.Append(typedraft_1.ToString(container.node)); } } } } exports.JSXExpressionContainerVisitor = JSXExpressionContainerVisitor; function TraversePromiseClause(name, path, generator) { const jsx = path.get("body"); const clause = `{:${name} ${path.get("params").toString()}}`; generator.Append("\n"); generator.Append(clause); generator.Append("\n"); generator.TraverseTag(jsx); }