@docfy/ember-vite
Version:
Vite plugin for Docfy Ember integration with @embroider/vite
37 lines (36 loc) • 1.57 kB
JavaScript
import visit from 'unist-util-visit';
import plugin from '@docfy/core/lib/plugin.js';
import { generateDemoComponentName, getExt, createDemoNodes, isDemoComponents, replaceNode, } from './utils.js';
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, '{{'), // un-escape hbs
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;
}
});
},
});