@node-projects/excelforge 2.4.0 → 3.1.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.
Files changed (74) hide show
  1. package/.github/FUNDING.yml +4 -0
  2. package/FEATURES.md +294 -0
  3. package/README.md +628 -12
  4. package/dist/core/SharedStrings.js +6 -2
  5. package/dist/core/SharedStrings.js.map +1 -1
  6. package/dist/core/Workbook.d.ts +43 -1
  7. package/dist/core/Workbook.js +881 -58
  8. package/dist/core/Workbook.js.map +1 -1
  9. package/dist/core/WorkbookReader.d.ts +18 -4
  10. package/dist/core/WorkbookReader.js +1386 -20
  11. package/dist/core/WorkbookReader.js.map +1 -1
  12. package/dist/core/Worksheet.d.ts +136 -2
  13. package/dist/core/Worksheet.js +828 -63
  14. package/dist/core/Worksheet.js.map +1 -1
  15. package/dist/core/types.d.ts +311 -5
  16. package/dist/core/types.js +12 -1
  17. package/dist/core/types.js.map +1 -1
  18. package/dist/features/ChartBuilder.d.ts +9 -1
  19. package/dist/features/ChartBuilder.js +140 -14
  20. package/dist/features/ChartBuilder.js.map +1 -1
  21. package/dist/features/CsvModule.d.ts +11 -0
  22. package/dist/features/CsvModule.js +137 -0
  23. package/dist/features/CsvModule.js.map +1 -0
  24. package/dist/features/Encryption.d.ts +6 -0
  25. package/dist/features/Encryption.js +806 -0
  26. package/dist/features/Encryption.js.map +1 -0
  27. package/dist/features/FormControlBuilder.d.ts +6 -0
  28. package/dist/features/FormControlBuilder.js +135 -0
  29. package/dist/features/FormControlBuilder.js.map +1 -0
  30. package/dist/features/FormulaEngine.d.ts +22 -0
  31. package/dist/features/FormulaEngine.js +498 -0
  32. package/dist/features/FormulaEngine.js.map +1 -0
  33. package/dist/features/HtmlModule.d.ts +22 -0
  34. package/dist/features/HtmlModule.js +1441 -0
  35. package/dist/features/HtmlModule.js.map +1 -0
  36. package/dist/features/JsonModule.d.ts +10 -0
  37. package/dist/features/JsonModule.js +76 -0
  38. package/dist/features/JsonModule.js.map +1 -0
  39. package/dist/features/PdfModule.d.ts +30 -0
  40. package/dist/features/PdfModule.js +1567 -0
  41. package/dist/features/PdfModule.js.map +1 -0
  42. package/dist/features/PivotTableBuilder.d.ts +7 -0
  43. package/dist/features/PivotTableBuilder.js +170 -0
  44. package/dist/features/PivotTableBuilder.js.map +1 -0
  45. package/dist/features/Signing.d.ts +12 -0
  46. package/dist/features/Signing.js +326 -0
  47. package/dist/features/Signing.js.map +1 -0
  48. package/dist/features/TableBuilder.js +2 -2
  49. package/dist/features/TableBuilder.js.map +1 -1
  50. package/dist/index-min.js +609 -147
  51. package/dist/index.d.ts +19 -1
  52. package/dist/index.js +11 -0
  53. package/dist/index.js.map +1 -1
  54. package/dist/styles/StyleRegistry.d.ts +14 -0
  55. package/dist/styles/StyleRegistry.js +95 -30
  56. package/dist/styles/StyleRegistry.js.map +1 -1
  57. package/dist/utils/helpers.d.ts +4 -0
  58. package/dist/utils/helpers.js +64 -14
  59. package/dist/utils/helpers.js.map +1 -1
  60. package/dist/utils/zip.js +145 -73
  61. package/dist/utils/zip.js.map +1 -1
  62. package/dist/vba/VbaProject.d.ts +31 -0
  63. package/dist/vba/VbaProject.js +576 -0
  64. package/dist/vba/VbaProject.js.map +1 -0
  65. package/dist/vba/cfb.d.ts +7 -0
  66. package/dist/vba/cfb.js +352 -0
  67. package/dist/vba/cfb.js.map +1 -0
  68. package/dist/vba/ovba.d.ts +2 -0
  69. package/dist/vba/ovba.js +137 -0
  70. package/dist/vba/ovba.js.map +1 -0
  71. package/package.json +4 -3
  72. package/validator.cs +0 -155
  73. package/validatorEpplus.cs +0 -27
  74. package/validatorReadData.cs +0 -111
