socket-function 1.2.2 → 1.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/SocketFunction.d.ts +1 -1
  2. package/SocketFunctionTypes.d.ts +1 -1
  3. package/hot/HotReloadController.d.ts +3 -3
  4. package/index.d.ts +25 -10
  5. package/package.json +1 -1
  6. package/require/CSSShim.d.ts +1 -1
  7. package/require/RequireController.d.ts +2 -2
  8. package/require/compileFlags.d.ts +1 -1
  9. package/require/require.d.ts +1 -1
  10. package/src/callManager.d.ts +1 -1
  11. package/src/webSocketServer.ts +44 -35
  12. package/test.ts +5 -11
  13. package/time/trueTimeShim.d.ts +16 -1
  14. package/time/trueTimeShim.ts +43 -7
  15. package/dist/SetProcessVariables.ts.cache +0 -9
  16. package/dist/SocketFunction.ts.cache +0 -467
  17. package/hot/dist/HotReloadController.ts.cache +0 -252
  18. package/require/dist/RequireController.ts.cache +0 -386
  19. package/require/dist/compileFlags.ts.cache +0 -41
  20. package/require/dist/extMapper.ts.cache +0 -368
  21. package/require/dist/require.ts.cache +0 -676
  22. package/src/JSONLACKS/dist/JSONLACKS.ts.cache +0 -469
  23. package/src/dist/CallFactory.ts.cache +0 -930
  24. package/src/dist/Zip.ts.cache +0 -156
  25. package/src/dist/batching.ts.cache +0 -377
  26. package/src/dist/bits.ts.cache +0 -121
  27. package/src/dist/buffers.ts.cache +0 -76
  28. package/src/dist/caching.ts.cache +0 -302
  29. package/src/dist/callHTTPHandler.ts.cache +0 -264
  30. package/src/dist/callManager.ts.cache +0 -159
  31. package/src/dist/certStore.ts.cache +0 -59
  32. package/src/dist/createSingleton.ts.cache +0 -62
  33. package/src/dist/fixLargeNetworkCalls.ts.cache +0 -17
  34. package/src/dist/forwardPort.ts.cache +0 -222
  35. package/src/dist/https.ts.cache +0 -141
  36. package/src/dist/misc.ts.cache +0 -499
  37. package/src/dist/nodeCache.ts.cache +0 -136
  38. package/src/dist/nodeProxy.ts.cache +0 -57
  39. package/src/dist/protocolNegotiation.ts.cache +0 -101
  40. package/src/dist/tlsParsing.ts.cache +0 -85
  41. package/src/dist/types.ts.cache +0 -9
  42. package/src/dist/webSocketServer.ts.cache +0 -365
  43. package/src/dist/websocketFactory.ts.cache +0 -53
  44. package/src/formatting/dist/colors.ts.cache +0 -98
  45. package/src/formatting/dist/format.ts.cache +0 -396
  46. package/src/formatting/dist/logColors.ts.cache +0 -28
  47. package/src/lz4/dist/LZ4.ts.cache +0 -53
  48. package/src/profiling/dist/getOwnTime.ts.cache +0 -100
  49. package/src/profiling/dist/measure.ts.cache +0 -338
  50. package/src/profiling/dist/stats.ts.cache +0 -202
  51. package/src/profiling/dist/statsFormat.ts.cache +0 -45
  52. package/time/dist/trueTimeShim.ts.cache +0 -707
