@swf2es/format 0.1.0 → 0.1.2
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/package.json +2 -2
- package/dist/lzma.d.ts +0 -33
- package/dist/lzma.d.ts.map +0 -1
- package/dist/lzma.js +0 -279
- package/dist/lzma.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@swf2es/format",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "SWF, ABC and AVM1 action parsers shared by the compiler and the player",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"swf",
|
|
@@ -31,6 +31,6 @@
|
|
|
31
31
|
"LICENSE.third-party"
|
|
32
32
|
],
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@swf2es/native": "0.1.
|
|
34
|
+
"@swf2es/native": "0.1.2"
|
|
35
35
|
}
|
|
36
36
|
}
|
package/dist/lzma.d.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* An LZMA decoder, as the LZMA SDK's specification decoder (LzmaSpec.cpp,
|
|
3
|
-
* Igor Pavlov, public domain) describes one, for the SWF bodies and
|
|
4
|
-
* ByteArrays swf2es reads. lzma1, which still compresses, decoded them
|
|
5
|
-
* before, but read the properties' first byte as signed, so 128 and more
|
|
6
|
-
* asked it for up to 2^30 literal coders, and went on decoding after its
|
|
7
|
-
* input had ended, for as long as the header's length asked: 30 bytes of
|
|
8
|
-
* zeros naming 4 GB decoded 4 GB. This one refuses both: properties past
|
|
9
|
-
* 224, which no encoder writes, and any read past the input's end, which a
|
|
10
|
-
* whole stream never makes.
|
|
11
|
-
*/
|
|
12
|
-
/** A stream this decoder cannot read: corrupt, truncated, or not LZMA. */
|
|
13
|
-
export declare class LzmaError extends Error {
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* The literal context bits, the literal position bits and the position
|
|
17
|
-
* bits of a properties byte.
|
|
18
|
-
*/
|
|
19
|
-
export declare function lzmaProperties(byte: number): {
|
|
20
|
-
lc: number;
|
|
21
|
-
lp: number;
|
|
22
|
-
pb: number;
|
|
23
|
-
};
|
|
24
|
-
/**
|
|
25
|
-
* Decode an LZMA stream, `input` from `start`, of the properties in its
|
|
26
|
-
* 5 bytes at `properties` of `input`, to `length` bytes, or to its end
|
|
27
|
-
* marker if it has one first: the bytes it decoded, fewer than `length`
|
|
28
|
-
* after a marker, after `offset` bytes left for the caller, as a SWF's
|
|
29
|
-
* header, so that its file needs no copy. The output grows as it is
|
|
30
|
-
* written, never past `length`.
|
|
31
|
-
*/
|
|
32
|
-
export declare function lzmaDecode(input: Uint8Array, properties: number, start: number, length: number, offset?: number): Uint8Array;
|
|
33
|
-
//# sourceMappingURL=lzma.d.ts.map
|
package/dist/lzma.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lzma.d.ts","sourceRoot":"","sources":["../src/lzma.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,0EAA0E;AAC1E,qBAAa,SAAU,SAAQ,KAAK;CAAG;AAuBvC;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAMnF;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,SAAI,GACT,UAAU,CAiQZ"}
|
package/dist/lzma.js
DELETED
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* An LZMA decoder, as the LZMA SDK's specification decoder (LzmaSpec.cpp,
|
|
3
|
-
* Igor Pavlov, public domain) describes one, for the SWF bodies and
|
|
4
|
-
* ByteArrays swf2es reads. lzma1, which still compresses, decoded them
|
|
5
|
-
* before, but read the properties' first byte as signed, so 128 and more
|
|
6
|
-
* asked it for up to 2^30 literal coders, and went on decoding after its
|
|
7
|
-
* input had ended, for as long as the header's length asked: 30 bytes of
|
|
8
|
-
* zeros naming 4 GB decoded 4 GB. This one refuses both: properties past
|
|
9
|
-
* 224, which no encoder writes, and any read past the input's end, which a
|
|
10
|
-
* whole stream never makes.
|
|
11
|
-
*/
|
|
12
|
-
/** A stream this decoder cannot read: corrupt, truncated, or not LZMA. */
|
|
13
|
-
export class LzmaError extends Error {
|
|
14
|
-
}
|
|
15
|
-
const TOP = 1 << 24;
|
|
16
|
-
const PROB_INIT = 1024;
|
|
17
|
-
const STATES = 12;
|
|
18
|
-
const POS_BITS_MAX = 4;
|
|
19
|
-
const LEN_TO_POS_STATES = 4;
|
|
20
|
-
const END_POS_MODEL_INDEX = 14;
|
|
21
|
-
const FULL_DISTANCES = 1 << (END_POS_MODEL_INDEX >> 1);
|
|
22
|
-
const ALIGN_BITS = 4;
|
|
23
|
-
const MATCH_MIN_LEN = 2;
|
|
24
|
-
// A length decoder's probabilities, in one array: choice, choice2, the
|
|
25
|
-
// low and mid trees (3 bits) for each of 16 position states, the high tree (8 bits).
|
|
26
|
-
const LEN_CHOICE = 0;
|
|
27
|
-
const LEN_CHOICE2 = 1;
|
|
28
|
-
const LEN_LOW = 2;
|
|
29
|
-
const LEN_MID = LEN_LOW + (16 << 3);
|
|
30
|
-
const LEN_HIGH = LEN_MID + (16 << 3);
|
|
31
|
-
const LEN_SIZE = LEN_HIGH + 256;
|
|
32
|
-
const probabilities = (n) => new Uint16Array(n).fill(PROB_INIT);
|
|
33
|
-
/**
|
|
34
|
-
* The literal context bits, the literal position bits and the position
|
|
35
|
-
* bits of a properties byte.
|
|
36
|
-
*/
|
|
37
|
-
export function lzmaProperties(byte) {
|
|
38
|
-
if (byte >= 9 * 5 * 5) {
|
|
39
|
-
throw new LzmaError(`properties byte ${byte}`);
|
|
40
|
-
}
|
|
41
|
-
return { lc: byte % 9, lp: Math.floor(byte / 9) % 5, pb: Math.floor(byte / 45) };
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Decode an LZMA stream, `input` from `start`, of the properties in its
|
|
45
|
-
* 5 bytes at `properties` of `input`, to `length` bytes, or to its end
|
|
46
|
-
* marker if it has one first: the bytes it decoded, fewer than `length`
|
|
47
|
-
* after a marker, after `offset` bytes left for the caller, as a SWF's
|
|
48
|
-
* header, so that its file needs no copy. The output grows as it is
|
|
49
|
-
* written, never past `length`.
|
|
50
|
-
*/
|
|
51
|
-
export function lzmaDecode(input, properties, start, length, offset = 0) {
|
|
52
|
-
if (length < 0) {
|
|
53
|
-
throw new LzmaError(`length ${length}`);
|
|
54
|
-
}
|
|
55
|
-
const { lc, lp, pb } = lzmaProperties(input[properties]);
|
|
56
|
-
const dictionary = (input[properties + 1] |
|
|
57
|
-
(input[properties + 2] << 8) |
|
|
58
|
-
(input[properties + 3] << 16) |
|
|
59
|
-
(input[properties + 4] << 24)) >>>
|
|
60
|
-
0;
|
|
61
|
-
// As the SDK's decoder, a dictionary of at least 4 KB, whatever the header says.
|
|
62
|
-
const dictSize = Math.max(dictionary, 4096);
|
|
63
|
-
let pos = start;
|
|
64
|
-
const end = input.length;
|
|
65
|
-
const readByte = () => {
|
|
66
|
-
if (pos >= end) {
|
|
67
|
-
throw new LzmaError("truncated");
|
|
68
|
-
}
|
|
69
|
-
return input[pos++];
|
|
70
|
-
};
|
|
71
|
-
// The range decoder: the first byte is 0, then the code's 4.
|
|
72
|
-
if (readByte() !== 0) {
|
|
73
|
-
throw new LzmaError("corrupt");
|
|
74
|
-
}
|
|
75
|
-
let range = 0xffffffff;
|
|
76
|
-
let code = 0;
|
|
77
|
-
for (let i = 0; i < 4; i++) {
|
|
78
|
-
code = ((code << 8) | readByte()) >>> 0;
|
|
79
|
-
}
|
|
80
|
-
if (code === range) {
|
|
81
|
-
throw new LzmaError("corrupt");
|
|
82
|
-
}
|
|
83
|
-
const bit = (probs, i) => {
|
|
84
|
-
const v = probs[i];
|
|
85
|
-
const bound = (range >>> 11) * v;
|
|
86
|
-
let symbol;
|
|
87
|
-
if (code < bound) {
|
|
88
|
-
probs[i] = v + ((2048 - v) >>> 5);
|
|
89
|
-
range = bound;
|
|
90
|
-
symbol = 0;
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
probs[i] = v - (v >>> 5);
|
|
94
|
-
code -= bound;
|
|
95
|
-
range -= bound;
|
|
96
|
-
symbol = 1;
|
|
97
|
-
}
|
|
98
|
-
if (range < TOP) {
|
|
99
|
-
range = (range * 256) >>> 0;
|
|
100
|
-
code = ((code * 256) | readByte()) >>> 0;
|
|
101
|
-
}
|
|
102
|
-
return symbol;
|
|
103
|
-
};
|
|
104
|
-
const directBits = (count) => {
|
|
105
|
-
let result = 0;
|
|
106
|
-
for (let i = 0; i < count; i++) {
|
|
107
|
-
range >>>= 1;
|
|
108
|
-
let b = 0;
|
|
109
|
-
if (code >= range) {
|
|
110
|
-
code -= range;
|
|
111
|
-
b = 1;
|
|
112
|
-
}
|
|
113
|
-
result = result * 2 + b;
|
|
114
|
-
if (range < TOP) {
|
|
115
|
-
range = (range * 256) >>> 0;
|
|
116
|
-
code = ((code * 256) | readByte()) >>> 0;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return result;
|
|
120
|
-
};
|
|
121
|
-
const tree = (probs, offset, bits) => {
|
|
122
|
-
let m = 1;
|
|
123
|
-
for (let i = 0; i < bits; i++) {
|
|
124
|
-
m = (m << 1) + bit(probs, offset + m);
|
|
125
|
-
}
|
|
126
|
-
return m - (1 << bits);
|
|
127
|
-
};
|
|
128
|
-
const reverseTree = (probs, offset, bits) => {
|
|
129
|
-
let m = 1;
|
|
130
|
-
let symbol = 0;
|
|
131
|
-
for (let i = 0; i < bits; i++) {
|
|
132
|
-
const b = bit(probs, offset + m);
|
|
133
|
-
m = (m << 1) + b;
|
|
134
|
-
symbol |= b << i;
|
|
135
|
-
}
|
|
136
|
-
return symbol;
|
|
137
|
-
};
|
|
138
|
-
const lenDecode = (probs, posState) => {
|
|
139
|
-
if (bit(probs, LEN_CHOICE) === 0) {
|
|
140
|
-
return tree(probs, LEN_LOW + (posState << 3), 3);
|
|
141
|
-
}
|
|
142
|
-
if (bit(probs, LEN_CHOICE2) === 0) {
|
|
143
|
-
return 8 + tree(probs, LEN_MID + (posState << 3), 3);
|
|
144
|
-
}
|
|
145
|
-
return 16 + tree(probs, LEN_HIGH, 8);
|
|
146
|
-
};
|
|
147
|
-
const literals = probabilities(0x300 << (lc + lp));
|
|
148
|
-
const posSlots = probabilities(LEN_TO_POS_STATES << 6);
|
|
149
|
-
const posDecoders = probabilities(1 + FULL_DISTANCES - END_POS_MODEL_INDEX);
|
|
150
|
-
const align = probabilities(1 << ALIGN_BITS);
|
|
151
|
-
const isMatch = probabilities(STATES << POS_BITS_MAX);
|
|
152
|
-
const isRep = probabilities(STATES);
|
|
153
|
-
const isRepG0 = probabilities(STATES);
|
|
154
|
-
const isRepG1 = probabilities(STATES);
|
|
155
|
-
const isRepG2 = probabilities(STATES);
|
|
156
|
-
const isRep0Long = probabilities(STATES << POS_BITS_MAX);
|
|
157
|
-
const lens = probabilities(LEN_SIZE);
|
|
158
|
-
const repLens = probabilities(LEN_SIZE);
|
|
159
|
-
const pbMask = (1 << pb) - 1;
|
|
160
|
-
const lpMask = (1 << lp) - 1;
|
|
161
|
-
let out = new Uint8Array(offset + Math.min(length, 1 << 16));
|
|
162
|
-
let outPos = 0;
|
|
163
|
-
/** Room for `n` more bytes, the buffer doubled as it fills, never past `length`. */
|
|
164
|
-
const room = (n) => {
|
|
165
|
-
if (offset + outPos + n > out.length) {
|
|
166
|
-
const size = Math.min(length, Math.max((out.length - offset) * 2, outPos + n));
|
|
167
|
-
const grown = new Uint8Array(offset + size);
|
|
168
|
-
grown.set(out.subarray(0, offset + outPos));
|
|
169
|
-
out = grown;
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
let state = 0;
|
|
173
|
-
let rep0 = 0;
|
|
174
|
-
let rep1 = 0;
|
|
175
|
-
let rep2 = 0;
|
|
176
|
-
let rep3 = 0;
|
|
177
|
-
while (outPos < length) {
|
|
178
|
-
const posState = outPos & pbMask;
|
|
179
|
-
if (bit(isMatch, (state << POS_BITS_MAX) + posState) === 0) {
|
|
180
|
-
const prev = outPos > 0 ? out[offset + outPos - 1] : 0;
|
|
181
|
-
const base = 0x300 * (((outPos & lpMask) << lc) + (prev >>> (8 - lc)));
|
|
182
|
-
let symbol = 1;
|
|
183
|
-
if (state >= 7) {
|
|
184
|
-
let matchByte = out[offset + outPos - rep0 - 1];
|
|
185
|
-
do {
|
|
186
|
-
const matchBit = (matchByte >>> 7) & 1;
|
|
187
|
-
matchByte <<= 1;
|
|
188
|
-
const b = bit(literals, base + ((1 + matchBit) << 8) + symbol);
|
|
189
|
-
symbol = (symbol << 1) | b;
|
|
190
|
-
if (matchBit !== b) {
|
|
191
|
-
break;
|
|
192
|
-
}
|
|
193
|
-
} while (symbol < 0x100);
|
|
194
|
-
}
|
|
195
|
-
while (symbol < 0x100) {
|
|
196
|
-
symbol = (symbol << 1) | bit(literals, base + symbol);
|
|
197
|
-
}
|
|
198
|
-
room(1);
|
|
199
|
-
out[offset + outPos++] = symbol - 0x100;
|
|
200
|
-
state = state < 4 ? 0 : state < 10 ? state - 3 : state - 6;
|
|
201
|
-
continue;
|
|
202
|
-
}
|
|
203
|
-
let len;
|
|
204
|
-
if (bit(isRep, state) !== 0) {
|
|
205
|
-
if (outPos === 0) {
|
|
206
|
-
throw new LzmaError("corrupt");
|
|
207
|
-
}
|
|
208
|
-
if (bit(isRepG0, state) === 0) {
|
|
209
|
-
if (bit(isRep0Long, (state << POS_BITS_MAX) + posState) === 0) {
|
|
210
|
-
state = state < 7 ? 9 : 11;
|
|
211
|
-
room(1);
|
|
212
|
-
out[offset + outPos] = out[offset + outPos - rep0 - 1];
|
|
213
|
-
outPos++;
|
|
214
|
-
continue;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
let distance;
|
|
219
|
-
if (bit(isRepG1, state) === 0) {
|
|
220
|
-
distance = rep1;
|
|
221
|
-
}
|
|
222
|
-
else {
|
|
223
|
-
if (bit(isRepG2, state) === 0) {
|
|
224
|
-
distance = rep2;
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
distance = rep3;
|
|
228
|
-
rep3 = rep2;
|
|
229
|
-
}
|
|
230
|
-
rep2 = rep1;
|
|
231
|
-
}
|
|
232
|
-
rep1 = rep0;
|
|
233
|
-
rep0 = distance;
|
|
234
|
-
}
|
|
235
|
-
len = lenDecode(repLens, posState);
|
|
236
|
-
state = state < 7 ? 8 : 11;
|
|
237
|
-
}
|
|
238
|
-
else {
|
|
239
|
-
rep3 = rep2;
|
|
240
|
-
rep2 = rep1;
|
|
241
|
-
rep1 = rep0;
|
|
242
|
-
len = lenDecode(lens, posState);
|
|
243
|
-
state = state < 7 ? 7 : 10;
|
|
244
|
-
const lenState = Math.min(len, LEN_TO_POS_STATES - 1);
|
|
245
|
-
const posSlot = tree(posSlots, lenState << 6, 6);
|
|
246
|
-
if (posSlot < 4) {
|
|
247
|
-
rep0 = posSlot;
|
|
248
|
-
}
|
|
249
|
-
else {
|
|
250
|
-
const bits = (posSlot >>> 1) - 1;
|
|
251
|
-
let distance = (2 | (posSlot & 1)) * 2 ** bits;
|
|
252
|
-
if (posSlot < END_POS_MODEL_INDEX) {
|
|
253
|
-
distance += reverseTree(posDecoders, distance - posSlot, bits);
|
|
254
|
-
}
|
|
255
|
-
else {
|
|
256
|
-
distance += directBits(bits - ALIGN_BITS) * 16;
|
|
257
|
-
distance += reverseTree(align, 0, ALIGN_BITS);
|
|
258
|
-
}
|
|
259
|
-
rep0 = distance;
|
|
260
|
-
}
|
|
261
|
-
// The end marker.
|
|
262
|
-
if (rep0 === 0xffffffff) {
|
|
263
|
-
break;
|
|
264
|
-
}
|
|
265
|
-
if (rep0 >= dictSize || rep0 >= outPos) {
|
|
266
|
-
throw new LzmaError("corrupt");
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
// A match past the length ends the output there, as a prefix asks.
|
|
270
|
-
len = Math.min(len + MATCH_MIN_LEN, length - outPos);
|
|
271
|
-
room(len);
|
|
272
|
-
for (let i = 0; i < len; i++) {
|
|
273
|
-
out[offset + outPos] = out[offset + outPos - rep0 - 1];
|
|
274
|
-
outPos++;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
return offset + outPos === out.length ? out : out.subarray(0, offset + outPos);
|
|
278
|
-
}
|
|
279
|
-
//# sourceMappingURL=lzma.js.map
|
package/dist/lzma.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lzma.js","sourceRoot":"","sources":["../src/lzma.ts"],"names":[],"mappings":"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"}
|