node-liblzma 2.0.3 → 2.2.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 (46) hide show
  1. package/README.md +263 -67
  2. package/index.d.ts +60 -3
  3. package/lib/cli/nxz.d.ts +7 -0
  4. package/lib/cli/nxz.d.ts.map +1 -0
  5. package/lib/cli/nxz.js +486 -0
  6. package/lib/cli/nxz.js.map +1 -0
  7. package/lib/errors.d.ts.map +1 -1
  8. package/lib/errors.js +26 -15
  9. package/lib/errors.js.map +1 -1
  10. package/lib/lzma.d.ts +319 -2
  11. package/lib/lzma.d.ts.map +1 -1
  12. package/lib/lzma.js +303 -39
  13. package/lib/lzma.js.map +1 -1
  14. package/lib/pool.d.ts.map +1 -1
  15. package/lib/pool.js +9 -3
  16. package/lib/pool.js.map +1 -1
  17. package/lib/types.d.ts +68 -1
  18. package/lib/types.d.ts.map +1 -1
  19. package/package.json +32 -12
  20. package/scripts/build_xz_with_cmake.py +23 -26
  21. package/src/bindings/module.cpp +196 -0
  22. package/src/bindings/node-liblzma.cpp +40 -4
  23. package/src/bindings/node-liblzma.hpp +2 -1
  24. package/xz-version.json +3 -3
  25. package/.gitattributes +0 -3
  26. package/.release-it.json +0 -7
  27. package/.release-it.manual.json +0 -7
  28. package/.release-it.retry.json +0 -3
  29. package/CHANGELOG.md +0 -271
  30. package/History.md +0 -79
  31. package/RELEASING.md +0 -131
  32. package/biome.json +0 -81
  33. package/pnpm-workspace.yaml +0 -3
  34. package/prebuilds/darwin-x64/node-liblzma.node +0 -0
  35. package/prebuilds/linux-x64/node-liblzma.node +0 -0
  36. package/prebuilds/win32-x64/node-liblzma.node +0 -0
  37. package/scripts/analyze-coverage.js +0 -132
  38. package/scripts/compare-coverage-tools.js +0 -93
  39. package/src/errors.ts +0 -167
  40. package/src/lzma.ts +0 -839
  41. package/src/pool.ts +0 -228
  42. package/src/types.ts +0 -30
  43. package/tsconfig.json +0 -50
  44. package/vitest.config.istanbul.ts +0 -29
  45. package/vitest.config.monocart.ts +0 -44
  46. package/vitest.config.ts +0 -52
