From f8f8fe794404ac3621059f9a327fd60c4b7ec044 Mon Sep 17 00:00:00 2001 From: Dorseuil Nicolas Date: Sat, 25 May 2024 11:42:57 +0200 Subject: [PATCH] apply the resolve plugin for all server function overrides --- .../open-next/src/build/createServerBundle.ts | 5 +- .../open-next/src/core/createMainHandler.ts | 36 +++------- packages/open-next/src/core/resolve.ts | 32 +++++++++ packages/open-next/src/plugins/resolve.ts | 68 +++++++++++++------ 4 files changed, 87 insertions(+), 54 deletions(-) diff --git a/packages/open-next/src/build/createServerBundle.ts b/packages/open-next/src/build/createServerBundle.ts index 506c98e8..58a23b26 100644 --- a/packages/open-next/src/build/createServerBundle.ts +++ b/packages/open-next/src/build/createServerBundle.ts @@ -227,10 +227,7 @@ async function generateBundle( openNextResolvePlugin({ fnName: name, - overrides: { - converter: overrides.converter, - wrapper: overrides.wrapper, - }, + overrides: overrides, }), ]; diff --git a/packages/open-next/src/core/createMainHandler.ts b/packages/open-next/src/core/createMainHandler.ts index f09ba070..c8bec9ef 100644 --- a/packages/open-next/src/core/createMainHandler.ts +++ b/packages/open-next/src/core/createMainHandler.ts @@ -1,13 +1,19 @@ import type { AsyncLocalStorage } from "node:async_hooks"; -import type { OpenNextConfig, OverrideOptions } from "types/open-next"; +import type { OpenNextConfig } from "types/open-next"; import { debug } from "../adapters/logger"; import { generateUniqueId } from "../adapters/util"; import type { IncrementalCache } from "../cache/incremental/types"; import type { Queue } from "../queue/types"; import { openNextHandler } from "./requestHandler.js"; -import { resolveConverter, resolveTagCache, resolveWrapper } from "./resolve"; +import { + resolveConverter, + resolveIncrementalCache, + resolveQueue, + resolveTagCache, + resolveWrapper, +} from "./resolve"; declare global { var queue: Queue; @@ -17,32 +23,6 @@ declare global { var __als: AsyncLocalStorage; } -async function resolveQueue(queue: OverrideOptions["queue"]) { - if (typeof queue === "string") { - const m = await import(`../queue/${queue}.js`); - return m.default; - } else if (typeof queue === "function") { - return queue(); - } else { - const m_1 = await import("../queue/sqs.js"); - return m_1.default; - } -} - -async function resolveIncrementalCache( - incrementalCache: OverrideOptions["incrementalCache"], -) { - if (typeof incrementalCache === "string") { - const m = await import(`../cache/incremental/${incrementalCache}.js`); - return m.default; - } else if (typeof incrementalCache === "function") { - return incrementalCache(); - } else { - const m_1 = await import("../cache/incremental/s3.js"); - return m_1.default; - } -} - export async function createMainHandler() { //First we load the config const config: OpenNextConfig = await import( diff --git a/packages/open-next/src/core/resolve.ts b/packages/open-next/src/core/resolve.ts index f57a09a6..a282a9f7 100644 --- a/packages/open-next/src/core/resolve.ts +++ b/packages/open-next/src/core/resolve.ts @@ -56,3 +56,35 @@ export async function resolveTagCache( return m_1.default; } } + +/** + * + * @param queue + * @returns + * @__PURE__ + */ +export async function resolveQueue(queue: OverrideOptions["queue"]) { + if (typeof queue === "function") { + return queue(); + } else { + const m_1 = await import("../queue/sqs.js"); + return m_1.default; + } +} + +/** + * + * @param incrementalCache + * @returns + * @__PURE__ + */ +export async function resolveIncrementalCache( + incrementalCache: OverrideOptions["incrementalCache"], +) { + if (typeof incrementalCache === "function") { + return incrementalCache(); + } else { + const m_1 = await import("../cache/incremental/s3.js"); + return m_1.default; + } +} diff --git a/packages/open-next/src/plugins/resolve.ts b/packages/open-next/src/plugins/resolve.ts index aefbee70..e063e92a 100644 --- a/packages/open-next/src/plugins/resolve.ts +++ b/packages/open-next/src/plugins/resolve.ts @@ -3,9 +3,8 @@ import { readFileSync } from "node:fs"; import { Plugin } from "esbuild"; import type { DefaultOverrideOptions, - IncludedIncrementalCache, - IncludedQueue, - IncludedTagCache, + LazyLoadedOverride, + OverrideOptions, } from "types/open-next"; import logger from "../logger.js"; @@ -14,14 +13,22 @@ export interface IPluginSettings { overrides?: { wrapper?: DefaultOverrideOptions["wrapper"]; converter?: DefaultOverrideOptions["converter"]; - // Right now theses do nothing since there is only one implementation - tag?: IncludedTagCache; - queue?: IncludedQueue; - incrementalCache?: IncludedIncrementalCache; + tagCache?: OverrideOptions["tagCache"]; + queue?: OverrideOptions["queue"]; + incrementalCache?: OverrideOptions["incrementalCache"]; }; fnName?: string; } +function getOverrideOrDefault< + Override extends string | LazyLoadedOverride, +>(override: Override, defaultOverride: string) { + if (typeof override === "string") { + return override; + } + return defaultOverride; +} + /** * @param opts.overrides - The name of the overrides to use * @returns @@ -36,29 +43,46 @@ export function openNextResolvePlugin({ logger.debug(`OpenNext Resolve plugin for ${fnName}`); build.onLoad({ filter: /core\/resolve.js/g }, async (args) => { let contents = readFileSync(args.path, "utf-8"); - if (overrides?.wrapper && typeof overrides.wrapper === "string") { + if (overrides?.wrapper) { contents = contents.replace( "../wrappers/aws-lambda.js", - `../wrappers/${overrides.wrapper}.js`, + `../wrappers/${getOverrideOrDefault( + overrides.wrapper, + "aws-lambda", + )}.js`, ); } if (overrides?.converter) { - if (typeof overrides.converter === "function") { - contents = contents.replace( - "../converters/aws-apigw-v2.js", - `../converters/dummy.js`, - ); - } else { - contents = contents.replace( - "../converters/aws-apigw-v2.js", - `../converters/${overrides.converter}.js`, - ); - } + contents = contents.replace( + "../converters/aws-apigw-v2.js", + `../converters/${getOverrideOrDefault( + overrides.converter, + "dummy", + )}.js`, + ); } - if (overrides?.tag) { + if (overrides?.tagCache) { contents = contents.replace( "../cache/tag/dynamodb.js", - `../cache/tag/${overrides.tag}.js`, + `../cache/tag/${getOverrideOrDefault( + overrides.tagCache, + "dynamodb-lite", + )}.js`, + ); + } + if (overrides?.queue) { + contents = contents.replace( + "../queue/sqs.js", + `../queue/${getOverrideOrDefault(overrides.queue, "sqs-lite")}.js`, + ); + } + if (overrides?.incrementalCache) { + contents = contents.replace( + "../cache/incremental/s3.js", + `../cache/incremental/${getOverrideOrDefault( + overrides.incrementalCache, + "s3-lite", + )}.js`, ); } return {