ball2d 0.1.1 → 0.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.
- package/LICENSE +42 -0
- package/README.md +184 -138
- package/dist/browser.js +1790 -1251
- package/dist/core.wasm +0 -0
- package/dist/node.js +104 -43358
- package/dist/stadiums/big.hbs +515 -85
- package/dist/stadiums/big_easy.hbs +515 -85
- package/dist/stadiums/big_hockey.hbs +612 -87
- package/dist/stadiums/big_rounded.hbs +611 -100
- package/dist/stadiums/classic.hbs +515 -85
- package/dist/stadiums/easy.hbs +515 -85
- package/dist/stadiums/hockey.hbs +612 -87
- package/dist/stadiums/huge.hbs +515 -85
- package/dist/stadiums/provenance.json +24 -22
- package/dist/stadiums/rounded.hbs +611 -100
- package/dist/stadiums/small.hbs +515 -85
- package/dist/types/announcement.d.ts +1 -0
- package/dist/types/browser.d.ts +10 -0
- package/dist/types/config.d.ts +9 -0
- package/dist/types/disc.d.ts +4 -0
- package/dist/types/{core/match-state.d.ts → match-state.d.ts} +2 -0
- package/dist/types/node.d.ts +15 -0
- package/dist/types/{core/host-types.d.ts → player.d.ts} +1 -1
- package/dist/types/{core/replay-types.d.ts → replay.d.ts} +3 -3
- package/dist/types/{sdk/types.d.ts → room.d.ts} +6 -4
- package/dist/types/stadium.d.ts +5 -0
- package/dist/types/team.d.ts +6 -0
- package/package.json +28 -6
- package/dist/types/client/announcement.d.ts +0 -10
- package/dist/types/client/connection-stats.d.ts +0 -11
- package/dist/types/client/headless.d.ts +0 -130
- package/dist/types/client/host-config.d.ts +0 -11
- package/dist/types/client/host-runtime.d.ts +0 -10
- package/dist/types/client/network-runtime.d.ts +0 -8
- package/dist/types/client/network.d.ts +0 -91
- package/dist/types/client/stadium-library.d.ts +0 -4
- package/dist/types/client/startup-scope.d.ts +0 -6
- package/dist/types/client/traffic.d.ts +0 -9
- package/dist/types/core/avatar.d.ts +0 -2
- package/dist/types/core/build-id.d.ts +0 -2
- package/dist/types/core/control.d.ts +0 -5
- package/dist/types/core/disc-properties.d.ts +0 -7
- package/dist/types/core/engine.d.ts +0 -68
- package/dist/types/core/protocol.d.ts +0 -24
- package/dist/types/core/replay-codec.d.ts +0 -6
- package/dist/types/core/replay-wire.d.ts +0 -5
- package/dist/types/core/replay.d.ts +0 -48
- package/dist/types/core/stadium.d.ts +0 -91
- package/dist/types/core/team-colors.d.ts +0 -8
- package/dist/types/sdk/browser.d.ts +0 -11
- package/dist/types/sdk/command-queue.d.ts +0 -11
- package/dist/types/sdk/config.d.ts +0 -6
- package/dist/types/sdk/node-transport.d.ts +0 -4
- package/dist/types/sdk/node.d.ts +0 -18
- package/dist/types/sdk/replay.d.ts +0 -4
- package/dist/types/sdk/room.d.ts +0 -7
- package/dist/types/sdk/stadium.d.ts +0 -9
- package/dist/types/shared/room-link.d.ts +0 -6
- /package/dist/types/{sdk/create-options.d.ts → creation.d.ts} +0 -0
package/dist/browser.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
//#region \0rolldown/runtime.js
|
|
2
1
|
var e = Object.create, t = Object.defineProperty, n = Object.getOwnPropertyDescriptor, r = Object.getOwnPropertyNames, i = Object.getPrototypeOf, a = Object.prototype.hasOwnProperty, o = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t.exports), s = (e, i, o, s) => {
|
|
3
2
|
if (i && typeof i == "object" || typeof i == "function") for (var c = r(i), l = 0, u = c.length, d; l < u; l++) d = c[l], !a.call(e, d) && d !== o && t(e, d, {
|
|
4
3
|
get: ((e) => i[e]).bind(null, d),
|
|
@@ -8,10 +7,521 @@ var e = Object.create, t = Object.defineProperty, n = Object.getOwnPropertyDescr
|
|
|
8
7
|
}, c = (n, r, o) => (o = n == null ? {} : e(i(n)), s(r || !n || !n.__esModule || !a.call(n, "default") ? t(o, "default", {
|
|
9
8
|
value: n,
|
|
10
9
|
enumerable: !0
|
|
11
|
-
}) : o, n))
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
}) : o, n)), l = Uint8Array, u = Uint16Array, d = Int32Array, f = new l([
|
|
11
|
+
0,
|
|
12
|
+
0,
|
|
13
|
+
0,
|
|
14
|
+
0,
|
|
15
|
+
0,
|
|
16
|
+
0,
|
|
17
|
+
0,
|
|
18
|
+
0,
|
|
19
|
+
1,
|
|
20
|
+
1,
|
|
21
|
+
1,
|
|
22
|
+
1,
|
|
23
|
+
2,
|
|
24
|
+
2,
|
|
25
|
+
2,
|
|
26
|
+
2,
|
|
27
|
+
3,
|
|
28
|
+
3,
|
|
29
|
+
3,
|
|
30
|
+
3,
|
|
31
|
+
4,
|
|
32
|
+
4,
|
|
33
|
+
4,
|
|
34
|
+
4,
|
|
35
|
+
5,
|
|
36
|
+
5,
|
|
37
|
+
5,
|
|
38
|
+
5,
|
|
39
|
+
0,
|
|
40
|
+
0,
|
|
41
|
+
0,
|
|
42
|
+
0
|
|
43
|
+
]), p = new l([
|
|
44
|
+
0,
|
|
45
|
+
0,
|
|
46
|
+
0,
|
|
47
|
+
0,
|
|
48
|
+
1,
|
|
49
|
+
1,
|
|
50
|
+
2,
|
|
51
|
+
2,
|
|
52
|
+
3,
|
|
53
|
+
3,
|
|
54
|
+
4,
|
|
55
|
+
4,
|
|
56
|
+
5,
|
|
57
|
+
5,
|
|
58
|
+
6,
|
|
59
|
+
6,
|
|
60
|
+
7,
|
|
61
|
+
7,
|
|
62
|
+
8,
|
|
63
|
+
8,
|
|
64
|
+
9,
|
|
65
|
+
9,
|
|
66
|
+
10,
|
|
67
|
+
10,
|
|
68
|
+
11,
|
|
69
|
+
11,
|
|
70
|
+
12,
|
|
71
|
+
12,
|
|
72
|
+
13,
|
|
73
|
+
13,
|
|
74
|
+
0,
|
|
75
|
+
0
|
|
76
|
+
]), m = new l([
|
|
77
|
+
16,
|
|
78
|
+
17,
|
|
79
|
+
18,
|
|
80
|
+
0,
|
|
81
|
+
8,
|
|
82
|
+
7,
|
|
83
|
+
9,
|
|
84
|
+
6,
|
|
85
|
+
10,
|
|
86
|
+
5,
|
|
87
|
+
11,
|
|
88
|
+
4,
|
|
89
|
+
12,
|
|
90
|
+
3,
|
|
91
|
+
13,
|
|
92
|
+
2,
|
|
93
|
+
14,
|
|
94
|
+
1,
|
|
95
|
+
15
|
|
96
|
+
]), h = function(e, t) {
|
|
97
|
+
for (var n = new u(31), r = 0; r < 31; ++r) n[r] = t += 1 << e[r - 1];
|
|
98
|
+
for (var i = new d(n[30]), r = 1; r < 30; ++r) for (var a = n[r]; a < n[r + 1]; ++a) i[a] = a - n[r] << 5 | r;
|
|
99
|
+
return {
|
|
100
|
+
b: n,
|
|
101
|
+
r: i
|
|
102
|
+
};
|
|
103
|
+
}, g = h(f, 2), _ = g.b, v = g.r;
|
|
104
|
+
_[28] = 258, v[258] = 28;
|
|
105
|
+
for (var y = h(p, 0), ee = y.b, b = y.r, x = new u(32768), S = 0; S < 32768; ++S) {
|
|
106
|
+
var C = (S & 43690) >> 1 | (S & 21845) << 1;
|
|
107
|
+
C = (C & 52428) >> 2 | (C & 13107) << 2, C = (C & 61680) >> 4 | (C & 3855) << 4, x[S] = ((C & 65280) >> 8 | (C & 255) << 8) >> 1;
|
|
108
|
+
}
|
|
109
|
+
for (var w = (function(e, t, n) {
|
|
110
|
+
for (var r = e.length, i = 0, a = new u(t); i < r; ++i) e[i] && ++a[e[i] - 1];
|
|
111
|
+
var o = new u(t);
|
|
112
|
+
for (i = 1; i < t; ++i) o[i] = o[i - 1] + a[i - 1] << 1;
|
|
113
|
+
var s;
|
|
114
|
+
if (n) {
|
|
115
|
+
s = new u(1 << t);
|
|
116
|
+
var c = 15 - t;
|
|
117
|
+
for (i = 0; i < r; ++i) if (e[i]) for (var l = i << 4 | e[i], d = t - e[i], f = o[e[i] - 1]++ << d, p = f | (1 << d) - 1; f <= p; ++f) s[x[f] >> c] = l;
|
|
118
|
+
} else for (s = new u(r), i = 0; i < r; ++i) e[i] && (s[i] = x[o[e[i] - 1]++] >> 15 - e[i]);
|
|
119
|
+
return s;
|
|
120
|
+
}), T = new l(288), S = 0; S < 144; ++S) T[S] = 8;
|
|
121
|
+
for (var S = 144; S < 256; ++S) T[S] = 9;
|
|
122
|
+
for (var S = 256; S < 280; ++S) T[S] = 7;
|
|
123
|
+
for (var S = 280; S < 288; ++S) T[S] = 8;
|
|
124
|
+
for (var E = new l(32), S = 0; S < 32; ++S) E[S] = 5;
|
|
125
|
+
var te = /*#__PURE__*/ w(T, 9, 0), ne = /*#__PURE__*/ w(T, 9, 1), re = /*#__PURE__*/ w(E, 5, 0), ie = /*#__PURE__*/ w(E, 5, 1), D = function(e) {
|
|
126
|
+
for (var t = e[0], n = 1; n < e.length; ++n) e[n] > t && (t = e[n]);
|
|
127
|
+
return t;
|
|
128
|
+
}, O = function(e, t, n) {
|
|
129
|
+
var r = t / 8 | 0;
|
|
130
|
+
return (e[r] | e[r + 1] << 8) >> (t & 7) & n;
|
|
131
|
+
}, ae = function(e, t) {
|
|
132
|
+
var n = t / 8 | 0;
|
|
133
|
+
return (e[n] | e[n + 1] << 8 | e[n + 2] << 16) >> (t & 7);
|
|
134
|
+
}, oe = function(e) {
|
|
135
|
+
return (e + 7) / 8 | 0;
|
|
136
|
+
}, se = function(e, t, n) {
|
|
137
|
+
return (t == null || t < 0) && (t = 0), (n == null || n > e.length) && (n = e.length), new l(e.subarray(t, n));
|
|
138
|
+
}, k = [
|
|
139
|
+
"unexpected EOF",
|
|
140
|
+
"invalid block type",
|
|
141
|
+
"invalid length/literal",
|
|
142
|
+
"invalid distance",
|
|
143
|
+
"stream finished",
|
|
144
|
+
"no stream handler",
|
|
145
|
+
,
|
|
146
|
+
"no callback",
|
|
147
|
+
"invalid UTF-8 data",
|
|
148
|
+
"extra field too long",
|
|
149
|
+
"date not in range 1980-2099",
|
|
150
|
+
"filename too long",
|
|
151
|
+
"stream finishing",
|
|
152
|
+
"invalid zip data"
|
|
153
|
+
], A = function(e, t, n) {
|
|
154
|
+
var r = Error(t || k[e]);
|
|
155
|
+
if (r.code = e, Error.captureStackTrace && Error.captureStackTrace(r, A), !n) throw r;
|
|
156
|
+
return r;
|
|
157
|
+
}, j = function(e, t, n, r) {
|
|
158
|
+
var i = e.length, a = r ? r.length : 0;
|
|
159
|
+
if (!i || t.f && !t.l) return n || new l(0);
|
|
160
|
+
var o = !n, s = o || t.i != 2, c = t.i;
|
|
161
|
+
o && (n = new l(i * 3));
|
|
162
|
+
var u = function(e) {
|
|
163
|
+
var t = n.length;
|
|
164
|
+
if (e > t) {
|
|
165
|
+
var r = new l(Math.max(t * 2, e));
|
|
166
|
+
r.set(n), n = r;
|
|
167
|
+
}
|
|
168
|
+
}, d = t.f || 0, h = t.p || 0, g = t.b || 0, v = t.l, y = t.d, b = t.m, x = t.n, S = i * 8;
|
|
169
|
+
do {
|
|
170
|
+
if (!v) {
|
|
171
|
+
d = O(e, h, 1);
|
|
172
|
+
var C = O(e, h + 1, 3);
|
|
173
|
+
if (h += 3, !C) {
|
|
174
|
+
var T = oe(h) + 4, E = e[T - 4] | e[T - 3] << 8, te = T + E;
|
|
175
|
+
if (te > i) {
|
|
176
|
+
c && A(0);
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
s && u(g + E), n.set(e.subarray(T, te), g), t.b = g += E, t.p = h = te * 8, t.f = d;
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
if (C == 1) v = ne, y = ie, b = 9, x = 5;
|
|
183
|
+
else if (C == 2) {
|
|
184
|
+
var re = O(e, h, 31) + 257, k = O(e, h + 10, 15) + 4, j = re + O(e, h + 5, 31) + 1;
|
|
185
|
+
h += 14;
|
|
186
|
+
for (var M = new l(j), N = new l(19), P = 0; P < k; ++P) N[m[P]] = O(e, h + P * 3, 7);
|
|
187
|
+
h += k * 3;
|
|
188
|
+
for (var F = D(N), I = (1 << F) - 1, L = w(N, F, 1), P = 0; P < j;) {
|
|
189
|
+
var R = L[O(e, h, I)];
|
|
190
|
+
h += R & 15;
|
|
191
|
+
var T = R >> 4;
|
|
192
|
+
if (T < 16) M[P++] = T;
|
|
193
|
+
else {
|
|
194
|
+
var z = 0, B = 0;
|
|
195
|
+
for (T == 16 ? (B = 3 + O(e, h, 3), h += 2, z = M[P - 1]) : T == 17 ? (B = 3 + O(e, h, 7), h += 3) : T == 18 && (B = 11 + O(e, h, 127), h += 7); B--;) M[P++] = z;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
var V = M.subarray(0, re), H = M.subarray(re);
|
|
199
|
+
b = D(V), x = D(H), v = w(V, b, 1), y = w(H, x, 1);
|
|
200
|
+
} else A(1);
|
|
201
|
+
if (h > S) {
|
|
202
|
+
c && A(0);
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
s && u(g + 131072);
|
|
207
|
+
for (var U = (1 << b) - 1, W = (1 << x) - 1, G = h;; G = h) {
|
|
208
|
+
var z = v[ae(e, h) & U], K = z >> 4;
|
|
209
|
+
if (h += z & 15, h > S) {
|
|
210
|
+
c && A(0);
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
if (z || A(2), K < 256) n[g++] = K;
|
|
214
|
+
else if (K == 256) {
|
|
215
|
+
G = h, v = null;
|
|
216
|
+
break;
|
|
217
|
+
} else {
|
|
218
|
+
var q = K - 254;
|
|
219
|
+
if (K > 264) {
|
|
220
|
+
var P = K - 257, J = f[P];
|
|
221
|
+
q = O(e, h, (1 << J) - 1) + _[P], h += J;
|
|
222
|
+
}
|
|
223
|
+
var Y = y[ae(e, h) & W], X = Y >> 4;
|
|
224
|
+
Y || A(3), h += Y & 15;
|
|
225
|
+
var H = ee[X];
|
|
226
|
+
if (X > 3) {
|
|
227
|
+
var J = p[X];
|
|
228
|
+
H += ae(e, h) & (1 << J) - 1, h += J;
|
|
229
|
+
}
|
|
230
|
+
if (h > S) {
|
|
231
|
+
c && A(0);
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
234
|
+
s && u(g + 131072);
|
|
235
|
+
var ce = g + q;
|
|
236
|
+
if (g < H) {
|
|
237
|
+
var Z = a - H, le = Math.min(H, ce);
|
|
238
|
+
for (Z + g < 0 && A(3); g < le; ++g) n[g] = r[Z + g];
|
|
239
|
+
}
|
|
240
|
+
for (; g < ce; ++g) n[g] = n[g - H];
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
t.l = v, t.p = G, t.b = g, t.f = d, v && (d = 1, t.m = b, t.d = y, t.n = x);
|
|
244
|
+
} while (!d);
|
|
245
|
+
return g != n.length && o ? se(n, 0, g) : n.subarray(0, g);
|
|
246
|
+
}, M = function(e, t, n) {
|
|
247
|
+
n <<= t & 7;
|
|
248
|
+
var r = t / 8 | 0;
|
|
249
|
+
e[r] |= n, e[r + 1] |= n >> 8;
|
|
250
|
+
}, N = function(e, t, n) {
|
|
251
|
+
n <<= t & 7;
|
|
252
|
+
var r = t / 8 | 0;
|
|
253
|
+
e[r] |= n, e[r + 1] |= n >> 8, e[r + 2] |= n >> 16;
|
|
254
|
+
}, P = function(e, t) {
|
|
255
|
+
for (var n = [], r = 0; r < e.length; ++r) e[r] && n.push({
|
|
256
|
+
s: r,
|
|
257
|
+
f: e[r]
|
|
258
|
+
});
|
|
259
|
+
var i = n.length, a = n.slice();
|
|
260
|
+
if (!i) return {
|
|
261
|
+
t: V,
|
|
262
|
+
l: 0
|
|
263
|
+
};
|
|
264
|
+
if (i == 1) {
|
|
265
|
+
var o = new l(n[0].s + 1);
|
|
266
|
+
return o[n[0].s] = 1, {
|
|
267
|
+
t: o,
|
|
268
|
+
l: 1
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
n.sort(function(e, t) {
|
|
272
|
+
return e.f - t.f;
|
|
273
|
+
}), n.push({
|
|
274
|
+
s: -1,
|
|
275
|
+
f: 25001
|
|
276
|
+
});
|
|
277
|
+
var s = n[0], c = n[1], d = 0, f = 1, p = 2;
|
|
278
|
+
for (n[0] = {
|
|
279
|
+
s: -1,
|
|
280
|
+
f: s.f + c.f,
|
|
281
|
+
l: s,
|
|
282
|
+
r: c
|
|
283
|
+
}; f != i - 1;) s = n[n[d].f < n[p].f ? d++ : p++], c = n[d != f && n[d].f < n[p].f ? d++ : p++], n[f++] = {
|
|
284
|
+
s: -1,
|
|
285
|
+
f: s.f + c.f,
|
|
286
|
+
l: s,
|
|
287
|
+
r: c
|
|
288
|
+
};
|
|
289
|
+
for (var m = a[0].s, r = 1; r < i; ++r) a[r].s > m && (m = a[r].s);
|
|
290
|
+
var h = new u(m + 1), g = F(n[f - 1], h, 0);
|
|
291
|
+
if (g > t) {
|
|
292
|
+
var r = 0, _ = 0, v = g - t, y = 1 << v;
|
|
293
|
+
for (a.sort(function(e, t) {
|
|
294
|
+
return h[t.s] - h[e.s] || e.f - t.f;
|
|
295
|
+
}); r < i; ++r) {
|
|
296
|
+
var ee = a[r].s;
|
|
297
|
+
if (h[ee] > t) _ += y - (1 << g - h[ee]), h[ee] = t;
|
|
298
|
+
else break;
|
|
299
|
+
}
|
|
300
|
+
for (_ >>= v; _ > 0;) {
|
|
301
|
+
var b = a[r].s;
|
|
302
|
+
h[b] < t ? _ -= 1 << t - h[b]++ - 1 : ++r;
|
|
303
|
+
}
|
|
304
|
+
for (; r >= 0 && _; --r) {
|
|
305
|
+
var x = a[r].s;
|
|
306
|
+
h[x] == t && (--h[x], ++_);
|
|
307
|
+
}
|
|
308
|
+
g = t;
|
|
309
|
+
}
|
|
310
|
+
return {
|
|
311
|
+
t: new l(h),
|
|
312
|
+
l: g
|
|
313
|
+
};
|
|
314
|
+
}, F = function(e, t, n) {
|
|
315
|
+
return e.s == -1 ? Math.max(F(e.l, t, n + 1), F(e.r, t, n + 1)) : t[e.s] = n;
|
|
316
|
+
}, I = function(e) {
|
|
317
|
+
for (var t = e.length; t && !e[--t];);
|
|
318
|
+
for (var n = new u(++t), r = 0, i = e[0], a = 1, o = function(e) {
|
|
319
|
+
n[r++] = e;
|
|
320
|
+
}, s = 1; s <= t; ++s) if (e[s] == i && s != t) ++a;
|
|
321
|
+
else {
|
|
322
|
+
if (!i && a > 2) {
|
|
323
|
+
for (; a > 138; a -= 138) o(32754);
|
|
324
|
+
a > 2 && (o(a > 10 ? a - 11 << 5 | 28690 : a - 3 << 5 | 12305), a = 0);
|
|
325
|
+
} else if (a > 3) {
|
|
326
|
+
for (o(i), --a; a > 6; a -= 6) o(8304);
|
|
327
|
+
a > 2 && (o(a - 3 << 5 | 8208), a = 0);
|
|
328
|
+
}
|
|
329
|
+
for (; a--;) o(i);
|
|
330
|
+
a = 1, i = e[s];
|
|
331
|
+
}
|
|
332
|
+
return {
|
|
333
|
+
c: n.subarray(0, r),
|
|
334
|
+
n: t
|
|
335
|
+
};
|
|
336
|
+
}, L = function(e, t) {
|
|
337
|
+
for (var n = 0, r = 0; r < t.length; ++r) n += e[r] * t[r];
|
|
338
|
+
return n;
|
|
339
|
+
}, R = function(e, t, n) {
|
|
340
|
+
var r = n.length, i = oe(t + 2);
|
|
341
|
+
e[i] = r & 255, e[i + 1] = r >> 8, e[i + 2] = e[i] ^ 255, e[i + 3] = e[i + 1] ^ 255;
|
|
342
|
+
for (var a = 0; a < r; ++a) e[i + a + 4] = n[a];
|
|
343
|
+
return (i + 4 + r) * 8;
|
|
344
|
+
}, z = function(e, t, n, r, i, a, o, s, c, l, d) {
|
|
345
|
+
M(t, d++, n), ++i[256];
|
|
346
|
+
for (var h = P(i, 15), g = h.t, _ = h.l, v = P(a, 15), y = v.t, ee = v.l, b = I(g), x = b.c, S = b.n, C = I(y), ne = C.c, ie = C.n, D = new u(19), O = 0; O < x.length; ++O) ++D[x[O] & 31];
|
|
347
|
+
for (var O = 0; O < ne.length; ++O) ++D[ne[O] & 31];
|
|
348
|
+
for (var ae = P(D, 7), oe = ae.t, se = ae.l, k = 19; k > 4 && !oe[m[k - 1]]; --k);
|
|
349
|
+
var A = l + 5 << 3, j = L(i, T) + L(a, E) + o, F = L(i, g) + L(a, y) + o + 14 + 3 * k + L(D, oe) + 2 * D[16] + 3 * D[17] + 7 * D[18];
|
|
350
|
+
if (c >= 0 && A <= j && A <= F) return R(t, d, e.subarray(c, c + l));
|
|
351
|
+
var z, B, V, H;
|
|
352
|
+
if (M(t, d, 1 + (F < j)), d += 2, F < j) {
|
|
353
|
+
z = w(g, _, 0), B = g, V = w(y, ee, 0), H = y;
|
|
354
|
+
var U = w(oe, se, 0);
|
|
355
|
+
M(t, d, S - 257), M(t, d + 5, ie - 1), M(t, d + 10, k - 4), d += 14;
|
|
356
|
+
for (var O = 0; O < k; ++O) M(t, d + 3 * O, oe[m[O]]);
|
|
357
|
+
d += 3 * k;
|
|
358
|
+
for (var W = [x, ne], G = 0; G < 2; ++G) for (var K = W[G], O = 0; O < K.length; ++O) {
|
|
359
|
+
var q = K[O] & 31;
|
|
360
|
+
M(t, d, U[q]), d += oe[q], q > 15 && (M(t, d, K[O] >> 5 & 127), d += K[O] >> 12);
|
|
361
|
+
}
|
|
362
|
+
} else z = te, B = T, V = re, H = E;
|
|
363
|
+
for (var O = 0; O < s; ++O) {
|
|
364
|
+
var J = r[O];
|
|
365
|
+
if (J > 255) {
|
|
366
|
+
var q = J >> 18 & 31;
|
|
367
|
+
N(t, d, z[q + 257]), d += B[q + 257], q > 7 && (M(t, d, J >> 23 & 31), d += f[q]);
|
|
368
|
+
var Y = J & 31;
|
|
369
|
+
N(t, d, V[Y]), d += H[Y], Y > 3 && (N(t, d, J >> 5 & 8191), d += p[Y]);
|
|
370
|
+
} else N(t, d, z[J]), d += B[J];
|
|
371
|
+
}
|
|
372
|
+
return N(t, d, z[256]), d + B[256];
|
|
373
|
+
}, B = /*#__PURE__*/ new d([
|
|
374
|
+
65540,
|
|
375
|
+
131080,
|
|
376
|
+
131088,
|
|
377
|
+
131104,
|
|
378
|
+
262176,
|
|
379
|
+
1048704,
|
|
380
|
+
1048832,
|
|
381
|
+
2114560,
|
|
382
|
+
2117632
|
|
383
|
+
]), V = /*#__PURE__*/ new l(0), H = function(e, t, n, r, i, a) {
|
|
384
|
+
var o = a.z || e.length, s = new l(r + o + 5 * (1 + Math.ceil(o / 7e3)) + i), c = s.subarray(r, s.length - i), m = a.l, h = (a.r || 0) & 7;
|
|
385
|
+
if (t) {
|
|
386
|
+
h && (c[0] = a.r >> 3);
|
|
387
|
+
for (var g = B[t - 1], _ = g >> 13, y = g & 8191, ee = (1 << n) - 1, x = a.p || new u(32768), S = a.h || new u(ee + 1), C = Math.ceil(n / 3), w = 2 * C, T = function(t) {
|
|
388
|
+
return (e[t] ^ e[t + 1] << C ^ e[t + 2] << w) & ee;
|
|
389
|
+
}, E = new d(25e3), te = new u(288), ne = new u(32), re = 0, ie = 0, D = a.i || 0, O = 0, ae = a.w || 0, k = 0; D + 2 < o; ++D) {
|
|
390
|
+
var A = T(D), j = D & 32767, M = S[A];
|
|
391
|
+
if (x[j] = M, S[A] = j, ae <= D) {
|
|
392
|
+
var N = o - D;
|
|
393
|
+
if ((re > 7e3 || O > 24576) && (N > 423 || !m)) {
|
|
394
|
+
h = z(e, c, 0, E, te, ne, ie, O, k, D - k, h), O = re = ie = 0, k = D;
|
|
395
|
+
for (var P = 0; P < 286; ++P) te[P] = 0;
|
|
396
|
+
for (var P = 0; P < 30; ++P) ne[P] = 0;
|
|
397
|
+
}
|
|
398
|
+
var F = 2, I = 0, L = y, V = j - M & 32767;
|
|
399
|
+
if (N > 2 && A == T(D - V)) for (var H = Math.min(_, N) - 1, U = Math.min(32767, D), W = Math.min(258, N); V <= U && --L && j != M;) {
|
|
400
|
+
if (e[D + F] == e[D + F - V]) {
|
|
401
|
+
for (var G = 0; G < W && e[D + G] == e[D + G - V]; ++G);
|
|
402
|
+
if (G > F) {
|
|
403
|
+
if (F = G, I = V, G > H) break;
|
|
404
|
+
for (var K = Math.min(V, G - 2), q = 0, P = 0; P < K; ++P) {
|
|
405
|
+
var J = D - V + P & 32767, Y = J - x[J] & 32767;
|
|
406
|
+
Y > q && (q = Y, M = J);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
j = M, M = x[j], V += j - M & 32767;
|
|
411
|
+
}
|
|
412
|
+
if (I) {
|
|
413
|
+
E[O++] = 268435456 | v[F] << 18 | b[I];
|
|
414
|
+
var X = v[F] & 31, ce = b[I] & 31;
|
|
415
|
+
ie += f[X] + p[ce], ++te[257 + X], ++ne[ce], ae = D + F, ++re;
|
|
416
|
+
} else E[O++] = e[D], ++te[e[D]];
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
for (D = Math.max(D, ae); D < o; ++D) E[O++] = e[D], ++te[e[D]];
|
|
420
|
+
h = z(e, c, m, E, te, ne, ie, O, k, D - k, h), m || (a.r = h & 7 | c[h / 8 | 0] << 3, h -= 7, a.h = S, a.p = x, a.i = D, a.w = ae);
|
|
421
|
+
} else {
|
|
422
|
+
for (var D = a.w || 0; D < o + m; D += 65535) {
|
|
423
|
+
var Z = D + 65535;
|
|
424
|
+
Z >= o && (c[h / 8 | 0] = m, Z = o), h = R(c, h + 1, e.subarray(D, Z));
|
|
425
|
+
}
|
|
426
|
+
a.i = o;
|
|
427
|
+
}
|
|
428
|
+
return se(s, 0, r + oe(h) + i);
|
|
429
|
+
}, U = function(e, t, n, r, i) {
|
|
430
|
+
if (!i && (i = { l: 1 }, t.dictionary)) {
|
|
431
|
+
var a = t.dictionary.subarray(-32768), o = new l(a.length + e.length);
|
|
432
|
+
o.set(a), o.set(e, a.length), e = o, i.w = a.length;
|
|
433
|
+
}
|
|
434
|
+
return H(e, t.level == null ? 6 : t.level, t.mem == null ? i.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(e.length))) * 1.5) : 20 : 12 + t.mem, n, r, i);
|
|
435
|
+
};
|
|
436
|
+
function W(e, t) {
|
|
437
|
+
return U(e, t || {}, 0, 0);
|
|
438
|
+
}
|
|
439
|
+
var G = /* @__PURE__ */ function() {
|
|
440
|
+
function e(e, t) {
|
|
441
|
+
typeof e == "function" && (t = e, e = {}), this.ondata = t;
|
|
442
|
+
var n = e && e.dictionary && e.dictionary.subarray(-32768);
|
|
443
|
+
this.s = {
|
|
444
|
+
i: 0,
|
|
445
|
+
b: n ? n.length : 0
|
|
446
|
+
}, this.o = new l(32768), this.p = new l(0), n && this.o.set(n);
|
|
447
|
+
}
|
|
448
|
+
return e.prototype.e = function(e) {
|
|
449
|
+
if (this.ondata || A(5), this.d && A(4), !this.p.length) this.p = e;
|
|
450
|
+
else if (e.length) {
|
|
451
|
+
var t = new l(this.p.length + e.length);
|
|
452
|
+
t.set(this.p), t.set(e, this.p.length), this.p = t;
|
|
453
|
+
}
|
|
454
|
+
}, e.prototype.c = function(e) {
|
|
455
|
+
this.s.i = +(this.d = e || !1);
|
|
456
|
+
var t = this.s.b, n = j(this.p, this.s, this.o);
|
|
457
|
+
this.ondata(se(n, t, this.s.b), this.d), this.o = se(n, this.s.b - 32768), this.s.b = this.o.length, this.p = se(this.p, this.s.p / 8 | 0), this.s.p &= 7;
|
|
458
|
+
}, e.prototype.push = function(e, t) {
|
|
459
|
+
this.e(e), this.c(t);
|
|
460
|
+
}, e;
|
|
461
|
+
}(), K = typeof TextDecoder < "u" && /*#__PURE__*/ new TextDecoder();
|
|
462
|
+
try {
|
|
463
|
+
K.decode(V, { stream: !0 });
|
|
464
|
+
} catch {}
|
|
465
|
+
var q = 5389, J = (e, t, n) => Number.isInteger(e) && e >= t && e <= n, Y = (e) => Number.isFinite(e) && e >= 1 && e <= 1e5, X = class {
|
|
466
|
+
core;
|
|
467
|
+
enabled = !1;
|
|
468
|
+
constructor(e) {
|
|
469
|
+
if (this.core = e, e.surface_state_capacity() !== 5389) throw Error("Unsupported surface state version");
|
|
470
|
+
}
|
|
471
|
+
configure(e) {
|
|
472
|
+
if (!J(e.seed, 0, 4294967295) || !Y(e.halfWidth) || !Y(e.halfHeight) || !J(e.moisturePermille, 0, 1e3)) throw Error("Invalid surface configuration");
|
|
473
|
+
if (!this.core.surface_configure(e.seed, e.halfWidth, e.halfHeight, e.moisturePermille)) throw Error("Surface configuration rejected");
|
|
474
|
+
this.enabled = !0;
|
|
475
|
+
}
|
|
476
|
+
disable() {
|
|
477
|
+
this.core.surface_disable(), this.enabled = !1;
|
|
478
|
+
}
|
|
479
|
+
setWeather(e) {
|
|
480
|
+
if (!J(e.rainMilliMmH, 0, 2e5) || !J(e.temperatureMilliC, -3e4, 6e4) || !J(e.humidityPermille, 0, 1e3) || !J(e.windMilliMS, 0, 6e4)) throw Error("Invalid surface weather");
|
|
481
|
+
if (!this.core.surface_weather(e.rainMilliMmH, e.temperatureMilliC, e.humidityPermille, e.windMilliMS)) throw Error("Surface is disabled");
|
|
482
|
+
}
|
|
483
|
+
sample(e, t) {
|
|
484
|
+
if (!Number.isFinite(e) || !Number.isFinite(t)) throw Error("Invalid surface position");
|
|
485
|
+
return {
|
|
486
|
+
traction: this.core.surface_sample(e, t, 0),
|
|
487
|
+
rollingDrag: this.core.surface_sample(e, t, 1),
|
|
488
|
+
waterMm: this.core.surface_sample(e, t, 2),
|
|
489
|
+
compaction: this.core.surface_sample(e, t, 3)
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
snapshot() {
|
|
493
|
+
let e = this.core.surface_save();
|
|
494
|
+
if (e === 0) return [];
|
|
495
|
+
if (e !== 5389) throw Error("Invalid surface checkpoint size");
|
|
496
|
+
return Array.from(this.buffer());
|
|
497
|
+
}
|
|
498
|
+
restore(e) {
|
|
499
|
+
if (!Array.isArray(e) || e.length !== 0 && e.length !== 5389 || !e.every((e) => J(e, 0, 4294967295)) || (e.length && this.buffer().set(e), !this.core.surface_restore(e.length))) throw Error("Invalid surface checkpoint");
|
|
500
|
+
this.enabled = e.length > 0;
|
|
501
|
+
}
|
|
502
|
+
buffer() {
|
|
503
|
+
let e = this.core.surface_state_ptr();
|
|
504
|
+
return new Uint32Array(this.core.memory.buffer, e, q);
|
|
505
|
+
}
|
|
506
|
+
}, ce = 131072, Z = 49152, le = new TextEncoder();
|
|
507
|
+
new TextDecoder("utf-8", { fatal: !0 });
|
|
508
|
+
var ue = (e, t) => typeof e == "number" && Number.isInteger(e) && e >= 0 && e <= t;
|
|
509
|
+
function de(e, t) {
|
|
510
|
+
if (!ue(t, 65535) || !ue(e.tick, 4294967295) || !Array.isArray(e.surface) || e.surface.length !== 5389) throw Error("Invalid terrain snapshot");
|
|
511
|
+
let n = le.encode(JSON.stringify(e));
|
|
512
|
+
if (n.length > ce) throw Error("Terrain snapshot exceeds size limit");
|
|
513
|
+
let r = W(n, { level: 1 });
|
|
514
|
+
if (r.length > Z) throw Error("Compressed terrain snapshot exceeds size limit");
|
|
515
|
+
let i = "";
|
|
516
|
+
for (let e of r) i += String.fromCharCode(e);
|
|
517
|
+
return {
|
|
518
|
+
type: "terrain-state",
|
|
519
|
+
epoch: t,
|
|
520
|
+
tick: e.tick,
|
|
521
|
+
payload: btoa(i)
|
|
522
|
+
};
|
|
523
|
+
}
|
|
524
|
+
function fe(e) {
|
|
15
525
|
let t = new AbortController(), n = () => t.abort(e?.reason);
|
|
16
526
|
e?.aborted ? n() : e?.addEventListener("abort", n, { once: !0 });
|
|
17
527
|
let r = setTimeout(() => t.abort(new DOMException("Room startup timed out", "TimeoutError")), 15e3);
|
|
@@ -33,9 +543,7 @@ function l(e) {
|
|
|
33
543
|
}
|
|
34
544
|
};
|
|
35
545
|
}
|
|
36
|
-
|
|
37
|
-
//#region src/client/host-config.ts
|
|
38
|
-
var u = /* @__PURE__ */ new Set([
|
|
546
|
+
var pe = /* @__PURE__ */ new Set([
|
|
39
547
|
"noPlayer",
|
|
40
548
|
"playerName",
|
|
41
549
|
"roomName",
|
|
@@ -44,12 +552,12 @@ var u = /* @__PURE__ */ new Set([
|
|
|
44
552
|
"public",
|
|
45
553
|
"stadium"
|
|
46
554
|
]);
|
|
47
|
-
function
|
|
555
|
+
function me(e) {
|
|
48
556
|
if (!e || typeof e != "object" || Array.isArray(e)) throw Error("Room configuration must be an object");
|
|
49
557
|
for (let t of Object.keys(e)) {
|
|
50
558
|
if (t === "token") throw Error("External service tokens are not supported. Ball2D join verification is configured on the room.");
|
|
51
559
|
if (t === "geo") throw Error("Geolocation overrides are not supported. Room country comes from the host connection.");
|
|
52
|
-
if (!
|
|
560
|
+
if (!pe.has(t)) throw Error(`Unknown room setting: ${t}`);
|
|
53
561
|
}
|
|
54
562
|
let t = { ...e };
|
|
55
563
|
if (typeof t.roomName != "string" || !t.roomName.trim() || t.roomName.length > 64) throw Error("Room name must contain 1–64 characters");
|
|
@@ -68,19 +576,15 @@ function d(e) {
|
|
|
68
576
|
stadium: t.stadium
|
|
69
577
|
};
|
|
70
578
|
}
|
|
71
|
-
|
|
72
|
-
//#region src/shared/room-link.ts
|
|
73
|
-
function f(e) {
|
|
579
|
+
function he(e) {
|
|
74
580
|
return /^(?:[0-9a-f]{10}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$/i.test(e) ? e.toLowerCase() : null;
|
|
75
581
|
}
|
|
76
|
-
function
|
|
77
|
-
let t =
|
|
582
|
+
function Q(e) {
|
|
583
|
+
let t = he(e);
|
|
78
584
|
if (!t) throw Error("Invalid room code");
|
|
79
585
|
return `/r/${t}`;
|
|
80
586
|
}
|
|
81
|
-
|
|
82
|
-
//#region src/core/team-colors.ts
|
|
83
|
-
function m(e, t, n) {
|
|
587
|
+
function ge(e, t, n) {
|
|
84
588
|
if (!Number.isFinite(e) || !Number.isInteger(t) || t < 0 || t > 16777215 || !Array.isArray(n) || n.length < 1 || n.length > 3 || n.some((e) => !Number.isInteger(e) || e < 0 || e > 16777215)) throw Error("Invalid team colors");
|
|
85
589
|
return {
|
|
86
590
|
angle: (e % 360 + 360) % 360,
|
|
@@ -88,14 +592,12 @@ function m(e, t, n) {
|
|
|
88
592
|
colors: [...n]
|
|
89
593
|
};
|
|
90
594
|
}
|
|
91
|
-
function
|
|
595
|
+
function _e(e) {
|
|
92
596
|
if (e === void 0) return [null, null];
|
|
93
597
|
if (!Array.isArray(e) || e.length !== 2) throw Error("Invalid team styles");
|
|
94
|
-
return e.map((e) => e === null ? null :
|
|
598
|
+
return e.map((e) => e === null ? null : ge(e.angle, e.textColor, e.colors));
|
|
95
599
|
}
|
|
96
|
-
|
|
97
|
-
//#region src/client/announcement.ts
|
|
98
|
-
var g = [
|
|
600
|
+
var ve = [
|
|
99
601
|
"normal",
|
|
100
602
|
"bold",
|
|
101
603
|
"italic",
|
|
@@ -103,10 +605,10 @@ var g = [
|
|
|
103
605
|
"small-bold",
|
|
104
606
|
"small-italic"
|
|
105
607
|
];
|
|
106
|
-
function
|
|
608
|
+
function ye(e, t, n, r) {
|
|
107
609
|
if (typeof e != "string" || e.length > 1e3) throw Error("Announcement exceeds 1000 characters");
|
|
108
610
|
if (t != null && (!Number.isInteger(t) || t < 0 || t > 16777215)) throw Error("Invalid announcement color");
|
|
109
|
-
if (n != null && !
|
|
611
|
+
if (n != null && !ve.includes(n)) throw Error("Invalid announcement style");
|
|
110
612
|
if (r != null && ![
|
|
111
613
|
0,
|
|
112
614
|
1,
|
|
@@ -120,14 +622,10 @@ function _(e, t, n, r) {
|
|
|
120
622
|
sound: r ?? 1
|
|
121
623
|
};
|
|
122
624
|
}
|
|
123
|
-
|
|
124
|
-
//#region src/core/avatar.ts
|
|
125
|
-
function v(e) {
|
|
625
|
+
function be(e) {
|
|
126
626
|
return e === null || typeof e == "string" && Array.from(e).length <= 2 && !/[\p{Cc}\p{Cf}]/u.test(e);
|
|
127
627
|
}
|
|
128
|
-
|
|
129
|
-
//#region src/core/disc-properties.ts
|
|
130
|
-
var y = [
|
|
628
|
+
var xe = [
|
|
131
629
|
[
|
|
132
630
|
"x",
|
|
133
631
|
0,
|
|
@@ -207,11 +705,11 @@ var y = [
|
|
|
207
705
|
2147483647
|
|
208
706
|
]
|
|
209
707
|
];
|
|
210
|
-
function
|
|
708
|
+
function Se(e) {
|
|
211
709
|
if (!e || typeof e != "object" || Array.isArray(e)) throw Error("Invalid disc property update");
|
|
212
710
|
let t = e, n = {};
|
|
213
|
-
for (let e = 0; e <
|
|
214
|
-
let [r, , i, a] =
|
|
711
|
+
for (let e = 0; e < xe.length; e++) {
|
|
712
|
+
let [r, , i, a] = xe[e], o = t[r];
|
|
215
713
|
if (o == null) continue;
|
|
216
714
|
if (typeof o != "number" || !Number.isFinite(o)) throw Error(`Invalid disc property: ${r}`);
|
|
217
715
|
let s = e < 10 ? Math.fround(o) : o | 0;
|
|
@@ -220,9 +718,7 @@ function b(e) {
|
|
|
220
718
|
}
|
|
221
719
|
return n;
|
|
222
720
|
}
|
|
223
|
-
|
|
224
|
-
//#region src/core/build-id.ts
|
|
225
|
-
var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t) => {
|
|
721
|
+
var Ce = "edb227eac070ad86a151", we = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t) => {
|
|
226
722
|
(function(n, r) {
|
|
227
723
|
typeof e == "object" && t !== void 0 ? t.exports = r() : typeof define == "function" && define.amd ? define(r) : n.JSON5 = r();
|
|
228
724
|
})(e, (function() {
|
|
@@ -282,9 +778,9 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
282
778
|
return e[t] = n, e;
|
|
283
779
|
}, g = {}.hasOwnProperty, _ = function(e, t) {
|
|
284
780
|
return g.call(e, t);
|
|
285
|
-
}, v = 0, y = Math.random(),
|
|
781
|
+
}, v = 0, y = Math.random(), ee = function(e) {
|
|
286
782
|
return `Symbol(${e === void 0 ? "" : e})_${(++v + y).toString(36)}`;
|
|
287
|
-
},
|
|
783
|
+
}, b = e(function(e) {
|
|
288
784
|
var r = "__core-js_shared__", i = t[r] || (t[r] = {});
|
|
289
785
|
(e.exports = function(e, t) {
|
|
290
786
|
return i[e] || (i[e] = t === void 0 ? {} : t);
|
|
@@ -293,21 +789,21 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
293
789
|
mode: "global",
|
|
294
790
|
copyright: "© 2019 Denis Pushkarev (zloirock.ru)"
|
|
295
791
|
});
|
|
296
|
-
})("native-function-to-string", Function.toString),
|
|
297
|
-
var r =
|
|
792
|
+
})("native-function-to-string", Function.toString), x = e(function(e) {
|
|
793
|
+
var r = ee("src"), i = "toString", a = ("" + b).split(i);
|
|
298
794
|
n.inspectSource = function(e) {
|
|
299
|
-
return
|
|
795
|
+
return b.call(e);
|
|
300
796
|
}, (e.exports = function(e, n, i, o) {
|
|
301
797
|
var s = typeof i == "function";
|
|
302
798
|
s && (_(i, "name") || h(i, "name", n)), e[n] !== i && (s && (_(i, r) || h(i, r, e[n] ? "" + e[n] : a.join(String(n)))), e === t ? e[n] = i : o ? e[n] ? e[n] = i : h(e, n, i) : (delete e[n], h(e, n, i)));
|
|
303
799
|
})(Function.prototype, i, function() {
|
|
304
|
-
return typeof this == "function" && this[r] ||
|
|
800
|
+
return typeof this == "function" && this[r] || b.call(this);
|
|
305
801
|
});
|
|
306
|
-
}),
|
|
802
|
+
}), S = function(e) {
|
|
307
803
|
if (typeof e != "function") throw TypeError(e + " is not a function!");
|
|
308
804
|
return e;
|
|
309
|
-
},
|
|
310
|
-
if (
|
|
805
|
+
}, C = function(e, t, n) {
|
|
806
|
+
if (S(e), t === void 0) return e;
|
|
311
807
|
switch (n) {
|
|
312
808
|
case 1: return function(n) {
|
|
313
809
|
return e.call(t, n);
|
|
@@ -322,48 +818,48 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
322
818
|
return function() {
|
|
323
819
|
return e.apply(t, arguments);
|
|
324
820
|
};
|
|
325
|
-
},
|
|
326
|
-
var a = e &
|
|
327
|
-
for (p in o && (i = r), i) m = !a && u && u[p] !== void 0, g = (m ? u : i)[p], _ = l && m ?
|
|
821
|
+
}, w = "prototype", T = function(e, r, i) {
|
|
822
|
+
var a = e & T.F, o = e & T.G, s = e & T.S, c = e & T.P, l = e & T.B, u = o ? t : s ? t[r] || (t[r] = {}) : (t[r] || {})[w], d = o ? n : n[r] || (n[r] = {}), f = d[w] || (d[w] = {}), p, m, g, _;
|
|
823
|
+
for (p in o && (i = r), i) m = !a && u && u[p] !== void 0, g = (m ? u : i)[p], _ = l && m ? C(g, t) : c && typeof g == "function" ? C(Function.call, g) : g, u && x(u, p, g, e & T.U), d[p] != g && h(d, p, _), c && f[p] != g && (f[p] = g);
|
|
328
824
|
};
|
|
329
|
-
t.core = n,
|
|
330
|
-
var
|
|
331
|
-
return isNaN(e = +e) ? 0 : (e > 0 ?
|
|
332
|
-
},
|
|
825
|
+
t.core = n, T.F = 1, T.G = 2, T.S = 4, T.P = 8, T.B = 16, T.W = 32, T.U = 64, T.R = 128;
|
|
826
|
+
var E = T, te = Math.ceil, ne = Math.floor, re = function(e) {
|
|
827
|
+
return isNaN(e = +e) ? 0 : (e > 0 ? ne : te)(e);
|
|
828
|
+
}, ie = function(e) {
|
|
333
829
|
if (e == null) throw TypeError("Can't call method on " + e);
|
|
334
830
|
return e;
|
|
335
|
-
},
|
|
831
|
+
}, D = function(e) {
|
|
336
832
|
return function(t, n) {
|
|
337
|
-
var r = String(
|
|
833
|
+
var r = String(ie(t)), i = re(n), a = r.length, o, s;
|
|
338
834
|
return i < 0 || i >= a ? e ? "" : void 0 : (o = r.charCodeAt(i), o < 55296 || o > 56319 || i + 1 === a || (s = r.charCodeAt(i + 1)) < 56320 || s > 57343 ? e ? r.charAt(i) : o : e ? r.slice(i, i + 2) : (o - 55296 << 10) + (s - 56320) + 65536);
|
|
339
835
|
};
|
|
340
836
|
}(!1);
|
|
341
|
-
|
|
342
|
-
return
|
|
837
|
+
E(E.P, "String", { codePointAt: function(e) {
|
|
838
|
+
return D(this, e);
|
|
343
839
|
} }), n.String.codePointAt;
|
|
344
|
-
var
|
|
345
|
-
return e =
|
|
346
|
-
},
|
|
347
|
-
|
|
840
|
+
var O = Math.max, ae = Math.min, oe = function(e, t) {
|
|
841
|
+
return e = re(e), e < 0 ? O(e + t, 0) : ae(e, t);
|
|
842
|
+
}, se = String.fromCharCode, k = String.fromCodePoint;
|
|
843
|
+
E(E.S + E.F * (!!k && k.length != 1), "String", { fromCodePoint: function(e) {
|
|
348
844
|
for (var t = arguments, n = [], r = arguments.length, i = 0, a; r > i;) {
|
|
349
|
-
if (a = +t[i++],
|
|
350
|
-
n.push(a < 65536 ?
|
|
845
|
+
if (a = +t[i++], oe(a, 1114111) !== a) throw RangeError(a + " is not a valid code point");
|
|
846
|
+
n.push(a < 65536 ? se(a) : se(((a -= 65536) >> 10) + 55296, a % 1024 + 56320));
|
|
351
847
|
}
|
|
352
848
|
return n.join("");
|
|
353
849
|
} }), n.String.fromCodePoint;
|
|
354
|
-
var
|
|
850
|
+
var A = {
|
|
355
851
|
Space_Separator: /[\u1680\u2000-\u200A\u202F\u205F\u3000]/,
|
|
356
852
|
ID_Start: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/,
|
|
357
853
|
ID_Continue: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/
|
|
358
|
-
},
|
|
854
|
+
}, j = {
|
|
359
855
|
isSpaceSeparator: function(e) {
|
|
360
|
-
return typeof e == "string" &&
|
|
856
|
+
return typeof e == "string" && A.Space_Separator.test(e);
|
|
361
857
|
},
|
|
362
858
|
isIdStartChar: function(e) {
|
|
363
|
-
return typeof e == "string" && (e >= "a" && e <= "z" || e >= "A" && e <= "Z" || e === "$" || e === "_" ||
|
|
859
|
+
return typeof e == "string" && (e >= "a" && e <= "z" || e >= "A" && e <= "Z" || e === "$" || e === "_" || A.ID_Start.test(e));
|
|
364
860
|
},
|
|
365
861
|
isIdContinueChar: function(e) {
|
|
366
|
-
return typeof e == "string" && (e >= "a" && e <= "z" || e >= "A" && e <= "Z" || e >= "0" && e <= "9" || e === "$" || e === "_" || e === "" || e === "" ||
|
|
862
|
+
return typeof e == "string" && (e >= "a" && e <= "z" || e >= "A" && e <= "Z" || e >= "0" && e <= "9" || e === "$" || e === "_" || e === "" || e === "" || A.ID_Continue.test(e));
|
|
367
863
|
},
|
|
368
864
|
isDigit: function(e) {
|
|
369
865
|
return typeof e == "string" && /[0-9]/.test(e);
|
|
@@ -371,18 +867,18 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
371
867
|
isHexDigit: function(e) {
|
|
372
868
|
return typeof e == "string" && /[0-9A-Fa-f]/.test(e);
|
|
373
869
|
}
|
|
374
|
-
},
|
|
375
|
-
|
|
870
|
+
}, M, N, P, F, I, L, R, z, B, V = function(e, t) {
|
|
871
|
+
M = String(e), N = "start", P = [], F = 0, I = 1, L = 0, R = void 0, z = void 0, B = void 0;
|
|
376
872
|
do
|
|
377
|
-
|
|
378
|
-
while (
|
|
379
|
-
return typeof t == "function" ?
|
|
873
|
+
R = J(), pe[N]();
|
|
874
|
+
while (R.type !== "eof");
|
|
875
|
+
return typeof t == "function" ? H({ "": B }, "", t) : B;
|
|
380
876
|
};
|
|
381
|
-
function
|
|
877
|
+
function H(e, t, n) {
|
|
382
878
|
var r = e[t];
|
|
383
879
|
if (typeof r == "object" && r) {
|
|
384
880
|
if (Array.isArray(r)) for (var i = 0; i < r.length; i++) {
|
|
385
|
-
var a = String(i), o =
|
|
881
|
+
var a = String(i), o = H(r, a, n);
|
|
386
882
|
o === void 0 ? delete r[a] : Object.defineProperty(r, a, {
|
|
387
883
|
value: o,
|
|
388
884
|
writable: !0,
|
|
@@ -391,7 +887,7 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
391
887
|
});
|
|
392
888
|
}
|
|
393
889
|
else for (var s in r) {
|
|
394
|
-
var c =
|
|
890
|
+
var c = H(r, s, n);
|
|
395
891
|
c === void 0 ? delete r[s] : Object.defineProperty(r, s, {
|
|
396
892
|
value: c,
|
|
397
893
|
writable: !0,
|
|
@@ -402,24 +898,24 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
402
898
|
}
|
|
403
899
|
return n.call(e, t, r);
|
|
404
900
|
}
|
|
405
|
-
var
|
|
406
|
-
function
|
|
407
|
-
for (
|
|
408
|
-
|
|
409
|
-
var e =
|
|
901
|
+
var U, W, G, K, q;
|
|
902
|
+
function J() {
|
|
903
|
+
for (U = "default", W = "", G = !1, K = 1;;) {
|
|
904
|
+
q = Y();
|
|
905
|
+
var e = ce[U]();
|
|
410
906
|
if (e) return e;
|
|
411
907
|
}
|
|
412
908
|
}
|
|
413
|
-
function ce() {
|
|
414
|
-
if (z[te]) return String.fromCodePoint(z.codePointAt(te));
|
|
415
|
-
}
|
|
416
909
|
function Y() {
|
|
417
|
-
|
|
418
|
-
|
|
910
|
+
if (M[F]) return String.fromCodePoint(M.codePointAt(F));
|
|
911
|
+
}
|
|
912
|
+
function X() {
|
|
913
|
+
var e = Y();
|
|
914
|
+
return e === "\n" ? (I++, L = 0) : e ? L += e.length : L++, e && (F += e.length), e;
|
|
419
915
|
}
|
|
420
|
-
var
|
|
916
|
+
var ce = {
|
|
421
917
|
default: function() {
|
|
422
|
-
switch (
|
|
918
|
+
switch (q) {
|
|
423
919
|
case " ":
|
|
424
920
|
case "\v":
|
|
425
921
|
case "\f":
|
|
@@ -430,79 +926,79 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
430
926
|
case "\r":
|
|
431
927
|
case "\u2028":
|
|
432
928
|
case "\u2029":
|
|
433
|
-
|
|
929
|
+
X();
|
|
434
930
|
return;
|
|
435
931
|
case "/":
|
|
436
|
-
|
|
932
|
+
X(), U = "comment";
|
|
437
933
|
return;
|
|
438
|
-
case void 0: return
|
|
934
|
+
case void 0: return X(), Z("eof");
|
|
439
935
|
}
|
|
440
|
-
if (
|
|
441
|
-
|
|
936
|
+
if (j.isSpaceSeparator(q)) {
|
|
937
|
+
X();
|
|
442
938
|
return;
|
|
443
939
|
}
|
|
444
|
-
return
|
|
940
|
+
return ce[N]();
|
|
445
941
|
},
|
|
446
942
|
comment: function() {
|
|
447
|
-
switch (
|
|
943
|
+
switch (q) {
|
|
448
944
|
case "*":
|
|
449
|
-
|
|
945
|
+
X(), U = "multiLineComment";
|
|
450
946
|
return;
|
|
451
947
|
case "/":
|
|
452
|
-
|
|
948
|
+
X(), U = "singleLineComment";
|
|
453
949
|
return;
|
|
454
950
|
}
|
|
455
|
-
throw Q(
|
|
951
|
+
throw Q(X());
|
|
456
952
|
},
|
|
457
953
|
multiLineComment: function() {
|
|
458
|
-
switch (
|
|
954
|
+
switch (q) {
|
|
459
955
|
case "*":
|
|
460
|
-
|
|
956
|
+
X(), U = "multiLineCommentAsterisk";
|
|
461
957
|
return;
|
|
462
|
-
case void 0: throw Q(
|
|
958
|
+
case void 0: throw Q(X());
|
|
463
959
|
}
|
|
464
|
-
|
|
960
|
+
X();
|
|
465
961
|
},
|
|
466
962
|
multiLineCommentAsterisk: function() {
|
|
467
|
-
switch (
|
|
963
|
+
switch (q) {
|
|
468
964
|
case "*":
|
|
469
|
-
|
|
965
|
+
X();
|
|
470
966
|
return;
|
|
471
967
|
case "/":
|
|
472
|
-
|
|
968
|
+
X(), U = "default";
|
|
473
969
|
return;
|
|
474
|
-
case void 0: throw Q(
|
|
970
|
+
case void 0: throw Q(X());
|
|
475
971
|
}
|
|
476
|
-
|
|
972
|
+
X(), U = "multiLineComment";
|
|
477
973
|
},
|
|
478
974
|
singleLineComment: function() {
|
|
479
|
-
switch (
|
|
975
|
+
switch (q) {
|
|
480
976
|
case "\n":
|
|
481
977
|
case "\r":
|
|
482
978
|
case "\u2028":
|
|
483
979
|
case "\u2029":
|
|
484
|
-
|
|
980
|
+
X(), U = "default";
|
|
485
981
|
return;
|
|
486
|
-
case void 0: return
|
|
982
|
+
case void 0: return X(), Z("eof");
|
|
487
983
|
}
|
|
488
|
-
|
|
984
|
+
X();
|
|
489
985
|
},
|
|
490
986
|
value: function() {
|
|
491
|
-
switch (
|
|
987
|
+
switch (q) {
|
|
492
988
|
case "{":
|
|
493
|
-
case "[": return
|
|
494
|
-
case "n": return
|
|
495
|
-
case "t": return
|
|
496
|
-
case "f": return
|
|
989
|
+
case "[": return Z("punctuator", X());
|
|
990
|
+
case "n": return X(), le("ull"), Z("null", null);
|
|
991
|
+
case "t": return X(), le("rue"), Z("boolean", !0);
|
|
992
|
+
case "f": return X(), le("alse"), Z("boolean", !1);
|
|
497
993
|
case "-":
|
|
498
994
|
case "+":
|
|
499
|
-
|
|
995
|
+
X() === "-" && (K = -1), U = "sign";
|
|
500
996
|
return;
|
|
501
997
|
case ".":
|
|
502
|
-
|
|
998
|
+
W = X(), U = "decimalPointLeading";
|
|
503
999
|
return;
|
|
504
1000
|
case "0":
|
|
505
|
-
|
|
1001
|
+
W = X(), U = "zero";
|
|
506
1002
|
return;
|
|
507
1003
|
case "1":
|
|
508
1004
|
case "2":
|
|
@@ -513,66 +1009,66 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
513
1009
|
case "7":
|
|
514
1010
|
case "8":
|
|
515
1011
|
case "9":
|
|
516
|
-
|
|
1012
|
+
W = X(), U = "decimalInteger";
|
|
517
1013
|
return;
|
|
518
|
-
case "I": return
|
|
519
|
-
case "N": return
|
|
1014
|
+
case "I": return X(), le("nfinity"), Z("numeric", Infinity);
|
|
1015
|
+
case "N": return X(), le("aN"), Z("numeric", NaN);
|
|
520
1016
|
case "\"":
|
|
521
1017
|
case "'":
|
|
522
|
-
|
|
1018
|
+
G = X() === "\"", W = "", U = "string";
|
|
523
1019
|
return;
|
|
524
1020
|
}
|
|
525
|
-
throw Q(
|
|
1021
|
+
throw Q(X());
|
|
526
1022
|
},
|
|
527
1023
|
identifierNameStartEscape: function() {
|
|
528
|
-
if (
|
|
529
|
-
|
|
1024
|
+
if (q !== "u") throw Q(X());
|
|
1025
|
+
X();
|
|
530
1026
|
var e = fe();
|
|
531
1027
|
switch (e) {
|
|
532
1028
|
case "$":
|
|
533
1029
|
case "_": break;
|
|
534
|
-
default: if (!
|
|
1030
|
+
default: if (!j.isIdStartChar(e)) throw _e();
|
|
535
1031
|
}
|
|
536
|
-
|
|
1032
|
+
W += e, U = "identifierName";
|
|
537
1033
|
},
|
|
538
1034
|
identifierName: function() {
|
|
539
|
-
switch (
|
|
1035
|
+
switch (q) {
|
|
540
1036
|
case "$":
|
|
541
1037
|
case "_":
|
|
542
1038
|
case "":
|
|
543
1039
|
case "":
|
|
544
|
-
|
|
1040
|
+
W += X();
|
|
545
1041
|
return;
|
|
546
1042
|
case "\\":
|
|
547
|
-
|
|
1043
|
+
X(), U = "identifierNameEscape";
|
|
548
1044
|
return;
|
|
549
1045
|
}
|
|
550
|
-
if (
|
|
551
|
-
|
|
1046
|
+
if (j.isIdContinueChar(q)) {
|
|
1047
|
+
W += X();
|
|
552
1048
|
return;
|
|
553
1049
|
}
|
|
554
|
-
return
|
|
1050
|
+
return Z("identifier", W);
|
|
555
1051
|
},
|
|
556
1052
|
identifierNameEscape: function() {
|
|
557
|
-
if (
|
|
558
|
-
|
|
1053
|
+
if (q !== "u") throw Q(X());
|
|
1054
|
+
X();
|
|
559
1055
|
var e = fe();
|
|
560
1056
|
switch (e) {
|
|
561
1057
|
case "$":
|
|
562
1058
|
case "_":
|
|
563
1059
|
case "":
|
|
564
1060
|
case "": break;
|
|
565
|
-
default: if (!
|
|
1061
|
+
default: if (!j.isIdContinueChar(e)) throw _e();
|
|
566
1062
|
}
|
|
567
|
-
|
|
1063
|
+
W += e, U = "identifierName";
|
|
568
1064
|
},
|
|
569
1065
|
sign: function() {
|
|
570
|
-
switch (
|
|
1066
|
+
switch (q) {
|
|
571
1067
|
case ".":
|
|
572
|
-
|
|
1068
|
+
W = X(), U = "decimalPointLeading";
|
|
573
1069
|
return;
|
|
574
1070
|
case "0":
|
|
575
|
-
|
|
1071
|
+
W = X(), U = "zero";
|
|
576
1072
|
return;
|
|
577
1073
|
case "1":
|
|
578
1074
|
case "2":
|
|
@@ -583,231 +1079,231 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
583
1079
|
case "7":
|
|
584
1080
|
case "8":
|
|
585
1081
|
case "9":
|
|
586
|
-
|
|
1082
|
+
W = X(), U = "decimalInteger";
|
|
587
1083
|
return;
|
|
588
|
-
case "I": return
|
|
589
|
-
case "N": return
|
|
1084
|
+
case "I": return X(), le("nfinity"), Z("numeric", K * Infinity);
|
|
1085
|
+
case "N": return X(), le("aN"), Z("numeric", NaN);
|
|
590
1086
|
}
|
|
591
|
-
throw Q(
|
|
1087
|
+
throw Q(X());
|
|
592
1088
|
},
|
|
593
1089
|
zero: function() {
|
|
594
|
-
switch (
|
|
1090
|
+
switch (q) {
|
|
595
1091
|
case ".":
|
|
596
|
-
|
|
1092
|
+
W += X(), U = "decimalPoint";
|
|
597
1093
|
return;
|
|
598
1094
|
case "e":
|
|
599
1095
|
case "E":
|
|
600
|
-
|
|
1096
|
+
W += X(), U = "decimalExponent";
|
|
601
1097
|
return;
|
|
602
1098
|
case "x":
|
|
603
1099
|
case "X":
|
|
604
|
-
|
|
1100
|
+
W += X(), U = "hexadecimal";
|
|
605
1101
|
return;
|
|
606
1102
|
}
|
|
607
|
-
return
|
|
1103
|
+
return Z("numeric", K * 0);
|
|
608
1104
|
},
|
|
609
1105
|
decimalInteger: function() {
|
|
610
|
-
switch (
|
|
1106
|
+
switch (q) {
|
|
611
1107
|
case ".":
|
|
612
|
-
|
|
1108
|
+
W += X(), U = "decimalPoint";
|
|
613
1109
|
return;
|
|
614
1110
|
case "e":
|
|
615
1111
|
case "E":
|
|
616
|
-
|
|
1112
|
+
W += X(), U = "decimalExponent";
|
|
617
1113
|
return;
|
|
618
1114
|
}
|
|
619
|
-
if (
|
|
620
|
-
|
|
1115
|
+
if (j.isDigit(q)) {
|
|
1116
|
+
W += X();
|
|
621
1117
|
return;
|
|
622
1118
|
}
|
|
623
|
-
return
|
|
1119
|
+
return Z("numeric", K * Number(W));
|
|
624
1120
|
},
|
|
625
1121
|
decimalPointLeading: function() {
|
|
626
|
-
if (
|
|
627
|
-
|
|
1122
|
+
if (j.isDigit(q)) {
|
|
1123
|
+
W += X(), U = "decimalFraction";
|
|
628
1124
|
return;
|
|
629
1125
|
}
|
|
630
|
-
throw Q(
|
|
1126
|
+
throw Q(X());
|
|
631
1127
|
},
|
|
632
1128
|
decimalPoint: function() {
|
|
633
|
-
switch (
|
|
1129
|
+
switch (q) {
|
|
634
1130
|
case "e":
|
|
635
1131
|
case "E":
|
|
636
|
-
|
|
1132
|
+
W += X(), U = "decimalExponent";
|
|
637
1133
|
return;
|
|
638
1134
|
}
|
|
639
|
-
if (
|
|
640
|
-
|
|
1135
|
+
if (j.isDigit(q)) {
|
|
1136
|
+
W += X(), U = "decimalFraction";
|
|
641
1137
|
return;
|
|
642
1138
|
}
|
|
643
|
-
return
|
|
1139
|
+
return Z("numeric", K * Number(W));
|
|
644
1140
|
},
|
|
645
1141
|
decimalFraction: function() {
|
|
646
|
-
switch (
|
|
1142
|
+
switch (q) {
|
|
647
1143
|
case "e":
|
|
648
1144
|
case "E":
|
|
649
|
-
|
|
1145
|
+
W += X(), U = "decimalExponent";
|
|
650
1146
|
return;
|
|
651
1147
|
}
|
|
652
|
-
if (
|
|
653
|
-
|
|
1148
|
+
if (j.isDigit(q)) {
|
|
1149
|
+
W += X();
|
|
654
1150
|
return;
|
|
655
1151
|
}
|
|
656
|
-
return
|
|
1152
|
+
return Z("numeric", K * Number(W));
|
|
657
1153
|
},
|
|
658
1154
|
decimalExponent: function() {
|
|
659
|
-
switch (
|
|
1155
|
+
switch (q) {
|
|
660
1156
|
case "+":
|
|
661
1157
|
case "-":
|
|
662
|
-
|
|
1158
|
+
W += X(), U = "decimalExponentSign";
|
|
663
1159
|
return;
|
|
664
1160
|
}
|
|
665
|
-
if (
|
|
666
|
-
|
|
1161
|
+
if (j.isDigit(q)) {
|
|
1162
|
+
W += X(), U = "decimalExponentInteger";
|
|
667
1163
|
return;
|
|
668
1164
|
}
|
|
669
|
-
throw Q(
|
|
1165
|
+
throw Q(X());
|
|
670
1166
|
},
|
|
671
1167
|
decimalExponentSign: function() {
|
|
672
|
-
if (
|
|
673
|
-
|
|
1168
|
+
if (j.isDigit(q)) {
|
|
1169
|
+
W += X(), U = "decimalExponentInteger";
|
|
674
1170
|
return;
|
|
675
1171
|
}
|
|
676
|
-
throw Q(
|
|
1172
|
+
throw Q(X());
|
|
677
1173
|
},
|
|
678
1174
|
decimalExponentInteger: function() {
|
|
679
|
-
if (
|
|
680
|
-
|
|
1175
|
+
if (j.isDigit(q)) {
|
|
1176
|
+
W += X();
|
|
681
1177
|
return;
|
|
682
1178
|
}
|
|
683
|
-
return
|
|
1179
|
+
return Z("numeric", K * Number(W));
|
|
684
1180
|
},
|
|
685
1181
|
hexadecimal: function() {
|
|
686
|
-
if (
|
|
687
|
-
|
|
1182
|
+
if (j.isHexDigit(q)) {
|
|
1183
|
+
W += X(), U = "hexadecimalInteger";
|
|
688
1184
|
return;
|
|
689
1185
|
}
|
|
690
|
-
throw Q(
|
|
1186
|
+
throw Q(X());
|
|
691
1187
|
},
|
|
692
1188
|
hexadecimalInteger: function() {
|
|
693
|
-
if (
|
|
694
|
-
|
|
1189
|
+
if (j.isHexDigit(q)) {
|
|
1190
|
+
W += X();
|
|
695
1191
|
return;
|
|
696
1192
|
}
|
|
697
|
-
return
|
|
1193
|
+
return Z("numeric", K * Number(W));
|
|
698
1194
|
},
|
|
699
1195
|
string: function() {
|
|
700
|
-
switch (
|
|
1196
|
+
switch (q) {
|
|
701
1197
|
case "\\":
|
|
702
|
-
|
|
1198
|
+
X(), W += ue();
|
|
703
1199
|
return;
|
|
704
1200
|
case "\"":
|
|
705
|
-
if (
|
|
706
|
-
|
|
1201
|
+
if (G) return X(), Z("string", W);
|
|
1202
|
+
W += X();
|
|
707
1203
|
return;
|
|
708
1204
|
case "'":
|
|
709
|
-
if (!
|
|
710
|
-
|
|
1205
|
+
if (!G) return X(), Z("string", W);
|
|
1206
|
+
W += X();
|
|
711
1207
|
return;
|
|
712
1208
|
case "\n":
|
|
713
|
-
case "\r": throw Q(
|
|
1209
|
+
case "\r": throw Q(X());
|
|
714
1210
|
case "\u2028":
|
|
715
1211
|
case "\u2029":
|
|
716
|
-
|
|
1212
|
+
ve(q);
|
|
717
1213
|
break;
|
|
718
|
-
case void 0: throw Q(
|
|
1214
|
+
case void 0: throw Q(X());
|
|
719
1215
|
}
|
|
720
|
-
|
|
1216
|
+
W += X();
|
|
721
1217
|
},
|
|
722
1218
|
start: function() {
|
|
723
|
-
switch (
|
|
1219
|
+
switch (q) {
|
|
724
1220
|
case "{":
|
|
725
|
-
case "[": return
|
|
1221
|
+
case "[": return Z("punctuator", X());
|
|
726
1222
|
}
|
|
727
|
-
|
|
1223
|
+
U = "value";
|
|
728
1224
|
},
|
|
729
1225
|
beforePropertyName: function() {
|
|
730
|
-
switch (
|
|
1226
|
+
switch (q) {
|
|
731
1227
|
case "$":
|
|
732
1228
|
case "_":
|
|
733
|
-
|
|
1229
|
+
W = X(), U = "identifierName";
|
|
734
1230
|
return;
|
|
735
1231
|
case "\\":
|
|
736
|
-
|
|
1232
|
+
X(), U = "identifierNameStartEscape";
|
|
737
1233
|
return;
|
|
738
|
-
case "}": return
|
|
1234
|
+
case "}": return Z("punctuator", X());
|
|
739
1235
|
case "\"":
|
|
740
1236
|
case "'":
|
|
741
|
-
|
|
1237
|
+
G = X() === "\"", U = "string";
|
|
742
1238
|
return;
|
|
743
1239
|
}
|
|
744
|
-
if (
|
|
745
|
-
|
|
1240
|
+
if (j.isIdStartChar(q)) {
|
|
1241
|
+
W += X(), U = "identifierName";
|
|
746
1242
|
return;
|
|
747
1243
|
}
|
|
748
|
-
throw Q(
|
|
1244
|
+
throw Q(X());
|
|
749
1245
|
},
|
|
750
1246
|
afterPropertyName: function() {
|
|
751
|
-
if (
|
|
752
|
-
throw Q(
|
|
1247
|
+
if (q === ":") return Z("punctuator", X());
|
|
1248
|
+
throw Q(X());
|
|
753
1249
|
},
|
|
754
1250
|
beforePropertyValue: function() {
|
|
755
|
-
|
|
1251
|
+
U = "value";
|
|
756
1252
|
},
|
|
757
1253
|
afterPropertyValue: function() {
|
|
758
|
-
switch (
|
|
1254
|
+
switch (q) {
|
|
759
1255
|
case ",":
|
|
760
|
-
case "}": return
|
|
1256
|
+
case "}": return Z("punctuator", X());
|
|
761
1257
|
}
|
|
762
|
-
throw Q(
|
|
1258
|
+
throw Q(X());
|
|
763
1259
|
},
|
|
764
1260
|
beforeArrayValue: function() {
|
|
765
|
-
if (
|
|
766
|
-
|
|
1261
|
+
if (q === "]") return Z("punctuator", X());
|
|
1262
|
+
U = "value";
|
|
767
1263
|
},
|
|
768
1264
|
afterArrayValue: function() {
|
|
769
|
-
switch (
|
|
1265
|
+
switch (q) {
|
|
770
1266
|
case ",":
|
|
771
|
-
case "]": return
|
|
1267
|
+
case "]": return Z("punctuator", X());
|
|
772
1268
|
}
|
|
773
|
-
throw Q(
|
|
1269
|
+
throw Q(X());
|
|
774
1270
|
},
|
|
775
1271
|
end: function() {
|
|
776
|
-
throw Q(
|
|
1272
|
+
throw Q(X());
|
|
777
1273
|
}
|
|
778
1274
|
};
|
|
779
|
-
function
|
|
1275
|
+
function Z(e, t) {
|
|
780
1276
|
return {
|
|
781
1277
|
type: e,
|
|
782
1278
|
value: t,
|
|
783
|
-
line:
|
|
784
|
-
column:
|
|
1279
|
+
line: I,
|
|
1280
|
+
column: L
|
|
785
1281
|
};
|
|
786
1282
|
}
|
|
787
|
-
function
|
|
1283
|
+
function le(e) {
|
|
788
1284
|
for (var t = 0, n = e; t < n.length; t += 1) {
|
|
789
1285
|
var r = n[t];
|
|
790
|
-
if (
|
|
791
|
-
|
|
1286
|
+
if (Y() !== r) throw Q(X());
|
|
1287
|
+
X();
|
|
792
1288
|
}
|
|
793
1289
|
}
|
|
794
1290
|
function ue() {
|
|
795
|
-
switch (
|
|
796
|
-
case "b": return
|
|
797
|
-
case "f": return
|
|
798
|
-
case "n": return
|
|
799
|
-
case "r": return
|
|
800
|
-
case "t": return
|
|
801
|
-
case "v": return
|
|
1291
|
+
switch (Y()) {
|
|
1292
|
+
case "b": return X(), "\b";
|
|
1293
|
+
case "f": return X(), "\f";
|
|
1294
|
+
case "n": return X(), "\n";
|
|
1295
|
+
case "r": return X(), "\r";
|
|
1296
|
+
case "t": return X(), " ";
|
|
1297
|
+
case "v": return X(), "\v";
|
|
802
1298
|
case "0":
|
|
803
|
-
if (
|
|
1299
|
+
if (X(), j.isDigit(Y())) throw Q(X());
|
|
804
1300
|
return "\0";
|
|
805
|
-
case "x": return
|
|
806
|
-
case "u": return
|
|
1301
|
+
case "x": return X(), de();
|
|
1302
|
+
case "u": return X(), fe();
|
|
807
1303
|
case "\n":
|
|
808
1304
|
case "\u2028":
|
|
809
|
-
case "\u2029": return
|
|
810
|
-
case "\r": return
|
|
1305
|
+
case "\u2029": return X(), "";
|
|
1306
|
+
case "\r": return X(), Y() === "\n" && X(), "";
|
|
811
1307
|
case "1":
|
|
812
1308
|
case "2":
|
|
813
1309
|
case "3":
|
|
@@ -816,34 +1312,34 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
816
1312
|
case "6":
|
|
817
1313
|
case "7":
|
|
818
1314
|
case "8":
|
|
819
|
-
case "9": throw Q(
|
|
820
|
-
case void 0: throw Q(
|
|
1315
|
+
case "9": throw Q(X());
|
|
1316
|
+
case void 0: throw Q(X());
|
|
821
1317
|
}
|
|
822
|
-
return
|
|
1318
|
+
return X();
|
|
823
1319
|
}
|
|
824
1320
|
function de() {
|
|
825
|
-
var e = "", t =
|
|
826
|
-
if (!
|
|
827
|
-
return e +=
|
|
1321
|
+
var e = "", t = Y();
|
|
1322
|
+
if (!j.isHexDigit(t) || (e += X(), t = Y(), !j.isHexDigit(t))) throw Q(X());
|
|
1323
|
+
return e += X(), String.fromCodePoint(parseInt(e, 16));
|
|
828
1324
|
}
|
|
829
1325
|
function fe() {
|
|
830
1326
|
for (var e = "", t = 4; t-- > 0;) {
|
|
831
|
-
var n =
|
|
832
|
-
if (!
|
|
833
|
-
e +=
|
|
1327
|
+
var n = Y();
|
|
1328
|
+
if (!j.isHexDigit(n)) throw Q(X());
|
|
1329
|
+
e += X();
|
|
834
1330
|
}
|
|
835
1331
|
return String.fromCodePoint(parseInt(e, 16));
|
|
836
1332
|
}
|
|
837
1333
|
var pe = {
|
|
838
1334
|
start: function() {
|
|
839
|
-
if (
|
|
1335
|
+
if (R.type === "eof") throw ge();
|
|
840
1336
|
me();
|
|
841
1337
|
},
|
|
842
1338
|
beforePropertyName: function() {
|
|
843
|
-
switch (
|
|
1339
|
+
switch (R.type) {
|
|
844
1340
|
case "identifier":
|
|
845
1341
|
case "string":
|
|
846
|
-
|
|
1342
|
+
z = R.value, N = "afterPropertyName";
|
|
847
1343
|
return;
|
|
848
1344
|
case "punctuator":
|
|
849
1345
|
he();
|
|
@@ -852,35 +1348,35 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
852
1348
|
}
|
|
853
1349
|
},
|
|
854
1350
|
afterPropertyName: function() {
|
|
855
|
-
if (
|
|
856
|
-
|
|
1351
|
+
if (R.type === "eof") throw ge();
|
|
1352
|
+
N = "beforePropertyValue";
|
|
857
1353
|
},
|
|
858
1354
|
beforePropertyValue: function() {
|
|
859
|
-
if (
|
|
1355
|
+
if (R.type === "eof") throw ge();
|
|
860
1356
|
me();
|
|
861
1357
|
},
|
|
862
1358
|
beforeArrayValue: function() {
|
|
863
|
-
if (
|
|
864
|
-
if (
|
|
1359
|
+
if (R.type === "eof") throw ge();
|
|
1360
|
+
if (R.type === "punctuator" && R.value === "]") {
|
|
865
1361
|
he();
|
|
866
1362
|
return;
|
|
867
1363
|
}
|
|
868
1364
|
me();
|
|
869
1365
|
},
|
|
870
1366
|
afterPropertyValue: function() {
|
|
871
|
-
if (
|
|
872
|
-
switch (
|
|
1367
|
+
if (R.type === "eof") throw ge();
|
|
1368
|
+
switch (R.value) {
|
|
873
1369
|
case ",":
|
|
874
|
-
|
|
1370
|
+
N = "beforePropertyName";
|
|
875
1371
|
return;
|
|
876
1372
|
case "}": he();
|
|
877
1373
|
}
|
|
878
1374
|
},
|
|
879
1375
|
afterArrayValue: function() {
|
|
880
|
-
if (
|
|
881
|
-
switch (
|
|
1376
|
+
if (R.type === "eof") throw ge();
|
|
1377
|
+
switch (R.value) {
|
|
882
1378
|
case ",":
|
|
883
|
-
|
|
1379
|
+
N = "beforeArrayValue";
|
|
884
1380
|
return;
|
|
885
1381
|
case "]": he();
|
|
886
1382
|
}
|
|
@@ -889,9 +1385,9 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
889
1385
|
};
|
|
890
1386
|
function me() {
|
|
891
1387
|
var e;
|
|
892
|
-
switch (
|
|
1388
|
+
switch (R.type) {
|
|
893
1389
|
case "punctuator":
|
|
894
|
-
switch (
|
|
1390
|
+
switch (R.value) {
|
|
895
1391
|
case "{":
|
|
896
1392
|
e = {};
|
|
897
1393
|
break;
|
|
@@ -901,42 +1397,42 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
901
1397
|
case "null":
|
|
902
1398
|
case "boolean":
|
|
903
1399
|
case "numeric":
|
|
904
|
-
case "string": e =
|
|
1400
|
+
case "string": e = R.value;
|
|
905
1401
|
}
|
|
906
|
-
if (
|
|
1402
|
+
if (B === void 0) B = e;
|
|
907
1403
|
else {
|
|
908
|
-
var t =
|
|
909
|
-
Array.isArray(t) ? t.push(e) : Object.defineProperty(t,
|
|
1404
|
+
var t = P[P.length - 1];
|
|
1405
|
+
Array.isArray(t) ? t.push(e) : Object.defineProperty(t, z, {
|
|
910
1406
|
value: e,
|
|
911
1407
|
writable: !0,
|
|
912
1408
|
enumerable: !0,
|
|
913
1409
|
configurable: !0
|
|
914
1410
|
});
|
|
915
1411
|
}
|
|
916
|
-
if (typeof e == "object" && e)
|
|
1412
|
+
if (typeof e == "object" && e) P.push(e), N = Array.isArray(e) ? "beforeArrayValue" : "beforePropertyName";
|
|
917
1413
|
else {
|
|
918
|
-
var n =
|
|
919
|
-
|
|
1414
|
+
var n = P[P.length - 1];
|
|
1415
|
+
N = n == null ? "end" : Array.isArray(n) ? "afterArrayValue" : "afterPropertyValue";
|
|
920
1416
|
}
|
|
921
1417
|
}
|
|
922
1418
|
function he() {
|
|
923
|
-
|
|
924
|
-
var e =
|
|
925
|
-
|
|
1419
|
+
P.pop();
|
|
1420
|
+
var e = P[P.length - 1];
|
|
1421
|
+
N = e == null ? "end" : Array.isArray(e) ? "afterArrayValue" : "afterPropertyValue";
|
|
926
1422
|
}
|
|
927
1423
|
function Q(e) {
|
|
928
|
-
return
|
|
1424
|
+
return be(e === void 0 ? "JSON5: invalid end of input at " + I + ":" + L : "JSON5: invalid character '" + ye(e) + "' at " + I + ":" + L);
|
|
929
1425
|
}
|
|
930
1426
|
function ge() {
|
|
931
|
-
return
|
|
1427
|
+
return be("JSON5: invalid end of input at " + I + ":" + L);
|
|
932
1428
|
}
|
|
933
|
-
function
|
|
934
|
-
return
|
|
935
|
-
}
|
|
936
|
-
function _e(e) {
|
|
937
|
-
console.warn("JSON5: '" + ve(e) + "' in strings is not valid ECMAScript; consider escaping");
|
|
1429
|
+
function _e() {
|
|
1430
|
+
return L -= 5, be("JSON5: invalid identifier character at " + I + ":" + L);
|
|
938
1431
|
}
|
|
939
1432
|
function ve(e) {
|
|
1433
|
+
console.warn("JSON5: '" + ye(e) + "' in strings is not valid ECMAScript; consider escaping");
|
|
1434
|
+
}
|
|
1435
|
+
function ye(e) {
|
|
940
1436
|
var t = {
|
|
941
1437
|
"'": "\\'",
|
|
942
1438
|
"\"": "\\\"",
|
|
@@ -958,12 +1454,12 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
958
1454
|
}
|
|
959
1455
|
return e;
|
|
960
1456
|
}
|
|
961
|
-
function
|
|
1457
|
+
function be(e) {
|
|
962
1458
|
var t = SyntaxError(e);
|
|
963
|
-
return t.lineNumber =
|
|
1459
|
+
return t.lineNumber = I, t.columnNumber = L, t;
|
|
964
1460
|
}
|
|
965
1461
|
return {
|
|
966
|
-
parse:
|
|
1462
|
+
parse: V,
|
|
967
1463
|
stringify: function(e, t, n) {
|
|
968
1464
|
var r = [], i = "", a, o, s = "", c;
|
|
969
1465
|
if (typeof t == "object" && t && !Array.isArray(t) && (n = t.space, c = t.quote, t = t.replacer), typeof t == "function") o = t;
|
|
@@ -1010,7 +1506,7 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
1010
1506
|
case "\"":
|
|
1011
1507
|
t[a]++, r += a;
|
|
1012
1508
|
continue;
|
|
1013
|
-
case "\0": if (
|
|
1509
|
+
case "\0": if (j.isDigit(e[i + 1])) {
|
|
1014
1510
|
r += "\\x00";
|
|
1015
1511
|
continue;
|
|
1016
1512
|
}
|
|
@@ -1058,8 +1554,8 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
1058
1554
|
function g(e) {
|
|
1059
1555
|
if (e.length === 0) return m(e, !0);
|
|
1060
1556
|
var t = String.fromCodePoint(e.codePointAt(0));
|
|
1061
|
-
if (!
|
|
1062
|
-
for (var n = t.length; n < e.length; n++) if (!
|
|
1557
|
+
if (!j.isIdStartChar(t)) return m(e, !0);
|
|
1558
|
+
for (var n = t.length; n < e.length; n++) if (!j.isIdContinueChar(String.fromCodePoint(e.codePointAt(n)))) return m(e, !0);
|
|
1063
1559
|
return e;
|
|
1064
1560
|
}
|
|
1065
1561
|
function _(e) {
|
|
@@ -1083,7 +1579,7 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
1083
1579
|
}
|
|
1084
1580
|
};
|
|
1085
1581
|
}));
|
|
1086
|
-
})))(), 1),
|
|
1582
|
+
})))(), 1), Te = {
|
|
1087
1583
|
ball: 1,
|
|
1088
1584
|
red: 2,
|
|
1089
1585
|
blue: 4,
|
|
@@ -1097,36 +1593,36 @@ var x = "3de72bdcf92ccb0d235a", S = /* @__PURE__ */ c((/* @__PURE__ */ o(((e, t)
|
|
|
1097
1593
|
c2: 1073741824,
|
|
1098
1594
|
c3: -2147483648,
|
|
1099
1595
|
all: 63
|
|
1100
|
-
},
|
|
1596
|
+
}, Ee = (e) => {
|
|
1101
1597
|
if (!e || typeof e != "object" || Array.isArray(e)) throw Error("Expected an object");
|
|
1102
1598
|
return e;
|
|
1103
|
-
},
|
|
1599
|
+
}, $ = (e, t, n = -4096, r = 4096) => {
|
|
1104
1600
|
let i = e === void 0 ? t : e;
|
|
1105
1601
|
if (typeof i != "number" || !Number.isFinite(i) || i < n || i > r) throw Error(`Number must be between ${n} and ${r}`);
|
|
1106
1602
|
return i;
|
|
1107
|
-
},
|
|
1603
|
+
}, De = (e, t = [0, 0]) => {
|
|
1108
1604
|
if (e === void 0) return [...t];
|
|
1109
1605
|
if (!Array.isArray(e) || e.length !== 2) throw Error("Expected [x, y]");
|
|
1110
|
-
return [
|
|
1111
|
-
},
|
|
1606
|
+
return [$(e[0], 0), $(e[1], 0)];
|
|
1607
|
+
}, Oe = (e, t) => {
|
|
1112
1608
|
if (e === void 0) return [];
|
|
1113
1609
|
if (!Array.isArray(e) || e.length > t) throw Error(`Array limit: ${t}`);
|
|
1114
1610
|
return e;
|
|
1115
1611
|
};
|
|
1116
|
-
function
|
|
1117
|
-
return e === void 0 ? t : typeof e == "number" ?
|
|
1118
|
-
if (typeof t != "string" || !Object.hasOwn(
|
|
1119
|
-
return e |
|
|
1612
|
+
function ke(e, t) {
|
|
1613
|
+
return e === void 0 ? t : typeof e == "number" ? $(e, t, -2147483648, 4294967295) | 0 : Oe(e, 16).reduce((e, t) => {
|
|
1614
|
+
if (typeof t != "string" || !Object.hasOwn(Te, t)) throw Error("Unknown collision flag");
|
|
1615
|
+
return e | Te[t];
|
|
1120
1616
|
}, 0);
|
|
1121
1617
|
}
|
|
1122
|
-
function
|
|
1618
|
+
function Ae(e, t = "FFFFFF") {
|
|
1123
1619
|
if (e === void 0) return t;
|
|
1124
1620
|
if (e === "transparent") return e;
|
|
1125
|
-
if (Array.isArray(e) && e.length === 3) return e.map((e) => Math.round(
|
|
1621
|
+
if (Array.isArray(e) && e.length === 3) return e.map((e) => Math.round($(e, 0, 0, 255)).toString(16).padStart(2, "0")).join("");
|
|
1126
1622
|
if (typeof e == "string" && /^[0-9a-f]{6}$/i.test(e)) return e;
|
|
1127
1623
|
throw Error("Invalid color");
|
|
1128
1624
|
}
|
|
1129
|
-
var
|
|
1625
|
+
var je = Object.fromEntries(Object.entries({
|
|
1130
1626
|
root: "version physicsMode name width height maxViewWidth cameraFollow spawnDistance canBeStored kickOffReset bg traits vertexes segments goals discs planes joints redSpawnPoints blueSpawnPoints playerPhysics ballPhysics",
|
|
1131
1627
|
bg: "type width height kickOffRadius cornerRadius goalLine color",
|
|
1132
1628
|
vertexes: "trait x y bCoef cMask cGroup",
|
|
@@ -1136,7 +1632,7 @@ var A = Object.fromEntries(Object.entries({
|
|
|
1136
1632
|
goals: "trait p0 p1 team",
|
|
1137
1633
|
joints: "trait d0 d1 length strength color",
|
|
1138
1634
|
playerPhysics: "trait pos speed gravity radius invMass damping bCoef cGroup cMask color acceleration kickingAcceleration kickingDamping kickStrength kickback"
|
|
1139
|
-
}).map(([e, t]) => [e, new Set(t.split(" "))])),
|
|
1635
|
+
}).map(([e, t]) => [e, new Set(t.split(" "))])), Me = new Set([
|
|
1140
1636
|
"vertexes",
|
|
1141
1637
|
"segments",
|
|
1142
1638
|
"discs",
|
|
@@ -1144,15 +1640,15 @@ var A = Object.fromEntries(Object.entries({
|
|
|
1144
1640
|
"goals",
|
|
1145
1641
|
"joints",
|
|
1146
1642
|
"playerPhysics"
|
|
1147
|
-
].flatMap((e) => [...
|
|
1148
|
-
function
|
|
1643
|
+
].flatMap((e) => [...je[e]]));
|
|
1644
|
+
function Ne(e) {
|
|
1149
1645
|
let t = [], n = (e, t) => {
|
|
1150
1646
|
let n = t.length > 80 ? t.slice(0, 80) + "…" : t;
|
|
1151
1647
|
return e + (/^[A-Za-z_$][\w$]*$/.test(n) ? "." + n : "[" + JSON.stringify(n) + "]");
|
|
1152
1648
|
}, r = (e, r, i) => {
|
|
1153
1649
|
if (e && typeof e == "object" && !Array.isArray(e)) for (let a of Object.keys(e)) r.has(a) || (t.length < 64 ? t.push("Unsupported stadium field: " + n(i, a)) : t.length === 64 && t.push("Additional unsupported stadium fields omitted."));
|
|
1154
1650
|
};
|
|
1155
|
-
r(e,
|
|
1651
|
+
r(e, je.root, "$"), r(e.bg, je.bg, "$.bg");
|
|
1156
1652
|
for (let t of [
|
|
1157
1653
|
"vertexes",
|
|
1158
1654
|
"segments",
|
|
@@ -1162,68 +1658,68 @@ function M(e) {
|
|
|
1162
1658
|
"joints"
|
|
1163
1659
|
]) {
|
|
1164
1660
|
let n = e[t];
|
|
1165
|
-
Array.isArray(n) && n.forEach((e, n) => r(e,
|
|
1661
|
+
Array.isArray(n) && n.forEach((e, n) => r(e, je[t], "$." + t + "[" + n + "]"));
|
|
1166
1662
|
}
|
|
1167
|
-
if (r(e.ballPhysics,
|
|
1663
|
+
if (r(e.ballPhysics, je.discs, "$.ballPhysics"), r(e.playerPhysics, je.playerPhysics, "$.playerPhysics"), e.traits && typeof e.traits == "object" && !Array.isArray(e.traits)) for (let [t, i] of Object.entries(e.traits)) r(i, Me, n("$.traits", t));
|
|
1168
1664
|
return t;
|
|
1169
1665
|
}
|
|
1170
|
-
function
|
|
1666
|
+
function Pe(e, t, n, r, i) {
|
|
1171
1667
|
let a = e === "hbs" ? 1 : Math.ceil(2 * Math.SQRT2 * 100 / Math.min(10, i));
|
|
1172
1668
|
if ((t + 32) * (n + t + 32 + r) * a > 2e6) throw Error("Stadium collision complexity exceeds the room budget");
|
|
1173
1669
|
}
|
|
1174
|
-
function
|
|
1670
|
+
function Fe(e) {
|
|
1175
1671
|
if (new TextEncoder().encode(e).length > 262144) throw Error("Stadium exceeds 256 KB");
|
|
1176
|
-
let t =
|
|
1672
|
+
let t = Ee(we.default.parse(e));
|
|
1177
1673
|
if (t.physicsMode !== void 0 && t.physicsMode !== "hbs" && t.physicsMode !== "substeps") throw Error("Invalid physics mode");
|
|
1178
1674
|
let n = t.physicsMode === "substeps" ? "substeps" : "hbs";
|
|
1179
1675
|
if (t.version !== void 0 && t.version !== 1) throw Error("Unsupported stadium version");
|
|
1180
|
-
let r = t.traits === void 0 ? {} :
|
|
1181
|
-
let t =
|
|
1676
|
+
let r = t.traits === void 0 ? {} : Ee(t.traits), i = (e) => {
|
|
1677
|
+
let t = Ee(e);
|
|
1182
1678
|
if (t.trait === void 0) return t;
|
|
1183
1679
|
if (typeof t.trait != "string" || !Object.hasOwn(r, t.trait)) throw Error("Unknown trait");
|
|
1184
1680
|
return {
|
|
1185
|
-
...
|
|
1681
|
+
...Ee(r[t.trait]),
|
|
1186
1682
|
...t
|
|
1187
1683
|
};
|
|
1188
1684
|
}, a = (e, t = !1) => ({
|
|
1189
|
-
pos:
|
|
1190
|
-
speed:
|
|
1191
|
-
gravity:
|
|
1192
|
-
radius:
|
|
1193
|
-
invMass:
|
|
1194
|
-
damping:
|
|
1195
|
-
bCoef:
|
|
1196
|
-
cGroup:
|
|
1197
|
-
cMask:
|
|
1198
|
-
color:
|
|
1199
|
-
}), o =
|
|
1685
|
+
pos: De(e.pos),
|
|
1686
|
+
speed: De(e.speed),
|
|
1687
|
+
gravity: De(e.gravity),
|
|
1688
|
+
radius: $(e.radius, 10, .5, 100),
|
|
1689
|
+
invMass: $(e.invMass, 1, 0, 8192),
|
|
1690
|
+
damping: $(e.damping, .99, 0, 8192),
|
|
1691
|
+
bCoef: $(e.bCoef, .5, -1, 8192),
|
|
1692
|
+
cGroup: ke(e.cGroup, t ? 193 : 63),
|
|
1693
|
+
cMask: ke(e.cMask, 63),
|
|
1694
|
+
color: Ae(e.color)
|
|
1695
|
+
}), o = Oe(t.discs, 63).map((e) => a(i(e)));
|
|
1200
1696
|
if (t.ballPhysics !== "disc0") {
|
|
1201
1697
|
let e = a(t.ballPhysics === void 0 ? {} : i(t.ballPhysics), !0);
|
|
1202
1698
|
e.cGroup |= 192, o.unshift(e);
|
|
1203
1699
|
} else if (!o.length) throw Error("disc0 needs a disc");
|
|
1204
|
-
let s =
|
|
1700
|
+
let s = Oe(t.vertexes, 1024).map((e) => i(e)), c = [], l = [], u = Ne(t);
|
|
1205
1701
|
for (let e of s) c.push({
|
|
1206
|
-
a: [
|
|
1207
|
-
b: [
|
|
1208
|
-
bCoef:
|
|
1209
|
-
cGroup:
|
|
1210
|
-
cMask:
|
|
1702
|
+
a: [$(e.x, 0), $(e.y, 0)],
|
|
1703
|
+
b: [$(e.x, 0), $(e.y, 0)],
|
|
1704
|
+
bCoef: $(e.bCoef, 1, -1, 8192),
|
|
1705
|
+
cGroup: ke(e.cGroup, 32),
|
|
1706
|
+
cMask: ke(e.cMask, 63),
|
|
1211
1707
|
bias: 0,
|
|
1212
1708
|
color: "transparent",
|
|
1213
1709
|
vis: !1
|
|
1214
1710
|
});
|
|
1215
1711
|
let d = [...c];
|
|
1216
|
-
for (let e of
|
|
1217
|
-
let t = i(e), n =
|
|
1712
|
+
for (let e of Oe(t.segments, 1024)) {
|
|
1713
|
+
let t = i(e), n = $(t.v0, -1, 0, s.length - 1), r = $(t.v1, -1, 0, s.length - 1);
|
|
1218
1714
|
if (!Number.isInteger(n) || !Number.isInteger(r)) throw Error("Vertex indices must be integers");
|
|
1219
|
-
let a = [
|
|
1220
|
-
bCoef:
|
|
1221
|
-
cGroup:
|
|
1222
|
-
cMask:
|
|
1223
|
-
bias:
|
|
1224
|
-
color:
|
|
1715
|
+
let a = [$(s[n].x, 0), $(s[n].y, 0)], o = [$(s[r].x, 0), $(s[r].y, 0)], u = {
|
|
1716
|
+
bCoef: $(t.bCoef, 1, -1, 8192),
|
|
1717
|
+
cGroup: ke(t.cGroup, 32),
|
|
1718
|
+
cMask: ke(t.cMask, 63),
|
|
1719
|
+
bias: $(t.bias, 0, -100, 100),
|
|
1720
|
+
color: Ae(t.color, "000000"),
|
|
1225
1721
|
vis: t.vis !== !1
|
|
1226
|
-
}, f = t.curveF === void 0 ?
|
|
1722
|
+
}, f = t.curveF === void 0 ? $(t.curve, 0, -359, 359) : 2 * Math.atan2(1, $(t.curveF, 0, -1e8, 1e8)) * 180 / Math.PI;
|
|
1227
1723
|
if (Math.abs(f) < 1e-4) {
|
|
1228
1724
|
let e = {
|
|
1229
1725
|
a,
|
|
@@ -1235,9 +1731,9 @@ function P(e) {
|
|
|
1235
1731
|
}
|
|
1236
1732
|
let p = f * Math.PI / 180, m = o[0] - a[0], h = o[1] - a[1];
|
|
1237
1733
|
if (Math.hypot(m, h) < .001) throw Error("Arc endpoints overlap");
|
|
1238
|
-
let g = 1 / (2 * Math.tan(p / 2)), _ = [(a[0] + o[0]) / 2 - h * g, (a[1] + o[1]) / 2 + m * g], v = Math.hypot(a[0] - _[0], a[1] - _[1]), y = Math.atan2(a[1] - _[1], a[0] - _[0]),
|
|
1239
|
-
if (c.length +
|
|
1240
|
-
let
|
|
1734
|
+
let g = 1 / (2 * Math.tan(p / 2)), _ = [(a[0] + o[0]) / 2 - h * g, (a[1] + o[1]) / 2 + m * g], v = Math.hypot(a[0] - _[0], a[1] - _[1]), y = Math.atan2(a[1] - _[1], a[0] - _[0]), ee = Math.ceil(Math.abs(p) / Math.max(1e-8, 2 * Math.acos(Math.max(-1, 1 - .15 / v))));
|
|
1735
|
+
if (c.length + ee > 4096) throw Error("Compiled geometry exceeds 4096 segments");
|
|
1736
|
+
let b = {
|
|
1241
1737
|
a,
|
|
1242
1738
|
b: o,
|
|
1243
1739
|
...u,
|
|
@@ -1247,16 +1743,16 @@ function P(e) {
|
|
|
1247
1743
|
sweep: p,
|
|
1248
1744
|
major: t.curveF === void 0 ? Math.abs(f) > 180 : Number(t.curveF) <= 0
|
|
1249
1745
|
};
|
|
1250
|
-
l.push(
|
|
1251
|
-
let
|
|
1252
|
-
for (let e = 1; e <=
|
|
1253
|
-
let t = e ===
|
|
1746
|
+
l.push(b), d.push(b);
|
|
1747
|
+
let x = a;
|
|
1748
|
+
for (let e = 1; e <= ee; e++) {
|
|
1749
|
+
let t = e === ee ? o : [_[0] + v * Math.cos(y + p * e / ee), _[1] + v * Math.sin(y + p * e / ee)];
|
|
1254
1750
|
c.push({
|
|
1255
|
-
a:
|
|
1751
|
+
a: x,
|
|
1256
1752
|
b: t,
|
|
1257
1753
|
...u,
|
|
1258
1754
|
renderOnly: !0
|
|
1259
|
-
}),
|
|
1755
|
+
}), x = t;
|
|
1260
1756
|
}
|
|
1261
1757
|
}
|
|
1262
1758
|
if (c.length > 4096) throw Error("Compiled geometry exceeds 4096 segments");
|
|
@@ -1268,57 +1764,57 @@ function P(e) {
|
|
|
1268
1764
|
damping: f.damping ?? .96,
|
|
1269
1765
|
cGroup: f.cGroup ?? 0
|
|
1270
1766
|
}),
|
|
1271
|
-
acceleration:
|
|
1272
|
-
kickingAcceleration:
|
|
1273
|
-
kickingDamping:
|
|
1274
|
-
kickStrength:
|
|
1275
|
-
kickback:
|
|
1767
|
+
acceleration: $(f.acceleration, .1, -8192, 8192),
|
|
1768
|
+
kickingAcceleration: $(f.kickingAcceleration, .07, -8192, 8192),
|
|
1769
|
+
kickingDamping: $(f.kickingDamping, .96, 0, 8192),
|
|
1770
|
+
kickStrength: $(f.kickStrength, 5, -8192, 8192),
|
|
1771
|
+
kickback: $(f.kickback, 0, -8192, 8192)
|
|
1276
1772
|
};
|
|
1277
|
-
|
|
1278
|
-
let m = t.bg === void 0 ? {} :
|
|
1773
|
+
Pe(n, o.length, c.length, Oe(t.planes, 64).length + Oe(t.joints, 128).length, Math.min(p.radius, ...o.map((e) => e.radius)));
|
|
1774
|
+
let m = t.bg === void 0 ? {} : Ee(t.bg);
|
|
1279
1775
|
return {
|
|
1280
1776
|
version: 1,
|
|
1281
1777
|
physicsMode: n,
|
|
1282
1778
|
name: typeof t.name == "string" ? t.name.slice(0, 64) : "Untitled stadium",
|
|
1283
1779
|
canBeStored: t.canBeStored !== !1,
|
|
1284
|
-
width:
|
|
1285
|
-
height:
|
|
1286
|
-
maxViewWidth:
|
|
1780
|
+
width: $(t.width, 520, 100, 2048),
|
|
1781
|
+
height: $(t.height, 300, 80, 2048),
|
|
1782
|
+
maxViewWidth: $(t.maxViewWidth, 0, 0, 4096),
|
|
1287
1783
|
cameraFollow: t.cameraFollow === "player" ? "player" : "ball",
|
|
1288
1784
|
bg: {
|
|
1289
1785
|
type: m.type === "grass" ? "grass" : m.type === "hockey" ? "hockey" : "none",
|
|
1290
|
-
cornerRadius:
|
|
1291
|
-
goalLine:
|
|
1292
|
-
width:
|
|
1293
|
-
height:
|
|
1294
|
-
color:
|
|
1295
|
-
kickOffRadius:
|
|
1786
|
+
cornerRadius: $(m.cornerRadius, 0, 0, 500),
|
|
1787
|
+
goalLine: $(m.goalLine, 0, 0, 2048),
|
|
1788
|
+
width: $(m.width, 0, 0, 2048),
|
|
1789
|
+
height: $(m.height, 0, 0, 2048),
|
|
1790
|
+
color: Ae(m.color, "718C5A"),
|
|
1791
|
+
kickOffRadius: $(m.kickOffRadius, 0, 0, 500)
|
|
1296
1792
|
},
|
|
1297
1793
|
discs: o,
|
|
1298
1794
|
segments: c,
|
|
1299
1795
|
arcs: l,
|
|
1300
1796
|
colliders: d,
|
|
1301
1797
|
player: p,
|
|
1302
|
-
spawnDistance:
|
|
1798
|
+
spawnDistance: $(t.spawnDistance, 200, 0, 1500),
|
|
1303
1799
|
kickOffReset: t.kickOffReset === "full" ? "full" : "partial",
|
|
1304
|
-
redSpawnPoints:
|
|
1305
|
-
blueSpawnPoints:
|
|
1800
|
+
redSpawnPoints: Oe(t.redSpawnPoints, 32).map((e) => De(e)),
|
|
1801
|
+
blueSpawnPoints: Oe(t.blueSpawnPoints, 32).map((e) => De(e)),
|
|
1306
1802
|
warnings: u,
|
|
1307
|
-
planes:
|
|
1308
|
-
let t = i(e), n =
|
|
1803
|
+
planes: Oe(t.planes, 64).map((e) => {
|
|
1804
|
+
let t = i(e), n = De(t.normal);
|
|
1309
1805
|
if (Math.hypot(...n) < 1e-6) throw Error("Plane normal is zero");
|
|
1310
1806
|
return {
|
|
1311
1807
|
normal: n,
|
|
1312
|
-
dist:
|
|
1313
|
-
bCoef:
|
|
1314
|
-
cGroup:
|
|
1315
|
-
cMask:
|
|
1808
|
+
dist: $(t.dist, 0),
|
|
1809
|
+
bCoef: $(t.bCoef, 1, -1, 8192),
|
|
1810
|
+
cGroup: ke(t.cGroup, 32),
|
|
1811
|
+
cMask: ke(t.cMask, 63)
|
|
1316
1812
|
};
|
|
1317
1813
|
}),
|
|
1318
|
-
goals:
|
|
1814
|
+
goals: Oe(t.goals, 16).map((e) => {
|
|
1319
1815
|
let t = i(e);
|
|
1320
1816
|
if (t.team !== "red" && t.team !== "blue") throw Error("Invalid goal team");
|
|
1321
|
-
let n =
|
|
1817
|
+
let n = De(t.p0), r = De(t.p1);
|
|
1322
1818
|
if (Math.hypot(r[0] - n[0], r[1] - n[1]) < 1) throw Error("Goal has zero length");
|
|
1323
1819
|
return {
|
|
1324
1820
|
p0: n,
|
|
@@ -1326,22 +1822,22 @@ function P(e) {
|
|
|
1326
1822
|
team: t.team === "red" ? 1 : 2
|
|
1327
1823
|
};
|
|
1328
1824
|
}),
|
|
1329
|
-
joints:
|
|
1330
|
-
let t = i(e), n =
|
|
1825
|
+
joints: Oe(t.joints, 128).map((e) => {
|
|
1826
|
+
let t = i(e), n = $(t.d0, -1, 0, o.length - 1), r = $(t.d1, -1, 0, o.length - 1);
|
|
1331
1827
|
if (!Number.isInteger(n) || !Number.isInteger(r) || n === r) throw Error("Invalid joint indices");
|
|
1332
|
-
let a = Math.hypot(o[r].pos[0] - o[n].pos[0], o[r].pos[1] - o[n].pos[1]), s = t.length == null ? [a, a] : typeof t.length == "number" ? [t.length, t.length] :
|
|
1828
|
+
let a = Math.hypot(o[r].pos[0] - o[n].pos[0], o[r].pos[1] - o[n].pos[1]), s = t.length == null ? [a, a] : typeof t.length == "number" ? [t.length, t.length] : De(t.length);
|
|
1333
1829
|
return {
|
|
1334
1830
|
d0: n,
|
|
1335
1831
|
d1: r,
|
|
1336
|
-
min:
|
|
1337
|
-
max:
|
|
1338
|
-
strength: t.strength === void 0 || t.strength === "rigid" ? "rigid" :
|
|
1339
|
-
color:
|
|
1832
|
+
min: $(s[0], 0, 0),
|
|
1833
|
+
max: $(s[1], 0, 0),
|
|
1834
|
+
strength: t.strength === void 0 || t.strength === "rigid" ? "rigid" : $(t.strength, 0, -8192, 8192),
|
|
1835
|
+
color: Ae(t.color, "000000")
|
|
1340
1836
|
};
|
|
1341
1837
|
})
|
|
1342
1838
|
};
|
|
1343
1839
|
}
|
|
1344
|
-
function
|
|
1840
|
+
function Ie(e = "Emerald Arena", t = 440, n = 220) {
|
|
1345
1841
|
let r = [
|
|
1346
1842
|
[-t, -n],
|
|
1347
1843
|
[t, -n],
|
|
@@ -1481,8 +1977,9 @@ function F(e = "Emerald Arena", t = 440, n = 220) {
|
|
|
1481
1977
|
}
|
|
1482
1978
|
}, null, 2);
|
|
1483
1979
|
}
|
|
1484
|
-
var
|
|
1980
|
+
var Le = `ball2d-core/1/${Ce}`, Re = class e {
|
|
1485
1981
|
core;
|
|
1982
|
+
terrain;
|
|
1486
1983
|
stadium;
|
|
1487
1984
|
source = "";
|
|
1488
1985
|
colors = [];
|
|
@@ -1502,21 +1999,34 @@ var ee = `ball2d-core/1/${x}`, I = class e {
|
|
|
1502
1999
|
lastGoal = 0;
|
|
1503
2000
|
kickRate = 2;
|
|
1504
2001
|
setKickRateLimit(e, t, n) {
|
|
1505
|
-
this.kickRate =
|
|
2002
|
+
this.kickRate = ze(e, t, n), this.core.kick_limits(this.kickRate & 255, this.kickRate >>> 8 & 255, this.kickRate >>> 16);
|
|
1506
2003
|
}
|
|
1507
2004
|
constructor(e) {
|
|
1508
|
-
this.core = e.exports;
|
|
2005
|
+
this.core = e.exports, this.terrain = new X(this.core);
|
|
2006
|
+
}
|
|
2007
|
+
configureSurface(e) {
|
|
2008
|
+
if (this.phase !== "lobby" && this.phase !== "finished") throw Error("Stop the match before configuring its surface");
|
|
2009
|
+
e === null ? this.terrain.disable() : this.terrain.configure(e);
|
|
2010
|
+
}
|
|
2011
|
+
setSurfaceWeather(e) {
|
|
2012
|
+
this.terrain.setWeather(e);
|
|
2013
|
+
}
|
|
2014
|
+
sampleSurface(e, t) {
|
|
2015
|
+
return this.terrain.sample(e, t);
|
|
2016
|
+
}
|
|
2017
|
+
get surfaceEnabled() {
|
|
2018
|
+
return this.terrain.enabled;
|
|
1509
2019
|
}
|
|
1510
2020
|
static async create(t, n) {
|
|
1511
|
-
let r = t ?? await (await fetch("/core.wasm?v=
|
|
1512
|
-
if (Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256", r))).map((e) => e.toString(16).padStart(2, "0")).join("") !== "
|
|
2021
|
+
let r = t ?? await (await fetch("/core.wasm?v=edb227eac070ad86a151", { signal: n })).arrayBuffer();
|
|
2022
|
+
if (Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256", r))).map((e) => e.toString(16).padStart(2, "0")).join("") !== "1229b1b4ba3892d6073fb85b3b6231282c2d81ee270808cb0acda874d49cb87e") throw Error("Physics build changed. Refresh the page to load a matching version.");
|
|
1513
2023
|
return new e(await WebAssembly.instantiate(await WebAssembly.compile(r)));
|
|
1514
2024
|
}
|
|
1515
2025
|
get data() {
|
|
1516
2026
|
return new Float64Array(this.core.memory.buffer, this.core.data_ptr(), this.core.count() * 18);
|
|
1517
2027
|
}
|
|
1518
2028
|
load(e) {
|
|
1519
|
-
this.stadium =
|
|
2029
|
+
this.stadium = Fe(e), this.source = e, this.core.reset(), this.terrain.disable(), this.colors = [], this.core.physics_mode(+(this.stadium.physicsMode === "substeps")), this.tick = 0, this.elapsed = 0, this.red = this.blue = 0, this.phase = "lobby", this.paused = !1, this.resumeTicks = 0, this.countdown = 0, this.kickoffActive = !0;
|
|
1520
2030
|
for (let e of this.stadium.discs) this.add(e);
|
|
1521
2031
|
for (let e = 0; e < 32; e++) this.add(this.stadium.player, e + 1);
|
|
1522
2032
|
for (let e of this.stadium.colliders) if ("center" in e) {
|
|
@@ -1577,8 +2087,8 @@ var ee = `ball2d-core/1/${x}`, I = class e {
|
|
|
1577
2087
|
applyDiscProperties(e, t) {
|
|
1578
2088
|
let n = this.data;
|
|
1579
2089
|
if (this.phase === "lobby" || !Number.isInteger(e) || e < 0 || e >= this.colors.length || n[e * 18 + 12] > 0 && n[e * 18 + 13] === 0) return !1;
|
|
1580
|
-
let r =
|
|
1581
|
-
for (let [t, a] of
|
|
2090
|
+
let r = Se(t), i = !1;
|
|
2091
|
+
for (let [t, a] of xe) {
|
|
1582
2092
|
let o = r[t];
|
|
1583
2093
|
if (o === void 0) continue;
|
|
1584
2094
|
let s = a === -1 ? this.colors[e] : n[e * 18 + a];
|
|
@@ -1588,9 +2098,9 @@ var ee = `ball2d-core/1/${x}`, I = class e {
|
|
|
1588
2098
|
if (r.radius !== void 0) {
|
|
1589
2099
|
let t = r.radius;
|
|
1590
2100
|
for (let r = 0; r < this.colors.length; r++) r !== e && (t = Math.min(t, n[r * 18 + 4]));
|
|
1591
|
-
|
|
2101
|
+
Pe(this.stadium.physicsMode, this.stadium.discs.length, this.stadium.segments.length, this.stadium.planes.length + this.stadium.joints.length, t);
|
|
1592
2102
|
}
|
|
1593
|
-
for (let [t, i] of
|
|
2103
|
+
for (let [t, i] of xe) {
|
|
1594
2104
|
let a = r[t];
|
|
1595
2105
|
a !== void 0 && (i === -1 ? this.colors[e] = a : n[e * 18 + i] = a);
|
|
1596
2106
|
}
|
|
@@ -1620,645 +2130,186 @@ var ee = `ball2d-core/1/${x}`, I = class e {
|
|
|
1620
2130
|
}
|
|
1621
2131
|
}
|
|
1622
2132
|
start() {
|
|
1623
|
-
(this.phase === "lobby" || this.phase === "finished") && (this.red = this.blue = this.elapsed = 0, this.phase = "playing", this.paused = !1, this.resumeTicks = 0, this.kickoff = 1, this.countdown = 0, this.resetPositions(!0));
|
|
1624
|
-
}
|
|
1625
|
-
stop() {
|
|
1626
|
-
this.phase = "lobby", this.paused = !1, this.resumeTicks = 0;
|
|
1627
|
-
}
|
|
1628
|
-
setPaused(e) {
|
|
1629
|
-
this.phase !== "lobby" && (e = !!e, this.paused !== e && (this.paused = e, this.resumeTicks = e ? 0 : 119));
|
|
1630
|
-
}
|
|
1631
|
-
finish() {
|
|
1632
|
-
this.phase = "finished", this.countdown = 300;
|
|
1633
|
-
}
|
|
1634
|
-
step() {
|
|
1635
|
-
if (this.ballKicks.length = 0, this.tick++, this.paused || this.phase === "lobby") return;
|
|
1636
|
-
if (this.resumeTicks > 0) {
|
|
1637
|
-
this.resumeTicks--;
|
|
1638
|
-
return;
|
|
1639
|
-
}
|
|
1640
|
-
let e = this.data;
|
|
1641
|
-
this.core.step();
|
|
1642
|
-
for (let e = this.core.ball_kick_events() >>> 0, t = 0; e; e >>>= 1, t++) e & 1 && this.ballKicks.push(t);
|
|
1643
|
-
if (this.phase === "finished") {
|
|
1644
|
-
--this.countdown <= 0 && this.stop();
|
|
1645
|
-
return;
|
|
1646
|
-
}
|
|
1647
|
-
if (this.phase === "goal") {
|
|
1648
|
-
--this.countdown <= 0 && (this.scoreLimit > 0 && Math.max(this.red, this.blue) >= this.scoreLimit || this.timeLimit > 0 && this.elapsed >= this.timeLimit * 60 && this.red !== this.blue ? this.finish() : (this.phase = "playing", this.resetPositions()));
|
|
1649
|
-
return;
|
|
1650
|
-
}
|
|
1651
|
-
for (let t = 0; t < 32; t++) {
|
|
1652
|
-
let n = this.index(t) * 18, r = this.stadium.player.cMask;
|
|
1653
|
-
e[n + 11] = r & -25 | (this.kickoffActive ? r & (this.kickoff === 1 ? 8 : 16) : 0);
|
|
1654
|
-
}
|
|
1655
|
-
if (this.kickoffActive) {
|
|
1656
|
-
e[2] * e[2] + e[3] * e[3] > 0 && (this.kickoffActive = !1);
|
|
1657
|
-
return;
|
|
1658
|
-
}
|
|
1659
|
-
this.elapsed++;
|
|
1660
|
-
let t = this.core.goal_event();
|
|
1661
|
-
if (t === 1 || t === 2) {
|
|
1662
|
-
t === 1 ? this.red++ : this.blue++, this.kickoff = t === 1 ? 2 : 1, this.phase = "goal", this.countdown = 150, this.lastGoal = this.tick;
|
|
1663
|
-
return;
|
|
1664
|
-
}
|
|
1665
|
-
this.timeLimit > 0 && this.elapsed >= this.timeLimit * 60 && this.red !== this.blue && this.finish();
|
|
1666
|
-
}
|
|
1667
|
-
snapshot() {
|
|
1668
|
-
return {
|
|
1669
|
-
tick: this.tick,
|
|
1670
|
-
elapsed: this.elapsed,
|
|
1671
|
-
red: this.red,
|
|
1672
|
-
blue: this.blue,
|
|
1673
|
-
phase: this.phase,
|
|
1674
|
-
paused: this.paused,
|
|
1675
|
-
resumeTicks: this.resumeTicks,
|
|
1676
|
-
countdown: this.countdown,
|
|
1677
|
-
kickoff: this.kickoff,
|
|
1678
|
-
kickoffActive: this.kickoffActive,
|
|
1679
|
-
scoreLimit: this.scoreLimit,
|
|
1680
|
-
timeLimit: this.timeLimit,
|
|
1681
|
-
kickRate: this.kickRate,
|
|
1682
|
-
discs: Array.from(this.data),
|
|
1683
|
-
colors: [...this.colors]
|
|
1684
|
-
};
|
|
1685
|
-
}
|
|
1686
|
-
restore(e) {
|
|
1687
|
-
if (!e || typeof e != "object" || !Array.isArray(e.discs) || e.discs.length !== this.data.length || !e.discs.every((e, t) => typeof e == "number" && Number.isFinite(e) && Math.abs(e) <= (t % 18 == 10 || t % 18 == 11 ? 2147483648 : t % 18 == 17 ? 25500 : 8192))) throw Error("Invalid state");
|
|
1688
|
-
if (!Array.isArray(e.colors) || e.colors.length !== e.discs.length / 18 || e.colors.some((e) => !Number.isInteger(e) || e < -1 || e > 16777215)) throw Error("Invalid disc colors");
|
|
1689
|
-
let t = (e, t, n = 0) => Number.isInteger(e) && e >= n && e <= t;
|
|
1690
|
-
if (!t(e.kickRate, 6619135) || !t(e.tick, 4294967295) || !t(e.elapsed, 4294967295) || !t(e.red, 65535) || !t(e.blue, 65535) || !t(e.countdown, 300) || !t(e.resumeTicks, 119) || (e.paused || e.phase === "lobby") && e.resumeTicks !== 0 || !t(e.scoreLimit, 99) || !t(e.timeLimit, 5940) || ![
|
|
1691
|
-
"lobby",
|
|
1692
|
-
"playing",
|
|
1693
|
-
"goal",
|
|
1694
|
-
"finished"
|
|
1695
|
-
].includes(e.phase) || typeof e.paused != "boolean" || typeof e.kickoffActive != "boolean" || ![1, 2].includes(e.kickoff)) throw Error("Invalid match metadata");
|
|
1696
|
-
for (let n = 0; n < e.discs.length; n += 18) if (e.discs[n + 4] < .5 || e.discs[n + 4] > 100 || e.discs[n + 5] < 0 || e.discs[n + 5] > 8192 || e.discs[n + 6] < 0 || e.discs[n + 6] > 8192 || e.discs[n + 7] < -1 || e.discs[n + 7] > 8192 || !t(e.discs[n + 10], 2147483647, -2147483648) || !t(e.discs[n + 11], 2147483647, -2147483648) || !t(e.discs[n + 13], 2) || !t(e.discs[n + 14], 31) || !t(e.discs[n + 15], 2047) || e.discs[n + 12] > 0 && (!Number.isInteger(e.discs[n + 17]) || e.discs[n + 17] < -255 || e.discs[n + 17] > 25500)) throw Error("Invalid disc properties");
|
|
1697
|
-
let n = 10;
|
|
1698
|
-
for (let t = 4; t < e.discs.length; t += 18) n = Math.min(n, e.discs[t]);
|
|
1699
|
-
N(this.stadium.physicsMode, this.stadium.discs.length, this.stadium.segments.length, this.stadium.planes.length + this.stadium.joints.length, n), this.setKickRateLimit(e.kickRate & 255, e.kickRate >>> 8 & 255, e.kickRate >>> 16), this.tick = e.tick, this.elapsed = e.elapsed, this.red = e.red, this.blue = e.blue, this.phase = e.phase, this.paused = e.paused, this.resumeTicks = e.resumeTicks, this.countdown = e.countdown, this.kickoff = e.kickoff, this.kickoffActive = e.kickoffActive, this.scoreLimit = e.scoreLimit, this.timeLimit = e.timeLimit, this.data.set(e.discs), this.colors = [...e.colors];
|
|
1700
|
-
}
|
|
1701
|
-
};
|
|
1702
|
-
function L(e, t, n) {
|
|
1703
|
-
if (![
|
|
1704
|
-
e,
|
|
1705
|
-
t,
|
|
1706
|
-
n
|
|
1707
|
-
].every(Number.isInteger)) throw Error("Invalid kick rate limit");
|
|
1708
|
-
return Math.max(0, Math.min(255, e)) | Math.max(0, Math.min(255, t)) << 8 | Math.max(0, Math.min(100, n)) << 16;
|
|
1709
|
-
}
|
|
1710
|
-
//#endregion
|
|
1711
|
-
//#region src/client/network-runtime.ts
|
|
1712
|
-
function R(e) {
|
|
1713
|
-
let t = new URL(e);
|
|
1714
|
-
if (!["http:", "https:"].includes(t.protocol) || t.username || t.password || t.pathname !== "/" || t.search || t.hash) throw Error("Expected an HTTP(S) service origin without credentials or a path");
|
|
1715
|
-
return t.origin;
|
|
1716
|
-
}
|
|
1717
|
-
function z() {
|
|
1718
|
-
return {
|
|
1719
|
-
serviceOrigin: location.origin,
|
|
1720
|
-
createWebSocket: (e) => new WebSocket(e),
|
|
1721
|
-
createPeerConnection: (e) => new RTCPeerConnection(e)
|
|
1722
|
-
};
|
|
1723
|
-
}
|
|
1724
|
-
//#endregion
|
|
1725
|
-
//#region src/client/stadium-library.ts
|
|
1726
|
-
var B = [
|
|
1727
|
-
["classic", "Classic"],
|
|
1728
|
-
["easy", "Easy"],
|
|
1729
|
-
["small", "Small"],
|
|
1730
|
-
["big", "Big"],
|
|
1731
|
-
["rounded", "Rounded"],
|
|
1732
|
-
["hockey", "Hockey"],
|
|
1733
|
-
["big_easy", "Big Easy"],
|
|
1734
|
-
["big_rounded", "Big Rounded"],
|
|
1735
|
-
["big_hockey", "Big Hockey"],
|
|
1736
|
-
["huge", "Huge"]
|
|
1737
|
-
];
|
|
1738
|
-
function V(e) {
|
|
1739
|
-
let t = /* @__PURE__ */ new Map();
|
|
1740
|
-
return async (n) => {
|
|
1741
|
-
let r = B.find(([e, t]) => e === n || t === n);
|
|
1742
|
-
if (!r) throw Error("Unknown default stadium");
|
|
1743
|
-
let i = t.get(r[0]);
|
|
1744
|
-
return i || (i = (async () => {
|
|
1745
|
-
let t = await e(`/stadiums/${r[0]}.hbs`);
|
|
1746
|
-
if (!t.ok) throw Error("Could not load stadium");
|
|
1747
|
-
let n = await t.text();
|
|
1748
|
-
return P(n), n;
|
|
1749
|
-
})(), t.set(r[0], i), i.catch(() => t.delete(r[0]))), i;
|
|
1750
|
-
};
|
|
1751
|
-
}
|
|
1752
|
-
//#endregion
|
|
1753
|
-
//#region src/client/host-runtime.ts
|
|
1754
|
-
function te() {
|
|
1755
|
-
let e = z(), t = (e, t) => fetch(e, t);
|
|
1756
|
-
return {
|
|
1757
|
-
network: e,
|
|
1758
|
-
request: t,
|
|
1759
|
-
loadEngine: (e) => I.create(void 0, e),
|
|
1760
|
-
loadStadium: V((n) => t(new URL(n, e.serviceOrigin)))
|
|
1761
|
-
};
|
|
1762
|
-
}
|
|
1763
|
-
//#endregion
|
|
1764
|
-
//#region src/client/traffic.ts
|
|
1765
|
-
var H = {
|
|
1766
|
-
message: {
|
|
1767
|
-
burst: 240,
|
|
1768
|
-
perSecond: 160
|
|
1769
|
-
},
|
|
1770
|
-
action: {
|
|
1771
|
-
burst: 12,
|
|
1772
|
-
perSecond: 6
|
|
1773
|
-
},
|
|
1774
|
-
chat: {
|
|
1775
|
-
burst: 4,
|
|
1776
|
-
perSecond: 1
|
|
2133
|
+
(this.phase === "lobby" || this.phase === "finished") && (this.red = this.blue = this.elapsed = 0, this.phase = "playing", this.paused = !1, this.resumeTicks = 0, this.kickoff = 1, this.countdown = 0, this.resetPositions(!0));
|
|
1777
2134
|
}
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
allow(e, t, n = performance.now()) {
|
|
1781
|
-
let r = this.peers.get(e);
|
|
1782
|
-
r || (r = {}, this.peers.set(e, r));
|
|
1783
|
-
let { burst: i, perSecond: a } = H[t], o = r[t] ?? {
|
|
1784
|
-
tokens: i,
|
|
1785
|
-
at: n
|
|
1786
|
-
};
|
|
1787
|
-
return o.tokens = Math.min(i, o.tokens + Math.max(0, n - o.at) * a / 1e3), o.at = Math.max(o.at, n), r[t] = o, o.tokens < 1 ? !1 : (o.tokens--, !0);
|
|
2135
|
+
stop() {
|
|
2136
|
+
this.phase = "lobby", this.paused = !1, this.resumeTicks = 0;
|
|
1788
2137
|
}
|
|
1789
|
-
|
|
1790
|
-
this.
|
|
2138
|
+
setPaused(e) {
|
|
2139
|
+
this.phase !== "lobby" && (e = !!e, this.paused !== e && (this.paused = e, this.resumeTicks = e ? 0 : 119));
|
|
1791
2140
|
}
|
|
1792
|
-
|
|
1793
|
-
this.
|
|
2141
|
+
finish() {
|
|
2142
|
+
this.phase = "finished", this.countdown = 300;
|
|
1794
2143
|
}
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
0,
|
|
1801
|
-
0,
|
|
1802
|
-
0,
|
|
1803
|
-
0,
|
|
1804
|
-
1,
|
|
1805
|
-
1,
|
|
1806
|
-
1,
|
|
1807
|
-
1,
|
|
1808
|
-
2,
|
|
1809
|
-
2,
|
|
1810
|
-
2,
|
|
1811
|
-
2,
|
|
1812
|
-
3,
|
|
1813
|
-
3,
|
|
1814
|
-
3,
|
|
1815
|
-
3,
|
|
1816
|
-
4,
|
|
1817
|
-
4,
|
|
1818
|
-
4,
|
|
1819
|
-
4,
|
|
1820
|
-
5,
|
|
1821
|
-
5,
|
|
1822
|
-
5,
|
|
1823
|
-
5,
|
|
1824
|
-
0,
|
|
1825
|
-
0,
|
|
1826
|
-
0,
|
|
1827
|
-
0
|
|
1828
|
-
]), ie = new W([
|
|
1829
|
-
0,
|
|
1830
|
-
0,
|
|
1831
|
-
0,
|
|
1832
|
-
0,
|
|
1833
|
-
1,
|
|
1834
|
-
1,
|
|
1835
|
-
2,
|
|
1836
|
-
2,
|
|
1837
|
-
3,
|
|
1838
|
-
3,
|
|
1839
|
-
4,
|
|
1840
|
-
4,
|
|
1841
|
-
5,
|
|
1842
|
-
5,
|
|
1843
|
-
6,
|
|
1844
|
-
6,
|
|
1845
|
-
7,
|
|
1846
|
-
7,
|
|
1847
|
-
8,
|
|
1848
|
-
8,
|
|
1849
|
-
9,
|
|
1850
|
-
9,
|
|
1851
|
-
10,
|
|
1852
|
-
10,
|
|
1853
|
-
11,
|
|
1854
|
-
11,
|
|
1855
|
-
12,
|
|
1856
|
-
12,
|
|
1857
|
-
13,
|
|
1858
|
-
13,
|
|
1859
|
-
0,
|
|
1860
|
-
0
|
|
1861
|
-
]), K = new W([
|
|
1862
|
-
16,
|
|
1863
|
-
17,
|
|
1864
|
-
18,
|
|
1865
|
-
0,
|
|
1866
|
-
8,
|
|
1867
|
-
7,
|
|
1868
|
-
9,
|
|
1869
|
-
6,
|
|
1870
|
-
10,
|
|
1871
|
-
5,
|
|
1872
|
-
11,
|
|
1873
|
-
4,
|
|
1874
|
-
12,
|
|
1875
|
-
3,
|
|
1876
|
-
13,
|
|
1877
|
-
2,
|
|
1878
|
-
14,
|
|
1879
|
-
1,
|
|
1880
|
-
15
|
|
1881
|
-
]), q = function(e, t) {
|
|
1882
|
-
for (var n = new G(31), r = 0; r < 31; ++r) n[r] = t += 1 << e[r - 1];
|
|
1883
|
-
for (var i = new ne(n[30]), r = 1; r < 30; ++r) for (var a = n[r]; a < n[r + 1]; ++a) i[a] = a - n[r] << 5 | r;
|
|
1884
|
-
return {
|
|
1885
|
-
b: n,
|
|
1886
|
-
r: i
|
|
1887
|
-
};
|
|
1888
|
-
}, ae = q(re, 2), oe = ae.b, J = ae.r;
|
|
1889
|
-
oe[28] = 258, J[258] = 28;
|
|
1890
|
-
for (var se = q(ie, 0), ce = se.b, Y = se.r, le = new G(32768), X = 0; X < 32768; ++X) {
|
|
1891
|
-
var Z = (X & 43690) >> 1 | (X & 21845) << 1;
|
|
1892
|
-
Z = (Z & 52428) >> 2 | (Z & 13107) << 2, Z = (Z & 61680) >> 4 | (Z & 3855) << 4, le[X] = ((Z & 65280) >> 8 | (Z & 255) << 8) >> 1;
|
|
1893
|
-
}
|
|
1894
|
-
for (var ue = (function(e, t, n) {
|
|
1895
|
-
for (var r = e.length, i = 0, a = new G(t); i < r; ++i) e[i] && ++a[e[i] - 1];
|
|
1896
|
-
var o = new G(t);
|
|
1897
|
-
for (i = 1; i < t; ++i) o[i] = o[i - 1] + a[i - 1] << 1;
|
|
1898
|
-
var s;
|
|
1899
|
-
if (n) {
|
|
1900
|
-
s = new G(1 << t);
|
|
1901
|
-
var c = 15 - t;
|
|
1902
|
-
for (i = 0; i < r; ++i) if (e[i]) for (var l = i << 4 | e[i], u = t - e[i], d = o[e[i] - 1]++ << u, f = d | (1 << u) - 1; d <= f; ++d) s[le[d] >> c] = l;
|
|
1903
|
-
} else for (s = new G(r), i = 0; i < r; ++i) e[i] && (s[i] = le[o[e[i] - 1]++] >> 15 - e[i]);
|
|
1904
|
-
return s;
|
|
1905
|
-
}), de = new W(288), X = 0; X < 144; ++X) de[X] = 8;
|
|
1906
|
-
for (var X = 144; X < 256; ++X) de[X] = 9;
|
|
1907
|
-
for (var X = 256; X < 280; ++X) de[X] = 7;
|
|
1908
|
-
for (var X = 280; X < 288; ++X) de[X] = 8;
|
|
1909
|
-
for (var fe = new W(32), X = 0; X < 32; ++X) fe[X] = 5;
|
|
1910
|
-
var pe = /*#__PURE__*/ ue(de, 9, 0), me = /*#__PURE__*/ ue(de, 9, 1), he = /*#__PURE__*/ ue(fe, 5, 0), Q = /*#__PURE__*/ ue(fe, 5, 1), ge = function(e) {
|
|
1911
|
-
for (var t = e[0], n = 1; n < e.length; ++n) e[n] > t && (t = e[n]);
|
|
1912
|
-
return t;
|
|
1913
|
-
}, $ = function(e, t, n) {
|
|
1914
|
-
var r = t / 8 | 0;
|
|
1915
|
-
return (e[r] | e[r + 1] << 8) >> (t & 7) & n;
|
|
1916
|
-
}, _e = function(e, t) {
|
|
1917
|
-
var n = t / 8 | 0;
|
|
1918
|
-
return (e[n] | e[n + 1] << 8 | e[n + 2] << 16) >> (t & 7);
|
|
1919
|
-
}, ve = function(e) {
|
|
1920
|
-
return (e + 7) / 8 | 0;
|
|
1921
|
-
}, ye = function(e, t, n) {
|
|
1922
|
-
return (t == null || t < 0) && (t = 0), (n == null || n > e.length) && (n = e.length), new W(e.subarray(t, n));
|
|
1923
|
-
}, be = [
|
|
1924
|
-
"unexpected EOF",
|
|
1925
|
-
"invalid block type",
|
|
1926
|
-
"invalid length/literal",
|
|
1927
|
-
"invalid distance",
|
|
1928
|
-
"stream finished",
|
|
1929
|
-
"no stream handler",
|
|
1930
|
-
,
|
|
1931
|
-
"no callback",
|
|
1932
|
-
"invalid UTF-8 data",
|
|
1933
|
-
"extra field too long",
|
|
1934
|
-
"date not in range 1980-2099",
|
|
1935
|
-
"filename too long",
|
|
1936
|
-
"stream finishing",
|
|
1937
|
-
"invalid zip data"
|
|
1938
|
-
], xe = function(e, t, n) {
|
|
1939
|
-
var r = Error(t || be[e]);
|
|
1940
|
-
if (r.code = e, Error.captureStackTrace && Error.captureStackTrace(r, xe), !n) throw r;
|
|
1941
|
-
return r;
|
|
1942
|
-
}, Se = function(e, t, n, r) {
|
|
1943
|
-
var i = e.length, a = r ? r.length : 0;
|
|
1944
|
-
if (!i || t.f && !t.l) return n || new W(0);
|
|
1945
|
-
var o = !n, s = o || t.i != 2, c = t.i;
|
|
1946
|
-
o && (n = new W(i * 3));
|
|
1947
|
-
var l = function(e) {
|
|
1948
|
-
var t = n.length;
|
|
1949
|
-
if (e > t) {
|
|
1950
|
-
var r = new W(Math.max(t * 2, e));
|
|
1951
|
-
r.set(n), n = r;
|
|
2144
|
+
step() {
|
|
2145
|
+
if (this.ballKicks.length = 0, this.tick++, this.paused || this.phase === "lobby") return;
|
|
2146
|
+
if (this.resumeTicks > 0) {
|
|
2147
|
+
this.resumeTicks--;
|
|
2148
|
+
return;
|
|
1952
2149
|
}
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
var y = ve(d) + 4, b = e[y - 4] | e[y - 3] << 8, x = y + b;
|
|
1960
|
-
if (x > i) {
|
|
1961
|
-
c && xe(0);
|
|
1962
|
-
break;
|
|
1963
|
-
}
|
|
1964
|
-
s && l(f + b), n.set(e.subarray(y, x), f), t.b = f += b, t.p = d = x * 8, t.f = u;
|
|
1965
|
-
continue;
|
|
1966
|
-
}
|
|
1967
|
-
if (v == 1) p = me, m = Q, h = 9, g = 5;
|
|
1968
|
-
else if (v == 2) {
|
|
1969
|
-
var S = $(e, d, 31) + 257, C = $(e, d + 10, 15) + 4, w = S + $(e, d + 5, 31) + 1;
|
|
1970
|
-
d += 14;
|
|
1971
|
-
for (var T = new W(w), E = new W(19), D = 0; D < C; ++D) E[K[D]] = $(e, d + D * 3, 7);
|
|
1972
|
-
d += C * 3;
|
|
1973
|
-
for (var O = ge(E), k = (1 << O) - 1, A = ue(E, O, 1), D = 0; D < w;) {
|
|
1974
|
-
var j = A[$(e, d, k)];
|
|
1975
|
-
d += j & 15;
|
|
1976
|
-
var y = j >> 4;
|
|
1977
|
-
if (y < 16) T[D++] = y;
|
|
1978
|
-
else {
|
|
1979
|
-
var M = 0, N = 0;
|
|
1980
|
-
for (y == 16 ? (N = 3 + $(e, d, 3), d += 2, M = T[D - 1]) : y == 17 ? (N = 3 + $(e, d, 7), d += 3) : y == 18 && (N = 11 + $(e, d, 127), d += 7); N--;) T[D++] = M;
|
|
1981
|
-
}
|
|
1982
|
-
}
|
|
1983
|
-
var P = T.subarray(0, S), F = T.subarray(S);
|
|
1984
|
-
h = ge(P), g = ge(F), p = ue(P, h, 1), m = ue(F, g, 1);
|
|
1985
|
-
} else xe(1);
|
|
1986
|
-
if (d > _) {
|
|
1987
|
-
c && xe(0);
|
|
1988
|
-
break;
|
|
1989
|
-
}
|
|
2150
|
+
let e = this.data;
|
|
2151
|
+
this.core.step();
|
|
2152
|
+
for (let e = this.core.ball_kick_events() >>> 0, t = 0; e; e >>>= 1, t++) e & 1 && this.ballKicks.push(t);
|
|
2153
|
+
if (this.phase === "finished") {
|
|
2154
|
+
--this.countdown <= 0 && this.stop();
|
|
2155
|
+
return;
|
|
1990
2156
|
}
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
if (d += M & 15, d > _) {
|
|
1995
|
-
c && xe(0);
|
|
1996
|
-
break;
|
|
1997
|
-
}
|
|
1998
|
-
if (M || xe(2), R < 256) n[f++] = R;
|
|
1999
|
-
else if (R == 256) {
|
|
2000
|
-
L = d, p = null;
|
|
2001
|
-
break;
|
|
2002
|
-
} else {
|
|
2003
|
-
var z = R - 254;
|
|
2004
|
-
if (R > 264) {
|
|
2005
|
-
var D = R - 257, B = re[D];
|
|
2006
|
-
z = $(e, d, (1 << B) - 1) + oe[D], d += B;
|
|
2007
|
-
}
|
|
2008
|
-
var V = m[_e(e, d) & I], te = V >> 4;
|
|
2009
|
-
V || xe(3), d += V & 15;
|
|
2010
|
-
var F = ce[te];
|
|
2011
|
-
if (te > 3) {
|
|
2012
|
-
var B = ie[te];
|
|
2013
|
-
F += _e(e, d) & (1 << B) - 1, d += B;
|
|
2014
|
-
}
|
|
2015
|
-
if (d > _) {
|
|
2016
|
-
c && xe(0);
|
|
2017
|
-
break;
|
|
2018
|
-
}
|
|
2019
|
-
s && l(f + 131072);
|
|
2020
|
-
var H = f + z;
|
|
2021
|
-
if (f < F) {
|
|
2022
|
-
var U = a - F, G = Math.min(F, H);
|
|
2023
|
-
for (U + f < 0 && xe(3); f < G; ++f) n[f] = r[U + f];
|
|
2024
|
-
}
|
|
2025
|
-
for (; f < H; ++f) n[f] = n[f - F];
|
|
2026
|
-
}
|
|
2157
|
+
if (this.phase === "goal") {
|
|
2158
|
+
--this.countdown <= 0 && (this.scoreLimit > 0 && Math.max(this.red, this.blue) >= this.scoreLimit || this.timeLimit > 0 && this.elapsed >= this.timeLimit * 60 && this.red !== this.blue ? this.finish() : (this.phase = "playing", this.resetPositions()));
|
|
2159
|
+
return;
|
|
2027
2160
|
}
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
}, Ce = function(e, t, n) {
|
|
2032
|
-
n <<= t & 7;
|
|
2033
|
-
var r = t / 8 | 0;
|
|
2034
|
-
e[r] |= n, e[r + 1] |= n >> 8;
|
|
2035
|
-
}, we = function(e, t, n) {
|
|
2036
|
-
n <<= t & 7;
|
|
2037
|
-
var r = t / 8 | 0;
|
|
2038
|
-
e[r] |= n, e[r + 1] |= n >> 8, e[r + 2] |= n >> 16;
|
|
2039
|
-
}, Te = function(e, t) {
|
|
2040
|
-
for (var n = [], r = 0; r < e.length; ++r) e[r] && n.push({
|
|
2041
|
-
s: r,
|
|
2042
|
-
f: e[r]
|
|
2043
|
-
});
|
|
2044
|
-
var i = n.length, a = n.slice();
|
|
2045
|
-
if (!i) return {
|
|
2046
|
-
t: Me,
|
|
2047
|
-
l: 0
|
|
2048
|
-
};
|
|
2049
|
-
if (i == 1) {
|
|
2050
|
-
var o = new W(n[0].s + 1);
|
|
2051
|
-
return o[n[0].s] = 1, {
|
|
2052
|
-
t: o,
|
|
2053
|
-
l: 1
|
|
2054
|
-
};
|
|
2055
|
-
}
|
|
2056
|
-
n.sort(function(e, t) {
|
|
2057
|
-
return e.f - t.f;
|
|
2058
|
-
}), n.push({
|
|
2059
|
-
s: -1,
|
|
2060
|
-
f: 25001
|
|
2061
|
-
});
|
|
2062
|
-
var s = n[0], c = n[1], l = 0, u = 1, d = 2;
|
|
2063
|
-
for (n[0] = {
|
|
2064
|
-
s: -1,
|
|
2065
|
-
f: s.f + c.f,
|
|
2066
|
-
l: s,
|
|
2067
|
-
r: c
|
|
2068
|
-
}; u != i - 1;) s = n[n[l].f < n[d].f ? l++ : d++], c = n[l != u && n[l].f < n[d].f ? l++ : d++], n[u++] = {
|
|
2069
|
-
s: -1,
|
|
2070
|
-
f: s.f + c.f,
|
|
2071
|
-
l: s,
|
|
2072
|
-
r: c
|
|
2073
|
-
};
|
|
2074
|
-
for (var f = a[0].s, r = 1; r < i; ++r) a[r].s > f && (f = a[r].s);
|
|
2075
|
-
var p = new G(f + 1), m = Ee(n[u - 1], p, 0);
|
|
2076
|
-
if (m > t) {
|
|
2077
|
-
var r = 0, h = 0, g = m - t, _ = 1 << g;
|
|
2078
|
-
for (a.sort(function(e, t) {
|
|
2079
|
-
return p[t.s] - p[e.s] || e.f - t.f;
|
|
2080
|
-
}); r < i; ++r) {
|
|
2081
|
-
var v = a[r].s;
|
|
2082
|
-
if (p[v] > t) h += _ - (1 << m - p[v]), p[v] = t;
|
|
2083
|
-
else break;
|
|
2161
|
+
for (let t = 0; t < 32; t++) {
|
|
2162
|
+
let n = this.index(t) * 18, r = this.stadium.player.cMask;
|
|
2163
|
+
e[n + 11] = r & -25 | (this.kickoffActive ? r & (this.kickoff === 1 ? 8 : 16) : 0);
|
|
2084
2164
|
}
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2165
|
+
if (this.kickoffActive) {
|
|
2166
|
+
e[2] * e[2] + e[3] * e[3] > 0 && (this.kickoffActive = !1);
|
|
2167
|
+
return;
|
|
2088
2168
|
}
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2169
|
+
this.elapsed++;
|
|
2170
|
+
let t = this.core.goal_event();
|
|
2171
|
+
if (t === 1 || t === 2) {
|
|
2172
|
+
t === 1 ? this.red++ : this.blue++, this.kickoff = t === 1 ? 2 : 1, this.phase = "goal", this.countdown = 150, this.lastGoal = this.tick;
|
|
2173
|
+
return;
|
|
2092
2174
|
}
|
|
2093
|
-
|
|
2175
|
+
this.timeLimit > 0 && this.elapsed >= this.timeLimit * 60 && this.red !== this.blue && this.finish();
|
|
2176
|
+
}
|
|
2177
|
+
snapshotSurface() {
|
|
2178
|
+
return this.terrain.snapshot();
|
|
2179
|
+
}
|
|
2180
|
+
snapshot() {
|
|
2181
|
+
let e = this.snapshotSurface();
|
|
2182
|
+
return {
|
|
2183
|
+
...e.length ? { surface: e } : {},
|
|
2184
|
+
tick: this.tick,
|
|
2185
|
+
elapsed: this.elapsed,
|
|
2186
|
+
red: this.red,
|
|
2187
|
+
blue: this.blue,
|
|
2188
|
+
phase: this.phase,
|
|
2189
|
+
paused: this.paused,
|
|
2190
|
+
resumeTicks: this.resumeTicks,
|
|
2191
|
+
countdown: this.countdown,
|
|
2192
|
+
kickoff: this.kickoff,
|
|
2193
|
+
kickoffActive: this.kickoffActive,
|
|
2194
|
+
scoreLimit: this.scoreLimit,
|
|
2195
|
+
timeLimit: this.timeLimit,
|
|
2196
|
+
kickRate: this.kickRate,
|
|
2197
|
+
discs: Array.from(this.data),
|
|
2198
|
+
colors: [...this.colors]
|
|
2199
|
+
};
|
|
2200
|
+
}
|
|
2201
|
+
restore(e) {
|
|
2202
|
+
if (!e || typeof e != "object" || !Array.isArray(e.discs) || e.discs.length !== this.data.length || !e.discs.every((e, t) => typeof e == "number" && Number.isFinite(e) && Math.abs(e) <= (t % 18 == 10 || t % 18 == 11 ? 2147483648 : t % 18 == 17 ? 25500 : 8192))) throw Error("Invalid state");
|
|
2203
|
+
if (!Array.isArray(e.colors) || e.colors.length !== e.discs.length / 18 || e.colors.some((e) => !Number.isInteger(e) || e < -1 || e > 16777215)) throw Error("Invalid disc colors");
|
|
2204
|
+
let t = (e, t, n = 0) => Number.isInteger(e) && e >= n && e <= t;
|
|
2205
|
+
if (!t(e.kickRate, 6619135) || !t(e.tick, 4294967295) || !t(e.elapsed, 4294967295) || !t(e.red, 65535) || !t(e.blue, 65535) || !t(e.countdown, 300) || !t(e.resumeTicks, 119) || (e.paused || e.phase === "lobby") && e.resumeTicks !== 0 || !t(e.scoreLimit, 99) || !t(e.timeLimit, 5940) || ![
|
|
2206
|
+
"lobby",
|
|
2207
|
+
"playing",
|
|
2208
|
+
"goal",
|
|
2209
|
+
"finished"
|
|
2210
|
+
].includes(e.phase) || typeof e.paused != "boolean" || typeof e.kickoffActive != "boolean" || ![1, 2].includes(e.kickoff)) throw Error("Invalid match metadata");
|
|
2211
|
+
for (let n = 0; n < e.discs.length; n += 18) if (e.discs[n + 4] < .5 || e.discs[n + 4] > 100 || e.discs[n + 5] < 0 || e.discs[n + 5] > 8192 || e.discs[n + 6] < 0 || e.discs[n + 6] > 8192 || e.discs[n + 7] < -1 || e.discs[n + 7] > 8192 || !t(e.discs[n + 10], 2147483647, -2147483648) || !t(e.discs[n + 11], 2147483647, -2147483648) || !t(e.discs[n + 13], 2) || !t(e.discs[n + 14], 31) || !t(e.discs[n + 15], 2047) || e.discs[n + 12] > 0 && (!Number.isInteger(e.discs[n + 17]) || e.discs[n + 17] < -255 || e.discs[n + 17] > 25500)) throw Error("Invalid disc properties");
|
|
2212
|
+
let n = 10;
|
|
2213
|
+
for (let t = 4; t < e.discs.length; t += 18) n = Math.min(n, e.discs[t]);
|
|
2214
|
+
Pe(this.stadium.physicsMode, this.stadium.discs.length, this.stadium.segments.length, this.stadium.planes.length + this.stadium.joints.length, n), this.terrain.restore(e.surface === void 0 ? [] : e.surface), this.setKickRateLimit(e.kickRate & 255, e.kickRate >>> 8 & 255, e.kickRate >>> 16), this.tick = e.tick, this.elapsed = e.elapsed, this.red = e.red, this.blue = e.blue, this.phase = e.phase, this.paused = e.paused, this.resumeTicks = e.resumeTicks, this.countdown = e.countdown, this.kickoff = e.kickoff, this.kickoffActive = e.kickoffActive, this.scoreLimit = e.scoreLimit, this.timeLimit = e.timeLimit, this.data.set(e.discs), this.colors = [...e.colors];
|
|
2094
2215
|
}
|
|
2216
|
+
};
|
|
2217
|
+
function ze(e, t, n) {
|
|
2218
|
+
if (![
|
|
2219
|
+
e,
|
|
2220
|
+
t,
|
|
2221
|
+
n
|
|
2222
|
+
].every(Number.isInteger)) throw Error("Invalid kick rate limit");
|
|
2223
|
+
return Math.max(0, Math.min(255, e)) | Math.max(0, Math.min(255, t)) << 8 | Math.max(0, Math.min(100, n)) << 16;
|
|
2224
|
+
}
|
|
2225
|
+
function Be(e) {
|
|
2226
|
+
let t = new URL(e);
|
|
2227
|
+
if (!["http:", "https:"].includes(t.protocol) || t.username || t.password || t.pathname !== "/" || t.search || t.hash) throw Error("Expected an HTTP(S) service origin without credentials or a path");
|
|
2228
|
+
return t.origin;
|
|
2229
|
+
}
|
|
2230
|
+
function Ve() {
|
|
2095
2231
|
return {
|
|
2096
|
-
|
|
2097
|
-
|
|
2232
|
+
serviceOrigin: location.origin,
|
|
2233
|
+
signalingResume: !0,
|
|
2234
|
+
createWebSocket: (e) => new WebSocket(e),
|
|
2235
|
+
createPeerConnection: (e) => new RTCPeerConnection(e)
|
|
2098
2236
|
};
|
|
2099
|
-
}
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2237
|
+
}
|
|
2238
|
+
var He = [
|
|
2239
|
+
["classic", "Classic"],
|
|
2240
|
+
["easy", "Easy"],
|
|
2241
|
+
["small", "Small"],
|
|
2242
|
+
["big", "Big"],
|
|
2243
|
+
["rounded", "Rounded"],
|
|
2244
|
+
["hockey", "Hockey"],
|
|
2245
|
+
["big_easy", "Big Easy"],
|
|
2246
|
+
["big_rounded", "Big Rounded"],
|
|
2247
|
+
["big_hockey", "Big Hockey"],
|
|
2248
|
+
["huge", "Huge"]
|
|
2249
|
+
];
|
|
2250
|
+
function Ue(e) {
|
|
2251
|
+
let t = /* @__PURE__ */ new Map();
|
|
2252
|
+
return async (n) => {
|
|
2253
|
+
let r = He.find(([e, t]) => e === n || t === n);
|
|
2254
|
+
if (!r) throw Error("Unknown default stadium");
|
|
2255
|
+
let i = t.get(r[0]);
|
|
2256
|
+
return i || (i = (async () => {
|
|
2257
|
+
let t = await e(`/stadiums/${r[0]}.hbs`);
|
|
2258
|
+
if (!t.ok) throw Error("Could not load stadium");
|
|
2259
|
+
let n = await t.text();
|
|
2260
|
+
return Fe(n), n;
|
|
2261
|
+
})(), t.set(r[0], i), i.catch(() => t.delete(r[0]))), i;
|
|
2262
|
+
};
|
|
2263
|
+
}
|
|
2264
|
+
function We() {
|
|
2265
|
+
let e = Ve(), t = (e, t) => fetch(e, t);
|
|
2117
2266
|
return {
|
|
2118
|
-
|
|
2119
|
-
|
|
2267
|
+
network: e,
|
|
2268
|
+
request: t,
|
|
2269
|
+
loadEngine: (e) => Re.create(void 0, e),
|
|
2270
|
+
loadStadium: Ue((n) => t(new URL(n, e.serviceOrigin)))
|
|
2120
2271
|
};
|
|
2121
|
-
}
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
var k = l + 5 << 3, A = Oe(i, de) + Oe(a, fe) + o, j = Oe(i, f) + Oe(a, h) + o + 14 + 3 * O + Oe(C, E) + 2 * C[16] + 3 * C[17] + 7 * C[18];
|
|
2135
|
-
if (c >= 0 && k <= A && k <= j) return ke(t, u, e.subarray(c, c + l));
|
|
2136
|
-
var M, N, P, F;
|
|
2137
|
-
if (Ce(t, u, 1 + (j < A)), u += 2, j < A) {
|
|
2138
|
-
M = ue(f, p, 0), N = f, P = ue(h, g, 0), F = h;
|
|
2139
|
-
var ee = ue(E, D, 0);
|
|
2140
|
-
Ce(t, u, y - 257), Ce(t, u + 5, S - 1), Ce(t, u + 10, O - 4), u += 14;
|
|
2141
|
-
for (var w = 0; w < O; ++w) Ce(t, u + 3 * w, E[K[w]]);
|
|
2142
|
-
u += 3 * O;
|
|
2143
|
-
for (var I = [v, x], L = 0; L < 2; ++L) for (var R = I[L], w = 0; w < R.length; ++w) {
|
|
2144
|
-
var z = R[w] & 31;
|
|
2145
|
-
Ce(t, u, ee[z]), u += E[z], z > 15 && (Ce(t, u, R[w] >> 5 & 127), u += R[w] >> 12);
|
|
2146
|
-
}
|
|
2147
|
-
} else M = pe, N = de, P = he, F = fe;
|
|
2148
|
-
for (var w = 0; w < s; ++w) {
|
|
2149
|
-
var B = r[w];
|
|
2150
|
-
if (B > 255) {
|
|
2151
|
-
var z = B >> 18 & 31;
|
|
2152
|
-
we(t, u, M[z + 257]), u += N[z + 257], z > 7 && (Ce(t, u, B >> 23 & 31), u += re[z]);
|
|
2153
|
-
var V = B & 31;
|
|
2154
|
-
we(t, u, P[V]), u += F[V], V > 3 && (we(t, u, B >> 5 & 8191), u += ie[V]);
|
|
2155
|
-
} else we(t, u, M[B]), u += N[B];
|
|
2156
|
-
}
|
|
2157
|
-
return we(t, u, M[256]), u + N[256];
|
|
2158
|
-
}, je = /*#__PURE__*/ new ne([
|
|
2159
|
-
65540,
|
|
2160
|
-
131080,
|
|
2161
|
-
131088,
|
|
2162
|
-
131104,
|
|
2163
|
-
262176,
|
|
2164
|
-
1048704,
|
|
2165
|
-
1048832,
|
|
2166
|
-
2114560,
|
|
2167
|
-
2117632
|
|
2168
|
-
]), Me = /*#__PURE__*/ new W(0), Ne = function(e, t, n, r, i, a) {
|
|
2169
|
-
var o = a.z || e.length, s = new W(r + o + 5 * (1 + Math.ceil(o / 7e3)) + i), c = s.subarray(r, s.length - i), l = a.l, u = (a.r || 0) & 7;
|
|
2170
|
-
if (t) {
|
|
2171
|
-
u && (c[0] = a.r >> 3);
|
|
2172
|
-
for (var d = je[t - 1], f = d >> 13, p = d & 8191, m = (1 << n) - 1, h = a.p || new G(32768), g = a.h || new G(m + 1), _ = Math.ceil(n / 3), v = 2 * _, y = function(t) {
|
|
2173
|
-
return (e[t] ^ e[t + 1] << _ ^ e[t + 2] << v) & m;
|
|
2174
|
-
}, b = new ne(25e3), x = new G(288), S = new G(32), C = 0, w = 0, T = a.i || 0, E = 0, D = a.w || 0, O = 0; T + 2 < o; ++T) {
|
|
2175
|
-
var k = y(T), A = T & 32767, j = g[k];
|
|
2176
|
-
if (h[A] = j, g[k] = A, D <= T) {
|
|
2177
|
-
var M = o - T;
|
|
2178
|
-
if ((C > 7e3 || E > 24576) && (M > 423 || !l)) {
|
|
2179
|
-
u = Ae(e, c, 0, b, x, S, w, E, O, T - O, u), E = C = w = 0, O = T;
|
|
2180
|
-
for (var N = 0; N < 286; ++N) x[N] = 0;
|
|
2181
|
-
for (var N = 0; N < 30; ++N) S[N] = 0;
|
|
2182
|
-
}
|
|
2183
|
-
var P = 2, F = 0, ee = p, I = A - j & 32767;
|
|
2184
|
-
if (M > 2 && k == y(T - I)) for (var L = Math.min(f, M) - 1, R = Math.min(32767, T), z = Math.min(258, M); I <= R && --ee && A != j;) {
|
|
2185
|
-
if (e[T + P] == e[T + P - I]) {
|
|
2186
|
-
for (var B = 0; B < z && e[T + B] == e[T + B - I]; ++B);
|
|
2187
|
-
if (B > P) {
|
|
2188
|
-
if (P = B, F = I, B > L) break;
|
|
2189
|
-
for (var V = Math.min(I, B - 2), te = 0, N = 0; N < V; ++N) {
|
|
2190
|
-
var H = T - I + N & 32767, U = H - h[H] & 32767;
|
|
2191
|
-
U > te && (te = U, j = H);
|
|
2192
|
-
}
|
|
2193
|
-
}
|
|
2194
|
-
}
|
|
2195
|
-
A = j, j = h[A], I += A - j & 32767;
|
|
2196
|
-
}
|
|
2197
|
-
if (F) {
|
|
2198
|
-
b[E++] = 268435456 | J[P] << 18 | Y[F];
|
|
2199
|
-
var K = J[P] & 31, q = Y[F] & 31;
|
|
2200
|
-
w += re[K] + ie[q], ++x[257 + K], ++S[q], D = T + P, ++C;
|
|
2201
|
-
} else b[E++] = e[T], ++x[e[T]];
|
|
2202
|
-
}
|
|
2203
|
-
}
|
|
2204
|
-
for (T = Math.max(T, D); T < o; ++T) b[E++] = e[T], ++x[e[T]];
|
|
2205
|
-
u = Ae(e, c, l, b, x, S, w, E, O, T - O, u), l || (a.r = u & 7 | c[u / 8 | 0] << 3, u -= 7, a.h = g, a.p = h, a.i = T, a.w = D);
|
|
2206
|
-
} else {
|
|
2207
|
-
for (var T = a.w || 0; T < o + l; T += 65535) {
|
|
2208
|
-
var ae = T + 65535;
|
|
2209
|
-
ae >= o && (c[u / 8 | 0] = l, ae = o), u = ke(c, u + 1, e.subarray(T, ae));
|
|
2210
|
-
}
|
|
2211
|
-
a.i = o;
|
|
2272
|
+
}
|
|
2273
|
+
var Ge = {
|
|
2274
|
+
message: {
|
|
2275
|
+
burst: 240,
|
|
2276
|
+
perSecond: 160
|
|
2277
|
+
},
|
|
2278
|
+
action: {
|
|
2279
|
+
burst: 12,
|
|
2280
|
+
perSecond: 6
|
|
2281
|
+
},
|
|
2282
|
+
chat: {
|
|
2283
|
+
burst: 4,
|
|
2284
|
+
perSecond: 1
|
|
2212
2285
|
}
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2286
|
+
}, Ke = class {
|
|
2287
|
+
peers = /* @__PURE__ */ new Map();
|
|
2288
|
+
allow(e, t, n = performance.now()) {
|
|
2289
|
+
let r = this.peers.get(e);
|
|
2290
|
+
r || (r = {}, this.peers.set(e, r));
|
|
2291
|
+
let { burst: i, perSecond: a } = Ge[t], o = r[t] ?? {
|
|
2292
|
+
tokens: i,
|
|
2293
|
+
at: n
|
|
2294
|
+
};
|
|
2295
|
+
return o.tokens = Math.min(i, o.tokens + Math.max(0, n - o.at) * a / 1e3), o.at = Math.max(o.at, n), r[t] = o, o.tokens < 1 ? !1 : (o.tokens--, !0);
|
|
2218
2296
|
}
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
function Fe(e, t) {
|
|
2222
|
-
return Pe(e, t || {}, 0, 0);
|
|
2223
|
-
}
|
|
2224
|
-
var Ie = /* @__PURE__ */ function() {
|
|
2225
|
-
function e(e, t) {
|
|
2226
|
-
typeof e == "function" && (t = e, e = {}), this.ondata = t;
|
|
2227
|
-
var n = e && e.dictionary && e.dictionary.subarray(-32768);
|
|
2228
|
-
this.s = {
|
|
2229
|
-
i: 0,
|
|
2230
|
-
b: n ? n.length : 0
|
|
2231
|
-
}, this.o = new W(32768), this.p = new W(0), n && this.o.set(n);
|
|
2297
|
+
delete(e) {
|
|
2298
|
+
this.peers.delete(e);
|
|
2232
2299
|
}
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
t.set(this.p), t.set(e, this.p.length), this.p = t;
|
|
2238
|
-
}
|
|
2239
|
-
}, e.prototype.c = function(e) {
|
|
2240
|
-
this.s.i = +(this.d = e || !1);
|
|
2241
|
-
var t = this.s.b, n = Se(this.p, this.s, this.o);
|
|
2242
|
-
this.ondata(ye(n, t, this.s.b), this.d), this.o = ye(n, this.s.b - 32768), this.s.b = this.o.length, this.p = ye(this.p, this.s.p / 8 | 0), this.s.p &= 7;
|
|
2243
|
-
}, e.prototype.push = function(e, t) {
|
|
2244
|
-
this.e(e), this.c(t);
|
|
2245
|
-
}, e;
|
|
2246
|
-
}(), Le = typeof TextDecoder < "u" && /*#__PURE__*/ new TextDecoder();
|
|
2247
|
-
try {
|
|
2248
|
-
Le.decode(Me, { stream: !0 });
|
|
2249
|
-
} catch {}
|
|
2250
|
-
//#endregion
|
|
2251
|
-
//#region src/core/replay-codec.ts
|
|
2252
|
-
var Re = 33554432, ze = new TextEncoder();
|
|
2300
|
+
clear() {
|
|
2301
|
+
this.peers.clear();
|
|
2302
|
+
}
|
|
2303
|
+
}, qe = 33554432, Je = new TextEncoder();
|
|
2253
2304
|
new TextDecoder("utf-8", { fatal: !0 });
|
|
2254
|
-
function
|
|
2305
|
+
function Ye(e) {
|
|
2255
2306
|
let t = 2166136261;
|
|
2256
2307
|
for (let n of e) t = Math.imul(t ^ n, 16777619);
|
|
2257
2308
|
return t >>> 0;
|
|
2258
2309
|
}
|
|
2259
|
-
function
|
|
2310
|
+
function Xe(e) {
|
|
2260
2311
|
if (e.length > 33554432) throw Error("Replay exceeds 32 MB");
|
|
2261
|
-
let t =
|
|
2312
|
+
let t = W(e, { level: 6 }), n = new Uint8Array(16 + t.length), r = new DataView(n.buffer);
|
|
2262
2313
|
return n.set([
|
|
2263
2314
|
66,
|
|
2264
2315
|
50,
|
|
@@ -2268,12 +2319,12 @@ function Ve(e) {
|
|
|
2268
2319
|
0,
|
|
2269
2320
|
0,
|
|
2270
2321
|
0
|
|
2271
|
-
]), r.setUint32(8, e.length, !0), r.setUint32(12,
|
|
2322
|
+
]), r.setUint32(8, e.length, !0), r.setUint32(12, Ye(e), !0), n.set(t, 16), n;
|
|
2272
2323
|
}
|
|
2273
|
-
function
|
|
2324
|
+
function Ze(e) {
|
|
2274
2325
|
if (typeof e == "string") {
|
|
2275
|
-
if (
|
|
2276
|
-
return
|
|
2326
|
+
if (Je.encode(e).length > 33554432) throw Error("Replay exceeds 32 MB");
|
|
2327
|
+
return Je.encode(e);
|
|
2277
2328
|
}
|
|
2278
2329
|
let t = e instanceof Uint8Array ? e : new Uint8Array(e);
|
|
2279
2330
|
if (t.length > 33554432) throw Error("Replay exceeds 32 MB");
|
|
@@ -2281,17 +2332,15 @@ function He(e) {
|
|
|
2281
2332
|
if (t.length < 17 || t[4] !== 1 || t[5] || t[6] || t[7]) throw Error("Invalid compressed replay header");
|
|
2282
2333
|
let n = new DataView(t.buffer, t.byteOffset, t.byteLength), r = n.getUint32(8, !0);
|
|
2283
2334
|
if (!r || r > 33554432) throw Error("Invalid expanded replay size");
|
|
2284
|
-
let i = new Uint8Array(r), a = 0, o = !1, s = new
|
|
2335
|
+
let i = new Uint8Array(r), a = 0, o = !1, s = new G((e, t) => {
|
|
2285
2336
|
if (a + e.length > r) throw Error("Expanded replay exceeds declared size");
|
|
2286
2337
|
i.set(e, a), a += e.length, o = t;
|
|
2287
2338
|
});
|
|
2288
2339
|
for (let e = 16; e < t.length; e += 1024) s.push(t.subarray(e, e + 1024), e + 1024 >= t.length);
|
|
2289
|
-
if (!o || a !== r ||
|
|
2340
|
+
if (!o || a !== r || Ye(i) !== n.getUint32(12, !0)) throw Error("Compressed replay integrity failure");
|
|
2290
2341
|
return i;
|
|
2291
2342
|
}
|
|
2292
|
-
|
|
2293
|
-
//#region src/core/replay-wire.ts
|
|
2294
|
-
var Ue = [
|
|
2343
|
+
var Qe = [
|
|
2295
2344
|
"input",
|
|
2296
2345
|
"team",
|
|
2297
2346
|
"start",
|
|
@@ -2301,30 +2350,38 @@ var Ue = [
|
|
|
2301
2350
|
"timeLimit",
|
|
2302
2351
|
"kickRate",
|
|
2303
2352
|
"join",
|
|
2304
|
-
"disc"
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
|
-
|
|
2353
|
+
"disc",
|
|
2354
|
+
"surface"
|
|
2355
|
+
], $e = new TextEncoder(), et = new TextDecoder("utf-8", { fatal: !0 });
|
|
2356
|
+
function tt(e) {
|
|
2357
|
+
return Xe(nt(e));
|
|
2308
2358
|
}
|
|
2309
|
-
function
|
|
2310
|
-
let { commands: t, ...n } = e, r = t.some((e) => e.kind === "disc") ? 3 : e.checkpoints.length ? 2 : 1, i = 0, a = e.checkpoints.map((e) => {
|
|
2359
|
+
function nt(e) {
|
|
2360
|
+
let { commands: t, ...n } = e, r = t.some((e) => e.kind === "surface") || e.initial.surface !== void 0 || e.checkpoints.some((e) => e.state.surface !== void 0) ? 4 : t.some((e) => e.kind === "disc") ? 3 : e.checkpoints.length ? 2 : 1, i = 0, a = e.checkpoints.map((e) => {
|
|
2311
2361
|
let t = e.state.discs;
|
|
2312
2362
|
if (!Array.isArray(t) || t.length > 1728 || t.some((e) => !Number.isFinite(e))) throw Error("Invalid checkpoint discs");
|
|
2313
|
-
|
|
2363
|
+
i += t.length * 8;
|
|
2364
|
+
let n = e.state.surface;
|
|
2365
|
+
if (n !== void 0) {
|
|
2366
|
+
if (!Array.isArray(n) || n.length !== 0 && n.length !== 5389 || n.some((e) => !Number.isInteger(e) || e < 0 || e > 4294967295)) throw Error("Invalid checkpoint surface");
|
|
2367
|
+
i += n.length * 4;
|
|
2368
|
+
}
|
|
2369
|
+
return {
|
|
2314
2370
|
...e,
|
|
2315
2371
|
state: {
|
|
2316
2372
|
...e.state,
|
|
2317
|
-
discs: t.length
|
|
2373
|
+
discs: t.length,
|
|
2374
|
+
...n === void 0 ? {} : { surface: n.length }
|
|
2318
2375
|
}
|
|
2319
2376
|
};
|
|
2320
2377
|
});
|
|
2321
2378
|
if (a.length > 721) throw Error("Too many replay checkpoints");
|
|
2322
|
-
let o =
|
|
2379
|
+
let o = $e.encode(JSON.stringify(r >= 2 ? {
|
|
2323
2380
|
...n,
|
|
2324
2381
|
checkpoints: a
|
|
2325
2382
|
} : n));
|
|
2326
2383
|
if (t.length > 5e5 || o.length + 16 > 33554432) throw Error("Replay exceeds bounds");
|
|
2327
|
-
let s = t.length * 12 + t.filter((e) => e.kind === "disc").length * 106, c = new Uint8Array(Math.min(
|
|
2384
|
+
let s = t.length * 12 + t.filter((e) => e.kind === "disc").length * 106, c = new Uint8Array(Math.min(qe, s)), l = new DataView(c.buffer), u = (e) => {
|
|
2328
2385
|
if (d + e > c.length) throw Error("Replay exceeds bounds");
|
|
2329
2386
|
}, d = 0, f = e.initial.tick, p = (e) => {
|
|
2330
2387
|
if (!Number.isInteger(e) || e < 0 || e > 4294967295) throw Error("Invalid replay integer");
|
|
@@ -2335,15 +2392,15 @@ function qe(e) {
|
|
|
2335
2392
|
} while (e);
|
|
2336
2393
|
};
|
|
2337
2394
|
for (let e of t) {
|
|
2338
|
-
let t =
|
|
2395
|
+
let t = Qe.indexOf(r < 3 && e.kind === "join" ? "team" : e.kind);
|
|
2339
2396
|
if (e.kind === "join" && e.value !== 0 || e.kind === "team" && e.value > 2) throw Error("Invalid replay team command");
|
|
2340
2397
|
if (t < 0 || !Number.isInteger(e.slot) || e.slot < 0 || e.slot > (e.kind === "disc" ? 95 : 31)) throw Error("Invalid replay command");
|
|
2341
|
-
if (p(e.tick - f), u(1), c[d++] = r
|
|
2342
|
-
let t =
|
|
2343
|
-
|
|
2398
|
+
if (p(e.tick - f), u(1), c[d++] = r >= 3 ? t : t << 5 | e.slot, r >= 3 && p(e.slot), p(r < 3 && e.kind === "join" ? 3 : e.value), e.kind === "disc") {
|
|
2399
|
+
let t = Se(e.properties), n = 0;
|
|
2400
|
+
xe.forEach(([e], r) => {
|
|
2344
2401
|
t[e] !== void 0 && (n |= 1 << r);
|
|
2345
2402
|
}), p(n);
|
|
2346
|
-
for (let [e] of
|
|
2403
|
+
for (let [e] of xe) {
|
|
2347
2404
|
let n = t[e];
|
|
2348
2405
|
n !== void 0 && (u(8), l.setFloat64(d, n, !0), d += 8);
|
|
2349
2406
|
}
|
|
@@ -2364,40 +2421,52 @@ function qe(e) {
|
|
|
2364
2421
|
0
|
|
2365
2422
|
]), g.setUint32(8, o.length, !0), g.setUint32(12, t.length, !0), h.set(o, 16);
|
|
2366
2423
|
let _ = 16 + o.length;
|
|
2367
|
-
for (let t of e.checkpoints)
|
|
2424
|
+
for (let t of e.checkpoints) {
|
|
2425
|
+
for (let e of t.state.discs) g.setFloat64(_, e, !0), _ += 8;
|
|
2426
|
+
for (let e of t.state.surface ?? []) g.setUint32(_, e, !0), _ += 4;
|
|
2427
|
+
}
|
|
2368
2428
|
return h.set(c.subarray(0, d), _), h;
|
|
2369
2429
|
}
|
|
2370
|
-
function
|
|
2371
|
-
let t =
|
|
2372
|
-
if (t[0] !== 66 || t[1] !== 50 || t[2] !== 68 || t[3] !== 80) return JSON.parse(
|
|
2430
|
+
function rt(e) {
|
|
2431
|
+
let t = Ze(e);
|
|
2432
|
+
if (t[0] !== 66 || t[1] !== 50 || t[2] !== 68 || t[3] !== 80) return JSON.parse(et.decode(t));
|
|
2373
2433
|
if (t.length < 16 || ![
|
|
2374
2434
|
1,
|
|
2375
2435
|
2,
|
|
2376
|
-
3
|
|
2436
|
+
3,
|
|
2437
|
+
4
|
|
2377
2438
|
].includes(t[4]) || t[5] || t[6] || t[7]) throw Error("Invalid packed replay header");
|
|
2378
2439
|
let n = new DataView(t.buffer, t.byteOffset, t.byteLength), r = n.getUint32(8, !0), i = n.getUint32(12, !0);
|
|
2379
2440
|
if (r > t.length - 16 || i > 5e5 || i > (t.length - 16 - r) / 3) throw Error("Invalid packed replay bounds");
|
|
2380
|
-
let a = JSON.parse(
|
|
2441
|
+
let a = JSON.parse(et.decode(t.subarray(16, 16 + r)));
|
|
2381
2442
|
if (!a || !Number.isSafeInteger(a.initial?.tick) || a.initial.tick < 0) throw Error("Invalid replay initial tick");
|
|
2382
2443
|
a.commands = [];
|
|
2383
2444
|
let o = 16 + r, s = a.initial.tick;
|
|
2384
2445
|
if (t[4] >= 2) {
|
|
2385
2446
|
if (!Array.isArray(a.checkpoints) || a.checkpoints.length > 721) throw Error("Invalid packed checkpoints");
|
|
2386
2447
|
let e = 0;
|
|
2387
|
-
for (let
|
|
2388
|
-
let
|
|
2389
|
-
if (typeof
|
|
2390
|
-
e +=
|
|
2448
|
+
for (let n of a.checkpoints) {
|
|
2449
|
+
let r = n?.state?.discs;
|
|
2450
|
+
if (typeof r != "number" || !Number.isInteger(r) || r < 0 || r > 1728) throw Error("Invalid checkpoint disc count");
|
|
2451
|
+
if (e += r * 8, t[4] >= 4 && n.state.surface !== void 0) {
|
|
2452
|
+
let t = n.state.surface;
|
|
2453
|
+
if (t !== 0 && t !== 5389) throw Error("Invalid checkpoint surface count");
|
|
2454
|
+
e += t * 4;
|
|
2455
|
+
}
|
|
2391
2456
|
}
|
|
2392
2457
|
if (e > t.length - o - i * 3) throw Error("Truncated checkpoint discs");
|
|
2393
2458
|
for (let e of a.checkpoints) {
|
|
2394
|
-
let
|
|
2395
|
-
for (let e = 0; e <
|
|
2459
|
+
let r = e.state.discs, i = Array(r);
|
|
2460
|
+
for (let e = 0; e < r; e++) {
|
|
2396
2461
|
let t = n.getFloat64(o, !0);
|
|
2397
2462
|
if (!Number.isFinite(t)) throw Error("Nonfinite checkpoint disc");
|
|
2398
|
-
|
|
2463
|
+
i[e] = t, o += 8;
|
|
2464
|
+
}
|
|
2465
|
+
if (e.state.discs = i, t[4] >= 4 && e.state.surface !== void 0) {
|
|
2466
|
+
let t = e.state.surface, r = Array(t);
|
|
2467
|
+
for (let e = 0; e < t; e++) r[e] = n.getUint32(o, !0), o += 4;
|
|
2468
|
+
e.state.surface = r;
|
|
2399
2469
|
}
|
|
2400
|
-
e.state.discs = r;
|
|
2401
2470
|
}
|
|
2402
2471
|
}
|
|
2403
2472
|
let c = () => {
|
|
@@ -2415,14 +2484,14 @@ function Je(e) {
|
|
|
2415
2484
|
};
|
|
2416
2485
|
for (let e = 0; e < i; e++) {
|
|
2417
2486
|
if (s += c(), !Number.isSafeInteger(s) || o >= t.length) throw Error("Invalid replay tick");
|
|
2418
|
-
let e = t[o++], r =
|
|
2487
|
+
let e = t[o++], r = Qe[t[4] >= 3 ? e : e >> 5];
|
|
2419
2488
|
if (!r) throw Error("Unknown replay command");
|
|
2420
|
-
let i = t[4]
|
|
2489
|
+
let i = t[4] >= 3 ? c() : e & 31, l = c();
|
|
2421
2490
|
if (r === "disc") {
|
|
2422
2491
|
let e = c();
|
|
2423
2492
|
if (e > 8191) throw Error("Invalid disc property mask");
|
|
2424
2493
|
let u = {};
|
|
2425
|
-
|
|
2494
|
+
xe.forEach(([r], i) => {
|
|
2426
2495
|
if (e & 1 << i) {
|
|
2427
2496
|
if (o + 8 > t.length) throw Error("Truncated disc properties");
|
|
2428
2497
|
u[r] = n.getFloat64(o, !0), o += 8;
|
|
@@ -2432,7 +2501,7 @@ function Je(e) {
|
|
|
2432
2501
|
kind: r,
|
|
2433
2502
|
slot: i,
|
|
2434
2503
|
value: l,
|
|
2435
|
-
properties:
|
|
2504
|
+
properties: Se(u)
|
|
2436
2505
|
});
|
|
2437
2506
|
continue;
|
|
2438
2507
|
}
|
|
@@ -2451,15 +2520,27 @@ function Je(e) {
|
|
|
2451
2520
|
if (o !== t.length) throw Error("Trailing replay command data");
|
|
2452
2521
|
return a;
|
|
2453
2522
|
}
|
|
2454
|
-
|
|
2455
|
-
//#region src/core/replay.ts
|
|
2456
|
-
function Ye(e) {
|
|
2523
|
+
function it(e) {
|
|
2457
2524
|
let t = JSON.stringify(e), n = 2166136261;
|
|
2458
2525
|
for (let e = 0; e < t.length; e++) n ^= t.charCodeAt(e), n = Math.imul(n, 16777619);
|
|
2459
2526
|
return (n >>> 0).toString(16).padStart(8, "0");
|
|
2460
2527
|
}
|
|
2461
|
-
function
|
|
2528
|
+
function at(e, t) {
|
|
2462
2529
|
switch (t.kind) {
|
|
2530
|
+
case "surface":
|
|
2531
|
+
if (t.slot !== 0 || t.value !== 0 && t.value !== 1) throw Error("Invalid surface command");
|
|
2532
|
+
e.configureSurface(t.value ? {
|
|
2533
|
+
seed: 42,
|
|
2534
|
+
halfWidth: e.stadium.bg.width || e.stadium.width,
|
|
2535
|
+
halfHeight: e.stadium.bg.height || e.stadium.height,
|
|
2536
|
+
moisturePermille: 1e3
|
|
2537
|
+
} : null), t.value && e.setSurfaceWeather({
|
|
2538
|
+
rainMilliMmH: 2e5,
|
|
2539
|
+
temperatureMilliC: 2e4,
|
|
2540
|
+
humidityPermille: 1e3,
|
|
2541
|
+
windMilliMS: 0
|
|
2542
|
+
});
|
|
2543
|
+
break;
|
|
2463
2544
|
case "disc":
|
|
2464
2545
|
e.applyDiscProperties(t.slot, t.properties);
|
|
2465
2546
|
break;
|
|
@@ -2490,7 +2571,7 @@ function Xe(e, t) {
|
|
|
2490
2571
|
case "pause": e.setPaused(!!t.value);
|
|
2491
2572
|
}
|
|
2492
2573
|
}
|
|
2493
|
-
var
|
|
2574
|
+
var ot = class {
|
|
2494
2575
|
replay;
|
|
2495
2576
|
playerOrder = [];
|
|
2496
2577
|
lastInputs = /* @__PURE__ */ new Map();
|
|
@@ -2504,7 +2585,7 @@ var Ze = class {
|
|
|
2504
2585
|
this.playerOrder = t.map((e) => e.slot), this.replay = {
|
|
2505
2586
|
magic: "B2DR",
|
|
2506
2587
|
version: 1,
|
|
2507
|
-
engine:
|
|
2588
|
+
engine: Le,
|
|
2508
2589
|
stadium: e.source,
|
|
2509
2590
|
initial: r,
|
|
2510
2591
|
commands: [],
|
|
@@ -2515,14 +2596,14 @@ var Ze = class {
|
|
|
2515
2596
|
})),
|
|
2516
2597
|
styles: [{
|
|
2517
2598
|
tick: r.tick,
|
|
2518
|
-
teams:
|
|
2599
|
+
teams: _e(n)
|
|
2519
2600
|
}],
|
|
2520
2601
|
orders: [{
|
|
2521
2602
|
tick: r.tick,
|
|
2522
2603
|
slots: [...this.playerOrder]
|
|
2523
2604
|
}],
|
|
2524
2605
|
end: r.tick,
|
|
2525
|
-
finalHash:
|
|
2606
|
+
finalHash: it(r)
|
|
2526
2607
|
}, this.bytes = new TextEncoder().encode(JSON.stringify(this.replay)).length;
|
|
2527
2608
|
for (let t = 0; t < 32; t++) this.lastInputs.set(t, e.data[e.index(t) * 18 + 14]);
|
|
2528
2609
|
}
|
|
@@ -2542,7 +2623,7 @@ var Ze = class {
|
|
|
2542
2623
|
style(e, t) {
|
|
2543
2624
|
let n = {
|
|
2544
2625
|
tick: e,
|
|
2545
|
-
teams:
|
|
2626
|
+
teams: _e(t)
|
|
2546
2627
|
}, r = this.replay.styles;
|
|
2547
2628
|
return r.length >= 4096 || !this.reserve(n) ? (this.full = !0, !1) : (r.push(n), !0);
|
|
2548
2629
|
}
|
|
@@ -2557,7 +2638,7 @@ var Ze = class {
|
|
|
2557
2638
|
command(e) {
|
|
2558
2639
|
return e.kind === "input" && this.lastInputs.get(e.slot) === e.value ? !0 : this.replay.commands.length >= 5e5 || !this.reserve(e) ? (this.full = !0, !1) : (e.kind === "input" && this.lastInputs.set(e.slot, e.value), (e.kind === "team" || e.kind === "join") && this.lastInputs.set(e.slot, 0), e.kind === "start" && this.lastInputs.clear(), this.replay.commands.push(e.kind === "disc" ? {
|
|
2559
2640
|
...e,
|
|
2560
|
-
properties:
|
|
2641
|
+
properties: Se(e.properties)
|
|
2561
2642
|
} : { ...e }), !0);
|
|
2562
2643
|
}
|
|
2563
2644
|
step(e) {
|
|
@@ -2566,26 +2647,26 @@ var Ze = class {
|
|
|
2566
2647
|
let t = e.snapshot(), n = {
|
|
2567
2648
|
tick: e.tick,
|
|
2568
2649
|
state: t,
|
|
2569
|
-
hash:
|
|
2650
|
+
hash: it(t)
|
|
2570
2651
|
};
|
|
2571
2652
|
this.reserve(n) && this.replay.checkpoints.push(n);
|
|
2572
2653
|
}
|
|
2573
2654
|
this.replay.end = e.tick;
|
|
2574
2655
|
}
|
|
2575
2656
|
pack(e) {
|
|
2576
|
-
return this.replay.end = e.tick, this.replay.finalHash =
|
|
2657
|
+
return this.replay.end = e.tick, this.replay.finalHash = it(e.snapshot()), nt(this.replay);
|
|
2577
2658
|
}
|
|
2578
2659
|
finish(e) {
|
|
2579
|
-
return this.replay.end = e.tick, this.replay.finalHash =
|
|
2660
|
+
return this.replay.end = e.tick, this.replay.finalHash = it(e.snapshot()), new Blob([tt(this.replay)], { type: "application/x-ball2d-replay" });
|
|
2580
2661
|
}
|
|
2581
2662
|
};
|
|
2582
|
-
async function
|
|
2663
|
+
async function st(e) {
|
|
2583
2664
|
if (e.size > 33554432) throw Error("Replay exceeds 32 MB");
|
|
2584
|
-
return
|
|
2665
|
+
return ct(await e.arrayBuffer());
|
|
2585
2666
|
}
|
|
2586
|
-
function
|
|
2587
|
-
let t =
|
|
2588
|
-
if (t.magic !== "B2DR" || t.version !== 1 || t.engine !==
|
|
2667
|
+
function ct(e) {
|
|
2668
|
+
let t = rt(e);
|
|
2669
|
+
if (t.magic !== "B2DR" || t.version !== 1 || t.engine !== Le) throw Error("Unsupported replay engine/version");
|
|
2589
2670
|
if (!Array.isArray(t.commands) || t.commands.length > 5e5 || !Array.isArray(t.checkpoints) || t.checkpoints.length > 721 || !Number.isInteger(t.end) || t.end < t.initial.tick || t.end - t.initial.tick > 216e3) throw Error("Invalid replay bounds");
|
|
2590
2671
|
let n = t.initial.tick;
|
|
2591
2672
|
for (let e of t.commands) {
|
|
@@ -2599,14 +2680,15 @@ function $e(e) {
|
|
|
2599
2680
|
"timeLimit",
|
|
2600
2681
|
"kickRate",
|
|
2601
2682
|
"join",
|
|
2602
|
-
"disc"
|
|
2603
|
-
|
|
2604
|
-
e.kind === "
|
|
2683
|
+
"disc",
|
|
2684
|
+
"surface"
|
|
2685
|
+
].includes(e.kind) || e.kind === "surface" && e.slot !== 0 || !Number.isInteger(e.slot) || e.slot < 0 || e.slot > (e.kind === "disc" ? 95 : 31) || !Number.isInteger(e.value) || e.value < 0 || e.value > (e.kind === "disc" || e.kind === "join" ? 0 : e.kind === "kickRate" ? 6619135 : e.kind === "timeLimit" ? 5940 : e.kind === "scoreLimit" ? 99 : e.kind === "team" ? 2 : e.kind === "pause" || e.kind === "surface" ? 1 : 31)) throw Error("Invalid replay command");
|
|
2686
|
+
e.kind === "disc" && (e.properties = Se(e.properties)), n = e.tick;
|
|
2605
2687
|
}
|
|
2606
2688
|
if (!Array.isArray(t.roster) || t.roster.length > 4096) throw Error("Invalid replay roster");
|
|
2607
2689
|
n = t.initial.tick;
|
|
2608
2690
|
for (let e of t.roster) {
|
|
2609
|
-
if (!Number.isInteger(e.tick) || e.tick < n || e.tick > t.end || !Number.isInteger(e.slot) || e.slot < 0 || e.slot > 31 || e.name !== null && (typeof e.name != "string" || e.name.length > 24) || e.avatar !== void 0 && !
|
|
2691
|
+
if (!Number.isInteger(e.tick) || e.tick < n || e.tick > t.end || !Number.isInteger(e.slot) || e.slot < 0 || e.slot > 31 || e.name !== null && (typeof e.name != "string" || e.name.length > 24) || e.avatar !== void 0 && !be(e.avatar)) throw Error("Invalid roster event");
|
|
2610
2692
|
n = e.tick;
|
|
2611
2693
|
}
|
|
2612
2694
|
if (t.styles !== void 0) {
|
|
@@ -2614,7 +2696,7 @@ function $e(e) {
|
|
|
2614
2696
|
let e = t.initial.tick;
|
|
2615
2697
|
for (let n of t.styles) {
|
|
2616
2698
|
if (!n || !Number.isInteger(n.tick) || n.tick < e || n.tick > t.end || n.teams === void 0) throw Error("Invalid replay style");
|
|
2617
|
-
n.teams =
|
|
2699
|
+
n.teams = _e(n.teams), e = n.tick;
|
|
2618
2700
|
}
|
|
2619
2701
|
}
|
|
2620
2702
|
if (t.orders !== void 0) {
|
|
@@ -2632,35 +2714,266 @@ function $e(e) {
|
|
|
2632
2714
|
}
|
|
2633
2715
|
return t;
|
|
2634
2716
|
}
|
|
2635
|
-
|
|
2636
|
-
|
|
2637
|
-
|
|
2717
|
+
var lt = (e) => Number.isSafeInteger(e) && e > 0 && e <= 9e4, ut = class {
|
|
2718
|
+
io;
|
|
2719
|
+
state = "admitted";
|
|
2720
|
+
currentEpoch = 0;
|
|
2721
|
+
membershipDeadline;
|
|
2722
|
+
recoveryDeadline = Infinity;
|
|
2723
|
+
phaseDeadline = Infinity;
|
|
2724
|
+
attemptId;
|
|
2725
|
+
retry = 0;
|
|
2726
|
+
timer;
|
|
2727
|
+
timerVersion = 0;
|
|
2728
|
+
transport;
|
|
2729
|
+
constructor(e, t) {
|
|
2730
|
+
if (this.io = e, !lt(t)) throw RangeError("Invalid membership duration");
|
|
2731
|
+
this.membershipDeadline = e.now() + t, this.arm();
|
|
2732
|
+
}
|
|
2733
|
+
get epoch() {
|
|
2734
|
+
return this.currentEpoch;
|
|
2735
|
+
}
|
|
2736
|
+
get status() {
|
|
2737
|
+
return this.state;
|
|
2738
|
+
}
|
|
2739
|
+
disconnected(e) {
|
|
2740
|
+
e !== this.currentEpoch || this.terminal() || this.checkExpiry() || (this.state === "admitted" ? (this.recoveryDeadline = Math.min(this.io.now() + 3e4, this.membershipDeadline), this.attemptId = this.io.newAttemptId(), this.retry = 0, this.wait()) : (this.state === "connecting" || this.state === "awaiting-ack") && this.wait());
|
|
2741
|
+
}
|
|
2742
|
+
acknowledge(e, t) {
|
|
2743
|
+
if (e !== this.currentEpoch || this.state !== "awaiting-ack" || t !== void 0 && !lt(t) || this.checkExpiry() || this.checkAttemptTimeout()) return !1;
|
|
2744
|
+
t !== void 0 && (this.membershipDeadline = Math.min(this.membershipDeadline, this.io.now() + t));
|
|
2745
|
+
let n = {
|
|
2746
|
+
attemptId: this.attemptId,
|
|
2747
|
+
epoch: e
|
|
2748
|
+
};
|
|
2749
|
+
return this.state = "admitted", this.recoveryDeadline = Infinity, this.phaseDeadline = Infinity, this.attemptId = void 0, this.retry = 0, this.arm(), this.io.onRecovered(n), !0;
|
|
2750
|
+
}
|
|
2751
|
+
heartbeat(e, t) {
|
|
2752
|
+
return e !== this.currentEpoch || this.state !== "admitted" || !lt(t) || this.checkExpiry() ? !1 : (this.membershipDeadline = this.io.now() + t, this.arm(), !0);
|
|
2753
|
+
}
|
|
2754
|
+
cancel() {
|
|
2755
|
+
this.terminal() || (this.state = "cancelled", this.clearTimer(), this.retire());
|
|
2756
|
+
}
|
|
2757
|
+
terminal() {
|
|
2758
|
+
return this.state === "expired" || this.state === "cancelled";
|
|
2759
|
+
}
|
|
2760
|
+
retire() {
|
|
2761
|
+
let e = this.transport;
|
|
2762
|
+
this.transport = void 0;
|
|
2763
|
+
try {
|
|
2764
|
+
e?.close();
|
|
2765
|
+
} catch {}
|
|
2766
|
+
}
|
|
2767
|
+
clearTimer() {
|
|
2768
|
+
this.timerVersion++, this.timer !== void 0 && this.io.clearTimer(this.timer), this.timer = void 0;
|
|
2769
|
+
}
|
|
2770
|
+
checkExpiry() {
|
|
2771
|
+
if (this.terminal()) return !0;
|
|
2772
|
+
let e = this.io.now(), t = e >= this.membershipDeadline;
|
|
2773
|
+
return !t && e < this.recoveryDeadline ? !1 : (this.state = "expired", this.clearTimer(), this.retire(), this.io.onExpired(t ? "membership" : "recovery"), !0);
|
|
2774
|
+
}
|
|
2775
|
+
checkAttemptTimeout() {
|
|
2776
|
+
return (this.state === "connecting" || this.state === "awaiting-ack") && this.io.now() >= this.phaseDeadline && (this.wait(), !0);
|
|
2777
|
+
}
|
|
2778
|
+
wait() {
|
|
2779
|
+
this.state = "waiting", this.retire();
|
|
2780
|
+
let e = this.io.random(), t = Number.isFinite(e) ? Math.max(0, Math.min(1, e)) : .5, n = Math.min(4e3, 250 * 2 ** Math.min(this.retry++, 4));
|
|
2781
|
+
this.phaseDeadline = this.io.now() + n * (.75 + t * .25), this.arm();
|
|
2782
|
+
}
|
|
2783
|
+
arm() {
|
|
2784
|
+
if (this.clearTimer(), this.terminal()) return;
|
|
2785
|
+
let e = this.timerVersion, t = Math.min(this.membershipDeadline, this.recoveryDeadline, this.phaseDeadline);
|
|
2786
|
+
this.timer = this.io.setTimer(() => {
|
|
2787
|
+
if (!(e !== this.timerVersion || this.checkExpiry())) {
|
|
2788
|
+
if (this.timer = void 0, this.io.now() < this.phaseDeadline) {
|
|
2789
|
+
this.arm();
|
|
2790
|
+
return;
|
|
2791
|
+
}
|
|
2792
|
+
this.state === "waiting" ? this.attempt() : this.state === "connecting" || this.state === "awaiting-ack" ? this.wait() : this.arm();
|
|
2793
|
+
}
|
|
2794
|
+
}, Math.max(0, t - this.io.now()));
|
|
2795
|
+
}
|
|
2796
|
+
attempt() {
|
|
2797
|
+
if (this.checkExpiry()) return;
|
|
2798
|
+
this.state = "connecting";
|
|
2799
|
+
let e = ++this.currentEpoch;
|
|
2800
|
+
this.phaseDeadline = this.io.now() + 5e3, this.arm();
|
|
2801
|
+
let t;
|
|
2802
|
+
try {
|
|
2803
|
+
t = this.io.createAttempt({
|
|
2804
|
+
attemptId: this.attemptId,
|
|
2805
|
+
epoch: e
|
|
2806
|
+
}, {
|
|
2807
|
+
opened: () => {
|
|
2808
|
+
e !== this.currentEpoch || this.state !== "connecting" || this.checkExpiry() || this.checkAttemptTimeout() || (this.state = "awaiting-ack");
|
|
2809
|
+
},
|
|
2810
|
+
closed: () => this.disconnected(e)
|
|
2811
|
+
});
|
|
2812
|
+
} catch {
|
|
2813
|
+
e === this.currentEpoch && this.disconnected(e);
|
|
2814
|
+
return;
|
|
2815
|
+
}
|
|
2816
|
+
if (e === this.currentEpoch && (this.state === "connecting" || this.state === "awaiting-ack" || this.state === "admitted")) this.transport = t;
|
|
2817
|
+
else try {
|
|
2818
|
+
t.close();
|
|
2819
|
+
} catch {}
|
|
2820
|
+
}
|
|
2821
|
+
};
|
|
2822
|
+
function dt(e, t) {
|
|
2823
|
+
return typeof e == "object" && !!e && !Array.isArray(e) && Object.keys(e).length === t.length && t.every((t) => Object.hasOwn(e, t));
|
|
2824
|
+
}
|
|
2825
|
+
var ft = (e) => typeof e == "string" && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.test(e), pt = (e) => typeof e == "string" && /^[0-9a-f]{64}$/.test(e), mt = (e, t) => Number.isSafeInteger(e) && e >= t, ht = (e) => mt(e, 1) && e <= 9e4, gt = (e) => e === "host" || e === "guest";
|
|
2826
|
+
function _t(e) {
|
|
2827
|
+
return !dt(e, [
|
|
2828
|
+
"version",
|
|
2829
|
+
"roomGeneration",
|
|
2830
|
+
"secret",
|
|
2831
|
+
"connectionEpoch",
|
|
2832
|
+
"membershipValidForMs"
|
|
2833
|
+
]) || e.version !== 2 || !ft(e.roomGeneration) || !pt(e.secret) || !mt(e.connectionEpoch, 1) || !ht(e.membershipValidForMs) ? null : {
|
|
2834
|
+
version: 2,
|
|
2835
|
+
roomGeneration: e.roomGeneration,
|
|
2836
|
+
secret: e.secret,
|
|
2837
|
+
connectionEpoch: e.connectionEpoch,
|
|
2838
|
+
membershipValidForMs: e.membershipValidForMs
|
|
2839
|
+
};
|
|
2840
|
+
}
|
|
2841
|
+
function vt(e) {
|
|
2842
|
+
if (!dt(e, [
|
|
2843
|
+
"type",
|
|
2844
|
+
"version",
|
|
2845
|
+
"roomGeneration",
|
|
2846
|
+
"attemptId",
|
|
2847
|
+
"id",
|
|
2848
|
+
"hostId",
|
|
2849
|
+
"role",
|
|
2850
|
+
"connectionEpoch",
|
|
2851
|
+
"membershipValidForMs",
|
|
2852
|
+
"rosterRevision",
|
|
2853
|
+
"members",
|
|
2854
|
+
"requireVerification",
|
|
2855
|
+
"locked"
|
|
2856
|
+
]) || e.type !== "resumed" || e.version !== 2 || !ft(e.roomGeneration) || !ft(e.attemptId) || !ft(e.id) || !ft(e.hostId) || !gt(e.role) || !mt(e.connectionEpoch, 1) || !ht(e.membershipValidForMs) || !mt(e.rosterRevision, 0) || typeof e.requireVerification != "boolean" || typeof e.locked != "boolean" || !Array.isArray(e.members) || e.members.length < 1 || e.members.length > 33) return null;
|
|
2857
|
+
let t = bt(e.members, e.hostId);
|
|
2858
|
+
return !t || !t.some((t) => t.id === e.id && t.role === e.role && t.attached && t.connectionEpoch === e.connectionEpoch) ? null : {
|
|
2859
|
+
type: "resumed",
|
|
2860
|
+
version: 2,
|
|
2861
|
+
roomGeneration: e.roomGeneration,
|
|
2862
|
+
attemptId: e.attemptId,
|
|
2863
|
+
id: e.id,
|
|
2864
|
+
hostId: e.hostId,
|
|
2865
|
+
role: e.role,
|
|
2866
|
+
connectionEpoch: e.connectionEpoch,
|
|
2867
|
+
membershipValidForMs: e.membershipValidForMs,
|
|
2868
|
+
rosterRevision: e.rosterRevision,
|
|
2869
|
+
members: t,
|
|
2870
|
+
requireVerification: e.requireVerification,
|
|
2871
|
+
locked: e.locked
|
|
2872
|
+
};
|
|
2873
|
+
}
|
|
2874
|
+
function yt(e) {
|
|
2875
|
+
if (!dt(e, [
|
|
2876
|
+
"type",
|
|
2877
|
+
"id",
|
|
2878
|
+
"hostId",
|
|
2879
|
+
"role",
|
|
2880
|
+
"resumeGrant",
|
|
2881
|
+
"rosterRevision",
|
|
2882
|
+
"members",
|
|
2883
|
+
"requireVerification",
|
|
2884
|
+
"locked"
|
|
2885
|
+
]) || e.type !== "ready") return null;
|
|
2886
|
+
let t = _t(e.resumeGrant);
|
|
2887
|
+
if (!t) return null;
|
|
2888
|
+
let n = vt({
|
|
2889
|
+
type: "resumed",
|
|
2890
|
+
version: 2,
|
|
2891
|
+
roomGeneration: t.roomGeneration,
|
|
2892
|
+
attemptId: t.roomGeneration,
|
|
2893
|
+
id: e.id,
|
|
2894
|
+
hostId: e.hostId,
|
|
2895
|
+
role: e.role,
|
|
2896
|
+
connectionEpoch: t.connectionEpoch,
|
|
2897
|
+
membershipValidForMs: t.membershipValidForMs,
|
|
2898
|
+
rosterRevision: e.rosterRevision,
|
|
2899
|
+
members: e.members,
|
|
2900
|
+
requireVerification: e.requireVerification,
|
|
2901
|
+
locked: e.locked
|
|
2902
|
+
});
|
|
2903
|
+
return n ? {
|
|
2904
|
+
type: "ready",
|
|
2905
|
+
id: n.id,
|
|
2906
|
+
hostId: n.hostId,
|
|
2907
|
+
role: n.role,
|
|
2908
|
+
resumeGrant: t,
|
|
2909
|
+
rosterRevision: n.rosterRevision,
|
|
2910
|
+
members: n.members,
|
|
2911
|
+
requireVerification: n.requireVerification,
|
|
2912
|
+
locked: n.locked
|
|
2913
|
+
} : null;
|
|
2914
|
+
}
|
|
2915
|
+
function bt(e, t) {
|
|
2916
|
+
if (!Array.isArray(e) || e.length < 1 || e.length > 33) return null;
|
|
2917
|
+
let n = [], r = /* @__PURE__ */ new Set();
|
|
2918
|
+
for (let t of e) {
|
|
2919
|
+
if (!dt(t, [
|
|
2920
|
+
"id",
|
|
2921
|
+
"role",
|
|
2922
|
+
"attached",
|
|
2923
|
+
"connectionEpoch"
|
|
2924
|
+
]) || !ft(t.id) || !gt(t.role) || typeof t.attached != "boolean" || !mt(t.connectionEpoch, 1) || r.has(t.id)) return null;
|
|
2925
|
+
r.add(t.id), n.push({
|
|
2926
|
+
id: t.id,
|
|
2927
|
+
role: t.role,
|
|
2928
|
+
attached: t.attached,
|
|
2929
|
+
connectionEpoch: t.connectionEpoch
|
|
2930
|
+
});
|
|
2931
|
+
}
|
|
2932
|
+
let i = n.filter((e) => e.role === "host");
|
|
2933
|
+
return i.length === 1 && i[0].id === t ? n : null;
|
|
2934
|
+
}
|
|
2935
|
+
function xt(e) {
|
|
2936
|
+
if (!dt(e, [
|
|
2937
|
+
"type",
|
|
2938
|
+
"roomGeneration",
|
|
2939
|
+
"hostId",
|
|
2940
|
+
"rosterRevision",
|
|
2941
|
+
"members"
|
|
2942
|
+
]) || e.type !== "roster" || !ft(e.roomGeneration) || !ft(e.hostId) || !mt(e.rosterRevision, 0)) return null;
|
|
2943
|
+
let t = bt(e.members, e.hostId);
|
|
2944
|
+
return t ? {
|
|
2945
|
+
type: "roster",
|
|
2946
|
+
roomGeneration: e.roomGeneration,
|
|
2947
|
+
hostId: e.hostId,
|
|
2948
|
+
rosterRevision: e.rosterRevision,
|
|
2949
|
+
members: t
|
|
2950
|
+
} : null;
|
|
2951
|
+
}
|
|
2952
|
+
function St(e) {
|
|
2638
2953
|
let t = [...e], n = new Set(t.filter((e) => e.type === "transport" && e.selectedCandidatePairId).map((e) => e.selectedCandidatePairId)), r = t.filter((e) => e.type === "candidate-pair" && e.state === "succeeded"), i = n.size ? r.filter((e) => n.has(e.id)) : r.filter((e) => e.nominated === !0);
|
|
2639
2954
|
if (i.length !== 1) return null;
|
|
2640
2955
|
let a = i[0].currentRoundTripTime;
|
|
2641
2956
|
return typeof a == "number" && Number.isFinite(a) && a >= 0 ? a * 1e3 : null;
|
|
2642
2957
|
}
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
var tt = 524288, nt = 16384, rt = 12;
|
|
2646
|
-
function it(e, t) {
|
|
2958
|
+
var Ct = 524288, wt = 16384, Tt = 12;
|
|
2959
|
+
function Et(e, t) {
|
|
2647
2960
|
let n = JSON.stringify(e);
|
|
2648
2961
|
if (n === void 0) throw Error("Missing control message");
|
|
2649
2962
|
let r = new TextEncoder().encode(n);
|
|
2650
|
-
if (r.length >
|
|
2651
|
-
if (r.length <=
|
|
2652
|
-
let i = Math.ceil(r.length /
|
|
2963
|
+
if (r.length > Ct) throw Error("Control message exceeds 512 KB");
|
|
2964
|
+
if (r.length <= wt) return [n];
|
|
2965
|
+
let i = Math.ceil(r.length / wt), a = [];
|
|
2653
2966
|
for (let e = 0; e < i; e++) {
|
|
2654
|
-
let n = r.subarray(e *
|
|
2655
|
-
s.setUint16(0, 45635), s.setUint8(2, 1), s.setUint32(4, t, !0), s.setUint16(8, e, !0), s.setUint16(10, i, !0), new Uint8Array(o,
|
|
2967
|
+
let n = r.subarray(e * wt, (e + 1) * wt), o = new ArrayBuffer(Tt + n.length), s = new DataView(o);
|
|
2968
|
+
s.setUint16(0, 45635), s.setUint8(2, 1), s.setUint32(4, t, !0), s.setUint16(8, e, !0), s.setUint16(10, i, !0), new Uint8Array(o, Tt).set(n), a.push(o);
|
|
2656
2969
|
}
|
|
2657
2970
|
return a;
|
|
2658
2971
|
}
|
|
2659
|
-
var
|
|
2972
|
+
var Dt = class {
|
|
2660
2973
|
partial;
|
|
2661
2974
|
push(e, t = performance.now()) {
|
|
2662
2975
|
if (typeof e == "string") {
|
|
2663
|
-
if (this.partial || new TextEncoder().encode(e).length >
|
|
2976
|
+
if (this.partial || new TextEncoder().encode(e).length > wt) throw Error("Invalid control message");
|
|
2664
2977
|
return JSON.parse(e);
|
|
2665
2978
|
}
|
|
2666
2979
|
if (e.byteLength < 13 || e.byteLength > 16396) throw Error("Control fragment length");
|
|
@@ -2681,13 +2994,13 @@ var at = class {
|
|
|
2681
2994
|
}
|
|
2682
2995
|
let o = this.partial;
|
|
2683
2996
|
if (o.id !== r || o.count !== a || o.next !== i || t - o.since > 1e4) throw Error("Control fragment sequence");
|
|
2684
|
-
if (o.next++, o.bytes += e.byteLength -
|
|
2685
|
-
if (o.parts.push(new Uint8Array(e.slice(
|
|
2997
|
+
if (o.next++, o.bytes += e.byteLength - Tt, o.bytes > Ct) throw Error("Control size limit");
|
|
2998
|
+
if (o.parts.push(new Uint8Array(e.slice(Tt))), o.next !== a) return;
|
|
2686
2999
|
let s = new Uint8Array(o.bytes), c = 0;
|
|
2687
3000
|
for (let e of o.parts) s.set(e, c), c += e.length;
|
|
2688
3001
|
return this.partial = void 0, JSON.parse(new TextDecoder("utf-8", { fatal: !0 }).decode(s));
|
|
2689
3002
|
}
|
|
2690
|
-
},
|
|
3003
|
+
}, Ot = class extends Error {}, kt = 1, At = (e) => typeof e == "string" && /^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$/.test(e), jt = (e) => Number.isSafeInteger(e) && e > 0, Mt = (e) => e?.match(/(?:^|\r?\n)a=ice-ufrag:([^\s]+)/)?.[1], Nt = (e) => e.usernameFragment ?? e.candidate?.match(/(?:^| )ufrag ([^ ]+)/)?.[1], Pt = class {
|
|
2691
3004
|
room;
|
|
2692
3005
|
credentials;
|
|
2693
3006
|
hooks;
|
|
@@ -2702,6 +3015,67 @@ var at = class {
|
|
|
2702
3015
|
bytesSent = 0;
|
|
2703
3016
|
bytesReceived = 0;
|
|
2704
3017
|
pollingStats = !1;
|
|
3018
|
+
resumeGrant;
|
|
3019
|
+
recovery;
|
|
3020
|
+
resumeAttempt;
|
|
3021
|
+
socketSerial = 0;
|
|
3022
|
+
requestSentAt = 0;
|
|
3023
|
+
rosterRevision = -1;
|
|
3024
|
+
members = /* @__PURE__ */ new Map();
|
|
3025
|
+
lockedState = null;
|
|
3026
|
+
get locked() {
|
|
3027
|
+
return this.lockedState;
|
|
3028
|
+
}
|
|
3029
|
+
heartbeatSequence = 0;
|
|
3030
|
+
heartbeatRequest;
|
|
3031
|
+
heartbeatTimer;
|
|
3032
|
+
heartbeatTimerVersion = 0;
|
|
3033
|
+
heartbeatDeadline = 0;
|
|
3034
|
+
cancelHeartbeat() {
|
|
3035
|
+
clearTimeout(this.heartbeatTimer), this.heartbeatTimer = void 0, this.heartbeatTimerVersion++, this.heartbeatRequest = void 0;
|
|
3036
|
+
}
|
|
3037
|
+
armHeartbeat(e) {
|
|
3038
|
+
clearTimeout(this.heartbeatTimer);
|
|
3039
|
+
let t = ++this.heartbeatTimerVersion;
|
|
3040
|
+
this.heartbeatTimer = setTimeout(() => {
|
|
3041
|
+
t === this.heartbeatTimerVersion && (this.heartbeatTimer = void 0, this.sendHeartbeat());
|
|
3042
|
+
}, e);
|
|
3043
|
+
}
|
|
3044
|
+
scheduleHeartbeat(e, t) {
|
|
3045
|
+
this.cancelHeartbeat();
|
|
3046
|
+
let n = performance.now() + e;
|
|
3047
|
+
this.heartbeatDeadline = t ? n : Math.min(this.heartbeatDeadline, n);
|
|
3048
|
+
let r = this.heartbeatDeadline - performance.now();
|
|
3049
|
+
r > 0 && this.signalingReady && this.armHeartbeat(Math.max(1, Math.floor(Math.min(3e4, r / 3))));
|
|
3050
|
+
}
|
|
3051
|
+
sendHeartbeat() {
|
|
3052
|
+
let e = this.heartbeatDeadline - performance.now();
|
|
3053
|
+
if (!this.signalingReady || !this.resumeGrant || !this.recovery || e <= 0) return;
|
|
3054
|
+
let t = this.heartbeatRequest ??= {
|
|
3055
|
+
id: ++this.heartbeatSequence,
|
|
3056
|
+
sentAt: performance.now(),
|
|
3057
|
+
localEpoch: this.recovery.epoch,
|
|
3058
|
+
transmissions: 0,
|
|
3059
|
+
retryDelay: Math.max(1, Math.floor(Math.min(5e3, e / 3)))
|
|
3060
|
+
};
|
|
3061
|
+
if (!(t.transmissions >= 3)) {
|
|
3062
|
+
t.transmissions++;
|
|
3063
|
+
try {
|
|
3064
|
+
this.signal({
|
|
3065
|
+
type: "heartbeat",
|
|
3066
|
+
requestId: t.id,
|
|
3067
|
+
connectionEpoch: this.resumeGrant.connectionEpoch
|
|
3068
|
+
});
|
|
3069
|
+
} catch {}
|
|
3070
|
+
this.heartbeatRequest === t && this.signalingReady && t.transmissions < 3 && t.retryDelay < e && this.armHeartbeat(t.retryDelay);
|
|
3071
|
+
}
|
|
3072
|
+
}
|
|
3073
|
+
get signalingReady() {
|
|
3074
|
+
return !this.closed && !!this.id && this.ws.readyState === kt && this.signalingAdmitted;
|
|
3075
|
+
}
|
|
3076
|
+
get signalingAdmitted() {
|
|
3077
|
+
return !this.recovery || this.recovery.status === "admitted";
|
|
3078
|
+
}
|
|
2705
3079
|
verificationState = null;
|
|
2706
3080
|
get requireVerification() {
|
|
2707
3081
|
return this.verificationState;
|
|
@@ -2714,7 +3088,7 @@ var at = class {
|
|
|
2714
3088
|
n && (this.verificationRequest = void 0, clearTimeout(n.timer), t && (this.verificationState = null), n.reject(Error(e)));
|
|
2715
3089
|
}
|
|
2716
3090
|
setRequireVerification(e) {
|
|
2717
|
-
return typeof e == "boolean" ? this.closed || !this.host || this.ws.readyState !==
|
|
3091
|
+
return typeof e == "boolean" ? this.closed || !this.host || !this.signalingAdmitted || this.ws.readyState !== kt ? Promise.reject(Error("An active room-owner connection is required.")) : this.verificationRequest ? Promise.reject(Error("A verification update is already pending.")) : new Promise((t, n) => {
|
|
2718
3092
|
let r = ++this.verificationSequence, i = setTimeout(() => this.rejectVerification("Verification update was not confirmed."), 1e4);
|
|
2719
3093
|
this.verificationRequest = {
|
|
2720
3094
|
id: r,
|
|
@@ -2740,7 +3114,7 @@ var at = class {
|
|
|
2740
3114
|
t && (this.passwordRequest = void 0, clearTimeout(t.timer), t.reject(Error(e)));
|
|
2741
3115
|
}
|
|
2742
3116
|
setPassword(e) {
|
|
2743
|
-
return e !== null && (typeof e != "string" || e.length > 64) ? Promise.reject(Error("Password must contain at most 64 characters.")) : this.closed || !this.host || this.ws.readyState !==
|
|
3117
|
+
return e !== null && (typeof e != "string" || e.length > 64) ? Promise.reject(Error("Password must contain at most 64 characters.")) : this.closed || !this.host || !this.signalingAdmitted || this.ws.readyState !== kt ? Promise.reject(Error("An active room-owner connection is required.")) : this.passwordRequest ? Promise.reject(Error("A password update is already pending.")) : new Promise((t, n) => {
|
|
2744
3118
|
let r = ++this.passwordRequestId, i = setTimeout(() => this.rejectPasswordUpdate("Password update was not confirmed."), 1e4);
|
|
2745
3119
|
this.passwordRequest = {
|
|
2746
3120
|
id: r,
|
|
@@ -2763,10 +3137,10 @@ var at = class {
|
|
|
2763
3137
|
banRequest;
|
|
2764
3138
|
rejectBan(e, t = !0) {
|
|
2765
3139
|
let n = this.banRequest;
|
|
2766
|
-
n && (this.banRequest = void 0, clearTimeout(n.timer), n.reject(t ? new
|
|
3140
|
+
n && (this.banRequest = void 0, clearTimeout(n.timer), n.reject(t ? new Ot(e) : Error(e)));
|
|
2767
3141
|
}
|
|
2768
3142
|
updateBan(e, t) {
|
|
2769
|
-
return this.closed || !this.host || this.ws.readyState !==
|
|
3143
|
+
return this.closed || !this.host || !this.signalingAdmitted || this.ws.readyState !== kt ? Promise.reject(Error("An active room-owner connection is required.")) : this.banRequest ? Promise.reject(Error("A ban operation is already pending.")) : new Promise((n, r) => {
|
|
2770
3144
|
let i = ++this.banSequence, a = setTimeout(() => this.rejectBan("Ban operation was not confirmed."), 1e4);
|
|
2771
3145
|
this.banRequest = {
|
|
2772
3146
|
id: i,
|
|
@@ -2793,28 +3167,17 @@ var at = class {
|
|
|
2793
3167
|
lastHeartbeat = 0;
|
|
2794
3168
|
controlId = 0;
|
|
2795
3169
|
controlAssemblers = /* @__PURE__ */ new Map();
|
|
2796
|
-
constructor(e, t, n, r =
|
|
3170
|
+
constructor(e, t, n, r = Ve()) {
|
|
2797
3171
|
this.room = e, this.credentials = t, this.hooks = n, this.runtime = r;
|
|
2798
|
-
let i = new URL(`/api/rooms/${encodeURIComponent(e)}/signal`,
|
|
2799
|
-
i.protocol = i.protocol === "https:" ? "wss:" : "ws:", this.ws = r.createWebSocket(i), this.ws
|
|
2800
|
-
|
|
2801
|
-
|
|
2802
|
-
|
|
2803
|
-
|
|
2804
|
-
this.closed || n.status("Connection negotiation failed. Try another room or network.");
|
|
3172
|
+
let i = new URL(`/api/rooms/${encodeURIComponent(e)}/signal`, Be(r.serviceOrigin));
|
|
3173
|
+
i.protocol = i.protocol === "https:" ? "wss:" : "ws:", this.ws = r.createWebSocket(i), this.attachSocket(this.ws, () => {
|
|
3174
|
+
this.requestSentAt = performance.now(), this.signal({
|
|
3175
|
+
type: "hello",
|
|
3176
|
+
...t,
|
|
3177
|
+
...r.signalingResume ? { signalingVersion: 2 } : {}
|
|
2805
3178
|
});
|
|
2806
|
-
}, this.
|
|
2807
|
-
|
|
2808
|
-
1001,
|
|
2809
|
-
1008,
|
|
2810
|
-
1009
|
|
2811
|
-
].includes(e.code))) {
|
|
2812
|
-
this.close(), this.hooks.ended?.(e.reason || "Room connection ended.");
|
|
2813
|
-
return;
|
|
2814
|
-
}
|
|
2815
|
-
this.closed || n.status(e.reason || "Signaling disconnected. Established matches can continue; new joins are unavailable.");
|
|
2816
|
-
}, this.ws.onerror = () => n.status("Room service is unavailable."), this.timer = setInterval(() => {
|
|
2817
|
-
this.ws.readyState === st && performance.now() - this.lastHeartbeat >= 3e4 && (this.signal({ type: "heartbeat" }), this.lastHeartbeat = performance.now());
|
|
3179
|
+
}, 0), this.timer = setInterval(() => {
|
|
3180
|
+
!this.resumeGrant && this.signalingAdmitted && this.ws.readyState === kt && performance.now() - this.lastHeartbeat >= 3e4 && (this.signal({ type: "heartbeat" }), this.lastHeartbeat = performance.now());
|
|
2818
3181
|
for (let e of this.peers.values()) {
|
|
2819
3182
|
if (!e.connected && performance.now() - e.created > 2e4) {
|
|
2820
3183
|
n.status("Direct connection failed. This network pair may require a relay; this game does not use TURN."), this.remove(e.id);
|
|
@@ -2824,11 +3187,114 @@ var at = class {
|
|
|
2824
3187
|
}
|
|
2825
3188
|
}, 5e3);
|
|
2826
3189
|
}
|
|
2827
|
-
|
|
2828
|
-
!this.closed && this.ws
|
|
3190
|
+
attachSocket(e, t, n) {
|
|
3191
|
+
let r = ++this.socketSerial, i = () => !this.closed && this.ws === e && this.socketSerial === r;
|
|
3192
|
+
e.onopen = () => {
|
|
3193
|
+
i() && t();
|
|
3194
|
+
}, e.onmessage = (e) => {
|
|
3195
|
+
i() && (this.signalQueue = this.signalQueue.then(async () => {
|
|
3196
|
+
i() && await this.message(JSON.parse(e.data), r);
|
|
3197
|
+
}).catch(() => {
|
|
3198
|
+
i() && this.hooks.status("Connection negotiation failed. Try another room or network.");
|
|
3199
|
+
}));
|
|
3200
|
+
}, e.onclose = (e) => {
|
|
3201
|
+
if (i()) {
|
|
3202
|
+
if (this.socketSerial++, this.challenge?.abort(), this.cancelHeartbeat(), this.rejectVerification("Signaling disconnected before verification confirmation."), this.rejectBan("Signaling disconnected before ban confirmation."), this.rejectPasswordUpdate("Signaling disconnected before password confirmation."), this.recovery && this.resumeGrant && ![
|
|
3203
|
+
1e3,
|
|
3204
|
+
1008,
|
|
3205
|
+
1009
|
|
3206
|
+
].includes(e.code)) {
|
|
3207
|
+
this.recovery.disconnected(n), this.hooks.status("Signaling interrupted. Reconnecting…");
|
|
3208
|
+
return;
|
|
3209
|
+
}
|
|
3210
|
+
if (!this.id || this.recovery || [
|
|
3211
|
+
1001,
|
|
3212
|
+
1008,
|
|
3213
|
+
1009
|
|
3214
|
+
].includes(e.code)) {
|
|
3215
|
+
this.close(), this.hooks.ended?.(e.reason || "Room connection ended.");
|
|
3216
|
+
return;
|
|
3217
|
+
}
|
|
3218
|
+
this.hooks.status(e.reason || "Signaling disconnected. Established matches can continue; new joins are unavailable.");
|
|
3219
|
+
}
|
|
3220
|
+
}, e.onerror = () => {
|
|
3221
|
+
i() && this.hooks.status("Room service is unavailable.");
|
|
3222
|
+
};
|
|
2829
3223
|
}
|
|
2830
|
-
|
|
2831
|
-
|
|
3224
|
+
startRecovery(e) {
|
|
3225
|
+
let t = Math.floor(e.membershipValidForMs - (performance.now() - this.requestSentAt));
|
|
3226
|
+
if (t <= 0) {
|
|
3227
|
+
this.close(), this.hooks.ended?.("Room membership expired.");
|
|
3228
|
+
return;
|
|
3229
|
+
}
|
|
3230
|
+
this.resumeGrant = e, this.recovery = new ut({
|
|
3231
|
+
now: () => performance.now(),
|
|
3232
|
+
setTimer: (e, t) => setTimeout(e, t),
|
|
3233
|
+
clearTimer: (e) => clearTimeout(e),
|
|
3234
|
+
random: () => Math.random(),
|
|
3235
|
+
newAttemptId: () => crypto.randomUUID(),
|
|
3236
|
+
createAttempt: (e, t) => {
|
|
3237
|
+
this.resumeAttempt = e;
|
|
3238
|
+
let n = new URL(`/api/rooms/${encodeURIComponent(this.room)}/signal`, Be(this.runtime.serviceOrigin));
|
|
3239
|
+
n.protocol = n.protocol === "https:" ? "wss:" : "ws:";
|
|
3240
|
+
let r = this.runtime.createWebSocket(n);
|
|
3241
|
+
return this.ws = r, this.attachSocket(r, () => {
|
|
3242
|
+
t.opened(), this.recovery?.status === "awaiting-ack" && (this.requestSentAt = performance.now(), r.send(JSON.stringify({
|
|
3243
|
+
type: "resume",
|
|
3244
|
+
version: 2,
|
|
3245
|
+
roomGeneration: this.resumeGrant.roomGeneration,
|
|
3246
|
+
peerId: this.id,
|
|
3247
|
+
secret: this.resumeGrant.secret,
|
|
3248
|
+
attemptId: e.attemptId,
|
|
3249
|
+
expectedEpoch: this.resumeGrant.connectionEpoch
|
|
3250
|
+
})));
|
|
3251
|
+
}, e.epoch), { close: () => {
|
|
3252
|
+
this.ws === r && this.socketSerial++, r.onopen = null, r.onmessage = null, r.onclose = null, r.onerror = null, r.close();
|
|
3253
|
+
} };
|
|
3254
|
+
},
|
|
3255
|
+
onExpired: () => {
|
|
3256
|
+
this.close(), this.hooks.ended?.("Room signaling recovery expired.");
|
|
3257
|
+
},
|
|
3258
|
+
onRecovered: () => {}
|
|
3259
|
+
}, t), this.scheduleHeartbeat(t, !0);
|
|
3260
|
+
}
|
|
3261
|
+
signal(e) {
|
|
3262
|
+
!this.closed && this.signalingAdmitted && this.ws.readyState === kt && this.ws.send(JSON.stringify(e));
|
|
3263
|
+
}
|
|
3264
|
+
async message(e, t = this.socketSerial) {
|
|
3265
|
+
if (this.closed || t !== this.socketSerial) return;
|
|
3266
|
+
if (e.type === "resumed") {
|
|
3267
|
+
let n = vt(e), r = this.resumeGrant, i = this.resumeAttempt;
|
|
3268
|
+
if (!n || !r || !i || !this.recovery || n.roomGeneration !== r.roomGeneration || n.attemptId !== i.attemptId || n.id !== this.id || n.hostId !== this.hostId || n.role === "host" !== this.host || n.connectionEpoch <= r.connectionEpoch || n.rosterRevision < this.rosterRevision || n.members.some((e) => e.connectionEpoch < (this.members.get(e.id)?.connectionEpoch ?? 0))) return;
|
|
3269
|
+
let a = Math.floor(n.membershipValidForMs - (performance.now() - this.requestSentAt));
|
|
3270
|
+
if (a <= 0 || !this.recovery.acknowledge(i.epoch, a)) return;
|
|
3271
|
+
this.resumeGrant = {
|
|
3272
|
+
...r,
|
|
3273
|
+
connectionEpoch: n.connectionEpoch,
|
|
3274
|
+
membershipValidForMs: a
|
|
3275
|
+
}, this.resumeAttempt = void 0, this.scheduleHeartbeat(a, !1), this.verificationState = n.requireVerification, this.lockedState = n.locked, this.reconcile(n.members, n.rosterRevision, t), this.hooks.status("Room signaling restored.");
|
|
3276
|
+
return;
|
|
3277
|
+
}
|
|
3278
|
+
if (e.type === "heartbeat" && this.resumeGrant && this.recovery) {
|
|
3279
|
+
let t = this.heartbeatRequest;
|
|
3280
|
+
if (!t || e.requestId !== t.id || e.connectionEpoch !== this.resumeGrant.connectionEpoch || !Number.isSafeInteger(e.membershipValidForMs) || e.membershipValidForMs < 1 || e.membershipValidForMs > 9e4) return;
|
|
3281
|
+
let n = Math.floor(e.membershipValidForMs - (performance.now() - t.sentAt));
|
|
3282
|
+
n > 0 && this.recovery.heartbeat(t.localEpoch, n) && this.scheduleHeartbeat(n, !0);
|
|
3283
|
+
return;
|
|
3284
|
+
}
|
|
3285
|
+
if (this.recovery && !this.signalingAdmitted) return;
|
|
3286
|
+
if (e.type === "roster" && this.resumeGrant) {
|
|
3287
|
+
let n = xt(e);
|
|
3288
|
+
if (!n || n.roomGeneration !== this.resumeGrant.roomGeneration || n.hostId !== this.hostId || n.rosterRevision <= this.rosterRevision) return;
|
|
3289
|
+
let r = n.members.find((e) => e.id === this.id);
|
|
3290
|
+
if (!r || !r.attached || r.connectionEpoch !== this.resumeGrant.connectionEpoch || r.role === "host" !== this.host) {
|
|
3291
|
+
this.close(), this.hooks.ended?.("Room membership ended.");
|
|
3292
|
+
return;
|
|
3293
|
+
}
|
|
3294
|
+
if (n.members.some((e) => e.connectionEpoch < (this.members.get(e.id)?.connectionEpoch ?? 0))) return;
|
|
3295
|
+
this.reconcile(n.members, n.rosterRevision, t);
|
|
3296
|
+
return;
|
|
3297
|
+
}
|
|
2832
3298
|
if (e.type === "verificationUpdated" && this.verificationRequest && this.verificationRequest.id === e.requestId) {
|
|
2833
3299
|
if (e.ok !== !0 || typeof e.required != "boolean") this.rejectVerification(typeof e.error == "string" ? e.error : "Verification update failed.", e.ok !== !1);
|
|
2834
3300
|
else {
|
|
@@ -2850,12 +3316,13 @@ var at = class {
|
|
|
2850
3316
|
siteKey: e.siteKey,
|
|
2851
3317
|
roomId: this.room
|
|
2852
3318
|
}, t.signal);
|
|
2853
|
-
if (t.signal.aborted || this.closed || this.ws.readyState !==
|
|
3319
|
+
if (t.signal.aborted || this.closed || this.ws.readyState !== kt) return;
|
|
2854
3320
|
if (typeof n != "string" || n.length === 0 || n.length > 2048) throw Error("Invalid verification response.");
|
|
2855
|
-
this.signal({
|
|
3321
|
+
this.requestSentAt = performance.now(), this.signal({
|
|
2856
3322
|
type: "hello",
|
|
2857
3323
|
...this.credentials,
|
|
2858
|
-
verificationToken: n
|
|
3324
|
+
verificationToken: n,
|
|
3325
|
+
...this.runtime.signalingResume ? { signalingVersion: 2 } : {}
|
|
2859
3326
|
});
|
|
2860
3327
|
} catch (e) {
|
|
2861
3328
|
this.closed || (this.close(), this.hooks.ended?.(e instanceof Error ? e.message : "Room verification failed."));
|
|
@@ -2864,6 +3331,14 @@ var at = class {
|
|
|
2864
3331
|
}
|
|
2865
3332
|
return;
|
|
2866
3333
|
}
|
|
3334
|
+
if (e.type === "passwordUpgradeRequired" && this.host) {
|
|
3335
|
+
this.hooks.status("Update the room password or explicitly unlock it to allow new guests.");
|
|
3336
|
+
return;
|
|
3337
|
+
}
|
|
3338
|
+
if (e.type === "passwordUpdated" && e.ok === !1 && this.passwordRequest?.id === e.requestId) {
|
|
3339
|
+
this.rejectPasswordUpdate(typeof e.error == "string" ? e.error : "Password update failed.");
|
|
3340
|
+
return;
|
|
3341
|
+
}
|
|
2867
3342
|
if (e.type === "passwordUpdated" && typeof e.locked == "boolean" && this.passwordRequest && this.passwordRequest.id === e.requestId) {
|
|
2868
3343
|
let t = this.passwordRequest;
|
|
2869
3344
|
this.passwordRequest = void 0, clearTimeout(t.timer), t.resolve(e.locked);
|
|
@@ -2878,69 +3353,124 @@ var at = class {
|
|
|
2878
3353
|
return;
|
|
2879
3354
|
}
|
|
2880
3355
|
if (e.type === "ready") {
|
|
2881
|
-
|
|
2882
|
-
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
ordered: !1,
|
|
2888
|
-
maxRetransmits: 0
|
|
2889
|
-
}));
|
|
2890
|
-
let n = await t.pc.createOffer();
|
|
2891
|
-
if (!this.current(t) || (await t.pc.setLocalDescription(n), !this.current(t))) return;
|
|
2892
|
-
this.signal({
|
|
2893
|
-
type: "signal",
|
|
2894
|
-
to: t.id,
|
|
2895
|
-
signal: {
|
|
2896
|
-
type: "offer",
|
|
2897
|
-
sdp: t.pc.localDescription.sdp
|
|
3356
|
+
if (this.id) return;
|
|
3357
|
+
if (this.runtime.signalingResume && e.resumeGrant !== void 0) {
|
|
3358
|
+
let t = yt(e);
|
|
3359
|
+
if (!t) {
|
|
3360
|
+
this.close(), this.hooks.ended?.("Invalid room admission.");
|
|
3361
|
+
return;
|
|
2898
3362
|
}
|
|
2899
|
-
|
|
3363
|
+
if (this.id = t.id, this.host = t.role === "host", this.hostId = t.hostId, this.verificationState = t.requireVerification, this.lockedState = t.locked, this.startRecovery(t.resumeGrant), this.closed) return;
|
|
3364
|
+
this.members = new Map(t.members.map((e) => [e.id, e])), this.rosterRevision = t.rosterRevision;
|
|
3365
|
+
} else this.id = e.id, this.host = e.role === "host", this.hostId = e.hostId, this.verificationState = typeof e.requireVerification == "boolean" ? e.requireVerification : null;
|
|
3366
|
+
this.hooks.ready(this.id, this.host), this.resumeGrant && this.reconcile([...this.members.values()], this.rosterRevision, t);
|
|
2900
3367
|
return;
|
|
2901
3368
|
}
|
|
2902
|
-
if (e.type === "leave") {
|
|
2903
|
-
this.
|
|
3369
|
+
if (e.type === "peer" || e.type === "leave") {
|
|
3370
|
+
if (this.resumeGrant) {
|
|
3371
|
+
if (!At(e.id) || !jt(e.connectionEpoch) || !Number.isSafeInteger(e.rosterRevision) || e.rosterRevision <= this.rosterRevision || e.id === this.id) return;
|
|
3372
|
+
let t = this.members.get(e.id);
|
|
3373
|
+
if (t && e.connectionEpoch < t.connectionEpoch) return;
|
|
3374
|
+
this.rosterRevision = e.rosterRevision, e.type === "peer" ? this.members.set(e.id, {
|
|
3375
|
+
id: e.id,
|
|
3376
|
+
role: e.id === this.hostId ? "host" : "guest",
|
|
3377
|
+
attached: !0,
|
|
3378
|
+
connectionEpoch: e.connectionEpoch
|
|
3379
|
+
}) : this.members.delete(e.id);
|
|
3380
|
+
}
|
|
3381
|
+
if (e.type === "leave") {
|
|
3382
|
+
this.remove(e.id, !1);
|
|
3383
|
+
return;
|
|
3384
|
+
}
|
|
3385
|
+
this.host && !this.peers.has(e.id) && await this.offerPeer(e.id, t);
|
|
2904
3386
|
return;
|
|
2905
3387
|
}
|
|
2906
|
-
if (e.type !== "signal") return;
|
|
2907
|
-
let
|
|
2908
|
-
if (!
|
|
3388
|
+
if (e.type !== "signal" || this.resumeGrant && (!At(e.negotiationId) || e.toConnectionEpoch !== this.resumeGrant.connectionEpoch || e.fromConnectionEpoch !== this.members.get(e.from)?.connectionEpoch || !this.members.get(e.from)?.attached)) return;
|
|
3389
|
+
let n = this.peers.get(e.from);
|
|
3390
|
+
if (!n) {
|
|
2909
3391
|
if (this.host || e.from !== this.hostId || !["offer", "candidate"].includes(e.signal.type)) return;
|
|
2910
|
-
|
|
3392
|
+
n = this.make(e.from);
|
|
3393
|
+
}
|
|
3394
|
+
if (this.resumeGrant) {
|
|
3395
|
+
if (e.signal.type === "offer") {
|
|
3396
|
+
if (this.host || !Mt(e.signal.sdp)) return;
|
|
3397
|
+
n.negotiationId !== e.negotiationId && (n.candidates = []), this.beginNegotiation(n, e.negotiationId), n.remoteIceUfrag = Mt(e.signal.sdp), n.localIceUfrag = void 0;
|
|
3398
|
+
} else if (e.signal.type === "candidate" && !n.negotiationId && !this.host) this.beginNegotiation(n, e.negotiationId);
|
|
3399
|
+
else if (n.negotiationId !== e.negotiationId) return;
|
|
3400
|
+
if (n.negotiationLocalEpoch !== e.toConnectionEpoch || n.negotiationRemoteEpoch !== e.fromConnectionEpoch) return;
|
|
3401
|
+
if (e.signal.type === "answer") {
|
|
3402
|
+
if (!Mt(e.signal.sdp)) return;
|
|
3403
|
+
n.remoteIceUfrag = Mt(e.signal.sdp);
|
|
3404
|
+
}
|
|
2911
3405
|
}
|
|
3406
|
+
let r = n.negotiationId, i = () => this.current(n) && t === this.socketSerial && this.signalingAdmitted && n.negotiationId === r && this.negotiationCurrent(n);
|
|
2912
3407
|
if (e.signal.type === "offer") {
|
|
2913
3408
|
if (this.host) throw Error("Only the host can offer");
|
|
2914
|
-
if (await
|
|
3409
|
+
if (await n.pc.setRemoteDescription({
|
|
2915
3410
|
type: "offer",
|
|
2916
3411
|
sdp: e.signal.sdp
|
|
2917
|
-
}), !
|
|
2918
|
-
let
|
|
2919
|
-
if (!
|
|
2920
|
-
this.
|
|
2921
|
-
type: "
|
|
2922
|
-
|
|
2923
|
-
signal: {
|
|
2924
|
-
type: "answer",
|
|
2925
|
-
sdp: t.pc.localDescription.sdp
|
|
2926
|
-
}
|
|
3412
|
+
}), !i() || (await this.flushCandidates(n, i), !i())) return;
|
|
3413
|
+
let t = await n.pc.createAnswer();
|
|
3414
|
+
if (!i() || (n.localIceUfrag = Mt(t.sdp), await n.pc.setLocalDescription(t), !i())) return;
|
|
3415
|
+
this.peerSignal(n, {
|
|
3416
|
+
type: "answer",
|
|
3417
|
+
sdp: n.pc.localDescription.sdp
|
|
2927
3418
|
});
|
|
2928
3419
|
} else if (e.signal.type === "answer") {
|
|
2929
3420
|
if (!this.host) throw Error("Only guests can answer");
|
|
2930
|
-
if (await
|
|
3421
|
+
if (await n.pc.setRemoteDescription({
|
|
2931
3422
|
type: "answer",
|
|
2932
3423
|
sdp: e.signal.sdp
|
|
2933
|
-
}), !
|
|
2934
|
-
await this.flushCandidates(
|
|
3424
|
+
}), !i()) return;
|
|
3425
|
+
await this.flushCandidates(n, i), this.noteHealthy(n);
|
|
2935
3426
|
} else if (e.signal.type === "candidate" && e.signal.candidate) {
|
|
2936
|
-
if (!
|
|
3427
|
+
if (this.resumeGrant && (!Nt(e.signal.candidate) || n.remoteIceUfrag && Nt(e.signal.candidate) !== n.remoteIceUfrag)) return;
|
|
3428
|
+
if (!n.pc.remoteDescription) this.queueCandidate(n, e.signal.candidate);
|
|
2937
3429
|
else try {
|
|
2938
|
-
await
|
|
3430
|
+
await n.pc.addIceCandidate(e.signal.candidate);
|
|
2939
3431
|
} catch {
|
|
2940
|
-
this.queueCandidate(
|
|
3432
|
+
i() && this.queueCandidate(n, e.signal.candidate);
|
|
2941
3433
|
}
|
|
2942
3434
|
}
|
|
2943
3435
|
}
|
|
3436
|
+
reconcile(e, t, n) {
|
|
3437
|
+
this.members = new Map(e.map((e) => [e.id, e])), this.rosterRevision = t;
|
|
3438
|
+
for (let e of [...this.peers.keys()]) this.members.has(e) || this.remove(e, !1);
|
|
3439
|
+
if (this.host) for (let t of e) t.id !== this.id && t.attached && !this.peers.has(t.id) && this.offerPeer(t.id, n).catch(() => {
|
|
3440
|
+
!this.closed && n === this.socketSerial && this.hooks.status("Connection negotiation failed.");
|
|
3441
|
+
});
|
|
3442
|
+
}
|
|
3443
|
+
negotiationCurrent(e) {
|
|
3444
|
+
return !this.resumeGrant || e.negotiationLocalEpoch === this.resumeGrant.connectionEpoch && e.negotiationRemoteEpoch === this.members.get(e.id)?.connectionEpoch && this.members.get(e.id)?.attached === !0;
|
|
3445
|
+
}
|
|
3446
|
+
beginNegotiation(e, t) {
|
|
3447
|
+
e.negotiationId = t, e.negotiationLocalEpoch = this.resumeGrant?.connectionEpoch, e.negotiationRemoteEpoch = this.members.get(e.id)?.connectionEpoch;
|
|
3448
|
+
}
|
|
3449
|
+
peerSignal(e, t) {
|
|
3450
|
+
let n = this.resumeGrant, r = this.members.get(e.id);
|
|
3451
|
+
(!n || r?.attached && e.negotiationId && this.signalingAdmitted && e.negotiationLocalEpoch === n.connectionEpoch && e.negotiationRemoteEpoch === r.connectionEpoch) && this.signal({
|
|
3452
|
+
type: "signal",
|
|
3453
|
+
to: e.id,
|
|
3454
|
+
signal: t,
|
|
3455
|
+
...n ? {
|
|
3456
|
+
fromConnectionEpoch: n.connectionEpoch,
|
|
3457
|
+
toConnectionEpoch: r.connectionEpoch,
|
|
3458
|
+
negotiationId: e.negotiationId
|
|
3459
|
+
} : {}
|
|
3460
|
+
});
|
|
3461
|
+
}
|
|
3462
|
+
async offerPeer(e, t) {
|
|
3463
|
+
let n = this.make(e);
|
|
3464
|
+
this.bind(n, n.pc.createDataChannel("control", { ordered: !0 })), this.bind(n, n.pc.createDataChannel("realtime", {
|
|
3465
|
+
ordered: !1,
|
|
3466
|
+
maxRetransmits: 0
|
|
3467
|
+
})), this.resumeGrant && this.beginNegotiation(n, crypto.randomUUID());
|
|
3468
|
+
let r = n.negotiationId, i = () => this.current(n) && t === this.socketSerial && this.signalingAdmitted && n.negotiationId === r && this.negotiationCurrent(n), a = await n.pc.createOffer();
|
|
3469
|
+
i() && (n.localIceUfrag = Mt(a.sdp), await n.pc.setLocalDescription(a), i() && this.peerSignal(n, {
|
|
3470
|
+
type: "offer",
|
|
3471
|
+
sdp: n.pc.localDescription.sdp
|
|
3472
|
+
}));
|
|
3473
|
+
}
|
|
2944
3474
|
current(e) {
|
|
2945
3475
|
return !this.closed && this.peers.get(e.id) === e;
|
|
2946
3476
|
}
|
|
@@ -2955,28 +3485,27 @@ var at = class {
|
|
|
2955
3485
|
let t = e.lostAt !== void 0;
|
|
2956
3486
|
e.lostAt = void 0, e.restarts = 0, t && this.hooks.status("Direct connection restored.");
|
|
2957
3487
|
}
|
|
2958
|
-
async flushCandidates(e) {
|
|
2959
|
-
let
|
|
2960
|
-
for (let
|
|
2961
|
-
if (!
|
|
2962
|
-
try {
|
|
2963
|
-
await e.pc.addIceCandidate(
|
|
3488
|
+
async flushCandidates(e, t = () => this.current(e)) {
|
|
3489
|
+
let n = e.candidates.splice(0);
|
|
3490
|
+
for (let r of n) {
|
|
3491
|
+
if (!t()) return;
|
|
3492
|
+
if (!this.resumeGrant || e.remoteIceUfrag && Nt(r) === e.remoteIceUfrag) try {
|
|
3493
|
+
await e.pc.addIceCandidate(r);
|
|
2964
3494
|
} catch {}
|
|
2965
3495
|
}
|
|
2966
3496
|
}
|
|
2967
3497
|
async restartPeer(e) {
|
|
2968
3498
|
let t = this.peers.get(e);
|
|
2969
|
-
if (this.closed || !this.host || !t || t.restarting || t.restarts >= 2 || t.pc.signalingState !== "stable" || this.ws.readyState !==
|
|
3499
|
+
if (this.closed || !this.host || !t || t.restarting || t.restarts >= 2 || t.pc.signalingState !== "stable" || !this.signalingAdmitted || this.ws.readyState !== kt) return !1;
|
|
3500
|
+
let n = this.socketSerial;
|
|
3501
|
+
this.resumeGrant && (this.beginNegotiation(t, crypto.randomUUID()), t.localIceUfrag = void 0, t.remoteIceUfrag = void 0, t.candidates = []);
|
|
3502
|
+
let r = t.negotiationId, i = () => this.current(t) && n === this.socketSerial && this.signalingAdmitted && t.negotiationId === r && this.negotiationCurrent(t);
|
|
2970
3503
|
t.restarting = !0, t.lastRestart = performance.now(), t.lostAt ??= t.lastRestart, t.restarts++;
|
|
2971
3504
|
try {
|
|
2972
|
-
let
|
|
2973
|
-
return
|
|
2974
|
-
type: "
|
|
2975
|
-
|
|
2976
|
-
signal: {
|
|
2977
|
-
type: "offer",
|
|
2978
|
-
sdp: t.pc.localDescription.sdp
|
|
2979
|
-
}
|
|
3505
|
+
let e = await t.pc.createOffer({ iceRestart: !0 });
|
|
3506
|
+
return !i() || (t.localIceUfrag = Mt(e.sdp), await t.pc.setLocalDescription(e), !i()) ? !1 : (this.peerSignal(t, {
|
|
3507
|
+
type: "offer",
|
|
3508
|
+
sdp: t.pc.localDescription.sdp
|
|
2980
3509
|
}), !0);
|
|
2981
3510
|
} catch {
|
|
2982
3511
|
return !this.closed && this.peers.get(e) === t && this.hooks.status("Direct connection recovery is still pending."), !1;
|
|
@@ -2998,14 +3527,12 @@ var at = class {
|
|
|
2998
3527
|
restarts: 0,
|
|
2999
3528
|
restarting: !1
|
|
3000
3529
|
};
|
|
3001
|
-
this.peers.set(e, n), t.onicecandidate = (
|
|
3002
|
-
|
|
3003
|
-
|
|
3004
|
-
|
|
3005
|
-
|
|
3006
|
-
|
|
3007
|
-
candidate: t.candidate.toJSON()
|
|
3008
|
-
}
|
|
3530
|
+
this.peers.set(e, n), t.onicecandidate = (e) => {
|
|
3531
|
+
if (!this.current(n) || !e.candidate || !this.signalingAdmitted) return;
|
|
3532
|
+
let t = e.candidate.toJSON();
|
|
3533
|
+
(!this.resumeGrant || n.localIceUfrag && Nt(t) === n.localIceUfrag) && this.peerSignal(n, {
|
|
3534
|
+
type: "candidate",
|
|
3535
|
+
candidate: t
|
|
3009
3536
|
});
|
|
3010
3537
|
}, t.ondatachannel = (e) => this.bind(n, e.channel);
|
|
3011
3538
|
let r = () => {
|
|
@@ -3037,7 +3564,7 @@ var at = class {
|
|
|
3037
3564
|
if (this.host && t && !this.hooks.allowStadiumUpload?.(e)) throw Error("Guest control size or permission");
|
|
3038
3565
|
if (typeof n.data != "string" && !(n.data instanceof ArrayBuffer)) throw Error("Invalid control type");
|
|
3039
3566
|
let r = this.controlAssemblers.get(e.id);
|
|
3040
|
-
r || (r = new
|
|
3567
|
+
r || (r = new Dt(), this.controlAssemblers.set(e.id, r));
|
|
3041
3568
|
let i = r.push(n.data);
|
|
3042
3569
|
if (i !== void 0) {
|
|
3043
3570
|
if (this.host && t && (!i || typeof i != "object" || i.type !== "action" || i.action !== "customStadium")) throw Error("Invalid bulk action");
|
|
@@ -3056,7 +3583,7 @@ var at = class {
|
|
|
3056
3583
|
}
|
|
3057
3584
|
control(e, t) {
|
|
3058
3585
|
if (e.control?.readyState !== "open") return;
|
|
3059
|
-
let n =
|
|
3586
|
+
let n = Et(t, this.controlId++), r = n.reduce((e, t) => e + (typeof t == "string" ? new TextEncoder().encode(t).length : t.byteLength), 0);
|
|
3060
3587
|
if (e.control.bufferedAmount + r > 1048576) {
|
|
3061
3588
|
this.remove(e.id);
|
|
3062
3589
|
return;
|
|
@@ -3081,7 +3608,7 @@ var at = class {
|
|
|
3081
3608
|
}
|
|
3082
3609
|
try {
|
|
3083
3610
|
let t = await e.pc.getStats();
|
|
3084
|
-
!this.closed && this.peers.get(e.id) === e && (e.rtt =
|
|
3611
|
+
!this.closed && this.peers.get(e.id) === e && (e.rtt = St(t.values()));
|
|
3085
3612
|
} catch {
|
|
3086
3613
|
e.rtt = null;
|
|
3087
3614
|
}
|
|
@@ -3091,23 +3618,28 @@ var at = class {
|
|
|
3091
3618
|
}
|
|
3092
3619
|
}
|
|
3093
3620
|
}
|
|
3094
|
-
remove(e) {
|
|
3095
|
-
let
|
|
3096
|
-
|
|
3621
|
+
remove(e, t = !0) {
|
|
3622
|
+
let n = this.peers.get(e);
|
|
3623
|
+
n && (clearTimeout(n.admissionTimer), this.peers.delete(e), this.controlAssemblers.delete(e), n.pc.close(), this.host && t ? this.signal({
|
|
3097
3624
|
type: "evict",
|
|
3098
3625
|
id: e
|
|
3099
|
-
}) : this.close(), this.hooks.leave(e), this.host || this.hooks.ended?.("The host connection ended."));
|
|
3626
|
+
}) : this.host || this.close(), this.hooks.leave(e), this.host || this.hooks.ended?.("The host connection ended."));
|
|
3100
3627
|
}
|
|
3101
3628
|
close() {
|
|
3102
|
-
|
|
3103
|
-
|
|
3104
|
-
|
|
3629
|
+
if (!this.closed) {
|
|
3630
|
+
this.resumeGrant && this.signalingAdmitted && this.ws.readyState === kt && this.signal({
|
|
3631
|
+
type: "leave",
|
|
3632
|
+
connectionEpoch: this.resumeGrant.connectionEpoch
|
|
3633
|
+
}), this.recovery?.cancel(), this.resumeGrant = void 0, this.resumeAttempt = void 0, this.cancelHeartbeat(), this.socketSerial++, this.challenge?.abort(), this.rejectVerification("Room closed before verification confirmation."), this.verificationState = null, this.rejectBan("Room closed before ban confirmation."), this.rejectPasswordUpdate("Room closed before password confirmation."), this.closed = !0, clearInterval(this.timer), this.ws.close(1e3, "Left room");
|
|
3634
|
+
for (let e of this.peers.values()) clearTimeout(e.admissionTimer), e.pc.close();
|
|
3635
|
+
this.peers.clear(), this.controlAssemblers.clear();
|
|
3636
|
+
}
|
|
3105
3637
|
}
|
|
3106
3638
|
};
|
|
3107
|
-
function
|
|
3639
|
+
function Ft(e, t) {
|
|
3108
3640
|
return e !== t && e - t >>> 0 < 2147483648;
|
|
3109
3641
|
}
|
|
3110
|
-
function
|
|
3642
|
+
function It(e) {
|
|
3111
3643
|
if (e.byteLength !== 14) throw Error("Input length");
|
|
3112
3644
|
let t = new DataView(e);
|
|
3113
3645
|
if (t.getUint8(0) !== 1 || t.getUint8(1) !== 5 || t.getUint8(6) > 31 || t.getUint8(7)) throw Error("Input format");
|
|
@@ -3118,7 +3650,8 @@ function ut(e) {
|
|
|
3118
3650
|
epoch: t.getUint16(12, !0)
|
|
3119
3651
|
};
|
|
3120
3652
|
}
|
|
3121
|
-
function
|
|
3653
|
+
function Lt(e, t, n = 0) {
|
|
3654
|
+
if (e.surface?.length) throw Error("Terrain transport is not enabled");
|
|
3122
3655
|
let r = [];
|
|
3123
3656
|
for (let t = 0; t < e.discs.length / 18; t++) {
|
|
3124
3657
|
let n = t * 18, i = e.discs, a = i[n + 5] > 0 || i[n + 2] !== 0 || i[n + 3] !== 0 || i[n + 8] !== 0 || i[n + 9] !== 0 || i[n] !== i[n + 16] || i[n + 1] !== i[n + 17];
|
|
@@ -3143,9 +3676,7 @@ function dt(e, t, n = 0) {
|
|
|
3143
3676
|
}
|
|
3144
3677
|
return c;
|
|
3145
3678
|
}
|
|
3146
|
-
|
|
3147
|
-
//#region src/client/headless.ts
|
|
3148
|
-
var ft = Object.freeze({ ...C }), pt = class e {
|
|
3679
|
+
var Rt = Object.freeze({ ...Te }), zt = class e {
|
|
3149
3680
|
runtime;
|
|
3150
3681
|
engine;
|
|
3151
3682
|
network;
|
|
@@ -3171,7 +3702,7 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3171
3702
|
locked = !1;
|
|
3172
3703
|
teamStyles = [null, null];
|
|
3173
3704
|
inputs = /* @__PURE__ */ new Map();
|
|
3174
|
-
traffic = new
|
|
3705
|
+
traffic = new Ke();
|
|
3175
3706
|
onRoomLink;
|
|
3176
3707
|
onPlayerJoin;
|
|
3177
3708
|
onPlayerTeamChange;
|
|
@@ -3213,16 +3744,16 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3213
3744
|
constructor(e, t) {
|
|
3214
3745
|
this.runtime = t, this.engine = e;
|
|
3215
3746
|
}
|
|
3216
|
-
static async create(t, n =
|
|
3217
|
-
let i =
|
|
3218
|
-
if (t =
|
|
3747
|
+
static async create(t, n = We(), r) {
|
|
3748
|
+
let i = Be(n.network.serviceOrigin);
|
|
3749
|
+
if (t = me(t), t.noPlayer !== void 0 && typeof t.noPlayer != "boolean") throw Error("Invalid noPlayer setting");
|
|
3219
3750
|
let a = t.noPlayer === !1, o = t.playerName ?? "Host";
|
|
3220
3751
|
if (a && (typeof o != "string" || !o.trim() || o.length > 24)) throw Error("Invalid host player name");
|
|
3221
|
-
let s =
|
|
3752
|
+
let s = fe(r), c;
|
|
3222
3753
|
try {
|
|
3223
3754
|
s.signal.throwIfAborted();
|
|
3224
3755
|
let r = await s.run(n.loadEngine(s.signal));
|
|
3225
|
-
r.load(t.stadium ??
|
|
3756
|
+
r.load(t.stadium ?? Ie()), c = new e(r, n);
|
|
3226
3757
|
let l = c, u = await s.run(n.request(new URL("/api/rooms", i), {
|
|
3227
3758
|
signal: s.signal,
|
|
3228
3759
|
method: "POST",
|
|
@@ -3237,11 +3768,11 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3237
3768
|
}));
|
|
3238
3769
|
if (!u.ok) throw Error(`Room creation failed (${u.status})`);
|
|
3239
3770
|
let d = await s.run(u.json());
|
|
3240
|
-
l.roomId = d.id, l.roomName = t.roomName, l.roomLink = `${i}${
|
|
3771
|
+
l.roomId = d.id, l.roomName = t.roomName, l.roomLink = `${i}${Q(d.id)}`;
|
|
3241
3772
|
let f;
|
|
3242
3773
|
try {
|
|
3243
3774
|
await s.run(new Promise((e, t) => {
|
|
3244
|
-
f = setTimeout(() => t(Error("Signaling timed out")), 12e3), l.network = new
|
|
3775
|
+
f = setTimeout(() => t(Error("Signaling timed out")), 12e3), l.network = new Pt(d.id, { hostToken: d.hostToken }, {
|
|
3245
3776
|
ready: (n, r) => {
|
|
3246
3777
|
if (!r) {
|
|
3247
3778
|
t(Error("Host authority was not granted"));
|
|
@@ -3274,9 +3805,9 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3274
3805
|
}
|
|
3275
3806
|
if (l.closed) throw Error("Room closed during startup");
|
|
3276
3807
|
l.last = performance.now(), l.loop = setInterval(() => l.advance(), 1e3 / 60);
|
|
3277
|
-
let
|
|
3808
|
+
let p = l.roomLink;
|
|
3278
3809
|
return l.linkNotification = setTimeout(() => {
|
|
3279
|
-
l.linkNotification = void 0, l.invoke("onRoomLink", l.onRoomLink,
|
|
3810
|
+
l.linkNotification = void 0, l.invoke("onRoomLink", l.onRoomLink, p);
|
|
3280
3811
|
}, 0), c;
|
|
3281
3812
|
} catch (e) {
|
|
3282
3813
|
throw c?.close(), e;
|
|
@@ -3309,7 +3840,15 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3309
3840
|
if (this.engine.red > t && this.invoke("onTeamGoal", this.onTeamGoal, 1), this.engine.blue > n && this.invoke("onTeamGoal", this.onTeamGoal, 2), i && this.invoke("onPositionsReset", this.onPositionsReset), this.closed) break;
|
|
3310
3841
|
if (this.engine.tick % 2 == 0) {
|
|
3311
3842
|
let e = this.engine.snapshot();
|
|
3312
|
-
|
|
3843
|
+
if (e.surface?.length) {
|
|
3844
|
+
if (this.engine.tick % 6 == 0) {
|
|
3845
|
+
let t = de(e, this.epoch);
|
|
3846
|
+
for (let e of this.network.peers.values()) e.control?.readyState === "open" && e.control.bufferedAmount < 65536 && this.network.control(e, {
|
|
3847
|
+
...t,
|
|
3848
|
+
ack: this.inputs.get(e.id)?.seq ?? 0
|
|
3849
|
+
});
|
|
3850
|
+
}
|
|
3851
|
+
} else for (let t of this.network.peers.values()) for (let n of Lt(e, this.inputs.get(t.id)?.seq ?? 0, this.epoch)) this.network.fast(t, n);
|
|
3313
3852
|
}
|
|
3314
3853
|
this.accumulator -= 1e3 / 60;
|
|
3315
3854
|
}
|
|
@@ -3324,7 +3863,7 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3324
3863
|
if (!this.allowed(e) || !t || typeof t != "object") return;
|
|
3325
3864
|
let n = t, r = this.players.find((t) => t.peerId === e.id);
|
|
3326
3865
|
if (n.type === "join" && !r) {
|
|
3327
|
-
if (n.version !== 1 || n.engine !==
|
|
3866
|
+
if (n.version !== 1 || n.engine !== Le || typeof n.name != "string" || !n.name.trim() || n.name.length > 24) {
|
|
3328
3867
|
this.network.remove(e.id);
|
|
3329
3868
|
return;
|
|
3330
3869
|
}
|
|
@@ -3344,7 +3883,7 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3344
3883
|
type: "welcome",
|
|
3345
3884
|
epoch: this.epoch,
|
|
3346
3885
|
roomName: this.roomName,
|
|
3347
|
-
engine:
|
|
3886
|
+
engine: Le,
|
|
3348
3887
|
slot: t,
|
|
3349
3888
|
stadium: this.engine.source,
|
|
3350
3889
|
state: this.engine.snapshot(),
|
|
@@ -3364,7 +3903,7 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3364
3903
|
});
|
|
3365
3904
|
}
|
|
3366
3905
|
if (n.action === "chat" || this.traffic.allow(e.id, "action")) {
|
|
3367
|
-
if (n.action === "avatar" &&
|
|
3906
|
+
if (n.action === "avatar" && be(n.avatar)) {
|
|
3368
3907
|
r.avatar = n.avatar, this.recorder?.player(this.engine.tick, r.slot, r.name, r.avatarOverride ?? r.avatar), this.sync();
|
|
3369
3908
|
return;
|
|
3370
3909
|
}
|
|
@@ -3401,6 +3940,10 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3401
3940
|
return;
|
|
3402
3941
|
}
|
|
3403
3942
|
if (r.admin) {
|
|
3943
|
+
if (n.action === "surface" && typeof n.enabled == "boolean" && ["lobby", "finished"].includes(this.engine.phase)) {
|
|
3944
|
+
this.setSurfaceEnabled(n.enabled);
|
|
3945
|
+
return;
|
|
3946
|
+
}
|
|
3404
3947
|
if (n.action === "ban" || n.action === "clearBans") {
|
|
3405
3948
|
let t = this.players.find((e) => e.slot === n.slot);
|
|
3406
3949
|
if (n.action === "ban" && (!t || t === r || t.peerId === this.network.hostId)) return;
|
|
@@ -3419,7 +3962,7 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3419
3962
|
}
|
|
3420
3963
|
if (n.action === "teamColors" && (n.team === 1 || n.team === 2)) {
|
|
3421
3964
|
let e = n.palette;
|
|
3422
|
-
this.changeTeamColors(n.team, e === null ? null :
|
|
3965
|
+
this.changeTeamColors(n.team, e === null ? null : ge(e.angle, e.textColor, e.colors));
|
|
3423
3966
|
}
|
|
3424
3967
|
if (n.action === "kickRate" && Number.isInteger(n.value) && Number(n.value) >= 0 && Number(n.value) <= 6619135) {
|
|
3425
3968
|
let e = Number(n.value);
|
|
@@ -3447,10 +3990,10 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3447
3990
|
if (!this.allowed(e)) return;
|
|
3448
3991
|
let n = this.players.find((t) => t.peerId === e.id);
|
|
3449
3992
|
if (!n) return;
|
|
3450
|
-
let r =
|
|
3993
|
+
let r = It(t);
|
|
3451
3994
|
if (r.epoch !== this.epoch) return;
|
|
3452
3995
|
let i = this.inputs.get(e.id);
|
|
3453
|
-
(!i ||
|
|
3996
|
+
(!i || Ft(r.seq, i.seq)) && (this.inputs.set(e.id, {
|
|
3454
3997
|
seq: r.seq,
|
|
3455
3998
|
received: performance.now(),
|
|
3456
3999
|
keys: r.keys
|
|
@@ -3465,7 +4008,7 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3465
4008
|
value: n
|
|
3466
4009
|
};
|
|
3467
4010
|
if (this.recorder && (!this.recorder.canRecord(this.engine) || !this.recorder.command(r)) && this.finishRecording("Recording limit reached"), this.closed) throw Error("Room is closed");
|
|
3468
|
-
|
|
4011
|
+
at(this.engine, r);
|
|
3469
4012
|
}
|
|
3470
4013
|
roster() {
|
|
3471
4014
|
return this.players.map((e) => ({
|
|
@@ -3518,7 +4061,7 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3518
4061
|
return t ? this.playerCopy(t) : null;
|
|
3519
4062
|
}
|
|
3520
4063
|
setTeamColors(e, t, n, r) {
|
|
3521
|
-
this.changeTeamColors(e,
|
|
4064
|
+
this.changeTeamColors(e, ge(t, n, r));
|
|
3522
4065
|
}
|
|
3523
4066
|
changeTeamColors(e, t) {
|
|
3524
4067
|
if (this.closed) throw Error("Room is closed");
|
|
@@ -3536,7 +4079,7 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3536
4079
|
}
|
|
3537
4080
|
setPlayerAvatar(e, t) {
|
|
3538
4081
|
if (this.closed) throw Error("Room is closed");
|
|
3539
|
-
if (!
|
|
4082
|
+
if (!be(t)) throw Error("Avatar must be null or at most two visible characters.");
|
|
3540
4083
|
let n = this.players.find((t) => t.id === e);
|
|
3541
4084
|
n && (n.avatarOverride = t, this.recorder?.player(this.engine.tick, n.slot, n.name, t ?? n.avatar), this.sync());
|
|
3542
4085
|
}
|
|
@@ -3580,7 +4123,7 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3580
4123
|
try {
|
|
3581
4124
|
await this.network.updateBan("ban", r.peerId);
|
|
3582
4125
|
} catch (t) {
|
|
3583
|
-
throw t instanceof
|
|
4126
|
+
throw t instanceof Ot && this.bans.set(e, r.peerId), t;
|
|
3584
4127
|
}
|
|
3585
4128
|
this.bans.set(e, r.peerId), this.network.remove(r.peerId), this.invoke("onPlayerKicked", this.onPlayerKicked, i, a, !0, n);
|
|
3586
4129
|
}
|
|
@@ -3625,7 +4168,7 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3625
4168
|
}
|
|
3626
4169
|
sendAnnouncement(e, t, n, r, i) {
|
|
3627
4170
|
if (this.closed) throw Error("Room is closed");
|
|
3628
|
-
let a =
|
|
4171
|
+
let a = ye(e, n, r, i);
|
|
3629
4172
|
if (t != null && (!Number.isSafeInteger(t) || t < 0)) throw Error("Invalid announcement target");
|
|
3630
4173
|
if (t == null) this.network.broadcast(a);
|
|
3631
4174
|
else {
|
|
@@ -3656,12 +4199,18 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3656
4199
|
if (this.closed) throw Error("Room is closed");
|
|
3657
4200
|
this.engine.phase !== "lobby" && (e = !!e, this.engine.paused !== e && (this.command("pause", 0, +e), this.state(), e ? this.invoke("onGamePause", this.onGamePause, t) : this.invoke("onGameUnpause", this.onGameUnpause, t), this.invoke("onGamePauseChange", this.onGamePauseChange, e)));
|
|
3658
4201
|
}
|
|
4202
|
+
setSurfaceEnabled(e) {
|
|
4203
|
+
if (this.closed) throw Error("Room is closed");
|
|
4204
|
+
if (typeof e != "boolean") throw Error("Surface enabled must be a boolean");
|
|
4205
|
+
if (!["lobby", "finished"].includes(this.engine.phase)) throw Error("Stop the match before changing its surface");
|
|
4206
|
+
!!this.engine.snapshotSurface().length !== e && (this.command("surface", 0, +e), this.state(), this.sync());
|
|
4207
|
+
}
|
|
3659
4208
|
setKickRateLimit(e = 2, t = 0, n = 0) {
|
|
3660
4209
|
this.changeKickRateLimit(e, t, n, null);
|
|
3661
4210
|
}
|
|
3662
4211
|
changeKickRateLimit(e, t, n, r) {
|
|
3663
4212
|
if (this.closed) throw Error("Room is closed");
|
|
3664
|
-
let i =
|
|
4213
|
+
let i = ze(e, t, n);
|
|
3665
4214
|
i !== this.engine.kickRate && (this.command("kickRate", 0, i), this.state(), this.invoke("onKickRateLimitSet", this.onKickRateLimitSet, i & 255, i >>> 8 & 255, i >>> 16, r));
|
|
3666
4215
|
}
|
|
3667
4216
|
async setPassword(e) {
|
|
@@ -3706,7 +4255,7 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3706
4255
|
changeStadium(e, t) {
|
|
3707
4256
|
if (this.closed) throw Error("Room is closed");
|
|
3708
4257
|
if (!["lobby", "finished"].includes(this.engine.phase)) return;
|
|
3709
|
-
|
|
4258
|
+
Fe(e);
|
|
3710
4259
|
let n = ++this.stadiumSelection;
|
|
3711
4260
|
if (this.recorder && this.finishRecording("Stadium changed"), this.closed) throw Error("Room is closed");
|
|
3712
4261
|
if (["lobby", "finished"].includes(this.engine.phase)) {
|
|
@@ -3756,7 +4305,7 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3756
4305
|
};
|
|
3757
4306
|
}
|
|
3758
4307
|
get CollisionFlags() {
|
|
3759
|
-
return
|
|
4308
|
+
return Rt;
|
|
3760
4309
|
}
|
|
3761
4310
|
getDiscCount() {
|
|
3762
4311
|
return this.closed || this.engine.phase === "lobby" ? 0 : this.engine.stadium.discs.length + this.players.filter((e) => e.team !== 0).length;
|
|
@@ -3781,7 +4330,7 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3781
4330
|
n && this.changeDisc(this.engine.index(n.slot), t);
|
|
3782
4331
|
}
|
|
3783
4332
|
changeDisc(e, t) {
|
|
3784
|
-
let n =
|
|
4333
|
+
let n = Se(t), r = this.readDisc(e);
|
|
3785
4334
|
if (Object.entries(n).every(([e, t]) => r[e] === t)) return;
|
|
3786
4335
|
let i = {
|
|
3787
4336
|
tick: this.engine.tick,
|
|
@@ -3791,7 +4340,7 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3791
4340
|
properties: n
|
|
3792
4341
|
};
|
|
3793
4342
|
if (this.recorder && (!this.recorder.canRecord(this.engine) || !this.recorder.command(i)) && this.finishRecording("Recording limit reached"), this.closed) throw Error("Room is closed");
|
|
3794
|
-
|
|
4343
|
+
at(this.engine, i), this.state();
|
|
3795
4344
|
}
|
|
3796
4345
|
getPlayerDiscProperties(e) {
|
|
3797
4346
|
if (this.closed || this.engine.phase === "lobby") return null;
|
|
@@ -3805,7 +4354,7 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3805
4354
|
if (this.closed) throw Error("Room is closed");
|
|
3806
4355
|
if (this.finishingRecording) throw Error("Recording completion is in progress");
|
|
3807
4356
|
if (this.recorder) throw Error("Recording is already active");
|
|
3808
|
-
this.recorder = new
|
|
4357
|
+
this.recorder = new ot(this.engine, this.players.map((e) => ({
|
|
3809
4358
|
slot: e.slot,
|
|
3810
4359
|
name: e.name,
|
|
3811
4360
|
avatar: e.avatarOverride ?? e.avatar
|
|
@@ -3835,13 +4384,11 @@ var ft = Object.freeze({ ...C }), pt = class e {
|
|
|
3835
4384
|
}
|
|
3836
4385
|
}
|
|
3837
4386
|
};
|
|
3838
|
-
|
|
3839
|
-
//#region src/sdk/config.ts
|
|
3840
|
-
function mt(e) {
|
|
4387
|
+
function Bt(e) {
|
|
3841
4388
|
if (!e || typeof e != "object" || Array.isArray(e)) throw Error("Room configuration must be an object");
|
|
3842
4389
|
let t = { ...e }, n = t.maxPlayers ?? 12;
|
|
3843
4390
|
if (typeof n != "number" || !Number.isFinite(n) || !Number.isInteger(n)) throw Error("maxPlayers must be a finite integer");
|
|
3844
|
-
return
|
|
4391
|
+
return me({
|
|
3845
4392
|
...t,
|
|
3846
4393
|
roomName: t.roomName ?? "Headless Room",
|
|
3847
4394
|
playerName: t.playerName ?? "Host",
|
|
@@ -3851,9 +4398,7 @@ function mt(e) {
|
|
|
3851
4398
|
password: t.password ?? ""
|
|
3852
4399
|
});
|
|
3853
4400
|
}
|
|
3854
|
-
|
|
3855
|
-
//#region src/sdk/command-queue.ts
|
|
3856
|
-
var ht = class {
|
|
4401
|
+
var Vt = class {
|
|
3857
4402
|
onError;
|
|
3858
4403
|
pending = [];
|
|
3859
4404
|
active;
|
|
@@ -3906,7 +4451,7 @@ var ht = class {
|
|
|
3906
4451
|
this.active?.reject(e);
|
|
3907
4452
|
for (let t of this.pending.splice(0)) t.reject(e);
|
|
3908
4453
|
}
|
|
3909
|
-
},
|
|
4454
|
+
}, Ht = [
|
|
3910
4455
|
"sendChat",
|
|
3911
4456
|
"sendAnnouncement",
|
|
3912
4457
|
"setPlayerAdmin",
|
|
@@ -3928,22 +4473,23 @@ var ht = class {
|
|
|
3928
4473
|
"setRequireRecaptcha",
|
|
3929
4474
|
"reorderPlayers",
|
|
3930
4475
|
"setKickRateLimit",
|
|
4476
|
+
"setSurfaceEnabled",
|
|
3931
4477
|
"setPlayerAvatar",
|
|
3932
4478
|
"setDiscProperties",
|
|
3933
4479
|
"setPlayerDiscProperties"
|
|
3934
4480
|
];
|
|
3935
|
-
function
|
|
4481
|
+
function Ut(e, t) {
|
|
3936
4482
|
let n = Object.create(null);
|
|
3937
4483
|
t && Object.defineProperty(n, "closed", {
|
|
3938
4484
|
enumerable: !0,
|
|
3939
4485
|
value: t
|
|
3940
4486
|
});
|
|
3941
|
-
let r = new
|
|
4487
|
+
let r = new Vt((t) => {
|
|
3942
4488
|
let n = e.onError?.(String(t));
|
|
3943
4489
|
n instanceof Promise && n.catch(() => {});
|
|
3944
4490
|
});
|
|
3945
4491
|
e.signal.addEventListener("abort", () => r.close(), { once: !0 }), e.signal.aborted && r.close();
|
|
3946
|
-
for (let t of
|
|
4492
|
+
for (let t of Ht) Object.defineProperty(n, t, {
|
|
3947
4493
|
enumerable: !0,
|
|
3948
4494
|
value: (...n) => {
|
|
3949
4495
|
try {
|
|
@@ -4026,26 +4572,19 @@ function _t(e, t) {
|
|
|
4026
4572
|
}
|
|
4027
4573
|
}), Object.preventExtensions(n);
|
|
4028
4574
|
}
|
|
4029
|
-
|
|
4030
|
-
|
|
4031
|
-
function vt(e) {
|
|
4032
|
-
return Qe(e);
|
|
4575
|
+
function Wt(e) {
|
|
4576
|
+
return st(e);
|
|
4033
4577
|
}
|
|
4034
|
-
|
|
4035
|
-
//#region src/sdk/stadium.ts
|
|
4036
|
-
function yt(e) {
|
|
4578
|
+
function Gt(e) {
|
|
4037
4579
|
if (typeof e != "string") throw TypeError("Stadium source must be a string");
|
|
4038
|
-
let t =
|
|
4580
|
+
let t = Fe(e);
|
|
4039
4581
|
return Object.freeze({
|
|
4040
4582
|
name: t.name,
|
|
4041
4583
|
canBeStored: t.canBeStored,
|
|
4042
4584
|
warnings: Object.freeze([...t.warnings])
|
|
4043
4585
|
});
|
|
4044
4586
|
}
|
|
4045
|
-
|
|
4046
|
-
|
|
4047
|
-
async function bt(e = {}, t = {}) {
|
|
4048
|
-
return _t(await pt.create(mt(e), void 0, t.signal));
|
|
4587
|
+
async function Kt(e = {}, t = {}) {
|
|
4588
|
+
return Ut(await zt.create(Bt(e), void 0, t.signal));
|
|
4049
4589
|
}
|
|
4050
|
-
|
|
4051
|
-
export { bt as createRoom, vt as readReplay, yt as validateStadium };
|
|
4590
|
+
export { Kt as createRoom, Wt as readReplay, Gt as validateStadium };
|