modern-netcdf
Version:
Modern NetCDF file reader and utilities
39 lines (36 loc) • 1.2 kB
JavaScript
// Browser WebWorker implementation for Modern NetCDF
// This file uses ES-module syntax so bundlers can tree-shake it away for Node builds.
import { NetCDFReader } from '..';
let reader = null;
self.onmessage = async (e) => {
const { id, cmd, payload } = e.data;
try {
switch (cmd) {
case 'open': {
const { source, options } = payload;
reader = await NetCDFReader.open(source, options);
self.postMessage({ id, result: 'ok' });
break;
}
case 'getData': {
if (!reader) throw new Error('Reader not open');
const { variable, slice } = payload;
const data = await reader.getData(variable, slice);
// Transfer, not copy, the underlying ArrayBuffer when possible.
const transfer = ArrayBuffer.isView(data) ? [data.buffer] : [];
self.postMessage({ id, result: data }, transfer);
break;
}
case 'close': {
if (reader) reader.close();
reader = null;
self.postMessage({ id, result: 'closed' });
break;
}
default:
throw new Error('Unknown command');
}
} catch (err) {
self.postMessage({ id, error: err.message });
}
};