@bilig/xlsx 0.164.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -0
- package/dist/address.d.ts +15 -0
- package/dist/address.js +82 -0
- package/dist/address.js.map +1 -0
- package/dist/external-workbook-types.d.ts +44 -0
- package/dist/external-workbook-types.js +12 -0
- package/dist/external-workbook-types.js.map +1 -0
- package/dist/file-source.d.ts +10 -0
- package/dist/file-source.js +76 -0
- package/dist/file-source.js.map +1 -0
- package/dist/formula-cache-reader.d.ts +30 -0
- package/dist/formula-cache-reader.js +350 -0
- package/dist/formula-cache-reader.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/simple-workbook-writer.d.ts +114 -0
- package/dist/simple-workbook-writer.js +621 -0
- package/dist/simple-workbook-writer.js.map +1 -0
- package/dist/source-preserving-literal-patches.d.ts +43 -0
- package/dist/source-preserving-literal-patches.js +615 -0
- package/dist/source-preserving-literal-patches.js.map +1 -0
- package/dist/source-preserving-zip.d.ts +25 -0
- package/dist/source-preserving-zip.js +341 -0
- package/dist/source-preserving-zip.js.map +1 -0
- package/dist/streaming-native-cell-arena.d.ts +57 -0
- package/dist/streaming-native-cell-arena.js +233 -0
- package/dist/streaming-native-cell-arena.js.map +1 -0
- package/dist/streaming-native-external-cache.d.ts +13 -0
- package/dist/streaming-native-external-cache.js +753 -0
- package/dist/streaming-native-external-cache.js.map +1 -0
- package/dist/streaming-native-inspect.d.ts +42 -0
- package/dist/streaming-native-inspect.js +297 -0
- package/dist/streaming-native-inspect.js.map +1 -0
- package/dist/streaming-native-lookup-wasm.d.ts +13 -0
- package/dist/streaming-native-lookup-wasm.js +250 -0
- package/dist/streaming-native-lookup-wasm.js.map +1 -0
- package/dist/streaming-native-recalc-evaluator.d.ts +17 -0
- package/dist/streaming-native-recalc-evaluator.js +743 -0
- package/dist/streaming-native-recalc-evaluator.js.map +1 -0
- package/dist/streaming-native-recalc.d.ts +97 -0
- package/dist/streaming-native-recalc.js +652 -0
- package/dist/streaming-native-recalc.js.map +1 -0
- package/dist/streaming-native-row-chain-conditionals.d.ts +8 -0
- package/dist/streaming-native-row-chain-conditionals.js +385 -0
- package/dist/streaming-native-row-chain-conditionals.js.map +1 -0
- package/dist/streaming-native-row-chain-dependencies.d.ts +17 -0
- package/dist/streaming-native-row-chain-dependencies.js +365 -0
- package/dist/streaming-native-row-chain-dependencies.js.map +1 -0
- package/dist/streaming-native-row-chain-references.d.ts +3 -0
- package/dist/streaming-native-row-chain-references.js +36 -0
- package/dist/streaming-native-row-chain-references.js.map +1 -0
- package/dist/streaming-native-row-chain-wasm.d.ts +56 -0
- package/dist/streaming-native-row-chain-wasm.js +546 -0
- package/dist/streaming-native-row-chain-wasm.js.map +1 -0
- package/dist/streaming-native-text.d.ts +2 -0
- package/dist/streaming-native-text.js +14 -0
- package/dist/streaming-native-text.js.map +1 -0
- package/dist/streaming-native-workbook-core.d.ts +47 -0
- package/dist/streaming-native-workbook-core.js +110 -0
- package/dist/streaming-native-workbook-core.js.map +1 -0
- package/dist/targeted-cell-reader.d.ts +11 -0
- package/dist/targeted-cell-reader.js +92 -0
- package/dist/targeted-cell-reader.js.map +1 -0
- package/dist/workbook-cell-reader.d.ts +29 -0
- package/dist/workbook-cell-reader.js +200 -0
- package/dist/workbook-cell-reader.js.map +1 -0
- package/dist/workbook-compatibility-report.d.ts +101 -0
- package/dist/workbook-compatibility-report.js +654 -0
- package/dist/workbook-compatibility-report.js.map +1 -0
- package/dist/workbook-sheet-paths.d.ts +8 -0
- package/dist/workbook-sheet-paths.js +79 -0
- package/dist/workbook-sheet-paths.js.map +1 -0
- package/dist/xml-part-patch.d.ts +12 -0
- package/dist/xml-part-patch.js +45 -0
- package/dist/xml-part-patch.js.map +1 -0
- package/dist/xml.d.ts +9 -0
- package/dist/xml.js +42 -0
- package/dist/xml.js.map +1 -0
- package/dist/zip-reader.d.ts +51 -0
- package/dist/zip-reader.js +448 -0
- package/dist/zip-reader.js.map +1 -0
- package/package.json +113 -0
|
@@ -0,0 +1,615 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { closeSync, openSync, renameSync, unlinkSync } from 'node:fs';
|
|
3
|
+
import { deflateRawSync } from 'node:zlib';
|
|
4
|
+
import { Deflate } from 'fflate-stream';
|
|
5
|
+
import { crc32Finalize, crc32Update, writeAllSync, zipSourcePreservingEntries, zipSourcePreservingEntriesToFile, } from './source-preserving-zip.js';
|
|
6
|
+
import { readXlsxZipEntries, readXlsxZipEntriesLazy, readXlsxZipEntriesLazyFromByteSource, forEachInflatedXlsxZipEntryChunk, getZipText, setZipText, } from './zip-reader.js';
|
|
7
|
+
import { workbookSheetPathEntriesFromSource } from './workbook-sheet-paths.js';
|
|
8
|
+
import { decodeCellAddress, decodeCellRange, encodeCellRange } from './address.js';
|
|
9
|
+
import { escapeXmlAttribute, escapeXmlText, readXmlAttribute, setXmlAttribute, worksheetCellElementPattern, worksheetCellOpeningTagPattern, } from './xml.js';
|
|
10
|
+
const sourcePreservingLiteralPatchBytesApiLimit = 1_000_000;
|
|
11
|
+
function isXlsxZipByteSource(source) {
|
|
12
|
+
return !(source instanceof Uint8Array) && typeof source.readRange === 'function';
|
|
13
|
+
}
|
|
14
|
+
function sourceByteLength(source) {
|
|
15
|
+
return source.byteLength;
|
|
16
|
+
}
|
|
17
|
+
function assertSourcePreservingLiteralPatchBytesApiWithinLimit(source, apiName) {
|
|
18
|
+
const byteLength = sourceByteLength(source);
|
|
19
|
+
if (byteLength <= sourcePreservingLiteralPatchBytesApiLimit) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
throw new Error([
|
|
23
|
+
`${apiName} is small-workbook only for byte-buffer XLSX sources: source is ${byteLength} bytes`,
|
|
24
|
+
`limit is ${sourcePreservingLiteralPatchBytesApiLimit} bytes`,
|
|
25
|
+
'Use source-preserving file output with a file-backed range source for large XLSX jobs.',
|
|
26
|
+
].join('; '));
|
|
27
|
+
}
|
|
28
|
+
function readSourcePreservingZip(source) {
|
|
29
|
+
if (source instanceof Uint8Array) {
|
|
30
|
+
assertSourcePreservingLiteralPatchBytesApiWithinLimit(source, 'source-preserving byte source');
|
|
31
|
+
return readXlsxZipEntriesLazy(source);
|
|
32
|
+
}
|
|
33
|
+
if (isXlsxZipByteSource(source)) {
|
|
34
|
+
const lazyZip = readXlsxZipEntriesLazyFromByteSource(source);
|
|
35
|
+
if (lazyZip) {
|
|
36
|
+
return lazyZip;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
assertSourcePreservingLiteralPatchBytesApiWithinLimit(source, 'source-preserving readBytes fallback');
|
|
40
|
+
return readXlsxZipEntries(source.readBytes());
|
|
41
|
+
}
|
|
42
|
+
function removeXmlAttribute(tag, name) {
|
|
43
|
+
const escapedName = name.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
|
|
44
|
+
return tag.replace(new RegExp(`\\s${escapedName}=(["'])[\\s\\S]*?\\1`, 'u'), '');
|
|
45
|
+
}
|
|
46
|
+
function setCellType(openingTag, type) {
|
|
47
|
+
return type === null ? removeXmlAttribute(openingTag, 't') : setXmlAttribute(openingTag, 't', type);
|
|
48
|
+
}
|
|
49
|
+
function cellParts(cellXml) {
|
|
50
|
+
const openingTag = worksheetCellOpeningTagPattern.exec(cellXml)?.[0];
|
|
51
|
+
const tagName = openingTag ? /^<([^\s/>]+)/u.exec(openingTag)?.[1] : undefined;
|
|
52
|
+
if (!openingTag || !tagName) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
if (openingTag.endsWith('/>')) {
|
|
56
|
+
return { tagName, openingTag, body: '' };
|
|
57
|
+
}
|
|
58
|
+
const closingTag = `</${tagName}>`;
|
|
59
|
+
return {
|
|
60
|
+
tagName,
|
|
61
|
+
openingTag,
|
|
62
|
+
body: cellXml.slice(openingTag.length, cellXml.endsWith(closingTag) ? -closingTag.length : undefined),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function inlineStringBody(value) {
|
|
66
|
+
const preserveSpace = /^\s|\s$/u.test(value) ? ' xml:space="preserve"' : '';
|
|
67
|
+
return `<is><t${preserveSpace}>${escapeXmlText(value)}</t></is>`;
|
|
68
|
+
}
|
|
69
|
+
function isXlsxScalarPatchErrorValue(value) {
|
|
70
|
+
return typeof value === 'object' && value !== null && value.kind === 'error';
|
|
71
|
+
}
|
|
72
|
+
function literalCellBody(value) {
|
|
73
|
+
if (value === null) {
|
|
74
|
+
return { type: null, body: '' };
|
|
75
|
+
}
|
|
76
|
+
if (isXlsxScalarPatchErrorValue(value)) {
|
|
77
|
+
return { type: 'e', body: `<v>${escapeXmlText(value.value)}</v>` };
|
|
78
|
+
}
|
|
79
|
+
if (typeof value === 'number') {
|
|
80
|
+
return Number.isFinite(value) ? { type: null, body: `<v>${String(value)}</v>` } : null;
|
|
81
|
+
}
|
|
82
|
+
if (typeof value === 'boolean') {
|
|
83
|
+
return { type: 'b', body: `<v>${value ? '1' : '0'}</v>` };
|
|
84
|
+
}
|
|
85
|
+
return { type: 'inlineStr', body: inlineStringBody(value) };
|
|
86
|
+
}
|
|
87
|
+
function formulaCachedValue(value) {
|
|
88
|
+
if (value === null) {
|
|
89
|
+
return { type: null, valueXml: '' };
|
|
90
|
+
}
|
|
91
|
+
if (isXlsxScalarPatchErrorValue(value)) {
|
|
92
|
+
return { type: 'e', valueXml: `<v>${escapeXmlText(value.value)}</v>` };
|
|
93
|
+
}
|
|
94
|
+
if (typeof value === 'number') {
|
|
95
|
+
return Number.isFinite(value) ? { type: null, valueXml: `<v>${String(value)}</v>` } : null;
|
|
96
|
+
}
|
|
97
|
+
if (typeof value === 'boolean') {
|
|
98
|
+
return { type: 'b', valueXml: `<v>${value ? '1' : '0'}</v>` };
|
|
99
|
+
}
|
|
100
|
+
return { type: 'str', valueXml: `<v>${escapeXmlText(value)}</v>` };
|
|
101
|
+
}
|
|
102
|
+
function rewriteCellXml(cellXml, type, body) {
|
|
103
|
+
const parts = cellParts(cellXml);
|
|
104
|
+
if (!parts) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
const nextOpeningTag = setCellType(parts.openingTag, type);
|
|
108
|
+
return `${nextOpeningTag.endsWith('/>') ? `${nextOpeningTag.slice(0, -2)}>` : nextOpeningTag}${body}</${parts.tagName}>`;
|
|
109
|
+
}
|
|
110
|
+
function patchLiteralCellXml(cellXml, value) {
|
|
111
|
+
const valueBody = literalCellBody(value);
|
|
112
|
+
return valueBody ? rewriteCellXml(cellXml, valueBody.type, valueBody.body) : null;
|
|
113
|
+
}
|
|
114
|
+
const formulaElementPattern = /<(?:[A-Za-z_][\w.-]*:)?f\b(?:[^/>]*\/>|[\s\S]*?<\/(?:[A-Za-z_][\w.-]*:)?f>)/u;
|
|
115
|
+
const cachedValueElementPattern = /<((?:[A-Za-z_][\w.-]*:)?v)\b[^>]*>[\s\S]*?<\/\1>/u;
|
|
116
|
+
const worksheetCellOpeningElementStartPattern = /<(?:[A-Za-z_][\w.-]*:)?c\b/gu;
|
|
117
|
+
function patchFormulaCacheCellXml(cellXml, value) {
|
|
118
|
+
const valueBody = formulaCachedValue(value);
|
|
119
|
+
const parts = cellParts(cellXml);
|
|
120
|
+
if (!valueBody || !parts) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
const formulaMatch = formulaElementPattern.exec(parts.body);
|
|
124
|
+
if (!formulaMatch) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
const nextOpeningTag = setCellType(parts.openingTag, valueBody.type);
|
|
128
|
+
const formulaEnd = formulaMatch.index + formulaMatch[0].length;
|
|
129
|
+
const nextBody = valueBody.valueXml.length === 0
|
|
130
|
+
? parts.body.replace(cachedValueElementPattern, '')
|
|
131
|
+
: cachedValueElementPattern.test(parts.body)
|
|
132
|
+
? parts.body.replace(cachedValueElementPattern, valueBody.valueXml)
|
|
133
|
+
: `${parts.body.slice(0, formulaEnd)}${valueBody.valueXml}${parts.body.slice(formulaEnd)}`;
|
|
134
|
+
return `${nextOpeningTag.endsWith('/>') ? `${nextOpeningTag.slice(0, -2)}>` : nextOpeningTag}${nextBody}</${parts.tagName}>`;
|
|
135
|
+
}
|
|
136
|
+
function patchScalarCellXml(cellXml, patch) {
|
|
137
|
+
return patch.preserveFormula ? patchFormulaCacheCellXml(cellXml, patch.value) : patchLiteralCellXml(cellXml, patch.value);
|
|
138
|
+
}
|
|
139
|
+
function literalCellXml(address, value) {
|
|
140
|
+
const valueBody = literalCellBody(value);
|
|
141
|
+
return valueBody
|
|
142
|
+
? `<c r="${escapeXmlAttribute(address)}"${valueBody.type === null ? '' : ` t="${valueBody.type}"`}>${valueBody.body}</c>`
|
|
143
|
+
: null;
|
|
144
|
+
}
|
|
145
|
+
function rowNumberForAddress(address) {
|
|
146
|
+
try {
|
|
147
|
+
const row = decodeCellAddress(address).r + 1;
|
|
148
|
+
return Number.isSafeInteger(row) && row > 0 ? row : null;
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
function insertCellIntoExistingRow(sheetXml, address, cellXml) {
|
|
155
|
+
const rowNumber = rowNumberForAddress(address);
|
|
156
|
+
if (rowNumber === null) {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
const rowPattern = new RegExp(`<((?:[A-Za-z_][\\w.-]*:)?row)\\b(?<attributes>[^>]*\\br=(["'])${rowNumber}\\3[^>]*)(?:\\/>|>(?<body>[\\s\\S]*?)<\\/\\1>)`, 'u');
|
|
160
|
+
if (!rowPattern.test(sheetXml)) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
return sheetXml.replace(rowPattern, (_match, tagName, attributes, _quote, body = '') => {
|
|
164
|
+
return `<${tagName}${attributes}>${body}${cellXml}</${tagName}>`;
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
function insertRowIntoSheetData(sheetXml, address, cellXml) {
|
|
168
|
+
const rowNumber = rowNumberForAddress(address);
|
|
169
|
+
if (rowNumber === null) {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
const rowXml = `<row r="${String(rowNumber)}">${cellXml}</row>`;
|
|
173
|
+
const nextRowPattern = /<((?:[A-Za-z_][\w.-]*:)?row)\b[^>]*\br=(["'])([0-9]+)\2[^>]*(?:\/>|>[\s\S]*?<\/\1>)/gu;
|
|
174
|
+
for (const match of sheetXml.matchAll(nextRowPattern)) {
|
|
175
|
+
const existingRow = Number(match[3]);
|
|
176
|
+
if (Number.isSafeInteger(existingRow) && existingRow > rowNumber) {
|
|
177
|
+
return `${sheetXml.slice(0, match.index)}${rowXml}${sheetXml.slice(match.index)}`;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return sheetXml.replace(/<\/((?:[A-Za-z_][\w.-]*:)?sheetData)>/u, `${rowXml}</$1>`);
|
|
181
|
+
}
|
|
182
|
+
function insertLiteralCell(sheetXml, address, value) {
|
|
183
|
+
const cellXml = literalCellXml(address, value);
|
|
184
|
+
return cellXml ? (insertCellIntoExistingRow(sheetXml, address, cellXml) ?? insertRowIntoSheetData(sheetXml, address, cellXml)) : null;
|
|
185
|
+
}
|
|
186
|
+
function updateWorksheetDimension(sheetXml, addresses) {
|
|
187
|
+
const decoded = [...addresses].flatMap((address) => {
|
|
188
|
+
try {
|
|
189
|
+
return [decodeCellAddress(address)];
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return [];
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
if (decoded.length === 0 || !/<(?:[A-Za-z_][\w.-]*:)?dimension\b/u.test(sheetXml)) {
|
|
196
|
+
return sheetXml;
|
|
197
|
+
}
|
|
198
|
+
return sheetXml.replace(/<((?:[A-Za-z_][\w.-]*:)?dimension)\b([^>]*)\/>/u, (match, tagName, attributes) => {
|
|
199
|
+
const ref = readXmlAttribute(match, 'ref');
|
|
200
|
+
let range = null;
|
|
201
|
+
try {
|
|
202
|
+
range = ref ? decodeCellRange(ref) : null;
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
range = null;
|
|
206
|
+
}
|
|
207
|
+
for (const cell of decoded) {
|
|
208
|
+
range = range
|
|
209
|
+
? {
|
|
210
|
+
s: { r: Math.min(range.s.r, cell.r), c: Math.min(range.s.c, cell.c) },
|
|
211
|
+
e: { r: Math.max(range.e.r, cell.r), c: Math.max(range.e.c, cell.c) },
|
|
212
|
+
}
|
|
213
|
+
: { s: cell, e: cell };
|
|
214
|
+
}
|
|
215
|
+
return range ? `<${tagName}${setXmlAttribute(attributes, 'ref', encodeCellRange(range))}/>` : match;
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
function patchWorksheetXml(sheetXml, patch) {
|
|
219
|
+
const patchedLiterals = new Set();
|
|
220
|
+
let failed = false;
|
|
221
|
+
let nextXml = sheetXml.replace(worksheetCellElementPattern, (cellXml) => {
|
|
222
|
+
const openingTag = worksheetCellOpeningTagPattern.exec(cellXml)?.[0];
|
|
223
|
+
const address = openingTag ? readXmlAttribute(openingTag, 'r') : null;
|
|
224
|
+
if (!address) {
|
|
225
|
+
return cellXml;
|
|
226
|
+
}
|
|
227
|
+
if (patch.literals.has(address)) {
|
|
228
|
+
const patched = patchScalarCellXml(cellXml, patch.literals.get(address) ?? { value: null, preserveFormula: false });
|
|
229
|
+
if (!patched) {
|
|
230
|
+
failed = true;
|
|
231
|
+
return cellXml;
|
|
232
|
+
}
|
|
233
|
+
patchedLiterals.add(address);
|
|
234
|
+
return patched;
|
|
235
|
+
}
|
|
236
|
+
return cellXml;
|
|
237
|
+
});
|
|
238
|
+
if (failed) {
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
for (const [address, value] of patch.literals.entries()) {
|
|
242
|
+
if (!patchedLiterals.has(address)) {
|
|
243
|
+
const inserted = value.preserveFormula ? null : insertLiteralCell(nextXml, address, value.value);
|
|
244
|
+
if (inserted === null) {
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
nextXml = inserted;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return updateWorksheetDimension(nextXml, patch.literals.keys());
|
|
251
|
+
}
|
|
252
|
+
function deflatedPreparedEntry(bytes) {
|
|
253
|
+
const compressed = deflateRawSync(bytes);
|
|
254
|
+
return {
|
|
255
|
+
compressedChunks: [compressed],
|
|
256
|
+
compressedSize: compressed.byteLength,
|
|
257
|
+
uncompressedSize: bytes.byteLength,
|
|
258
|
+
crc: crc32Finalize(crc32Update(0xffffffff, bytes)),
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
function writeDeflatedPreparedEntryFile(bytes, compressedPath) {
|
|
262
|
+
const prepared = deflatedPreparedEntry(bytes);
|
|
263
|
+
const fd = openSync(compressedPath, 'w');
|
|
264
|
+
try {
|
|
265
|
+
for (const chunk of prepared.compressedChunks) {
|
|
266
|
+
writeAllSync(fd, chunk);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
finally {
|
|
270
|
+
closeSync(fd);
|
|
271
|
+
}
|
|
272
|
+
return {
|
|
273
|
+
compressedPath,
|
|
274
|
+
compressedSize: prepared.compressedSize,
|
|
275
|
+
uncompressedSize: prepared.uncompressedSize,
|
|
276
|
+
crc: prepared.crc,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
function applyTextPartPatches(zip, patches, prepare) {
|
|
280
|
+
for (const patch of patches ?? []) {
|
|
281
|
+
const text = getZipText(zip, patch.path);
|
|
282
|
+
if (text === null) {
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
const nextText = patch.patchText(text);
|
|
286
|
+
if (nextText === text) {
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
prepare(patch.path, nextText);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
function tryPrepareStreamingPatchedWorksheetEntry(zip, sheetPath, patch) {
|
|
293
|
+
const compressedChunks = [];
|
|
294
|
+
const sizes = tryWriteStreamingPatchedWorksheetEntry(zip, sheetPath, patch, (chunk) => {
|
|
295
|
+
compressedChunks.push(chunk);
|
|
296
|
+
});
|
|
297
|
+
return sizes
|
|
298
|
+
? {
|
|
299
|
+
compressedChunks,
|
|
300
|
+
compressedSize: sizes.compressedSize,
|
|
301
|
+
uncompressedSize: sizes.uncompressedSize,
|
|
302
|
+
crc: sizes.crc,
|
|
303
|
+
}
|
|
304
|
+
: null;
|
|
305
|
+
}
|
|
306
|
+
function tryWriteStreamingPatchedWorksheetEntry(zip, sheetPath, patch, writeCompressedChunk) {
|
|
307
|
+
if (patch.literals.size === 0) {
|
|
308
|
+
return null;
|
|
309
|
+
}
|
|
310
|
+
const textDecoder = new TextDecoder();
|
|
311
|
+
const textEncoder = new TextEncoder();
|
|
312
|
+
const patchedLiterals = new Set();
|
|
313
|
+
let compressedSize = 0;
|
|
314
|
+
let uncompressedSize = 0;
|
|
315
|
+
let crcState = 0xffffffff;
|
|
316
|
+
let failed = false;
|
|
317
|
+
let buffer = '';
|
|
318
|
+
let pendingDeflateChunk = null;
|
|
319
|
+
const patchAddressNeedles = [...patch.literals.keys()].flatMap((address) => {
|
|
320
|
+
const escaped = escapeXmlAttribute(address);
|
|
321
|
+
return [`r="${escaped}"`, `r='${escaped}'`];
|
|
322
|
+
});
|
|
323
|
+
const deflate = new Deflate((chunk) => {
|
|
324
|
+
if (chunk.byteLength === 0) {
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
writeCompressedChunk(chunk);
|
|
328
|
+
compressedSize += chunk.byteLength;
|
|
329
|
+
});
|
|
330
|
+
const emitText = (text) => {
|
|
331
|
+
if (text.length === 0) {
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
const bytes = textEncoder.encode(text);
|
|
335
|
+
uncompressedSize += bytes.byteLength;
|
|
336
|
+
crcState = crc32Update(crcState, bytes);
|
|
337
|
+
if (pendingDeflateChunk) {
|
|
338
|
+
deflate.push(pendingDeflateChunk);
|
|
339
|
+
}
|
|
340
|
+
pendingDeflateChunk = bytes;
|
|
341
|
+
};
|
|
342
|
+
const processBuffer = (final) => {
|
|
343
|
+
if (buffer.length === 0 || failed) {
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
const safeEnd = final ? buffer.length : safeWorksheetPatchScanEnd(buffer);
|
|
347
|
+
if (safeEnd === 0 && !final) {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
const safeXml = buffer.slice(0, safeEnd);
|
|
351
|
+
if (!patchAddressNeedles.some((needle) => safeXml.includes(needle))) {
|
|
352
|
+
emitText(safeXml);
|
|
353
|
+
buffer = buffer.slice(safeEnd);
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
const cellPattern = new RegExp(worksheetCellElementPattern.source, 'gu');
|
|
357
|
+
let emitOffset = 0;
|
|
358
|
+
for (const match of safeXml.matchAll(cellPattern)) {
|
|
359
|
+
const cellXml = match[0];
|
|
360
|
+
const matchStart = match.index;
|
|
361
|
+
const matchEnd = matchStart + cellXml.length;
|
|
362
|
+
emitText(buffer.slice(emitOffset, matchStart));
|
|
363
|
+
const openingTag = worksheetCellOpeningTagPattern.exec(cellXml)?.[0];
|
|
364
|
+
const address = openingTag ? readXmlAttribute(openingTag, 'r') : null;
|
|
365
|
+
if (address && patch.literals.has(address)) {
|
|
366
|
+
const patched = patchScalarCellXml(cellXml, patch.literals.get(address) ?? { value: null, preserveFormula: false });
|
|
367
|
+
if (!patched) {
|
|
368
|
+
failed = true;
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
patchedLiterals.add(address);
|
|
372
|
+
emitText(patched);
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
emitText(cellXml);
|
|
376
|
+
}
|
|
377
|
+
emitOffset = matchEnd;
|
|
378
|
+
}
|
|
379
|
+
emitText(safeXml.slice(emitOffset));
|
|
380
|
+
buffer = buffer.slice(safeEnd);
|
|
381
|
+
};
|
|
382
|
+
try {
|
|
383
|
+
const streamed = forEachInflatedXlsxZipEntryChunk(zip, sheetPath, (chunk) => {
|
|
384
|
+
buffer += textDecoder.decode(chunk, { stream: true });
|
|
385
|
+
processBuffer(false);
|
|
386
|
+
}, { chunkSize: 64 * 1024, forceStreamingInflate: true });
|
|
387
|
+
if (!streamed || failed) {
|
|
388
|
+
return null;
|
|
389
|
+
}
|
|
390
|
+
buffer += textDecoder.decode();
|
|
391
|
+
processBuffer(true);
|
|
392
|
+
if (failed || patchedLiterals.size !== patch.literals.size) {
|
|
393
|
+
return null;
|
|
394
|
+
}
|
|
395
|
+
deflate.push(pendingDeflateChunk ?? new Uint8Array(), true);
|
|
396
|
+
return {
|
|
397
|
+
compressedSize,
|
|
398
|
+
uncompressedSize,
|
|
399
|
+
crc: crc32Finalize(crcState),
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
catch {
|
|
403
|
+
return null;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
function safeWorksheetPatchScanEnd(buffer) {
|
|
407
|
+
const tagSafeEnd = Math.max(0, buffer.lastIndexOf('<'));
|
|
408
|
+
if (tagSafeEnd === 0) {
|
|
409
|
+
return 0;
|
|
410
|
+
}
|
|
411
|
+
const prefix = buffer.slice(0, tagSafeEnd);
|
|
412
|
+
let lastCompleteCellEnd = -1;
|
|
413
|
+
const cellPattern = new RegExp(worksheetCellElementPattern.source, 'gu');
|
|
414
|
+
for (const match of prefix.matchAll(cellPattern)) {
|
|
415
|
+
lastCompleteCellEnd = match.index + match[0].length;
|
|
416
|
+
}
|
|
417
|
+
let lastCellStart = -1;
|
|
418
|
+
for (const match of prefix.matchAll(worksheetCellOpeningElementStartPattern)) {
|
|
419
|
+
lastCellStart = match.index;
|
|
420
|
+
}
|
|
421
|
+
return lastCellStart >= 0 && lastCellStart >= lastCompleteCellEnd ? lastCellStart : tagSafeEnd;
|
|
422
|
+
}
|
|
423
|
+
function tryPrepareStreamingPatchedWorksheetEntryFile(zip, sheetPath, patch, compressedPath) {
|
|
424
|
+
const fd = openSync(compressedPath, 'w');
|
|
425
|
+
let closed = false;
|
|
426
|
+
const close = () => {
|
|
427
|
+
if (!closed) {
|
|
428
|
+
closeSync(fd);
|
|
429
|
+
closed = true;
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
try {
|
|
433
|
+
const sizes = tryWriteStreamingPatchedWorksheetEntry(zip, sheetPath, patch, (chunk) => {
|
|
434
|
+
writeAllSync(fd, chunk);
|
|
435
|
+
});
|
|
436
|
+
close();
|
|
437
|
+
if (!sizes) {
|
|
438
|
+
unlinkSync(compressedPath);
|
|
439
|
+
return null;
|
|
440
|
+
}
|
|
441
|
+
return { ...sizes, compressedPath };
|
|
442
|
+
}
|
|
443
|
+
catch {
|
|
444
|
+
close();
|
|
445
|
+
try {
|
|
446
|
+
unlinkSync(compressedPath);
|
|
447
|
+
}
|
|
448
|
+
catch {
|
|
449
|
+
// Best-effort cleanup only; the caller receives the export failure below.
|
|
450
|
+
}
|
|
451
|
+
return null;
|
|
452
|
+
}
|
|
453
|
+
finally {
|
|
454
|
+
close();
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
function literalPatchesBySheet(patches) {
|
|
458
|
+
const output = new Map();
|
|
459
|
+
for (const patch of patches) {
|
|
460
|
+
const sheetPatches = output.get(patch.sheetName) ?? new Map();
|
|
461
|
+
sheetPatches.set(patch.address, { value: patch.value, preserveFormula: patch.preserveFormula === true });
|
|
462
|
+
output.set(patch.sheetName, sheetPatches);
|
|
463
|
+
}
|
|
464
|
+
return output;
|
|
465
|
+
}
|
|
466
|
+
function uniquePatchedSheetNames(patches) {
|
|
467
|
+
return [...new Set(patches.map((patch) => patch.sheetName))];
|
|
468
|
+
}
|
|
469
|
+
function removeCalcChain(zip) {
|
|
470
|
+
delete zip['xl/calcChain.xml'];
|
|
471
|
+
const contentTypesXml = getZipText(zip, '[Content_Types].xml');
|
|
472
|
+
if (contentTypesXml) {
|
|
473
|
+
setZipText(zip, '[Content_Types].xml', contentTypesXml.replace(/<Override\b(?=[^>]*\bPartName=(["'])\/xl\/calcChain\.xml\1)(?:[^>"']|"[^"]*"|'[^']*')*\/>/u, ''));
|
|
474
|
+
}
|
|
475
|
+
const workbookRelationshipsXml = getZipText(zip, 'xl/_rels/workbook.xml.rels');
|
|
476
|
+
if (workbookRelationshipsXml) {
|
|
477
|
+
setZipText(zip, 'xl/_rels/workbook.xml.rels', workbookRelationshipsXml.replace(/<Relationship\b(?=[^>]*(?:\bTarget=(["'])calcChain\.xml\1|\bType=(["'])http:\/\/schemas\.openxmlformats\.org\/officeDocument\/2006\/relationships\/calcChain\2))(?:[^>"']|"[^"]*"|'[^']*')*\/>/u, ''));
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
function ensureWorkbookRecalculation(zip) {
|
|
481
|
+
const workbookXml = getZipText(zip, 'xl/workbook.xml');
|
|
482
|
+
if (!workbookXml) {
|
|
483
|
+
return false;
|
|
484
|
+
}
|
|
485
|
+
const nextWorkbookXml = /<(?:[A-Za-z_][\w.-]*:)?calcPr\b/u.test(workbookXml)
|
|
486
|
+
? workbookXml.replace(/<((?:[A-Za-z_][\w.-]*:)?calcPr)\b([^>]*)(?:\/>|>[\s\S]*?<\/\1>)/u, (_match, tagName, attributes) => {
|
|
487
|
+
const opening = `<${tagName}${attributes}/>`;
|
|
488
|
+
return setXmlAttribute(setXmlAttribute(setXmlAttribute(opening, 'calcMode', 'auto'), 'fullCalcOnLoad', '1'), 'forceFullCalc', '1');
|
|
489
|
+
})
|
|
490
|
+
: workbookXml.replace(/<\/((?:[A-Za-z_][\w.-]*:)?workbook)>/u, '<calcPr calcMode="auto" fullCalcOnLoad="1" forceFullCalc="1"/></$1>');
|
|
491
|
+
setZipText(zip, 'xl/workbook.xml', nextWorkbookXml);
|
|
492
|
+
return true;
|
|
493
|
+
}
|
|
494
|
+
function normalizedPatchInput(input) {
|
|
495
|
+
return {
|
|
496
|
+
source: input.source,
|
|
497
|
+
patches: input.patches,
|
|
498
|
+
textPatches: input.textPatches ?? [],
|
|
499
|
+
forceWorkbookRecalculation: input.forceWorkbookRecalculation ?? true,
|
|
500
|
+
sheetNames: input.sheetNames ?? uniquePatchedSheetNames(input.patches),
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
export function exportXlsxSourceLiteralPatches(input) {
|
|
504
|
+
const { source, patches, textPatches, forceWorkbookRecalculation, sheetNames } = normalizedPatchInput(input);
|
|
505
|
+
assertSourcePreservingLiteralPatchBytesApiWithinLimit(source, 'exportXlsxSourceLiteralPatches');
|
|
506
|
+
const zip = readSourcePreservingZip(source);
|
|
507
|
+
const preparedEntries = new Map();
|
|
508
|
+
const sheetPathsByName = new Map(workbookSheetPathEntriesFromSource(zip, sheetNames).map((entry) => [entry.name, entry.path]));
|
|
509
|
+
const literalsBySheet = literalPatchesBySheet(patches);
|
|
510
|
+
for (const sheetName of sheetNames) {
|
|
511
|
+
const literals = literalsBySheet.get(sheetName) ?? new Map();
|
|
512
|
+
if (literals.size === 0) {
|
|
513
|
+
continue;
|
|
514
|
+
}
|
|
515
|
+
const sheetPath = sheetPathsByName.get(sheetName);
|
|
516
|
+
if (!sheetPath) {
|
|
517
|
+
throw new Error(`Unable to resolve XLSX worksheet path for sheet: ${sheetName}`);
|
|
518
|
+
}
|
|
519
|
+
const streamingPatch = tryPrepareStreamingPatchedWorksheetEntry(zip, sheetPath, { literals });
|
|
520
|
+
if (streamingPatch) {
|
|
521
|
+
preparedEntries.set(sheetPath, streamingPatch);
|
|
522
|
+
continue;
|
|
523
|
+
}
|
|
524
|
+
const sheetXml = getZipText(zip, sheetPath);
|
|
525
|
+
if (!sheetXml) {
|
|
526
|
+
throw new Error(`Unable to read XLSX worksheet XML for sheet: ${sheetName}`);
|
|
527
|
+
}
|
|
528
|
+
const patchedXml = patchWorksheetXml(sheetXml, { literals });
|
|
529
|
+
if (patchedXml === null) {
|
|
530
|
+
throw new Error(`Unable to apply XLSX literal patches for sheet: ${sheetName}`);
|
|
531
|
+
}
|
|
532
|
+
preparedEntries.set(sheetPath, deflatedPreparedEntry(new TextEncoder().encode(patchedXml)));
|
|
533
|
+
}
|
|
534
|
+
applyTextPartPatches(zip, textPatches, (path, text) => {
|
|
535
|
+
preparedEntries.set(path, deflatedPreparedEntry(new TextEncoder().encode(text)));
|
|
536
|
+
});
|
|
537
|
+
removeCalcChain(zip);
|
|
538
|
+
if (forceWorkbookRecalculation && !ensureWorkbookRecalculation(zip)) {
|
|
539
|
+
throw new Error('Unable to update XLSX workbook recalculation settings');
|
|
540
|
+
}
|
|
541
|
+
return zipSourcePreservingEntries(zip, preparedEntries);
|
|
542
|
+
}
|
|
543
|
+
export function exportXlsxSourceLiteralPatchesToFile(input) {
|
|
544
|
+
return exportXlsxSourceLiteralPatchesToFileStreaming(input);
|
|
545
|
+
}
|
|
546
|
+
export function exportXlsxSourceLiteralPatchesToFileAsync(input) {
|
|
547
|
+
return Promise.resolve(exportXlsxSourceLiteralPatchesToFileStreaming(input));
|
|
548
|
+
}
|
|
549
|
+
function exportXlsxSourceLiteralPatchesToFileStreaming(input) {
|
|
550
|
+
const { source, patches, textPatches, forceWorkbookRecalculation, sheetNames } = normalizedPatchInput(input);
|
|
551
|
+
const zip = readSourcePreservingZip(source);
|
|
552
|
+
const preparedEntries = new Map();
|
|
553
|
+
const preparedEntryPaths = [];
|
|
554
|
+
const sheetPathsByName = new Map(workbookSheetPathEntriesFromSource(zip, sheetNames).map((entry) => [entry.name, entry.path]));
|
|
555
|
+
const literalsBySheet = literalPatchesBySheet(patches);
|
|
556
|
+
for (const sheetName of sheetNames) {
|
|
557
|
+
const literals = literalsBySheet.get(sheetName) ?? new Map();
|
|
558
|
+
if (literals.size === 0) {
|
|
559
|
+
continue;
|
|
560
|
+
}
|
|
561
|
+
const sheetPath = sheetPathsByName.get(sheetName);
|
|
562
|
+
if (!sheetPath) {
|
|
563
|
+
cleanupTemporaryFiles(preparedEntryPaths);
|
|
564
|
+
throw new Error(`Unable to resolve XLSX worksheet path for sheet: ${sheetName}`);
|
|
565
|
+
}
|
|
566
|
+
const preparedEntryPath = `${input.outputPath}.${randomUUID()}.entry.tmp`;
|
|
567
|
+
const preparedEntry = tryPrepareStreamingPatchedWorksheetEntryFile(zip, sheetPath, { literals }, preparedEntryPath);
|
|
568
|
+
if (!preparedEntry) {
|
|
569
|
+
cleanupTemporaryFiles(preparedEntryPaths);
|
|
570
|
+
throw new Error(`Unable to apply XLSX literal patches for sheet: ${sheetName}`);
|
|
571
|
+
}
|
|
572
|
+
preparedEntryPaths.push(preparedEntryPath);
|
|
573
|
+
preparedEntries.set(sheetPath, preparedEntry);
|
|
574
|
+
}
|
|
575
|
+
applyTextPartPatches(zip, textPatches, (path, text) => {
|
|
576
|
+
const preparedEntryPath = `${input.outputPath}.${randomUUID()}.entry.tmp`;
|
|
577
|
+
const preparedEntry = writeDeflatedPreparedEntryFile(new TextEncoder().encode(text), preparedEntryPath);
|
|
578
|
+
preparedEntryPaths.push(preparedEntryPath);
|
|
579
|
+
preparedEntries.set(path, preparedEntry);
|
|
580
|
+
});
|
|
581
|
+
removeCalcChain(zip);
|
|
582
|
+
if (forceWorkbookRecalculation && !ensureWorkbookRecalculation(zip)) {
|
|
583
|
+
cleanupTemporaryFiles(preparedEntryPaths);
|
|
584
|
+
throw new Error('Unable to update XLSX workbook recalculation settings');
|
|
585
|
+
}
|
|
586
|
+
const temporaryOutputPath = `${input.outputPath}.${randomUUID()}.tmp`;
|
|
587
|
+
try {
|
|
588
|
+
const bytesWritten = zipSourcePreservingEntriesToFile(zip, preparedEntries, temporaryOutputPath);
|
|
589
|
+
renameSync(temporaryOutputPath, input.outputPath);
|
|
590
|
+
return { bytesWritten };
|
|
591
|
+
}
|
|
592
|
+
catch (error) {
|
|
593
|
+
try {
|
|
594
|
+
unlinkSync(temporaryOutputPath);
|
|
595
|
+
}
|
|
596
|
+
catch {
|
|
597
|
+
// Best-effort cleanup only; the caller receives the export failure below.
|
|
598
|
+
}
|
|
599
|
+
throw error;
|
|
600
|
+
}
|
|
601
|
+
finally {
|
|
602
|
+
cleanupTemporaryFiles(preparedEntryPaths);
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
function cleanupTemporaryFiles(paths) {
|
|
606
|
+
for (const path of paths) {
|
|
607
|
+
try {
|
|
608
|
+
unlinkSync(path);
|
|
609
|
+
}
|
|
610
|
+
catch {
|
|
611
|
+
// Temporary file cleanup is best-effort only.
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
//# sourceMappingURL=source-preserving-literal-patches.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-preserving-literal-patches.js","sourceRoot":"","sources":["../src/source-preserving-literal-patches.ts"],"names":[],"mappings":"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"}
|