|
|
|
@@ -0,0 +1,330 @@
|
|
|
|
|
import { createHash } from "node:crypto";
|
|
|
|
|
|
|
|
|
|
const ZIP_LOCAL_FILE_HEADER = 0x04034b50;
|
|
|
|
|
const ZIP_CENTRAL_DIRECTORY_HEADER = 0x02014b50;
|
|
|
|
|
const ZIP_END_OF_CENTRAL_DIRECTORY = 0x06054b50;
|
|
|
|
|
|
|
|
|
|
export const DOCX_FILENAME = "QuarterlyBrief.docx";
|
|
|
|
|
export const PPTX_FILENAME = "LaunchRoadmap.pptx";
|
|
|
|
|
export const XLSX_FILENAME = "RevenueWorkbook.xlsx";
|
|
|
|
|
export const DOCX_MIME = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
|
|
|
|
export const PPTX_MIME = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
|
|
|
|
|
export const XLSX_MIME = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
|
|
|
|
export const DOCX_SENTINEL = "DOCX sentinel fact: Northstar margin lift is 17.42 percent.";
|
|
|
|
|
export const PPTX_SENTINEL = "PPTX sentinel fact: Launch window opens on 2026-09-17.";
|
|
|
|
|
export const XLSX_SENTINEL = "XLSX sentinel fact: Northstar revenue is 1742.42.";
|
|
|
|
|
|
|
|
|
|
let crcTable = null;
|
|
|
|
|
|
|
|
|
|
function crc32(buffer) {
|
|
|
|
|
if (!crcTable) {
|
|
|
|
|
crcTable = new Uint32Array(256);
|
|
|
|
|
for (let n = 0; n < 256; n += 1) {
|
|
|
|
|
let c = n;
|
|
|
|
|
for (let k = 0; k < 8; k += 1) {
|
|
|
|
|
c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;
|
|
|
|
|
}
|
|
|
|
|
crcTable[n] = c >>> 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let crc = 0xffffffff;
|
|
|
|
|
for (const byte of buffer) crc = crcTable[(crc ^ byte) & 0xff] ^ (crc >>> 8);
|
|
|
|
|
return (crc ^ 0xffffffff) >>> 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function localFileHeader(nameBuffer, data, checksum) {
|
|
|
|
|
const header = Buffer.alloc(30);
|
|
|
|
|
header.writeUInt32LE(ZIP_LOCAL_FILE_HEADER, 0);
|
|
|
|
|
header.writeUInt16LE(20, 4);
|
|
|
|
|
header.writeUInt16LE(0, 6);
|
|
|
|
|
header.writeUInt16LE(0, 8);
|
|
|
|
|
header.writeUInt16LE(0, 10);
|
|
|
|
|
header.writeUInt16LE(0, 12);
|
|
|
|
|
header.writeUInt32LE(checksum, 14);
|
|
|
|
|
header.writeUInt32LE(data.length, 18);
|
|
|
|
|
header.writeUInt32LE(data.length, 22);
|
|
|
|
|
header.writeUInt16LE(nameBuffer.length, 26);
|
|
|
|
|
header.writeUInt16LE(0, 28);
|
|
|
|
|
return header;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function centralDirectoryHeader(nameBuffer, data, checksum, offset) {
|
|
|
|
|
const header = Buffer.alloc(46);
|
|
|
|
|
header.writeUInt32LE(ZIP_CENTRAL_DIRECTORY_HEADER, 0);
|
|
|
|
|
header.writeUInt16LE(20, 4);
|
|
|
|
|
header.writeUInt16LE(20, 6);
|
|
|
|
|
header.writeUInt16LE(0, 8);
|
|
|
|
|
header.writeUInt16LE(0, 10);
|
|
|
|
|
header.writeUInt16LE(0, 12);
|
|
|
|
|
header.writeUInt16LE(0, 14);
|
|
|
|
|
header.writeUInt32LE(checksum, 16);
|
|
|
|
|
header.writeUInt32LE(data.length, 20);
|
|
|
|
|
header.writeUInt32LE(data.length, 24);
|
|
|
|
|
header.writeUInt16LE(nameBuffer.length, 28);
|
|
|
|
|
header.writeUInt16LE(0, 30);
|
|
|
|
|
header.writeUInt16LE(0, 32);
|
|
|
|
|
header.writeUInt16LE(0, 34);
|
|
|
|
|
header.writeUInt16LE(0, 36);
|
|
|
|
|
header.writeUInt32LE(0, 38);
|
|
|
|
|
header.writeUInt32LE(offset, 42);
|
|
|
|
|
return header;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function endOfCentralDirectory(entryCount, centralSize, centralOffset) {
|
|
|
|
|
const header = Buffer.alloc(22);
|
|
|
|
|
header.writeUInt32LE(ZIP_END_OF_CENTRAL_DIRECTORY, 0);
|
|
|
|
|
header.writeUInt16LE(0, 4);
|
|
|
|
|
header.writeUInt16LE(0, 6);
|
|
|
|
|
header.writeUInt16LE(entryCount, 8);
|
|
|
|
|
header.writeUInt16LE(entryCount, 10);
|
|
|
|
|
header.writeUInt32LE(centralSize, 12);
|
|
|
|
|
header.writeUInt32LE(centralOffset, 16);
|
|
|
|
|
header.writeUInt16LE(0, 20);
|
|
|
|
|
return header;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function xml(strings, ...values) {
|
|
|
|
|
return strings.reduce((out, part, index) => `${out}${part}${values[index] ?? ""}`, "");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function writeZip(files) {
|
|
|
|
|
const chunks = [];
|
|
|
|
|
const central = [];
|
|
|
|
|
let offset = 0;
|
|
|
|
|
|
|
|
|
|
for (const file of files) {
|
|
|
|
|
const nameBuffer = Buffer.from(file.name, "utf8");
|
|
|
|
|
const data = Buffer.isBuffer(file.data) ? file.data : Buffer.from(file.data, "utf8");
|
|
|
|
|
const checksum = crc32(data);
|
|
|
|
|
const local = localFileHeader(nameBuffer, data, checksum);
|
|
|
|
|
chunks.push(local, nameBuffer, data);
|
|
|
|
|
central.push(centralDirectoryHeader(nameBuffer, data, checksum, offset), nameBuffer);
|
|
|
|
|
offset += local.length + nameBuffer.length + data.length;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const centralOffset = offset;
|
|
|
|
|
const centralSize = central.reduce((sum, chunk) => sum + chunk.length, 0);
|
|
|
|
|
chunks.push(...central, endOfCentralDirectory(files.length, centralSize, centralOffset));
|
|
|
|
|
return Buffer.concat(chunks);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function sha256(buffer) {
|
|
|
|
|
return createHash("sha256").update(buffer).digest("hex");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function fixture(name, mime, sentinels, buffer) {
|
|
|
|
|
return {
|
|
|
|
|
filename: name,
|
|
|
|
|
mime,
|
|
|
|
|
size: buffer.byteLength,
|
|
|
|
|
sha256: sha256(buffer),
|
|
|
|
|
sentinels,
|
|
|
|
|
dataBase64: buffer.toString("base64"),
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const docx = writeZip([
|
|
|
|
|
{
|
|
|
|
|
name: "[Content_Types].xml",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
|
|
|
|
|
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
|
|
|
|
|
<Default Extension="xml" ContentType="application/xml"/>
|
|
|
|
|
<Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/>
|
|
|
|
|
<Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/>
|
|
|
|
|
<Override PartName="/word/document.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/>
|
|
|
|
|
</Types>`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "_rels/.rels",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
|
|
|
|
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/>
|
|
|
|
|
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
|
|
|
|
|
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
|
|
|
|
|
</Relationships>`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "docProps/core.xml",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
|
|
|
<dc:title>Quarterly Brief</dc:title>
|
|
|
|
|
<dc:creator>OpenWork Eval</dc:creator>
|
|
|
|
|
<dcterms:created xsi:type="dcterms:W3CDTF">2026-01-01T00:00:00Z</dcterms:created>
|
|
|
|
|
</cp:coreProperties>`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "docProps/app.xml",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">
|
|
|
|
|
<Application>OpenWork Eval</Application>
|
|
|
|
|
</Properties>`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "word/document.xml",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
|
|
|
|
|
<w:body>
|
|
|
|
|
<w:p><w:r><w:t>Quarterly brief fixture.</w:t></w:r></w:p>
|
|
|
|
|
<w:p><w:r><w:t>${DOCX_SENTINEL}</w:t></w:r></w:p>
|
|
|
|
|
<w:sectPr><w:pgSz w:w="12240" w:h="15840"/><w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440"/></w:sectPr>
|
|
|
|
|
</w:body>
|
|
|
|
|
</w:document>`,
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
const pptx = writeZip([
|
|
|
|
|
{
|
|
|
|
|
name: "[Content_Types].xml",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
|
|
|
|
|
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
|
|
|
|
|
<Default Extension="xml" ContentType="application/xml"/>
|
|
|
|
|
<Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/>
|
|
|
|
|
<Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/>
|
|
|
|
|
<Override PartName="/ppt/presentation.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml"/>
|
|
|
|
|
<Override PartName="/ppt/slides/slide1.xml" ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml"/>
|
|
|
|
|
</Types>`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "_rels/.rels",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
|
|
|
|
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="ppt/presentation.xml"/>
|
|
|
|
|
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
|
|
|
|
|
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
|
|
|
|
|
</Relationships>`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "docProps/core.xml",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
|
|
|
<dc:title>Launch Roadmap</dc:title>
|
|
|
|
|
<dc:creator>OpenWork Eval</dc:creator>
|
|
|
|
|
<dcterms:created xsi:type="dcterms:W3CDTF">2026-01-01T00:00:00Z</dcterms:created>
|
|
|
|
|
</cp:coreProperties>`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "docProps/app.xml",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">
|
|
|
|
|
<Application>OpenWork Eval</Application>
|
|
|
|
|
<PresentationFormat>On-screen Show (16:9)</PresentationFormat>
|
|
|
|
|
<Slides>1</Slides>
|
|
|
|
|
</Properties>`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "ppt/presentation.xml",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<p:presentation xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
|
|
|
|
|
<p:sldIdLst><p:sldId id="256" r:id="rId1"/></p:sldIdLst>
|
|
|
|
|
<p:sldSz cx="12192000" cy="6858000" type="screen16x9"/>
|
|
|
|
|
<p:notesSz cx="6858000" cy="9144000"/>
|
|
|
|
|
</p:presentation>`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "ppt/_rels/presentation.xml.rels",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
|
|
|
|
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide" Target="slides/slide1.xml"/>
|
|
|
|
|
</Relationships>`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "ppt/slides/slide1.xml",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
|
|
|
|
|
<p:cSld>
|
|
|
|
|
<p:spTree>
|
|
|
|
|
<p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>
|
|
|
|
|
<p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr>
|
|
|
|
|
<p:sp>
|
|
|
|
|
<p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr/><p:nvPr/></p:nvSpPr>
|
|
|
|
|
<p:spPr/>
|
|
|
|
|
<p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:t>${PPTX_SENTINEL}</a:t></a:r></a:p></p:txBody>
|
|
|
|
|
</p:sp>
|
|
|
|
|
</p:spTree>
|
|
|
|
|
</p:cSld>
|
|
|
|
|
</p:sld>`,
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
const xlsx = writeZip([
|
|
|
|
|
{
|
|
|
|
|
name: "[Content_Types].xml",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
|
|
|
|
|
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
|
|
|
|
|
<Default Extension="xml" ContentType="application/xml"/>
|
|
|
|
|
<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>
|
|
|
|
|
<Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
|
|
|
|
|
<Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/>
|
|
|
|
|
<Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>
|
|
|
|
|
</Types>`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "_rels/.rels",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
|
|
|
|
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
|
|
|
|
|
</Relationships>`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "xl/workbook.xml",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
|
|
|
|
|
<sheets><sheet name="Summary" sheetId="1" r:id="rId1"/></sheets>
|
|
|
|
|
</workbook>`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "xl/_rels/workbook.xml.rels",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
|
|
|
|
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>
|
|
|
|
|
</Relationships>`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "xl/sharedStrings.xml",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="3" uniqueCount="3">
|
|
|
|
|
<si><t>${XLSX_SENTINEL}</t></si>
|
|
|
|
|
<si><t>Northstar Revenue</t></si>
|
|
|
|
|
<si><r><t>EM</t></r><r><t>EA</t></r></si>
|
|
|
|
|
</sst>`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "xl/styles.xml",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
|
|
|
|
|
<numFmts count="1"><numFmt numFmtId="164" formatCode="$#,##0.00"/></numFmts>
|
|
|
|
|
<cellXfs count="2"><xf numFmtId="0"/><xf numFmtId="164" applyNumberFormat="1"/></cellXfs>
|
|
|
|
|
</styleSheet>`,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "xl/worksheets/sheet1.xml",
|
|
|
|
|
data: xml`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
|
|
|
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
|
|
|
|
|
<dimension ref="A1:D3"/>
|
|
|
|
|
<sheetData>
|
|
|
|
|
<row r="1"><c r="A1" t="s"><v>0</v></c></row>
|
|
|
|
|
<row r="2"><c r="A2" t="s"><v>1</v></c><c r="B2" t="s"><v>2</v></c><c r="C2" s="1"><v>1742.42</v></c><c r="D2" s="1"><f>SUM(C2:C3)</f><v>3484.84</v></c></row>
|
|
|
|
|
<row r="3"><c r="C3" s="1"><v>1742.42</v></c></row>
|
|
|
|
|
</sheetData>
|
|
|
|
|
<mergeCells count="1"><mergeCell ref="A1:D1"/></mergeCells>
|
|
|
|
|
</worksheet>`,
|
|
|
|
|
},
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
export const OFFICE_FIXTURES = {
|
|
|
|
|
docx: fixture(DOCX_FILENAME, DOCX_MIME, [DOCX_SENTINEL], docx),
|
|
|
|
|
pptx: fixture(PPTX_FILENAME, PPTX_MIME, [PPTX_SENTINEL], pptx),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const XLSX_FIXTURE = fixture(XLSX_FILENAME, XLSX_MIME, [XLSX_SENTINEL, "Northstar Revenue", "1742.42", "SUM(C2:C3)", "$#,##0.00", "A1:D1"], xlsx);
|
|
|
|
|
|
|
|
|
|
export function fixtureBytes(kind) {
|
|
|
|
|
if (kind === "docx") return Buffer.from(OFFICE_FIXTURES.docx.dataBase64, "base64");
|
|
|
|
|
if (kind === "pptx") return Buffer.from(OFFICE_FIXTURES.pptx.dataBase64, "base64");
|
|
|
|
|
if (kind === "xlsx") return Buffer.from(XLSX_FIXTURE.dataBase64, "base64");
|
|
|
|
|
throw new Error(`Unknown fixture kind: ${kind}`);
|
|
|
|
|
}
|