astro-decap-cms
Version:
Add Decap CMS's admin dashboard to your Astro project
46 lines (45 loc) • 1.52 kB
JavaScript
const virtualModuleId = 'virtual:astro-decap-cms/user-config';
const resolvedVirtualModuleId = `\0${virtualModuleId}`;
function generateVirtualConfigModule({ config, previewStyles = [], identityWidget, }) {
const imports = [];
const styles = [];
previewStyles.forEach((entry, index) => {
if (!Array.isArray(entry))
entry = [entry];
const [style, opts] = entry;
if ((opts === null || opts === void 0 ? void 0 : opts.raw) || style.startsWith('http')) {
styles.push(JSON.stringify([style, opts]));
}
else {
const name = `style__${index}`;
imports.push(`import ${name} from '${style}?raw';`);
styles.push(`[${name}, { raw: true }]`);
}
});
return `${imports.join('\n')}
import * as NCMS from 'decap-cms-app';
${identityWidget}
export default {
cms: NCMS,
config: JSON.parse('${JSON.stringify(config)}'),
previewStyles: [${styles.join(',')}],
};
`;
}
export default function AdminDashboardPlugin({ config, previewStyles, identityWidget, }) {
return {
name: 'vite-plugin-decap-cms-admin-dashboard',
resolveId(id) {
if (id === virtualModuleId)
return resolvedVirtualModuleId;
},
load(id) {
if (id === resolvedVirtualModuleId)
return generateVirtualConfigModule({
config,
previewStyles,
identityWidget,
});
},
};
}