cells = {
const cells = [];
for (let i = 0; i < nodes.length; i++) {
const node = nodes[i];
switch (node.type) {
case "Line": {
if (i && nodes[i - 1].type === node.type) {
cells[cells.length - 1].value += "\n" + node.value.trim();
break;
}
}
case "Block": {
cells.push({ type: "md", value: node.value.trim() });
break;
}
case "VariableDeclaration": {
for (const declaration of node.declarations) {
if (declaration.id.type === "Identifier") {
const name = declaration.id.name;
const value = input.slice(
declaration.init.start,
declaration.init.end
);
if (declaration.init.type === "ObjectExpression") {
cells.push({ type: "js", value: `${name} = (${value})` });
} else {
cells.push({ type: "js", value: `${name} = ${value}` });
}
} else if (declaration.id.type === "ObjectPattern") {
for (let i = 0; i < declaration.id.properties.length; i++) {
const key = declaration.id.properties[i].key.name;
const name = declaration.id.properties[i].value.name;
if (declaration.init.type === "Identifier") {
cells.push({
type: "js",
value: `${name} = ${declaration.init.name}.${key}`
});
} else if (declaration.init.type === "ObjectExpression") {
const { start, end } = declaration.init.properties.find(
(d) => d.key.name === key
).value;
const value = input.slice(start, end);
cells.push({ type: "js", value: `${name} = ${value}` });
}
}
}
}
break;
}
case "EmptyStatement": {
break;
}
default: {
cells.push({ type: "js", value: input.slice(node.start, node.end) });
break;
}
}
}
return cells;
}