@docfy/ember-vite
Version:
Vite plugin for Docfy Ember integration with @embroider/vite
58 lines (57 loc) • 2.23 kB
JavaScript
import debugFactory from 'debug';
const debug = debugFactory('@docfy/ember-vite-plugin:gjs-processor');
/**
* Get the import path for a component relative to the page template
*/
function getComponentImportPath(pageUrl, componentName, ext = 'gjs') {
// Convert page URL to component path
const cleanUrl = pageUrl.replace(/^\/+|\/+$/g, '');
const parts = cleanUrl.split('/').filter(Boolean);
if (pageUrl.endsWith('/')) {
parts.push('index');
}
// Add _gen suffix to the last part (page name)
const lastPart = parts.pop() || 'index';
// Create relative path from template to component
// templates/docs/ember/writing-demos.gjs -> ./writing-demos_gen/componentname.ext
return `./${lastPart}_gen/${componentName.toLowerCase()}.${ext}`;
}
/**
* Unified function to process all imports for a page template
* Combines component generation and import processing
*/
export function processPageImports(page) {
debug('Processing page imports', { url: page.meta.url });
const imports = [];
const demoComponents = page.pluginData?.demoComponents;
// Generate imports for demo components
if (demoComponents?.length) {
demoComponents.forEach((demo) => {
// For GJS/GTS files, import directly; otherwise import the JS file
const gtsGjsChunk = demo.chunks.find((c) => ['gjs', 'gts'].includes(c.ext));
let ext = 'js'; // default to JS import
if (gtsGjsChunk) {
ext = gtsGjsChunk.ext; // Use GJS/GTS file directly
}
const componentPath = getComponentImportPath(page.meta.url, demo.name.dashCase, ext);
imports.push({
type: 'component',
name: demo.name.pascalCase,
path: componentPath,
isDefault: true
});
});
// Add DocfyDemo import if we have demo components
imports.push({
type: 'component',
name: 'DocfyDemo',
path: 'test-app-vite/components/docfy-demo',
isDefault: true
});
}
debug('Processed page imports', {
url: page.meta.url,
imports: imports.length
});
return imports;
}