| | --- |
| | title: Dynamic code evaluation is not available in Proxy |
| | --- |
| |
|
| | |
| |
|
| | `eval()`, `new Function()` or compiling WASM binaries dynamically is not allowed in Proxy. |
| | Specifically, the following APIs are not supported: |
| |
|
| | - `eval()` |
| | - `new Function()` |
| | - `WebAssembly.compile` |
| | - `WebAssembly.instantiate` with [a buffer parameter](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/instantiate |
| |
|
| | |
| |
|
| | You can bundle your WASM binaries using `import`: |
| |
|
| | ```ts filename="proxy.ts" |
| | import { NextResponse } from 'next/server' |
| | import squareWasm from './square.wasm?module' |
| |
|
| | export default async function proxy() { |
| | const m = await WebAssembly.instantiate(squareWasm) |
| | const answer = m.exports.square(9) |
| |
|
| | const response = NextResponse.next() |
| | response.headers.set('x-square', answer.toString()) |
| | return response |
| | } |
| | ``` |
| |
|
| | In rare cases, your code could contain (or import) some dynamic code evaluation statements which _can not be reached at runtime_ and which can not be removed by tree-shaking. |
| | You can relax the check to allow specific files with your Proxy [configuration](/docs/pages/api-reference/edge |
| |
|
| | ```ts filename="pages/api/example.ts" |
| | export const config = { |
| | unstable_allowDynamic: [ |
| | '/lib/utilities.js', |
| | '**/node_modules/function-bind/**', |
| | ], |
| | } |
| | ``` |
| |
|
| | `unstable_allowDynamic` is a glob, or an array of globs, ignoring dynamic code evaluation for specific files. The globs are relative to your application root folder. |
| |
|
| | Be warned that if these statements are executed on the Edge, _they will throw and cause a runtime error_. |
| |
|