@docfy/ember-vite
Version:
Vite plugin for Docfy Ember integration with @embroider/vite
37 lines (36 loc) • 1.54 kB
JavaScript
import visit from 'unist-util-visit';
import plugin from '@docfy/core/lib/plugin';
import { generateDemoComponentName, getExt, createDemoNodes, isDemoComponents, replaceNode } from './utils';
import path from 'path';
export default plugin({
runWithMdast(ctx) {
const seenNames = new Set();
ctx.pages.forEach((page) => {
const demoComponents = [];
visit(page.ast, 'code', (node) => {
if (['preview-template', 'preview'].includes(node.meta || '')) {
demoComponents.push({
name: generateDemoComponentName(`docfy-demo-preview-${path.basename(page.meta.url)}`, seenNames),
chunks: [
{
snippet: node,
code: node.value.replace(/\\{{/g, '{{'),
ext: getExt(node.lang || 'hbs'),
type: node.meta
}
]
});
}
});
demoComponents.forEach((demoComponent) => {
replaceNode(page.ast.children, demoComponent.chunks[0].snippet, ...createDemoNodes(demoComponent));
});
if (isDemoComponents(page.pluginData.demoComponents)) {
page.pluginData.demoComponents.push(...demoComponents);
}
else {
page.pluginData.demoComponents = demoComponents;
}
});
}
});