UNPKG

veloze

Version:

A modern and fast express-like webserver for the web

66 lines (60 loc) 1.66 kB
import { bodyParser } from './bodyParser.js' import { cacheControlByMethod } from './cacheControl.js' import { cookieParser } from './cookieParser.js' import { contentSec, contentSecJson } from './contentSec.js' import { queryParser } from './queryParser.js' import { requestId } from './requestId.js' import { send } from './send.js' /** * @typedef {import('../types.js').Handler} Handler */ /** * @typedef {object} PresetOptions * @property {number|string} limit body-parser limit * @property {import('./contentSec.js').CspMiddlewareOptions} cspOpts security header options * @property {import('./cacheControl.js').CacheControlDirectivesByMethod} cacheControlOpts} * @property {import('./requestId.js').RequestIdOptions} requestIdOpts} */ /** * Preset for endpoints rendering HTML pages * @param {PresetOptions} [options] * @return {Handler[]} */ export const presetHtml = (options) => { const { limit = '100kb', cspOpts, cacheControlOpts, requestIdOpts } = options || {} return [ requestId(requestIdOpts), contentSec(cspOpts), cacheControlByMethod(cacheControlOpts), send, queryParser, cookieParser, bodyParser.urlEncoded({ limit }) ] } /** * Preset for REST JSON based endpoints * @param {PresetOptions} [options] * @return {Handler[]} */ export const presetJson = (options) => { const { limit = '100kb', cspOpts, cacheControlOpts = { noStore: true }, requestIdOpts } = options || {} return [ requestId(requestIdOpts), contentSecJson(cspOpts), cacheControlByMethod(cacheControlOpts), send, queryParser, bodyParser.json({ limit }) ] }