chore(v2): fix remarkplugin unnecessary extra divs

This commit is contained in:
endiliey 2019-11-24 18:00:01 +07:00
parent 9862a6821a
commit e15ab76542

View file

@ -23,11 +23,17 @@ const convertNpmToYarn = npmCode => {
const transformNode = node => { const transformNode = node => {
const npmCode = node.value; const npmCode = node.value;
const yarnCode = convertNpmToYarn(node.value); const yarnCode = convertNpmToYarn(node.value);
node.children = [ return [
{ {
type: 'jsx', type: 'jsx',
value: value:
"<Tabs\n defaultValue=\"npm\"\n values={[\n { label: 'npm', value: 'npm', },\n { label: 'yarn', value: 'yarn', },\n ]\n}>\n<TabItem value=\"npm\">", `<Tabs defaultValue="npm" ` +
`values={[
{ label: 'npm', value: 'npm', },
{ label: 'yarn', value: 'yarn', },
]}
>
<TabItem value="npm">`,
}, },
{ {
type: node.type, type: node.type,
@ -48,28 +54,38 @@ const transformNode = node => {
value: '</TabItem>\n</Tabs>', value: '</TabItem>\n</Tabs>',
}, },
]; ];
node.type = 'element'; };
delete node.lang;
delete node.meta; const matchNode = node => node.type === 'code' && node.meta === 'npm2yarn';
delete node.value; const nodeForImport = {
type: 'import',
value:
"import Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';",
}; };
module.exports = () => { module.exports = () => {
let transformed = false; let transformed = false;
const transformer = node => { const transformer = node => {
if (node.type === 'code' && node.meta === 'npm2yarn') { if (matchNode(node)) {
transformNode(node);
transformed = true; transformed = true;
} else if (Array.isArray(node.children)) { return transformNode(node);
node.children.forEach(transformer); }
if (Array.isArray(node.children)) {
let index = 0;
while (index < node.children.length) {
const result = transformer(node.children[index]);
if (result) {
node.children.splice(index, 1, ...result);
index += result.length;
} else {
index += 1;
}
}
} }
if (node.type === 'root' && transformed) { if (node.type === 'root' && transformed) {
node.children.unshift({ node.children.unshift(nodeForImport);
type: 'import',
value:
"import Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';",
});
} }
return null;
}; };
return transformer; return transformer;
}; };