Skip to content

Commit 1fc18fd

Browse files
committed
feat: support LZMA decompression
fix #3
1 parent d4b0837 commit 1fc18fd

File tree

3 files changed

+42
-23
lines changed

3 files changed

+42
-23
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"postversion": "tpv"
2222
},
2323
"dependencies": {
24-
"@arkntools/unity-js-tools": "^3.1.1",
24+
"@arkntools/unity-js-tools": "^3.2.0",
2525
"aes-js": "^3.1.2",
2626
"jimp": "^0.22.12",
2727
"jszip": "^3.10.1",
@@ -40,7 +40,7 @@
4040
"eslint-plugin-import": "^2.29.1",
4141
"eslint-plugin-n": "^17.8.1",
4242
"eslint-plugin-promise": "^6.2.0",
43-
"lint-staged": "^15.2.6",
43+
"lint-staged": "^15.2.7",
4444
"prettier": "^3.3.2",
4545
"rimraf": "^5.0.7",
4646
"ts-node": "^10.9.2",

src/bundle.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { decompressLz4 } from '@arkntools/unity-js-tools';
1+
import { decompressLz4, decompressLzmaWithSize } from '@arkntools/unity-js-tools';
22
import type Jimp from 'jimp';
33
import { Asset } from './asset';
44
import type { AssetObject } from './classes';
@@ -192,7 +192,7 @@ export class Bundle {
192192
private readBlocksInfoAndDirectory(r: ArrayBufferReader) {
193193
const { version, flags, compressedBlocksInfoSize, uncompressedBlocksInfoSize } = this.header;
194194
if (flags & ArchiveFlags.BLOCKS_INFO_AT_THE_END) {
195-
throw new Error(`Unsupported bundle flags: ${flags}`);
195+
throw new Error(`Unsupported bundle flags: ${ArchiveFlags[flags] || flags}`);
196196
}
197197

198198
if (version >= 7) r.align(16);
@@ -284,14 +284,18 @@ const decompressBuffer = (
284284
case CompressionType.NONE:
285285
return data;
286286

287+
case CompressionType.LZMA:
288+
if (!uncompressedSize) throw new Error('Uncompressed size not provided');
289+
return decompressLzmaWithSize(new Uint8Array(data), uncompressedSize);
290+
287291
case CompressionType.LZ4:
288-
case CompressionType.LZ4_HC: {
292+
case CompressionType.LZ4_HC:
293+
case CompressionType.LZHAM:
289294
if (!uncompressedSize) throw new Error('Uncompressed size not provided');
290295
return decompressLz4(new Uint8Array(data), uncompressedSize).buffer;
291-
}
292296

293297
default:
294-
throw new Error(`Unsupported compression type: ${type}`);
298+
throw new Error(`Unsupported compression type: ${CompressionType[type] || type}`);
295299
}
296300
};
297301

yarn.lock

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@
77
resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
88
integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
99

10-
"@arkntools/unity-js-tools-wasm@3.1.1":
11-
version "3.1.1"
12-
resolved "https://registry.yarnpkg.com/@arkntools/unity-js-tools-wasm/-/unity-js-tools-wasm-3.1.1.tgz#0c48d3c2e5bce8cacc22006bf43361ac710362ef"
13-
integrity sha512-IJpVlrX6Ka/H+ECAiCRjyBSOJjabyn8sDwYaVJ5mvccVnsy3H0SuPzka7TQ6ygfuGsIik8VjswRclyPc9frLsw==
10+
"@arkntools/unity-js-tools-wasm@3.2.0":
11+
version "3.2.0"
12+
resolved "https://registry.yarnpkg.com/@arkntools/unity-js-tools-wasm/-/unity-js-tools-wasm-3.2.0.tgz#30254c8d259188f9047373f08c640e992298f24e"
13+
integrity sha512-g3UateFLIcoF6cbaFxEMUf9Jfrvp3DgIKHx7xWA1LlSQEBem2xPQjMR58n1DIY0v3Fmx/8X7K806ufjlC/Q5zg==
1414

15-
"@arkntools/unity-js-tools@^3.1.1":
16-
version "3.1.1"
17-
resolved "https://registry.yarnpkg.com/@arkntools/unity-js-tools/-/unity-js-tools-3.1.1.tgz#8112523e382dd958e6d72aff1891b9d130137759"
18-
integrity sha512-JBvxI2ctnJF8N670GP1ggR6gp/FTEuTlsOm+BJTgRgmwYxkDQLWO+N+RTmK0pb5l6TZNvcgFG1/A6AQlnmHU0g==
15+
"@arkntools/unity-js-tools@^3.2.0":
16+
version "3.2.0"
17+
resolved "https://registry.yarnpkg.com/@arkntools/unity-js-tools/-/unity-js-tools-3.2.0.tgz#648b2867f92c1b6303c225122d135319a063b4de"
18+
integrity sha512-FzWRWQF+bicVwYAa+LTmyXjlxZ4U+Bf4NCvg/X9JspEwRD7TXCcTeL2Rn2ZQGVkDa24rDIPnfd1gYHfMuY6CPQ==
1919
dependencies:
20-
"@arkntools/unity-js-tools-wasm" "3.1.1"
20+
"@arkntools/unity-js-tools-wasm" "3.2.0"
2121

2222
"@cspotcode/source-map-support@^0.8.0":
2323
version "0.8.1"
@@ -2096,10 +2096,10 @@ lilconfig@~3.1.1:
20962096
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3"
20972097
integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==
20982098

2099-
lint-staged@^15.2.6:
2100-
version "15.2.6"
2101-
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.2.6.tgz#6e4b0c4ba4a692c52e2143a3bb4b360ac5832121"
2102-
integrity sha512-M/3PdijFXT/A5lnbSK3EQNLbIIrkE00JZaD39r7t4kfFOqT1Ly9LgSZSMMtvQ3p2/C8Nyj/ou0vkNHmEwqoB8g==
2099+
lint-staged@^15.2.7:
2100+
version "15.2.7"
2101+
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.2.7.tgz#97867e29ed632820c0fb90be06cd9ed384025649"
2102+
integrity sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==
21032103
dependencies:
21042104
chalk "~5.3.0"
21052105
commander "~12.1.0"
@@ -2823,8 +2823,16 @@ string-argv@~0.3.2:
28232823
resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6"
28242824
integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==
28252825

2826-
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0:
2827-
name string-width-cjs
2826+
"string-width-cjs@npm:string-width@^4.2.0":
2827+
version "4.2.3"
2828+
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
2829+
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
2830+
dependencies:
2831+
emoji-regex "^8.0.0"
2832+
is-fullwidth-code-point "^3.0.0"
2833+
strip-ansi "^6.0.1"
2834+
2835+
string-width@^4.1.0:
28282836
version "4.2.3"
28292837
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
28302838
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -2893,7 +2901,14 @@ string_decoder@~1.1.1:
28932901
dependencies:
28942902
safe-buffer "~5.1.0"
28952903

2896-
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
2904+
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
2905+
version "6.0.1"
2906+
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
2907+
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
2908+
dependencies:
2909+
ansi-regex "^5.0.1"
2910+
2911+
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
28972912
version "6.0.1"
28982913
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
28992914
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==

0 commit comments

Comments
 (0)