@aziontech/opennextjs-azion
Version:
Azion builder for Next.js apps
60 lines (59 loc) • 2.67 kB
JavaScript
import logger from "@opennextjs/aws/logger.js";
/**
* Ensures open next is configured for azion.
*
* @param config OpenNext configuration.
*/
export function ensureAzionConfig(config) {
const mwIsMiddlewareExternal = config.middleware?.external === true;
const mwConfig = mwIsMiddlewareExternal ? config.middleware : undefined;
const requirements = {
// TODO: in the future move to the open-next aws package
dftUseAzionWrapper: typeof config.default?.override?.wrapper === "function",
dftUseEdgeConverter: config.default?.override?.converter === "edge",
dftUseFetchProxy: config.default?.override?.proxyExternalRequest === "fetch",
dftMaybeUseCache: config.default?.override?.incrementalCache === "dummy" ||
typeof config.default?.override?.incrementalCache === "function",
dftMaybeUseTagCache: config.default?.override?.tagCache === "dummy" ||
typeof config.default?.override?.incrementalCache === "function",
dftMaybeUseQueue: config.default?.override?.queue === "dummy" ||
config.default?.override?.queue === "direct" ||
typeof config.default?.override?.queue === "function",
// Check for the middleware function
mwIsMiddlewareExternal,
mwUseCloudflareWrapper: true,
mwUseEdgeConverter: mwConfig?.override?.converter === "edge",
mwUseFetchProxy: mwConfig?.override?.proxyExternalRequest === "fetch",
hasCryptoExternal: config.edgeExternals?.includes("node:crypto"),
};
if (config.default?.override?.queue === "direct") {
logger.warn("The direct mode queue is not recommended for use in production.");
}
if (Object.values(requirements).some((satisfied) => !satisfied)) {
throw new Error("The `open-next.config.ts` should have a default export like this:\n\n" +
`{
default: {
override: {
wrapper: "function",
converter: "edge",
proxyExternalRequest: "fetch",
incrementalCache: "dummy" | function,
tagCache: "dummy",
queue: "dummy" | "direct" | function,
},
},
edgeExternals: ["node:crypto"],
middleware: {
external: true,
override: {
wrapper: "azion-wrapper-edge",
converter: "edge",
proxyExternalRequest: "fetch",
incrementalCache: "dummy" | function,
tagCache: "dummy" | function,
queue: "dummy" | "direct" | function,
},
},
}\n\n`.replace(/^ {8}/gm, ""));
}
}