@highlight-run/rrweb 1.2.1 → 2.0.4

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 (191) hide show
  1. package/dist/plugins/console-record.js +454 -0
  2. package/dist/plugins/console-record.min.js +12 -15
  3. package/dist/plugins/console-record.min.js.map +1 -1
  4. package/dist/plugins/console-replay.js +164 -0
  5. package/dist/plugins/console-replay.min.js +5 -0
  6. package/dist/plugins/console-replay.min.js.map +1 -0
  7. package/dist/plugins/sequential-id-record.js +30 -0
  8. package/dist/plugins/sequential-id-record.min.js +2 -0
  9. package/dist/plugins/sequential-id-record.min.js.map +1 -0
  10. package/dist/plugins/sequential-id-replay.js +33 -0
  11. package/dist/plugins/sequential-id-replay.min.js +2 -0
  12. package/dist/plugins/sequential-id-replay.min.js.map +1 -0
  13. package/dist/record/rrweb-record-pack.js +664 -0
  14. package/dist/record/rrweb-record-pack.min.js +4 -0
  15. package/dist/record/rrweb-record-pack.min.js.map +1 -0
  16. package/dist/record/rrweb-record.js +3202 -0
  17. package/dist/record/rrweb-record.min.js +5 -0
  18. package/dist/record/rrweb-record.min.js.map +1 -0
  19. package/dist/replay/rrweb-replay-unpack.js +4926 -0
  20. package/dist/replay/rrweb-replay-unpack.min.js +18 -0
  21. package/dist/replay/rrweb-replay-unpack.min.js.map +1 -0
  22. package/dist/replay/rrweb-replay.js +4518 -0
  23. package/dist/replay/rrweb-replay.min.js +18 -0
  24. package/dist/replay/rrweb-replay.min.js.map +1 -0
  25. package/dist/rrweb-all.js +8889 -0
  26. package/dist/rrweb-all.min.js +29 -0
  27. package/dist/rrweb-all.min.js.map +1 -0
  28. package/dist/rrweb.js +7558 -0
  29. package/dist/rrweb.min.js +6 -17
  30. package/dist/rrweb.min.js.map +1 -1
  31. package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +12 -0
  32. package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +7 -0
  33. package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +31 -0
  34. package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +11 -0
  35. package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +18 -0
  36. package/es/rrweb/_virtual/image-bitmap-data-url-worker.js +6 -0
  37. package/es/rrweb/ext/@xstate/fsm/es/index.js +17 -0
  38. package/es/rrweb/ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js +49 -0
  39. package/es/rrweb/ext/fflate/esm/browser.js +777 -0
  40. package/es/rrweb/ext/mitt/dist/mitt.es.js +63 -0
  41. package/es/rrweb/ext/tslib/tslib.es6.js +38 -0
  42. package/es/rrweb/packages/rrdom/es/virtual-dom.js +1099 -0
  43. package/es/rrweb/packages/rrweb/src/entries/all.js +13 -0
  44. package/es/rrweb/packages/rrweb/src/index.js +14 -0
  45. package/es/rrweb/packages/rrweb/src/packer/base.js +3 -0
  46. package/es/rrweb/packages/rrweb/src/packer/pack.js +9 -0
  47. package/es/rrweb/packages/rrweb/src/packer/unpack.js +29 -0
  48. package/es/rrweb/packages/rrweb/src/plugins/console/record/error-stack-parser.js +178 -0
  49. package/es/rrweb/packages/rrweb/src/plugins/console/record/index.js +115 -0
  50. package/es/rrweb/packages/rrweb/src/plugins/console/record/stringify.js +128 -0
  51. package/es/rrweb/packages/rrweb/src/plugins/console/replay/index.js +94 -0
  52. package/es/rrweb/packages/rrweb/src/plugins/sequential-id/record/index.js +22 -0
  53. package/es/rrweb/packages/rrweb/src/plugins/sequential-id/replay/index.js +28 -0
  54. package/es/rrweb/packages/rrweb/src/record/iframe-manager.js +31 -0
  55. package/es/rrweb/packages/rrweb/src/record/index.js +356 -0
  56. package/es/rrweb/packages/rrweb/src/record/mutation.js +491 -0
  57. package/es/rrweb/packages/rrweb/src/record/observer.js +590 -0
  58. package/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js +49 -0
  59. package/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js +172 -0
  60. package/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js +25 -0
  61. package/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js +123 -0
  62. package/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js +59 -0
  63. package/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js +43 -0
  64. package/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js +31 -0
  65. package/es/rrweb/packages/rrweb/src/replay/canvas/2d.js +29 -0
  66. package/es/rrweb/packages/rrweb/src/replay/canvas/deserialize-args.js +67 -0
  67. package/es/rrweb/packages/rrweb/src/replay/canvas/index.js +43 -0
  68. package/es/rrweb/packages/rrweb/src/replay/canvas/webgl.js +62 -0
  69. package/es/rrweb/packages/rrweb/src/replay/index.js +1555 -0
  70. package/es/rrweb/packages/rrweb/src/replay/machine.js +281 -0
  71. package/es/rrweb/packages/rrweb/src/replay/smoothscroll.js +219 -0
  72. package/es/rrweb/packages/rrweb/src/replay/styles/inject-style.js +8 -0
  73. package/es/rrweb/packages/rrweb/src/replay/timer.js +92 -0
  74. package/es/rrweb/packages/rrweb/src/types.js +75 -0
  75. package/es/rrweb/packages/rrweb/src/utils.js +315 -0
  76. package/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js +1821 -0
  77. package/lib/plugins/console-record.js +492 -0
  78. package/lib/plugins/console-replay.js +218 -0
  79. package/lib/plugins/sequential-id-record.js +27 -0
  80. package/lib/plugins/sequential-id-replay.js +32 -0
  81. package/lib/record/rrweb-record-pack.js +787 -0
  82. package/lib/record/rrweb-record.js +3363 -0
  83. package/lib/replay/rrweb-replay-unpack.js +5075 -0
  84. package/lib/replay/rrweb-replay.js +4665 -0
  85. package/lib/rrweb-all.js +9181 -0
  86. package/lib/rrweb.js +7814 -0
  87. package/package.json +41 -42
  88. package/typings/entries/all.d.ts +6 -0
  89. package/{dist → typings}/entries/record-pack.d.ts +0 -0
  90. package/{dist → typings}/entries/replay-unpack.d.ts +0 -0
  91. package/{dist → typings}/index.d.ts +1 -2
  92. package/{dist → typings}/packer/base.d.ts +1 -1
  93. package/{dist → typings}/packer/index.d.ts +0 -0
  94. package/{dist → typings}/packer/pack.d.ts +0 -0
  95. package/{dist → typings}/packer/unpack.d.ts +0 -0
  96. package/{dist → typings}/plugins/console/record/error-stack-parser.d.ts +0 -0
  97. package/{dist → typings}/plugins/console/record/index.d.ts +4 -3
  98. package/{dist → typings}/plugins/console/record/stringify.d.ts +1 -1
  99. package/{dist → typings}/plugins/console/replay/index.d.ts +2 -2
  100. package/{dist → typings}/plugins/sequential-id/record/index.d.ts +1 -1
  101. package/{dist → typings}/plugins/sequential-id/replay/index.d.ts +1 -1
  102. package/{dist → typings}/record/iframe-manager.d.ts +3 -3
  103. package/{dist/plugins → typings}/record/index.d.ts +9 -9
  104. package/{dist → typings}/record/mutation.d.ts +6 -8
  105. package/typings/record/observer.d.ts +7 -0
  106. package/{dist/plugins → typings}/record/observers/canvas/2d.d.ts +3 -2
  107. package/{dist → typings}/record/observers/canvas/canvas-manager.d.ts +5 -2
  108. package/{dist/plugins → typings}/record/observers/canvas/canvas.d.ts +2 -2
  109. package/typings/record/observers/canvas/serialize-args.d.ts +6 -0
  110. package/{dist/plugins → typings}/record/observers/canvas/webgl.d.ts +3 -2
  111. package/typings/record/observers/canvas/webgl2.d.ts +2 -0
  112. package/typings/record/shadow-dom-manager.d.ts +22 -0
  113. package/typings/record/stylesheet-manager.d.ts +12 -0
  114. package/typings/record/workers/image-bitmap-data-url-worker.d.ts +5 -0
  115. package/{dist → typings}/replay/canvas/2d.d.ts +3 -3
  116. package/typings/replay/canvas/deserialize-args.d.ts +7 -0
  117. package/{dist/plugins → typings}/replay/canvas/index.d.ts +10 -9
  118. package/typings/replay/canvas/webgl.d.ts +9 -0
  119. package/{dist → typings}/replay/index.d.ts +7 -9
  120. package/{dist → typings}/replay/machine.d.ts +0 -0
  121. package/{dist → typings}/replay/smoothscroll.d.ts +0 -0
  122. package/{dist → typings}/replay/styles/inject-style.d.ts +0 -0
  123. package/{dist → typings}/replay/timer.d.ts +0 -0
  124. package/{dist → typings}/rrdom/index.d.ts +0 -0
  125. package/{dist → typings}/rrdom/tree-node.d.ts +0 -0
  126. package/{dist/plugins → typings}/types.d.ts +536 -509
  127. package/typings/utils.d.ts +43 -0
  128. package/CHANGELOG.md +0 -26
  129. package/README.md +0 -124
  130. package/README.zh_CN.md +0 -122
  131. package/dist/entries/all.d.ts +0 -4
  132. package/dist/index.css +0 -82
  133. package/dist/index.css.map +0 -1
  134. package/dist/index.js +0 -3
  135. package/dist/index.js.LICENSE.txt +0 -14
  136. package/dist/index.js.map +0 -1
  137. package/dist/plugins/entries/all.d.ts +0 -4
  138. package/dist/plugins/entries/record-pack.d.ts +0 -2
  139. package/dist/plugins/entries/replay-unpack.d.ts +0 -2
  140. package/dist/plugins/index.d.ts +0 -9
  141. package/dist/plugins/packer/base.d.ts +0 -7
  142. package/dist/plugins/packer/index.d.ts +0 -2
  143. package/dist/plugins/packer/pack.d.ts +0 -2
  144. package/dist/plugins/packer/unpack.d.ts +0 -2
  145. package/dist/plugins/plugins/console/record/error-stack-parser.d.ts +0 -37
  146. package/dist/plugins/plugins/console/record/index.d.ts +0 -41
  147. package/dist/plugins/plugins/console/record/stringify.d.ts +0 -2
  148. package/dist/plugins/plugins/console/replay/index.d.ts +0 -9
  149. package/dist/plugins/plugins/sequential-id/record/index.d.ts +0 -6
  150. package/dist/plugins/plugins/sequential-id/replay/index.d.ts +0 -7
  151. package/dist/plugins/record/iframe-manager.d.ts +0 -13
  152. package/dist/plugins/record/mutation.d.ts +0 -45
  153. package/dist/plugins/record/observer.d.ts +0 -11
  154. package/dist/plugins/record/observers/canvas/canvas-manager.d.ts +0 -32
  155. package/dist/plugins/record/observers/canvas/serialize-args.d.ts +0 -6
  156. package/dist/plugins/record/shadow-dom-manager.d.ts +0 -34
  157. package/dist/plugins/replay/canvas/2d.d.ts +0 -9
  158. package/dist/plugins/replay/canvas/webgl.d.ts +0 -11
  159. package/dist/plugins/replay/index.d.ts +0 -82
  160. package/dist/plugins/replay/machine.d.ts +0 -85
  161. package/dist/plugins/replay/smoothscroll.d.ts +0 -1
  162. package/dist/plugins/replay/styles/inject-style.d.ts +0 -2
  163. package/dist/plugins/replay/timer.d.ts +0 -19
  164. package/dist/plugins/replay/virtual-styles.d.ts +0 -43
  165. package/dist/plugins/rrdom/index.d.ts +0 -1
  166. package/dist/plugins/rrdom/tree-node.d.ts +0 -20
  167. package/dist/plugins/snapshot/css.d.ts +0 -92
  168. package/dist/plugins/snapshot/index.d.ts +0 -5
  169. package/dist/plugins/snapshot/rebuild.d.ts +0 -19
  170. package/dist/plugins/snapshot/snapshot.d.ts +0 -49
  171. package/dist/plugins/snapshot/types.d.ts +0 -99
  172. package/dist/plugins/snapshot/utils.d.ts +0 -11
  173. package/dist/plugins/utils.d.ts +0 -71
  174. package/dist/record/index.d.ts +0 -9
  175. package/dist/record/observer.d.ts +0 -11
  176. package/dist/record/observers/canvas/2d.d.ts +0 -2
  177. package/dist/record/observers/canvas/canvas.d.ts +0 -2
  178. package/dist/record/observers/canvas/serialize-args.d.ts +0 -6
  179. package/dist/record/observers/canvas/webgl.d.ts +0 -2
  180. package/dist/record/shadow-dom-manager.d.ts +0 -34
  181. package/dist/replay/canvas/index.d.ts +0 -9
  182. package/dist/replay/canvas/webgl.d.ts +0 -11
  183. package/dist/replay/virtual-styles.d.ts +0 -43
  184. package/dist/snapshot/css.d.ts +0 -92
  185. package/dist/snapshot/index.d.ts +0 -5
  186. package/dist/snapshot/rebuild.d.ts +0 -19
  187. package/dist/snapshot/snapshot.d.ts +0 -49
  188. package/dist/snapshot/types.d.ts +0 -99
  189. package/dist/snapshot/utils.d.ts +0 -11
  190. package/dist/types.d.ts +0 -509
  191. package/dist/utils.d.ts +0 -71