package/lib/cli/nxz.js ADDED
@@ -0,0 +1,486 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * nxz - Node.js XZ compression CLI
4
+ * A portable xz-like command line tool using node-liblzma
5
+ */
6
+ import { createReadStream, createWriteStream, existsSync, readFileSync, statSync, unlinkSync, writeFileSync, } from 'node:fs';
7
+ import { pipeline } from 'node:stream/promises';
8
+ import { parseArgs } from 'node:util';
9
+ import { check, createUnxz, createXz, hasThreads, isXZ, parseFileIndex, preset, unxzSync, versionString, xzSync, } from '../lzma.js';
10
+ /** Size threshold for using streams vs sync (1 MB) */
11
+ const STREAM_THRESHOLD_BYTES = 1024 * 1024;
12
+ /** Exit codes matching xz conventions */
13
+ const EXIT_SUCCESS = 0;
14
+ const EXIT_ERROR = 1;
15
+ const EXIT_SIGNAL = 128;
16
+ /** Track current output file for SIGINT cleanup */
17
+ let currentOutputFile = null;
18
+ /** Global quiet flag for warn() function */
19
+ let quietMode = false;
20
+ /**
21
+ * Print warning message (respects -q flag)
22
+ */
23
+ function warn(message) {
24
+ if (!quietMode) {
25
+ console.error(message);
26
+ }
27
+ }
28
+ /**
29
+ * Setup SIGINT handler for graceful cleanup
30
+ */
31
+ function setupSignalHandlers() {
32
+ process.on('SIGINT', () => {
33
+ // Cleanup partial output file if exists
34
+ if (currentOutputFile && existsSync(currentOutputFile)) {
35
+ try {
36
+ unlinkSync(currentOutputFile);
37
+ }
38
+ catch {
39
+ // Ignore cleanup errors
40
+ }
41
+ }
42
+ // Exit with 128 + signal number (SIGINT = 2)
43
+ process.exit(EXIT_SIGNAL + 2);
44
+ });
45
+ }
46
+ /**
47
+ * Parse command line arguments
48
+ */
49
+ function parseCliArgs(args) {
50
+ // Extract preset from args (e.g., -0 through -9)
51
+ let presetLevel = 6; // default
52
+ const filteredArgs = [];
53
+ for (const arg of args) {
54
+ const presetMatch = arg.match(/^-(\d)$/);
55
+ if (presetMatch) {
56
+ presetLevel = Number.parseInt(presetMatch[1], 10);
57
+ }
58
+ else {
59
+ filteredArgs.push(arg);
60
+ }
61
+ }
62
+ const { values, positionals } = parseArgs({
63
+ args: filteredArgs,
64
+ options: {
65
+ compress: { type: 'boolean', short: 'z', default: false },
66
+ decompress: { type: 'boolean', short: 'd', default: false },
67
+ list: { type: 'boolean', short: 'l', default: false },
68
+ keep: { type: 'boolean', short: 'k', default: false },
69
+ force: { type: 'boolean', short: 'f', default: false },
70
+ stdout: { type: 'boolean', short: 'c', default: false },
71
+ output: { type: 'string', short: 'o' },
72
+ verbose: { type: 'boolean', short: 'v', default: false },
73
+ quiet: { type: 'boolean', short: 'q', default: false },
74
+ help: { type: 'boolean', short: 'h', default: false },
75
+ version: { type: 'boolean', short: 'V', default: false },
76
+ extreme: { type: 'boolean', short: 'e', default: false },
77
+ },
78
+ allowPositionals: true,
79
+ strict: false,
80
+ });
81
+ return {
82
+ compress: values.compress === true,
83
+ decompress: values.decompress === true,
84
+ list: values.list === true,
85
+ keep: values.keep === true,
86
+ force: values.force === true,
87
+ stdout: values.stdout === true,
88
+ output: typeof values.output === 'string' ? values.output : null,
89
+ verbose: values.verbose === true,
90
+ quiet: values.quiet === true,
91
+ help: values.help === true,
92
+ version: values.version === true,
93
+ preset: presetLevel,
94
+ extreme: values.extreme === true,
95
+ files: positionals,
96
+ };
97
+ }
98
+ /**
99
+ * Print help message
100
+ */
101
+ function printHelp() {
102
+ console.log(`nxz - Node.js XZ compression CLI (using node-liblzma)
103
+
104
+ Usage: nxz [OPTION]... [FILE]...
105
+
106
+ Compress or decompress FILEs in the .xz format.
107
+
108
+ Operation mode:
109
+ -z, --compress force compression
110
+ -d, --decompress force decompression
111
+ -l, --list list information about .xz files
112
+
113
+ Operation modifiers:
114
+ -k, --keep keep (don't delete) input files
115
+ -f, --force force overwrite of output file
116
+ -c, --stdout write to standard output and don't delete input files
117
+ -o, --output=FILE write output to FILE
118
+
119
+ Compression presets:
120
+ -0 ... -9 compression preset level (default: 6)
121
+ -e, --extreme use extreme compression (slower)
122
+
123
+ Other options:
124
+ -v, --verbose be verbose (show progress)
125
+ -q, --quiet suppress warnings
126
+ -h, --help display this help and exit
127
+ -V, --version display version information and exit
128
+
129
+ With no FILE, or when FILE is -, read standard input.
130
+
131
+ Report bugs at: https://github.com/oorabona/node-liblzma/issues`);
132
+ }
133
+ /**
134
+ * Print version information
135
+ */
136
+ function printVersion() {
137
+ // Read package.json for nxz version
138
+ const packageJsonPath = new URL('../../package.json', import.meta.url);
139
+ let nxzVersion = 'unknown';
140
+ try {
141
+ const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
142
+ nxzVersion = pkg.version;
143
+ }
144
+ catch {
145
+ // Ignore error, use 'unknown'
146
+ }
147
+ const threadSupport = hasThreads() ? 'yes' : 'no';
148
+ const year = new Date().getFullYear();
149
+ console.log(`nxz ${nxzVersion}
150
+ node-liblzma using liblzma ${versionString()}
151
+ Thread support: ${threadSupport}
152
+
153
+ Copyright (C) ${year} Olivier ORABONA
154
+ License: LGPL-3.0`);
155
+ }
156
+ /**
157
+ * Determine operation mode based on options and file extension
158
+ */
159
+ function determineMode(options, filename) {
160
+ if (options.list)
161
+ return 'list';
162
+ if (options.decompress)
163
+ return 'decompress';
164
+ if (options.compress)
165
+ return 'compress';
166
+ // Auto-detect from extension
167
+ if (filename.endsWith('.xz') || filename.endsWith('.lzma')) {
168
+ return 'decompress';
169
+ }
170
+ return 'compress';
171
+ }
172
+ /**
173
+ * Get output filename based on operation mode
174
+ */
175
+ function getOutputFilename(inputFile, mode) {
176
+ if (mode === 'compress') {
177
+ return `${inputFile}.xz`;
178
+ }
179
+ // Decompress: remove .xz or .lzma extension
180
+ if (inputFile.endsWith('.xz')) {
181
+ return inputFile.slice(0, -3);
182
+ }
183
+ if (inputFile.endsWith('.lzma')) {
184
+ return inputFile.slice(0, -5);
185
+ }
186
+ return `${inputFile}.out`;
187
+ }
188
+ /**
189
+ * Format bytes to human-readable string
190
+ */
191
+ function formatBytes(bytes) {
192
+ if (bytes < 1024)
193
+ return `${bytes} B`;
194
+ if (bytes < 1024 * 1024)
195
+ return `${(bytes / 1024).toFixed(1)} KiB`;
196
+ if (bytes < 1024 * 1024 * 1024)
197
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MiB`;
198
+ return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GiB`;
199
+ }
200
+ /**
201
+ * List information about an XZ file
202
+ */
203
+ function listFile(filename, options) {
204
+ try {
205
+ const data = readFileSync(filename);
206
+ const info = parseFileIndex(data);
207
+ const ratio = info.compressedSize > 0
208
+ ? ((1 - info.uncompressedSize / info.compressedSize) * -100).toFixed(1)
209
+ : '0.0';
210
+ const checkNames = {
211
+ [check.NONE]: 'None',
212
+ [check.CRC32]: 'CRC32',
213
+ [check.CRC64]: 'CRC64',
214
+ [check.SHA256]: 'SHA-256',
215
+ };
216
+ const checkName = checkNames[info.check] ?? `Unknown(${info.check})`;
217
+ if (options.verbose) {
218
+ console.log(`File: ${filename}`);
219
+ console.log(` Streams: ${info.streamCount}`);
220
+ console.log(` Blocks: ${info.blockCount}`);
221
+ console.log(` Compressed: ${formatBytes(info.compressedSize)}`);
222
+ console.log(` Uncompressed: ${formatBytes(info.uncompressedSize)}`);
223
+ console.log(` Ratio: ${ratio}%`);
224
+ console.log(` Check: ${checkName}`);
225
+ console.log(` Memory needed: ${formatBytes(info.memoryUsage)}`);
226
+ }
227
+ else {
228
+ // Compact format similar to xz -l
229
+ console.log('Strms Blocks Compressed Uncompressed Ratio Check Filename');
230
+ console.log(` ${info.streamCount} ${info.blockCount} ${formatBytes(info.compressedSize).padStart(12)} ${formatBytes(info.uncompressedSize).padStart(12)} ${ratio.padStart(5)}% ${checkName.padEnd(6)} ${filename}`);
231
+ }
232
+ return EXIT_SUCCESS;
233
+ }
234
+ catch (err) {
235
+ const message = err instanceof Error ? err.message : String(err);
236
+ warn(`nxz: ${filename}: ${message}`);
237
+ return EXIT_ERROR;
238
+ }
239
+ }
240
+ /**
241
+ * Compress a file
242
+ */
243
+ async function compressFile(inputFile, options) {
244
+ const outputFile = options.stdout
245
+ ? null
246
+ : (options.output ?? getOutputFilename(inputFile, 'compress'));
247
+ // Check if output exists
248
+ if (outputFile && existsSync(outputFile) && !options.force) {
249
+ warn(`nxz: ${outputFile}: File already exists; use -f to overwrite`);
250
+ return EXIT_ERROR;
251
+ }
252
+ // Track output file for SIGINT cleanup
253
+ currentOutputFile = outputFile;
254
+ try {
255
+ const stat = statSync(inputFile);
256
+ const presetValue = options.extreme ? options.preset | preset.EXTREME : options.preset;
257
+ if (options.stdout) {
258
+ // Write to stdout
259
+ const input = readFileSync(inputFile);
260
+ const compressed = xzSync(input, { preset: presetValue });
261
+ process.stdout.write(compressed);
262
+ }
263
+ else if (stat.size <= STREAM_THRESHOLD_BYTES) {
264
+ // Small file: use sync
265
+ const input = readFileSync(inputFile);
266
+ const compressed = xzSync(input, { preset: presetValue });
267
+ writeFileSync(outputFile, compressed);
268
+ }
269
+ else {
270
+ // Large file: use streams
271
+ const compressor = createXz({ preset: presetValue });
272
+ if (options.verbose) {
273
+ let lastPercent = -1;
274
+ compressor.on('progress', ({ bytesRead, bytesWritten }) => {
275
+ const percent = Math.floor((bytesRead / stat.size) * 100);
276
+ if (percent !== lastPercent) {
277
+ lastPercent = percent;
278
+ process.stderr.write(`\r${inputFile}: ${percent}% (${formatBytes(bytesRead)} -> ${formatBytes(bytesWritten)})`);
279
+ }
280
+ });
281
+ }
282
+ await pipeline(createReadStream(inputFile), compressor, createWriteStream(outputFile));
283
+ if (options.verbose) {
284
+ process.stderr.write('\n');
285
+ }
286
+ }
287
+ // Delete original unless -k or -c
288
+ if (!options.keep && !options.stdout) {
289
+ unlinkSync(inputFile);
290
+ }
291
+ // Clear tracking after successful completion
292
+ currentOutputFile = null;
293
+ return EXIT_SUCCESS;
294
+ }
295
+ catch (err) {
296
+ const message = err instanceof Error ? err.message : String(err);
297
+ warn(`nxz: ${inputFile}: ${message}`);
298
+ // Cleanup partial output
299
+ if (outputFile && existsSync(outputFile)) {
300
+ try {
301
+ unlinkSync(outputFile);
302
+ }
303
+ catch {
304
+ // Ignore cleanup errors
305
+ }
306
+ }
307
+ currentOutputFile = null;
308
+ return EXIT_ERROR;
309
+ }
310
+ }
311
+ /**
312
+ * Decompress a file
313
+ */
314
+ async function decompressFile(inputFile, options) {
315
+ const outputFile = options.stdout
316
+ ? null
317
+ : (options.output ?? getOutputFilename(inputFile, 'decompress'));
318
+ // Check if output exists
319
+ if (outputFile && existsSync(outputFile) && !options.force) {
320
+ warn(`nxz: ${outputFile}: File already exists; use -f to overwrite`);
321
+ return EXIT_ERROR;
322
+ }
323
+ // Track output file for SIGINT cleanup
324
+ currentOutputFile = outputFile;
325
+ try {
326
+ // Validate XZ format
327
+ const fd = readFileSync(inputFile);
328
+ if (!isXZ(fd)) {
329
+ warn(`nxz: ${inputFile}: File format not recognized`);
330
+ currentOutputFile = null;
331
+ return EXIT_ERROR;
332
+ }
333
+ const stat = statSync(inputFile);
334
+ if (options.stdout) {
335
+ // Write to stdout
336
+ const decompressed = unxzSync(fd);
337
+ process.stdout.write(decompressed);
338
+ }
339
+ else if (stat.size <= STREAM_THRESHOLD_BYTES) {
340
+ // Small file: use sync
341
+ const decompressed = unxzSync(fd);
342
+ writeFileSync(outputFile, decompressed);
343
+ }
344
+ else {
345
+ // Large file: use streams with progress
346
+ const decompressor = createUnxz();
347
+ if (options.verbose) {
348
+ let lastPercent = -1;
349
+ decompressor.on('progress', ({ bytesRead, bytesWritten }) => {
350
+ const percent = Math.floor((bytesRead / stat.size) * 100);
351
+ if (percent !== lastPercent) {
352
+ lastPercent = percent;
353
+ process.stderr.write(`\r${inputFile}: ${percent}% (${formatBytes(bytesRead)} -> ${formatBytes(bytesWritten)})`);
354
+ }
355
+ });
356
+ }
357
+ await pipeline(createReadStream(inputFile), decompressor, createWriteStream(outputFile));
358
+ if (options.verbose) {
359
+ process.stderr.write('\n');
360
+ }
361
+ }
362
+ // Delete original unless -k or -c
363
+ if (!options.keep && !options.stdout) {
364
+ unlinkSync(inputFile);
365
+ }
366
+ // Clear tracking after successful completion
367
+ currentOutputFile = null;
368
+ return EXIT_SUCCESS;
369
+ }
370
+ catch (err) {
371
+ const message = err instanceof Error ? err.message : String(err);
372
+ warn(`nxz: ${inputFile}: ${message}`);
373
+ // Cleanup partial output
374
+ if (outputFile && existsSync(outputFile)) {
375
+ try {
376
+ unlinkSync(outputFile);
377
+ }
378
+ catch {
379
+ // Ignore cleanup errors
380
+ }
381
+ }
382
+ currentOutputFile = null;
383
+ return EXIT_ERROR;
384
+ }
385
+ }
386
+ /**
387
+ * Process a single file
388
+ */
389
+ async function processFile(filename, options) {
390
+ // Check file exists
391
+ if (!existsSync(filename)) {
392
+ warn(`nxz: ${filename}: No such file or directory`);
393
+ return EXIT_ERROR;
394
+ }
395
+ // Check if it's a directory
396
+ if (statSync(filename).isDirectory()) {
397
+ warn(`nxz: ${filename}: Is a directory, skipping`);
398
+ return EXIT_ERROR;
399
+ }
400
+ const mode = determineMode(options, filename);
401
+ switch (mode) {
402
+ case 'list':
403
+ return listFile(filename, options);
404
+ case 'compress':
405
+ return compressFile(filename, options);
406
+ case 'decompress':
407
+ return decompressFile(filename, options);
408
+ }
409
+ }
410
+ /**
411
+ * Read from stdin and process
412
+ */
413
+ async function processStdin(options) {
414
+ const chunks = [];
415
+ for await (const chunk of process.stdin) {
416
+ chunks.push(chunk);
417
+ }
418
+ const input = Buffer.concat(chunks);
419
+ const mode = options.decompress ? 'decompress' : 'compress';
420
+ try {
421
+ if (mode === 'compress') {
422
+ const presetValue = options.extreme ? options.preset | preset.EXTREME : options.preset;
423
+ const compressed = xzSync(input, { preset: presetValue });
424
+ process.stdout.write(compressed);
425
+ }
426
+ else {
427
+ if (!isXZ(input)) {
428
+ warn('nxz: (stdin): File format not recognized');
429
+ return EXIT_ERROR;
430
+ }
431
+ const decompressed = unxzSync(input);
432
+ process.stdout.write(decompressed);
433
+ }
434
+ return EXIT_SUCCESS;
435
+ }
436
+ catch (err) {
437
+ const message = err instanceof Error ? err.message : String(err);
438
+ warn(`nxz: (stdin): ${message}`);
439
+ return EXIT_ERROR;
440
+ }
441
+ }
442
+ /**
443
+ * Main entry point
444
+ */
445
+ async function main() {
446
+ // Setup signal handlers for graceful cleanup
447
+ setupSignalHandlers();
448
+ const options = parseCliArgs(process.argv.slice(2));
449
+ // Set global quiet mode
450
+ quietMode = options.quiet;
451
+ // Handle help and version first
452
+ if (options.help) {
453
+ printHelp();
454
+ process.exit(EXIT_SUCCESS);
455
+ }
456
+ if (options.version) {
457
+ printVersion();
458
+ process.exit(EXIT_SUCCESS);
459
+ }
460
+ // No files: read from stdin
461
+ if (options.files.length === 0 || (options.files.length === 1 && options.files[0] === '-')) {
462
+ const exitCode = await processStdin(options);
463
+ process.exit(exitCode);
464
+ }
465
+ // Process each file
466
+ let exitCode = EXIT_SUCCESS;
467
+ for (const file of options.files) {
468
+ if (file === '-') {
469
+ const code = await processStdin(options);
470
+ if (code !== EXIT_SUCCESS)
471
+ exitCode = code;
472
+ }
473
+ else {
474
+ const code = await processFile(file, options);
475
+ if (code !== EXIT_SUCCESS)
476
+ exitCode = code;
477
+ }
478
+ }
479
+ process.exit(exitCode);
480
+ }
481
+ // Run main
482
+ main().catch((err) => {
483
+ console.error(`nxz: ${err.message}`);
484
+ process.exit(EXIT_ERROR);
485
+ });
486
+ //# sourceMappingURL=nxz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nxz.js","sourceRoot":"","sources":["../../src/cli/nxz.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;GAEG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAClC,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,IAAI,EAAE,MAAM,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAO3C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,KAAK,EAAE,MAAM;CAI1B;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;gBACrC,KAAK,EAAE,MAAM;CAI1B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,KAAK,EAAE,MAAM;CAI1B;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;gBACjC,KAAK,EAAE,MAAM;CAI1B;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,SAAS;gBAC9B,KAAK,EAAE,MAAM;CAI1B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,KAAK,EAAE,MAAM;CAI1B;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;gBACrC,KAAK,EAAE,MAAM;CAI1B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAoC1E"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;GAEG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAClC,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,IAAI,EAAE,MAAM,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAO3C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,KAAK,EAAE,MAAM;CAI1B;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;gBACrC,KAAK,EAAE,MAAM;CAI1B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,KAAK,EAAE,MAAM;CAI1B;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;gBACjC,KAAK,EAAE,MAAM;CAI1B;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,SAAS;gBAC9B,KAAK,EAAE,MAAM;CAI1B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,KAAK,EAAE,MAAM;CAI1B;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;gBACrC,KAAK,EAAE,MAAM;CAI1B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CA6C1E"}
package/lib/errors.js CHANGED
@@ -94,19 +94,27 @@ export class LZMAProgrammingError extends LZMAError {
94
94
  * Factory function to create appropriate error instance based on errno
95
95
  */
96
96
  export function createLZMAError(errno, message) {
97
- // LZMA error codes mapping
98
- const LZMA_OK = 0;
99
- const LZMA_STREAM_END = 1;
100
- const LZMA_NO_CHECK = 2;
101
- const LZMA_UNSUPPORTED_CHECK = 3;
102
- const LZMA_GET_CHECK = 4;
103
- const LZMA_MEM_ERROR = 5;
104
- const LZMA_MEMLIMIT_ERROR = 6;
105
- const LZMA_FORMAT_ERROR = 7;
106
- const LZMA_OPTIONS_ERROR = 8;
107
- const LZMA_DATA_ERROR = 9;
108
- const LZMA_BUF_ERROR = 10;
109
- const LZMA_PROG_ERROR = 11;
97
+ // LZMA return codes mapping from liblzma/base.h:
98
+ // Codes 0-4 are success/informational status codes, not errors.
99
+ // They are handled by the default case below.
100
+ /* biome-ignore lint/correctness/noUnusedVariables: Kept for documentation - shows full lzma_ret enum range (0-11) */
101
+ const LZMA_OK = 0; // Operation completed successfully
102
+ /* biome-ignore lint/correctness/noUnusedVariables: Kept for documentation */
103
+ const LZMA_STREAM_END = 1; // End of stream reached
104
+ /* biome-ignore lint/correctness/noUnusedVariables: Kept for documentation */
105
+ const LZMA_NO_CHECK = 2; // Input stream has no integrity check
106
+ /* biome-ignore lint/correctness/noUnusedVariables: Kept for documentation */
107
+ const LZMA_UNSUPPORTED_CHECK = 3; // Cannot calculate integrity check
108
+ /* biome-ignore lint/correctness/noUnusedVariables: Kept for documentation */
109
+ const LZMA_GET_CHECK = 4; // Integrity check type now available
110
+ // Actual error codes (5-11) - these get specialized error classes:
111
+ const LZMA_MEM_ERROR = 5; // Cannot allocate memory
112
+ const LZMA_MEMLIMIT_ERROR = 6; // Memory usage limit reached
113
+ const LZMA_FORMAT_ERROR = 7; // File format not recognized
114
+ const LZMA_OPTIONS_ERROR = 8; // Invalid or unsupported options
115
+ const LZMA_DATA_ERROR = 9; // Data is corrupt
116
+ const LZMA_BUF_ERROR = 10; // No progress possible
117
+ const LZMA_PROG_ERROR = 11; // Programming error
110
118
  switch (errno) {
111
119
  case LZMA_MEM_ERROR:
112
120
  return new LZMAMemoryError(errno);
@@ -147,7 +155,10 @@ function getErrorMessage(errno) {
147
155
  'No progress is possible',
148
156
  'Programming error',
149
157
  ];
150
- const messageIndex = Math.max(0, Math.min(errno, messages.length - 1));
151
- return messages[messageIndex];
158
+ // F-011: Handle out-of-bounds errno explicitly instead of silent clamping
159
+ if (errno < 0 || errno >= messages.length) {
160
+ return `Unknown LZMA error code: ${errno}`;
161
+ }
162
+ return messages[errno];
152
163
  }
153
164
  //# sourceMappingURL=errors.js.map
package/lib/errors.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}