@push.rocks/smartarchive 4.0.6 → 4.0.7

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.
@@ -60,6 +60,7 @@ export class SmartArchive {
60
60
  streamFileStream.pipe(new plugins.smartstream.SmartDuplex({
61
61
  objectMode: true,
62
62
  writeFunction: async (chunkArg, streamtools) => {
63
+ const done = plugins.smartpromise.defer();
63
64
  console.log(chunkArg.relativeFilePath);
64
65
  const streamFile = chunkArg;
65
66
  const readStream = await streamFile.createReadStream();
@@ -68,6 +69,10 @@ export class SmartArchive {
68
69
  await plugins.smartfile.fs.ensureDir(plugins.path.dirname(writePath));
69
70
  const writeStream = plugins.smartfile.fsStream.createWriteStream(writePath);
70
71
  readStream.pipe(writeStream);
72
+ writeStream.on('finish', () => {
73
+ done.resolve();
74
+ });
75
+ await done.promise;
71
76
  },
72
77
  finalFunction: async () => {
73
78
  done.resolve();
@@ -91,7 +96,6 @@ export class SmartArchive {
91
96
  stream.on('end', function () {
92
97
  next(); // ready for next entry
93
98
  });
94
- stream.resume(); // just auto drain the stream
95
99
  });
96
100
  tarStream.on('finish', function () {
97
101
  console.log('finished');
@@ -115,4 +119,4 @@ export class SmartArchive {
115
119
  return streamFileIntake;
116
120
  }
117
121
  }
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zbWFydGFyY2hpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLnNtYXJ0YXJjaGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUVwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZUFBZSxFQUF3QixNQUFNLDhCQUE4QixDQUFDO0FBSXJGLE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLFNBQVM7SUFDRixNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFjO1FBQy9DLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoRCxvQkFBb0IsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ3hDLE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLFdBQW1CO1FBQ3JELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoRCxvQkFBb0IsQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDO1FBQ2xELE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQ25DLFNBQXFGO1FBRXJGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoRCxvQkFBb0IsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQzlDLE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQW1CRDtRQWpCQSxXQUFXO1FBQ0osYUFB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
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zbWFydGFyY2hpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLnNtYXJ0YXJjaGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUVwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZUFBZSxFQUF3QixNQUFNLDhCQUE4QixDQUFDO0FBSXJGLE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLFNBQVM7SUFDRixNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFjO1FBQy9DLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoRCxvQkFBb0IsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ3hDLE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLFdBQW1CO1FBQ3JELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoRCxvQkFBb0IsQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDO1FBQ2xELE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQ25DLFNBQXFGO1FBRXJGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoRCxvQkFBb0IsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQzlDLE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQW1CRDtRQWpCQSxXQUFXO1FBQ0osYUFB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
@@ -13,5 +13,4 @@ export { smartfile, smartpath, smartpromise, smartrequest, smartunique, smartstr
13
13
  import * as fileType from 'file-type';
14
14
  import * as fflate from 'fflate';
15
15
  import tarStream from 'tar-stream';
16
- import unbzip2Stream from 'unbzip2-stream';
17
- export { fileType, fflate, tarStream, unbzip2Stream };
16
+ export { fileType, fflate, tarStream };
@@ -16,6 +16,5 @@ export { smartfile, smartpath, smartpromise, smartrequest, smartunique, smartstr
16
16
  import * as fileType from 'file-type';
17
17
  import * as fflate from 'fflate';
18
18
  import tarStream from 'tar-stream';
19
- import unbzip2Stream from 'unbzip2-stream';
20
- export { fileType, fflate, tarStream, unbzip2Stream };
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFFeEIsbUJBQW1CO0FBQ25CLE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBRXpHLG9CQUFvQjtBQUNwQixPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxhQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDIn0=
19
+ export { fileType, fflate, tarStream };
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFFeEIsbUJBQW1CO0FBQ25CLE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFdBQVcsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxLQUFLLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBRXpHLG9CQUFvQjtBQUNwQixPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFFbkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMifQ==
package/license CHANGED
@@ -1,6 +1,10 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2016 Lossless GmbH
3
+ Copyright (c) 2016 Task Venture Capital GmbH
4
+
5
+ Includes work under MIT license with copyrights:
6
+ * Copyright (c) 2017 by Jan Boelsche (jan@lagomorph.de)
7
+ * Copyright 2011 by antimatter15 (antimatter15@gmail.com)
4
8
 
5
9
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
10
  of this software and associated documentation files (the "Software"), to deal
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@push.rocks/smartarchive",
3
- "version": "4.0.6",
3
+ "version": "4.0.7",
4
4
  "description": "work with archives",
5
5
  "main": "dist_ts/index.js",
6
6
  "typings": "dist_ts/index.d.ts",
@@ -30,11 +30,10 @@
30
30
  "@push.rocks/smartunique": "^3.0.6",
31
31
  "@push.rocks/smarturl": "^3.0.7",
32
32
  "@types/tar-stream": "^3.1.3",
33
- "@types/unbzip2-stream": "^1.4.3",
34
33
  "fflate": "^0.8.1",
35
34
  "file-type": "^18.6.0",
36
35
  "tar-stream": "^3.1.6",
37
- "unbzip2-stream": "^1.4.3"
36
+ "through": "^2.3.8"
38
37
  },
39
38
  "devDependencies": {
40
39
  "@git.zone/tsbuild": "^2.1.66",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartarchive',
6
- version: '4.0.6',
6
+ version: '4.0.7',
7
7
  description: 'work with archives'
8
8
  }
@@ -0,0 +1,41 @@
1
+ var BITMASK = [0, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF];
2
+
3
+ // returns a function that reads bits.
4
+ // takes a buffer iterator as input
5
+ export function bitIterator(nextBuffer: () => Buffer) {
6
+ var bit = 0, byte = 0;
7
+ var bytes = nextBuffer();
8
+ var f = function(n) {
9
+ if (n === null && bit != 0) { // align to byte boundary
10
+ bit = 0
11
+ byte++;
12
+ return;
13
+ }
14
+ var result = 0;
15
+ while(n > 0) {
16
+ if (byte >= bytes.length) {
17
+ byte = 0;
18
+ bytes = nextBuffer();
19
+ }
20
+ var left = 8 - bit;
21
+ if (bit === 0 && n > 0)
22
+ // @ts-ignore
23
+ f.bytesRead++;
24
+ if (n >= left) {
25
+ result <<= left;
26
+ result |= (BITMASK[left] & bytes[byte++]);
27
+ bit = 0;
28
+ n -= left;
29
+ } else {
30
+ result <<= n;
31
+ result |= ((bytes[byte] & (BITMASK[n] << (8 - n - bit))) >> (8 - n - bit));
32
+ bit += n;
33
+ n = 0;
34
+ }
35
+ }
36
+ return result;
37
+ };
38
+ // @ts-ignore
39
+ f.bytesRead = 0;
40
+ return f;
41
+ };
@@ -0,0 +1,335 @@
1
+ export class Bzip2Error extends Error {
2
+ public name: string = 'Bzip2Error';
3
+ public message: string;
4
+ public stack = (new Error()).stack;
5
+
6
+ constructor(messageArg: string) {
7
+ super();
8
+ this.message = messageArg;
9
+ }
10
+ }
11
+
12
+ var messageArg = {
13
+ Error: function(message) {throw new Bzip2Error(message);}
14
+ };
15
+
16
+ export class Bzip2 {
17
+ public Bzip2Error = Bzip2Error;
18
+ public crcTable =
19
+ [
20
+ 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9,
21
+ 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,
22
+ 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,
23
+ 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
24
+ 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9,
25
+ 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,
26
+ 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,
27
+ 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,
28
+ 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
29
+ 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,
30
+ 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81,
31
+ 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,
32
+ 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49,
33
+ 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
34
+ 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,
35
+ 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,
36
+ 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae,
37
+ 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,
38
+ 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
39
+ 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,
40
+ 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
41
+ 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,
42
+ 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066,
43
+ 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
44
+ 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e,
45
+ 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,
46
+ 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,
47
+ 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,
48
+ 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
49
+ 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,
50
+ 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686,
51
+ 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,
52
+ 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,
53
+ 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
54
+ 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,
55
+ 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,
56
+ 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47,
57
+ 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,
58
+ 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
59
+ 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,
60
+ 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7,
61
+ 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
62
+ 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f,
63
+ 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
64
+ 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,
65
+ 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,
66
+ 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f,
67
+ 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,
68
+ 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
69
+ 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,
70
+ 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,
71
+ 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,
72
+ 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30,
73
+ 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
74
+ 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088,
75
+ 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,
76
+ 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,
77
+ 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,
78
+ 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
79
+ 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,
80
+ 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0,
81
+ 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,
82
+ 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
83
+ 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
84
+ ];
85
+
86
+ array = function(bytes) {
87
+ var bit = 0, byte = 0;
88
+ var BITMASK = [0, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF ];
89
+ return function(n) {
90
+ var result = 0;
91
+ while(n > 0) {
92
+ var left = 8 - bit;
93
+ if (n >= left) {
94
+ result <<= left;
95
+ result |= (BITMASK[left] & bytes[byte++]);
96
+ bit = 0;
97
+ n -= left;
98
+ } else {
99
+ result <<= n;
100
+ result |= ((bytes[byte] & (BITMASK[n] << (8 - n - bit))) >> (8 - n - bit));
101
+ bit += n;
102
+ n = 0;
103
+ }
104
+ }
105
+ return result;
106
+ }
107
+ }
108
+
109
+ simple = function(srcbuffer, stream) {
110
+ var bits = this.array(srcbuffer);
111
+ var size = this.header(bits);
112
+ var ret = false;
113
+ var bufsize = 100000 * size;
114
+ var buf = new Int32Array(bufsize);
115
+
116
+ do {
117
+ ret = this.decompress(bits, stream, buf, bufsize);
118
+ } while(!ret);
119
+ }
120
+
121
+ header = function(bits) {
122
+ this.byteCount = new Int32Array(256);
123
+ this.symToByte = new Uint8Array(256);
124
+ this.mtfSymbol = new Int32Array(256);
125
+ this.selectors = new Uint8Array(0x8000);
126
+
127
+ if (bits(8*3) != 4348520) messageArg.Error("No magic number found");
128
+
129
+ var i = bits(8) - 48;
130
+ if (i < 1 || i > 9) messageArg.Error("Not a BZIP archive");
131
+ return i;
132
+ };
133
+
134
+ decompress = function(bits, stream, buf, bufsize, streamCRC) {
135
+ var MAX_HUFCODE_BITS = 20;
136
+ var MAX_SYMBOLS = 258;
137
+ var SYMBOL_RUNA = 0;
138
+ var SYMBOL_RUNB = 1;
139
+ var GROUP_SIZE = 50;
140
+ var crc = 0 ^ (-1);
141
+
142
+ for(var h = '', i = 0; i < 6; i++) h += bits(8).toString(16);
143
+ if (h == "177245385090") {
144
+ var finalCRC = bits(32)|0;
145
+ if (finalCRC !== streamCRC) messageArg.Error("Error in bzip2: crc32 do not match");
146
+ // align stream to byte
147
+ bits(null);
148
+ return null; // reset streamCRC for next call
149
+ }
150
+ if (h != "314159265359") messageArg.Error("eek not valid bzip data");
151
+ var crcblock = bits(32)|0; // CRC code
152
+ if (bits(1)) messageArg.Error("unsupported obsolete version");
153
+ var origPtr = bits(24);
154
+ if (origPtr > bufsize) messageArg.Error("Initial position larger than buffer size");
155
+ var t = bits(16);
156
+ var symTotal = 0;
157
+ for (i = 0; i < 16; i++) {
158
+ if (t & (1 << (15 - i))) {
159
+ var k = bits(16);
160
+ for(j = 0; j < 16; j++) {
161
+ if (k & (1 << (15 - j))) {
162
+ this.symToByte[symTotal++] = (16 * i) + j;
163
+ }
164
+ }
165
+ }
166
+ }
167
+
168
+ var groupCount = bits(3);
169
+ if (groupCount < 2 || groupCount > 6) messageArg.Error("another error");
170
+ var nSelectors = bits(15);
171
+ if (nSelectors == 0) messageArg.Error("meh");
172
+ for(var i = 0; i < groupCount; i++) this.mtfSymbol[i] = i;
173
+
174
+ for(var i = 0; i < nSelectors; i++) {
175
+ for(var j = 0; bits(1); j++) if (j >= groupCount) messageArg.Error("whoops another error");
176
+ var uc = this.mtfSymbol[j];
177
+ for(var k: any = j-1; k>=0; k--) {
178
+ this.mtfSymbol[k+1] = this.mtfSymbol[k];
179
+ }
180
+ this.mtfSymbol[0] = uc;
181
+ this.selectors[i] = uc;
182
+ }
183
+
184
+ var symCount = symTotal + 2;
185
+ var groups = [];
186
+ var length = new Uint8Array(MAX_SYMBOLS),
187
+ temp = new Uint16Array(MAX_HUFCODE_BITS+1);
188
+
189
+ var hufGroup;
190
+
191
+ for(var j = 0; j < groupCount; j++) {
192
+ t = bits(5); //lengths
193
+ for(var i = 0; i < symCount; i++) {
194
+ while(true){
195
+ if (t < 1 || t > MAX_HUFCODE_BITS) messageArg.Error("I gave up a while ago on writing error messages");
196
+ if (!bits(1)) break;
197
+ if (!bits(1)) t++;
198
+ else t--;
199
+ }
200
+ length[i] = t;
201
+ }
202
+ var minLen, maxLen;
203
+ minLen = maxLen = length[0];
204
+ for(var i = 1; i < symCount; i++) {
205
+ if (length[i] > maxLen) maxLen = length[i];
206
+ else if (length[i] < minLen) minLen = length[i];
207
+ }
208
+ hufGroup = groups[j] = {};
209
+ hufGroup.permute = new Int32Array(MAX_SYMBOLS);
210
+ hufGroup.limit = new Int32Array(MAX_HUFCODE_BITS + 1);
211
+ hufGroup.base = new Int32Array(MAX_HUFCODE_BITS + 1);
212
+
213
+ hufGroup.minLen = minLen;
214
+ hufGroup.maxLen = maxLen;
215
+ var base = hufGroup.base;
216
+ var limit = hufGroup.limit;
217
+ var pp = 0;
218
+ for(var i: number = minLen; i <= maxLen; i++)
219
+ for(var t: any = 0; t < symCount; t++)
220
+ if (length[t] == i) hufGroup.permute[pp++] = t;
221
+ for(i = minLen; i <= maxLen; i++) temp[i] = limit[i] = 0;
222
+ for(i = 0; i < symCount; i++) temp[length[i]]++;
223
+ pp = t = 0;
224
+ for(i = minLen; i < maxLen; i++) {
225
+ pp += temp[i];
226
+ limit[i] = pp - 1;
227
+ pp <<= 1;
228
+ base[i+1] = pp - (t += temp[i]);
229
+ }
230
+ limit[maxLen] = pp + temp[maxLen] - 1;
231
+ base[minLen] = 0;
232
+ }
233
+
234
+ for(var i = 0; i < 256; i++) {
235
+ this.mtfSymbol[i] = i;
236
+ this.byteCount[i] = 0;
237
+ }
238
+ var runPos, count, symCount: number, selector;
239
+ runPos = count = symCount = selector = 0;
240
+ while(true) {
241
+ if (!(symCount--)) {
242
+ symCount = GROUP_SIZE - 1;
243
+ if (selector >= nSelectors) messageArg.Error("meow i'm a kitty, that's an error");
244
+ hufGroup = groups[this.selectors[selector++]];
245
+ base = hufGroup.base;
246
+ limit = hufGroup.limit;
247
+ }
248
+ i = hufGroup.minLen;
249
+ j = bits(i);
250
+ while(true) {
251
+ if (i > hufGroup.maxLen) messageArg.Error("rawr i'm a dinosaur");
252
+ if (j <= limit[i]) break;
253
+ i++;
254
+ j = (j << 1) | bits(1);
255
+ }
256
+ j -= base[i];
257
+ if (j < 0 || j >= MAX_SYMBOLS) messageArg.Error("moo i'm a cow");
258
+ var nextSym = hufGroup.permute[j];
259
+ if (nextSym == SYMBOL_RUNA || nextSym == SYMBOL_RUNB) {
260
+ if (!runPos){
261
+ runPos = 1;
262
+ t = 0;
263
+ }
264
+ if (nextSym == SYMBOL_RUNA) t += runPos;
265
+ else t += 2 * runPos;
266
+ runPos <<= 1;
267
+ continue;
268
+ }
269
+ if (runPos) {
270
+ runPos = 0;
271
+ if (count + t > bufsize) messageArg.Error("Boom.");
272
+ uc = this.symToByte[this.mtfSymbol[0]];
273
+ this.byteCount[uc] += t;
274
+ while(t--) buf[count++] = uc;
275
+ }
276
+ if (nextSym > symTotal) break;
277
+ if (count >= bufsize) messageArg.Error("I can't think of anything. Error");
278
+ i = nextSym - 1;
279
+ uc = this.mtfSymbol[i];
280
+ for(var k: any = i-1; k>=0; k--) {
281
+ this.mtfSymbol[k+1] = this.mtfSymbol[k];
282
+ }
283
+ this.mtfSymbol[0] = uc
284
+ uc = this.symToByte[uc];
285
+ this.byteCount[uc]++;
286
+ buf[count++] = uc;
287
+ }
288
+ if (origPtr < 0 || origPtr >= count) messageArg.Error("I'm a monkey and I'm throwing something at someone, namely you");
289
+ var j = 0;
290
+ for(var i = 0; i < 256; i++) {
291
+ k = j + this.byteCount[i];
292
+ this.byteCount[i] = j;
293
+ j = k;
294
+ }
295
+ for(var i = 0; i < count; i++) {
296
+ uc = buf[i] & 0xff;
297
+ buf[this.byteCount[uc]] |= (i << 8);
298
+ this.byteCount[uc]++;
299
+ }
300
+ var pos = 0, current = 0, run = 0;
301
+ if (count) {
302
+ pos = buf[origPtr];
303
+ current = (pos & 0xff);
304
+ pos >>= 8;
305
+ run = -1;
306
+ }
307
+ count = count;
308
+ var copies, previous, outbyte;
309
+ while(count) {
310
+ count--;
311
+ previous = current;
312
+ pos = buf[pos];
313
+ current = pos & 0xff;
314
+ pos >>= 8;
315
+ if (run++ == 3) {
316
+ copies = current;
317
+ outbyte = previous;
318
+ current = -1;
319
+ } else {
320
+ copies = 1;
321
+ outbyte = current;
322
+ }
323
+ while(copies--) {
324
+ crc = ((crc << 8) ^ this.crcTable[((crc>>24) ^ outbyte) & 0xFF])&0xFFFFFFFF; // crc32
325
+ stream(outbyte);
326
+ }
327
+ if (current != previous) run = 0;
328
+ }
329
+
330
+ crc = (crc ^ (-1)) >>> 0;
331
+ if ((crc|0) != (crcblock|0)) messageArg.Error("Error in bzip2: crc32 do not match");
332
+ streamCRC = (crc ^ ((streamCRC << 1) | (streamCRC >>> 31))) & 0xFFFFFFFF;
333
+ return streamCRC;
334
+ };
335
+ };
@@ -0,0 +1,84 @@
1
+ import * as plugins from '../plugins.js';
2
+
3
+ import { Bzip2 } from './bzip2.js';
4
+ import { bitIterator } from './bititerator.js';
5
+
6
+ export function unbzip2Stream() {
7
+ const bzip2Instance = new Bzip2();
8
+ var bufferQueue = [];
9
+ var hasBytes = 0;
10
+ var blockSize = 0;
11
+ var broken = false;
12
+ var done = false;
13
+ var bitReader = null;
14
+ var streamCRC = null;
15
+
16
+ function decompressBlock() {
17
+ if (!blockSize) {
18
+ blockSize = bzip2Instance.header(bitReader);
19
+ streamCRC = 0;
20
+ } else {
21
+ var bufsize = 100000 * blockSize;
22
+ var buf = new Int32Array(bufsize);
23
+
24
+ var chunk = [];
25
+ var f = function (b) {
26
+ chunk.push(b);
27
+ };
28
+
29
+ streamCRC = bzip2Instance.decompress(bitReader, f, buf, bufsize, streamCRC);
30
+ if (streamCRC === null) {
31
+ // reset for next bzip2 header
32
+ blockSize = 0;
33
+ return;
34
+ } else {
35
+ return Buffer.from(chunk);
36
+ }
37
+ }
38
+ }
39
+
40
+ var outlength = 0;
41
+ const decompressAndPush = async (smartDuplexStream: plugins.smartstream.SmartDuplex) => {
42
+ if (broken) return;
43
+ try {
44
+ const resultChunk = decompressBlock();
45
+ smartDuplexStream.push(resultChunk);
46
+ if (resultChunk) {
47
+ //console.error('write at', outlength.toString(16));
48
+ outlength += resultChunk.length;
49
+ }
50
+ } catch (e) {
51
+ console.error(e);
52
+ smartDuplexStream.emit('error', e);
53
+ broken = true;
54
+ return false;
55
+ }
56
+ };
57
+
58
+ return new plugins.smartstream.SmartDuplex({
59
+ writeFunction: async function (data, streamTools) {
60
+ //console.error('received', data.length,'bytes in', typeof data);
61
+ bufferQueue.push(data);
62
+ hasBytes += data.length;
63
+ if (bitReader === null) {
64
+ bitReader = bitIterator(function () {
65
+ return bufferQueue.shift();
66
+ });
67
+ }
68
+ while (!broken && hasBytes - bitReader.bytesRead + 1 >= (25000 + 100000 * blockSize || 4)) {
69
+ //console.error('decompressing with', hasBytes - bitReader.bytesRead + 1, 'bytes in buffer');
70
+ await decompressAndPush(this);
71
+ }
72
+ },
73
+ finalFunction: async function (streamTools) {
74
+ //console.error(x,'last compressing with', hasBytes, 'bytes in buffer');
75
+ while (!broken && bitReader && hasBytes > bitReader.bytesRead) {
76
+ await decompressAndPush(this);
77
+ }
78
+ if (!broken) {
79
+ if (streamCRC !== null) this.emit('error', new Error('input stream ended prematurely'));
80
+ this.queue(null);
81
+ }
82
+ },
83
+ });
84
+ }
@@ -30,14 +30,14 @@ export class ArchiveAnalyzer {
30
30
  }
31
31
 
32
32
 
33
- private getDecompressionStream(
33
+ private async getDecompressionStream(
34
34
  mimeTypeArg: plugins.fileType.FileTypeResult['mime']
35
- ): plugins.stream.Transform | plugins.stream.Duplex | plugins.tarStream.Extract {
35
+ ): Promise<plugins.stream.Transform | plugins.stream.Duplex | plugins.tarStream.Extract> {
36
36
  switch (mimeTypeArg) {
37
37
  case 'application/gzip':
38
38
  return this.smartArchiveRef.gzipTools.getDecompressionStream();
39
39
  case 'application/x-bzip2':
40
- return this.smartArchiveRef.bzip2Tools.getDecompressionStream(); // replace with your own bzip2 decompression stream
40
+ return await this.smartArchiveRef.bzip2Tools.getDecompressionStream(); // replace with your own bzip2 decompression stream
41
41
  case 'application/x-tar':
42
42
  return this.smartArchiveRef.tarTools.getDecompressionStream(); // replace with your own tar decompression stream
43
43
  default:
@@ -53,7 +53,7 @@ export class ArchiveAnalyzer {
53
53
  readableObjectMode: true,
54
54
  writeFunction: async (chunkArg: Buffer, streamtools) => {
55
55
  const fileType = await plugins.fileType.fileTypeFromBuffer(chunkArg);
56
- const decompressionStream = this.getDecompressionStream(fileType?.mime as any);
56
+ const decompressionStream = await this.getDecompressionStream(fileType?.mime as any);
57
57
  resultStream.push(chunkArg);
58
58
  if (firstRun) {
59
59
  firstRun = false;
@@ -1,36 +1,7 @@
1
1
  import type { SmartArchive } from './classes.smartarchive.js';
2
2
  import * as plugins from './plugins.js';
3
3
 
4
- export class DecompressBzip2Transform extends plugins.stream.Transform {
5
- private bzip2Decompressor: plugins.stream.Transform;
6
-
7
- constructor() {
8
- super();
9
- // Initialize the bzip2 decompressor once here
10
- this.bzip2Decompressor = plugins.unbzip2Stream();
11
- this.bzip2Decompressor.on('data', (data: Buffer) => {
12
- // When data is decompressed, push it to the stream
13
- this.push(data);
14
- });
15
- this.bzip2Decompressor.on('error', (err) => {
16
- // If an error occurs, emit it on this stream
17
- this.emit('error', err);
18
- });
19
- }
20
-
21
- _transform(chunk: Buffer, encoding: BufferEncoding, callback: plugins.stream.TransformCallback) {
22
- // Pass the chunk directly to the decompressor
23
- // The decompressor will handle the state across chunks
24
- this.bzip2Decompressor.write(chunk);
25
- callback();
26
- }
27
-
28
- _flush(callback: plugins.stream.TransformCallback) {
29
- // When the stream is ending, end the decompressor stream as well
30
- this.bzip2Decompressor.end();
31
- callback();
32
- }
33
- }
4
+ import { unbzip2Stream } from './bzip2/index.js';
34
5
 
35
6
  export class Bzip2Tools {
36
7
  smartArchiveRef: SmartArchive;
@@ -40,6 +11,6 @@ export class Bzip2Tools {
40
11
  }
41
12
 
42
13
  getDecompressionStream() {
43
- return new DecompressBzip2Transform();
14
+ return unbzip2Stream();
44
15
  }
45
16
  }