studiocms
Version:
Astro Native CMS for AstroDB. Built from the ground up by the Astro community.
44 lines (43 loc) • 1.89 kB
JavaScript
import fs from "node:fs";
import { createResolver } from "astro-integration-kit";
const { resolve } = createResolver(import.meta.url);
const buildDefaultOnlyVirtual = (mod) => `export default ${JSON.stringify(mod)};`;
const buildNamedMultiExportVirtual = (items) => Object.entries(items).map(([key, val]) => `export const ${key} = ${JSON.stringify(val)};`).join("\n");
const buildVirtualConfig = (options) => fs.readFileSync(resolve("./stubs/config.stub.js"), "utf-8").replace(/\$\$options\$\$/g, JSON.stringify(options));
const buildLoggerVirtual = (verbose) => fs.readFileSync(resolve("./stubs/logger.stub.js"), "utf-8").replace(/\$\$verbose\$\$/g, verbose.toString());
const VirtualModuleBuilder = (resolve2) => {
const dynamicVirtual = (items) => items.map((item) => `export * from ${JSON.stringify(resolve2(item))};`).join("\n");
const ambientScripts = (items) => items.map((item) => `import '${resolve2(item)}';`).join("\n");
const namedVirtual = ({
namedExport,
path,
exportDefault
}) => `
import { ${namedExport} } from ${JSON.stringify(resolve2(path))};
export { ${namedExport} };
${exportDefault ? `export default ${namedExport};` : ""}
`;
const astroComponentVirtual = (items) => Object.entries(items).map(([key, val]) => `export { default as ${key} } from ${JSON.stringify(resolve2(val))}`).join("\n");
const dynamicWithAstroVirtual = ({
dynamicExports,
astroComponents
}) => [dynamicVirtual(dynamicExports), astroComponentVirtual(astroComponents)].join("\n");
return {
dynamicVirtual,
ambientScripts,
namedVirtual,
astroComponentVirtual,
dynamicWithAstroVirtual,
buildDefaultOnlyVirtual,
buildLoggerVirtual,
buildNamedMultiExportVirtual,
buildVirtualConfig
};
};
export {
VirtualModuleBuilder,
buildDefaultOnlyVirtual,
buildLoggerVirtual,
buildNamedMultiExportVirtual,
buildVirtualConfig
};