sistema creado v0.5.0
Some checks failed
build-and-push / deploy (push) Has been skipped
build-and-push / build (push) Failing after 6s

This commit is contained in:
2025-05-14 16:10:41 -06:00
parent b5e40cf4ac
commit 745168cf51
193 changed files with 7267 additions and 8789 deletions

View File

@@ -1,26 +1,3 @@
v2.1.0 / 2025-03-05
==================
* deps:
* use caret notation for dependency versions
* encodeurl@^2.0.0
* debug@^4.4.0
* remove `ServerResponse.headersSent` support check
* remove setImmediate support check
* update test dependencies
* remove unnecessary devDependency `safe-buffer`
* remove `unpipe` package and use native `unpipe()` method
* remove unnecessary devDependency `readable-stream`
* refactor: use object spread to copy error headers
* refactor: use replaceAll instead of replace with a regex
* refactor: replace setHeaders function with optimized inline header setting
v2.0.0 / 2024-09-02
==================
* drop support for node <18
* ignore status message for HTTP/2 (#53)
v1.3.1 / 2024-09-11
==================

View File

@@ -17,12 +17,20 @@ var escapeHtml = require('escape-html')
var onFinished = require('on-finished')
var parseUrl = require('parseurl')
var statuses = require('statuses')
var unpipe = require('unpipe')
/**
* Module variables.
* @private
*/
var DOUBLE_SPACE_REGEXP = /\x20{2}/g
var NEWLINE_REGEXP = /\n/g
/* istanbul ignore next */
var defer = typeof setImmediate === 'function'
? setImmediate
: function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }
var isFinished = onFinished.isFinished
/**
@@ -34,8 +42,8 @@ var isFinished = onFinished.isFinished
function createHtmlDocument (message) {
var body = escapeHtml(message)
.replaceAll('\n', '<br>')
.replaceAll(' ', ' &nbsp;')
.replace(NEWLINE_REGEXP, '<br>')
.replace(DOUBLE_SPACE_REGEXP, ' &nbsp;')
return '<!DOCTYPE html>\n' +
'<html lang="en">\n' +
@@ -81,7 +89,7 @@ function finalhandler (req, res, options) {
var status
// ignore 404 on in-flight response
if (!err && res.headersSent) {
if (!err && headersSent(res)) {
debug('cannot 404 after headers sent')
return
}
@@ -111,11 +119,11 @@ function finalhandler (req, res, options) {
// schedule onerror callback
if (err && onerror) {
setImmediate(onerror, err, req, res)
defer(onerror, err, req, res)
}
// cannot actually respond
if (res.headersSent) {
if (headersSent(res)) {
debug('cannot %d after headers sent', status)
if (req.socket) {
req.socket.destroy()
@@ -141,7 +149,15 @@ function getErrorHeaders (err) {
return undefined
}
return { ...err.headers }
var headers = Object.create(null)
var keys = Object.keys(err.headers)
for (var i = 0; i < keys.length; i++) {
var key = keys[i]
headers[key] = err.headers[key]
}
return headers
}
/**
@@ -230,6 +246,20 @@ function getResponseStatusCode (res) {
return status
}
/**
* Determine if the response headers have been sent.
*
* @param {object} res
* @returns {boolean}
* @private
*/
function headersSent (res) {
return typeof res.headersSent !== 'boolean'
? Boolean(res._header)
: res.headersSent
}
/**
* Send response.
*
@@ -259,9 +289,7 @@ function send (req, res, status, headers, message) {
res.removeHeader('Content-Range')
// response headers
for (const [key, value] of Object.entries(headers ?? {})) {
res.setHeader(key, value)
}
setHeaders(res, headers)
// security headers
res.setHeader('Content-Security-Policy', "default-src 'none'")
@@ -285,9 +313,29 @@ function send (req, res, status, headers, message) {
}
// unpipe everything from the request
req.unpipe()
unpipe(req)
// flush the request
onFinished(req, write)
req.resume()
}
/**
* Set response headers from an object.
*
* @param {OutgoingMessage} res
* @param {object} headers
* @private
*/
function setHeaders (res, headers) {
if (!headers) {
return
}
var keys = Object.keys(headers)
for (var i = 0; i < keys.length; i++) {
var key = keys[i]
res.setHeader(key, headers[key])
}
}

View File

@@ -1,17 +1,18 @@
{
"name": "finalhandler",
"description": "Node.js final http responder",
"version": "2.1.0",
"version": "1.3.1",
"author": "Douglas Christopher Wilson <doug@somethingdoug.com>",
"license": "MIT",
"repository": "pillarjs/finalhandler",
"dependencies": {
"debug": "^4.4.0",
"encodeurl": "^2.0.0",
"escape-html": "^1.0.3",
"on-finished": "^2.4.1",
"parseurl": "^1.3.3",
"statuses": "^2.0.1"
"debug": "2.6.9",
"encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"statuses": "2.0.1",
"unpipe": "~1.0.0"
},
"devDependencies": {
"eslint": "7.32.0",
@@ -21,13 +22,16 @@
"eslint-plugin-node": "11.1.0",
"eslint-plugin-promise": "5.2.0",
"eslint-plugin-standard": "4.1.0",
"mocha": "^11.0.1",
"nyc": "^17.1.0",
"supertest": "^7.0.0"
"mocha": "10.0.0",
"nyc": "15.1.0",
"readable-stream": "2.3.6",
"safe-buffer": "5.2.1",
"supertest": "6.2.4"
},
"files": [
"LICENSE",
"HISTORY.md",
"SECURITY.md",
"index.js"
],
"engines": {