@@ -0,0 +1,352 @@
1
+ const SIGNATURE = new Uint8Array([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1]);
2
+ const ENDOFCHAIN = 0xFFFFFFFE;
3
+ const FREESECT = 0xFFFFFFFF;
4
+ const FATSECT = 0xFFFFFFFD;
5
+ const NOSTREAM = 0xFFFFFFFF;
6
+ const SECTOR_SIZE = 512;
7
+ const MINI_SIZE = 64;
8
+ const MINI_CUTOFF = 0x1000;
9
+ const DIR_ENTRY_SZ = 128;
10
+ function u16(buf, off) {
11
+ return buf[off] | (buf[off + 1] << 8);
12
+ }
13
+ function u32(buf, off) {
14
+ return (buf[off] | (buf[off + 1] << 8) | (buf[off + 2] << 16) | (buf[off + 3] << 24)) >>> 0;
15
+ }
16
+ function setU16(buf, off, v) {
17
+ buf[off] = v & 0xFF;
18
+ buf[off + 1] = (v >> 8) & 0xFF;
19
+ }
20
+ function setU32(buf, off, v) {
21
+ buf[off] = v & 0xFF;
22
+ buf[off + 1] = (v >> 8) & 0xFF;
23
+ buf[off + 2] = (v >> 16) & 0xFF;
24
+ buf[off + 3] = (v >> 24) & 0xFF;
25
+ }
26
+ function encodeName(name) {
27
+ if (name.length > 31)
28
+ throw new Error(`CFB entry name too long (${name.length} chars, max 31): "${name}"`);
29
+ const bytes = new Uint8Array(64);
30
+ let i = 0;
31
+ for (const ch of name) {
32
+ const code = ch.charCodeAt(0);
33
+ bytes[i++] = code & 0xFF;
34
+ bytes[i++] = (code >> 8) & 0xFF;
35
+ }
36
+ bytes[i++] = 0;
37
+ bytes[i++] = 0;
38
+ return { bytes, size: i };
39
+ }
40
+ function decodeName(buf, off, nameSize) {
41
+ let s = '';
42
+ const len = Math.max(0, nameSize - 2);
43
+ for (let i = 0; i < len; i += 2) {
44
+ const code = buf[off + i] | (buf[off + i + 1] << 8);
45
+ if (code === 0)
46
+ break;
47
+ s += String.fromCharCode(code);
48
+ }
49
+ return s;
50
+ }
51
+ function followChain(fat, start) {
52
+ const chain = [];
53
+ let sid = start;
54
+ while (sid !== ENDOFCHAIN && sid < fat.length) {
55
+ chain.push(sid);
56
+ sid = fat[sid];
57
+ }
58
+ return chain;
59
+ }
60
+ function ceilDiv(a, b) { return Math.ceil(a / b); }
61
+ export function readCfb(data) {
62
+ for (let i = 0; i < 8; i++)
63
+ if (data[i] !== SIGNATURE[i])
64
+ throw new Error('Not a CFB file');
65
+ const sectorPow = u16(data, 30);
66
+ const sectorSize = 1 << sectorPow;
67
+ const miniPow = u16(data, 32);
68
+ const miniSize = 1 << miniPow;
69
+ const fatSectors = u32(data, 44);
70
+ const dirStart = u32(data, 48);
71
+ const miniFatStart = u32(data, 60);
72
+ const sectorOff = (sid) => 512 + sid * sectorSize;
73
+ const difat = [];
74
+ for (let i = 0; i < 109 && i < fatSectors; i++) {
75
+ const sid = u32(data, 76 + i * 4);
76
+ if (sid !== FREESECT)
77
+ difat.push(sid);
78
+ }
79
+ const totalSectors = Math.floor((data.length - 512) / sectorSize);
80
+ const fat = new Uint32Array(totalSectors);
81
+ fat.fill(FREESECT);
82
+ for (let fi = 0; fi < difat.length; fi++) {
83
+ const off = sectorOff(difat[fi]);
84
+ const entriesPerSector = sectorSize / 4;
85
+ for (let j = 0; j < entriesPerSector && fi * entriesPerSector + j < totalSectors; j++) {
86
+ fat[fi * entriesPerSector + j] = u32(data, off + j * 4);
87
+ }
88
+ }
89
+ const dirChain = followChain(fat, dirStart);
90
+ const dirBuf = new Uint8Array(dirChain.length * sectorSize);
91
+ for (let i = 0; i < dirChain.length; i++) {
92
+ dirBuf.set(data.subarray(sectorOff(dirChain[i]), sectorOff(dirChain[i]) + sectorSize), i * sectorSize);
93
+ }
94
+ const numEntries = dirBuf.length / DIR_ENTRY_SZ;
95
+ const entries = [];
96
+ for (let i = 0; i < numEntries; i++) {
97
+ const off = i * DIR_ENTRY_SZ;
98
+ const nameSize = u16(dirBuf, off + 64);
99
+ if (nameSize === 0)
100
+ continue;
101
+ entries.push({
102
+ name: decodeName(dirBuf, off, nameSize),
103
+ type: dirBuf[off + 66],
104
+ child: u32(dirBuf, off + 76),
105
+ left: u32(dirBuf, off + 68),
106
+ right: u32(dirBuf, off + 72),
107
+ startSector: u32(dirBuf, off + 116),
108
+ size: u32(dirBuf, off + 120),
109
+ index: i,
110
+ });
111
+ }
112
+ const root = entries.find(e => e.type === 5);
113
+ if (!root)
114
+ throw new Error('No root entry in CFB');
115
+ const miniContainerChain = followChain(fat, root.startSector);
116
+ const miniContainer = new Uint8Array(miniContainerChain.length * sectorSize);
117
+ for (let i = 0; i < miniContainerChain.length; i++) {
118
+ miniContainer.set(data.subarray(sectorOff(miniContainerChain[i]), sectorOff(miniContainerChain[i]) + sectorSize), i * sectorSize);
119
+ }
120
+ const miniFatChain = followChain(fat, miniFatStart);
121
+ const numMiniEntries = miniFatChain.length * (sectorSize / 4);
122
+ const miniFat = new Uint32Array(numMiniEntries);
123
+ miniFat.fill(FREESECT);
124
+ for (let i = 0; i < miniFatChain.length; i++) {
125
+ const off = sectorOff(miniFatChain[i]);
126
+ const count = sectorSize / 4;
127
+ for (let j = 0; j < count; j++) {
128
+ miniFat[i * count + j] = u32(data, off + j * 4);
129
+ }
130
+ }
131
+ const parentMap = new Map();
132
+ function collectChildren(parentIdx, parentName) {
133
+ const parent = entries.find(e => e.index === parentIdx);
134
+ if (!parent || parent.child === NOSTREAM)
135
+ return;
136
+ const visit = (idx) => {
137
+ if (idx === NOSTREAM || idx >= numEntries)
138
+ return;
139
+ const e = entries.find(en => en.index === idx);
140
+ if (!e)
141
+ return;
142
+ parentMap.set(idx, parentName);
143
+ if (e.type === 1)
144
+ collectChildren(idx, e.name);
145
+ visit(e.left);
146
+ visit(e.right);
147
+ };
148
+ visit(parent.child);
149
+ }
150
+ collectChildren(root.index, '');
151
+ const streams = [];
152
+ for (const entry of entries) {
153
+ if (entry.type !== 2)
154
+ continue;
155
+ let streamData;
156
+ if (entry.size < MINI_CUTOFF) {
157
+ const chain = followChain(miniFat, entry.startSector);
158
+ const buf = new Uint8Array(chain.length * miniSize);
159
+ for (let i = 0; i < chain.length; i++) {
160
+ const off = chain[i] * miniSize;
161
+ buf.set(miniContainer.subarray(off, off + miniSize), i * miniSize);
162
+ }
163
+ streamData = buf.subarray(0, entry.size);
164
+ }
165
+ else {
166
+ const chain = followChain(fat, entry.startSector);
167
+ const buf = new Uint8Array(chain.length * sectorSize);
168
+ for (let i = 0; i < chain.length; i++) {
169
+ buf.set(data.subarray(sectorOff(chain[i]), sectorOff(chain[i]) + sectorSize), i * sectorSize);
170
+ }
171
+ streamData = buf.subarray(0, entry.size);
172
+ }
173
+ streams.push({
174
+ name: entry.name,
175
+ data: streamData,
176
+ storage: parentMap.get(entry.index) || undefined,
177
+ });
178
+ }
179
+ return streams;
180
+ }
181
+ export function buildCfb(streams) {
182
+ const root = { name: 'Root Entry', type: 5, children: [] };
183
+ const storages = new Map();
184
+ storages.set('', root);
185
+ for (const s of streams) {
186
+ const parentName = s.storage ?? '';
187
+ let parent = storages.get(parentName);
188
+ if (!parent) {
189
+ parent = { name: parentName, type: 1, children: [] };
190
+ storages.set(parentName, parent);
191
+ root.children.push(parent);
192
+ }
193
+ const node = { name: s.name, type: 2, data: s.data };
194
+ parent.children.push(node);
195
+ }
196
+ const flat = [];
197
+ const queue = [root];
198
+ while (queue.length) {
199
+ const n = queue.shift();
200
+ flat.push({
201
+ node: n, parentIdx: -1, childIdx: NOSTREAM,
202
+ leftIdx: NOSTREAM, rightIdx: NOSTREAM,
203
+ miniStart: 0, size: n.data?.length ?? 0,
204
+ });
205
+ if (n.children) {
206
+ for (const c of n.children)
207
+ queue.push(c);
208
+ }
209
+ }
210
+ for (let i = 0; i < flat.length; i++) {
211
+ const n = flat[i].node;
212
+ if (!n.children?.length)
213
+ continue;
214
+ const childIdxs = flat
215
+ .map((e, idx) => ({ e, idx }))
216
+ .filter(({ e }) => n.children.includes(e.node))
217
+ .map(({ idx }) => idx);
218
+ if (childIdxs.length === 0)
219
+ continue;
220
+ const sorted = childIdxs.sort((a, b) => {
221
+ const na = flat[a].node.name, nb = flat[b].node.name;
222
+ if (na.length !== nb.length)
223
+ return na.length - nb.length;
224
+ return na.toUpperCase() < nb.toUpperCase() ? -1 : na.toUpperCase() > nb.toUpperCase() ? 1 : 0;
225
+ });
226
+ const buildTree = (arr) => {
227
+ if (arr.length === 0)
228
+ return NOSTREAM;
229
+ const mid = arr.length >> 1;
230
+ flat[arr[mid]].leftIdx = buildTree(arr.slice(0, mid));
231
+ flat[arr[mid]].rightIdx = buildTree(arr.slice(mid + 1));
232
+ return arr[mid];
233
+ };
234
+ flat[i].childIdx = buildTree(sorted);
235
+ }
236
+ const miniSectorData = [];
237
+ const miniChains = new Map();
238
+ let nextMiniSector = 0;
239
+ for (let i = 0; i < flat.length; i++) {
240
+ const d = flat[i].node.data;
241
+ if (!d || d.length === 0)
242
+ continue;
243
+ const numMiniSectors = ceilDiv(d.length, MINI_SIZE);
244
+ const chain = [];
245
+ for (let m = 0; m < numMiniSectors; m++) {
246
+ chain.push(nextMiniSector++);
247
+ const chunk = d.subarray(m * MINI_SIZE, Math.min((m + 1) * MINI_SIZE, d.length));
248
+ for (const b of chunk)
249
+ miniSectorData.push(b);
250
+ for (let p = chunk.length; p < MINI_SIZE; p++)
251
+ miniSectorData.push(0);
252
+ }
253
+ flat[i].miniStart = chain[0];
254
+ miniChains.set(i, chain);
255
+ }
256
+ const totalMiniSectors = nextMiniSector;
257
+ const miniFatEntries = Math.max(totalMiniSectors, 1);
258
+ const miniFatSectors = ceilDiv(miniFatEntries * 4, SECTOR_SIZE);
259
+ const miniFat = new Uint32Array(miniFatSectors * (SECTOR_SIZE / 4));
260
+ miniFat.fill(FREESECT);
261
+ for (const chain of miniChains.values()) {
262
+ for (let j = 0; j < chain.length; j++) {
263
+ miniFat[chain[j]] = j + 1 < chain.length ? chain[j + 1] : ENDOFCHAIN;
264
+ }
265
+ }
266
+ const containerData = new Uint8Array(miniSectorData);
267
+ const containerSectors = ceilDiv(containerData.length || 1, SECTOR_SIZE);
268
+ const numDirEntries = flat.length;
269
+ const dirSectors = ceilDiv(numDirEntries * DIR_ENTRY_SZ, SECTOR_SIZE);
270
+ const fatSectorIdx = 0;
271
+ const dirStartSector = 1;
272
+ const miniFatStartSector = dirStartSector + dirSectors;
273
+ const containerStartSector = miniFatStartSector + miniFatSectors;
274
+ const totalSectors = 1 + dirSectors + miniFatSectors + containerSectors;
275
+ const fat = new Uint32Array(SECTOR_SIZE / 4);
276
+ fat.fill(FREESECT);
277
+ fat[fatSectorIdx] = FATSECT;
278
+ for (let i = 0; i < dirSectors; i++) {
279
+ fat[dirStartSector + i] = i + 1 < dirSectors ? dirStartSector + i + 1 : ENDOFCHAIN;
280
+ }
281
+ for (let i = 0; i < miniFatSectors; i++) {
282
+ fat[miniFatStartSector + i] = i + 1 < miniFatSectors ? miniFatStartSector + i + 1 : ENDOFCHAIN;
283
+ }
284
+ for (let i = 0; i < containerSectors; i++) {
285
+ fat[containerStartSector + i] = i + 1 < containerSectors ? containerStartSector + i + 1 : ENDOFCHAIN;
286
+ }
287
+ flat[0].miniStart = containerStartSector;
288
+ flat[0].size = containerData.length;
289
+ const dirBuf = new Uint8Array(dirSectors * SECTOR_SIZE);
290
+ for (let i = 0; i < flat.length; i++) {
291
+ const off = i * DIR_ENTRY_SZ;
292
+ const e = flat[i];
293
+ const { bytes, size: nameSize } = encodeName(e.node.name);
294
+ dirBuf.set(bytes, off);
295
+ setU16(dirBuf, off + 64, nameSize);
296
+ dirBuf[off + 66] = e.node.type;
297
+ dirBuf[off + 67] = 1;
298
+ setU32(dirBuf, off + 68, e.leftIdx);
299
+ setU32(dirBuf, off + 72, e.rightIdx);
300
+ setU32(dirBuf, off + 76, e.childIdx);
301
+ if (e.node.type === 5) {
302
+ setU32(dirBuf, off + 116, containerStartSector);
303
+ setU32(dirBuf, off + 120, containerData.length);
304
+ }
305
+ else if (e.node.type === 2 && e.node.data && e.node.data.length > 0) {
306
+ setU32(dirBuf, off + 116, e.miniStart);
307
+ setU32(dirBuf, off + 120, e.node.data.length);
308
+ }
309
+ else if (e.node.type === 1) {
310
+ setU32(dirBuf, off + 116, 0);
311
+ setU32(dirBuf, off + 120, 0);
312
+ }
313
+ else {
314
+ setU32(dirBuf, off + 116, ENDOFCHAIN);
315
+ setU32(dirBuf, off + 120, 0);
316
+ }
317
+ }
318
+ const header = new Uint8Array(512);
319
+ header.set(SIGNATURE, 0);
320
+ setU16(header, 24, 0x003E);
321
+ setU16(header, 26, 0x0003);
322
+ setU16(header, 28, 0xFFFE);
323
+ setU16(header, 30, 9);
324
+ setU16(header, 32, 6);
325
+ setU32(header, 44, 1);
326
+ setU32(header, 48, dirStartSector);
327
+ setU32(header, 56, MINI_CUTOFF);
328
+ setU32(header, 60, miniFatStartSector);
329
+ setU32(header, 64, miniFatSectors);
330
+ setU32(header, 68, ENDOFCHAIN);
331
+ setU32(header, 72, 0);
332
+ setU32(header, 76, fatSectorIdx);
333
+ for (let i = 1; i < 109; i++)
334
+ setU32(header, 76 + i * 4, FREESECT);
335
+ const fileSize = 512 + totalSectors * SECTOR_SIZE;
336
+ const file = new Uint8Array(fileSize);
337
+ file.set(header, 0);
338
+ const fatBuf = new Uint8Array(SECTOR_SIZE);
339
+ for (let i = 0; i < fat.length; i++)
340
+ setU32(fatBuf, i * 4, fat[i]);
341
+ file.set(fatBuf, 512 + fatSectorIdx * SECTOR_SIZE);
342
+ file.set(dirBuf, 512 + dirStartSector * SECTOR_SIZE);
343
+ const miniFatBuf = new Uint8Array(miniFatSectors * SECTOR_SIZE);
344
+ for (let i = 0; i < miniFat.length; i++)
345
+ setU32(miniFatBuf, i * 4, miniFat[i]);
346
+ file.set(miniFatBuf, 512 + miniFatStartSector * SECTOR_SIZE);
347
+ const containerBuf = new Uint8Array(containerSectors * SECTOR_SIZE);
348
+ containerBuf.set(containerData);
349
+ file.set(containerBuf, 512 + containerStartSector * SECTOR_SIZE);
350
+ return file;
351
+ }
352
+ //# sourceMappingURL=cfb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cfb.js","sourceRoot":"","sources":["../../src/vba/cfb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function compressOvba(src: Uint8Array): Uint8Array;
2
+ export declare function decompressOvba(data: Uint8Array): Uint8Array;
@@ -0,0 +1,137 @@
1
+ function bitCount(pos) {
2
+ if (pos <= 16)
3
+ return 4;
4
+ if (pos <= 32)
5
+ return 5;
6
+ if (pos <= 64)
7
+ return 6;
8
+ if (pos <= 128)
9
+ return 7;
10
+ if (pos <= 256)
11
+ return 8;
12
+ if (pos <= 512)
13
+ return 9;
14
+ if (pos <= 1024)
15
+ return 10;
16
+ if (pos <= 2048)
17
+ return 11;
18
+ return 12;
19
+ }
20
+ export function compressOvba(src) {
21
+ const out = [0x01];
22
+ let srcPos = 0;
23
+ while (srcPos < src.length) {
24
+ const chunkStart = srcPos;
25
+ const chunkEnd = Math.min(srcPos + 4096, src.length);
26
+ const compressed = compressChunk(src, chunkStart, chunkEnd);
27
+ if (compressed.length < 4096) {
28
+ const totalChunkSize = compressed.length + 2;
29
+ const header = 0xB000 | ((totalChunkSize - 3) & 0x0FFF);
30
+ out.push(header & 0xFF, (header >> 8) & 0xFF);
31
+ for (const b of compressed)
32
+ out.push(b);
33
+ }
34
+ else {
35
+ const header = 0x3FFF;
36
+ out.push(header & 0xFF, (header >> 8) & 0xFF);
37
+ for (let i = chunkStart; i < chunkEnd; i++)
38
+ out.push(src[i]);
39
+ for (let i = chunkEnd - chunkStart; i < 4096; i++)
40
+ out.push(0);
41
+ }
42
+ srcPos = chunkEnd;
43
+ }
44
+ return new Uint8Array(out);
45
+ }
46
+ function compressChunk(src, start, end) {
47
+ const out = [];
48
+ let dp = 0;
49
+ while (start + dp < end) {
50
+ let flagByte = 0;
51
+ const flagIdx = out.length;
52
+ out.push(0);
53
+ for (let bit = 0; bit < 8 && start + dp < end; bit++) {
54
+ if (dp === 0) {
55
+ out.push(src[start]);
56
+ dp++;
57
+ continue;
58
+ }
59
+ const bc = bitCount(dp);
60
+ const maxOff = 1 << bc;
61
+ const lenBits = 16 - bc;
62
+ const maxLen = ((1 << lenBits) - 1) + 3;
63
+ const searchStart = Math.max(0, dp - maxOff);
64
+ let bestOff = 0, bestLen = 0;
65
+ for (let s = searchStart; s < dp; s++) {
66
+ let len = 0;
67
+ while (dp + len < end - start && len < maxLen &&
68
+ src[start + s + len] === src[start + dp + len])
69
+ len++;
70
+ if (len > bestLen) {
71
+ bestLen = len;
72
+ bestOff = dp - s;
73
+ }
74
+ }
75
+ if (bestLen >= 3) {
76
+ flagByte |= 1 << bit;
77
+ const token = ((bestOff - 1) << lenBits) | (bestLen - 3);
78
+ out.push(token & 0xFF, (token >> 8) & 0xFF);
79
+ dp += bestLen;
80
+ }
81
+ else {
82
+ out.push(src[start + dp]);
83
+ dp++;
84
+ }
85
+ }
86
+ out[flagIdx] = flagByte;
87
+ }
88
+ return out;
89
+ }
90
+ export function decompressOvba(data) {
91
+ if (data.length === 0 || data[0] !== 0x01)
92
+ throw new Error('Invalid OVBA compressed container (bad signature)');
93
+ const out = [];
94
+ let pos = 1;
95
+ while (pos < data.length) {
96
+ if (pos + 1 >= data.length)
97
+ break;
98
+ const header = data[pos] | (data[pos + 1] << 8);
99
+ pos += 2;
100
+ const chunkSize = (header & 0x0FFF) + 3;
101
+ const isCompressed = (header >> 15) & 1;
102
+ const chunkDataSize = chunkSize - 2;
103
+ const chunkEnd = pos + chunkDataSize;
104
+ if (!isCompressed) {
105
+ for (let i = 0; i < 4096 && pos < data.length; i++)
106
+ out.push(data[pos++]);
107
+ pos = Math.max(pos, chunkEnd);
108
+ }
109
+ else {
110
+ const chunkDecompStart = out.length;
111
+ while (pos < chunkEnd && pos < data.length) {
112
+ const flagByte = data[pos++];
113
+ for (let bit = 0; bit < 8 && pos < chunkEnd && pos < data.length; bit++) {
114
+ if ((flagByte & (1 << bit)) === 0) {
115
+ out.push(data[pos++]);
116
+ }
117
+ else {
118
+ if (pos + 1 >= data.length)
119
+ break;
120
+ const token = data[pos] | (data[pos + 1] << 8);
121
+ pos += 2;
122
+ const dp = out.length - chunkDecompStart;
123
+ const bc = bitCount(dp);
124
+ const lb = 16 - bc;
125
+ const off = (token >> lb) + 1;
126
+ const len = (token & ((1 << lb) - 1)) + 3;
127
+ const copyStart = out.length - off;
128
+ for (let i = 0; i < len; i++)
129
+ out.push(out[copyStart + i]);
130
+ }
131
+ }
132
+ }
133
+ }
134
+ }
135
+ return new Uint8Array(out);
136
+ }
137
+ //# sourceMappingURL=ovba.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ovba.js","sourceRoot":"","sources":["../../src/vba/ovba.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@node-projects/excelforge",
3
- "version": "2.4.0",
3
+ "version": "3.1.0",
4
4
  "description": "A **complete TypeScript library** for reading and writing Excel `.xlsx` files with **zero external dependencies**. Works in browsers, Node.js, Deno, Bun, and edge runtimes.",
5
5
  "homepage": "https://github.com/node-projects/excelForge#readme",
6
6
  "bugs": {
@@ -16,13 +16,14 @@
16
16
  "main": "./dist/index.js",
17
17
  "scripts": {
18
18
  "test": "node ./dist/test/examples.js",
19
+ "test2": "node ./dist/test/test_features",
19
20
  "build": "tsc",
20
21
  "prepublishOnly": "npm run build && npm run bundle",
21
22
  "bundle": "esbuild ./dist/index.js --format=esm --minify --external:fs/promises --external:zlib --platform=neutral --bundle --outfile=./dist/index-min.js"
22
23
  },
23
24
  "devDependencies": {
24
- "esbuild": "^0.25.10",
25
- "typescript": "^5.9.3",
25
+ "esbuild": "^0.28.0",
26
+ "typescript": "^6.0.2",
26
27
  "zlib": "^1.0.5"
27
28
  }
28
29
  }