Skip to content

Commit b3877f4

Browse files
committed
moved originResolver
1 parent dc21580 commit b3877f4

File tree

5 files changed

+91
-55
lines changed

5 files changed

+91
-55
lines changed

packages/open-next/src/adapters/middleware.ts

Lines changed: 6 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,21 @@
1-
import { InternalEvent, Origin, OriginResolver } from "types/open-next";
1+
import { InternalEvent, Origin } from "types/open-next";
22

3-
import { debug, error } from "../adapters/logger";
3+
import { debug } from "../adapters/logger";
44
import { createGenericHandler } from "../core/createGenericHandler";
55
import {
66
resolveIncrementalCache,
7+
resolveOriginResolver,
78
resolveQueue,
89
resolveTagCache,
910
} from "../core/resolve";
1011
import routingHandler from "../core/routingHandler";
1112

12-
const resolveOriginResolver = () => {
13-
const openNextParams = globalThis.openNextConfig.middleware;
14-
if (typeof openNextParams?.originResolver === "function") {
15-
return openNextParams.originResolver();
16-
}
17-
18-
return Promise.resolve<OriginResolver>({
19-
name: "env",
20-
resolve: async (_path: string) => {
21-
try {
22-
const origin = JSON.parse(
23-
process.env.OPEN_NEXT_ORIGIN ?? "{}",
24-
) as Record<string, Origin>;
25-
for (const [key, value] of Object.entries(
26-
globalThis.openNextConfig.functions ?? {},
27-
).filter(([key]) => key !== "default")) {
28-
if (
29-
value.patterns.some((pattern) => {
30-
// Convert cloudfront pattern to regex
31-
return new RegExp(
32-
// transform glob pattern to regex
33-
"/" +
34-
pattern
35-
.replace(/\*\*/g, "(.*)")
36-
.replace(/\*/g, "([^/]*)")
37-
.replace(/\//g, "\\/")
38-
.replace(/\?/g, "."),
39-
).test(_path);
40-
})
41-
) {
42-
debug("Using origin", key, value.patterns);
43-
return origin[key];
44-
}
45-
}
46-
if (_path.startsWith("/_next/image") && origin["imageOptimizer"]) {
47-
debug("Using origin", "imageOptimizer", _path);
48-
return origin["imageOptimizer"];
49-
}
50-
if (origin["default"]) {
51-
debug("Using default origin", origin["default"], _path);
52-
return origin["default"];
53-
}
54-
return false as const;
55-
} catch (e) {
56-
error("Error while resolving origin", e);
57-
return false as const;
58-
}
59-
},
60-
});
61-
};
62-
6313
globalThis.internalFetch = fetch;
6414

6515
const defaultHandler = async (internalEvent: InternalEvent) => {
66-
const originResolver = await resolveOriginResolver();
16+
const originResolver = await resolveOriginResolver(
17+
globalThis.openNextConfig.middleware?.originResolver,
18+
);
6719

6820
//#override includeCacheInMiddleware
6921
globalThis.tagCache = await resolveTagCache(

packages/open-next/src/core/resolve.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
InternalEvent,
77
InternalResult,
88
LazyLoadedOverride,
9+
OriginResolver,
910
OverrideOptions,
1011
Wrapper,
1112
} from "types/open-next.js";
@@ -106,3 +107,18 @@ export async function resolveImageLoader(
106107
return m_1.default;
107108
}
108109
}
110+
111+
/**
112+
* @returns
113+
* @__PURE__
114+
*/
115+
export async function resolveOriginResolver(
116+
originResolver?: LazyLoadedOverride<OriginResolver> | string,
117+
) {
118+
if (typeof originResolver === "function") {
119+
return originResolver();
120+
} else {
121+
const m_1 = await import("../overrides/originResolver/env.js");
122+
return m_1.default;
123+
}
124+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { Origin, OriginResolver } from "types/open-next";
2+
3+
import { debug, error } from "../../adapters/logger";
4+
5+
const envLoader: OriginResolver = {
6+
name: "env",
7+
resolve: async (_path: string) => {
8+
try {
9+
const origin = JSON.parse(process.env.OPEN_NEXT_ORIGIN ?? "{}") as Record<
10+
string,
11+
Origin
12+
>;
13+
for (const [key, value] of Object.entries(
14+
globalThis.openNextConfig.functions ?? {},
15+
).filter(([key]) => key !== "default")) {
16+
if (
17+
value.patterns.some((pattern) => {
18+
// Convert cloudfront pattern to regex
19+
return new RegExp(
20+
// transform glob pattern to regex
21+
"/" +
22+
pattern
23+
.replace(/\*\*/g, "(.*)")
24+
.replace(/\*/g, "([^/]*)")
25+
.replace(/\//g, "\\/")
26+
.replace(/\?/g, "."),
27+
).test(_path);
28+
})
29+
) {
30+
debug("Using origin", key, value.patterns);
31+
return origin[key];
32+
}
33+
}
34+
if (_path.startsWith("/_next/image") && origin["imageOptimizer"]) {
35+
debug("Using origin", "imageOptimizer", _path);
36+
return origin["imageOptimizer"];
37+
}
38+
if (origin["default"]) {
39+
debug("Using default origin", origin["default"], _path);
40+
return origin["default"];
41+
}
42+
return false as const;
43+
} catch (e) {
44+
error("Error while resolving origin", e);
45+
return false as const;
46+
}
47+
},
48+
};
49+
50+
export default envLoader;

packages/open-next/src/plugins/resolve.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import type {
55
DefaultOverrideOptions,
66
ImageLoader,
77
IncludedImageLoader,
8+
IncludedOriginResolver,
89
LazyLoadedOverride,
10+
OriginResolver,
911
OverrideOptions,
1012
} from "types/open-next";
1113

@@ -19,6 +21,9 @@ export interface IPluginSettings {
1921
queue?: OverrideOptions["queue"];
2022
incrementalCache?: OverrideOptions["incrementalCache"];
2123
imageLoader?: LazyLoadedOverride<ImageLoader> | IncludedImageLoader;
24+
originResolver?:
25+
| LazyLoadedOverride<OriginResolver>
26+
| IncludedOriginResolver;
2227
};
2328
fnName?: string;
2429
}
@@ -101,6 +106,15 @@ export function openNextResolvePlugin({
101106
)}.js`,
102107
);
103108
}
109+
if (overrides?.originResolver) {
110+
contents = contents.replace(
111+
"../overrides/originResolver/pattern-env.js",
112+
`../overrides/originResolver/${getOverrideOrDefault(
113+
overrides.originResolver,
114+
"pattern-env",
115+
)}.js`,
116+
);
117+
}
104118
return {
105119
contents,
106120
};

packages/open-next/src/types/open-next.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ export type IncludedTagCache = "dynamodb" | "dynamodb-lite";
139139

140140
export type IncludedImageLoader = "s3" | "host";
141141

142+
export type IncludedOriginResolver = "pattern-env";
143+
142144
export interface DefaultOverrideOptions<
143145
E extends BaseEventOrResult = InternalEvent,
144146
R extends BaseEventOrResult = InternalResult,
@@ -284,7 +286,9 @@ export interface OpenNextConfig {
284286
* OPEN_NEXT_ORIGIN should be a json stringified object with the key of the splitted function as key and the origin as value
285287
* @default "pattern-env"
286288
*/
287-
originResolver?: "pattern-env" | LazyLoadedOverride<OriginResolver>;
289+
originResolver?:
290+
| IncludedOriginResolver
291+
| LazyLoadedOverride<OriginResolver>;
288292
};
289293

290294
/**

0 commit comments

Comments
 (0)