7b2fb70a67
This PR introduces a way to use WASM in middlewares. Next.js will find all `.wasm` imports in middlewares and load them as `WebAssembly.Module` objects, which then can be later instantiated. The metadata will be stored in `middleware-manifest.json` ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have helpful link attached, see `contributing.md` ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have helpful link attached, see `contributing.md` ## Documentation / Examples - [ ] Make sure the linting passes by running `yarn lint`
21 lines
594 B
TypeScript
21 lines
594 B
TypeScript
import crypto from 'crypto'
|
|
|
|
export type WasmBinding = {
|
|
filePath: string
|
|
name: string
|
|
}
|
|
|
|
export default function MiddlewareWasmLoader(this: any, source: Buffer) {
|
|
const name = `wasm_${sha1(source)}`
|
|
const filePath = `server/middleware-chunks/${name}.wasm`
|
|
const binding: WasmBinding = { filePath, name }
|
|
this._module.buildInfo.nextWasmMiddlewareBinding = binding
|
|
this.emitFile(`/${filePath}`, source, null)
|
|
return `module.exports = ${name};`
|
|
}
|
|
|
|
export const raw = true
|
|
|
|
function sha1(source: string | Buffer) {
|
|
return crypto.createHash('sha1').update(source).digest('hex')
|
|
}
|