@@ -0,0 +1,777 @@
1
+ // DEFLATE is a complex format; to read this code, you should probably check the RFC first:
2
+
3
+ // aliases for shorter compressed code (most minifers don't do this)
4
+ var u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;
5
+ // fixed length extra bits
6
+ var fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);
7
+ // fixed distance extra bits
8
+ // see fleb note
9
+ var fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);
10
+ // code length index map
11
+ var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
12
+ // get base, reverse index map from extra bits
13
+ var freb = function (eb, start) {
14
+ var b = new u16(31);
15
+ for (var i = 0; i < 31; ++i) {
16
+ b[i] = start += 1 << eb[i - 1];
17
+ }
18
+ // numbers here are at max 18 bits
19
+ var r = new u32(b[30]);
20
+ for (var i = 1; i < 30; ++i) {
21
+ for (var j = b[i]; j < b[i + 1]; ++j) {
22
+ r[j] = ((j - b[i]) << 5) | i;
23
+ }
24
+ }
25
+ return [b, r];
26
+ };
27
+ var _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];
28
+ // we can ignore the fact that the other numbers are wrong; they never happen anyway
29
+ fl[28] = 258, revfl[258] = 28;
30
+ var _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];
31
+ // map of value to reverse (assuming 16 bits)
32
+ var rev = new u16(32768);
33
+ for (var i = 0; i < 32768; ++i) {
34
+ // reverse table algorithm from SO
35
+ var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);
36
+ x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);
37
+ x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);
38
+ rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;
39
+ }
40
+ // create huffman tree from u8 "map": index -> code length for code index
41
+ // mb (max bits) must be at most 15
42
+ // TODO: optimize/split up?
43
+ var hMap = (function (cd, mb, r) {
44
+ var s = cd.length;
45
+ // index
46
+ var i = 0;
47
+ // u16 "map": index -> # of codes with bit length = index
48
+ var l = new u16(mb);
49
+ // length of cd must be 288 (total # of codes)
50
+ for (; i < s; ++i)
51
+ ++l[cd[i] - 1];
52
+ // u16 "map": index -> minimum code for bit length = index
53
+ var le = new u16(mb);
54
+ for (i = 0; i < mb; ++i) {
55
+ le[i] = (le[i - 1] + l[i - 1]) << 1;
56
+ }
57
+ var co;
58
+ if (r) {
59
+ // u16 "map": index -> number of actual bits, symbol for code
60
+ co = new u16(1 << mb);
61
+ // bits to remove for reverser
62
+ var rvb = 15 - mb;
63
+ for (i = 0; i < s; ++i) {
64
+ // ignore 0 lengths
65
+ if (cd[i]) {
66
+ // num encoding both symbol and bits read
67
+ var sv = (i << 4) | cd[i];
68
+ // free bits
69
+ var r_1 = mb - cd[i];
70
+ // start value
71
+ var v = le[cd[i] - 1]++ << r_1;
72
+ // m is end value
73
+ for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {
74
+ // every 16 bit value starting with the code yields the same result
75
+ co[rev[v] >>> rvb] = sv;
76
+ }
77
+ }
78
+ }
79
+ }
80
+ else {
81
+ co = new u16(s);
82
+ for (i = 0; i < s; ++i)
83
+ co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);
84
+ }
85
+ return co;
86
+ });
87
+ // fixed length tree
88
+ var flt = new u8(288);
89
+ for (var i = 0; i < 144; ++i)
90
+ flt[i] = 8;
91
+ for (var i = 144; i < 256; ++i)
92
+ flt[i] = 9;
93
+ for (var i = 256; i < 280; ++i)
94
+ flt[i] = 7;
95
+ for (var i = 280; i < 288; ++i)
96
+ flt[i] = 8;
97
+ // fixed distance tree
98
+ var fdt = new u8(32);
99
+ for (var i = 0; i < 32; ++i)
100
+ fdt[i] = 5;
101
+ // fixed length map
102
+ var flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);
103
+ // fixed distance map
104
+ var fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);
105
+ // find max of array
106
+ var max = function (a) {
107
+ var m = a[0];
108
+ for (var i = 1; i < a.length; ++i) {
109
+ if (a[i] > m)
110
+ m = a[i];
111
+ }
112
+ return m;
113
+ };
114
+ // read d, starting at bit p and mask with m
115
+ var bits = function (d, p, m) {
116
+ var o = (p / 8) >> 0;
117
+ return ((d[o] | (d[o + 1] << 8)) >>> (p & 7)) & m;
118
+ };
119
+ // read d, starting at bit p continuing for at least 16 bits
120
+ var bits16 = function (d, p) {
121
+ var o = (p / 8) >> 0;
122
+ return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >>> (p & 7));
123
+ };
124
+ // get end of byte
125
+ var shft = function (p) { return ((p / 8) >> 0) + (p & 7 && 1); };
126
+ // typed array slice - allows garbage collector to free original reference,
127
+ // while being more compatible than .slice
128
+ var slc = function (v, s, e) {
129
+ if (s == null || s < 0)
130
+ s = 0;
131
+ if (e == null || e > v.length)
132
+ e = v.length;
133
+ // can't use .constructor in case user-supplied
134
+ var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);
135
+ n.set(v.subarray(s, e));
136
+ return n;
137
+ };
138
+ // expands raw DEFLATE data
139
+ var inflt = function (dat, buf, st) {
140
+ // source length
141
+ var sl = dat.length;
142
+ // have to estimate size
143
+ var noBuf = !buf || st;
144
+ // no state
145
+ var noSt = !st || st.i;
146
+ if (!st)
147
+ st = {};
148
+ // Assumes roughly 33% compression ratio average
149
+ if (!buf)
150
+ buf = new u8(sl * 3);
151
+ // ensure buffer can fit at least l elements
152
+ var cbuf = function (l) {
153
+ var bl = buf.length;
154
+ // need to increase size to fit
155
+ if (l > bl) {
156
+ // Double or set to necessary, whichever is greater
157
+ var nbuf = new u8(Math.max(bl * 2, l));
158
+ nbuf.set(buf);
159
+ buf = nbuf;
160
+ }
161
+ };
162
+ // last chunk bitpos bytes
163
+ var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;
164
+ // total bits
165
+ var tbts = sl * 8;
166
+ do {
167
+ if (!lm) {
168
+ // BFINAL - this is only 1 when last chunk is next
169
+ st.f = final = bits(dat, pos, 1);
170
+ // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman
171
+ var type = bits(dat, pos + 1, 3);
172
+ pos += 3;
173
+ if (!type) {
174
+ // go to end of byte boundary
175
+ var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;
176
+ if (t > sl) {
177
+ if (noSt)
178
+ throw 'unexpected EOF';
179
+ break;
180
+ }
181
+ // ensure size
182
+ if (noBuf)
183
+ cbuf(bt + l);
184
+ // Copy over uncompressed data
185
+ buf.set(dat.subarray(s, t), bt);
186
+ // Get new bitpos, update byte count
187
+ st.b = bt += l, st.p = pos = t * 8;
188
+ continue;
189
+ }
190
+ else if (type == 1)
191
+ lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
192
+ else if (type == 2) {
193
+ // literal lengths
194
+ var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
195
+ var tl = hLit + bits(dat, pos + 5, 31) + 1;
196
+ pos += 14;
197
+ // length+distance tree
198
+ var ldt = new u8(tl);
199
+ // code length tree
200
+ var clt = new u8(19);
201
+ for (var i = 0; i < hcLen; ++i) {
202
+ // use index map to get real code
203
+ clt[clim[i]] = bits(dat, pos + i * 3, 7);
204
+ }
205
+ pos += hcLen * 3;
206
+ // code lengths bits
207
+ var clb = max(clt), clbmsk = (1 << clb) - 1;
208
+ if (!noSt && pos + tl * (clb + 7) > tbts)
209
+ break;
210
+ // code lengths map
211
+ var clm = hMap(clt, clb, 1);
212
+ for (var i = 0; i < tl;) {
213
+ var r = clm[bits(dat, pos, clbmsk)];
214
+ // bits read
215
+ pos += r & 15;
216
+ // symbol
217
+ var s = r >>> 4;
218
+ // code length to copy
219
+ if (s < 16) {
220
+ ldt[i++] = s;
221
+ }
222
+ else {
223
+ // copy count
224
+ var c = 0, n = 0;
225
+ if (s == 16)
226
+ n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
227
+ else if (s == 17)
228
+ n = 3 + bits(dat, pos, 7), pos += 3;
229
+ else if (s == 18)
230
+ n = 11 + bits(dat, pos, 127), pos += 7;
231
+ while (n--)
232
+ ldt[i++] = c;
233
+ }
234
+ }
235
+ // length tree distance tree
236
+ var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
237
+ // max length bits
238
+ lbt = max(lt);
239
+ // max dist bits
240
+ dbt = max(dt);
241
+ lm = hMap(lt, lbt, 1);
242
+ dm = hMap(dt, dbt, 1);
243
+ }
244
+ else
245
+ throw 'invalid block type';
246
+ if (pos > tbts)
247
+ throw 'unexpected EOF';
248
+ }
249
+ // Make sure the buffer can hold this + the largest possible addition
250
+ // Maximum chunk size (practically, theoretically infinite) is 2^17;
251
+ if (noBuf)
252
+ cbuf(bt + 131072);
253
+ var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
254
+ var mxa = lbt + dbt + 18;
255
+ while (noSt || pos + mxa < tbts) {
256
+ // bits read, code
257
+ var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;
258
+ pos += c & 15;
259
+ if (pos > tbts)
260
+ throw 'unexpected EOF';
261
+ if (!c)
262
+ throw 'invalid length/literal';
263
+ if (sym < 256)
264
+ buf[bt++] = sym;
265
+ else if (sym == 256) {
266
+ lm = null;
267
+ break;
268
+ }
269
+ else {
270
+ var add = sym - 254;
271
+ // no extra bits needed if less
272
+ if (sym > 264) {
273
+ // index
274
+ var i = sym - 257, b = fleb[i];
275
+ add = bits(dat, pos, (1 << b) - 1) + fl[i];
276
+ pos += b;
277
+ }
278
+ // dist
279
+ var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;
280
+ if (!d)
281
+ throw 'invalid distance';
282
+ pos += d & 15;
283
+ var dt = fd[dsym];
284
+ if (dsym > 3) {
285
+ var b = fdeb[dsym];
286
+ dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;
287
+ }
288
+ if (pos > tbts)
289
+ throw 'unexpected EOF';
290
+ if (noBuf)
291
+ cbuf(bt + 131072);
292
+ var end = bt + add;
293
+ for (; bt < end; bt += 4) {
294
+ buf[bt] = buf[bt - dt];
295
+ buf[bt + 1] = buf[bt + 1 - dt];
296
+ buf[bt + 2] = buf[bt + 2 - dt];
297
+ buf[bt + 3] = buf[bt + 3 - dt];
298
+ }
299
+ bt = end;
300
+ }
301
+ }
302
+ st.l = lm, st.p = pos, st.b = bt;
303
+ if (lm)
304
+ final = 1, st.m = lbt, st.d = dm, st.n = dbt;
305
+ } while (!final);
306
+ return bt == buf.length ? buf : slc(buf, 0, bt);
307
+ };
308
+ // starting at p, write the minimum number of bits that can hold v to d
309
+ var wbits = function (d, p, v) {
310
+ v <<= p & 7;
311
+ var o = (p / 8) >> 0;
312
+ d[o] |= v;
313
+ d[o + 1] |= v >>> 8;
314
+ };
315
+ // starting at p, write the minimum number of bits (>8) that can hold v to d
316
+ var wbits16 = function (d, p, v) {
317
+ v <<= p & 7;
318
+ var o = (p / 8) >> 0;
319
+ d[o] |= v;
320
+ d[o + 1] |= v >>> 8;
321
+ d[o + 2] |= v >>> 16;
322
+ };
323
+ // creates code lengths from a frequency table
324
+ var hTree = function (d, mb) {
325
+ // Need extra info to make a tree
326
+ var t = [];
327
+ for (var i = 0; i < d.length; ++i) {
328
+ if (d[i])
329
+ t.push({ s: i, f: d[i] });
330
+ }
331
+ var s = t.length;
332
+ var t2 = t.slice();
333
+ if (!s)
334
+ return [new u8(0), 0];
335
+ if (s == 1) {
336
+ var v = new u8(t[0].s + 1);
337
+ v[t[0].s] = 1;
338
+ return [v, 1];
339
+ }
340
+ t.sort(function (a, b) { return a.f - b.f; });
341
+ // after i2 reaches last ind, will be stopped
342
+ // freq must be greater than largest possible number of symbols
343
+ t.push({ s: -1, f: 25001 });
344
+ var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;
345
+ t[0] = { s: -1, f: l.f + r.f, l: l, r: r };
346
+ // efficient algorithm from UZIP.js
347
+ // i0 is lookbehind, i2 is lookahead - after processing two low-freq
348
+ // symbols that combined have high freq, will start processing i2 (high-freq,
349
+ // non-composite) symbols instead
350
+ // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/
351
+ while (i1 != s - 1) {
352
+ l = t[t[i0].f < t[i2].f ? i0++ : i2++];
353
+ r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];
354
+ t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };
355
+ }
356
+ var maxSym = t2[0].s;
357
+ for (var i = 1; i < s; ++i) {
358
+ if (t2[i].s > maxSym)
359
+ maxSym = t2[i].s;
360
+ }
361
+ // code lengths
362
+ var tr = new u16(maxSym + 1);
363
+ // max bits in tree
364
+ var mbt = ln(t[i1 - 1], tr, 0);
365
+ if (mbt > mb) {
366
+ // more algorithms from UZIP.js
367
+ // TODO: find out how this code works (debt)
368
+ // ind debt
369
+ var i = 0, dt = 0;
370
+ // left cost
371
+ var lft = mbt - mb, cst = 1 << lft;
372
+ t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });
373
+ for (; i < s; ++i) {
374
+ var i2_1 = t2[i].s;
375
+ if (tr[i2_1] > mb) {
376
+ dt += cst - (1 << (mbt - tr[i2_1]));
377
+ tr[i2_1] = mb;
378
+ }
379
+ else
380
+ break;
381
+ }
382
+ dt >>>= lft;
383
+ while (dt > 0) {
384
+ var i2_2 = t2[i].s;
385
+ if (tr[i2_2] < mb)
386
+ dt -= 1 << (mb - tr[i2_2]++ - 1);
387
+ else
388
+ ++i;
389
+ }
390
+ for (; i >= 0 && dt; --i) {
391
+ var i2_3 = t2[i].s;
392
+ if (tr[i2_3] == mb) {
393
+ --tr[i2_3];
394
+ ++dt;
395
+ }
396
+ }
397
+ mbt = mb;
398
+ }
399
+ return [new u8(tr), mbt];
400
+ };
401
+ // get the max length and assign length codes
402
+ var ln = function (n, l, d) {
403
+ return n.s == -1
404
+ ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))
405
+ : (l[n.s] = d);
406
+ };
407
+ // length codes generation
408
+ var lc = function (c) {
409
+ var s = c.length;
410
+ // Note that the semicolon was intentional
411
+ while (s && !c[--s])
412
+ ;
413
+ var cl = new u16(++s);
414
+ // ind num streak
415
+ var cli = 0, cln = c[0], cls = 1;
416
+ var w = function (v) { cl[cli++] = v; };
417
+ for (var i = 1; i <= s; ++i) {
418
+ if (c[i] == cln && i != s)
419
+ ++cls;
420
+ else {
421
+ if (!cln && cls > 2) {
422
+ for (; cls > 138; cls -= 138)
423
+ w(32754);
424
+ if (cls > 2) {
425
+ w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);
426
+ cls = 0;
427
+ }
428
+ }
429
+ else if (cls > 3) {
430
+ w(cln), --cls;
431
+ for (; cls > 6; cls -= 6)
432
+ w(8304);
433
+ if (cls > 2)
434
+ w(((cls - 3) << 5) | 8208), cls = 0;
435
+ }
436
+ while (cls--)
437
+ w(cln);
438
+ cls = 1;
439
+ cln = c[i];
440
+ }
441
+ }
442
+ return [cl.subarray(0, cli), s];
443
+ };
444
+ // calculate the length of output from tree, code lengths
445
+ var clen = function (cf, cl) {
446
+ var l = 0;
447
+ for (var i = 0; i < cl.length; ++i)
448
+ l += cf[i] * cl[i];
449
+ return l;
450
+ };
451
+ // writes a fixed block
452
+ // returns the new bit pos
453
+ var wfblk = function (out, pos, dat) {
454
+ // no need to write 00 as type: TypedArray defaults to 0
455
+ var s = dat.length;
456
+ var o = shft(pos + 2);
457
+ out[o] = s & 255;
458
+ out[o + 1] = s >>> 8;
459
+ out[o + 2] = out[o] ^ 255;
460
+ out[o + 3] = out[o + 1] ^ 255;
461
+ for (var i = 0; i < s; ++i)
462
+ out[o + i + 4] = dat[i];
463
+ return (o + 4 + s) * 8;
464
+ };
465
+ // writes a block
466
+ var wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {
467
+ wbits(out, p++, final);
468
+ ++lf[256];
469
+ var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1];
470
+ var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1];
471
+ var _c = lc(dlt), lclt = _c[0], nlc = _c[1];
472
+ var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];
473
+ var lcfreq = new u16(19);
474
+ for (var i = 0; i < lclt.length; ++i)
475
+ lcfreq[lclt[i] & 31]++;
476
+ for (var i = 0; i < lcdt.length; ++i)
477
+ lcfreq[lcdt[i] & 31]++;
478
+ var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];
479
+ var nlcc = 19;
480
+ for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)
481
+ ;
482
+ var flen = (bl + 5) << 3;
483
+ var ftlen = clen(lf, flt) + clen(df, fdt) + eb;
484
+ var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);
485
+ if (flen <= ftlen && flen <= dtlen)
486
+ return wfblk(out, p, dat.subarray(bs, bs + bl));
487
+ var lm, ll, dm, dl;
488
+ wbits(out, p, 1 + (dtlen < ftlen)), p += 2;
489
+ if (dtlen < ftlen) {
490
+ lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;
491
+ var llm = hMap(lct, mlcb, 0);
492
+ wbits(out, p, nlc - 257);
493
+ wbits(out, p + 5, ndc - 1);
494
+ wbits(out, p + 10, nlcc - 4);
495
+ p += 14;
496
+ for (var i = 0; i < nlcc; ++i)
497
+ wbits(out, p + 3 * i, lct[clim[i]]);
498
+ p += 3 * nlcc;
499
+ var lcts = [lclt, lcdt];
500
+ for (var it = 0; it < 2; ++it) {
501
+ var clct = lcts[it];
502
+ for (var i = 0; i < clct.length; ++i) {
503
+ var len = clct[i] & 31;
504
+ wbits(out, p, llm[len]), p += lct[len];
505
+ if (len > 15)
506
+ wbits(out, p, (clct[i] >>> 5) & 127), p += clct[i] >>> 12;
507
+ }
508
+ }
509
+ }
510
+ else {
511
+ lm = flm, ll = flt, dm = fdm, dl = fdt;
512
+ }
513
+ for (var i = 0; i < li; ++i) {
514
+ if (syms[i] > 255) {
515
+ var len = (syms[i] >>> 18) & 31;
516
+ wbits16(out, p, lm[len + 257]), p += ll[len + 257];
517
+ if (len > 7)
518
+ wbits(out, p, (syms[i] >>> 23) & 31), p += fleb[len];
519
+ var dst = syms[i] & 31;
520
+ wbits16(out, p, dm[dst]), p += dl[dst];
521
+ if (dst > 3)
522
+ wbits16(out, p, (syms[i] >>> 5) & 8191), p += fdeb[dst];
523
+ }
524
+ else {
525
+ wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];
526
+ }
527
+ }
528
+ wbits16(out, p, lm[256]);
529
+ return p + ll[256];
530
+ };
531
+ // deflate options (nice << 13) | chain
532
+ var deo = /*#__PURE__*/ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);
533
+ // empty
534
+ var et = /*#__PURE__*/ new u8(0);
535
+ // compresses data into a raw DEFLATE buffer
536
+ var dflt = function (dat, lvl, plvl, pre, post, lst) {
537
+ var s = dat.length;
538
+ var o = new u8(pre + s + 5 * (1 + Math.floor(s / 7000)) + post);
539
+ // writing to this writes to the output buffer
540
+ var w = o.subarray(pre, o.length - post);
541
+ var pos = 0;
542
+ if (!lvl || s < 8) {
543
+ for (var i = 0; i <= s; i += 65535) {
544
+ // end
545
+ var e = i + 65535;
546
+ if (e < s) {
547
+ // write full block
548
+ pos = wfblk(w, pos, dat.subarray(i, e));
549
+ }
550
+ else {
551
+ // write final block
552
+ w[i] = lst;
553
+ pos = wfblk(w, pos, dat.subarray(i, s));
554
+ }
555
+ }
556
+ }
557
+ else {
558
+ var opt = deo[lvl - 1];
559
+ var n = opt >>> 13, c = opt & 8191;
560
+ var msk_1 = (1 << plvl) - 1;
561
+ // prev 2-byte val map curr 2-byte val map
562
+ var prev = new u16(32768), head = new u16(msk_1 + 1);
563
+ var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;
564
+ var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };
565
+ // 24576 is an arbitrary number of maximum symbols per block
566
+ // 424 buffer for last block
567
+ var syms = new u32(25000);
568
+ // length/literal freq distance freq
569
+ var lf = new u16(288), df = new u16(32);
570
+ // l/lcnt exbits index l/lind waitdx bitpos
571
+ var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;
572
+ for (; i < s; ++i) {
573
+ // hash value
574
+ var hv = hsh(i);
575
+ // index mod 32768
576
+ var imod = i & 32767;
577
+ // previous index with this value
578
+ var pimod = head[hv];
579
+ prev[imod] = pimod;
580
+ head[hv] = imod;
581
+ // We always should modify head and prev, but only add symbols if
582
+ // this data is not yet processed ("wait" for wait index)
583
+ if (wi <= i) {
584
+ // bytes remaining
585
+ var rem = s - i;
586
+ if ((lc_1 > 7000 || li > 24576) && rem > 423) {
587
+ pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);
588
+ li = lc_1 = eb = 0, bs = i;
589
+ for (var j = 0; j < 286; ++j)
590
+ lf[j] = 0;
591
+ for (var j = 0; j < 30; ++j)
592
+ df[j] = 0;
593
+ }
594
+ // len dist chain
595
+ var l = 2, d = 0, ch_1 = c, dif = (imod - pimod) & 32767;
596
+ if (rem > 2 && hv == hsh(i - dif)) {
597
+ var maxn = Math.min(n, rem) - 1;
598
+ var maxd = Math.min(32767, i);
599
+ // max possible length
600
+ // not capped at dif because decompressors implement "rolling" index population
601
+ var ml = Math.min(258, rem);
602
+ while (dif <= maxd && --ch_1 && imod != pimod) {
603
+ if (dat[i + l] == dat[i + l - dif]) {
604
+ var nl = 0;
605
+ for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)
606
+ ;
607
+ if (nl > l) {
608
+ l = nl, d = dif;
609
+ // break out early when we reach "nice" (we are satisfied enough)
610
+ if (nl > maxn)
611
+ break;
612
+ // now, find the rarest 2-byte sequence within this
613
+ // length of literals and search for that instead.
614
+ // Much faster than just using the start
615
+ var mmd = Math.min(dif, nl - 2);
616
+ var md = 0;
617
+ for (var j = 0; j < mmd; ++j) {
618
+ var ti = (i - dif + j + 32768) & 32767;
619
+ var pti = prev[ti];
620
+ var cd = (ti - pti + 32768) & 32767;
621
+ if (cd > md)
622
+ md = cd, pimod = ti;
623
+ }
624
+ }
625
+ }
626
+ // check the previous match
627
+ imod = pimod, pimod = prev[imod];
628
+ dif += (imod - pimod + 32768) & 32767;
629
+ }
630
+ }
631
+ // d will be nonzero only when a match was found
632
+ if (d) {
633
+ // store both dist and len data in one Uint32
634
+ // Make sure this is recognized as a len/dist with 28th bit (2^28)
635
+ syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];
636
+ var lin = revfl[l] & 31, din = revfd[d] & 31;
637
+ eb += fleb[lin] + fdeb[din];
638
+ ++lf[257 + lin];
639
+ ++df[din];
640
+ wi = i + l;
641
+ ++lc_1;
642
+ }
643
+ else {
644
+ syms[li++] = dat[i];
645
+ ++lf[dat[i]];
646
+ }
647
+ }
648
+ }
649
+ pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);
650
+ // this is the easiest way to avoid needing to maintain state
651
+ if (!lst)
652
+ pos = wfblk(w, pos, et);
653
+ }
654
+ return slc(o, 0, pre + shft(pos) + post);
655
+ };
656
+ // Alder32
657
+ var adler = function () {
658
+ var a = 1, b = 0;
659
+ return {
660
+ p: function (d) {
661
+ // closures have awful performance
662
+ var n = a, m = b;
663
+ var l = d.length;
664
+ for (var i = 0; i != l;) {
665
+ var e = Math.min(i + 5552, l);
666
+ for (; i < e; ++i)
667
+ n += d[i], m += n;
668
+ n %= 65521, m %= 65521;
669
+ }
670
+ a = n, b = m;
671
+ },
672
+ d: function () { return ((a >>> 8) << 16 | (b & 255) << 8 | (b >>> 8)) + ((a & 255) << 23) * 2; }
673
+ };
674
+ };
675
+ // deflate with opts
676
+ var dopt = function (dat, opt, pre, post, st) {
677
+ return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, !st);
678
+ };
679
+ // write bytes
680
+ var wbytes = function (d, b, v) {
681
+ for (; v; ++b)
682
+ d[b] = v, v >>>= 8;
683
+ };
684
+ // zlib header
685
+ var zlh = function (c, o) {
686
+ var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;
687
+ c[0] = 120, c[1] = (fl << 6) | (fl ? (32 - 2 * fl) : 1);
688
+ };
689
+ // zlib valid
690
+ var zlv = function (d) {
691
+ if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))
692
+ throw 'invalid zlib data';
693
+ if (d[1] & 32)
694
+ throw 'invalid zlib data: preset dictionaries not supported';
695
+ };
696
+ /**
697
+ * Compress data with Zlib
698
+ * @param data The data to compress
699
+ * @param opts The compression options
700
+ * @returns The zlib-compressed version of the data
701
+ */
702
+ function zlibSync(data, opts) {
703
+ if (opts === void 0) { opts = {}; }
704
+ var a = adler();
705
+ a.p(data);
706
+ var d = dopt(data, opts, 2, 4);
707
+ return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;
708
+ }
709
+ /**
710
+ * Expands Zlib data
711
+ * @param data The data to decompress
712
+ * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.
713
+ * @returns The decompressed version of the data
714
+ */
715
+ function unzlibSync(data, out) {
716
+ return inflt((zlv(data), data.subarray(2, -4)), out);
717
+ }
718
+ /**
719
+ * Converts a string into a Uint8Array for use with compression/decompression methods
720
+ * @param str The string to encode
721
+ * @param latin1 Whether or not to interpret the data as Latin-1. This should
722
+ * not need to be true unless decoding a binary string.
723
+ * @returns The string encoded in UTF-8/Latin-1 binary
724
+ */
725
+ function strToU8(str, latin1) {
726
+ var l = str.length;
727
+ if (!latin1 && typeof TextEncoder != 'undefined')
728
+ return new TextEncoder().encode(str);
729
+ var ar = new u8(str.length + (str.length >>> 1));
730
+ var ai = 0;
731
+ var w = function (v) { ar[ai++] = v; };
732
+ for (var i = 0; i < l; ++i) {
733
+ if (ai + 5 > ar.length) {
734
+ var n = new u8(ai + 8 + ((l - i) << 1));
735
+ n.set(ar);
736
+ ar = n;
737
+ }
738
+ var c = str.charCodeAt(i);
739
+ if (c < 128 || latin1)
740
+ w(c);
741
+ else if (c < 2048)
742
+ w(192 | (c >>> 6)), w(128 | (c & 63));
743
+ else if (c > 55295 && c < 57344)
744
+ c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),
745
+ w(240 | (c >>> 18)), w(128 | ((c >>> 12) & 63)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));
746
+ else
747
+ w(224 | (c >>> 12)), w(128 | ((c >>> 6) & 63)), w(128 | (c & 63));
748
+ }
749
+ return slc(ar, 0, ai);
750
+ }
751
+ /**
752
+ * Converts a Uint8Array to a string
753
+ * @param dat The data to decode to string
754
+ * @param latin1 Whether or not to interpret the data as Latin-1. This should
755
+ * not need to be true unless encoding to binary string.
756
+ * @returns The original UTF-8/Latin-1 string
757
+ */
758
+ function strFromU8(dat, latin1) {
759
+ var r = '';
760
+ if (!latin1 && typeof TextDecoder != 'undefined')
761
+ return new TextDecoder().decode(dat);
762
+ for (var i = 0; i < dat.length;) {
763
+ var c = dat[i++];
764
+ if (c < 128 || latin1)
765
+ r += String.fromCharCode(c);
766
+ else if (c < 224)
767
+ r += String.fromCharCode((c & 31) << 6 | (dat[i++] & 63));
768
+ else if (c < 240)
769
+ r += String.fromCharCode((c & 15) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63));
770
+ else
771
+ c = ((c & 15) << 18 | (dat[i++] & 63) << 12 | (dat[i++] & 63) << 6 | (dat[i++] & 63)) - 65536,
772
+ r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));
773
+ }
774
+ return r;
775
+ }
776
+
777
+ export { strFromU8, strToU8, unzlibSync, zlibSync };