56 lines
1.5 KiB
Plaintext
56 lines
1.5 KiB
Plaintext
import { addRollupInput } from "../add-rollup-input.js";
|
|
const RENDERERS_MODULE_ID = "@astro-renderers";
|
|
const RESOLVED_RENDERERS_MODULE_ID = `\0${RENDERERS_MODULE_ID}`;
|
|
function vitePluginRenderers(opts) {
|
|
return {
|
|
name: "@astro/plugin-renderers",
|
|
options(options) {
|
|
return addRollupInput(options, [RENDERERS_MODULE_ID]);
|
|
},
|
|
resolveId(id) {
|
|
if (id === RENDERERS_MODULE_ID) {
|
|
return RESOLVED_RENDERERS_MODULE_ID;
|
|
}
|
|
},
|
|
async load(id) {
|
|
if (id === RESOLVED_RENDERERS_MODULE_ID) {
|
|
if (opts.settings.renderers.length > 0) {
|
|
const imports = [];
|
|
const exports = [];
|
|
let i = 0;
|
|
let rendererItems = "";
|
|
for (const renderer of opts.settings.renderers) {
|
|
const variable = `_renderer${i}`;
|
|
imports.push(`import ${variable} from '${renderer.serverEntrypoint}';`);
|
|
rendererItems += `Object.assign(${JSON.stringify(renderer)}, { ssr: ${variable} }),`;
|
|
i++;
|
|
}
|
|
exports.push(`export const renderers = [${rendererItems}];`);
|
|
return `${imports.join("\n")}
|
|
${exports.join("\n")}`;
|
|
} else {
|
|
return `export const renderers = [];`;
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|
|
function pluginRenderers(opts) {
|
|
return {
|
|
targets: ["server"],
|
|
hooks: {
|
|
"build:before": () => {
|
|
return {
|
|
vitePlugin: vitePluginRenderers(opts)
|
|
};
|
|
}
|
|
}
|
|
};
|
|
}
|
|
export {
|
|
RENDERERS_MODULE_ID,
|
|
RESOLVED_RENDERERS_MODULE_ID,
|
|
pluginRenderers,
|
|
vitePluginRenderers
|
|
};
|