@loaders.gl/loader-utils
Version:
Framework-independent loaders for 3D graphics formats
41 lines (34 loc) • 1.2 kB
text/typescript
// loaders.gl
// SPDX-License-Identifier: MIT
// Copyright (c) vis.gl contributors
// Isolates Buffer references to ensure they are only bundled under Node.js (avoids big webpack polyfill)
// this file is selected by the package.json "browser" field).
/**
* Convert Buffer to ArrayBuffer
* Converts Node.js `Buffer` to `ArrayBuffer` (without triggering bundler to include Buffer polyfill on browser)
* @todo better data type
*/
export function toArrayBuffer(buffer) {
// TODO - per docs we should just be able to call buffer.buffer, but there are issues
if (Buffer.isBuffer(buffer)) {
const typedArray = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.length);
return typedArray.slice().buffer;
}
return buffer;
}
/**
* Convert (copy) ArrayBuffer to Buffer
*/
export function toBuffer(binaryData: ArrayBuffer | Buffer): Buffer {
if (Buffer.isBuffer(binaryData)) {
return binaryData;
}
if (ArrayBuffer.isView(binaryData)) {
binaryData = binaryData.buffer;
}
// TODO - move to loaders.gl/polyfills
if (typeof Buffer !== 'undefined' && binaryData instanceof ArrayBuffer) {
return Buffer.from(binaryData);
}
throw new Error('toBuffer');
}