@@ -1,121 +0,0 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
- //exports.getTimeUnique = exports.getBufferFraction = exports.getBufferInt = exports.getShortNumber = exports.xor64BitsSafe = exports.setLowHighUint32Safe = exports.setLowHighUint32 = exports.getLowUint32 = exports.getHighUint32 = exports.addEpsilons = exports.minusEpsilon = void 0;
4
- /** Subtracts the smallest possible value from a number (a double). This makes it possible to convert an exclusive range end
5
- * to an inclusive range end, which is sometimes required (as in, < x is the same as <= minusEpsilon(x)).
6
- */
7
- function minusEpsilon(value) {
8
- let high = getHighUint32(value);
9
- let low = getLowUint32(value);
10
- if (low === 0) {
11
- low = 2 ** 32 - 1;
12
- high--;
13
- }
14
- else {
15
- low--;
16
- }
17
- return setLowHighUint32(low, high);
18
- }
19
- exports.minusEpsilon = minusEpsilon;
20
- const maxUint32 = 2 ** 32 - 1;
21
- function addEpsilons(value, count) {
22
- let high = getHighUint32(value);
23
- let low = getLowUint32(value);
24
- low += count;
25
- if (low < 0) {
26
- low += maxUint32;
27
- high++;
28
- }
29
- else if (low > maxUint32) {
30
- low -= maxUint32;
31
- high--;
32
- }
33
- return setLowHighUint32(low, high);
34
- }
35
- exports.addEpsilons = addEpsilons;
36
- let conversionBuffer = new Float64Array(1);
37
- let conversionUint8Buffer = new Uint8Array(conversionBuffer.buffer);
38
- let conversionUint32Buffer = new Uint32Array(conversionBuffer.buffer);
39
- function getHighUint32(num) {
40
- conversionBuffer[0] = num;
41
- return conversionUint32Buffer[1];
42
- }
43
- exports.getHighUint32 = getHighUint32;
44
- function getLowUint32(num) {
45
- conversionBuffer[0] = num;
46
- return conversionUint32Buffer[0];
47
- }
48
- exports.getLowUint32 = getLowUint32;
49
- /** IMPORTANT! Beware of comparisons with 64 bit numbers. getFloat64_fromBytes(4294136438, 168) !== getFloat64_fromBytes(4294136438, 168).
50
- * USE is64BitEqual instead, OR, ensure the 2 highest bits are always 0.
51
- */
52
- function setLowHighUint32(low, high) {
53
- conversionUint32Buffer[0] = low;
54
- conversionUint32Buffer[1] = high;
55
- return conversionBuffer[0];
56
- }
57
- exports.setLowHighUint32 = setLowHighUint32;
58
- /** Adds protection against NaN values, changing the result if it would be NaN. This is because NaN values will compare to be not equal even if they are equal in certain cases, and in other cases, they'll always be equal, even if their bits are not equal.
59
- - This means this is not a reversible operation. However, in a lot of cases, that doesn't matter.
60
- */
61
- function setLowHighUint32Safe(low, high) {
62
- conversionUint32Buffer[0] = low;
63
- // Prevent NaN by not setting all the exponent bits to 1
64
- conversionUint32Buffer[1] = high & 0xBFFFFFFF;
65
- return conversionBuffer[0];
66
- }
67
- exports.setLowHighUint32Safe = setLowHighUint32Safe;
68
- // NOTE: Not reversible, see setLowHighUint32Safe
69
- function xor64BitsSafe(a, b) {
70
- let high = getHighUint32(a);
71
- let low = getLowUint32(a);
72
- let high2 = getHighUint32(b);
73
- let low2 = getLowUint32(b);
74
- return setLowHighUint32Safe(low ^ low2, high ^ high2);
75
- }
76
- exports.xor64BitsSafe = xor64BitsSafe;
77
- // Gets bits that can be stored in a number. Specifically, the first 62 bits,
78
- // as 64 bits will not compare correctly when treated as a double.
79
- function getShortNumber(buffer) {
80
- let high = buffer.readUInt32BE(0) & 0x3FFFFFFF;
81
- let low = buffer.readUInt32BE(4);
82
- return setLowHighUint32(low, high);
83
- }
84
- exports.getShortNumber = getShortNumber;
85
- /* Returns a number between 0 and 2**48 */
86
- function getBufferInt(buffer) {
87
- let num = 0;
88
- for (let i = 0; i < Math.min(buffer.length, 6); i++) {
89
- num = num * 256 + buffer[i];
90
- }
91
- return num;
92
- }
93
- exports.getBufferInt = getBufferInt;
94
- const intMax = 2 ** 48;
95
- /** Returns a number between 0 (inclusive) and 1 (exclusive) */
96
- function getBufferFraction(buffer) {
97
- let int = getBufferInt(buffer);
98
- return int / intMax;
99
- }
100
- exports.getBufferFraction = getBufferFraction;
101
- /*
102
- export function numberToBase64(num: number): string {
103
- conversionBuffer[0] = num;
104
- return Buffer.from(conversionBuffer.buffer).toString("base64");
105
- }
106
- export function numberFromBase64(base64: string) {
107
- return new Float64Array(Buffer.from(base64, "base64"))[0];
108
- }
109
- */
110
- let prevTime = 0;
111
- function getTimeUnique() {
112
- let time = Date.now();
113
- if (time <= prevTime) {
114
- time = addEpsilons(prevTime, 1);
115
- }
116
- prevTime = time;
117
- return time;
118
- }
119
- exports.getTimeUnique = getTimeUnique;
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJpdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0E7O0dBRUc7QUFDSCxTQUFnQixZQUFZLENBQUMsS0FBYTtJQUN0QyxJQUFJLElBQUksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsSUFBSSxHQUFHLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlCLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ1osR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksRUFBRSxDQUFDO0lBQ1gsQ0FBQztTQUFNLENBQUM7UUFDSixHQUFHLEVBQUUsQ0FBQztJQUNWLENBQUM7SUFFRCxPQUFPLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBWkQsb0NBWUM7QUFDRCxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5QixTQUFnQixXQUFXLENBQUMsS0FBYSxFQUFFLEtBQWE7SUFDcEQsSUFBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLElBQUksR0FBRyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5QixHQUFHLElBQUksS0FBSyxDQUFDO0lBQ2IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDVixHQUFHLElBQUksU0FBUyxDQUFDO1FBQ2pCLElBQUksRUFBRSxDQUFDO0lBQ1gsQ0FBQztTQUFNLElBQUksR0FBRyxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLEdBQUcsSUFBSSxTQUFTLENBQUM7UUFDakIsSUFBSSxFQUFFLENBQUM7SUFDWCxDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQWRELGtDQWND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QyxNQUFjO0lBQzVDLElBQUksR0FBRyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixPQUFPLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDeEIsQ0FBQztBQUhELDhDQUdDO0FBRUQ7Ozs7Ozs7O0VBUUU7QUFHRixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDakIsU0FBZ0IsYUFBYTtJQUN6QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdEIsSUFBSSxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7UUFDbkIsSUFBSSxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDaEIsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQVBELHNDQU9DIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKiogU3VidHJhY3RzIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSB2YWx1ZSBmcm9tIGEgbnVtYmVyIChhIGRvdWJsZSkuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gY29udmVydCBhbiBleGNsdXNpdmUgcmFuZ2UgZW5kXG4gKiAgICAgIHRvIGFuIGluY2x1c2l2ZSByYW5nZSBlbmQsIHdoaWNoIGlzIHNvbWV0aW1lcyByZXF1aXJlZCAoYXMgaW4sIDwgeCBpcyB0aGUgc2FtZSBhcyA8PSBtaW51c0Vwc2lsb24oeCkpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWludXNFcHNpbG9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICBsZXQgaGlnaCA9IGdldEhpZ2hVaW50MzIodmFsdWUpO1xuICAgIGxldCBsb3cgPSBnZXRMb3dVaW50MzIodmFsdWUpO1xuXG4gICAgaWYgKGxvdyA9PT0gMCkge1xuICAgICAgICBsb3cgPSAyICoqIDMyIC0gMTtcbiAgICAgICAgaGlnaC0tO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvdy0tO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRMb3dIaWdoVWludDMyKGxvdywgaGlnaCk7XG59XG5jb25zdCBtYXhVaW50MzIgPSAyICoqIDMyIC0gMTtcbmV4cG9ydCBmdW5jdGlvbiBhZGRFcHNpbG9ucyh2YWx1ZTogbnVtYmVyLCBjb3VudDogbnVtYmVyKSB7XG4gICAgbGV0IGhpZ2ggPSBnZXRIaWdoVWludDMyKHZhbHVlKTtcbiAgICBsZXQgbG93ID0gZ2V0TG93VWludDMyKHZhbHVlKTtcblxuICAgIGxvdyArPSBjb3VudDtcbiAgICBpZiAobG93IDwgMCkge1xuICAgICAgICBsb3cgKz0gbWF4VWludDMyO1xuICAgICAgICBoaWdoKys7XG4gICAgfSBlbHNlIGlmIChsb3cgPiBtYXhVaW50MzIpIHtcbiAgICAgICAgbG93IC09IG1heFVpbnQzMjtcbiAgICAgICAgaGlnaC0tO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRMb3dIaWdoVWludDMyKGxvdywgaGlnaCk7XG59XG5cbmxldCBjb252ZXJzaW9uQnVmZmVyID0gbmV3IEZsb2F0NjRBcnJheSgxKTtcbmxldCBjb252ZXJzaW9uVWludDhCdWZmZXIgPSBuZXcgVWludDhBcnJheShjb252ZXJzaW9uQnVmZmVyLmJ1ZmZlcik7XG5sZXQgY29udmVyc2lvblVpbnQzMkJ1ZmZlciA9IG5ldyBVaW50MzJBcnJheShjb252ZXJzaW9uQnVmZmVyLmJ1ZmZlcik7XG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlnaFVpbnQzMihudW06IG51bWJlcik6IG51bWJlciB7XG4gICAgY29udmVyc2lvbkJ1ZmZlclswXSA9IG51bTtcbiAgICByZXR1cm4gY29udmVyc2lvblVpbnQzMkJ1ZmZlclsxXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb3dVaW50MzIobnVtOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnZlcnNpb25CdWZmZXJbMF0gPSBudW07XG4gICAgcmV0dXJuIGNvbnZlcnNpb25VaW50MzJCdWZmZXJbMF07XG59XG5cbi8qKiBJTVBPUlRBTlQhIEJld2FyZSBvZiBjb21wYXJpc29ucyB3aXRoIDY0IGJpdCBudW1iZXJzLiBnZXRGbG9hdDY0X2Zyb21CeXRlcyg0Mjk0MTM2NDM4LCAxNjgpICE9PSBnZXRGbG9hdDY0X2Zyb21CeXRlcyg0Mjk0MTM2NDM4LCAxNjgpLlxuICogICAgICBVU0UgaXM2NEJpdEVxdWFsIGluc3RlYWQsIE9SLCBlbnN1cmUgdGhlIDIgaGlnaGVzdCBiaXRzIGFyZSBhbHdheXMgMC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExvd0hpZ2hVaW50MzIobG93OiBudW1iZXIsIGhpZ2g6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29udmVyc2lvblVpbnQzMkJ1ZmZlclswXSA9IGxvdztcbiAgICBjb252ZXJzaW9uVWludDMyQnVmZmVyWzFdID0gaGlnaDtcbiAgICByZXR1cm4gY29udmVyc2lvbkJ1ZmZlclswXTtcbn1cblxuLyoqIEFkZHMgcHJvdGVjdGlvbiBhZ2FpbnN0IE5hTiB2YWx1ZXMsIGNoYW5naW5nIHRoZSByZXN1bHQgaWYgaXQgd291bGQgYmUgTmFOLiBUaGlzIGlzIGJlY2F1c2UgTmFOIHZhbHVlcyB3aWxsIGNvbXBhcmUgdG8gYmUgbm90IGVxdWFsIGV2ZW4gaWYgdGhleSBhcmUgZXF1YWwgaW4gY2VydGFpbiBjYXNlcywgYW5kIGluIG90aGVyIGNhc2VzLCB0aGV5J2xsIGFsd2F5cyBiZSBlcXVhbCwgZXZlbiBpZiB0aGVpciBiaXRzIGFyZSBub3QgZXF1YWwuXG4gICAgLSBUaGlzIG1lYW5zIHRoaXMgaXMgbm90IGEgcmV2ZXJzaWJsZSBvcGVyYXRpb24uIEhvd2V2ZXIsIGluIGEgbG90IG9mIGNhc2VzLCB0aGF0IGRvZXNuJ3QgbWF0dGVyLiBcbiovXG5leHBvcnQgZnVuY3Rpb24gc2V0TG93SGlnaFVpbnQzMlNhZmUobG93OiBudW1iZXIsIGhpZ2g6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29udmVyc2lvblVpbnQzMkJ1ZmZlclswXSA9IGxvdztcbiAgICAvLyBQcmV2ZW50IE5hTiBieSBub3Qgc2V0dGluZyBhbGwgdGhlIGV4cG9uZW50IGJpdHMgdG8gMVxuICAgIGNvbnZlcnNpb25VaW50MzJCdWZmZXJbMV0gPSBoaWdoICYgMHhCRkZGRkZGRjtcbiAgICByZXR1cm4gY29udmVyc2lvbkJ1ZmZlclswXTtcbn1cblxuLy8gTk9URTogTm90IHJldmVyc2libGUsIHNlZSBzZXRMb3dIaWdoVWludDMyU2FmZVxuZXhwb3J0IGZ1bmN0aW9uIHhvcjY0Qml0c1NhZmUoYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBoaWdoID0gZ2V0SGlnaFVpbnQzMihhKTtcbiAgICBsZXQgbG93ID0gZ2V0TG93VWludDMyKGEpO1xuICAgIGxldCBoaWdoMiA9IGdldEhpZ2hVaW50MzIoYik7XG4gICAgbGV0IGxvdzIgPSBnZXRMb3dVaW50MzIoYik7XG4gICAgcmV0dXJuIHNldExvd0hpZ2hVaW50MzJTYWZlKGxvdyBeIGxvdzIsIGhpZ2ggXiBoaWdoMik7XG59XG5cbi8vIEdldHMgYml0cyB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gYSBudW1iZXIuIFNwZWNpZmljYWxseSwgdGhlIGZpcnN0IDYyIGJpdHMsXG4vLyAgYXMgNjQgYml0cyB3aWxsIG5vdCBjb21wYXJlIGNvcnJlY3RseSB3aGVuIHRyZWF0ZWQgYXMgYSBkb3VibGUuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2hvcnROdW1iZXIoYnVmZmVyOiBCdWZmZXIpOiBudW1iZXIge1xuICAgIGxldCBoaWdoID0gYnVmZmVyLnJlYWRVSW50MzJCRSgwKSAmIDB4M0ZGRkZGRkY7XG4gICAgbGV0IGxvdyA9IGJ1ZmZlci5yZWFkVUludDMyQkUoNCk7XG4gICAgcmV0dXJuIHNldExvd0hpZ2hVaW50MzIobG93LCBoaWdoKTtcbn1cbi8qIFJldHVybnMgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyKio0OCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1ZmZlckludChidWZmZXI6IEJ1ZmZlcik6IG51bWJlciB7XG4gICAgbGV0IG51bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihidWZmZXIubGVuZ3RoLCA2KTsgaSsrKSB7XG4gICAgICAgIG51bSA9IG51bSAqIDI1NiArIGJ1ZmZlcltpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbn1cbmNvbnN0IGludE1heCA9IDIgKiogNDg7XG4vKiogUmV0dXJucyBhIG51bWJlciBiZXR3ZWVuIDAgKGluY2x1c2l2ZSkgYW5kIDEgKGV4Y2x1c2l2ZSkgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdWZmZXJGcmFjdGlvbihidWZmZXI6IEJ1ZmZlcik6IG51bWJlciB7XG4gICAgbGV0IGludCA9IGdldEJ1ZmZlckludChidWZmZXIpO1xuICAgIHJldHVybiBpbnQgLyBpbnRNYXg7XG59XG5cbi8qXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyVG9CYXNlNjQobnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnZlcnNpb25CdWZmZXJbMF0gPSBudW07XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNvbnZlcnNpb25CdWZmZXIuYnVmZmVyKS50b1N0cmluZyhcImJhc2U2NFwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJGcm9tQmFzZTY0KGJhc2U2NDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkoQnVmZmVyLmZyb20oYmFzZTY0LCBcImJhc2U2NFwiKSlbMF07XG59XG4qL1xuXG5cbmxldCBwcmV2VGltZSA9IDA7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZVVuaXF1ZSgpIHtcbiAgICBsZXQgdGltZSA9IERhdGUubm93KCk7XG4gICAgaWYgKHRpbWUgPD0gcHJldlRpbWUpIHtcbiAgICAgICAgdGltZSA9IGFkZEVwc2lsb25zKHByZXZUaW1lLCAxKTtcbiAgICB9XG4gICAgcHJldlRpbWUgPSB0aW1lO1xuICAgIHJldHVybiB0aW1lO1xufSJdfQ==
121
- /* _JS_SOURCE_HASH = "7474dac6ad47abfc3e1024d9b79f0429a22e46a14dd1006f8d0d92552f1c3761"; */
@@ -1,76 +0,0 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
- //exports.asFloat64MaybeCopy = exports.asInt32 = exports.asUint32 = exports.asFloat32 = exports.asFloat64 = exports.asBuffer = exports.cloneBuffer = void 0;
4
- const types_1 = require("./types");
5
- function cloneBuffer(data) {
6
- let newBuffer = Buffer.alloc(data.length);
7
- data.copy(newBuffer);
8
- return newBuffer;
9
- }
10
- exports.cloneBuffer = cloneBuffer;
11
- function asBuffer(data) {
12
- if (!data)
13
- return data;
14
- if (data instanceof Buffer)
15
- return data;
16
- if (!(0, types_1.canHaveChildren)(data))
17
- return data;
18
- if (!("buffer" in data) || !("byteOffset" in data) || !("byteLength" in data)) {
19
- return Buffer.from(data);
20
- }
21
- let result = Buffer.from(data.buffer, data.byteOffset, data.byteLength);
22
- return result;
23
- }
24
- exports.asBuffer = asBuffer;
25
- function asFloat64(data) {
26
- if (data.length % 8 !== 0) {
27
- throw new Error(`Data is not 8 count aligned, received length of ${data.length}`);
28
- }
29
- if (data.byteOffset % 8 !== 0) {
30
- throw new Error(`Data is not 8 byte aligned, received offset of ${data.byteOffset}`);
31
- }
32
- return new Float64Array(data.buffer, data.byteOffset, Math.floor(data.length / 8));
33
- }
34
- exports.asFloat64 = asFloat64;
35
- function asFloat32(data) {
36
- if (data.length % 4 !== 0) {
37
- throw new Error(`Data is not 4 byte aligned, received length of ${data.length}`);
38
- }
39
- if (data.byteOffset % 4 !== 0) {
40
- throw new Error(`Data is not 4 byte aligned, received offset of ${data.byteOffset}`);
41
- }
42
- return new Float32Array(data.buffer, data.byteOffset, Math.floor(data.length / 4));
43
- }
44
- exports.asFloat32 = asFloat32;
45
- function asUint32(data) {
46
- if (data.length % 4 !== 0) {
47
- throw new Error(`Data is not 4 byte aligned, received length of ${data.length}`);
48
- }
49
- if (data.byteOffset % 4 !== 0) {
50
- throw new Error(`Data is not 4 byte aligned, received offset of ${data.byteOffset}`);
51
- }
52
- return new Uint32Array(data.buffer, data.byteOffset, Math.floor(data.length / 4));
53
- }
54
- exports.asUint32 = asUint32;
55
- function asInt32(data) {
56
- if (data.length % 4 !== 0) {
57
- throw new Error(`Data is not 4 byte aligned, received length of ${data.length}`);
58
- }
59
- if (data.byteOffset % 4 !== 0) {
60
- throw new Error(`Data is not 4 byte aligned, received offset of ${data.byteOffset}`);
61
- }
62
- return new Int32Array(data.buffer, data.byteOffset, Math.floor(data.length / 4));
63
- }
64
- exports.asInt32 = asInt32;
65
- function asFloat64MaybeCopy(data) {
66
- if (data.length % 8 !== 0) {
67
- throw new Error(`Data is not 8 count aligned, received length of ${data.length}`);
68
- }
69
- if (data.byteOffset % 8 !== 0) {
70
- return asFloat64(cloneBuffer(data));
71
- }
72
- return new Float64Array(data.buffer, data.byteOffset, Math.floor(data.length / 8));
73
- }
74
- exports.asFloat64MaybeCopy = asFloat64MaybeCopy;
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVmZmVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImJ1ZmZlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQTBDO0FBSzFDLFNBQWdCLFdBQVcsQ0FBQyxJQUFZO0lBQ3BDLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckIsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUpELGtDQUlDO0FBR0QsU0FBZ0IsUUFBUSxDQUFDLElBQWdCO0lBQ3JDLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdkIsSUFBSSxJQUFJLFlBQVksTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3hDLElBQUksQ0FBQyxJQUFBLHVCQUFlLEVBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxJQUFXLENBQUM7SUFDL0MsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzVFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBRSxJQUFZLENBQUMsTUFBTSxFQUFHLElBQVksQ0FBQyxVQUFVLEVBQUcsSUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25HLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFURCw0QkFTQztBQUNELFNBQWdCLFNBQVMsQ0FBQyxJQUFZO0lBQ2xDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxt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VSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QixPQUFPLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsT0FBTyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkYsQ0FBQztBQVJELGdEQVFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2FuSGF2ZUNoaWxkcmVuIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgQXJyYXlCdWZmZXJWaWV3VHlwZXMgPSBVaW50OEFycmF5IHwgSW50OEFycmF5IHwgVWludDE2QXJyYXkgfCBJbnQxNkFycmF5IHwgVWludDMyQXJyYXkgfCBJbnQzMkFycmF5IHwgQmlnVWludDY0QXJyYXkgfCBCaWdJbnQ2NEFycmF5IHwgRmxvYXQ2NEFycmF5IHwgRmxvYXQzMkFycmF5IHwgVWludDhDbGFtcGVkQXJyYXk7XG5leHBvcnQgdHlwZSBCdWZmZXJUeXBlID0gQXJyYXlCdWZmZXIgfCBTaGFyZWRBcnJheUJ1ZmZlciB8IEFycmF5QnVmZmVyVmlld1R5cGVzO1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVCdWZmZXIoZGF0YTogQnVmZmVyKTogQnVmZmVyIHtcbiAgICBsZXQgbmV3QnVmZmVyID0gQnVmZmVyLmFsbG9jKGRhdGEubGVuZ3RoKTtcbiAgICBkYXRhLmNvcHkobmV3QnVmZmVyKTtcbiAgICByZXR1cm4gbmV3QnVmZmVyO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBhc0J1ZmZlcihkYXRhOiBCdWZmZXJUeXBlKTogQnVmZmVyIHtcbiAgICBpZiAoIWRhdGEpIHJldHVybiBkYXRhO1xuICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQnVmZmVyKSByZXR1cm4gZGF0YTtcbiAgICBpZiAoIWNhbkhhdmVDaGlsZHJlbihkYXRhKSkgcmV0dXJuIGRhdGEgYXMgYW55O1xuICAgIGlmICghKFwiYnVmZmVyXCIgaW4gZGF0YSkgfHwgIShcImJ5dGVPZmZzZXRcIiBpbiBkYXRhKSB8fCAhKFwiYnl0ZUxlbmd0aFwiIGluIGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShkYXRhKTtcbiAgICB9XG4gICAgbGV0IHJlc3VsdCA9IEJ1ZmZlci5mcm9tKChkYXRhIGFzIGFueSkuYnVmZmVyLCAoZGF0YSBhcyBhbnkpLmJ5dGVPZmZzZXQsIChkYXRhIGFzIGFueSkuYnl0ZUxlbmd0aCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc0Zsb2F0NjQoZGF0YTogQnVmZmVyKTogRmxvYXQ2NEFycmF5IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRGF0YSBpcyBub3QgOCBjb3VudCBhbGlnbmVkLCByZWNlaXZlZCBsZW5ndGggb2YgJHtkYXRhLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgaWYgKGRhdGEuYnl0ZU9mZnNldCAlIDggIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEYXRhIGlzIG5vdCA4IGJ5dGUgYWxpZ25lZCwgcmVjZWl2ZWQgb2Zmc2V0IG9mICR7ZGF0YS5ieXRlT2Zmc2V0fWApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEZsb2F0NjRBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBNYXRoLmZsb29yKGRhdGEubGVuZ3RoIC8gOCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFzRmxvYXQzMihkYXRhOiBCdWZmZXIpOiBGbG9hdDMyQXJyYXkge1xuICAgIGlmIChkYXRhLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEYXRhIGlzIG5vdCA0IGJ5dGUgYWxpZ25lZCwgcmVjZWl2ZWQgbGVuZ3RoIG9mICR7ZGF0YS5sZW5ndGh9YCk7XG4gICAgfVxuICAgIGlmIChkYXRhLmJ5dGVPZmZzZXQgJSA0ICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRGF0YSBpcyBub3QgNCBieXRlIGFsaWduZWQsIHJlY2VpdmVkIG9mZnNldCBvZiAke2RhdGEuYnl0ZU9mZnNldH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoZGF0YS5idWZmZXIsIGRhdGEuYnl0ZU9mZnNldCwgTWF0aC5mbG9vcihkYXRhLmxlbmd0aCAvIDQpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc1VpbnQzMihkYXRhOiBCdWZmZXIpOiBVaW50MzJBcnJheSB7XG4gICAgaWYgKGRhdGEubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGEgaXMgbm90IDQgYnl0ZSBhbGlnbmVkLCByZWNlaXZlZCBsZW5ndGggb2YgJHtkYXRhLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgaWYgKGRhdGEuYnl0ZU9mZnNldCAlIDQgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEYXRhIGlzIG5vdCA0IGJ5dGUgYWxpZ25lZCwgcmVjZWl2ZWQgb2Zmc2V0IG9mICR7ZGF0YS5ieXRlT2Zmc2V0fWApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFVpbnQzMkFycmF5KGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIE1hdGguZmxvb3IoZGF0YS5sZW5ndGggLyA0KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXNJbnQzMihkYXRhOiBCdWZmZXIpOiBJbnQzMkFycmF5IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRGF0YSBpcyBub3QgNCBieXRlIGFsaWduZWQsIHJlY2VpdmVkIGxlbmd0aCBvZiAke2RhdGEubGVuZ3RofWApO1xuICAgIH1cbiAgICBpZiAoZGF0YS5ieXRlT2Zmc2V0ICUgNCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGEgaXMgbm90IDQgYnl0ZSBhbGlnbmVkLCByZWNlaXZlZCBvZmZzZXQgb2YgJHtkYXRhLmJ5dGVPZmZzZXR9YCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW50MzJBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBNYXRoLmZsb29yKGRhdGEubGVuZ3RoIC8gNCkpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBhc0Zsb2F0NjRNYXliZUNvcHkoZGF0YTogQnVmZmVyKSB7XG4gICAgaWYgKGRhdGEubGVuZ3RoICUgOCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERhdGEgaXMgbm90IDggY291bnQgYWxpZ25lZCwgcmVjZWl2ZWQgbGVuZ3RoIG9mICR7ZGF0YS5sZW5ndGh9YCk7XG4gICAgfVxuICAgIGlmIChkYXRhLmJ5dGVPZmZzZXQgJSA4ICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBhc0Zsb2F0NjQoY2xvbmVCdWZmZXIoZGF0YSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEZsb2F0NjRBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBNYXRoLmZsb29yKGRhdGEubGVuZ3RoIC8gOCkpO1xufVxuIl19
76
- /* _JS_SOURCE_HASH = "27a8d0c2352cb05b3688c192d18d334d68ff09615cc34efac308e9f79c0c91b1"; */
@@ -1,302 +0,0 @@
1
- "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
3
- //exports.externalCache = exports.cacheShallowConfigArgEqual = exports.cacheJSONArgsEqual = exports.cacheArgsEqual = exports.cacheArrayEqual = exports.cacheList = exports.cacheWeak = exports.cacheLimited = exports.cache = exports.cacheEmptyArray = exports.lazy = void 0;
4
- const misc_1 = require("./misc");
5
- const types_1 = require("./types");
6
- function lazy(factory) {
7
- let value = undefined;
8
- function get() {
9
- if (!value) {
10
- value = { value: factory() };
11
- }
12
- return value.value;
13
- }
14
- ;
15
- get.reset = () => {
16
- value = undefined;
17
- };
18
- get.set = (newValue) => {
19
- value = { value: newValue };
20
- };
21
- return get;
22
- }
23
- exports.lazy = lazy;
24
- // NOTE: Empty arrays are so common, that it is useful to represent them as the same
25
- // emtpy array, to increase cache hit rates.
26
- const emptyArray = [];
27
- function cacheEmptyArray(array) {
28
- if (array.length === 0)
29
- return emptyArray;
30
- return array;
31
- }
32
- exports.cacheEmptyArray = cacheEmptyArray;
33
- function cache(getValue) {
34
- let startingCalculating = new Set();
35
- let values = new Map();
36
- function cache(input, ...untracked) {
37
- let key = input;
38
- if (values.has(key)) {
39
- return values.get(key);
40
- }
41
- if (startingCalculating.has(key)) {
42
- // TODO: Fix the types here, by throwing, and then for the cases
43
- // that don't throw, make our output type include undefined
44
- return undefined;
45
- }
46
- startingCalculating.add(key);
47
- let value = getValue(input, ...untracked);
48
- values.set(key, value);
49
- return value;
50
- }
51
- cache.clear = (key) => {
52
- values.delete(key);
53
- startingCalculating.delete(key);
54
- };
55
- cache.forceSet = (key, value) => {
56
- values.set(key, value);
57
- startingCalculating.add(key);
58
- };
59
- cache.getAllKeys = () => {
60
- return [...values.keys()];
61
- };
62
- cache.get = (key) => {
63
- return values.get(key);
64
- };
65
- cache.clearAll = () => {
66
- values.clear();
67
- startingCalculating.clear();
68
- };
69
- return cache;
70
- }
71
- exports.cache = cache;
72
- /** Makes a cache that limits the number of entries, allowing you to put arbitrary data in it
73
- * without worrying about leaking memory
74
- */
75
- function cacheLimited(
76
- // NOTE: We can't calculate what limit should be based on comparing the evaluation time
77
- // and the time to compare against the values. Because, even if finding a match takes far longer than
78
- // calculating, keeping a consistent output can save (a considerable amount of) time in downstream caches.
79
- maxCount, getValue) {
80
- let startingCalculating = new Set();
81
- let values = new Map();
82
- function get(input) {
83
- let key = input;
84
- if (values.has(key)) {
85
- return values.get(key);
86
- }
87
- if (startingCalculating.has(key)) {
88
- throw new Error(`Cyclic access in cache`);
89
- }
90
- startingCalculating.add(key);
91
- // Clear when it gets too big. This is kind of like a worse
92
- // least recently used cache, because entries that are accessed
93
- // often will quickly get put back in. This is effective as long
94
- // as accesses take similar amounts of time. If there is a very slow
95
- // and very commonly accessed value, it could be evicted by many very
96
- // fast accesses, which would be unfortunate.
97
- if (values.size >= maxCount) {
98
- values.clear();
99
- startingCalculating.clear();
100
- }
101
- let value = getValue(input);
102
- values.set(key, value);
103
- return value;
104
- }
105
- get["forceSet"] = (key, value) => {
106
- values.set(key, value);
107
- startingCalculating.add(key);
108
- };
109
- get["clearKey"] = (key) => {
110
- values.delete(key);
111
- startingCalculating.delete(key);
112
- };
113
- get["clear"] = () => {
114
- values.clear();
115
- startingCalculating.clear();
116
- };
117
- return get;
118
- }
119
- exports.cacheLimited = cacheLimited;
120
- function cacheWeak(getValue) {
121
- let state = {
122
- startingCalculating: new WeakSet(),
123
- values: new WeakMap(),
124
- };
125
- return (input) => {
126
- let key = input;
127
- if (state.values.has(key)) {
128
- return state.values.get(key);
129
- }
130
- if (state.startingCalculating.has(key)) {
131
- throw new Error(`Cyclic access in cacheWeak`);
132
- }
133
- state.startingCalculating.add(key);
134
- let value = getValue(input);
135
- state.values.set(key, value);
136
- return value;
137
- };
138
- }
139
- exports.cacheWeak = cacheWeak;
140
- // A list cache, which... maybe faster than a Map?
141
- function cacheList(getLength, getValue) {
142
- let state = {
143
- cache: [],
144
- length: undefined,
145
- getLength,
146
- };
147
- function get(i) {
148
- let cache = state.cache;
149
- let length = state.length;
150
- if (length === undefined) {
151
- length = state.length = state.getLength();
152
- }
153
- if (i < 0 || i >= length) {
154
- throw new Error(`Index out of bounds`);
155
- }
156
- if (!(i in cache)) {
157
- cache[i] = getValue(i);
158
- }
159
- return cache[i];
160
- }
161
- ;
162
- return get;
163
- }
164
- exports.cacheList = cacheList;
165
- function cacheArrayEqualCleanup(state) {
166
- state.cache = [];
167
- }
168
- /** A cache half way between caching based on === and caching based on hash. Caches
169
- * based on arrayEqual, which does === on all values in an array. Requires localized
170
- * caching (as the comparisons don't scale with many candidates, unlike hashing),
171
- * however works with non trival transformations (ex, resolving many persisted overrides
172
- * to get a value), unlike cache().
173
- * Also, limits itself, more of a performance optimization than memory optimization, as it scales
174
- * very poorly with the number of candidates.
175
- *
176
- * TIMING: About 6us with limit = 100, array size = 294, and the cache being full.
177
- */
178
- function cacheArrayEqual(map, limit = 10) {
179
- let state = { cache: [] };
180
- function isMatch(lhs, rhs) {
181
- if (lhs === rhs) {
182
- return true;
183
- }
184
- if (lhs === undefined || rhs === undefined) {
185
- return false;
186
- }
187
- if ((0, misc_1.arrayEqual)(lhs, rhs)) {
188
- return true;
189
- }
190
- return false;
191
- }
192
- return Object.assign((input) => {
193
- let cache = state.cache;
194
- for (let obj of cache) {
195
- if (isMatch(obj.input, input)) {
196
- return obj.output;
197
- }
198
- }
199
- let output = map(input);
200
- cache.unshift({ input, output });
201
- while (cache.length > limit) {
202
- cache.pop();
203
- }
204
- return output;
205
- }, {
206
- clear(array) {
207
- for (let i = state.cache.length - 1; i >= 0; i--) {
208
- if (isMatch(state.cache[i].input, array)) {
209
- state.cache.splice(i, 1);
210
- }
211
- }
212
- },
213
- clearAll() {
214
- state.cache = [];
215
- },
216
- });
217
- }
218
- exports.cacheArrayEqual = cacheArrayEqual;
219
- /** Caches when arguments are ===. See cacheArrayEqual */
220
- function cacheArgsEqual(fnc, limit = 10) {
221
- let cache = cacheArrayEqual(function cacheArgsEqual(args) {
222
- return fnc(...args);
223
- }, limit);
224
- return Object.assign(((...args) => {
225
- return cache(args);
226
- }), {
227
- clear(...args) {
228
- cache.clear(args);
229
- },
230
- });
231
- }
232
- exports.cacheArgsEqual = cacheArgsEqual;
233
- function cacheJSONArgsEqual(fnc, limit = 10) {
234
- let cache = cacheLimited(limit, (argsJSON) => {
235
- return fnc(...JSON.parse(argsJSON));
236
- });
237
- return Object.assign(((...args) => {
238
- return cache(JSON.stringify(args));
239
- }), {
240
- clear(...args) {
241
- cache.clearKey(JSON.stringify(args));
242
- },
243
- clearAll() {
244
- cache.clear();
245
- }
246
- });
247
- }
248
- exports.cacheJSONArgsEqual = cacheJSONArgsEqual;
249
- function cacheShallowConfigArgEqual(fnc, limit = 10) {
250
- let cache = cacheArrayEqual((kvpsFlat) => {
251
- output.missCount++;
252
- let arg;
253
- if (kvpsFlat.length === 1) {
254
- arg = kvpsFlat[0];
255
- }
256
- else {
257
- let kvps = [];
258
- for (let i = 0; i < kvpsFlat.length; i += 2) {
259
- kvps.push([kvpsFlat[i], kvpsFlat[i + 1]]);
260
- }
261
- arg = Object.fromEntries(kvps);
262
- }
263
- return fnc(arg);
264
- }, limit);
265
- function getKVPs(configArg) {
266
- if (!(0, types_1.canHaveChildren)(configArg) || Array.isArray(configArg)) {
267
- return [configArg];
268
- }
269
- let keys = Object.keys(configArg);
270
- keys.sort();
271
- return keys.flatMap(key => [key, configArg[key]]);
272
- }
273
- let output = Object.assign(((configArg) => {
274
- output.callCount++;
275
- return cache(getKVPs(configArg));
276
- }), {
277
- clear(configArg) {
278
- cache.clear(getKVPs(configArg));
279
- },
280
- clearAll() {
281
- cache.clearAll();
282
- },
283
- callCount: 0,
284
- missCount: 0,
285
- });
286
- return output;
287
- }
288
- exports.cacheShallowConfigArgEqual = cacheShallowConfigArgEqual;
289
- function externalCache() {
290
- let values = new Map();
291
- return {
292
- get: (key) => {
293
- return values.get(key);
294
- },
295
- set: (key, value) => {
296
- values.set(key, value);
297
- },
298
- };
299
- }
300
- exports.externalCache = externalCache;
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNhY2hpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQW9DO0FBQ3BDLG1DQUE2RDtBQUU3RCxTQUFnQixJQUFJLENBQUksT0FBZ0I7SUFDcEMsSUFBSSxLQUFLLEdBQTZCLFNBQVMsQ0FBQztJQUNoRCxTQUFTLEdBQUc7UUFDUixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDVCxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFBQSxDQUFDO0lBQ0YsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDYixLQUFLLEdBQUcsU0FBUyxDQUFDO0lBQ3RCLENBQUMsQ0FBQztJQUNGLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFXLEVBQUUsRUFBRTtRQUN0QixLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBZkQsb0JBZUM7QUFhRCxvRkFBb0Y7QUFDcEYsNkNBQTZDO0FBQzdDLE1BQU0sVUFBVSxHQUFVLEVBQUUsQ0FBQztBQUM3QixTQUFnQixlQUFlLENBQUksS0FBVTtJQUN6QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sVUFBVSxDQUFDO0lBQzFDLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFIRCwwQ0FHQztBQUVELFNBQWdCLEtBQUssQ0FDakIsUUFBdUQ7SUFVdkQsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBTyxDQUFDO0lBQ3pDLElBQUksTUFBTSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFDcEMsU0FBUyxLQUFLLENBQUMsS0FBVSxFQUFFLEdBQUcsU0FB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Q0ksS0FBSyxDQUFDLFNBQWlCO1lBQ25CLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELFFBQVE7WUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUNELFNBQVMsRUFBRSxDQUFDO1FBQ1osU0FBUyxFQUFFLENBQUM7S0FDZixDQUNKLENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBOUNELGdFQThDQztBQUdELFNBQWdCLGFBQWE7SUFJekIsSUFBSSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWMsQ0FBQztJQUNuQyxPQUFPO1FBQ0gsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDVCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUNELEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNoQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDO0tBQ0osQ0FBQztBQUNOLENBQUM7QUFiRCxzQ0FhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFycmF5RXF1YWwgfSBmcm9tIFwiLi9taXNjXCI7XG5pbXBvcnQgeyBBbnlGdW5jdGlvbiwgQXJncywgY2FuSGF2ZUNoaWxkcmVuIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxhenk8VD4oZmFjdG9yeTogKCkgPT4gVCkge1xuICAgIGxldCB2YWx1ZTogeyB2YWx1ZTogVCB9IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB7IHZhbHVlOiBmYWN0b3J5KCkgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgfTtcbiAgICBnZXQucmVzZXQgPSAoKSA9PiB7XG4gICAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgZ2V0LnNldCA9IChuZXdWYWx1ZTogVCkgPT4ge1xuICAgICAgICB2YWx1ZSA9IHsgdmFsdWU6IG5ld1ZhbHVlIH07XG4gICAgfTtcbiAgICByZXR1cm4gZ2V0O1xufVxuXG4vLyBOT1RFOiBUaGUgcmVhc29uIHdlIG5lZWQgdG8gcGVyaW9kaWNhbGx5IGNsZWFyLCBpcyBiZWNhdXNlIHNvbWV0aW1lcyBhIHZlcnkgc21hbGxcbi8vICAgICAgcGFydCBvZiBhIGxhcmdlIHBheWxvYWQgKGV4LCBwZXJzaXN0ZWQgb3ZlcnJpZGVzKSBpcyBjYWNoZWQsIHdoaWNoIHRoZW4gcmVzdWx0c1xuLy8gICAgICBpbiB0aGUgd2hvbGUgcGF5bG9hZCBiZWluZyBjYWNoZWQsIHdoaWNoIHJlc3VsdHMgaW4gYSBsb3Qgb2YgbWVtb3J5IGJlaW5nIHVzZWQuXG5cbi8vIElNUE9SVEFOVCEgVGhlIGNsZWFudXAgZnVuY3Rpb25zIENBTk5PVCBjbG9zZSB1cG9uIGFueXRoaW5nLCBvciBlbHNlIHRoZXkgd2lsbCBjYXVzZSBsZWFrcyFcbi8vICBBbGwgZGF0YSB0aGV5IHVzZSBzaG91bGQgYmUgaW4gZGF0YS5cbmludGVyZmFjZSBDbGVhbnVwRm5jPFQgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgICAoZGF0YTogVCk6IHZvaWQ7XG59XG5cblxuLy8gTk9URTogRW1wdHkgYXJyYXlzIGFyZSBzbyBjb21tb24sIHRoYXQgaXQgaXMgdXNlZnVsIHRvIHJlcHJlc2VudCB0aGVtIGFzIHRoZSBzYW1lXG4vLyAgZW10cHkgYXJyYXksIHRvIGluY3JlYXNlIGNhY2hlIGhpdCByYXRlcy5cbmNvbnN0IGVtcHR5QXJyYXk6IGFueVtdID0gW107XG5leHBvcnQgZnVuY3Rpb24gY2FjaGVFbXB0eUFycmF5PFQ+KGFycmF5OiBUW10pOiBUW10ge1xuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHJldHVybiBlbXB0eUFycmF5O1xuICAgIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlPE91dHB1dCwgS2V5LCBVbnRyYWNrZWQgZXh0ZW5kcyB1bmtub3duW10+KFxuICAgIGdldFZhbHVlOiAoa2V5OiBLZXksIC4uLnVudHJhY2tlZDogVW50cmFja2VkKSA9PiBPdXRwdXRcbik6IHtcbiAgICAoa2V5OiBLZXksIC4uLnVudHJhY2tlZDogVW50cmFja2VkKTogT3V0cHV0O1xuICAgIC8vIE5PVEU6IElmIHlvdSB3YW50IHRvIGNsZWFyIGFsbCwganVzdCBtYWtlIGEgbmV3IGNhY2hlIVxuICAgIGNsZWFyKGtleTogS2V5KTogdm9pZDtcbiAgICBjbGVhckFsbCgpOiB2b2lkO1xuICAgIGZvcmNlU2V0KGtleTogS2V5LCB2YWx1ZTogT3V0cHV0KTogdm9pZDtcbiAgICBnZXRBbGxLZXlzKCk6IEtleVtdO1xuICAgIGdldChrZXk6IEtleSk6IE91dHB1dCB8IHVuZGVmaW5lZDtcbn0ge1xuICAgIGxldCBzdGFydGluZ0NhbGN1bGF0aW5nID0gbmV3IFNldDxLZXk+KCk7XG4gICAgbGV0IHZhbHVlcyA9IG5ldyBNYXA8S2V5LCBPdXRwdXQ+KCk7XG4gICAgZnVuY3Rpb24gY2FjaGUoaW5wdXQ6IEtleSwgLi4udW50cmFja2VkOiBVbnRyYWNrZWQpIHtcbiAgICAgICAgbGV0IGtleSA9IGlucHV0O1xuICAgICAgICBpZiAodmFsdWVzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzLmdldChrZXkpIGFzIGFueTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRpbmdDYWxjdWxhdGluZy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgLy8gVE9ETzogRml4IHRoZSB0eXBlcyBoZXJlLCBieSB0aHJvd2luZywgYW5kIHRoZW4gZm9yIHRoZSBjYXNlc1xuICAgICAgICAgICAgLy8gIHRoYXQgZG9uJ3QgdGhyb3csIG1ha2Ugb3VyIG91dHB1dCB0eXBlIGluY2x1ZGUgdW5kZWZpbmVkXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0aW5nQ2FsY3VsYXRpbmcuYWRkKGtleSk7XG4gICAgICAgIGxldCB2YWx1ZSA9IGdldFZhbHVlKGlucHV0LCAuLi51bnRyYWNrZWQpO1xuICAgICAgICB2YWx1ZXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGNhY2hlLmNsZWFyID0gKGtleTogS2V5KSA9PiB7XG4gICAgICAgIHZhbHVlcy5kZWxldGUoa2V5KTtcbiAgICAgICAgc3RhcnRpbmdDYWxjdWxhdGluZy5kZWxldGUoa2V5KTtcbiAgICB9O1xuICAgIGNhY2hlLmZvcmNlU2V0ID0gKGtleTogS2V5LCB2YWx1ZTogT3V0cHV0KSA9PiB7XG4gICAgICAgIHZhbHVlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHN0YXJ0aW5nQ2FsY3VsYXRpbmcuYWRkKGtleSk7XG4gICAgfTtcbiAgICBjYWNoZS5nZXRBbGxLZXlzID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gWy4uLnZhbHVlcy5rZXlzKCldO1xuICAgIH07XG4gICAgY2FjaGUuZ2V0ID0gKGtleTogS2V5KSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZXMuZ2V0KGtleSk7XG4gICAgfTtcbiAgICBjYWNoZS5jbGVhckFsbCA9ICgpID0+IHtcbiAgICAgICAgdmFsdWVzLmNsZWFyKCk7XG4gICAgICAgIHN0YXJ0aW5nQ2FsY3VsYXRpbmcuY2xlYXIoKTtcbiAgICB9O1xuICAgIHJldHVybiBjYWNoZTtcbn1cblxuXG4vKiogTWFrZXMgYSBjYWNoZSB0aGF0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIGVudHJpZXMsIGFsbG93aW5nIHlvdSB0byBwdXQgYXJiaXRyYXJ5IGRhdGEgaW4gaXRcbiAqICAgICAgd2l0aG91dCB3b3JyeWluZyBhYm91dCBsZWFraW5nIG1lbW9yeVxuICAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlTGltaXRlZDxPdXRwdXQsIEtleT4oXG4gICAgLy8gTk9URTogV2UgY2FuJ3QgY2FsY3VsYXRlIHdoYXQgbGltaXQgc2hvdWxkIGJlIGJhc2VkIG9uIGNvbXBhcmluZyB0aGUgZXZhbHVhdGlvbiB0aW1lXG4gICAgLy8gIGFuZCB0aGUgdGltZSB0byBjb21wYXJlIGFnYWluc3QgdGhlIHZhbHVlcy4gQmVjYXVzZSwgZXZlbiBpZiBmaW5kaW5nIGEgbWF0Y2ggdGFrZXMgZmFyIGxvbmdlciB0aGFuXG4gICAgLy8gIGNhbGN1bGF0aW5nLCBrZWVwaW5nIGEgY29uc2lzdGVudCBvdXRwdXQgY2FuIHNhdmUgKGEgY29uc2lkZXJhYmxlIGFtb3VudCBvZikgdGltZSBpbiBkb3duc3RyZWFtIGNhY2hlcy5cbiAgICBtYXhDb3VudDogbnVtYmVyLFxuICAgIGdldFZhbHVlOiAoa2V5OiBLZXkpID0+IE91dHB1dFxuKSB7XG4gICAgbGV0IHN0YXJ0aW5nQ2FsY3VsYXRpbmcgPSBuZXcgU2V0PEtleT4oKTtcbiAgICBsZXQgdmFsdWVzID0gbmV3IE1hcDxLZXksIE91dHB1dD4oKTtcbiAgICBmdW5jdGlvbiBnZXQoaW5wdXQ6IEtleSk6IE91dHB1dCB7XG4gICAgICAgIGxldCBrZXkgPSBpbnB1dDtcbiAgICAgICAgaWYgKHZhbHVlcy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcy5nZXQoa2V5KSBhcyBhbnk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0aW5nQ2FsY3VsYXRpbmcuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ3ljbGljIGFjY2VzcyBpbiBjYWNoZWApO1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0aW5nQ2FsY3VsYXRpbmcuYWRkKGtleSk7XG5cbiAgICAgICAgLy8gQ2xlYXIgd2hlbiBpdCBnZXRzIHRvbyBiaWcuIFRoaXMgaXMga2luZCBvZiBsaWtlIGEgd29yc2VcbiAgICAgICAgLy8gIGxlYXN0IHJlY2VudGx5IHVzZWQgY2FjaGUsIGJlY2F1c2UgZW50cmllcyB0aGF0IGFyZSBhY2Nlc3NlZFxuICAgICAgICAvLyAgb2Z0ZW4gd2lsbCBxdWlja2x5IGdldCBwdXQgYmFjayBpbi4gVGhpcyBpcyBlZmZlY3RpdmUgYXMgbG9uZ1xuICAgICAgICAvLyAgYXMgYWNjZXNzZXMgdGFrZSBzaW1pbGFyIGFtb3VudHMgb2YgdGltZS4gSWYgdGhlcmUgaXMgYSB2ZXJ5IHNsb3dcbiAgICAgICAgLy8gIGFuZCB2ZXJ5IGNvbW1vbmx5IGFjY2Vzc2VkIHZhbHVlLCBpdCBjb3VsZCBiZSBldmljdGVkIGJ5IG1hbnkgdmVyeVxuICAgICAgICAvLyAgZmFzdCBhY2Nlc3Nlcywgd2hpY2ggd291bGQgYmUgdW5mb3J0dW5hdGUuXG4gICAgICAgIGlmICh2YWx1ZXMuc2l6ZSA+PSBtYXhDb3VudCkge1xuICAgICAgICAgICAgdmFsdWVzLmNsZWFyKCk7XG4gICAgICAgICAgICBzdGFydGluZ0NhbGN1bGF0aW5nLmNsZWFyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmFsdWUgPSBnZXRWYWx1ZShpbnB1dCk7XG4gICAgICAgIHZhbHVlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0W1wiZm9yY2VTZXRcIl0gPSAoa2V5OiBLZXksIHZhbHVlOiBPdXRwdXQpID0+IHtcbiAgICAgICAgdmFsdWVzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgc3RhcnRpbmdDYWxjdWxhdGluZy5hZGQoa2V5KTtcbiAgICB9O1xuICAgIGdldFtcImNsZWFyS2V5XCJdID0gKGtleTogS2V5KSA9PiB7XG4gICAgICAgIHZhbHVlcy5kZWxldGUoa2V5KTtcbiAgICAgICAgc3RhcnRpbmdDYWxjdWxhdGluZy5kZWxldGUoa2V5KTtcbiAgICB9O1xuICAgIGdldFtcImNsZWFyXCJdID0gKCkgPT4ge1xuICAgICAgICB2YWx1ZXMuY2xlYXIoKTtcbiAgICAgICAgc3RhcnRpbmdDYWxjdWxhdGluZy5jbGVhcigpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZ2V0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FjaGVXZWFrPE91dHB1dCwgS2V5IGV4dGVuZHMgb2JqZWN0PihnZXRWYWx1ZTogKGtleTogS2V5KSA9PiBPdXRwdXQpOiAoa2V5OiBLZXkpID0+IE91dHB1dCB7XG4gICAgbGV0IHN0YXRlID0ge1xuICAgICAgICBzdGFydGluZ0NhbGN1bGF0aW5nOiBuZXcgV2Vha1NldDxLZXk+KCksXG4gICAgICAgIHZhbHVlczogbmV3IFdlYWtNYXA8S2V5LCBPdXRwdXQ+KCksXG4gICAgfTtcblxuICAgIHJldHVybiAoaW5wdXQpID0+IHtcbiAgICAgICAgbGV0IGtleSA9IGlucHV0O1xuICAgICAgICBpZiAoc3RhdGUudmFsdWVzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUudmFsdWVzLmdldChrZXkpIGFzIGFueTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUuc3RhcnRpbmdDYWxjdWxhdGluZy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDeWNsaWMgYWNjZXNzIGluIGNhY2hlV2Vha2ApO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLnN0YXJ0aW5nQ2FsY3VsYXRpbmcuYWRkKGtleSk7XG4gICAgICAgIGxldCB2YWx1ZSA9IGdldFZhbHVlKGlucHV0KTtcbiAgICAgICAgc3RhdGUudmFsdWVzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG59XG5cbi8vIEEgbGlzdCBjYWNoZSwgd2hpY2guLi4gbWF5YmUgZmFzdGVyIHRoYW4gYSBNYXA/XG5leHBvcnQgZnVuY3Rpb24gY2FjaGVMaXN0PFZhbHVlPihcbiAgICBnZXRMZW5ndGg6ICgpID0+IG51bWJlcixcbiAgICBnZXRWYWx1ZTogKGluZGV4OiBudW1iZXIpID0+IFZhbHVlLFxuKTogeyAoaW5kZXg6IG51bWJlcik6IFZhbHVlOyB9IHtcbiAgICBsZXQgc3RhdGUgPSB7XG4gICAgICAgIGNhY2hlOiBbXSBhcyBWYWx1ZVtdLFxuICAgICAgICBsZW5ndGg6IHVuZGVmaW5lZCBhcyB1bmRlZmluZWQgfCBudW1iZXIsXG4gICAgICAgIGdldExlbmd0aCxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldChpOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGNhY2hlID0gc3RhdGUuY2FjaGU7XG4gICAgICAgIGxldCBsZW5ndGggPSBzdGF0ZS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGVuZ3RoID0gc3RhdGUubGVuZ3RoID0gc3RhdGUuZ2V0TGVuZ3RoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPCAwIHx8IGkgPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEluZGV4IG91dCBvZiBib3VuZHNgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShpIGluIGNhY2hlKSkge1xuICAgICAgICAgICAgY2FjaGVbaV0gPSBnZXRWYWx1ZShpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FjaGVbaV07XG4gICAgfTtcbiAgICByZXR1cm4gZ2V0O1xufVxuXG5mdW5jdGlvbiBjYWNoZUFycmF5RXF1YWxDbGVhbnVwKHN0YXRlOiBhbnkpIHtcbiAgICBzdGF0ZS5jYWNoZSA9IFtdO1xufVxuXG4vKiogQSBjYWNoZSBoYWxmIHdheSBiZXR3ZWVuIGNhY2hpbmcgYmFzZWQgb24gPT09IGFuZCBjYWNoaW5nIGJhc2VkIG9uIGhhc2guIENhY2hlc1xuICogICAgICBiYXNlZCBvbiBhcnJheUVxdWFsLCB3aGljaCBkb2VzID09PSBvbiBhbGwgdmFsdWVzIGluIGFuIGFycmF5LiBSZXF1aXJlcyBsb2NhbGl6ZWRcbiAqICAgICAgY2FjaGluZyAoYXMgdGhlIGNvbXBhcmlzb25zIGRvbid0IHNjYWxlIHdpdGggbWFueSBjYW5kaWRhdGVzLCB1bmxpa2UgaGFzaGluZyksXG4gKiAgICAgIGhvd2V2ZXIgd29ya3Mgd2l0aCBub24gdHJpdmFsIHRyYW5zZm9ybWF0aW9ucyAoZXgsIHJlc29sdmluZyBtYW55IHBlcnNpc3RlZCBvdmVycmlkZXNcbiAqICAgICAgdG8gZ2V0IGEgdmFsdWUpLCB1bmxpa2UgY2FjaGUoKS5cbiAqICBBbHNvLCBsaW1pdHMgaXRzZWxmLCBtb3JlIG9mIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYW4gbWVtb3J5IG9wdGltaXphdGlvbiwgYXMgaXQgc2NhbGVzXG4gKiAgICAgIHZlcnkgcG9vcmx5IHdpdGggdGhlIG51bWJlciBvZiBjYW5kaWRhdGVzLlxuICogIFxuICogIFRJTUlORzogQWJvdXQgNnVzIHdpdGggbGltaXQgPSAxMDAsIGFycmF5IHNpemUgPSAyOTQsIGFuZCB0aGUgY2FjaGUgYmVpbmcgZnVsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlQXJyYXlFcXVhbDxJbnB1dCBleHRlbmRzIHVua25vd25bXSB8IHVuZGVmaW5lZCwgT3V0cHV0PihcbiAgICBtYXA6IChhcnJheXM6IElucHV0KSA9PiBPdXRwdXQsXG4gICAgbGltaXQgPSAxMFxuKToge1xuICAgIChhcnJheTogSW5wdXQpOiBPdXRwdXQ7XG4gICAgY2xlYXIoYXJyYXk6IElucHV0KTogdm9pZDtcbiAgICBjbGVhckFsbCgpOiB2b2lkO1xufSB7XG4gICAgbGV0IHN0YXRlOiB7XG4gICAgICAgIGNhY2hlOiB7XG4gICAgICAgICAgICBpbnB1dDogSW5wdXQ7XG4gICAgICAgICAgICBvdXRwdXQ6IE91dHB1dDtcbiAgICAgICAgfVtdXG4gICAgfSA9IHsgY2FjaGU6IFtdIH07XG4gICAgZnVuY3Rpb24gaXNNYXRjaChsaHM6IElucHV0LCByaHM6IElucHV0KSB7XG4gICAgICAgIGlmIChsaHMgPT09IHJocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxocyA9PT0gdW5kZWZpbmVkIHx8IHJocyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFycmF5RXF1YWwobGhzLCByaHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgICAgICAoaW5wdXQ6IElucHV0KSA9PiB7XG4gICAgICAgICAgICBsZXQgY2FjaGUgPSBzdGF0ZS5jYWNoZTtcbiAgICAgICAgICAgIGZvciAobGV0IG9iaiBvZiBjYWNoZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc01hdGNoKG9iai5pbnB1dCwgaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmoub3V0cHV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBvdXRwdXQgPSBtYXAoaW5wdXQpO1xuICAgICAgICAgICAgY2FjaGUudW5zaGlmdCh7IGlucHV0LCBvdXRwdXQgfSk7XG4gICAgICAgICAgICB3aGlsZSAoY2FjaGUubGVuZ3RoID4gbGltaXQpIHtcbiAgICAgICAgICAgICAgICBjYWNoZS5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNsZWFyKGFycmF5OiBJbnB1dCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGF0ZS5jYWNoZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaChzdGF0ZS5jYWNoZVtpXS5pbnB1dCwgYXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jYWNoZS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xlYXJBbGwoKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuY2FjaGUgPSBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICApO1xufVxuXG4vKiogQ2FjaGVzIHdoZW4gYXJndW1lbnRzIGFyZSA9PT0uIFNlZSBjYWNoZUFycmF5RXF1YWwgKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZUFyZ3NFcXVhbDxGbmMgZXh0ZW5kcyBBbnlGdW5jdGlvbj4oXG4gICAgZm5jOiBGbmMsXG4gICAgbGltaXQgPSAxMFxuKTogRm5jICYgeyBjbGVhciguLi5hcmdzOiBBcmdzPEZuYz4pOiB2b2lkIH0ge1xuICAgIGxldCBjYWNoZSA9IGNhY2hlQXJyYXlFcXVhbChmdW5jdGlvbiBjYWNoZUFyZ3NFcXVhbChhcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgcmV0dXJuIGZuYyguLi5hcmdzKTtcbiAgICB9LCBsaW1pdCk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICgoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGUoYXJncyk7XG4gICAgICAgIH0pIGFzIEZuYyxcbiAgICAgICAge1xuICAgICAgICAgICAgY2xlYXIoLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICAgICAgICAgICAgY2FjaGUuY2xlYXIoYXJncyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlSlNPTkFyZ3NFcXVhbDxGbmMgZXh0ZW5kcyBBbnlGdW5jdGlvbj4oXG4gICAgZm5jOiBGbmMsXG4gICAgbGltaXQgPSAxMFxuKSB7XG4gICAgbGV0IGNhY2hlID0gY2FjaGVMaW1pdGVkKGxpbWl0LCAoYXJnc0pTT046IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gZm5jKC4uLkpTT04ucGFyc2UoYXJnc0pTT04pKTtcbiAgICB9KTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgKCguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZShKU09OLnN0cmluZ2lmeShhcmdzKSk7XG4gICAgICAgIH0pIGFzIEZuYyxcbiAgICAgICAge1xuICAgICAgICAgICAgY2xlYXIoLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICAgICAgICAgICAgY2FjaGUuY2xlYXJLZXkoSlNPTi5zdHJpbmdpZnkoYXJncykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFyQWxsKCkge1xuICAgICAgICAgICAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FjaGVTaGFsbG93Q29uZmlnQXJnRXF1YWw8Rm5jIGV4dGVuZHMgQW55RnVuY3Rpb24+KFxuICAgIGZuYzogRm5jLFxuICAgIGxpbWl0ID0gMTBcbik6IEZuYyAmIHtcbiAgICBjbGVhcihjb25maWdPYmo6IEFyZ3M8Rm5jPlswXSk6IHZvaWQ7XG4gICAgY2xlYXJBbGwoKTogdm9pZDtcbn0ge1xuICAgIGxldCBjYWNoZSA9IGNhY2hlQXJyYXlFcXVhbCgoa3Zwc0ZsYXQ6IHVua25vd25bXSkgPT4ge1xuICAgICAgICBvdXRwdXQubWlzc0NvdW50Kys7XG4gICAgICAgIGxldCBhcmc6IGFueTtcbiAgICAgICAgaWYgKGt2cHNGbGF0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgYXJnID0ga3Zwc0ZsYXRbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQga3ZwczogW3Vua25vd24sIHVua25vd25dW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga3Zwc0ZsYXQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICBrdnBzLnB1c2goW2t2cHNGbGF0W2ldLCBrdnBzRmxhdFtpICsgMV1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFyZyA9IE9iamVjdC5mcm9tRW50cmllcyhrdnBzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm5jKGFyZyk7XG4gICAgfSwgbGltaXQpO1xuICAgIGZ1bmN0aW9uIGdldEtWUHMoY29uZmlnQXJnOiBvYmplY3QpIHtcbiAgICAgICAgaWYgKCFjYW5IYXZlQ2hpbGRyZW4oY29uZmlnQXJnKSB8fCBBcnJheS5pc0FycmF5KGNvbmZpZ0FyZykpIHtcbiAgICAgICAgICAgIHJldHVybiBbY29uZmlnQXJnXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZ0FyZyk7XG4gICAgICAgIGtleXMuc29ydCgpO1xuICAgICAgICByZXR1cm4ga2V5cy5mbGF0TWFwKGtleSA9PiBba2V5LCBjb25maWdBcmdba2V5XV0pO1xuICAgIH1cbiAgICBsZXQgb3V0cHV0ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgKChjb25maWdBcmc6IG9iamVjdCkgPT4ge1xuICAgICAgICAgICAgb3V0cHV0LmNhbGxDb3VudCsrO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlKGdldEtWUHMoY29uZmlnQXJnKSk7XG4gICAgICAgIH0pIGFzIEZuYyxcbiAgICAgICAge1xuICAgICAgICAgICAgY2xlYXIoY29uZmlnQXJnOiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICBjYWNoZS5jbGVhcihnZXRLVlBzKGNvbmZpZ0FyZykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsZWFyQWxsKCkge1xuICAgICAgICAgICAgICAgIGNhY2hlLmNsZWFyQWxsKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbENvdW50OiAwLFxuICAgICAgICAgICAgbWlzc0NvdW50OiAwLFxuICAgICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gb3V0cHV0O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlcm5hbENhY2hlPEtleSwgVmFsdWU+KCk6IHtcbiAgICBnZXQ6IChrZXk6IEtleSkgPT4gVmFsdWUgfCB1bmRlZmluZWQ7XG4gICAgc2V0OiAoa2V5OiBLZXksIHZhbHVlOiBWYWx1ZSkgPT4gdm9pZDtcbn0ge1xuICAgIGxldCB2YWx1ZXMgPSBuZXcgTWFwPEtleSwgVmFsdWU+KCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0OiAoa2V5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzLmdldChrZXkpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB2YWx1ZXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgIH07XG59Il19
302
- /* _JS_SOURCE_HASH = "e5964017f21326708ab4acf53a9ad4f981b3277ceb2092ca364a6db5df598144"; */