UNPKG

@phi-ag/rvt

Version:

Parse Revit file format

38 lines (37 loc) 1.15 kB
const findMarker = (data) => { const imageMarker = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a]; for (let i = 0; i < data.length - 6; i++) { if (data[i] === imageMarker[0] && data[i + 1] === imageMarker[1] && data[i + 2] === imageMarker[2] && data[i + 3] === imageMarker[3] && data[i + 4] === imageMarker[4] && data[i + 5] === imageMarker[5]) { return i; } } }; export const parsePreview = (data) => { const marker = findMarker(data); if (!marker) throw Error("Failed to find preview image marker"); return new Blob([data.subarray(marker)], { type: "image/png" }); }; export const thumbnail = async (cfb) => { const entry = cfb.findEntry("RevitPreview4.0"); if (!entry) throw Error("RevitPreview4.0 not found"); return parsePreview(await cfb.entryData(entry)); }; export const tryThumbnail = async (cfb) => { try { return { ok: true, data: await thumbnail(cfb) }; } catch (e) { if (e instanceof Error) return { ok: false, error: e.message }; throw e; } };