asarfuckery/electronasar/canary/common/buffer-utils.js

67 lines
1.4 KiB
JavaScript
Raw Normal View History

2019-06-20 21:19:08 +00:00
'use strict'
2019-06-16 20:19:06 +00:00
// Note: Don't use destructuring assignment for `Buffer`, or we'll hit a
// browserify bug that makes the statement invalid, throwing an error in
// sandboxed renderer.
2019-06-20 21:19:08 +00:00
const Buffer = require('buffer').Buffer
2019-06-16 20:19:06 +00:00
const typedArrays = {
2019-06-20 21:19:08 +00:00
Buffer,
ArrayBuffer,
Int8Array,
Uint8Array,
Uint8ClampedArray,
Int16Array,
Uint16Array,
Int32Array,
Uint32Array,
Float32Array,
Float64Array
2019-06-16 20:19:06 +00:00
}
2019-06-20 21:19:08 +00:00
function getType (value) {
for (const type of Object.keys(typedArrays)) {
if (value instanceof typedArrays[type]) {
return type
2019-06-16 20:19:06 +00:00
}
2019-06-20 21:19:08 +00:00
}
return null
2019-06-16 20:19:06 +00:00
}
2019-06-20 21:19:08 +00:00
function getBuffer (value) {
if (value instanceof Buffer) {
return value
} else if (value instanceof ArrayBuffer) {
return Buffer.from(value)
} else {
return Buffer.from(value.buffer, value.byteOffset, value.byteLength)
}
}
2019-06-16 20:19:06 +00:00
exports.isBuffer = function (value) {
2019-06-20 21:19:08 +00:00
return ArrayBuffer.isView(value) || value instanceof ArrayBuffer
}
2019-06-16 20:19:06 +00:00
exports.bufferToMeta = function (value) {
2019-06-20 21:19:08 +00:00
return {
type: getType(value),
data: getBuffer(value),
length: value.length
}
}
2019-06-16 20:19:06 +00:00
exports.metaToBuffer = function (value) {
2019-06-20 21:19:08 +00:00
const constructor = typedArrays[value.type]
const data = getBuffer(value.data)
if (constructor === Buffer) {
return data
} else if (constructor === ArrayBuffer) {
return data.buffer
} else if (constructor) {
return new constructor(data.buffer, data.byteOffset, value.length)
} else {
return data
}
}