@latticexyz/utils 2.2.18-9fa07c8489f1fbf167d0db01cd9aaa645a29c8e2 → 2.2.18-c44207f620a38653497b78db0b71f5de7bc1a940

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/dist/index.js CHANGED
@@ -1,870 +1,4 @@
1
- // src/arrays.ts
2
- function isNotEmpty(array) {
3
- if (array.length === 0) return false;
4
- return true;
5
- }
6
- function filterNullishValues(array) {
7
- return array.filter((value) => value != null);
8
- }
9
-
10
- // src/deferred.ts
11
- function deferred() {
12
- let resolve = null;
13
- let reject = null;
14
- const promise = new Promise((r, rj) => {
15
- resolve = (t) => r(t);
16
- reject = (e) => rj(e);
17
- });
18
- return [resolve, reject, promise];
19
- }
20
-
21
- // src/mobx.ts
22
- import { reaction } from "mobx";
23
- async function awaitValue(comp) {
24
- const [resolve, , promise] = deferred();
25
- const dispose = reaction(
26
- () => comp.get(),
27
- (value2) => {
28
- if (value2) {
29
- resolve(value2);
30
- }
31
- },
32
- { fireImmediately: true }
33
- );
34
- const value = await promise;
35
- dispose();
36
- return value;
37
- }
38
-
39
- // src/guards.ts
40
- function isObject(c) {
41
- return typeof c === "object" && !Array.isArray(c) && c !== null;
42
- }
43
- function isFunction(c) {
44
- return c instanceof Function;
45
- }
46
-
47
- // src/proxy.ts
48
- import { reaction as reaction2 } from "mobx";
49
- import DeepProxy from "proxy-deep";
50
- function deepAccess(target, path) {
51
- if (path.length === 0) return target;
52
- if (path.length === 1) return target[path[0]];
53
- const [next, ...rest] = path;
54
- const nextTarget = target[next];
55
- if (!isObject(nextTarget)) throw new Error("Path does not exist on the target");
56
- return deepAccess(nextTarget, rest);
57
- }
58
- function cacheUntilReady(target) {
59
- const callQueue = [];
60
- const proxiedTarget = new DeepProxy(
61
- {},
62
- {
63
- get(_t, prop) {
64
- const targetReady = target.get();
65
- if (targetReady) {
66
- if (prop === "proxied") return false;
67
- return Reflect.get(targetReady, prop);
68
- } else {
69
- if (prop === "proxied") return true;
70
- if (prop === "name") return "ProxiedTarget";
71
- if (prop === "toJSON") return () => ({ proxied: true });
72
- return this.nest(() => void 0);
73
- }
74
- },
75
- apply(_, thisArg, args) {
76
- const targetReady = target.get();
77
- if (targetReady) {
78
- const targetFunc = deepAccess(targetReady, this.path);
79
- if (!isFunction(targetFunc)) throw new Error("Target is not callable");
80
- return Reflect.apply(targetFunc, thisArg, args);
81
- } else {
82
- const [resolve, reject, promise] = deferred();
83
- callQueue.push({ path: this.path, args, resolve, reject });
84
- return promise;
85
- }
86
- }
87
- }
88
- );
89
- reaction2(
90
- () => target.get(),
91
- (targetReady) => {
92
- if (!targetReady) return;
93
- const queuedCalls = callQueue.splice(0);
94
- for (const { path, args, resolve, reject } of queuedCalls) {
95
- const target2 = deepAccess(targetReady, path);
96
- if (args && isFunction(target2)) {
97
- (async () => {
98
- try {
99
- resolve(await target2(...args));
100
- } catch (e) {
101
- reject(e);
102
- }
103
- })();
104
- } else {
105
- resolve(target2);
106
- }
107
- }
108
- }
109
- );
110
- return proxiedTarget;
111
- }
112
-
113
- // src/enums.ts
114
- function numValues(enm) {
115
- const nums = [];
116
- for (const val of Object.values(enm)) {
117
- if (!isNaN(Number(val))) {
118
- nums.push(Number(val));
119
- }
120
- }
121
- return nums;
122
- }
123
-
124
- // src/objects.ts
125
- function mapObject(source, valueMap) {
126
- const target = {};
127
- for (const key in source) {
128
- target[key] = valueMap(source[key], key);
129
- }
130
- return target;
131
- }
132
-
133
- // src/random.ts
134
- function random(to, from = 0) {
135
- return Math.floor(Math.random() * (to - from + 1)) + from;
136
- }
137
- function pickRandom(array) {
138
- return array[random(array.length - 1)];
139
- }
140
-
141
- // src/rx.ts
142
- import {
143
- concatMap,
144
- delay,
145
- filter,
146
- first,
147
- mergeMap,
148
- of,
149
- pipe,
150
- ReplaySubject,
151
- scan,
152
- timestamp
153
- } from "rxjs";
154
- import { computed, observable, reaction as reaction3, runInAction, toJS } from "mobx";
155
- function filterNullish() {
156
- return pipe(
157
- filter((x) => x != null)
158
- );
159
- }
160
- function awaitPromise() {
161
- return pipe(concatMap((x) => x));
162
- }
163
- function stretch(spacingDelayMs) {
164
- return pipe(
165
- timestamp(),
166
- scan((acc, curr) => {
167
- let delay2 = 0;
168
- if (acc !== null) {
169
- const timeDelta = curr.timestamp - acc.timestamp;
170
- delay2 = timeDelta > spacingDelayMs ? 0 : spacingDelayMs - timeDelta;
171
- }
172
- return {
173
- timestamp: curr.timestamp,
174
- delay: delay2,
175
- value: curr.value
176
- };
177
- }, null),
178
- filterNullish(),
179
- mergeMap((i) => of(i.value).pipe(delay(i.delay)), 1)
180
- );
181
- }
182
- function observableToComputed(obs) {
183
- return computed(() => obs.get());
184
- }
185
- function computedToStream(comp) {
186
- const stream = new ReplaySubject(1);
187
- reaction3(
188
- () => comp.get(),
189
- (value) => {
190
- if (value != null) stream.next(value);
191
- },
192
- { fireImmediately: true }
193
- );
194
- return stream;
195
- }
196
- function observableToStream(obs) {
197
- const stream = new ReplaySubject(1);
198
- reaction3(
199
- () => toJS(obs),
200
- (value) => {
201
- if (value != null) stream.next(value);
202
- },
203
- { fireImmediately: true }
204
- );
205
- return stream;
206
- }
207
- function streamToComputed(stream$) {
208
- const value = observable.box();
209
- stream$.subscribe((val) => runInAction(() => value.set(val)));
210
- return computed(() => value.get());
211
- }
212
- async function streamToDefinedComputed(stream$) {
213
- const value = observable.box();
214
- stream$.subscribe((val) => runInAction(() => value.set(val)));
215
- const computedValue = computed(() => value.get());
216
- await awaitValue(computedValue);
217
- return computedValue;
218
- }
219
- async function awaitStreamValue(stream$, predicate = (value) => value != null) {
220
- const [resolve, , promise] = deferred();
221
- stream$.pipe(first(predicate)).subscribe(resolve);
222
- return promise;
223
- }
224
- async function streamToWrappedValue(stream$) {
225
- const value = {};
226
- stream$.subscribe((v) => value.current = v);
227
- value.current = await awaitStreamValue(stream$);
228
- return value;
229
- }
230
-
231
- // src/uuid.ts
232
- var uuid = function() {
233
- const rand = _getRandomInt, hex = _hexAligner;
234
- return hex(rand(32), 8) + // time_low
235
- "-" + hex(rand(16), 4) + // time_mid
236
- "-" + hex(16384 | rand(12), 4) + // time_hi_and_version
237
- "-" + hex(32768 | rand(14), 4) + // clock_seq_hi_and_reserved clock_seq_low
238
- "-" + hex(rand(48), 12);
239
- };
240
- var _getRandomInt = function(x) {
241
- if (x < 0 || x > 53) {
242
- return NaN;
243
- }
244
- const n = 0 | Math.random() * 1073741824;
245
- return x > 30 ? n + (0 | Math.random() * (1 << x - 30)) * 1073741824 : n >>> 30 - x;
246
- };
247
- var _hexAligner = function(num, length) {
248
- let str = num.toString(16), i = length - str.length, z = "0";
249
- for (; i > 0; i >>>= 1, z += z) {
250
- if (i & 1) {
251
- str = z + str;
252
- }
253
- }
254
- return str;
255
- };
256
-
257
- // src/sleep.ts
258
- function sleep(timeout, returns) {
259
- return new Promise((resolve) => setTimeout(() => resolve(returns), timeout));
260
- }
261
-
262
- // src/promise.ts
263
- var range = function* (total = 0, step = 1, from = 0) {
264
- for (let i = 0; i < total; yield from + i++ * step) {
265
- }
266
- };
267
- async function rejectAfter(ms, msg) {
268
- await sleep(ms);
269
- throw new Error(msg);
270
- }
271
- var timeoutAfter = async (promise, ms, timeoutMsg) => {
272
- return Promise.race([promise, rejectAfter(ms, timeoutMsg)]);
273
- };
274
- var callWithRetry = (fn, args = [], maxRetries = 10, retryInterval = 1e3) => {
275
- const [resolve, reject, promise] = deferred();
276
- const process = async () => {
277
- let res;
278
- for (let i = 0; i < maxRetries; i++) {
279
- try {
280
- res = await fn(...args);
281
- resolve(res);
282
- break;
283
- } catch (e) {
284
- if (i < maxRetries - 1) {
285
- console.info("[CallWithRetry Failed] attempt number=" + i, fn);
286
- console.error(e);
287
- await sleep(Math.min(retryInterval * 2 ** i + Math.random() * 100, 15e3));
288
- } else {
289
- reject(e);
290
- }
291
- }
292
- }
293
- };
294
- process();
295
- return promise;
296
- };
297
-
298
- // src/iterable.ts
299
- function makeIterable(iterator) {
300
- const iterable = {
301
- ...iterator,
302
- [Symbol.iterator]() {
303
- return this;
304
- }
305
- };
306
- return iterable;
307
- }
308
- function concatIterators(first2, second) {
309
- if (!second) return makeIterable(first2);
310
- return makeIterable({
311
- next() {
312
- const next = first2.next();
313
- if (!next.done) return next;
314
- return second.next();
315
- }
316
- });
317
- }
318
- function mergeIterators(iteratorA, iteratorB) {
319
- const iterator = {
320
- next() {
321
- const nextA = iteratorA.next();
322
- const nextB = iteratorB.next();
323
- if (nextA.done && nextB.done) return { done: true, value: null };
324
- return { value: [nextA.value, nextB.value] };
325
- }
326
- };
327
- return makeIterable(iterator);
328
- }
329
- function transformIterator(iterator, transform) {
330
- return makeIterable({
331
- next() {
332
- const { done, value } = iterator.next();
333
- return { done, value: done ? value : transform(value) };
334
- }
335
- });
336
- }
337
- function arrayToIterator(array) {
338
- let i = 0;
339
- const iterator = {
340
- next() {
341
- const done = i >= array.length;
342
- if (done) return { done, value: null };
343
- return { value: array[i++] };
344
- }
345
- };
346
- return makeIterable(iterator);
347
- }
348
-
349
- // src/area.ts
350
- function areaContains(area, coord) {
351
- return coord.x >= area.x && coord.y >= area.y && coord.x < area.x + area.width && coord.y < area.y + area.height;
352
- }
353
- function coordsOf(area) {
354
- const coords = [];
355
- for (let dx = 0; dx < area.width; dx++) {
356
- for (let dy = 0; dy < area.height; dy++) {
357
- coords.push({ x: area.x + dx, y: area.y + dy });
358
- }
359
- }
360
- return coords;
361
- }
362
-
363
- // src/worker.ts
364
- import { fromEvent, map } from "rxjs";
365
- function fromWorker(worker, input$) {
366
- input$.subscribe((event) => worker.postMessage(event));
367
- return fromEvent(worker, "message").pipe(map((e) => e.data));
368
- }
369
- function runWorker(worker) {
370
- const input$ = fromEvent(self, "message");
371
- const output$ = worker.work(input$.pipe(map((event) => event.data)));
372
- output$.subscribe((event) => self.postMessage(event));
373
- }
374
-
375
- // src/pack.ts
376
- function rightMask(input, keep) {
377
- return input & 2 ** keep - 1;
378
- }
379
- function pack(numbers, bitsPerNumber) {
380
- if (bitsPerNumber.reduce((acc, curr) => acc + curr, 0) > 32) {
381
- throw new Error("JS pretends integers are 32 bit when bitshifts are involved");
382
- }
383
- if (numbers.length !== bitsPerNumber.length) throw new Error("Arrays' lengths must match");
384
- for (let i = 0; i < numbers.length; i++) {
385
- if (numbers[i] < 0) {
386
- throw new Error("Underflow: can only pack unsigned integer");
387
- }
388
- if (numbers[i] > 2 ** bitsPerNumber[i] - 1) {
389
- const error = `Overflow: ${numbers[i]} does not fit in ${bitsPerNumber[i]} bits`;
390
- throw new Error(error);
391
- }
392
- }
393
- let packed = 0;
394
- for (let i = 0; i < numbers.length; i++) {
395
- packed = packed << bitsPerNumber[i] | numbers[i];
396
- }
397
- return packed;
398
- }
399
- function unpack(packed, bitsPerNumber) {
400
- const numbers = [];
401
- let shiftedPacked = packed;
402
- for (let i = bitsPerNumber.length - 1; i >= 0; i--) {
403
- numbers.unshift(rightMask(shiftedPacked, bitsPerNumber[i]));
404
- shiftedPacked = shiftedPacked >>> bitsPerNumber[i];
405
- }
406
- return numbers;
407
- }
408
- function packTuple(numbers) {
409
- return pack(numbers, [8, 24]);
410
- }
411
- function unpackTuple(packed) {
412
- return unpack(packed, [8, 24]);
413
- }
414
-
415
- // src/CoordMap.ts
416
- var LOWER_HALF_MASK = 2 ** 16 - 1;
417
- var MAX_SUPPORTED = 2 ** 15 - 1;
418
- function subtract(from, subtract2) {
419
- const result = new CoordMap();
420
- for (const coord of from.coords()) {
421
- if (subtract2.get(coord)) continue;
422
- result.set(coord, true);
423
- }
424
- return result;
425
- }
426
- function coordToKey(coord) {
427
- const key = coord.x << 16 | coord.y & LOWER_HALF_MASK;
428
- return key;
429
- }
430
- function keyToCoord(key) {
431
- const x = key >> 16;
432
- const y = key << 16 >> 16;
433
- return { x, y };
434
- }
435
- var CoordMap = class _CoordMap {
436
- constructor(props) {
437
- this.map = /* @__PURE__ */ new Map();
438
- this.defaultValue = props?.defaultValue;
439
- }
440
- static from(coordMapLike) {
441
- const coordMap = new _CoordMap();
442
- coordMap.map = coordMapLike.map;
443
- coordMap.defaultValue = coordMapLike.defaultValue;
444
- return coordMap;
445
- }
446
- set(coord, value) {
447
- if (coord.x > MAX_SUPPORTED || coord.x < -1 * MAX_SUPPORTED || coord.y > MAX_SUPPORTED || coord.y < -1 * MAX_SUPPORTED) {
448
- throw new Error(`CoordMap only supports coords up to ${MAX_SUPPORTED}`);
449
- }
450
- return this.map.set(coordToKey(coord), value);
451
- }
452
- get(coord) {
453
- return this.map.get(coordToKey(coord)) ?? this.defaultValue;
454
- }
455
- keys() {
456
- return this.map.keys();
457
- }
458
- coords() {
459
- return transformIterator(this.map.keys(), (key) => keyToCoord(key));
460
- }
461
- entries() {
462
- return this.map.entries();
463
- }
464
- toArray() {
465
- const entries = Array.from(this.map.entries());
466
- return entries.map(([key, value]) => [keyToCoord(key), value]);
467
- }
468
- values() {
469
- return this.map.values();
470
- }
471
- delete(coord) {
472
- return this.map.delete(coordToKey(coord));
473
- }
474
- has(coord) {
475
- return this.map.has(coordToKey(coord));
476
- }
477
- clear() {
478
- for (const key of this.map.keys()) {
479
- this.map.delete(key);
480
- }
481
- }
482
- get size() {
483
- return this.map.size;
484
- }
485
- };
486
-
487
- // src/VoxelCoordMap.ts
488
- function coordToKey2(coord) {
489
- return `${coord.x}/${coord.y}/${coord.z}`;
490
- }
491
- function keyToCoord2(key) {
492
- const fragments = key.split("/");
493
- return { x: Number(fragments[0]), y: Number(fragments[1]), z: Number(fragments[2]) };
494
- }
495
- var VoxelCoordMap = class _VoxelCoordMap {
496
- constructor(props) {
497
- this.map = /* @__PURE__ */ new Map();
498
- this.defaultValue = props?.defaultValue;
499
- }
500
- static from(coordMapLike) {
501
- const coordMap = new _VoxelCoordMap();
502
- coordMap.map = coordMapLike.map;
503
- coordMap.defaultValue = coordMapLike.defaultValue;
504
- return coordMap;
505
- }
506
- set(coord, value) {
507
- return this.map.set(coordToKey2(coord), value);
508
- }
509
- get(coord) {
510
- return this.map.get(coordToKey2(coord)) ?? this.defaultValue;
511
- }
512
- keys() {
513
- return this.map.keys();
514
- }
515
- coords() {
516
- return transformIterator(this.map.keys(), (key) => keyToCoord2(key));
517
- }
518
- entries() {
519
- return this.map.entries();
520
- }
521
- toArray() {
522
- const entries = Array.from(this.map.entries());
523
- return entries.map(([key, value]) => [keyToCoord2(key), value]);
524
- }
525
- values() {
526
- return this.map.values();
527
- }
528
- delete(coord) {
529
- return this.map.delete(coordToKey2(coord));
530
- }
531
- has(coord) {
532
- return this.map.has(coordToKey2(coord));
533
- }
534
- clear() {
535
- for (const key of this.map.keys()) {
536
- this.map.delete(key);
537
- }
538
- }
539
- get size() {
540
- return this.map.size;
541
- }
542
- };
543
-
544
- // src/eth.ts
545
- function padToBitLength(input, bits) {
546
- if (input.substring(0, 2) == "0x") input = input.substring(2);
547
- const length = bits / 4;
548
- input = input.padStart(length, "0");
549
- input = input.substring(input.length - length);
550
- return `0x${input}`;
551
- }
552
- function toEthAddress(input) {
553
- return padToBitLength(input, 160);
554
- }
555
- function to256BitString(input) {
556
- return padToBitLength(input, 256);
557
- }
558
- function extractEncodedArguments(input) {
559
- if (input[0] !== "0" && input[1] !== "x") throw new Error("Invalid hex string");
560
- return "0x" + input.substring(10);
561
- }
562
-
563
- // src/cubic.ts
564
- var RND_A = 134775813;
565
- var RND_B = 1103515245;
566
- var ACCURACY = 1e3;
567
- function randomize(seed, x, y) {
568
- return (((x ^ y) * RND_A ^ seed + x) * (RND_B * x << 16 ^ RND_B * y - RND_A) >>> 0) / 4294967295;
569
- }
570
- function tile(coordinate, period) {
571
- if (coordinate < 0) while (coordinate < 0) coordinate += period;
572
- return coordinate % period;
573
- }
574
- function interpolate(a, b, c, d, x, s, scale) {
575
- const p = d - c - (a - b);
576
- return (b * Math.pow(s, 3) + x * (c * Math.pow(s, 2) + a * s * (-s + x) + x * (-(b + p) * s + p * x))) * scale;
577
- }
578
- function cubicNoiseConfig(seed, octave, scale, periodX = Number.MAX_SAFE_INTEGER, periodY = Number.MAX_SAFE_INTEGER) {
579
- return {
580
- seed: Math.floor(seed * Number.MAX_SAFE_INTEGER),
581
- periodX,
582
- periodY,
583
- octave,
584
- scale
585
- };
586
- }
587
- function cubicNoiseSample1(config, x) {
588
- const xi = Math.floor(x);
589
- const lerp = x - xi;
590
- return interpolate(
591
- randomize(config.seed, tile(xi - 1, config.periodX), 0),
592
- randomize(config.seed, tile(xi, config.periodX), 0),
593
- randomize(config.seed, tile(xi + 1, config.periodX), 0),
594
- randomize(config.seed, tile(xi + 2, config.periodX), 0),
595
- lerp,
596
- 1,
597
- 1
598
- ) * 0.666666 + 0.166666;
599
- }
600
- function cubicNoiseSample2({ octave, periodX, periodY, seed, scale }, x, y) {
601
- const xi = Math.floor(x / octave);
602
- const lerpX = Math.floor(x * ACCURACY / octave) - xi * ACCURACY;
603
- const yi = Math.floor(y / octave);
604
- const lerpY = Math.floor(y * ACCURACY / octave) - yi * ACCURACY;
605
- const x0 = tile(xi - 1, periodX);
606
- const x1 = tile(xi, periodX);
607
- const x2 = tile(xi + 1, periodX);
608
- const x3 = tile(xi + 2, periodX);
609
- const xSamples = new Array(4);
610
- for (let i = 0; i < 4; ++i) {
611
- const y2 = tile(yi - 1 + i, periodY);
612
- xSamples[i] = interpolate(
613
- randomize(seed, x0, y2),
614
- randomize(seed, x1, y2),
615
- randomize(seed, x2, y2),
616
- randomize(seed, x3, y2),
617
- lerpX,
618
- ACCURACY,
619
- 1
620
- );
621
- }
622
- return Math.floor(
623
- interpolate(xSamples[0], xSamples[1], xSamples[2], xSamples[3], lerpY, ACCURACY, scale) / Math.pow(ACCURACY, 6)
624
- );
625
- }
626
-
627
- // src/console.ts
628
- var TOPICS_KEY = "mud-logger-topics";
629
- function enableLogger() {
630
- const windowConsole = window.console;
631
- let filtersActive = Boolean(localStorage.getItem(TOPICS_KEY));
632
- const topicsString = localStorage.getItem(TOPICS_KEY);
633
- let topics = topicsString ? JSON.parse(topicsString) : [];
634
- function log(...logs) {
635
- if (filtersActive) return;
636
- windowConsole.log(...logs);
637
- }
638
- function logWithTopic(topic, ...logs) {
639
- if (!filtersActive || topics.includes(topic)) {
640
- windowConsole.log(`--- BETTER CONSOLE / TOPIC ${topic} ---`);
641
- windowConsole.log(...logs);
642
- }
643
- }
644
- function enableFilters() {
645
- localStorage.setItem(TOPICS_KEY, JSON.stringify([]));
646
- filtersActive = true;
647
- }
648
- function disableFilters() {
649
- localStorage.removeItem(TOPICS_KEY);
650
- filtersActive = false;
651
- }
652
- function addTopic(topic) {
653
- topics.push(topic);
654
- localStorage.setItem(TOPICS_KEY, JSON.stringify(topics));
655
- }
656
- function removeTopic(topic) {
657
- topics = topics.filter((t) => t !== topic);
658
- localStorage.setItem(TOPICS_KEY, JSON.stringify(topics));
659
- }
660
- function resetTopics() {
661
- topics = [];
662
- localStorage.setItem(TOPICS_KEY, JSON.stringify(topics));
663
- }
664
- const logger = {
665
- ...windowConsole,
666
- log,
667
- logWithTopic,
668
- enableFilters,
669
- disableFilters,
670
- addTopic,
671
- removeTopic,
672
- resetTopics
673
- };
674
- window.logger = logger;
675
- window.console = logger;
676
- return logger;
677
- }
678
-
679
- // src/distance.ts
680
- function euclidean(a, b) {
681
- if (a.length !== b.length) throw new Error("points must have same dimension");
682
- return Math.sqrt(a.reduce((acc, _, i) => acc + Math.pow(a[i] - b[i], 2), 0));
683
- }
684
-
685
- // src/math.ts
686
- function roundTowardsZero(x) {
687
- const sign = x < 0 ? -1 : 1;
688
- return sign * Math.floor(Math.abs(x));
689
- }
690
-
691
- // src/v2/arrayToHex.ts
692
- var arrayToHex = (array) => `0x${[...new Uint8Array(array)].map((x) => x.toString(16).padStart(2, "0")).join("")}`;
693
-
694
- // src/v2/bytesToString.ts
695
- var bytesToString = (bytes) => [...bytes].map((x) => String.fromCharCode(x)).join("");
696
-
697
- // src/v2/isHex.ts
698
- function isHex(hex) {
699
- return /^(0x)?([\da-f]{2})*$/i.test(hex);
700
- }
701
-
702
- // src/v2/hexToArray.ts
703
- var hexToArray = (hex) => {
704
- if (!isHex(hex)) {
705
- console.error("Invalid hex string", hex);
706
- throw new Error("Invalid hex string");
707
- }
708
- const bytes = hex.match(/[\da-f]{2}/gi);
709
- if (!bytes) return new Uint8Array([]);
710
- return new Uint8Array(bytes.map((byte) => parseInt(byte, 16)));
711
- };
712
-
713
- // src/v2/stringToBytes.ts
714
- var stringToBytes16 = (str) => {
715
- if (str.length > 16) throw new Error("string too long");
716
- return new Uint8Array(16).map((v, i) => str.charCodeAt(i));
717
- };
718
- var stringToBytes32 = (str) => {
719
- if (str.length > 32) throw new Error("string too long");
720
- return new Uint8Array(32).map((v, i) => str.charCodeAt(i));
721
- };
722
-
723
- // src/bytes.ts
724
- function formatHex(hex) {
725
- if (hex.substring(0, 2) == "0x") hex = hex.substring(2);
726
- const prefix = hex.length % 2 !== 0 ? "0x0" : "0x";
727
- return prefix + hex;
728
- }
729
- function hexStringToUint8Array(hexString) {
730
- return hexToArray(hexString);
731
- }
732
- function Uint8ArrayToHexString(data) {
733
- if (data.length === 0) return "0x00";
734
- return formatHex(data.reduce((str, byte) => str + byte.toString(16).padStart(2, "0"), ""));
735
- }
736
- function concatUint8Arrays(...arrays) {
737
- return Uint8Array.from(
738
- arrays.reduce((acc, curr) => {
739
- return [...acc, ...curr];
740
- }, [])
741
- );
742
- }
743
- function splitUint8Arrays(data, byteLengths) {
744
- const arrays = [];
745
- let i = 0;
746
- for (const length of byteLengths) {
747
- const array = new Uint8Array(length);
748
- arrays.push(array);
749
- for (let j = 0; j < length; j++) {
750
- array[j] = data[i];
751
- i++;
752
- }
753
- }
754
- return arrays;
755
- }
756
- function Int32ArrayToUint8Array(input) {
757
- const buffer = new ArrayBuffer(input.length * 4);
758
- const int32arr = new Int32Array(buffer);
759
- for (let i = 0; i < input.length; i++) {
760
- int32arr[i] = input[i];
761
- }
762
- return new Uint8Array(buffer);
763
- }
764
- function Uint8ArrayToInt32Array(input) {
765
- return [...new Int32Array(input.buffer)];
766
- }
767
- function ethAddressToUint8Array(address) {
768
- return hexStringToUint8Array(toEthAddress(address));
769
- }
770
- function createToInt(size) {
771
- if (size < 2) {
772
- throw new Error("Minimum size is 2");
773
- } else if (size > 64) {
774
- throw new Error("Maximum size is 64");
775
- }
776
- const maxValue = 2 ** (size - 1) - 1;
777
- const minValue = -maxValue - 1;
778
- return (value) => {
779
- value = value << 0;
780
- if (value > maxValue || value < minValue) {
781
- console.log("value", value, maxValue, minValue, value > maxValue, value < minValue);
782
- throw new Error(`Int${size} overflow`);
783
- }
784
- if (value < 0) {
785
- return 2 ** size + value;
786
- } else {
787
- return value;
788
- }
789
- };
790
- }
791
- var toInt32 = createToInt(32);
792
- export {
793
- CoordMap,
794
- Int32ArrayToUint8Array,
795
- Uint8ArrayToHexString,
796
- Uint8ArrayToInt32Array,
797
- VoxelCoordMap,
798
- areaContains,
799
- arrayToHex,
800
- arrayToIterator,
801
- awaitPromise,
802
- awaitStreamValue,
803
- awaitValue,
804
- bytesToString,
805
- cacheUntilReady,
806
- callWithRetry,
807
- computedToStream,
808
- concatIterators,
809
- concatUint8Arrays,
810
- coordToKey,
811
- coordsOf,
812
- createToInt,
813
- cubicNoiseConfig,
814
- cubicNoiseSample1,
815
- cubicNoiseSample2,
816
- deferred,
817
- enableLogger,
818
- ethAddressToUint8Array,
819
- euclidean,
820
- extractEncodedArguments,
821
- filterNullish,
822
- filterNullishValues,
823
- formatHex,
824
- fromWorker,
825
- hexStringToUint8Array,
826
- hexToArray,
827
- interpolate,
828
- isFunction,
829
- isHex,
830
- isNotEmpty,
831
- isObject,
832
- keyToCoord,
833
- makeIterable,
834
- mapObject,
835
- mergeIterators,
836
- numValues,
837
- observableToComputed,
838
- observableToStream,
839
- pack,
840
- packTuple,
841
- padToBitLength,
842
- pickRandom,
843
- random,
844
- randomize,
845
- range,
846
- rejectAfter,
847
- roundTowardsZero,
848
- runWorker,
849
- sleep,
850
- splitUint8Arrays,
851
- streamToComputed,
852
- streamToDefinedComputed,
853
- streamToWrappedValue,
854
- stretch,
855
- stringToBytes16,
856
- stringToBytes32,
857
- subtract,
858
- tile,
859
- timeoutAfter,
860
- to256BitString,
861
- toEthAddress,
862
- toInt32,
863
- transformIterator,
864
- unpack,
865
- unpackTuple,
866
- uuid
867
- };
1
+ function hr(r){return r.length!==0}function Ar(r){return r.filter(e=>e!=null)}function p(){let r=null,e=null,t=new Promise((n,o)=>{r=i=>n(i),e=i=>o(i)});return[r,e,t]}import{reaction as L}from"mobx";async function N(r){let[e,,t]=p(),n=L(()=>r.get(),i=>{i&&e(i)},{fireImmediately:!0}),o=await t;return n(),o}function R(r){return typeof r=="object"&&!Array.isArray(r)&&r!==null}function V(r){return r instanceof Function}import{reaction as G}from"mobx";import q from"proxy-deep";function O(r,e){if(e.length===0)return r;if(e.length===1)return r[e[0]];let[t,...n]=e,o=r[t];if(!R(o))throw new Error("Path does not exist on the target");return O(o,n)}function Br(r){let e=[],t=new q({},{get(n,o){let i=r.get();return i?o==="proxied"?!1:Reflect.get(i,o):o==="proxied"?!0:o==="name"?"ProxiedTarget":o==="toJSON"?()=>({proxied:!0}):this.nest(()=>{})},apply(n,o,i){let s=r.get();if(s){let a=O(s,this.path);if(!V(a))throw new Error("Target is not callable");return Reflect.apply(a,o,i)}else{let[a,l,u]=p();return e.push({path:this.path,args:i,resolve:a,reject:l}),u}}});return G(()=>r.get(),n=>{if(!n)return;let o=e.splice(0);for(let{path:i,args:s,resolve:a,reject:l}of o){let u=O(n,i);s&&V(u)?(async()=>{try{a(await u(...s))}catch(f){l(f)}})():a(u)}}),t}function _r(r){let e=[];for(let t of Object.values(r))isNaN(Number(t))||e.push(Number(t));return e}function $r(r,e){let t={};for(let n in r)t[n]=e(r[n],n);return t}function Q(r,e=0){return Math.floor(Math.random()*(r-e+1))+e}function Yr(r){return r[Q(r.length-1)]}import{concatMap as Z,delay as rr,filter as er,first as tr,mergeMap as nr,of as or,pipe as S,ReplaySubject as F,scan as ir,timestamp as ar}from"rxjs";import{computed as k,observable as B,reaction as P,runInAction as _,toJS as sr}from"mobx";function ur(){return S(er(r=>r!=null))}function Zr(){return S(Z(r=>r))}function re(r){return S(ar(),ir((e,t)=>{let n=0;if(e!==null){let o=t.timestamp-e.timestamp;n=o>r?0:r-o}return{timestamp:t.timestamp,delay:n,value:t.value}},null),ur(),nr(e=>or(e.value).pipe(rr(e.delay)),1))}function ee(r){return k(()=>r.get())}function te(r){let e=new F(1);return P(()=>r.get(),t=>{t!=null&&e.next(t)},{fireImmediately:!0}),e}function ne(r){let e=new F(1);return P(()=>sr(r),t=>{t!=null&&e.next(t)},{fireImmediately:!0}),e}function oe(r){let e=B.box();return r.subscribe(t=>_(()=>e.set(t))),k(()=>e.get())}async function ie(r){let e=B.box();r.subscribe(n=>_(()=>e.set(n)));let t=k(()=>e.get());return await N(t),t}async function lr(r,e=t=>t!=null){let[t,,n]=p();return r.pipe(tr(e)).subscribe(t),n}async function ae(r){let e={};return r.subscribe(t=>e.current=t),e.current=await lr(r),e}var ue=function(){let r=cr,e=mr;return e(r(32),8)+"-"+e(r(16),4)+"-"+e(16384|r(12),4)+"-"+e(32768|r(14),4)+"-"+e(r(48),12)},cr=function(r){if(r<0||r>53)return NaN;let e=0|Math.random()*1073741824;return r>30?e+(0|Math.random()*(1<<r-30))*1073741824:e>>>30-r},mr=function(r,e){let t=r.toString(16),n=e-t.length,o="0";for(;n>0;n>>>=1,o+=o)n&1&&(t=o+t);return t};function E(r,e){return new Promise(t=>setTimeout(()=>t(e),r))}var pe=function*(r=0,e=1,t=0){for(let n=0;n<r;yield t+n++*e);};async function fr(r,e){throw await E(r),new Error(e)}var de=async(r,e,t)=>Promise.race([r,fr(e,t)]),Te=(r,e=[],t=10,n=1e3)=>{let[o,i,s]=p();return(async()=>{let l;for(let u=0;u<t;u++)try{l=await r(...e),o(l);break}catch(f){u<t-1?(console.info("[CallWithRetry Failed] attempt number="+u,r),console.error(f),await E(Math.min(n*2**u+Math.random()*100,15e3))):i(f)}})(),s};function y(r){return{...r,[Symbol.iterator](){return this}}}function be(r,e){return y(e?{next(){let t=r.next();return t.done?e.next():t}}:r)}function ge(r,e){return y({next(){let n=r.next(),o=e.next();return n.done&&o.done?{done:!0,value:null}:{value:[n.value,o.value]}}})}function C(r,e){return y({next(){let{done:t,value:n}=r.next();return{done:t,value:t?n:e(n)}}})}function ye(r){let e=0;return y({next(){let n=e>=r.length;return n?{done:n,value:null}:{value:r[e++]}}})}function Ae(r,e){return e.x>=r.x&&e.y>=r.y&&e.x<r.x+r.width&&e.y<r.y+r.height}function we(r){let e=[];for(let t=0;t<r.width;t++)for(let n=0;n<r.height;n++)e.push({x:r.x+t,y:r.y+n});return e}import{fromEvent as j,map as $}from"rxjs";function Ve(r,e){return e.subscribe(t=>r.postMessage(t)),j(r,"message").pipe($(t=>t.data))}function Oe(r){let e=j(self,"message");r.work(e.pipe($(n=>n.data))).subscribe(n=>self.postMessage(n))}function pr(r,e){return r&2**e-1}function dr(r,e){if(e.reduce((n,o)=>n+o,0)>32)throw new Error("JS pretends integers are 32 bit when bitshifts are involved");if(r.length!==e.length)throw new Error("Arrays' lengths must match");for(let n=0;n<r.length;n++){if(r[n]<0)throw new Error("Underflow: can only pack unsigned integer");if(r[n]>2**e[n]-1){let o=`Overflow: ${r[n]} does not fit in ${e[n]} bits`;throw new Error(o)}}let t=0;for(let n=0;n<r.length;n++)t=t<<e[n]|r[n];return t}function Tr(r,e){let t=[],n=r;for(let o=e.length-1;o>=0;o--)t.unshift(pr(n,e[o])),n=n>>>e[o];return t}function ke(r){return dr(r,[8,24])}function Ee(r){return Tr(r,[8,24])}var xr=2**16-1,h=2**15-1;function Ne(r,e){let t=new M;for(let n of r.coords())e.get(n)||t.set(n,!0);return t}function I(r){return r.x<<16|r.y&xr}function D(r){let e=r>>16,t=r<<16>>16;return{x:e,y:t}}var M=class r{constructor(e){this.map=new Map,this.defaultValue=e?.defaultValue}static from(e){let t=new r;return t.map=e.map,t.defaultValue=e.defaultValue,t}set(e,t){if(e.x>h||e.x<-1*h||e.y>h||e.y<-1*h)throw new Error(`CoordMap only supports coords up to ${h}`);return this.map.set(I(e),t)}get(e){return this.map.get(I(e))??this.defaultValue}keys(){return this.map.keys()}coords(){return C(this.map.keys(),e=>D(e))}entries(){return this.map.entries()}toArray(){return Array.from(this.map.entries()).map(([t,n])=>[D(t),n])}values(){return this.map.values()}delete(e){return this.map.delete(I(e))}has(e){return this.map.has(I(e))}clear(){for(let e of this.map.keys())this.map.delete(e)}get size(){return this.map.size}};function v(r){return`${r.x}/${r.y}/${r.z}`}function Y(r){let e=r.split("/");return{x:Number(e[0]),y:Number(e[1]),z:Number(e[2])}}var W=class r{constructor(e){this.map=new Map,this.defaultValue=e?.defaultValue}static from(e){let t=new r;return t.map=e.map,t.defaultValue=e.defaultValue,t}set(e,t){return this.map.set(v(e),t)}get(e){return this.map.get(v(e))??this.defaultValue}keys(){return this.map.keys()}coords(){return C(this.map.keys(),e=>Y(e))}entries(){return this.map.entries()}toArray(){return Array.from(this.map.entries()).map(([t,n])=>[Y(t),n])}values(){return this.map.values()}delete(e){return this.map.delete(v(e))}has(e){return this.map.has(v(e))}clear(){for(let e of this.map.keys())this.map.delete(e)}get size(){return this.map.size}};function J(r,e){r.substring(0,2)=="0x"&&(r=r.substring(2));let t=e/4;return r=r.padStart(t,"0"),r=r.substring(r.length-t),`0x${r}`}function X(r){return J(r,160)}function Pe(r){return J(r,256)}function _e(r){if(r[0]!=="0"&&r[1]!=="x")throw new Error("Invalid hex string");return"0x"+r.substring(10)}function d(r,e,t){return(((e^t)*134775813^r+e)*(1103515245*e<<16^1103515245*t-134775813)>>>0)/4294967295}function m(r,e){if(r<0)for(;r<0;)r+=e;return r%e}function U(r,e,t,n,o,i,s){let a=n-t-(r-e);return(e*Math.pow(i,3)+o*(t*Math.pow(i,2)+r*i*(-i+o)+o*(-(e+a)*i+a*o)))*s}function $e(r,e,t,n=Number.MAX_SAFE_INTEGER,o=Number.MAX_SAFE_INTEGER){return{seed:Math.floor(r*Number.MAX_SAFE_INTEGER),periodX:n,periodY:o,octave:e,scale:t}}function De(r,e){let t=Math.floor(e),n=e-t;return U(d(r.seed,m(t-1,r.periodX),0),d(r.seed,m(t,r.periodX),0),d(r.seed,m(t+1,r.periodX),0),d(r.seed,m(t+2,r.periodX),0),n,1,1)*.666666+.166666}function Ye({octave:r,periodX:e,periodY:t,seed:n,scale:o},i,s){let a=Math.floor(i/r),l=Math.floor(i*1e3/r)-a*1e3,u=Math.floor(s/r),f=Math.floor(s*1e3/r)-u*1e3,x=m(a-1,e),c=m(a,e),b=m(a+1,e),K=m(a+2,e),g=new Array(4);for(let A=0;A<4;++A){let w=m(u-1+A,t);g[A]=U(d(n,x,w),d(n,c,w),d(n,b,w),d(n,K,w),l,1e3,1)}return Math.floor(U(g[0],g[1],g[2],g[3],f,1e3,o)/Math.pow(1e3,6))}var T="mud-logger-topics";function Je(){let r=window.console,e=!!localStorage.getItem(T),t=localStorage.getItem(T),n=t?JSON.parse(t):[];function o(...c){e||r.log(...c)}function i(c,...b){(!e||n.includes(c))&&(r.log(`--- BETTER CONSOLE / TOPIC ${c} ---`),r.log(...b))}function s(){localStorage.setItem(T,JSON.stringify([])),e=!0}function a(){localStorage.removeItem(T),e=!1}function l(c){n.push(c),localStorage.setItem(T,JSON.stringify(n))}function u(c){n=n.filter(b=>b!==c),localStorage.setItem(T,JSON.stringify(n))}function f(){n=[],localStorage.setItem(T,JSON.stringify(n))}let x={...r,log:o,logWithTopic:i,enableFilters:s,disableFilters:a,addTopic:l,removeTopic:u,resetTopics:f};return window.logger=x,window.console=x,x}function ze(r,e){if(r.length!==e.length)throw new Error("points must have same dimension");return Math.sqrt(r.reduce((t,n,o)=>t+Math.pow(r[o]-e[o],2),0))}function Ke(r){return(r<0?-1:1)*Math.floor(Math.abs(r))}var Ge=r=>`0x${[...new Uint8Array(r)].map(e=>e.toString(16).padStart(2,"0")).join("")}`;var Qe=r=>[...r].map(e=>String.fromCharCode(e)).join("");function z(r){return/^(0x)?([\da-f]{2})*$/i.test(r)}var H=r=>{if(!z(r))throw console.error("Invalid hex string",r),new Error("Invalid hex string");let e=r.match(/[\da-f]{2}/gi);return e?new Uint8Array(e.map(t=>parseInt(t,16))):new Uint8Array([])};var nt=r=>{if(r.length>16)throw new Error("string too long");return new Uint8Array(16).map((e,t)=>r.charCodeAt(t))},ot=r=>{if(r.length>32)throw new Error("string too long");return new Uint8Array(32).map((e,t)=>r.charCodeAt(t))};function br(r){return r.substring(0,2)=="0x"&&(r=r.substring(2)),(r.length%2!==0?"0x0":"0x")+r}function gr(r){return H(r)}function dt(r){return r.length===0?"0x00":br(r.reduce((e,t)=>e+t.toString(16).padStart(2,"0"),""))}function Tt(...r){return Uint8Array.from(r.reduce((e,t)=>[...e,...t],[]))}function xt(r,e){let t=[],n=0;for(let o of e){let i=new Uint8Array(o);t.push(i);for(let s=0;s<o;s++)i[s]=r[n],n++}return t}function bt(r){let e=new ArrayBuffer(r.length*4),t=new Int32Array(e);for(let n=0;n<r.length;n++)t[n]=r[n];return new Uint8Array(e)}function gt(r){return[...new Int32Array(r.buffer)]}function yt(r){return gr(X(r))}function yr(r){if(r<2)throw new Error("Minimum size is 2");if(r>64)throw new Error("Maximum size is 64");let e=2**(r-1)-1,t=-e-1;return n=>{if(n=n<<0,n>e||n<t)throw console.log("value",n,e,t,n>e,n<t),new Error(`Int${r} overflow`);return n<0?2**r+n:n}}var ht=yr(32);export{M as CoordMap,bt as Int32ArrayToUint8Array,dt as Uint8ArrayToHexString,gt as Uint8ArrayToInt32Array,W as VoxelCoordMap,Ae as areaContains,Ge as arrayToHex,ye as arrayToIterator,Zr as awaitPromise,lr as awaitStreamValue,N as awaitValue,Qe as bytesToString,Br as cacheUntilReady,Te as callWithRetry,te as computedToStream,be as concatIterators,Tt as concatUint8Arrays,I as coordToKey,we as coordsOf,yr as createToInt,$e as cubicNoiseConfig,De as cubicNoiseSample1,Ye as cubicNoiseSample2,p as deferred,Je as enableLogger,yt as ethAddressToUint8Array,ze as euclidean,_e as extractEncodedArguments,ur as filterNullish,Ar as filterNullishValues,br as formatHex,Ve as fromWorker,gr as hexStringToUint8Array,H as hexToArray,U as interpolate,V as isFunction,z as isHex,hr as isNotEmpty,R as isObject,D as keyToCoord,y as makeIterable,$r as mapObject,ge as mergeIterators,_r as numValues,ee as observableToComputed,ne as observableToStream,dr as pack,ke as packTuple,J as padToBitLength,Yr as pickRandom,Q as random,d as randomize,pe as range,fr as rejectAfter,Ke as roundTowardsZero,Oe as runWorker,E as sleep,xt as splitUint8Arrays,oe as streamToComputed,ie as streamToDefinedComputed,ae as streamToWrappedValue,re as stretch,nt as stringToBytes16,ot as stringToBytes32,Ne as subtract,m as tile,de as timeoutAfter,Pe as to256BitString,X as toEthAddress,ht as toInt32,C as transformIterator,Tr as unpack,Ee as unpackTuple,ue as uuid};
868
2
  /**
869
3
  * UUID.core.js - UUID.js for Minimalists
870
4
  *