66 lines
1.6 KiB
TypeScript
66 lines
1.6 KiB
TypeScript
const withNativeArrayBuffer: boolean = typeof ArrayBuffer === "function"
|
|
|
|
const isView = (obj: any) => {
|
|
return typeof ArrayBuffer.isView === "function"
|
|
? ArrayBuffer.isView(obj)
|
|
: obj.buffer instanceof ArrayBuffer
|
|
}
|
|
|
|
const toString = Object.prototype.toString
|
|
const withNativeBlob = false
|
|
// typeof Blob === "function" ||
|
|
// (typeof Blob !== "undefined" &&
|
|
// toString.call(Blob) === "[object BlobConstructor]")
|
|
const withNativeFile = false
|
|
// typeof File === "function" ||
|
|
// (typeof File !== "undefined" &&
|
|
// toString.call(File) === "[object FileConstructor]")
|
|
|
|
/**
|
|
* Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.
|
|
*
|
|
* @private
|
|
*/
|
|
|
|
export function isBinary(obj: any) {
|
|
return (
|
|
(withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj)))
|
|
// || (withNativeBlob && obj instanceof Blob) || (withNativeFile && obj instanceof File)
|
|
)
|
|
}
|
|
|
|
export function hasBinary(obj: any, toJSON?: boolean) {
|
|
if (!obj || typeof obj !== "object") {
|
|
return false
|
|
}
|
|
|
|
if (Array.isArray(obj)) {
|
|
for (let i = 0, l = obj.length; i < l; i++) {
|
|
if (hasBinary(obj[i])) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
if (isBinary(obj)) {
|
|
return true
|
|
}
|
|
|
|
if (
|
|
obj.toJSON &&
|
|
typeof obj.toJSON === "function" &&
|
|
arguments.length === 1
|
|
) {
|
|
return hasBinary(obj.toJSON(), true)
|
|
}
|
|
|
|
for (const key in obj) {
|
|
if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|