You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
2.0 KiB
TypeScript

import { IRequest, IResponse } from './message'
export const isTextBody = (payload: IRequest | IResponse) => {
if (!payload) return false
if (!payload.header) return false
if (!payload.header['Content-Type']) return false
return /text|javascript|json|x-www-form-urlencoded|xml|form-data/.test(payload.header['Content-Type'].join(''))
}
export const getSize = (len: number) => {
if (!len) return '0'
if (isNaN(len)) return '0'
if (len <= 0) return '0'
if (len < 1024) return `${len} B`
if (len < 1024 * 1024) return `${(len / 1024).toFixed(2)} KB`
return `${(len / (1024 * 1024)).toFixed(2)} MB`
}
export const shallowEqual = (objA: any, objB: any) => {
if (objA === objB) return true
const keysA = Object.keys(objA)
const keysB = Object.keys(objB)
if (keysA.length !== keysB.length) return false
for (let i = 0; i < keysA.length; i++) {
const key = keysA[i]
if (objB[key] === undefined || objA[key] !== objB[key]) return false
}
return true
}
export const arrayBufferToBase64 = (buf: ArrayBuffer) => {
let binary = ''
const bytes = new Uint8Array(buf)
const len = bytes.byteLength
for (let i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i])
}
return btoa(binary)
}
export const bufHexView = (buf: ArrayBuffer) => {
let str = ''
const bytes = new Uint8Array(buf)
const len = bytes.byteLength
let viewStr = ''
str += '00000000: '
for (let i = 0; i < len; i++) {
str += bytes[i].toString(16).padStart(2, '0') + ' '
if (bytes[i] >= 32 && bytes[i] <= 126) {
viewStr += String.fromCharCode(bytes[i])
} else {
viewStr += '.'
}
if ((i + 1) % 16 === 0) {
str += ' ' + viewStr
viewStr = ''
str += `\n${(i + 1).toString(16).padStart(8, '0')}: `
} else if ((i + 1) % 8 === 0) {
str += ' '
}
}
// 补充最后一行的空白
if (viewStr.length > 0) {
for (let i = viewStr.length; i < 16; i++) {
str += ' ' + ' '
if ((i + 1) % 8 === 0) str += ' '
}
str += ' ' + viewStr
}
return str
}