licelfile
Version:
A Bun package for reading licel files (from lidar transient recorder)
58 lines (51 loc) • 2.28 kB
text/typescript
import { loadLicelFileFromArrayBuffer, loadLicelFile } from "./licelfile";
import { type ILicelFile, type ILicelPack } from "./licelTypes";
import { ZipReader, BlobReader, TextWriter, Uint8ArrayWriter } from '@zip.js/zip.js';
/**
* Загружает пакет Licel из файлов.
* @param filePaths - Массив путей к файлам.
* @returns Объект ILicelPack, содержащий время начала измерения и данные измерения.
*/
export async function loadLicelPack(filePaths: string[]): Promise<ILicelPack> {
const data = new Map<string, ILicelFile>();
let startTime: Date | null = null;
for (const path of filePaths) {
const licelFile = await loadLicelFile(path);
data.set(path, licelFile);
if (!startTime || licelFile.measurementStartTime < startTime) {
startTime = licelFile.measurementStartTime;
}
}
return {
startTime: startTime!,
data: data,
};
}
/**
* Загружает пакет Licel из zip-файла.
* @param zipFile - Путь к zip-файлу.
* @returns Объект ILicelPack, содержащий время начала измерения и данные измерения.
*/
export async function loadLicelPackFromZip(zipFile: string): Promise<ILicelPack> {
const zipBlob = new Blob([await Bun.file(zipFile).arrayBuffer()]);
const zipReader = new ZipReader(new BlobReader(zipBlob));
const entries = await zipReader.getEntries();
const data = new Map<string, ILicelFile>();
let startTime: Date | null = null;
for (const entry of entries) {
if (!entry.filename.startsWith("b")) continue
const writer = new Uint8ArrayWriter();
const buffer = await entry.getData!(writer);
const arrayBuffer = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength) as ArrayBuffer;
const licelFile = await loadLicelFileFromArrayBuffer(arrayBuffer);
data.set(entry.filename, licelFile);
if (!startTime || licelFile.measurementStartTime < startTime) {
startTime = licelFile.measurementStartTime;
}
}
await zipReader.close();
return {
startTime: startTime!,
data: data,
};
}