socket-function 1.1.49 → 1.2.1
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/SocketFunction.d.ts +1 -1
- package/SocketFunctionTypes.d.ts +1 -1
- package/dist/SetProcessVariables.ts.cache +9 -0
- package/dist/SocketFunction.ts.cache +467 -0
- package/hot/HotReloadController.d.ts +3 -3
- package/hot/dist/HotReloadController.ts.cache +252 -0
- package/index.d.ts +10 -25
- package/package.json +1 -1
- package/require/CSSShim.d.ts +1 -1
- package/require/RequireController.d.ts +2 -2
- package/require/compileFlags.d.ts +1 -1
- package/require/dist/RequireController.ts.cache +386 -0
- package/require/dist/compileFlags.ts.cache +41 -0
- package/require/dist/extMapper.ts.cache +368 -0
- package/require/dist/require.ts.cache +676 -0
- package/require/require.d.ts +1 -1
- package/src/JSONLACKS/dist/JSONLACKS.ts.cache +469 -0
- package/src/callManager.d.ts +1 -1
- package/src/dist/CallFactory.ts.cache +930 -0
- package/src/dist/Zip.ts.cache +156 -0
- package/src/dist/batching.ts.cache +377 -0
- package/src/dist/bits.ts.cache +121 -0
- package/src/dist/buffers.ts.cache +76 -0
- package/src/dist/caching.ts.cache +302 -0
- package/src/dist/callHTTPHandler.ts.cache +264 -0
- package/src/dist/callManager.ts.cache +159 -0
- package/src/dist/certStore.ts.cache +59 -0
- package/src/dist/createSingleton.ts.cache +62 -0
- package/src/dist/fixLargeNetworkCalls.ts.cache +17 -0
- package/src/dist/forwardPort.ts.cache +222 -0
- package/src/dist/https.ts.cache +141 -0
- package/src/dist/misc.ts.cache +499 -0
- package/src/dist/nodeCache.ts.cache +136 -0
- package/src/dist/nodeProxy.ts.cache +57 -0
- package/src/dist/protocolNegotiation.ts.cache +101 -0
- package/src/dist/tlsParsing.ts.cache +85 -0
- package/src/dist/types.ts.cache +9 -0
- package/src/dist/webSocketServer.ts.cache +365 -0
- package/src/dist/websocketFactory.ts.cache +53 -0
- package/src/formatting/dist/colors.ts.cache +98 -0
- package/src/formatting/dist/format.ts.cache +396 -0
- package/src/formatting/dist/logColors.ts.cache +28 -0
- package/src/lz4/dist/LZ4.ts.cache +53 -0
- package/src/profiling/dist/getOwnTime.ts.cache +100 -0
- package/src/profiling/dist/measure.ts.cache +338 -0
- package/src/profiling/dist/stats.ts.cache +202 -0
- package/src/profiling/dist/statsFormat.ts.cache +45 -0
- package/src/profiling/getOwnTime.ts +7 -1
- package/src/profiling/measure.ts +25 -16
- package/test.ts +11 -5
- package/time/dist/trueTimeShim.ts.cache +656 -0
- package/time/trueTimeShim.d.ts +1 -16
- package/time/trueTimeShim.ts +7 -43
|
@@ -0,0 +1,252 @@
|
|
|
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";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
29
|
+
exports.HotReloadController = exports.onHotReload = exports.setExternalHotReloading = exports.hotReloadingGuard = exports.isHotReloading = exports.watchFilesAndTriggerHotReloading = void 0;
|
|
30
|
+
/// <reference path="../../typenode/index.d.ts" />
|
|
31
|
+
/// <reference path="../require/RequireController.ts" />
|
|
32
|
+
module.allowclient = true;
|
|
33
|
+
const SocketFunction_1 = require("../SocketFunction");
|
|
34
|
+
const caching_1 = require("../src/caching");
|
|
35
|
+
const createSingleton_1 = require("../src/createSingleton");
|
|
36
|
+
const fs = __importStar(require("fs"));
|
|
37
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
38
|
+
const misc_1 = require("../src/misc");
|
|
39
|
+
const logColors_1 = require("../src/formatting/logColors");
|
|
40
|
+
const format_1 = require("../src/formatting/format");
|
|
41
|
+
const RequireController_1 = require("../require/RequireController");
|
|
42
|
+
/** Enables some hot reload functionality.
|
|
43
|
+
* - Triggers a refresh clientside
|
|
44
|
+
* - Triggers a reload server, for modules marked with `module.hotreload`
|
|
45
|
+
*/
|
|
46
|
+
function watchFilesAndTriggerHotReloading(noAutomaticBrowserWatch = false) {
|
|
47
|
+
SocketFunction_1.SocketFunction.expose(exports.HotReloadController);
|
|
48
|
+
if (!(0, misc_1.isNode)()) {
|
|
49
|
+
if (!noAutomaticBrowserWatch) {
|
|
50
|
+
exports.HotReloadController.nodes[SocketFunction_1.SocketFunction.browserNodeId()]
|
|
51
|
+
.watchFiles()
|
|
52
|
+
.catch(e => console.error("watchFiles error", e));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
setInterval(() => {
|
|
56
|
+
for (let module of Object.values(require.cache)) {
|
|
57
|
+
if (!module)
|
|
58
|
+
continue;
|
|
59
|
+
hotReloadModule(module);
|
|
60
|
+
}
|
|
61
|
+
}, 5000);
|
|
62
|
+
}
|
|
63
|
+
exports.watchFilesAndTriggerHotReloading = watchFilesAndTriggerHotReloading;
|
|
64
|
+
// Shared across copies of this package, so the "currently hot reloading" flag is consistent no
|
|
65
|
+
// matter which copy set it (ex, setExternalHotReloading) or reads it (callManager.registerClass
|
|
66
|
+
// reads it via the globalThis.isHotReloading bridge, which each copy overwrites). See createSingleton.
|
|
67
|
+
const isHotReloadingState = (0, createSingleton_1.createSingleton)("HotReloadController.isHotReloading", 1, () => ({ value: false }));
|
|
68
|
+
function isHotReloading() {
|
|
69
|
+
return isHotReloadingState.get().value;
|
|
70
|
+
}
|
|
71
|
+
exports.isHotReloading = isHotReloading;
|
|
72
|
+
globalThis.isHotReloading = isHotReloading;
|
|
73
|
+
function hotReloadingGuard() {
|
|
74
|
+
return !isHotReloading();
|
|
75
|
+
}
|
|
76
|
+
exports.hotReloadingGuard = hotReloadingGuard;
|
|
77
|
+
function setExternalHotReloading(value) {
|
|
78
|
+
isHotReloadingState.get().value = value;
|
|
79
|
+
}
|
|
80
|
+
exports.setExternalHotReloading = setExternalHotReloading;
|
|
81
|
+
// Shared across copies, so callbacks registered through one copy's onHotReload still fire when the
|
|
82
|
+
// first-registered copy's controller performs a reload. See createSingleton.
|
|
83
|
+
const hotReloadCallbacks = (0, createSingleton_1.createSingleton)("HotReloadController.hotReloadCallbacks", 1, () => []).get();
|
|
84
|
+
function onHotReload(callback) {
|
|
85
|
+
hotReloadCallbacks.push(callback);
|
|
86
|
+
}
|
|
87
|
+
exports.onHotReload = onHotReload;
|
|
88
|
+
const hotReloadModule = (0, caching_1.cache)((module) => {
|
|
89
|
+
if (!module.updateContents)
|
|
90
|
+
return;
|
|
91
|
+
let interval = 1000;
|
|
92
|
+
let fast = false;
|
|
93
|
+
if (module.hotreload) {
|
|
94
|
+
interval = 100;
|
|
95
|
+
fast = true;
|
|
96
|
+
}
|
|
97
|
+
let lastHashes = new Map();
|
|
98
|
+
function getHash(path) {
|
|
99
|
+
try {
|
|
100
|
+
let contents = fs.readFileSync(path, "utf8");
|
|
101
|
+
return crypto_1.default.createHash("sha256").update(contents).digest("hex");
|
|
102
|
+
}
|
|
103
|
+
catch (_a) {
|
|
104
|
+
return "";
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
watchFile(module.filename);
|
|
108
|
+
for (let path of module.watchAdditionalFiles || []) {
|
|
109
|
+
watchFile(path);
|
|
110
|
+
}
|
|
111
|
+
function watchFile(path) {
|
|
112
|
+
lastHashes.set(path, getHash(path));
|
|
113
|
+
fs.watchFile(path, { persistent: false, interval }, (curr, prev) => {
|
|
114
|
+
let newHash = getHash(path);
|
|
115
|
+
if (newHash === lastHashes.get(path))
|
|
116
|
+
return;
|
|
117
|
+
lastHashes.set(path, newHash);
|
|
118
|
+
if (path === module.filename) {
|
|
119
|
+
console.log(`Hot reloading ${module.filename} due to change`);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
console.log(`Hot reloading ${module.filename} due to change in ${path}`);
|
|
123
|
+
}
|
|
124
|
+
doHotReload(curr.mtimeMs);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
// IMPORTANT! changeTime is for benchmarking how long we took to hotreload (and nothing else)
|
|
128
|
+
function doHotReload(changeTime) {
|
|
129
|
+
var _a, _b, _c;
|
|
130
|
+
(_a = module.updateContents) === null || _a === void 0 ? void 0 : _a.call(module);
|
|
131
|
+
if ((0, misc_1.isNode)() && !module.noserverhotreload) {
|
|
132
|
+
if (module.hotreload
|
|
133
|
+
// A fairly big hack (as this could just be in a string, or something similar), but... it also VERY useful
|
|
134
|
+
|| ((_b = module.moduleContents) === null || _b === void 0 ? void 0 : _b.includes("\nmodule.hotreload = true;" + "\n"))
|
|
135
|
+
|| ((_c = module.moduleContents) === null || _c === void 0 ? void 0 : _c.includes("\r\nmodule.hotreload = true;" + "\r\n"))) {
|
|
136
|
+
console.log(`Serverside reloading ${module.id}`);
|
|
137
|
+
isHotReloadingState.get().value = true;
|
|
138
|
+
try {
|
|
139
|
+
module.loaded = false;
|
|
140
|
+
module.load(module.id);
|
|
141
|
+
}
|
|
142
|
+
catch (e) {
|
|
143
|
+
console.error((0, logColors_1.red)(`Error hot reloading ${module.id}`));
|
|
144
|
+
console.error(e);
|
|
145
|
+
}
|
|
146
|
+
finally {
|
|
147
|
+
setTimeout(() => {
|
|
148
|
+
isHotReloadingState.get().value = false;
|
|
149
|
+
}, 1000);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
for (let callback of hotReloadCallbacks) {
|
|
153
|
+
callback([module]);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//module.sourceSHA256;
|
|
157
|
+
// crypto.createHash("sha256").update(contents).digest("hex")
|
|
158
|
+
if ((0, RequireController_1.getIsAllowClient)(module)) {
|
|
159
|
+
triggerClientSideReload({
|
|
160
|
+
files: [module.filename],
|
|
161
|
+
changeTime,
|
|
162
|
+
fast,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
let reloadTriggering = false;
|
|
168
|
+
let clientWatcherNodes = new Set();
|
|
169
|
+
let pendingTriggerFiles = new Set();
|
|
170
|
+
function triggerClientSideReload(config) {
|
|
171
|
+
for (let file of config.files) {
|
|
172
|
+
pendingTriggerFiles.add(file);
|
|
173
|
+
}
|
|
174
|
+
if (reloadTriggering)
|
|
175
|
+
return;
|
|
176
|
+
reloadTriggering = true;
|
|
177
|
+
setTimeout(async () => {
|
|
178
|
+
reloadTriggering = false;
|
|
179
|
+
let files = Array.from(pendingTriggerFiles);
|
|
180
|
+
pendingTriggerFiles.clear();
|
|
181
|
+
for (let clientNodeId of clientWatcherNodes) {
|
|
182
|
+
console.log(`Notifying client of hot reload: ${clientNodeId}`, files);
|
|
183
|
+
exports.HotReloadController.nodes[clientNodeId].fileUpdated(files, config.changeTime).catch(() => {
|
|
184
|
+
console.log(`Removing erroring client: ${clientNodeId}`);
|
|
185
|
+
clientWatcherNodes.delete(clientNodeId);
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
// We need to wait, otherwise batched updates fail, WHICH, can result in updates while reloading,
|
|
189
|
+
// which causes missed updates.
|
|
190
|
+
}, config.fast ? 50 : 300);
|
|
191
|
+
}
|
|
192
|
+
class HotReloadControllerBase {
|
|
193
|
+
// TODO: Also hot reload when we reconnect to the server, as it is likely setup will need to
|
|
194
|
+
// be rerun in that case as well (for example, we need to call watchFiles again!)
|
|
195
|
+
async watchFiles() {
|
|
196
|
+
let callerId = SocketFunction_1.SocketFunction.getCaller().nodeId;
|
|
197
|
+
clientWatcherNodes.add(callerId);
|
|
198
|
+
}
|
|
199
|
+
// TODO: This is actually broken related to lazy loaded and server-only code, as the server will tell us a file changed, and then we'll see that we don't have it loaded, and so we will try to refresh.
|
|
200
|
+
// - The reason we refresh is because it might be a new file. I don't know how we could check to see if it was lazy loaded. Maybe we just shouldn't refresh ever if we can't find the module? We'll see how much we run into the extra refresh due to lazy loading...
|
|
201
|
+
async fileUpdated(files, changeTime) {
|
|
202
|
+
try {
|
|
203
|
+
console.groupCollapsed((0, logColors_1.magenta)(`Trigger hotreload for files ${(0, format_1.formatTime)(Date.now() - changeTime)} after file change`));
|
|
204
|
+
for (let file of files) {
|
|
205
|
+
console.log(file);
|
|
206
|
+
}
|
|
207
|
+
console.groupEnd();
|
|
208
|
+
let modules = [];
|
|
209
|
+
for (let file of files) {
|
|
210
|
+
file = "https://" + ((BOOTED_EDGE_NODE === null || BOOTED_EDGE_NODE === void 0 ? void 0 : BOOTED_EDGE_NODE.host) || location.host) + "/" + file;
|
|
211
|
+
let module = require.cache[file];
|
|
212
|
+
if (!module) {
|
|
213
|
+
console.log(`Module not found: ${file}, not reloading page`);
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
if (!module.hotreload) {
|
|
217
|
+
console.log(`Module not hotreloadable: ${file}, reloading page to ensure new version is loaded`);
|
|
218
|
+
document.location.reload();
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
modules.push(module);
|
|
222
|
+
}
|
|
223
|
+
for (let module of modules) {
|
|
224
|
+
module.loaded = false;
|
|
225
|
+
}
|
|
226
|
+
isHotReloadingState.get().value = true;
|
|
227
|
+
try {
|
|
228
|
+
await Promise.all(modules.map(module => module.load(module.filename)));
|
|
229
|
+
}
|
|
230
|
+
finally {
|
|
231
|
+
setTimeout(() => {
|
|
232
|
+
isHotReloadingState.get().value = false;
|
|
233
|
+
}, 1000);
|
|
234
|
+
}
|
|
235
|
+
for (let callback of hotReloadCallbacks) {
|
|
236
|
+
callback(modules);
|
|
237
|
+
}
|
|
238
|
+
console.log((0, logColors_1.magenta)(`Hot reload complete ${(0, format_1.formatTime)(Date.now() - changeTime)} after file change`));
|
|
239
|
+
}
|
|
240
|
+
catch (e) {
|
|
241
|
+
console.error(`Hot reload failed ${e.stack}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
exports.HotReloadController = SocketFunction_1.SocketFunction.register("HotReloadController-032b2250-3aac-4187-8c95-75412742b8f5", new HotReloadControllerBase(), () => ({
|
|
246
|
+
watchFiles: {},
|
|
247
|
+
fileUpdated: {}
|
|
248
|
+
}), () => ({}), {
|
|
249
|
+
noAutoExpose: true,
|
|
250
|
+
});
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSG90UmVsb2FkQ29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkhvdFJlbG9hZENvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrREFBa0Q7QUFDbEQsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBRTFCLHNEQUFtRDtBQUNuRCw0Q0FBNkM7QUFDN0MsNERBQXlEO0FBQ3pELHVDQUF5QjtBQUN6QixvREFBNEI7QUFFNUIsc0NBQXFDO0FBQ3JDLDJEQUEyRDtBQUMzRCxxREFBc0Q7QUFFdEQsb0VBQWdFO0FBRWhFOzs7R0FHRztBQUNILFNBQWdCLGdDQUFnQyxDQUFDLHVCQUF1QixHQUFHLEtBQUs7SUFDNUUsK0JBQWMsQ0FBQyxNQUFNLENBQUMsMkJBQW1CLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUMsSUFBQSxhQUFNLEdBQUUsRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDM0IsMkJBQW1CLENBQUMsS0FBSyxDQUFDLCtCQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQ3BELFVBQVUsRUFBRTtpQkFDWixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ2hEO1FBQ1QsQ0FBQztJQUNMLENBQUM7SUFDRCxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ2IsS0FBSyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxNQUFNO2dCQUFFLFNBQVM7WUFDdEIsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDTCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDYixDQUFDO0FBaEJELDRF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QUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRSxDQUFDO29CQUFTLENBQUM7Z0JBQ1AsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDWixtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUM1QyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDYixDQUFDO1lBRUQsS0FBSyxJQUFJLFFBQVEsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUN0QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsQ0FBQztZQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBQSxtQkFBTyxFQUFDLHVCQUF1QixJQUFBLG1CQUFVLEVBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDekcsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBRVksUUFBQSxtQkFBbUIsR0FBRywrQkFBYyxDQUFDLFFBQVEsQ0FDdEQsMERBQTBELEVBQzFELElBQUksdUJBQXVCLEVBQUUsRUFDN0IsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNILFVBQVUsRUFBRSxFQUFFO0lBQ2QsV0FBVyxFQUFFLEVBQUU7Q0FDbEIsQ0FBQyxFQUNGLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFFTixDQUFDLEVBQ0Y7SUFDSSxZQUFZLEVBQUUsSUFBSTtDQUNyQixDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vdHlwZW5vZGUvaW5kZXguZC50c1wiIC8+XG4vLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vcmVxdWlyZS9SZXF1aXJlQ29udHJvbGxlci50c1wiIC8+XG5tb2R1bGUuYWxsb3djbGllbnQgPSB0cnVlO1xuXG5pbXBvcnQgeyBTb2NrZXRGdW5jdGlvbiB9IGZyb20gXCIuLi9Tb2NrZXRGdW5jdGlvblwiO1xuaW1wb3J0IHsgY2FjaGUsIGxhenkgfSBmcm9tIFwiLi4vc3JjL2NhY2hpbmdcIjtcbmltcG9ydCB7IGNyZWF0ZVNpbmdsZXRvbiB9IGZyb20gXCIuLi9zcmMvY3JlYXRlU2luZ2xldG9uXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IGRlYnVnYnJlYWsgZnJvbSBcImRlYnVnYnJlYWtcIjtcbmltcG9ydCB7IGlzTm9kZSB9IGZyb20gXCIuLi9zcmMvbWlzY1wiO1xuaW1wb3J0IHsgbWFnZW50YSwgcmVkIH0gZnJvbSBcIi4uL3NyYy9mb3JtYXR0aW5nL2xvZ0NvbG9yc1wiO1xuaW1wb3J0IHsgZm9ybWF0VGltZSB9IGZyb20gXCIuLi9zcmMvZm9ybWF0dGluZy9mb3JtYXRcIjtcbmltcG9ydCB7IGJhdGNoRnVuY3Rpb24gfSBmcm9tIFwiLi4vc3JjL2JhdGNoaW5nXCI7XG5pbXBvcnQgeyBnZXRJc0FsbG93Q2xpZW50IH0gZnJvbSBcIi4uL3JlcXVpcmUvUmVxdWlyZUNvbnRyb2xsZXJcIjtcblxuLyoqIEVuYWJsZXMgc29tZSBob3QgcmVsb2FkIGZ1bmN0aW9uYWxpdHkuXG4gKiAgICAgIC0gVHJpZ2dlcnMgYSByZWZyZXNoIGNsaWVudHNpZGVcbiAqICAgICAgLSBUcmlnZ2VycyBhIHJlbG9hZCBzZXJ2ZXIsIGZvciBtb2R1bGVzIG1hcmtlZCB3aXRoIGBtb2R1bGUuaG90cmVsb2FkYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2F0Y2hGaWxlc0FuZFRyaWdnZXJIb3RSZWxvYWRpbmcobm9BdXRvbWF0aWNCcm93c2VyV2F0Y2ggPSBmYWxzZSkge1xuICAgIFNvY2tldEZ1bmN0aW9uLmV4cG9zZShIb3RSZWxvYWRDb250cm9sbGVyKTtcbiAgICBpZiAoIWlzTm9kZSgpKSB7XG4gICAgICAgIGlmICghbm9BdXRvbWF0aWNCcm93c2VyV2F0Y2gpIHtcbiAgICAgICAgICAgIEhvdFJlbG9hZENvbnRyb2xsZXIubm9kZXNbU29ja2V0RnVuY3Rpb24uYnJvd3Nlck5vZGVJZCgpXVxuICAgICAgICAgICAgICAgIC53YXRjaEZpbGVzKClcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiBjb25zb2xlLmVycm9yKFwid2F0Y2hGaWxlcyBlcnJvclwiLCBlKSlcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBmb3IgKGxldCBtb2R1bGUgb2YgT2JqZWN0LnZhbHVlcyhyZXF1aXJlLmNhY2hlKSkge1xuICAgICAgICAgICAgaWYgKCFtb2R1bGUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaG90UmVsb2FkTW9kdWxlKG1vZHVsZSk7XG4gICAgICAgIH1cbiAgICB9LCA1MDAwKTtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIG5hbWVzcGFjZSBOb2RlSlMge1xuICAgICAgICBpbnRlcmZhY2UgTW9kdWxlIHtcbiAgICAgICAgICAgIC8qKiBDYXVzZXMgdXMgdG8gaG90cmVsb2FkIHRoZSBmaWxlLiBBcHBsaWVzIGJvdGggc2VydmVyc2lkZSBhbmQgY2xpZW50c2lkZS5cbiAgICAgICAgICAgICAqICAgICAgLSBJZiBub3Qgc2V0IGZvciBhbnkgZmlsZXMgY2xpZW50c2lkZSwgd2Ugd2lsbCByZWZyZXNoLlxuICAgICAgICAgICAgICogICAgICAtIElmIG5vdCBzZXQgZm9yIGFueSBmaWxlcyBzZXJ2ZXJzaWRlLCB3ZSB3aWxsIGRvIG5vdGhpbmcgKGFuZCBqdXN0IGxlYXZlIG9sZCBjb2RlIHJ1bm5pbmcpLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBob3RyZWxvYWQ/OiBib29sZWFuO1xuICAgICAgICAgICAgLyoqIE92ZXJyaWRlcyBob3RyZWxvYWQgdG8gZGlzYWJsZSBob3QgcmVsb2FkaW5nLiBVc2VmdWwgaWYgeW91IGFkZCBcImhvdHJlbG9hZC5mbGFnXCIgdG8gYSBkaXJlY3RvcnlcbiAgICAgICAgICAgICAqICAgICAgKHdoaWNoIHNldHMgaG90cmVsb2FkIG9uIGFsbCBmaWxlcyBpbiBhbmQgdW5kZXIgdGhhdCBkaXJlY3RvcnkpLCBidXQgd2FudCBhIHNwZWNpZmljIGZpbGVcbiAgICAgICAgICAgICAqICAgICAgdG8gbm90IGhvdHJlbG9hZC5cbiAgICAgICAgICAgICAqICAtIEFsc28gdXNlZnVsIGlmIHlvdSB3YW50IGZpbGVzIHRvIGhvdHJlbG9hZCBjbGllbnRzaWRlLCBidXQgbm90IHNlcnZlcnNpZGUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIG5vc2VydmVyaG90cmVsb2FkPzogYm9vbGVhbjtcblxuICAgICAgICAgICAgd2F0Y2hBZGRpdGlvbmFsRmlsZXM/OiBzdHJpbmdbXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgaXNIb3RSZWxvYWRpbmc6ICgoKSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZDtcbn1cblxuLy8gU2hhcmVkIGFjcm9zcyBjb3BpZXMgb2YgdGhpcyBwYWNrYWdlLCBzbyB0aGUgXCJjdXJyZW50bHkgaG90IHJlbG9hZGluZ1wiIGZsYWcgaXMgY29uc2lzdGVudCBub1xuLy8gIG1hdHRlciB3aGljaCBjb3B5IHNldCBpdCAoZXgsIHNldEV4dGVybmFsSG90UmVsb2FkaW5nKSBvciByZWFkcyBpdCAoY2FsbE1hbmFnZXIucmVnaXN0ZXJDbGFzc1xuLy8gIHJlYWRzIGl0IHZpYSB0aGUgZ2xvYmFsVGhpcy5pc0hvdFJlbG9hZGluZyBicmlkZ2UsIHdoaWNoIGVhY2ggY29weSBvdmVyd3JpdGVzKS4gU2VlIGNyZWF0ZVNpbmdsZXRvbi5cbmNvbnN0IGlzSG90UmVsb2FkaW5nU3RhdGUgPSBjcmVhdGVTaW5nbGV0b24oXCJIb3RSZWxvYWRDb250cm9sbGVyLmlzSG90UmVsb2FkaW5nXCIsIDEsICgpID0+ICh7IHZhbHVlOiBmYWxzZSB9KSk7XG5leHBvcnQgZnVuY3Rpb24gaXNIb3RSZWxvYWRpbmcoKSB7XG4gICAgcmV0dXJuIGlzSG90UmVsb2FkaW5nU3RhdGUuZ2V0KCkudmFsdWU7XG59XG5nbG9iYWxUaGlzLmlzSG90UmVsb2FkaW5nID0gaXNIb3RSZWxvYWRpbmc7XG5leHBvcnQgZnVuY3Rpb24gaG90UmVsb2FkaW5nR3VhcmQoKTogdHJ1ZSB7XG4gICAgcmV0dXJuICFpc0hvdFJlbG9hZGluZygpIGFzIGFueTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXRFeHRlcm5hbEhvdFJlbG9hZGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlzSG90UmVsb2FkaW5nU3RhdGUuZ2V0KCkudmFsdWUgPSB2YWx1ZTtcbn1cbi8vIFNoYXJlZCBhY3Jvc3MgY29waWVzLCBzbyBjYWxsYmFja3MgcmVnaXN0ZXJlZCB0aHJvdWdoIG9uZSBjb3B5J3Mgb25Ib3RSZWxvYWQgc3RpbGwgZmlyZSB3aGVuIHRoZVxuLy8gIGZpcnN0LXJlZ2lzdGVyZWQgY29weSdzIGNvbnRyb2xsZXIgcGVyZm9ybXMgYSByZWxvYWQuIFNlZSBjcmVhdGVTaW5nbGV0b24uXG5jb25zdCBob3RSZWxvYWRDYWxsYmFja3MgPSBjcmVhdGVTaW5nbGV0b24oXCJIb3RSZWxvYWRDb250cm9sbGVyLmhvdFJlbG9hZENhbGxiYWNrc1wiLCAxLCAoKSA9PiBbXSBhcyAoKG1vZHVsZXM6IE5vZGVKUy5Nb2R1bGVbXSkgPT4gdm9pZClbXSkuZ2V0KCk7XG5leHBvcnQgZnVuY3Rpb24gb25Ib3RSZWxvYWQoY2FsbGJhY2s6IChtb2R1bGVzOiBOb2RlSlMuTW9kdWxlW10pID0+IHZvaWQpIHtcbiAgICBob3RSZWxvYWRDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG59XG5cbmNvbnN0IGhvdFJlbG9hZE1vZHVsZSA9IGNhY2hlKChtb2R1bGU6IE5vZGVKUy5Nb2R1bGUpID0+IHtcbiAgICBpZiAoIW1vZHVsZS51cGRhdGVDb250ZW50cykgcmV0dXJuO1xuICAgIGxldCBpbnRlcnZhbCA9IDEwMDA7XG4gICAgbGV0IGZhc3QgPSBmYWxzZTtcbiAgICBpZiAobW9kdWxlLmhvdHJlbG9hZCkge1xuICAgICAgICBpbnRlcnZhbCA9IDEwMDtcbiAgICAgICAgZmFzdCA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IGxhc3RIYXNoZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIGZ1bmN0aW9uIGdldEhhc2gocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgY29udGVudHMgPSBmcy5yZWFkRmlsZVN5bmMocGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShjb250ZW50cykuZGlnZXN0KFwiaGV4XCIpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2F0Y2hGaWxlKG1vZHVsZS5maWxlbmFtZSk7XG4gICAgZm9yIChsZXQgcGF0aCBvZiBtb2R1bGUud2F0Y2hBZGRpdGlvbmFsRmlsZXMgfHwgW10pIHtcbiAgICAgICAgd2F0Y2hGaWxlKHBhdGgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhdGNoRmlsZShwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgbGFzdEhhc2hlcy5zZXQocGF0aCwgZ2V0SGFzaChwYXRoKSk7XG4gICAgICAgIGZzLndhdGNoRmlsZShwYXRoLCB7IHBlcnNpc3RlbnQ6IGZhbHNlLCBpbnRlcnZhbCB9LCAoY3VyciwgcHJldikgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld0hhc2ggPSBnZXRIYXNoKHBhdGgpO1xuICAgICAgICAgICAgaWYgKG5ld0hhc2ggPT09IGxhc3RIYXNoZXMuZ2V0KHBhdGgpKSByZXR1cm47XG4gICAgICAgICAgICBsYXN0SGFzaGVzLnNldChwYXRoLCBuZXdIYXNoKTtcbiAgICAgICAgICAgIGlmIChwYXRoID09PSBtb2R1bGUuZmlsZW5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgSG90IHJlbG9hZGluZyAke21vZHVsZS5maWxlbmFtZX0gZHVlIHRvIGNoYW5nZWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgSG90IHJlbG9hZGluZyAke21vZHVsZS5maWxlbmFtZX0gZHVlIHRvIGNoYW5nZSBpbiAke3BhdGh9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb0hvdFJlbG9hZChjdXJyLm10aW1lTXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuXG4gICAgLy8gSU1QT1JUQU5UISBjaGFuZ2VUaW1lIGlzIGZvciBiZW5jaG1hcmtpbmcgaG93IGxvbmcgd2UgdG9vayB0byBob3RyZWxvYWQgKGFuZCBub3RoaW5nIGVsc2UpXG4gICAgZnVuY3Rpb24gZG9Ib3RSZWxvYWQoY2hhbmdlVGltZTogbnVtYmVyKSB7XG4gICAgICAgIG1vZHVsZS51cGRhdGVDb250ZW50cz8uKCk7XG4gICAgICAgIGlmIChpc05vZGUoKSAmJiAhbW9kdWxlLm5vc2VydmVyaG90cmVsb2FkKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbW9kdWxlLmhvdHJlbG9hZFxuICAgICAgICAgICAgICAgIC8vIEEgZmFpcmx5IGJpZyBoYWNrIChhcyB0aGlzIGNvdWxkIGp1c3QgYmUgaW4gYSBzdHJpbmcsIG9yIHNvbWV0aGluZyBzaW1pbGFyKSwgYnV0Li4uIGl0IGFsc28gVkVSWSB1c2VmdWxcbiAgICAgICAgICAgICAgICB8fCBtb2R1bGUubW9kdWxlQ29udGVudHM/LmluY2x1ZGVzKFwiXFxubW9kdWxlLmhvdHJlbG9hZCA9IHRydWU7XCIgKyBcIlxcblwiKVxuICAgICAgICAgICAgICAgIHx8IG1vZHVsZS5tb2R1bGVDb250ZW50cz8uaW5jbHVkZXMoXCJcXHJcXG5tb2R1bGUuaG90cmVsb2FkID0gdHJ1ZTtcIiArIFwiXFxyXFxuXCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgU2VydmVyc2lkZSByZWxvYWRpbmcgJHttb2R1bGUuaWR9YCk7XG4gICAgICAgICAgICAgICAgaXNIb3RSZWxvYWRpbmdTdGF0ZS5nZXQoKS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmxvYWRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUubG9hZChtb2R1bGUuaWQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZWQoYEVycm9yIGhvdCByZWxvYWRpbmcgJHttb2R1bGUuaWR9YCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNIb3RSZWxvYWRpbmdTdGF0ZS5nZXQoKS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBjYWxsYmFjayBvZiBob3RSZWxvYWRDYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhbbW9kdWxlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy9tb2R1bGUuc291cmNlU0hBMjU2O1xuICAgICAgICAvLyBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoY29udGVudHMpLmRpZ2VzdChcImhleFwiKVxuICAgICAgICBpZiAoZ2V0SXNBbGxvd0NsaWVudChtb2R1bGUpKSB7XG4gICAgICAgICAgICB0cmlnZ2VyQ2xpZW50U2lkZVJlbG9hZCh7XG4gICAgICAgICAgICAgICAgZmlsZXM6IFttb2R1bGUuZmlsZW5hbWVdLFxuICAgICAgICAgICAgICAgIGNoYW5nZVRpbWUsXG4gICAgICAgICAgICAgICAgZmFzdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5sZXQgcmVsb2FkVHJpZ2dlcmluZyA9IGZhbHNlO1xubGV0IGNsaWVudFdhdGNoZXJOb2RlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xubGV0IHBlbmRpbmdUcmlnZ2VyRmlsZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbmZ1bmN0aW9uIHRyaWdnZXJDbGllbnRTaWRlUmVsb2FkKGNvbmZpZzoge1xuICAgIGZpbGVzOiBzdHJpbmdbXTtcbiAgICBjaGFuZ2VUaW1lOiBudW1iZXI7XG4gICAgZmFzdD86IGJvb2xlYW47XG59KSB7XG4gICAgZm9yIChsZXQgZmlsZSBvZiBjb25maWcuZmlsZXMpIHtcbiAgICAgICAgcGVuZGluZ1RyaWdnZXJGaWxlcy5hZGQoZmlsZSk7XG4gICAgfVxuICAgIGlmIChyZWxvYWRUcmlnZ2VyaW5nKSByZXR1cm47XG4gICAgcmVsb2FkVHJpZ2dlcmluZyA9IHRydWU7XG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlbG9hZFRyaWdnZXJpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IGZpbGVzID0gQXJyYXkuZnJvbShwZW5kaW5nVHJpZ2dlckZpbGVzKTtcbiAgICAgICAgcGVuZGluZ1RyaWdnZXJGaWxlcy5jbGVhcigpO1xuICAgICAgICBmb3IgKGxldCBjbGllbnROb2RlSWQgb2YgY2xpZW50V2F0Y2hlck5vZGVzKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgTm90aWZ5aW5nIGNsaWVudCBvZiBob3QgcmVsb2FkOiAke2NsaWVudE5vZGVJZH1gLCBmaWxlcyk7XG4gICAgICAgICAgICBIb3RSZWxvYWRDb250cm9sbGVyLm5vZGVzW2NsaWVudE5vZGVJZF0uZmlsZVVwZGF0ZWQoZmlsZXMsIGNvbmZpZy5jaGFuZ2VUaW1lKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFJlbW92aW5nIGVycm9yaW5nIGNsaWVudDogJHtjbGllbnROb2RlSWR9YCk7XG4gICAgICAgICAgICAgICAgY2xpZW50V2F0Y2hlck5vZGVzLmRlbGV0ZShjbGllbnROb2RlSWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgbmVlZCB0byB3YWl0LCBvdGhlcndpc2UgYmF0Y2hlZCB1cGRhdGVzIGZhaWwsIFdISUNILCBjYW4gcmVzdWx0IGluIHVwZGF0ZXMgd2hpbGUgcmVsb2FkaW5nLFxuICAgICAgICAvLyAgd2hpY2ggY2F1c2VzIG1pc3NlZCB1cGRhdGVzLlxuICAgIH0sIGNvbmZpZy5mYXN0ID8gNTAgOiAzMDApO1xufVxuXG5jbGFzcyBIb3RSZWxvYWRDb250cm9sbGVyQmFzZSB7XG4gICAgLy8gVE9ETzogQWxzbyBob3QgcmVsb2FkIHdoZW4gd2UgcmVjb25uZWN0IHRvIHRoZSBzZXJ2ZXIsIGFzIGl0IGlzIGxpa2VseSBzZXR1cCB3aWxsIG5lZWQgdG9cbiAgICAvLyAgYmUgcmVydW4gaW4gdGhhdCBjYXNlIGFzIHdlbGwgKGZvciBleGFtcGxlLCB3ZSBuZWVkIHRvIGNhbGwgd2F0Y2hGaWxlcyBhZ2FpbiEpXG4gICAgYXN5bmMgd2F0Y2hGaWxlcygpIHtcbiAgICAgICAgbGV0IGNhbGxlcklkID0gU29ja2V0RnVuY3Rpb24uZ2V0Q2FsbGVyKCkubm9kZUlkO1xuICAgICAgICBjbGllbnRXYXRjaGVyTm9kZXMuYWRkKGNhbGxlcklkKTtcbiAgICB9XG4gICAgLy8gVE9ETzogVGhpcyBpcyBhY3R1YWxseSBicm9rZW4gcmVsYXRlZCB0byBsYXp5IGxvYWRlZCBhbmQgc2VydmVyLW9ubHkgY29kZSwgYXMgdGhlIHNlcnZlciB3aWxsIHRlbGwgdXMgYSBmaWxlIGNoYW5nZWQsIGFuZCB0aGVuIHdlJ2xsIHNlZSB0aGF0IHdlIGRvbid0IGhhdmUgaXQgbG9hZGVkLCBhbmQgc28gd2Ugd2lsbCB0cnkgdG8gcmVmcmVzaC5cbiAgICAvLyAgICAgIC0gVGhlIHJlYXNvbiB3ZSByZWZyZXNoIGlzIGJlY2F1c2UgaXQgbWlnaHQgYmUgYSBuZXcgZmlsZS4gSSBkb24ndCBrbm93IGhvdyB3ZSBjb3VsZCBjaGVjayB0byBzZWUgaWYgaXQgd2FzIGxhenkgbG9hZGVkLiBNYXliZSB3ZSBqdXN0IHNob3VsZG4ndCByZWZyZXNoIGV2ZXIgaWYgd2UgY2FuJ3QgZmluZCB0aGUgbW9kdWxlPyBXZSdsbCBzZWUgaG93IG11Y2ggd2UgcnVuIGludG8gdGhlIGV4dHJhIHJlZnJlc2ggZHVlIHRvIGxhenkgbG9hZGluZy4uLlxuICAgIGFzeW5jIGZpbGVVcGRhdGVkKGZpbGVzOiBzdHJpbmdbXSwgY2hhbmdlVGltZTogbnVtYmVyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKG1hZ2VudGEoYFRyaWdnZXIgaG90cmVsb2FkIGZvciBmaWxlcyAke2Zvcm1hdFRpbWUoRGF0ZS5ub3coKSAtIGNoYW5nZVRpbWUpfSBhZnRlciBmaWxlIGNoYW5nZWApKTtcbiAgICAgICAgICAgIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgICAgIGxldCBtb2R1bGVzOiBOb2RlSlMuTW9kdWxlW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgICAgICBmaWxlID0gXCJodHRwczovL1wiICsgKEJPT1RFRF9FREdFX05PREU/Lmhvc3QgfHwgbG9jYXRpb24uaG9zdCkgKyBcIi9cIiArIGZpbGU7XG4gICAgICAgICAgICAgICAgbGV0IG1vZHVsZSA9IHJlcXVpcmUuY2FjaGVbZmlsZV07XG4gICAgICAgICAgICAgICAgaWYgKCFtb2R1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYE1vZHVsZSBub3QgZm91bmQ6ICR7ZmlsZX0sIG5vdCByZWxvYWRpbmcgcGFnZWApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghbW9kdWxlLmhvdHJlbG9hZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgTW9kdWxlIG5vdCBob3RyZWxvYWRhYmxlOiAke2ZpbGV9LCByZWxvYWRpbmcgcGFnZSB0byBlbnN1cmUgbmV3IHZlcnNpb24gaXMgbG9hZGVkYCk7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1vZHVsZXMucHVzaChtb2R1bGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgbW9kdWxlIG9mIG1vZHVsZXMpIHtcbiAgICAgICAgICAgICAgICBtb2R1bGUubG9hZGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc0hvdFJlbG9hZGluZ1N0YXRlLmdldCgpLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwobW9kdWxlcy5tYXAobW9kdWxlID0+IG1vZHVsZS5sb2FkKG1vZHVsZS5maWxlbmFtZSkpKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlzSG90UmVsb2FkaW5nU3RhdGUuZ2V0KCkudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgY2FsbGJhY2sgb2YgaG90UmVsb2FkQ2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobW9kdWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtYWdlbnRhKGBIb3QgcmVsb2FkIGNvbXBsZXRlICR7Zm9ybWF0VGltZShEYXRlLm5vdygpIC0gY2hhbmdlVGltZSl9IGFmdGVyIGZpbGUgY2hhbmdlYCkpO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEhvdCByZWxvYWQgZmFpbGVkICR7ZS5zdGFja31gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IEhvdFJlbG9hZENvbnRyb2xsZXIgPSBTb2NrZXRGdW5jdGlvbi5yZWdpc3RlcihcbiAgICBcIkhvdFJlbG9hZENvbnRyb2xsZXItMDMyYjIyNTAtM2FhYy00MTg3LThjOTUtNzU0MTI3NDJiOGY1XCIsXG4gICAgbmV3IEhvdFJlbG9hZENvbnRyb2xsZXJCYXNlKCksXG4gICAgKCkgPT4gKHtcbiAgICAgICAgd2F0Y2hGaWxlczoge30sXG4gICAgICAgIGZpbGVVcGRhdGVkOiB7fVxuICAgIH0pLFxuICAgICgpID0+ICh7XG5cbiAgICB9KSxcbiAgICB7XG4gICAgICAgIG5vQXV0b0V4cG9zZTogdHJ1ZSxcbiAgICB9XG4pOyJdfQ==
|
|
252
|
+
/* _JS_SOURCE_HASH = "fad5234ef4614a67e7686e156e1de47b8cb72f9f93a3c3e4945c518e41eff353"; */
|
package/index.d.ts
CHANGED
|
@@ -7,9 +7,9 @@ declare module "socket-function/SetProcessVariables" {
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
declare module "socket-function/SocketFunction" {
|
|
10
|
-
/// <reference path="require/RequireController.d.ts" />
|
|
11
10
|
/// <reference types="node" />
|
|
12
11
|
/// <reference types="node" />
|
|
12
|
+
/// <reference types="socket-function/require/requirecontroller" />
|
|
13
13
|
import { SocketExposedInterface, SocketFunctionHook, SocketFunctionClientHook, SocketExposedShape, SocketRegistered, CallerContext, FullCallType, SocketRegisterType } from "socket-function/SocketFunctionTypes";
|
|
14
14
|
import { SocketServerConfig } from "socket-function/src/webSocketServer";
|
|
15
15
|
import { Args, MaybePromise } from "socket-function/src/types";
|
|
@@ -128,7 +128,7 @@ declare module "socket-function/SocketFunction" {
|
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
declare module "socket-function/SocketFunctionTypes" {
|
|
131
|
-
/// <reference
|
|
131
|
+
/// <reference types="socket-function/require/requirecontroller" />
|
|
132
132
|
import { getCallObj } from "socket-function/src/nodeProxy";
|
|
133
133
|
import { Args, MaybePromise } from "socket-function/src/types";
|
|
134
134
|
export declare const socket: unique symbol;
|
|
@@ -218,8 +218,8 @@ declare module "socket-function/SocketFunctionTypes" {
|
|
|
218
218
|
}
|
|
219
219
|
|
|
220
220
|
declare module "socket-function/hot/HotReloadController" {
|
|
221
|
-
/// <reference
|
|
222
|
-
/// <reference
|
|
221
|
+
/// <reference types="typenode" />
|
|
222
|
+
/// <reference types="socket-function/require/requirecontroller" />
|
|
223
223
|
/** Enables some hot reload functionality.
|
|
224
224
|
* - Triggers a refresh clientside
|
|
225
225
|
* - Triggers a reload server, for modules marked with `module.hotreload`
|
|
@@ -307,15 +307,15 @@ declare module "socket-function/mobx/promiseToObservable" {
|
|
|
307
307
|
}
|
|
308
308
|
|
|
309
309
|
declare module "socket-function/require/CSSShim" {
|
|
310
|
-
/// <reference
|
|
310
|
+
/// <reference types="socket-function/require/requirecontroller" />
|
|
311
311
|
export {};
|
|
312
312
|
|
|
313
313
|
}
|
|
314
314
|
|
|
315
315
|
declare module "socket-function/require/RequireController" {
|
|
316
|
-
/// <reference path="../../typenode/index.d.ts" />
|
|
317
316
|
/// <reference types="node" />
|
|
318
317
|
/// <reference types="node" />
|
|
318
|
+
/// <reference types="typenode" />
|
|
319
319
|
declare global {
|
|
320
320
|
namespace NodeJS {
|
|
321
321
|
interface Module {
|
|
@@ -430,8 +430,8 @@ declare module "socket-function/require/RequireController" {
|
|
|
430
430
|
}
|
|
431
431
|
|
|
432
432
|
declare module "socket-function/require/compileFlags" {
|
|
433
|
-
/// <reference path="RequireController.d.ts" />
|
|
434
433
|
/// <reference types="node" />
|
|
434
|
+
/// <reference types="socket-function/require/requirecontroller" />
|
|
435
435
|
/**
|
|
436
436
|
* Adds a global function setFlag(require, "typescript", flag) which sets a flag on the client
|
|
437
437
|
* - Ex, setFlag(require, "typescript", "allowclient") so allowclient = true on the typescript module.
|
|
@@ -453,7 +453,7 @@ declare module "socket-function/require/extMapper" {
|
|
|
453
453
|
}
|
|
454
454
|
|
|
455
455
|
declare module "socket-function/require/require" {
|
|
456
|
-
/// <reference
|
|
456
|
+
/// <reference types="socket-function/src/src" />
|
|
457
457
|
declare global {
|
|
458
458
|
var onProgressHandler: undefined | ((progress: {
|
|
459
459
|
type: string;
|
|
@@ -789,7 +789,7 @@ declare module "socket-function/src/callHTTPHandler" {
|
|
|
789
789
|
}
|
|
790
790
|
|
|
791
791
|
declare module "socket-function/src/callManager" {
|
|
792
|
-
/// <reference
|
|
792
|
+
/// <reference types="socket-function/hot/hotreloadcontroller" />
|
|
793
793
|
import { CallerContext, CallType, ClientHookContext, FullCallType, FunctionFlags, HookContext, SocketExposedInterface, SocketExposedShape, SocketFunctionClientHook, SocketFunctionHook, SocketRegistered } from "socket-function/SocketFunctionTypes";
|
|
794
794
|
export declare function getCallFlags(call: CallType): FunctionFlags | undefined;
|
|
795
795
|
export declare function shouldCompressCall(call: CallType): boolean | "LZ4" | undefined;
|
|
@@ -1560,28 +1560,13 @@ declare module "socket-function/time/trueTimeShim" {
|
|
|
1560
1560
|
fromTime: number;
|
|
1561
1561
|
toTime: number;
|
|
1562
1562
|
};
|
|
1563
|
-
export declare function computeTweenedOffset(components: {
|
|
1564
|
-
systemTime: number;
|
|
1565
|
-
fromOffset: number;
|
|
1566
|
-
toOffset: number;
|
|
1567
|
-
fromTime: number;
|
|
1568
|
-
}): number;
|
|
1569
1563
|
export declare function getTimeComponents(): {
|
|
1570
1564
|
systemTime: number;
|
|
1571
1565
|
offset: number;
|
|
1572
1566
|
};
|
|
1573
1567
|
export declare function getTrueTime(): number;
|
|
1574
1568
|
export declare function getTrueTimeOffset(): number;
|
|
1575
|
-
export
|
|
1576
|
-
systemTime: number;
|
|
1577
|
-
fromOffset: number;
|
|
1578
|
-
toOffset: number;
|
|
1579
|
-
fromTime: number;
|
|
1580
|
-
toTime: number;
|
|
1581
|
-
offset: number;
|
|
1582
|
-
measurement?: TimeOffsetProof;
|
|
1583
|
-
};
|
|
1584
|
-
export declare function getTrueTimeProof(): TrueTimeProof | undefined;
|
|
1569
|
+
export declare function getTrueTimeProof(): TimeOffsetProof | undefined;
|
|
1585
1570
|
export declare function waitForFirstTimeSync(): Promise<void> | undefined;
|
|
1586
1571
|
declare global {
|
|
1587
1572
|
var TRUE_TIME_ALREADY_SHIMMED: boolean;
|
package/package.json
CHANGED
package/require/CSSShim.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/// <reference
|
|
1
|
+
/// <reference types="socket-function/require/requirecontroller" />
|
|
2
2
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/// <reference path="../../typenode/index.d.ts" />
|
|
2
1
|
/// <reference types="node" />
|
|
3
2
|
/// <reference types="node" />
|
|
3
|
+
/// <reference types="typenode" />
|
|
4
4
|
declare global {
|
|
5
5
|
namespace NodeJS {
|
|
6
6
|
interface Module {
|
|
@@ -85,7 +85,7 @@ declare global {
|
|
|
85
85
|
/** @deprecated, not needed, as this defaults to ".", which is a lot easier to reason about anyways. */
|
|
86
86
|
export declare function setRequireBootRequire(dir: string): void;
|
|
87
87
|
export declare function allowAllNodeModules(): void;
|
|
88
|
-
export declare const RequireController: import("
|
|
88
|
+
export declare const RequireController: import("socket-function/SocketFunctionTypes").SocketRegistered<{
|
|
89
89
|
rootResolvePath: "Function has implementation but is not exposed in the SocketFunction.register call";
|
|
90
90
|
requireHTML: (config?: {
|
|
91
91
|
requireCalls?: string[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/// <reference path="RequireController.d.ts" />
|
|
2
1
|
/// <reference types="node" />
|
|
2
|
+
/// <reference types="socket-function/require/requirecontroller" />
|
|
3
3
|
/**
|
|
4
4
|
* Adds a global function setFlag(require, "typescript", flag) which sets a flag on the client
|
|
5
5
|
* - Ex, setFlag(require, "typescript", "allowclient") so allowclient = true on the typescript module.
|