async asset({ file, root, req, res, id, cacheKey }) {
		if (WRITE_CACHE.has(cacheKey)) {
			logAssetTransform(`<-- ${kl.cyan(formatPath(id))} [cached]`);
			return WRITE_CACHE.get(cacheKey);
		}

		const filename = resolve(root, file);
		const stats = await fs.stat(filename);

		if (stats.isDirectory()) {
			res.writeHead(403);
			res.end();
		}
		const ims = req.headers['if-modified-since'];
		if (ims && stats.mtime > new Date(ims)) {
			res.writeHead(304);
			res.end();
			return;
		}
		res.writeHead(200, {
			'Content-Length': stats.size,
			'Last-Modified': stats.mtime.toUTCString()
		});
		createReadStream(filename).pipe(res, { end: true });
	}
@type {{ [key: string]: (ctx: Context) => Result|Promise<Result> }}