Created a first draft of this action. (#14)
All checks were successful
Auto Maintenance Cycle / pre-commit Autoupdate (push) Successful in 40s
All checks were successful
Auto Maintenance Cycle / pre-commit Autoupdate (push) Successful in 40s
Reviewed-on: #14 Co-authored-by: Philipp Horstenkamp <philipp@horstenkamp.de> Co-committed-by: Philipp Horstenkamp <philipp@horstenkamp.de>
This commit is contained in:
114
node_modules/@fastify/busboy/lib/utils/decodeText.js
generated
vendored
Normal file
114
node_modules/@fastify/busboy/lib/utils/decodeText.js
generated
vendored
Normal file
@ -0,0 +1,114 @@
|
||||
'use strict'
|
||||
|
||||
// Node has always utf-8
|
||||
const utf8Decoder = new TextDecoder('utf-8')
|
||||
const textDecoders = new Map([
|
||||
['utf-8', utf8Decoder],
|
||||
['utf8', utf8Decoder]
|
||||
])
|
||||
|
||||
function getDecoder (charset) {
|
||||
let lc
|
||||
while (true) {
|
||||
switch (charset) {
|
||||
case 'utf-8':
|
||||
case 'utf8':
|
||||
return decoders.utf8
|
||||
case 'latin1':
|
||||
case 'ascii': // TODO: Make these a separate, strict decoder?
|
||||
case 'us-ascii':
|
||||
case 'iso-8859-1':
|
||||
case 'iso8859-1':
|
||||
case 'iso88591':
|
||||
case 'iso_8859-1':
|
||||
case 'windows-1252':
|
||||
case 'iso_8859-1:1987':
|
||||
case 'cp1252':
|
||||
case 'x-cp1252':
|
||||
return decoders.latin1
|
||||
case 'utf16le':
|
||||
case 'utf-16le':
|
||||
case 'ucs2':
|
||||
case 'ucs-2':
|
||||
return decoders.utf16le
|
||||
case 'base64':
|
||||
return decoders.base64
|
||||
default:
|
||||
if (lc === undefined) {
|
||||
lc = true
|
||||
charset = charset.toLowerCase()
|
||||
continue
|
||||
}
|
||||
return decoders.other.bind(charset)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const decoders = {
|
||||
utf8: (data, sourceEncoding) => {
|
||||
if (data.length === 0) {
|
||||
return ''
|
||||
}
|
||||
if (typeof data === 'string') {
|
||||
data = Buffer.from(data, sourceEncoding)
|
||||
}
|
||||
return data.utf8Slice(0, data.length)
|
||||
},
|
||||
|
||||
latin1: (data, sourceEncoding) => {
|
||||
if (data.length === 0) {
|
||||
return ''
|
||||
}
|
||||
if (typeof data === 'string') {
|
||||
return data
|
||||
}
|
||||
return data.latin1Slice(0, data.length)
|
||||
},
|
||||
|
||||
utf16le: (data, sourceEncoding) => {
|
||||
if (data.length === 0) {
|
||||
return ''
|
||||
}
|
||||
if (typeof data === 'string') {
|
||||
data = Buffer.from(data, sourceEncoding)
|
||||
}
|
||||
return data.ucs2Slice(0, data.length)
|
||||
},
|
||||
|
||||
base64: (data, sourceEncoding) => {
|
||||
if (data.length === 0) {
|
||||
return ''
|
||||
}
|
||||
if (typeof data === 'string') {
|
||||
data = Buffer.from(data, sourceEncoding)
|
||||
}
|
||||
return data.base64Slice(0, data.length)
|
||||
},
|
||||
|
||||
other: (data, sourceEncoding) => {
|
||||
if (data.length === 0) {
|
||||
return ''
|
||||
}
|
||||
if (typeof data === 'string') {
|
||||
data = Buffer.from(data, sourceEncoding)
|
||||
}
|
||||
|
||||
if (textDecoders.has(this.toString())) {
|
||||
try {
|
||||
return textDecoders.get(this).decode(data)
|
||||
} catch (e) { }
|
||||
}
|
||||
return typeof data === 'string'
|
||||
? data
|
||||
: data.toString()
|
||||
}
|
||||
}
|
||||
|
||||
function decodeText (text, sourceEncoding, destEncoding) {
|
||||
if (text) {
|
||||
return getDecoder(destEncoding)(text, sourceEncoding)
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
module.exports = decodeText
|
Reference in New Issue
Block a user