99 lines
3.3 KiB
JavaScript
99 lines
3.3 KiB
JavaScript
import { addRollupInput } from "../core/build/add-rollup-input.js";
|
|
import { shouldAppendForwardSlash } from "../core/build/util.js";
|
|
import { getServerOutputDirectory } from "../prerender/utils.js";
|
|
import {
|
|
ENTRYPOINT_VIRTUAL_MODULE_ID,
|
|
OPTIONS_VIRTUAL_MODULE_ID,
|
|
RESOLVED_ENTRYPOINT_VIRTUAL_MODULE_ID,
|
|
RESOLVED_NOOP_ENTRYPOINT_VIRTUAL_MODULE_ID,
|
|
RESOLVED_OPTIONS_VIRTUAL_MODULE_ID,
|
|
RESOLVED_RUNTIME_VIRTUAL_MODULE_ID,
|
|
RUNTIME_VIRTUAL_MODULE_ID,
|
|
VIRTUAL_MODULE_ID
|
|
} from "./consts.js";
|
|
import { isActionsFilePresent } from "./utils.js";
|
|
function vitePluginActionsBuild(opts, internals) {
|
|
return {
|
|
name: "@astro/plugin-actions-build",
|
|
options(options) {
|
|
return addRollupInput(options, [ENTRYPOINT_VIRTUAL_MODULE_ID]);
|
|
},
|
|
writeBundle(_, bundle) {
|
|
for (const [chunkName, chunk] of Object.entries(bundle)) {
|
|
if (chunk.type !== "asset" && chunk.facadeModuleId === RESOLVED_ENTRYPOINT_VIRTUAL_MODULE_ID) {
|
|
const outputDirectory = getServerOutputDirectory(opts.settings);
|
|
internals.astroActionsEntryPoint = new URL(chunkName, outputDirectory);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|
|
function vitePluginActions({
|
|
fs,
|
|
settings
|
|
}) {
|
|
let resolvedActionsId;
|
|
return {
|
|
name: VIRTUAL_MODULE_ID,
|
|
enforce: "pre",
|
|
async resolveId(id) {
|
|
if (id === VIRTUAL_MODULE_ID) {
|
|
return this.resolve("astro/virtual-modules/actions.js");
|
|
}
|
|
if (id === RUNTIME_VIRTUAL_MODULE_ID) {
|
|
return RESOLVED_RUNTIME_VIRTUAL_MODULE_ID;
|
|
}
|
|
if (id === OPTIONS_VIRTUAL_MODULE_ID) {
|
|
return RESOLVED_OPTIONS_VIRTUAL_MODULE_ID;
|
|
}
|
|
if (id === ENTRYPOINT_VIRTUAL_MODULE_ID) {
|
|
const resolvedModule = await this.resolve(
|
|
`${decodeURI(new URL("actions", settings.config.srcDir).pathname)}`
|
|
);
|
|
if (!resolvedModule) {
|
|
return RESOLVED_NOOP_ENTRYPOINT_VIRTUAL_MODULE_ID;
|
|
}
|
|
resolvedActionsId = resolvedModule.id;
|
|
return RESOLVED_ENTRYPOINT_VIRTUAL_MODULE_ID;
|
|
}
|
|
},
|
|
async configureServer(server) {
|
|
const filePresentOnStartup = await isActionsFilePresent(fs, settings.config.srcDir);
|
|
async function watcherCallback() {
|
|
const filePresent = await isActionsFilePresent(fs, settings.config.srcDir);
|
|
if (filePresentOnStartup !== filePresent) {
|
|
server.restart();
|
|
}
|
|
}
|
|
server.watcher.on("add", watcherCallback);
|
|
server.watcher.on("change", watcherCallback);
|
|
},
|
|
async load(id, opts) {
|
|
if (id === RESOLVED_NOOP_ENTRYPOINT_VIRTUAL_MODULE_ID) {
|
|
return { code: "export const server = {}" };
|
|
}
|
|
if (id === RESOLVED_ENTRYPOINT_VIRTUAL_MODULE_ID) {
|
|
return { code: `export { server } from ${JSON.stringify(resolvedActionsId)};` };
|
|
}
|
|
if (id === RESOLVED_RUNTIME_VIRTUAL_MODULE_ID) {
|
|
return {
|
|
code: `export * from 'astro/actions/runtime/${opts?.ssr ? "server" : "client"}.js';`
|
|
};
|
|
}
|
|
if (id === RESOLVED_OPTIONS_VIRTUAL_MODULE_ID) {
|
|
return {
|
|
code: `
|
|
export const shouldAppendTrailingSlash = ${JSON.stringify(
|
|
shouldAppendForwardSlash(settings.config.trailingSlash, settings.config.build.format)
|
|
)};
|
|
`
|
|
};
|
|
}
|
|
}
|
|
};
|
|
}
|
|
export {
|
|
vitePluginActions,
|
|
vitePluginActionsBuild
|
|
};
|