chmlib-ts 0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.js","sourceRoot":"","sources":["../src/reader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,yEAAyE;AACzE,MAAM,UAAU,mBAAmB,CAAC,IAAgB;IAClD,OAAO;QACL,IAAI,CAAC,MAAc,EAAE,MAAc;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAClD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACjD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,mEAAmE;IACnE,IAAI,aAAa,GAAqD,IAAI,CAAC;IAE3E,SAAS,SAAS;QAChB,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,MAAc;YACvC,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACxE,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAClD,CAAC;QACD,KAAK,CAAC,KAAK;YACT,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBACnC,aAAa,GAAG,IAAI,CAAC;gBACrB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface ChmSystemInfo {
2
+ tocFile?: string;
3
+ indexFile?: string;
4
+ defaultTopic?: string;
5
+ title?: string;
6
+ defaultWindow?: string;
7
+ compiledFile?: string;
8
+ binaryToc?: boolean;
9
+ binaryIndex?: boolean;
10
+ compilerVersion?: string;
11
+ defaultFont?: string;
12
+ }
13
+ /**
14
+ * Parse the /#SYSTEM binary file from a CHM archive.
15
+ * Format: a sequence of (type: uint16, length: uint16, data: bytes) records.
16
+ */
17
+ export declare function parseSystemInfo(data: Uint8Array): ChmSystemInfo;
18
+ //# sourceMappingURL=system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../src/system.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,CA2D/D"}
package/dist/system.js ADDED
@@ -0,0 +1,69 @@
1
+ import { BufferReader } from './buffer-reader.js';
2
+ /**
3
+ * Parse the /#SYSTEM binary file from a CHM archive.
4
+ * Format: a sequence of (type: uint16, length: uint16, data: bytes) records.
5
+ */
6
+ export function parseSystemInfo(data) {
7
+ const r = new BufferReader(data);
8
+ const info = {};
9
+ // First 4 bytes are a version/unknown field
10
+ if (r.remaining < 4)
11
+ return info;
12
+ r.readUint32LE(); // version / unknown
13
+ while (r.remaining >= 4) {
14
+ const code = r.readUint16LE();
15
+ const len = r.readUint16LE();
16
+ if (r.remaining < len)
17
+ break;
18
+ const fieldData = r.readBytes(len);
19
+ switch (code) {
20
+ case 0: // TOC file path
21
+ info.tocFile = decodeNullTerminated(fieldData);
22
+ break;
23
+ case 1: // Index file path
24
+ info.indexFile = decodeNullTerminated(fieldData);
25
+ break;
26
+ case 2: // Default topic
27
+ info.defaultTopic = decodeNullTerminated(fieldData);
28
+ break;
29
+ case 3: // Title
30
+ info.title = decodeNullTerminated(fieldData);
31
+ break;
32
+ case 4: // Default window
33
+ info.defaultWindow = decodeNullTerminated(fieldData);
34
+ break;
35
+ case 5: // Compiled file
36
+ info.compiledFile = decodeNullTerminated(fieldData);
37
+ break;
38
+ case 6: // Binary TOC flag
39
+ if (fieldData.length >= 4) {
40
+ const r2 = new BufferReader(fieldData);
41
+ info.binaryToc = r2.readUint32LE() !== 0;
42
+ }
43
+ break;
44
+ case 7: // Binary index flag
45
+ if (fieldData.length >= 4) {
46
+ const r2 = new BufferReader(fieldData);
47
+ info.binaryIndex = r2.readUint32LE() !== 0;
48
+ }
49
+ break;
50
+ case 9: // Compiler version
51
+ info.compilerVersion = decodeNullTerminated(fieldData);
52
+ break;
53
+ case 16: // Default font
54
+ info.defaultFont = decodeNullTerminated(fieldData);
55
+ break;
56
+ default:
57
+ // Unknown field, skip
58
+ break;
59
+ }
60
+ }
61
+ return info;
62
+ }
63
+ function decodeNullTerminated(data) {
64
+ let len = data.length;
65
+ while (len > 0 && data[len - 1] === 0)
66
+ len--;
67
+ return new TextDecoder('utf-8').decode(data.subarray(0, len));
68
+ }
69
+ //# sourceMappingURL=system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../src/system.ts"],"names":[],"mappings":"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"}
package/dist/toc.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export interface ChmTocEntry {
2
+ name: string;
3
+ local?: string;
4
+ children: ChmTocEntry[];
5
+ }
6
+ export interface ChmToc {
7
+ entries: ChmTocEntry[];
8
+ }
9
+ /**
10
+ * Parse a CHM .hhc / .hhk HTML sitemap file into a tree structure.
11
+ * Format: HTML with <ul>/<li>/<object type="text/sitemap"> elements.
12
+ */
13
+ export declare function parseToc(html: string): ChmToc;
14
+ //# sourceMappingURL=toc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toc.d.ts","sourceRoot":"","sources":["../src/toc.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7C"}
package/dist/toc.js ADDED
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Parse a CHM .hhc / .hhk HTML sitemap file into a tree structure.
3
+ * Format: HTML with <ul>/<li>/<object type="text/sitemap"> elements.
4
+ */
5
+ export function parseToc(html) {
6
+ const entries = parseLevel(html, 0).entries;
7
+ return { entries };
8
+ }
9
+ function parseLevel(html, startPos) {
10
+ const entries = [];
11
+ let pos = startPos;
12
+ const len = html.length;
13
+ while (pos < len) {
14
+ // Find next tag
15
+ const tagStart = html.indexOf('<', pos);
16
+ if (tagStart === -1)
17
+ break;
18
+ const tagEnd = html.indexOf('>', tagStart);
19
+ if (tagEnd === -1)
20
+ break;
21
+ const tag = html.slice(tagStart, tagEnd + 1);
22
+ const tagLower = tag.toLowerCase();
23
+ if (tagLower.startsWith('<li')) {
24
+ // Parse a list item
25
+ pos = tagEnd + 1;
26
+ const entry = parseListItem(html, pos);
27
+ entries.push(entry.entry);
28
+ pos = entry.endPos;
29
+ }
30
+ else if (tagLower.startsWith('</ul') || tagLower.startsWith('</ol')) {
31
+ // End of list
32
+ return { entries, endPos: tagEnd + 1 };
33
+ }
34
+ else if (tagLower.startsWith('<ul') || tagLower.startsWith('<ol')) {
35
+ // Start of nested list (unexpected at this level)
36
+ pos = tagEnd + 1;
37
+ }
38
+ else {
39
+ pos = tagEnd + 1;
40
+ }
41
+ }
42
+ return { entries, endPos: len };
43
+ }
44
+ function parseListItem(html, startPos) {
45
+ const len = html.length;
46
+ let pos = startPos;
47
+ let name = '';
48
+ let local;
49
+ const children = [];
50
+ while (pos < len) {
51
+ const tagStart = html.indexOf('<', pos);
52
+ if (tagStart === -1)
53
+ break;
54
+ const tagEnd = html.indexOf('>', tagStart);
55
+ if (tagEnd === -1)
56
+ break;
57
+ const tag = html.slice(tagStart, tagEnd + 1);
58
+ const tagLower = tag.toLowerCase();
59
+ if (tagLower.includes('type="text/sitemap"') || tagLower.includes("type='text/sitemap'")) {
60
+ // Parse <object type="text/sitemap">...</object>
61
+ pos = tagEnd + 1;
62
+ const objResult = parseObject(html, pos);
63
+ name = objResult.name ?? name;
64
+ local = objResult.local ?? local;
65
+ pos = objResult.endPos;
66
+ }
67
+ else if (tagLower.startsWith('<ul') || tagLower.startsWith('<ol')) {
68
+ // Nested list = children
69
+ pos = tagEnd + 1;
70
+ const childResult = parseLevel(html, pos);
71
+ children.push(...childResult.entries);
72
+ pos = childResult.endPos;
73
+ }
74
+ else if (tagLower.startsWith('</li')) {
75
+ pos = tagEnd + 1;
76
+ break;
77
+ }
78
+ else if (tagLower.startsWith('<li')) {
79
+ // Next sibling item - don't consume
80
+ break;
81
+ }
82
+ else if (tagLower.startsWith('</ul') || tagLower.startsWith('</ol')) {
83
+ // End of parent list - don't consume
84
+ break;
85
+ }
86
+ else {
87
+ pos = tagEnd + 1;
88
+ }
89
+ }
90
+ const entry = { name, children };
91
+ if (local !== undefined)
92
+ entry.local = local;
93
+ return { entry, endPos: pos };
94
+ }
95
+ function parseObject(html, startPos) {
96
+ const len = html.length;
97
+ let pos = startPos;
98
+ let name;
99
+ let local;
100
+ while (pos < len) {
101
+ const tagStart = html.indexOf('<', pos);
102
+ if (tagStart === -1)
103
+ break;
104
+ const tagEnd = html.indexOf('>', tagStart);
105
+ if (tagEnd === -1)
106
+ break;
107
+ const tag = html.slice(tagStart, tagEnd + 1);
108
+ const tagLower = tag.toLowerCase();
109
+ if (tagLower.startsWith('<param')) {
110
+ const nameAttr = extractAttr(tag, 'name');
111
+ const valueAttr = extractAttr(tag, 'value');
112
+ if (nameAttr !== null && valueAttr !== null) {
113
+ const n = nameAttr.toLowerCase();
114
+ if (n === 'name')
115
+ name = valueAttr;
116
+ else if (n === 'local')
117
+ local = valueAttr;
118
+ }
119
+ pos = tagEnd + 1;
120
+ }
121
+ else if (tagLower.startsWith('</object')) {
122
+ pos = tagEnd + 1;
123
+ break;
124
+ }
125
+ else {
126
+ pos = tagEnd + 1;
127
+ }
128
+ }
129
+ return { name, local, endPos: pos };
130
+ }
131
+ function extractAttr(tag, attrName) {
132
+ const re = new RegExp(`${attrName}\\s*=\\s*(?:"([^"]*)"|\\'([^\\']*)\\'|(\\S+))`, 'i');
133
+ const m = re.exec(tag);
134
+ if (!m)
135
+ return null;
136
+ return m[1] ?? m[2] ?? m[3] ?? null;
137
+ }
138
+ //# sourceMappingURL=toc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toc.js","sourceRoot":"","sources":["../src/toc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ export interface ChmUnitInfo {
2
+ start: bigint;
3
+ length: bigint;
4
+ space: ChmSpace;
5
+ flags: number;
6
+ path: string;
7
+ }
8
+ export declare enum ChmSpace {
9
+ Uncompressed = 0,
10
+ Compressed = 1
11
+ }
12
+ export declare enum ChmEnumerateFlags {
13
+ Normal = 1,
14
+ Meta = 2,
15
+ Special = 4,
16
+ Files = 8,
17
+ Dirs = 16,
18
+ All = 31
19
+ }
20
+ export interface ItsfHeader {
21
+ signature: string;
22
+ version: number;
23
+ headerLen: number;
24
+ lastModified: number;
25
+ langId: number;
26
+ dirUuid: Uint8Array;
27
+ streamUuid: Uint8Array;
28
+ unknownOffset: bigint;
29
+ unknownLen: bigint;
30
+ dirOffset: bigint;
31
+ dirLen: bigint;
32
+ dataOffset: bigint;
33
+ }
34
+ export interface ItspHeader {
35
+ signature: string;
36
+ version: number;
37
+ headerLen: number;
38
+ blockLen: number;
39
+ blockidxIntvl: number;
40
+ indexDepth: number;
41
+ indexRoot: number;
42
+ indexHead: number;
43
+ numBlocks: number;
44
+ langId: number;
45
+ systemUuid: Uint8Array;
46
+ }
47
+ export interface PmglHeader {
48
+ signature: string;
49
+ freeSpace: number;
50
+ blockPrev: number;
51
+ blockNext: number;
52
+ }
53
+ export interface PmgiHeader {
54
+ signature: string;
55
+ freeSpace: number;
56
+ }
57
+ export interface LzxcResetTable {
58
+ version: number;
59
+ blockCount: number;
60
+ tableOffset: number;
61
+ uncompressedLen: bigint;
62
+ compressedLen: bigint;
63
+ blockLen: bigint;
64
+ }
65
+ export interface LzxcControlData {
66
+ size: number;
67
+ signature: string;
68
+ version: number;
69
+ resetInterval: number;
70
+ windowSize: number;
71
+ windowsPerReset: number;
72
+ }
73
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,oBAAY,QAAQ;IAClB,YAAY,IAAI;IAChB,UAAU,IAAI;CACf;AAED,oBAAY,iBAAiB;IAC3B,MAAM,IAAM;IACZ,IAAI,IAAQ;IACZ,OAAO,IAAK;IACZ,KAAK,IAAO;IACZ,IAAI,KAAS;IACb,GAAG,KAAU;CACd;AAID,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,UAAU,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB"}
package/dist/types.js ADDED
@@ -0,0 +1,16 @@
1
+ // Public types
2
+ export var ChmSpace;
3
+ (function (ChmSpace) {
4
+ ChmSpace[ChmSpace["Uncompressed"] = 0] = "Uncompressed";
5
+ ChmSpace[ChmSpace["Compressed"] = 1] = "Compressed";
6
+ })(ChmSpace || (ChmSpace = {}));
7
+ export var ChmEnumerateFlags;
8
+ (function (ChmEnumerateFlags) {
9
+ ChmEnumerateFlags[ChmEnumerateFlags["Normal"] = 1] = "Normal";
10
+ ChmEnumerateFlags[ChmEnumerateFlags["Meta"] = 2] = "Meta";
11
+ ChmEnumerateFlags[ChmEnumerateFlags["Special"] = 4] = "Special";
12
+ ChmEnumerateFlags[ChmEnumerateFlags["Files"] = 8] = "Files";
13
+ ChmEnumerateFlags[ChmEnumerateFlags["Dirs"] = 16] = "Dirs";
14
+ ChmEnumerateFlags[ChmEnumerateFlags["All"] = 31] = "All";
15
+ })(ChmEnumerateFlags || (ChmEnumerateFlags = {}));
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,eAAe;AAUf,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,uDAAgB,CAAA;IAChB,mDAAc,CAAA;AAChB,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAED,MAAM,CAAN,IAAY,iBAOX;AAPD,WAAY,iBAAiB;IAC3B,6DAAY,CAAA;IACZ,yDAAY,CAAA;IACZ,+DAAY,CAAA;IACZ,2DAAY,CAAA;IACZ,0DAAa,CAAA;IACb,wDAAa,CAAA;AACf,CAAC,EAPW,iBAAiB,KAAjB,iBAAiB,QAO5B"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "chmlib-ts",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript port of chmlib - CHM archive reader",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ },
13
+ "./reader": {
14
+ "import": "./dist/reader.js",
15
+ "types": "./dist/reader.d.ts"
16
+ },
17
+ "./system": {
18
+ "import": "./dist/system.js",
19
+ "types": "./dist/system.d.ts"
20
+ },
21
+ "./toc": {
22
+ "import": "./dist/toc.js",
23
+ "types": "./dist/toc.d.ts"
24
+ },
25
+ "./types": {
26
+ "import": "./dist/types.js",
27
+ "types": "./dist/types.d.ts"
28
+ }
29
+ },
30
+ "bin": "dist/cli.js",
31
+ "files": [
32
+ "dist",
33
+ "README.md",
34
+ "COPYING"
35
+ ],
36
+ "scripts": {
37
+ "build": "node ./scripts/build.mjs",
38
+ "prepack": "npm run build",
39
+ "test": "vitest run",
40
+ "test:watch": "vitest"
41
+ },
42
+ "devDependencies": {
43
+ "@types/node": "^22.0.0",
44
+ "typescript": "^5.6.0",
45
+ "vitest": "^2.0.0"
46
+ },
47
+ "license": "LGPL-2.1"
48
+ }