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.
- package/COPYING +510 -0
- package/README.md +126 -0
- package/dist/buffer-reader.d.ts +25 -0
- package/dist/buffer-reader.d.ts.map +1 -0
- package/dist/buffer-reader.js +96 -0
- package/dist/buffer-reader.js.map +1 -0
- package/dist/chm-file.d.ts +60 -0
- package/dist/chm-file.d.ts.map +1 -0
- package/dist/chm-file.js +404 -0
- package/dist/chm-file.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +214 -0
- package/dist/cli.js.map +1 -0
- package/dist/headers.d.ts +8 -0
- package/dist/headers.d.ts.map +1 -0
- package/dist/headers.js +164 -0
- package/dist/headers.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/lzx.d.ts +40 -0
- package/dist/lzx.d.ts.map +1 -0
- package/dist/lzx.js +571 -0
- package/dist/lzx.js.map +1 -0
- package/dist/reader.d.ts +13 -0
- package/dist/reader.d.ts.map +1 -0
- package/dist/reader.js +41 -0
- package/dist/reader.js.map +1 -0
- package/dist/system.d.ts +18 -0
- package/dist/system.d.ts.map +1 -0
- package/dist/system.js +69 -0
- package/dist/system.js.map +1 -0
- package/dist/toc.d.ts +14 -0
- package/dist/toc.d.ts.map +1 -0
- package/dist/toc.js +138 -0
- package/dist/toc.js.map +1 -0
- package/dist/types.d.ts +73 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -0
- package/dist/types.js.map +1 -0
- package/package.json +48 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { ChmFile } from './chm-file.js';
|
|
3
|
+
import { chmReaderFromFile } from './reader.js';
|
|
4
|
+
import { ChmEnumerateFlags } from './types.js';
|
|
5
|
+
import { parseSystemInfo } from './system.js';
|
|
6
|
+
import { parseToc } from './toc.js';
|
|
7
|
+
import { promises as fs } from 'fs';
|
|
8
|
+
import { join, dirname } from 'path';
|
|
9
|
+
const args = process.argv.slice(2);
|
|
10
|
+
function usage() {
|
|
11
|
+
console.error(`Usage:
|
|
12
|
+
chmlib-ts info <file.chm> Show archive metadata
|
|
13
|
+
chmlib-ts list <file.chm> [--dir <prefix>] List entries in the archive
|
|
14
|
+
chmlib-ts extract <file.chm> <outdir> Extract all files to a directory
|
|
15
|
+
chmlib-ts extract-file <file.chm> <path> [dest] Extract a single file (stdout if no dest)
|
|
16
|
+
chmlib-ts toc <file.chm> [--format tree] Print table of contents
|
|
17
|
+
`);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
async function main() {
|
|
21
|
+
const cmd = args[0];
|
|
22
|
+
if (!cmd)
|
|
23
|
+
usage();
|
|
24
|
+
switch (cmd) {
|
|
25
|
+
case 'info': {
|
|
26
|
+
const file = args[1];
|
|
27
|
+
if (!file)
|
|
28
|
+
usage();
|
|
29
|
+
await cmdInfo(file);
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
case 'list': {
|
|
33
|
+
const file = args[1];
|
|
34
|
+
if (!file)
|
|
35
|
+
usage();
|
|
36
|
+
const dirIdx = args.indexOf('--dir');
|
|
37
|
+
const dir = dirIdx !== -1 ? args[dirIdx + 1] : undefined;
|
|
38
|
+
await cmdList(file, dir);
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
case 'extract': {
|
|
42
|
+
const file = args[1];
|
|
43
|
+
const outdir = args[2];
|
|
44
|
+
if (!file || !outdir)
|
|
45
|
+
usage();
|
|
46
|
+
await cmdExtract(file, outdir);
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
case 'extract-file': {
|
|
50
|
+
const file = args[1];
|
|
51
|
+
const path = args[2];
|
|
52
|
+
const dest = args[3];
|
|
53
|
+
if (!file || !path)
|
|
54
|
+
usage();
|
|
55
|
+
await cmdExtractFile(file, path, dest);
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case 'toc': {
|
|
59
|
+
const file = args[1];
|
|
60
|
+
if (!file)
|
|
61
|
+
usage();
|
|
62
|
+
const formatIdx = args.indexOf('--format');
|
|
63
|
+
const format = formatIdx !== -1 ? args[formatIdx + 1] : 'json';
|
|
64
|
+
await cmdToc(file, format);
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
default:
|
|
68
|
+
usage();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function cmdInfo(filePath) {
|
|
72
|
+
const reader = chmReaderFromFile(filePath);
|
|
73
|
+
const chm = await ChmFile.open(reader);
|
|
74
|
+
try {
|
|
75
|
+
// Get system info
|
|
76
|
+
const sysRaw = await chm.getSystemRaw();
|
|
77
|
+
if (sysRaw) {
|
|
78
|
+
const sys = parseSystemInfo(sysRaw);
|
|
79
|
+
console.log('Title:', sys.title ?? '(none)');
|
|
80
|
+
console.log('Default Topic:', sys.defaultTopic ?? '(none)');
|
|
81
|
+
console.log('TOC File:', sys.tocFile ?? '(none)');
|
|
82
|
+
console.log('Index File:', sys.indexFile ?? '(none)');
|
|
83
|
+
console.log('Compiler Version:', sys.compilerVersion ?? '(none)');
|
|
84
|
+
console.log('Binary TOC:', sys.binaryToc ?? false);
|
|
85
|
+
console.log('Binary Index:', sys.binaryIndex ?? false);
|
|
86
|
+
}
|
|
87
|
+
// Count entries
|
|
88
|
+
let fileCount = 0;
|
|
89
|
+
let dirCount = 0;
|
|
90
|
+
for await (const entry of chm.enumerate(ChmEnumerateFlags.All)) {
|
|
91
|
+
if (entry.flags & ChmEnumerateFlags.Files)
|
|
92
|
+
fileCount++;
|
|
93
|
+
if (entry.flags & ChmEnumerateFlags.Dirs)
|
|
94
|
+
dirCount++;
|
|
95
|
+
}
|
|
96
|
+
console.log('Files:', fileCount);
|
|
97
|
+
console.log('Directories:', dirCount);
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
chm.close();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async function cmdList(filePath, dir) {
|
|
104
|
+
const reader = chmReaderFromFile(filePath);
|
|
105
|
+
const chm = await ChmFile.open(reader);
|
|
106
|
+
try {
|
|
107
|
+
const iter = dir
|
|
108
|
+
? chm.enumerateDir(dir, ChmEnumerateFlags.All)
|
|
109
|
+
: chm.enumerate(ChmEnumerateFlags.All);
|
|
110
|
+
for await (const entry of iter) {
|
|
111
|
+
console.log(`${entry.path}\t${entry.length}\t${entry.space === 1 ? 'compressed' : 'uncompressed'}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
chm.close();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async function cmdExtract(filePath, outdir) {
|
|
119
|
+
const reader = chmReaderFromFile(filePath);
|
|
120
|
+
const chm = await ChmFile.open(reader);
|
|
121
|
+
try {
|
|
122
|
+
for await (const entry of chm.enumerate(ChmEnumerateFlags.All)) {
|
|
123
|
+
// Skip directory entries and meta entries
|
|
124
|
+
if (entry.flags & ChmEnumerateFlags.Dirs)
|
|
125
|
+
continue;
|
|
126
|
+
// Normalize path: strip leading /
|
|
127
|
+
let relPath = entry.path;
|
|
128
|
+
if (relPath.startsWith('/'))
|
|
129
|
+
relPath = relPath.slice(1);
|
|
130
|
+
if (!relPath)
|
|
131
|
+
continue;
|
|
132
|
+
const outPath = join(outdir, relPath);
|
|
133
|
+
await fs.mkdir(dirname(outPath), { recursive: true });
|
|
134
|
+
const data = await chm.retrieve(entry);
|
|
135
|
+
await fs.writeFile(outPath, data);
|
|
136
|
+
console.log('Extracted:', entry.path);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
chm.close();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async function cmdExtractFile(filePath, entryPath, dest) {
|
|
144
|
+
const reader = chmReaderFromFile(filePath);
|
|
145
|
+
const chm = await ChmFile.open(reader);
|
|
146
|
+
try {
|
|
147
|
+
const ui = await chm.resolve(entryPath);
|
|
148
|
+
if (!ui) {
|
|
149
|
+
console.error(`Not found: ${entryPath}`);
|
|
150
|
+
process.exit(1);
|
|
151
|
+
}
|
|
152
|
+
const data = await chm.retrieve(ui);
|
|
153
|
+
if (dest) {
|
|
154
|
+
await fs.mkdir(dirname(dest), { recursive: true });
|
|
155
|
+
await fs.writeFile(dest, data);
|
|
156
|
+
console.log(`Extracted ${entryPath} → ${dest}`);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
process.stdout.write(data);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
chm.close();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async function cmdToc(filePath, format) {
|
|
167
|
+
const reader = chmReaderFromFile(filePath);
|
|
168
|
+
const chm = await ChmFile.open(reader);
|
|
169
|
+
try {
|
|
170
|
+
const sysRaw = await chm.getSystemRaw();
|
|
171
|
+
if (!sysRaw) {
|
|
172
|
+
console.error('No /#SYSTEM found');
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
175
|
+
const sys = parseSystemInfo(sysRaw);
|
|
176
|
+
const tocPath = sys.tocFile;
|
|
177
|
+
if (!tocPath) {
|
|
178
|
+
console.error('No TOC file found in /#SYSTEM');
|
|
179
|
+
process.exit(1);
|
|
180
|
+
}
|
|
181
|
+
const tocUi = await chm.resolve(tocPath);
|
|
182
|
+
if (!tocUi) {
|
|
183
|
+
console.error(`TOC file not found: ${tocPath}`);
|
|
184
|
+
process.exit(1);
|
|
185
|
+
}
|
|
186
|
+
const tocData = await chm.retrieve(tocUi);
|
|
187
|
+
const tocHtml = new TextDecoder('utf-8').decode(tocData);
|
|
188
|
+
const toc = parseToc(tocHtml);
|
|
189
|
+
if (format === 'tree') {
|
|
190
|
+
printTree(toc.entries, 0);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
console.log(JSON.stringify(toc, null, 2));
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
finally {
|
|
197
|
+
chm.close();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
function printTree(entries, depth) {
|
|
201
|
+
for (const entry of entries) {
|
|
202
|
+
const indent = ' '.repeat(depth);
|
|
203
|
+
const loc = entry.local ? ` (${entry.local})` : '';
|
|
204
|
+
console.log(`${indent}${entry.name}${loc}`);
|
|
205
|
+
if (entry.children.length > 0) {
|
|
206
|
+
printTree(entry.children, depth + 1);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
main().catch((err) => {
|
|
211
|
+
console.error(err);
|
|
212
|
+
process.exit(1);
|
|
213
|
+
});
|
|
214
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,SAAS,KAAK;IACZ,OAAO,CAAC,KAAK,CAAC;;;;;;CAMf,CAAC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpB,IAAI,CAAC,GAAG;QAAE,KAAK,EAAE,CAAC;IAElB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,IAAI;gBAAE,KAAK,EAAE,CAAC;YACnB,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YACpB,MAAM;QACR,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,IAAI;gBAAE,KAAK,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACzD,MAAM,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACzB,MAAM;QACR,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;gBAAE,KAAK,EAAE,CAAC;YAC9B,MAAM,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC/B,MAAM;QACR,CAAC;QACD,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;gBAAE,KAAK,EAAE,CAAC;YAC5B,MAAM,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACvC,MAAM;QACR,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,IAAI;gBAAE,KAAK,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC/D,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3B,MAAM;QACR,CAAC;QACD;YACE,KAAK,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,QAAgB;IACrC,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,kBAAkB;QAClB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;QACxC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,YAAY,IAAI,QAAQ,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,eAAe,IAAI,QAAQ,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,WAAW,IAAI,KAAK,CAAC,CAAC;QACzD,CAAC;QAED,gBAAgB;QAChB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/D,IAAI,KAAK,CAAC,KAAK,GAAG,iBAAiB,CAAC,KAAK;gBAAE,SAAS,EAAE,CAAC;YACvD,IAAI,KAAK,CAAC,KAAK,GAAG,iBAAiB,CAAC,IAAI;gBAAE,QAAQ,EAAE,CAAC;QACvD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;YAAS,CAAC;QACT,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,QAAgB,EAAE,GAAY;IACnD,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,GAAG;YACd,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,iBAAiB,CAAC,GAAG,CAAC;YAC9C,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAEzC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;YAAS,CAAC;QACT,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,MAAc;IACxD,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/D,0CAA0C;YAC1C,IAAI,KAAK,CAAC,KAAK,GAAG,iBAAiB,CAAC,IAAI;gBAAE,SAAS;YAEnD,kCAAkC;YAClC,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;YACzB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACtC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEtD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;YAAS,CAAC;QACT,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,SAAiB,EAAE,IAAa;IAC9E,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEpC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,aAAa,SAAS,MAAM,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;YAAS,CAAC;QACT,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,QAAgB,EAAE,MAAc;IACpD,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE9B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;YAAS,CAAC;QACT,GAAG,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,OAAyC,EAAE,KAAa;IACzE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ItsfHeader, ItspHeader, PmglHeader, PmgiHeader, LzxcResetTable, LzxcControlData } from './types.js';
|
|
2
|
+
export declare function unmarshalItsfHeader(data: Uint8Array): ItsfHeader;
|
|
3
|
+
export declare function unmarshalItspHeader(data: Uint8Array): ItspHeader;
|
|
4
|
+
export declare function unmarshalPmglHeader(data: Uint8Array): PmglHeader;
|
|
5
|
+
export declare function unmarshalPmgiHeader(data: Uint8Array): PmgiHeader;
|
|
6
|
+
export declare function unmarshalLzxcResetTable(data: Uint8Array): LzxcResetTable;
|
|
7
|
+
export declare function unmarshalLzxcControlData(data: Uint8Array): LzxcControlData;
|
|
8
|
+
//# sourceMappingURL=headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../src/headers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,eAAe,EAChB,MAAM,YAAY,CAAC;AAKpB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAqDhE;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAyChE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAehE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAYhE;AAID,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,CAiBxE;AAKD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,CA8B1E"}
|
package/dist/headers.js
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { BufferReader } from './buffer-reader.js';
|
|
2
|
+
const ITSF_V2_LEN = 0x58;
|
|
3
|
+
const ITSF_V3_LEN = 0x60;
|
|
4
|
+
export function unmarshalItsfHeader(data) {
|
|
5
|
+
if (data.length !== ITSF_V2_LEN && data.length !== ITSF_V3_LEN)
|
|
6
|
+
throw new Error(`ITSF header: unexpected length ${data.length}`);
|
|
7
|
+
const r = new BufferReader(data);
|
|
8
|
+
const signature = r.readAscii(4);
|
|
9
|
+
const version = r.readInt32LE();
|
|
10
|
+
const headerLen = r.readInt32LE();
|
|
11
|
+
r.readInt32LE(); // unknown_000c
|
|
12
|
+
const lastModified = r.readUint32LE();
|
|
13
|
+
const langId = r.readUint32LE();
|
|
14
|
+
const dirUuid = r.readBytes(16);
|
|
15
|
+
const streamUuid = r.readBytes(16);
|
|
16
|
+
const unknownOffset = r.readBigUint64LE();
|
|
17
|
+
const unknownLen = r.readBigUint64LE();
|
|
18
|
+
const dirOffset = r.readBigUint64LE();
|
|
19
|
+
const dirLen = r.readBigUint64LE();
|
|
20
|
+
if (signature !== 'ITSF')
|
|
21
|
+
throw new Error(`ITSF header: bad signature "${signature}"`);
|
|
22
|
+
if (version === 2) {
|
|
23
|
+
if (headerLen < ITSF_V2_LEN)
|
|
24
|
+
throw new Error(`ITSF v2 header too short: ${headerLen}`);
|
|
25
|
+
}
|
|
26
|
+
else if (version === 3) {
|
|
27
|
+
if (headerLen < ITSF_V3_LEN)
|
|
28
|
+
throw new Error(`ITSF v3 header too short: ${headerLen}`);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
throw new Error(`ITSF header: unsupported version ${version}`);
|
|
32
|
+
}
|
|
33
|
+
let dataOffset;
|
|
34
|
+
if (version === 3) {
|
|
35
|
+
if (r.remaining < 8)
|
|
36
|
+
throw new Error('ITSF v3 header: missing data_offset field');
|
|
37
|
+
dataOffset = r.readBigUint64LE();
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
dataOffset = dirOffset + dirLen;
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
signature,
|
|
44
|
+
version,
|
|
45
|
+
headerLen,
|
|
46
|
+
lastModified,
|
|
47
|
+
langId,
|
|
48
|
+
dirUuid,
|
|
49
|
+
streamUuid,
|
|
50
|
+
unknownOffset,
|
|
51
|
+
unknownLen,
|
|
52
|
+
dirOffset,
|
|
53
|
+
dirLen,
|
|
54
|
+
dataOffset,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const ITSP_V1_LEN = 0x54;
|
|
58
|
+
export function unmarshalItspHeader(data) {
|
|
59
|
+
if (data.length !== ITSP_V1_LEN)
|
|
60
|
+
throw new Error(`ITSP header: unexpected length ${data.length}`);
|
|
61
|
+
const r = new BufferReader(data);
|
|
62
|
+
const signature = r.readAscii(4);
|
|
63
|
+
const version = r.readInt32LE();
|
|
64
|
+
const headerLen = r.readInt32LE();
|
|
65
|
+
r.readInt32LE(); // unknown_000c
|
|
66
|
+
const blockLen = r.readUint32LE();
|
|
67
|
+
r.readInt32LE(); // blockidx_intvl
|
|
68
|
+
r.readInt32LE(); // index_depth
|
|
69
|
+
const indexRoot = r.readInt32LE();
|
|
70
|
+
const indexHead = r.readInt32LE();
|
|
71
|
+
r.readInt32LE(); // unknown_0024
|
|
72
|
+
const numBlocks = r.readUint32LE();
|
|
73
|
+
r.readInt32LE(); // unknown_002c
|
|
74
|
+
const langId = r.readUint32LE();
|
|
75
|
+
const systemUuid = r.readBytes(16);
|
|
76
|
+
r.readBytes(16); // unknown_0044
|
|
77
|
+
if (signature !== 'ITSP')
|
|
78
|
+
throw new Error(`ITSP header: bad signature "${signature}"`);
|
|
79
|
+
if (version !== 1)
|
|
80
|
+
throw new Error(`ITSP header: unsupported version ${version}`);
|
|
81
|
+
if (headerLen !== ITSP_V1_LEN)
|
|
82
|
+
throw new Error(`ITSP header: unexpected headerLen ${headerLen}`);
|
|
83
|
+
return {
|
|
84
|
+
signature,
|
|
85
|
+
version,
|
|
86
|
+
headerLen,
|
|
87
|
+
blockLen,
|
|
88
|
+
blockidxIntvl: 0,
|
|
89
|
+
indexDepth: 0,
|
|
90
|
+
indexRoot,
|
|
91
|
+
indexHead,
|
|
92
|
+
numBlocks,
|
|
93
|
+
langId,
|
|
94
|
+
systemUuid,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export function unmarshalPmglHeader(data) {
|
|
98
|
+
if (data.length < 0x14)
|
|
99
|
+
throw new Error(`PMGL header: too short (${data.length})`);
|
|
100
|
+
const r = new BufferReader(data);
|
|
101
|
+
const signature = r.readAscii(4);
|
|
102
|
+
const freeSpace = r.readUint32LE();
|
|
103
|
+
r.readUint32LE(); // unknown_0008
|
|
104
|
+
const blockPrev = r.readInt32LE();
|
|
105
|
+
const blockNext = r.readInt32LE();
|
|
106
|
+
if (signature !== 'PMGL')
|
|
107
|
+
throw new Error(`PMGL header: bad signature "${signature}"`);
|
|
108
|
+
return { signature, freeSpace, blockPrev, blockNext };
|
|
109
|
+
}
|
|
110
|
+
export function unmarshalPmgiHeader(data) {
|
|
111
|
+
if (data.length < 0x08)
|
|
112
|
+
throw new Error(`PMGI header: too short (${data.length})`);
|
|
113
|
+
const r = new BufferReader(data);
|
|
114
|
+
const signature = r.readAscii(4);
|
|
115
|
+
const freeSpace = r.readUint32LE();
|
|
116
|
+
if (signature !== 'PMGI')
|
|
117
|
+
throw new Error(`PMGI header: bad signature "${signature}"`);
|
|
118
|
+
return { signature, freeSpace };
|
|
119
|
+
}
|
|
120
|
+
const LZXC_RESET_TABLE_LEN = 0x28;
|
|
121
|
+
export function unmarshalLzxcResetTable(data) {
|
|
122
|
+
if (data.length !== LZXC_RESET_TABLE_LEN)
|
|
123
|
+
throw new Error(`LZXC reset table: unexpected length ${data.length}`);
|
|
124
|
+
const r = new BufferReader(data);
|
|
125
|
+
const version = r.readUint32LE();
|
|
126
|
+
const blockCount = r.readUint32LE();
|
|
127
|
+
r.readUint32LE(); // unknown
|
|
128
|
+
const tableOffset = r.readUint32LE();
|
|
129
|
+
const uncompressedLen = r.readBigUint64LE();
|
|
130
|
+
const compressedLen = r.readBigUint64LE();
|
|
131
|
+
const blockLen = r.readBigUint64LE();
|
|
132
|
+
if (version !== 2)
|
|
133
|
+
throw new Error(`LZXC reset table: unsupported version ${version}`);
|
|
134
|
+
return { version, blockCount, tableOffset, uncompressedLen, compressedLen, blockLen };
|
|
135
|
+
}
|
|
136
|
+
const LZXC_MIN_LEN = 0x18;
|
|
137
|
+
const LZXC_V2_LEN = 0x1c;
|
|
138
|
+
export function unmarshalLzxcControlData(data) {
|
|
139
|
+
if (data.length < LZXC_MIN_LEN)
|
|
140
|
+
throw new Error(`LZXC control data: too short (${data.length})`);
|
|
141
|
+
const r = new BufferReader(data);
|
|
142
|
+
const size = r.readUint32LE();
|
|
143
|
+
const signature = r.readAscii(4);
|
|
144
|
+
const version = r.readUint32LE();
|
|
145
|
+
let resetInterval = r.readUint32LE();
|
|
146
|
+
let windowSize = r.readUint32LE();
|
|
147
|
+
const windowsPerReset = r.readUint32LE();
|
|
148
|
+
const unknown18 = data.length >= LZXC_V2_LEN ? r.readUint32LE() : 0;
|
|
149
|
+
void unknown18;
|
|
150
|
+
if (signature !== 'LZXC')
|
|
151
|
+
throw new Error(`LZXC control data: bad signature "${signature}"`);
|
|
152
|
+
if (version === 2) {
|
|
153
|
+
resetInterval *= 0x8000;
|
|
154
|
+
windowSize *= 0x8000;
|
|
155
|
+
}
|
|
156
|
+
if (windowSize === 0 || resetInterval === 0)
|
|
157
|
+
throw new Error('LZXC control data: zero windowSize or resetInterval');
|
|
158
|
+
if (windowSize === 1)
|
|
159
|
+
throw new Error('LZXC control data: windowSize is 1');
|
|
160
|
+
if ((resetInterval % (windowSize / 2)) !== 0)
|
|
161
|
+
throw new Error('LZXC control data: resetInterval not a multiple of windowSize/2');
|
|
162
|
+
return { size, signature, version, resetInterval, windowSize, windowsPerReset };
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../src/headers.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { ChmFile } from './chm-file.js';
|
|
2
|
+
export { chmReaderFromBuffer, chmReaderFromFile } from './reader.js';
|
|
3
|
+
export type { ChmReader } from './reader.js';
|
|
4
|
+
export { ChmSpace, ChmEnumerateFlags } from './types.js';
|
|
5
|
+
export type { ChmUnitInfo, ItsfHeader, ItspHeader, LzxcResetTable, LzxcControlData } from './types.js';
|
|
6
|
+
export { parseSystemInfo } from './system.js';
|
|
7
|
+
export type { ChmSystemInfo } from './system.js';
|
|
8
|
+
export { parseToc } from './toc.js';
|
|
9
|
+
export type { ChmToc, ChmTocEntry } from './toc.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACzD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { ChmFile } from './chm-file.js';
|
|
2
|
+
export { chmReaderFromBuffer, chmReaderFromFile } from './reader.js';
|
|
3
|
+
export { ChmSpace, ChmEnumerateFlags } from './types.js';
|
|
4
|
+
export { parseSystemInfo } from './system.js';
|
|
5
|
+
export { parseToc } from './toc.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/lzx.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LZX decompression engine.
|
|
3
|
+
* Port of lzx.c from chmlib by Jed Wing (originally from cabextract by Stuart Caie).
|
|
4
|
+
*
|
|
5
|
+
* LZX is a variant of LZ77 with Huffman coding, used inside CHM files.
|
|
6
|
+
*/
|
|
7
|
+
export declare class LZXState {
|
|
8
|
+
window: Uint8Array;
|
|
9
|
+
windowSize: number;
|
|
10
|
+
actualSize: number;
|
|
11
|
+
windowPosn: number;
|
|
12
|
+
R0: number;
|
|
13
|
+
R1: number;
|
|
14
|
+
R2: number;
|
|
15
|
+
mainElements: number;
|
|
16
|
+
headerRead: boolean;
|
|
17
|
+
blockType: number;
|
|
18
|
+
blockLength: number;
|
|
19
|
+
blockRemaining: number;
|
|
20
|
+
framesRead: number;
|
|
21
|
+
intelFilesize: number;
|
|
22
|
+
intelCurpos: number;
|
|
23
|
+
intelStarted: boolean;
|
|
24
|
+
PRETREE_table: Uint16Array;
|
|
25
|
+
PRETREE_len: Uint8Array;
|
|
26
|
+
MAINTREE_table: Uint16Array;
|
|
27
|
+
MAINTREE_len: Uint8Array;
|
|
28
|
+
LENGTH_table: Uint16Array;
|
|
29
|
+
LENGTH_len: Uint8Array;
|
|
30
|
+
ALIGNED_table: Uint16Array;
|
|
31
|
+
ALIGNED_len: Uint8Array;
|
|
32
|
+
constructor(windowBits: number);
|
|
33
|
+
reset(): void;
|
|
34
|
+
}
|
|
35
|
+
export declare const DECR_OK = 0;
|
|
36
|
+
export declare const DECR_DATAFORMAT = 1;
|
|
37
|
+
export declare const DECR_ILLEGALDATA = 2;
|
|
38
|
+
/** Decompress one LZX block. Returns DECR_OK on success. */
|
|
39
|
+
export declare function lzxDecompress(state: LZXState, inData: Uint8Array, outData: Uint8Array, inLen: number, outLen: number): number;
|
|
40
|
+
//# sourceMappingURL=lzx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lzx.d.ts","sourceRoot":"","sources":["../src/lzx.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA4GH,qBAAa,QAAQ;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IAGtB,aAAa,EAAE,WAAW,CAAC;IAC3B,WAAW,EAAE,UAAU,CAAC;IACxB,cAAc,EAAE,WAAW,CAAC;IAC5B,YAAY,EAAE,UAAU,CAAC;IACzB,YAAY,EAAE,WAAW,CAAC;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,WAAW,CAAC;IAC3B,WAAW,EAAE,UAAU,CAAC;gBAEZ,UAAU,EAAE,MAAM;IAqC9B,KAAK,IAAI,IAAI;CAYd;AAED,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,4DAA4D;AAC5D,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,MAAM,CAmXR"}
|