A suite to track Project Diva score statistics and ratings / D4DJ event data.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
projectdivar/server/node_modules/to-array-buffer/index.js

62 lines
1.5 KiB

/**
* @module to-array-buffer
*/
'use strict'
var str2ab = require('string-to-arraybuffer')
var flat = require('flatten-vertex-data')
// var isBlob = require('is-blob')
module.exports = function toArrayBuffer (arg) {
//zero-length or undefined-like
if (!arg) return null
//array buffer
if (arg instanceof ArrayBuffer) return arg
//try to decode data-uri
if (typeof arg === 'string') {
return str2ab(arg)
}
// File & Blob
// if (isBlob(src) || (src instanceof global.File)) {
// FIXME: we cannot use it here bc FileReader is async
// }
//array buffer view: TypedArray, DataView, Buffer etc
if (ArrayBuffer.isView(arg)) {
// if byteOffset is not 0, return sub-reference (slice is the only way)
if (arg.byteOffset) {
return arg.buffer.slice(arg.byteOffset, arg.byteOffset + arg.byteLength)
}
return arg.buffer
}
//buffer/data nested: NDArray, ImageData etc.
//FIXME: NDArrays with custom data type may be invalid for this procedure
if (arg.buffer || arg.data || arg._data) {
var result = toArrayBuffer(arg.buffer || arg.data || arg._data)
return result
}
// detect if flat
if (Array.isArray(arg)) {
for (var i = 0; i < arg.length; i++) {
if (arg[i].length != null) {
arg = flat(arg)
break
}
}
}
//array-like or unknown
//consider Uint8Array knows how to treat the input
var result = new Uint8Array(arg)
if (!result.length) return null
return result.buffer
}