xls-codec 4.5.0 → 4.7.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 +4 -3
- package/dist/biff/record-types.cjs +15 -0
- package/dist/biff/record-types.d.cts +11 -1
- package/dist/biff/record-types.d.ts +11 -1
- package/dist/biff/record-types.js +11 -1
- package/dist/biff/records.cjs +4 -3
- package/dist/biff/records.d.cts +2 -2
- package/dist/biff/records.d.ts +2 -2
- package/dist/biff/records.js +4 -4
- package/dist/biff/substreams.d.cts +1 -1
- package/dist/biff/substreams.d.ts +1 -1
- package/dist/{conditional-format-12-Dw82ECRh.d.ts → conditional-format-12-D-X5g_O3.d.ts} +31 -4
- package/dist/{conditional-format-12-DdEL5DL0.d.cts → conditional-format-12-DBhe7Zo6.d.cts} +31 -4
- package/dist/{conditional-format-DUQuOrNW.d.cts → conditional-format-Czh2oTzQ.d.cts} +3 -2
- package/dist/{conditional-format-BV2313jL.d.ts → conditional-format-DOdazxWe.d.ts} +3 -2
- package/dist/content.cjs +57 -11
- package/dist/content.d.cts +3 -3
- package/dist/content.d.ts +3 -3
- package/dist/content.js +57 -11
- package/dist/{data-validation-DsVG0Mms.d.ts → data-validation-BXvIVU0e.d.ts} +1 -1
- package/dist/{data-validation-DZPzAW-8.d.cts → data-validation-DfpjUN-N.d.cts} +1 -1
- package/dist/index.cjs +6 -0
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +3 -3
- package/dist/{print-names-DyYloloV.d.cts → print-names-CCwUHAoL.d.cts} +1 -1
- package/dist/{print-names-C-PQ2vAy.d.ts → print-names-CxAbgcjB.d.ts} +1 -1
- package/dist/{records-DVIqXFKk.d.cts → records-G82UEVq8.d.cts} +3 -1
- package/dist/{records-DVIqXFKk.d.ts → records-G82UEVq8.d.ts} +3 -1
- package/dist/{substreams-Cpy5Fi3d.d.cts → substreams-CHv3oWmn.d.cts} +1 -1
- package/dist/{substreams-CmyZMtuM.d.ts → substreams-Dp5cZoUo.d.ts} +1 -1
- package/dist/workbook/comments.d.cts +1 -1
- package/dist/workbook/comments.d.ts +1 -1
- package/dist/workbook/conditional-format-12.cjs +79 -3
- package/dist/workbook/conditional-format-12.d.cts +2 -2
- package/dist/workbook/conditional-format-12.d.ts +2 -2
- package/dist/workbook/conditional-format-12.js +79 -3
- package/dist/workbook/conditional-format.cjs +1 -0
- package/dist/workbook/conditional-format.d.cts +2 -2
- package/dist/workbook/conditional-format.d.ts +2 -2
- package/dist/workbook/conditional-format.js +1 -1
- package/dist/workbook/data-validation.d.cts +1 -1
- package/dist/workbook/data-validation.d.ts +1 -1
- package/dist/workbook/encryption.cjs +78 -0
- package/dist/workbook/encryption.d.cts +10 -0
- package/dist/workbook/encryption.d.ts +10 -0
- package/dist/workbook/encryption.js +77 -0
- package/dist/workbook/globals-writer.d.cts +1 -1
- package/dist/workbook/globals-writer.d.ts +1 -1
- package/dist/workbook/globals.d.cts +2 -2
- package/dist/workbook/globals.d.ts +2 -2
- package/dist/workbook/print-names.d.cts +1 -1
- package/dist/workbook/print-names.d.ts +1 -1
- package/dist/workbook/sheet.d.cts +4 -4
- package/dist/workbook/sheet.d.ts +4 -4
- package/package.json +2 -2
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_biff_record_types = require("../biff/record-types.cjs");
|
|
3
|
+
const require_biff_records = require("../biff/records.cjs");
|
|
4
|
+
const require_biff_cursor = require("../biff/cursor.cjs");
|
|
5
|
+
let archive_codec = require("archive-codec");
|
|
6
|
+
//#region src/workbook/encryption.ts
|
|
7
|
+
/** [MS-XLS] 2.4.117's own wEncryptionType: RC4 encryption, as opposed to 0x0000 (XOR obfuscation, out of scope). */
|
|
8
|
+
const ENCRYPTION_TYPE_RC4 = 1;
|
|
9
|
+
/** [MS-OFFCRYPTO] 2.3.6.1's own EncryptionVersionInfo: vMajor/vMinor MUST both be 1 for the "RC4 encryption header" this module reads. vMajor 2/3/4 with vMinor 2 names the RC4 CryptoAPI encryption header instead (2.3.5.1), a different, unimplemented header shape. */
|
|
10
|
+
const RC4_HEADER_VERSION_MAJOR = 1;
|
|
11
|
+
const RC4_HEADER_VERSION_MINOR = 1;
|
|
12
|
+
/** The first four bytes of a BoundSheet8 record's own data ([MS-XLS] 2.4.28): lbPlyPos, the one field [MS-XLS] 2.2.10 names as never encrypted even though the rest of the record is. */
|
|
13
|
+
const BOUNDSHEET8_LBPLYPOS_SIZE = 4;
|
|
14
|
+
/** [MS-XLS] 2.2.10's own list of records that "MUST NOT be obfuscated or encrypted" wherever they occur in the workbook stream -- BOF and FilePass are checked ahead of this set by their callers, since both matter beyond encryption too. */
|
|
15
|
+
const NEVER_ENCRYPTED_RECORD_TYPES = /* @__PURE__ */ new Set([
|
|
16
|
+
require_biff_record_types.RECORD_BOF,
|
|
17
|
+
47,
|
|
18
|
+
404,
|
|
19
|
+
405,
|
|
20
|
+
225,
|
|
21
|
+
406,
|
|
22
|
+
312
|
|
23
|
+
]);
|
|
24
|
+
/** Reads FilePass's own fields, rejecting the two encryption schemes this module does not implement with a specific message rather than a generic parse failure. */
|
|
25
|
+
function readFilePassRc4Header(filePassRecord) {
|
|
26
|
+
const cursor = new require_biff_cursor.BlockCursor([filePassRecord.data]);
|
|
27
|
+
const encryptionType = cursor.u16();
|
|
28
|
+
if (encryptionType !== ENCRYPTION_TYPE_RC4) throw new require_biff_records.BiffFormatError(`workbook uses FilePass wEncryptionType 0x${encryptionType.toString(16).padStart(4, "0")} (XOR obfuscation), which this reader does not decrypt`);
|
|
29
|
+
const versionMajor = cursor.u16();
|
|
30
|
+
const versionMinor = cursor.u16();
|
|
31
|
+
if (versionMajor !== RC4_HEADER_VERSION_MAJOR || versionMinor !== RC4_HEADER_VERSION_MINOR) throw new require_biff_records.BiffFormatError(`workbook uses RC4 CryptoAPI encryption (EncryptionVersionInfo ${versionMajor}.${versionMinor}), which this reader does not decrypt`);
|
|
32
|
+
return {
|
|
33
|
+
salt: cursor.take(archive_codec.OFFICE_RC4_VERIFIER_LENGTH),
|
|
34
|
+
encryptedVerifier: cursor.take(archive_codec.OFFICE_RC4_VERIFIER_LENGTH),
|
|
35
|
+
encryptedVerifierHash: cursor.take(archive_codec.OFFICE_RC4_VERIFIER_LENGTH)
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/** [MS-OFFCRYPTO] 2.3.6.4's own password verification: block 0's key decrypts EncryptedVerifier, and MD5 of the result must equal the same block's decryption of EncryptedVerifierHash. Both verifier fields sit in one continuous keystream starting at position 0, not two independently-reset ones -- though decryptOfficeRc4 regenerates its keystream fresh from block start on every call regardless, so decrypting them as two separate 16-byte calls at offsets 0 and 16 is equivalent to one 32-byte call, not merely close to it. */
|
|
39
|
+
function verifyOfficeRc4Password(baseHash, header) {
|
|
40
|
+
const decryptedVerifier = (0, archive_codec.decryptOfficeRc4)(baseHash, 0, header.encryptedVerifier);
|
|
41
|
+
const decryptedVerifierHash = (0, archive_codec.decryptOfficeRc4)(baseHash, archive_codec.OFFICE_RC4_VERIFIER_LENGTH, header.encryptedVerifierHash);
|
|
42
|
+
const computedHash = (0, archive_codec.md5)(decryptedVerifier);
|
|
43
|
+
if (!(computedHash.length === decryptedVerifierHash.length && computedHash.every((byte, index) => byte === decryptedVerifierHash[index]))) throw new require_biff_records.BiffFormatError("incorrect password for RC4-encrypted workbook");
|
|
44
|
+
}
|
|
45
|
+
/** Decrypts one record's own data in place against the derived base hash, honouring every [MS-XLS] 2.2.10 exclusion: a never-encrypted record's data is returned unchanged, BoundSheet8's own lbPlyPos prefix is preserved while the rest of its data is decrypted, and everything else is decrypted whole. `record.offset` is the record's own header start, so its data begins `HEADER_SIZE` bytes further into the stream -- the position [MS-OFFCRYPTO]'s block-keyed keystream is defined against. */
|
|
46
|
+
function decryptRecord(record, baseHash) {
|
|
47
|
+
if (NEVER_ENCRYPTED_RECORD_TYPES.has(record.type)) return record;
|
|
48
|
+
const dataOffset = record.offset + 4;
|
|
49
|
+
if (record.type === 133) {
|
|
50
|
+
const lbPlyPos = record.data.subarray(0, BOUNDSHEET8_LBPLYPOS_SIZE);
|
|
51
|
+
const decryptedRest = (0, archive_codec.decryptOfficeRc4)(baseHash, dataOffset + BOUNDSHEET8_LBPLYPOS_SIZE, record.data.subarray(BOUNDSHEET8_LBPLYPOS_SIZE));
|
|
52
|
+
const data = new Uint8Array(record.data.length);
|
|
53
|
+
data.set(lbPlyPos, 0);
|
|
54
|
+
data.set(decryptedRest, BOUNDSHEET8_LBPLYPOS_SIZE);
|
|
55
|
+
return {
|
|
56
|
+
...record,
|
|
57
|
+
data
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
...record,
|
|
62
|
+
data: (0, archive_codec.decryptOfficeRc4)(baseHash, dataOffset, record.data)
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Decrypts every record of a workbook stream protected by [MS-OFFCRYPTO] 2.3.6.1's RC4 encryption header, given the `FilePass` record already located within `records` and the password to decrypt it with.
|
|
67
|
+
*
|
|
68
|
+
* Throws `BiffFormatError` for a missing password, an incorrect one, or an encryption scheme this module does not implement (RC4 CryptoAPI, XOR obfuscation) -- there is no partial or best-effort result to return in any of those cases.
|
|
69
|
+
*/
|
|
70
|
+
function decryptWorkbookRecords(records, filePassRecord, password) {
|
|
71
|
+
const header = readFilePassRc4Header(filePassRecord);
|
|
72
|
+
if (password === void 0) throw new require_biff_records.BiffFormatError("workbook is RC4-encrypted (FilePass record); call readXlsContent with a password to decrypt it");
|
|
73
|
+
const baseHash = (0, archive_codec.deriveOfficeRc4BaseHash)(password, header.salt);
|
|
74
|
+
verifyOfficeRc4Password(baseHash, header);
|
|
75
|
+
return records.map((record) => decryptRecord(record, baseHash));
|
|
76
|
+
}
|
|
77
|
+
//#endregion
|
|
78
|
+
exports.decryptWorkbookRecords = decryptWorkbookRecords;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { n as BiffRecord } from "../records-G82UEVq8.cjs";
|
|
2
|
+
//#region src/workbook/encryption.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Decrypts every record of a workbook stream protected by [MS-OFFCRYPTO] 2.3.6.1's RC4 encryption header, given the `FilePass` record already located within `records` and the password to decrypt it with.
|
|
5
|
+
*
|
|
6
|
+
* Throws `BiffFormatError` for a missing password, an incorrect one, or an encryption scheme this module does not implement (RC4 CryptoAPI, XOR obfuscation) -- there is no partial or best-effort result to return in any of those cases.
|
|
7
|
+
*/
|
|
8
|
+
declare function decryptWorkbookRecords(records: readonly BiffRecord[], filePassRecord: BiffRecord, password: string | undefined): readonly BiffRecord[];
|
|
9
|
+
//#endregion
|
|
10
|
+
export { decryptWorkbookRecords };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { n as BiffRecord } from "../records-G82UEVq8.js";
|
|
2
|
+
//#region src/workbook/encryption.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Decrypts every record of a workbook stream protected by [MS-OFFCRYPTO] 2.3.6.1's RC4 encryption header, given the `FilePass` record already located within `records` and the password to decrypt it with.
|
|
5
|
+
*
|
|
6
|
+
* Throws `BiffFormatError` for a missing password, an incorrect one, or an encryption scheme this module does not implement (RC4 CryptoAPI, XOR obfuscation) -- there is no partial or best-effort result to return in any of those cases.
|
|
7
|
+
*/
|
|
8
|
+
declare function decryptWorkbookRecords(records: readonly BiffRecord[], filePassRecord: BiffRecord, password: string | undefined): readonly BiffRecord[];
|
|
9
|
+
//#endregion
|
|
10
|
+
export { decryptWorkbookRecords };
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { RECORD_BOF } from "../biff/record-types.js";
|
|
2
|
+
import { BiffFormatError } from "../biff/records.js";
|
|
3
|
+
import { BlockCursor } from "../biff/cursor.js";
|
|
4
|
+
import { OFFICE_RC4_VERIFIER_LENGTH, decryptOfficeRc4, deriveOfficeRc4BaseHash, md5 } from "archive-codec";
|
|
5
|
+
//#region src/workbook/encryption.ts
|
|
6
|
+
/** [MS-XLS] 2.4.117's own wEncryptionType: RC4 encryption, as opposed to 0x0000 (XOR obfuscation, out of scope). */
|
|
7
|
+
const ENCRYPTION_TYPE_RC4 = 1;
|
|
8
|
+
/** [MS-OFFCRYPTO] 2.3.6.1's own EncryptionVersionInfo: vMajor/vMinor MUST both be 1 for the "RC4 encryption header" this module reads. vMajor 2/3/4 with vMinor 2 names the RC4 CryptoAPI encryption header instead (2.3.5.1), a different, unimplemented header shape. */
|
|
9
|
+
const RC4_HEADER_VERSION_MAJOR = 1;
|
|
10
|
+
const RC4_HEADER_VERSION_MINOR = 1;
|
|
11
|
+
/** The first four bytes of a BoundSheet8 record's own data ([MS-XLS] 2.4.28): lbPlyPos, the one field [MS-XLS] 2.2.10 names as never encrypted even though the rest of the record is. */
|
|
12
|
+
const BOUNDSHEET8_LBPLYPOS_SIZE = 4;
|
|
13
|
+
/** [MS-XLS] 2.2.10's own list of records that "MUST NOT be obfuscated or encrypted" wherever they occur in the workbook stream -- BOF and FilePass are checked ahead of this set by their callers, since both matter beyond encryption too. */
|
|
14
|
+
const NEVER_ENCRYPTED_RECORD_TYPES = /* @__PURE__ */ new Set([
|
|
15
|
+
RECORD_BOF,
|
|
16
|
+
47,
|
|
17
|
+
404,
|
|
18
|
+
405,
|
|
19
|
+
225,
|
|
20
|
+
406,
|
|
21
|
+
312
|
|
22
|
+
]);
|
|
23
|
+
/** Reads FilePass's own fields, rejecting the two encryption schemes this module does not implement with a specific message rather than a generic parse failure. */
|
|
24
|
+
function readFilePassRc4Header(filePassRecord) {
|
|
25
|
+
const cursor = new BlockCursor([filePassRecord.data]);
|
|
26
|
+
const encryptionType = cursor.u16();
|
|
27
|
+
if (encryptionType !== ENCRYPTION_TYPE_RC4) throw new BiffFormatError(`workbook uses FilePass wEncryptionType 0x${encryptionType.toString(16).padStart(4, "0")} (XOR obfuscation), which this reader does not decrypt`);
|
|
28
|
+
const versionMajor = cursor.u16();
|
|
29
|
+
const versionMinor = cursor.u16();
|
|
30
|
+
if (versionMajor !== RC4_HEADER_VERSION_MAJOR || versionMinor !== RC4_HEADER_VERSION_MINOR) throw new BiffFormatError(`workbook uses RC4 CryptoAPI encryption (EncryptionVersionInfo ${versionMajor}.${versionMinor}), which this reader does not decrypt`);
|
|
31
|
+
return {
|
|
32
|
+
salt: cursor.take(OFFICE_RC4_VERIFIER_LENGTH),
|
|
33
|
+
encryptedVerifier: cursor.take(OFFICE_RC4_VERIFIER_LENGTH),
|
|
34
|
+
encryptedVerifierHash: cursor.take(OFFICE_RC4_VERIFIER_LENGTH)
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** [MS-OFFCRYPTO] 2.3.6.4's own password verification: block 0's key decrypts EncryptedVerifier, and MD5 of the result must equal the same block's decryption of EncryptedVerifierHash. Both verifier fields sit in one continuous keystream starting at position 0, not two independently-reset ones -- though decryptOfficeRc4 regenerates its keystream fresh from block start on every call regardless, so decrypting them as two separate 16-byte calls at offsets 0 and 16 is equivalent to one 32-byte call, not merely close to it. */
|
|
38
|
+
function verifyOfficeRc4Password(baseHash, header) {
|
|
39
|
+
const decryptedVerifier = decryptOfficeRc4(baseHash, 0, header.encryptedVerifier);
|
|
40
|
+
const decryptedVerifierHash = decryptOfficeRc4(baseHash, OFFICE_RC4_VERIFIER_LENGTH, header.encryptedVerifierHash);
|
|
41
|
+
const computedHash = md5(decryptedVerifier);
|
|
42
|
+
if (!(computedHash.length === decryptedVerifierHash.length && computedHash.every((byte, index) => byte === decryptedVerifierHash[index]))) throw new BiffFormatError("incorrect password for RC4-encrypted workbook");
|
|
43
|
+
}
|
|
44
|
+
/** Decrypts one record's own data in place against the derived base hash, honouring every [MS-XLS] 2.2.10 exclusion: a never-encrypted record's data is returned unchanged, BoundSheet8's own lbPlyPos prefix is preserved while the rest of its data is decrypted, and everything else is decrypted whole. `record.offset` is the record's own header start, so its data begins `HEADER_SIZE` bytes further into the stream -- the position [MS-OFFCRYPTO]'s block-keyed keystream is defined against. */
|
|
45
|
+
function decryptRecord(record, baseHash) {
|
|
46
|
+
if (NEVER_ENCRYPTED_RECORD_TYPES.has(record.type)) return record;
|
|
47
|
+
const dataOffset = record.offset + 4;
|
|
48
|
+
if (record.type === 133) {
|
|
49
|
+
const lbPlyPos = record.data.subarray(0, BOUNDSHEET8_LBPLYPOS_SIZE);
|
|
50
|
+
const decryptedRest = decryptOfficeRc4(baseHash, dataOffset + BOUNDSHEET8_LBPLYPOS_SIZE, record.data.subarray(BOUNDSHEET8_LBPLYPOS_SIZE));
|
|
51
|
+
const data = new Uint8Array(record.data.length);
|
|
52
|
+
data.set(lbPlyPos, 0);
|
|
53
|
+
data.set(decryptedRest, BOUNDSHEET8_LBPLYPOS_SIZE);
|
|
54
|
+
return {
|
|
55
|
+
...record,
|
|
56
|
+
data
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
...record,
|
|
61
|
+
data: decryptOfficeRc4(baseHash, dataOffset, record.data)
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Decrypts every record of a workbook stream protected by [MS-OFFCRYPTO] 2.3.6.1's RC4 encryption header, given the `FilePass` record already located within `records` and the password to decrypt it with.
|
|
66
|
+
*
|
|
67
|
+
* Throws `BiffFormatError` for a missing password, an incorrect one, or an encryption scheme this module does not implement (RC4 CryptoAPI, XOR obfuscation) -- there is no partial or best-effort result to return in any of those cases.
|
|
68
|
+
*/
|
|
69
|
+
function decryptWorkbookRecords(records, filePassRecord, password) {
|
|
70
|
+
const header = readFilePassRc4Header(filePassRecord);
|
|
71
|
+
if (password === void 0) throw new BiffFormatError("workbook is RC4-encrypted (FilePass record); call readXlsContent with a password to decrypt it");
|
|
72
|
+
const baseHash = deriveOfficeRc4BaseHash(password, header.salt);
|
|
73
|
+
verifyOfficeRc4Password(baseHash, header);
|
|
74
|
+
return records.map((record) => decryptRecord(record, baseHash));
|
|
75
|
+
}
|
|
76
|
+
//#endregion
|
|
77
|
+
export { decryptWorkbookRecords };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { E as XfDecorationFields } from "../xf-colors-mqerVt2O.cjs";
|
|
2
|
-
import { t as PrintNamePlanEntry } from "../print-names-
|
|
2
|
+
import { t as PrintNamePlanEntry } from "../print-names-CCwUHAoL.cjs";
|
|
3
3
|
import { Alignment, Color } from "document-schema.js";
|
|
4
4
|
//#region src/workbook/globals-writer.d.ts
|
|
5
5
|
/** [MS-XLS] 2.1.7.20.3's own XFS production requires at least sixteen XF records before any cell can reference one: BUILTIN_STYLES.length built-in cell styles, then at least one cell XF -- the "General, no declared format" one every workbook needs unconditionally, written immediately after them. Derived from BUILTIN_STYLES's own length rather than restated as a literal, so the two can never drift apart. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { E as XfDecorationFields } from "../xf-colors-d3OvRw76.js";
|
|
2
|
-
import { t as PrintNamePlanEntry } from "../print-names-
|
|
2
|
+
import { t as PrintNamePlanEntry } from "../print-names-CxAbgcjB.js";
|
|
3
3
|
import { Alignment, Color } from "document-schema.js";
|
|
4
4
|
//#region src/workbook/globals-writer.d.ts
|
|
5
5
|
/** [MS-XLS] 2.1.7.20.3's own XFS production requires at least sixteen XF records before any cell can reference one: BUILTIN_STYLES.length built-in cell styles, then at least one cell XF -- the "General, no declared format" one every workbook needs unconditionally, written immediately after them. Derived from BUILTIN_STYLES's own length rather than restated as a literal, so the two can never drift apart. */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { a as SheetRange, t as ExternalSheetLabel } from "../ptg-CCBbJLZJ.cjs";
|
|
2
|
-
import { t as RecordGroup } from "../substreams-
|
|
2
|
+
import { t as RecordGroup } from "../substreams-CHv3oWmn.cjs";
|
|
3
3
|
import { E as XfDecorationFields, w as XfAlignmentFields } from "../xf-colors-mqerVt2O.cjs";
|
|
4
|
-
import { n as SheetPrintNames } from "../print-names-
|
|
4
|
+
import { n as SheetPrintNames } from "../print-names-CCwUHAoL.cjs";
|
|
5
5
|
import { Color } from "document-schema.js";
|
|
6
6
|
//#region src/workbook/globals.d.ts
|
|
7
7
|
/** One sheet, as its BoundSheet8 record describes it ([MS-XLS] 2.4.28). */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { a as SheetRange, t as ExternalSheetLabel } from "../ptg-CCBbJLZJ.js";
|
|
2
|
-
import { t as RecordGroup } from "../substreams-
|
|
2
|
+
import { t as RecordGroup } from "../substreams-Dp5cZoUo.js";
|
|
3
3
|
import { E as XfDecorationFields, w as XfAlignmentFields } from "../xf-colors-d3OvRw76.js";
|
|
4
|
-
import { n as SheetPrintNames } from "../print-names-
|
|
4
|
+
import { n as SheetPrintNames } from "../print-names-CxAbgcjB.js";
|
|
5
5
|
import { Color } from "document-schema.js";
|
|
6
6
|
//#region src/workbook/globals.d.ts
|
|
7
7
|
/** One sheet, as its BoundSheet8 record describes it ([MS-XLS] 2.4.28). */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as writePrintNameRecords, i as readPrintNames, n as SheetPrintNames, r as printNameEntriesFor, t as PrintNamePlanEntry } from "../print-names-
|
|
1
|
+
import { a as writePrintNameRecords, i as readPrintNames, n as SheetPrintNames, r as printNameEntriesFor, t as PrintNamePlanEntry } from "../print-names-CCwUHAoL.cjs";
|
|
2
2
|
export { PrintNamePlanEntry, SheetPrintNames, printNameEntriesFor, readPrintNames, writePrintNameRecords };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as writePrintNameRecords, i as readPrintNames, n as SheetPrintNames, r as printNameEntriesFor, t as PrintNamePlanEntry } from "../print-names-
|
|
1
|
+
import { a as writePrintNameRecords, i as readPrintNames, n as SheetPrintNames, r as printNameEntriesFor, t as PrintNamePlanEntry } from "../print-names-CxAbgcjB.js";
|
|
2
2
|
export { PrintNamePlanEntry, SheetPrintNames, printNameEntriesFor, readPrintNames, writePrintNameRecords };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { n as SetupFields } from "../print-setup-B_ihDvm5.cjs";
|
|
2
2
|
import { r as FormulaSheetContext } from "../ptg-CCBbJLZJ.cjs";
|
|
3
|
-
import { t as RecordGroup } from "../substreams-
|
|
4
|
-
import { n as RawConditionalFormat } from "../conditional-format-
|
|
5
|
-
import {
|
|
6
|
-
import { t as RawDataValidation } from "../data-validation-
|
|
3
|
+
import { t as RecordGroup } from "../substreams-CHv3oWmn.cjs";
|
|
4
|
+
import { n as RawConditionalFormat } from "../conditional-format-Czh2oTzQ.cjs";
|
|
5
|
+
import { a as RawConditionalFormat12 } from "../conditional-format-12-DBhe7Zo6.cjs";
|
|
6
|
+
import { t as RawDataValidation } from "../data-validation-DfpjUN-N.cjs";
|
|
7
7
|
//#region src/workbook/sheet.d.ts
|
|
8
8
|
/** A cell's value as its own record carries it, before number-format classification decides whether a number is really a date, a percentage, or an amount of money. */
|
|
9
9
|
type RawCellValue = {
|
package/dist/workbook/sheet.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { n as SetupFields } from "../print-setup-B_ihDvm5.js";
|
|
2
2
|
import { r as FormulaSheetContext } from "../ptg-CCBbJLZJ.js";
|
|
3
|
-
import { t as RecordGroup } from "../substreams-
|
|
4
|
-
import { n as RawConditionalFormat } from "../conditional-format-
|
|
5
|
-
import {
|
|
6
|
-
import { t as RawDataValidation } from "../data-validation-
|
|
3
|
+
import { t as RecordGroup } from "../substreams-Dp5cZoUo.js";
|
|
4
|
+
import { n as RawConditionalFormat } from "../conditional-format-DOdazxWe.js";
|
|
5
|
+
import { a as RawConditionalFormat12 } from "../conditional-format-12-D-X5g_O3.js";
|
|
6
|
+
import { t as RawDataValidation } from "../data-validation-BXvIVU0e.js";
|
|
7
7
|
//#region src/workbook/sheet.d.ts
|
|
8
8
|
/** A cell's value as its own record carries it, before number-format classification decides whether a number is really a date, a percentage, or an amount of money. */
|
|
9
9
|
type RawCellValue = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xls-codec",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.7.0",
|
|
4
4
|
"description": "Hand-written reader for the legacy Excel Binary File Format (.xls, BIFF8) as specified by [MS-XLS], mapping a workbook's record stream onto the shared document-schema.js spreadsheet model - the .xls codec for the documents.js family.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
},
|
|
71
71
|
"packageManager": "pnpm@11.6.0",
|
|
72
72
|
"dependencies": {
|
|
73
|
-
"archive-codec": "^1.
|
|
73
|
+
"archive-codec": "^1.7.0",
|
|
74
74
|
"document-schema.js": "^7.3.0",
|
|
75
75
|
"excel-number-format": "^1.1.0"
|
|
76
76
|
},
|