Skip to content

Commit 215885f

Browse files
authored
docs(overrides): add Asset Resolver (#168)
1 parent f8dbb7e commit 215885f

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

pages/aws/config/custom_overrides.mdx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,3 +417,21 @@ export default config;
417417
```
418418

419419
[Included](https://github.com/opennextjs/opennextjs-aws/tree/main/packages/open-next/src/overrides/proxyExternalRequest) ones are `'fetch' | 'node' | 'dummy'`
420+
421+
## Custom Asset Resolver
422+
423+
This is used by OpenNext to resolve static assets. You can read more about it [here](/aws/config/overrides/asset_resolver). To have a custom override for the Asset Resolver, you need an `open-next.config.ts` with this:
424+
425+
```ts
426+
import type { OpenNextConfig } from "@opennextjs/aws/types/open-next.js";
427+
const config = {
428+
default: {},
429+
middleware: {
430+
assetResolver: import("./customAssetResolver").then((mod) => mod.default),
431+
},
432+
} satisfies OpenNextConfig;
433+
434+
export default config;
435+
```
436+
437+
[Included](https://github.com/opennextjs/opennextjs-aws/tree/main/packages/open-next/src/overrides/assetResolver) one is `'dummy'`

pages/aws/config/overrides/_meta.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
"proxy_external_request": "External Request Proxy",
99
"origin_resolver": "Origin Resolver",
1010
"invoke_function": "Invoke Function for the warmer",
11-
"automatic_cdn_invalidation": "Automatic CDN Invalidation"
11+
"automatic_cdn_invalidation": "Automatic CDN Invalidation",
12+
"asset_resolver": "Asset Resolver"
1213
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
Available since `@opennextjs/aws` 3.7.0
2+
3+
This override is used by OpenNext to serve [static assets](https://nextjs.org/docs/app/api-reference/file-conventions/public-folder) from the routing layer.
4+
5+
It is not enabled by default as the assumption is that assets are served before reaching the Open Next server.
6+
7+
When assets are not served before the Open Next server, you can create an Asset Resolver to serve them. It will be invoked [after the `beforeFiles` (`rewrites`) from `next.config.ts`](https://nextjs.org/docs/app/api-reference/file-conventions/middleware#execution-order).
8+
9+
## Implementation
10+
11+
An Asset Resolver should implement:
12+
13+
```ts
14+
export interface AssetResolver {
15+
name: string;
16+
17+
maybeGetAssetResult?: (event: InternalEvent) => Promise<InternalResult | undefined> | undefined;
18+
}
19+
```
20+
21+
`maybeGetAssetResult` is invoked with the `InternalEvent` and should return a `Promise<InternalResult>` to serve an asset when the incoming event matches one. When it returns `Promise<undefined>` or `undefined`, the routing process keeps going to try and match Next routes.
22+
23+
## Included Asset Resolver
24+
25+
### dummy
26+
27+
The dummy `AssetResolver` does nothing so it never serves assets. It is the default implementation.

0 commit comments

Comments
 (0)