@tradejs/cli 2.0.18 → 2.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +14522 -15704
- package/dist/lib/aiExport.js +15 -1608
- package/dist/lib/aiPocketSearch.js +499 -67
- package/dist/lib/aiPocketSearchCli.js +113 -0
- package/dist/lib/aiTrainCharts.js +14 -1
- package/dist/lib/aiTrainMetrics.js +4 -1
- package/dist/lib/aiTrainResearch.js +88 -54
- package/dist/lib/binanceMarketContextBackfill.js +7 -6
- package/dist/lib/coinMarketCapContextBackfill.js +19 -18
- package/dist/lib/coreResearch.js +2738 -0
- package/dist/lib/derivativesContextBackfill.js +10 -9
- package/dist/lib/executionCalibration.js +6 -3
- package/dist/lib/hyperliquidWhaleBackfill.js +8 -8
- package/dist/lib/hyperliquidWhaleStream.js +4 -4
- package/dist/lib/marketContextPrepare.js +83 -1686
- package/dist/lib/runEnvironment.js +14 -1666
- package/dist/lib/runFormatting.js +1 -1607
- package/dist/lib/runtimeDebugEvidence.js +2 -48
- package/dist/lib/runtimeLineage.js +81 -48
- package/dist/lib/runtimeRedis.js +6 -57
- package/dist/lib/runtimeScorecard.js +153 -10
- package/dist/lib/runtimeStrategyBacktest.js +2 -48
- package/dist/lib/strategyGateFingerprint.js +80 -0
- package/dist/lib/strategyRelease.js +1365 -0
- package/dist/scripts/aiExport.js +17 -1610
- package/dist/scripts/aiPocketSearch.js +1070 -1770
- package/dist/scripts/aiTrain.js +108 -1688
- package/dist/scripts/backtest.js +120 -1760
- package/dist/scripts/binanceMarketIngest.js +5 -4
- package/dist/scripts/candlesMigrateProvider.js +6 -5186
- package/dist/scripts/cleanupMarketContext.js +4 -3
- package/dist/scripts/continuity.js +4 -3
- package/dist/scripts/coreResearch.js +2830 -0
- package/dist/scripts/derivativesIngest.js +6 -4
- package/dist/scripts/derivativesIngestCoinalyzeAll.js +5 -4
- package/dist/scripts/doctor.js +2 -5184
- package/dist/scripts/executionCalibration.js +6 -3
- package/dist/scripts/hyperliquidWhaleBackfill.js +8 -8
- package/dist/scripts/hyperliquidWhaleIngest.js +4 -4
- package/dist/scripts/hyperliquidWhalesUpdate.js +1 -1
- package/dist/scripts/migration.js +3 -3
- package/dist/scripts/mlExport.js +1 -1607
- package/dist/scripts/replay.js +239 -1855
- package/dist/scripts/replayRunner.js +239 -1855
- package/dist/scripts/replayRuntimeEvidence.js +29 -62
- package/dist/scripts/researchAuto.js +3 -49
- package/dist/scripts/results.js +1 -1607
- package/dist/scripts/runtimeEvidence.js +18 -56
- package/dist/scripts/runtimeParity.js +121 -1746
- package/dist/scripts/runtimeScorecard.js +883 -29
- package/dist/scripts/signals.js +1178 -2724
- package/dist/scripts/signalsDaemon.js +1183 -2696
- package/dist/scripts/signalsSummary.js +4 -26
- package/dist/scripts/strategyRelease.js +1469 -0
- package/dist/workers/testerWorker.js +2 -2
- package/package.json +13 -9
package/dist/scripts/backtest.js
CHANGED
|
@@ -5,13 +5,6 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __commonJS = (cb, mod) => function __require() {
|
|
9
|
-
try {
|
|
10
|
-
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
11
|
-
} catch (e) {
|
|
12
|
-
throw mod = 0, e;
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
8
|
var __export = (target, all) => {
|
|
16
9
|
for (var name in all)
|
|
17
10
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -34,1605 +27,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
34
27
|
));
|
|
35
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
36
29
|
|
|
37
|
-
// ../../node_modules/ms/index.js
|
|
38
|
-
var require_ms = __commonJS({
|
|
39
|
-
"../../node_modules/ms/index.js"(exports2, module2) {
|
|
40
|
-
"use strict";
|
|
41
|
-
var s = 1e3;
|
|
42
|
-
var m = s * 60;
|
|
43
|
-
var h = m * 60;
|
|
44
|
-
var d = h * 24;
|
|
45
|
-
var w = d * 7;
|
|
46
|
-
var y = d * 365.25;
|
|
47
|
-
module2.exports = function(val, options) {
|
|
48
|
-
options = options || {};
|
|
49
|
-
var type = typeof val;
|
|
50
|
-
if (type === "string" && val.length > 0) {
|
|
51
|
-
return parse(val);
|
|
52
|
-
} else if (type === "number" && isFinite(val)) {
|
|
53
|
-
return options.long ? fmtLong(val) : fmtShort(val);
|
|
54
|
-
}
|
|
55
|
-
throw new Error(
|
|
56
|
-
"val is not a non-empty string or a valid number. val=" + JSON.stringify(val)
|
|
57
|
-
);
|
|
58
|
-
};
|
|
59
|
-
function parse(str) {
|
|
60
|
-
str = String(str);
|
|
61
|
-
if (str.length > 100) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
|
|
65
|
-
str
|
|
66
|
-
);
|
|
67
|
-
if (!match) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
var n = parseFloat(match[1]);
|
|
71
|
-
var type = (match[2] || "ms").toLowerCase();
|
|
72
|
-
switch (type) {
|
|
73
|
-
case "years":
|
|
74
|
-
case "year":
|
|
75
|
-
case "yrs":
|
|
76
|
-
case "yr":
|
|
77
|
-
case "y":
|
|
78
|
-
return n * y;
|
|
79
|
-
case "weeks":
|
|
80
|
-
case "week":
|
|
81
|
-
case "w":
|
|
82
|
-
return n * w;
|
|
83
|
-
case "days":
|
|
84
|
-
case "day":
|
|
85
|
-
case "d":
|
|
86
|
-
return n * d;
|
|
87
|
-
case "hours":
|
|
88
|
-
case "hour":
|
|
89
|
-
case "hrs":
|
|
90
|
-
case "hr":
|
|
91
|
-
case "h":
|
|
92
|
-
return n * h;
|
|
93
|
-
case "minutes":
|
|
94
|
-
case "minute":
|
|
95
|
-
case "mins":
|
|
96
|
-
case "min":
|
|
97
|
-
case "m":
|
|
98
|
-
return n * m;
|
|
99
|
-
case "seconds":
|
|
100
|
-
case "second":
|
|
101
|
-
case "secs":
|
|
102
|
-
case "sec":
|
|
103
|
-
case "s":
|
|
104
|
-
return n * s;
|
|
105
|
-
case "milliseconds":
|
|
106
|
-
case "millisecond":
|
|
107
|
-
case "msecs":
|
|
108
|
-
case "msec":
|
|
109
|
-
case "ms":
|
|
110
|
-
return n;
|
|
111
|
-
default:
|
|
112
|
-
return void 0;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
function fmtShort(ms) {
|
|
116
|
-
var msAbs = Math.abs(ms);
|
|
117
|
-
if (msAbs >= d) {
|
|
118
|
-
return Math.round(ms / d) + "d";
|
|
119
|
-
}
|
|
120
|
-
if (msAbs >= h) {
|
|
121
|
-
return Math.round(ms / h) + "h";
|
|
122
|
-
}
|
|
123
|
-
if (msAbs >= m) {
|
|
124
|
-
return Math.round(ms / m) + "m";
|
|
125
|
-
}
|
|
126
|
-
if (msAbs >= s) {
|
|
127
|
-
return Math.round(ms / s) + "s";
|
|
128
|
-
}
|
|
129
|
-
return ms + "ms";
|
|
130
|
-
}
|
|
131
|
-
function fmtLong(ms) {
|
|
132
|
-
var msAbs = Math.abs(ms);
|
|
133
|
-
if (msAbs >= d) {
|
|
134
|
-
return plural(ms, msAbs, d, "day");
|
|
135
|
-
}
|
|
136
|
-
if (msAbs >= h) {
|
|
137
|
-
return plural(ms, msAbs, h, "hour");
|
|
138
|
-
}
|
|
139
|
-
if (msAbs >= m) {
|
|
140
|
-
return plural(ms, msAbs, m, "minute");
|
|
141
|
-
}
|
|
142
|
-
if (msAbs >= s) {
|
|
143
|
-
return plural(ms, msAbs, s, "second");
|
|
144
|
-
}
|
|
145
|
-
return ms + " ms";
|
|
146
|
-
}
|
|
147
|
-
function plural(ms, msAbs, n, name) {
|
|
148
|
-
var isPlural = msAbs >= n * 1.5;
|
|
149
|
-
return Math.round(ms / n) + " " + name + (isPlural ? "s" : "");
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
// ../../node_modules/list-it/node_modules/debug/src/common.js
|
|
155
|
-
var require_common = __commonJS({
|
|
156
|
-
"../../node_modules/list-it/node_modules/debug/src/common.js"(exports2, module2) {
|
|
157
|
-
"use strict";
|
|
158
|
-
function setup(env) {
|
|
159
|
-
createDebug.debug = createDebug;
|
|
160
|
-
createDebug.default = createDebug;
|
|
161
|
-
createDebug.coerce = coerce;
|
|
162
|
-
createDebug.disable = disable;
|
|
163
|
-
createDebug.enable = enable;
|
|
164
|
-
createDebug.enabled = enabled;
|
|
165
|
-
createDebug.humanize = require_ms();
|
|
166
|
-
createDebug.destroy = destroy;
|
|
167
|
-
Object.keys(env).forEach((key) => {
|
|
168
|
-
createDebug[key] = env[key];
|
|
169
|
-
});
|
|
170
|
-
createDebug.names = [];
|
|
171
|
-
createDebug.skips = [];
|
|
172
|
-
createDebug.formatters = {};
|
|
173
|
-
function selectColor(namespace) {
|
|
174
|
-
let hash = 0;
|
|
175
|
-
for (let i = 0; i < namespace.length; i++) {
|
|
176
|
-
hash = (hash << 5) - hash + namespace.charCodeAt(i);
|
|
177
|
-
hash |= 0;
|
|
178
|
-
}
|
|
179
|
-
return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
|
|
180
|
-
}
|
|
181
|
-
createDebug.selectColor = selectColor;
|
|
182
|
-
function createDebug(namespace) {
|
|
183
|
-
let prevTime;
|
|
184
|
-
let enableOverride = null;
|
|
185
|
-
let namespacesCache;
|
|
186
|
-
let enabledCache;
|
|
187
|
-
function debug(...args2) {
|
|
188
|
-
if (!debug.enabled) {
|
|
189
|
-
return;
|
|
190
|
-
}
|
|
191
|
-
const self = debug;
|
|
192
|
-
const curr = Number(/* @__PURE__ */ new Date());
|
|
193
|
-
const ms = curr - (prevTime || curr);
|
|
194
|
-
self.diff = ms;
|
|
195
|
-
self.prev = prevTime;
|
|
196
|
-
self.curr = curr;
|
|
197
|
-
prevTime = curr;
|
|
198
|
-
args2[0] = createDebug.coerce(args2[0]);
|
|
199
|
-
if (typeof args2[0] !== "string") {
|
|
200
|
-
args2.unshift("%O");
|
|
201
|
-
}
|
|
202
|
-
let index = 0;
|
|
203
|
-
args2[0] = args2[0].replace(/%([a-zA-Z%])/g, (match, format2) => {
|
|
204
|
-
if (match === "%%") {
|
|
205
|
-
return "%";
|
|
206
|
-
}
|
|
207
|
-
index++;
|
|
208
|
-
const formatter = createDebug.formatters[format2];
|
|
209
|
-
if (typeof formatter === "function") {
|
|
210
|
-
const val = args2[index];
|
|
211
|
-
match = formatter.call(self, val);
|
|
212
|
-
args2.splice(index, 1);
|
|
213
|
-
index--;
|
|
214
|
-
}
|
|
215
|
-
return match;
|
|
216
|
-
});
|
|
217
|
-
createDebug.formatArgs.call(self, args2);
|
|
218
|
-
const logFn = self.log || createDebug.log;
|
|
219
|
-
logFn.apply(self, args2);
|
|
220
|
-
}
|
|
221
|
-
debug.namespace = namespace;
|
|
222
|
-
debug.useColors = createDebug.useColors();
|
|
223
|
-
debug.color = createDebug.selectColor(namespace);
|
|
224
|
-
debug.extend = extend;
|
|
225
|
-
debug.destroy = createDebug.destroy;
|
|
226
|
-
Object.defineProperty(debug, "enabled", {
|
|
227
|
-
enumerable: true,
|
|
228
|
-
configurable: false,
|
|
229
|
-
get: () => {
|
|
230
|
-
if (enableOverride !== null) {
|
|
231
|
-
return enableOverride;
|
|
232
|
-
}
|
|
233
|
-
if (namespacesCache !== createDebug.namespaces) {
|
|
234
|
-
namespacesCache = createDebug.namespaces;
|
|
235
|
-
enabledCache = createDebug.enabled(namespace);
|
|
236
|
-
}
|
|
237
|
-
return enabledCache;
|
|
238
|
-
},
|
|
239
|
-
set: (v) => {
|
|
240
|
-
enableOverride = v;
|
|
241
|
-
}
|
|
242
|
-
});
|
|
243
|
-
if (typeof createDebug.init === "function") {
|
|
244
|
-
createDebug.init(debug);
|
|
245
|
-
}
|
|
246
|
-
return debug;
|
|
247
|
-
}
|
|
248
|
-
function extend(namespace, delimiter) {
|
|
249
|
-
const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace);
|
|
250
|
-
newDebug.log = this.log;
|
|
251
|
-
return newDebug;
|
|
252
|
-
}
|
|
253
|
-
function enable(namespaces) {
|
|
254
|
-
createDebug.save(namespaces);
|
|
255
|
-
createDebug.namespaces = namespaces;
|
|
256
|
-
createDebug.names = [];
|
|
257
|
-
createDebug.skips = [];
|
|
258
|
-
const split = (typeof namespaces === "string" ? namespaces : "").trim().replace(/\s+/g, ",").split(",").filter(Boolean);
|
|
259
|
-
for (const ns of split) {
|
|
260
|
-
if (ns[0] === "-") {
|
|
261
|
-
createDebug.skips.push(ns.slice(1));
|
|
262
|
-
} else {
|
|
263
|
-
createDebug.names.push(ns);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
function matchesTemplate(search, template) {
|
|
268
|
-
let searchIndex = 0;
|
|
269
|
-
let templateIndex = 0;
|
|
270
|
-
let starIndex = -1;
|
|
271
|
-
let matchIndex = 0;
|
|
272
|
-
while (searchIndex < search.length) {
|
|
273
|
-
if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === "*")) {
|
|
274
|
-
if (template[templateIndex] === "*") {
|
|
275
|
-
starIndex = templateIndex;
|
|
276
|
-
matchIndex = searchIndex;
|
|
277
|
-
templateIndex++;
|
|
278
|
-
} else {
|
|
279
|
-
searchIndex++;
|
|
280
|
-
templateIndex++;
|
|
281
|
-
}
|
|
282
|
-
} else if (starIndex !== -1) {
|
|
283
|
-
templateIndex = starIndex + 1;
|
|
284
|
-
matchIndex++;
|
|
285
|
-
searchIndex = matchIndex;
|
|
286
|
-
} else {
|
|
287
|
-
return false;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
while (templateIndex < template.length && template[templateIndex] === "*") {
|
|
291
|
-
templateIndex++;
|
|
292
|
-
}
|
|
293
|
-
return templateIndex === template.length;
|
|
294
|
-
}
|
|
295
|
-
function disable() {
|
|
296
|
-
const namespaces = [
|
|
297
|
-
...createDebug.names,
|
|
298
|
-
...createDebug.skips.map((namespace) => "-" + namespace)
|
|
299
|
-
].join(",");
|
|
300
|
-
createDebug.enable("");
|
|
301
|
-
return namespaces;
|
|
302
|
-
}
|
|
303
|
-
function enabled(name) {
|
|
304
|
-
for (const skip of createDebug.skips) {
|
|
305
|
-
if (matchesTemplate(name, skip)) {
|
|
306
|
-
return false;
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
for (const ns of createDebug.names) {
|
|
310
|
-
if (matchesTemplate(name, ns)) {
|
|
311
|
-
return true;
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
return false;
|
|
315
|
-
}
|
|
316
|
-
function coerce(val) {
|
|
317
|
-
if (val instanceof Error) {
|
|
318
|
-
return val.stack || val.message;
|
|
319
|
-
}
|
|
320
|
-
return val;
|
|
321
|
-
}
|
|
322
|
-
function destroy() {
|
|
323
|
-
console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
|
|
324
|
-
}
|
|
325
|
-
createDebug.enable(createDebug.load());
|
|
326
|
-
return createDebug;
|
|
327
|
-
}
|
|
328
|
-
module2.exports = setup;
|
|
329
|
-
}
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
// ../../node_modules/list-it/node_modules/debug/src/browser.js
|
|
333
|
-
var require_browser = __commonJS({
|
|
334
|
-
"../../node_modules/list-it/node_modules/debug/src/browser.js"(exports2, module2) {
|
|
335
|
-
"use strict";
|
|
336
|
-
exports2.formatArgs = formatArgs;
|
|
337
|
-
exports2.save = save;
|
|
338
|
-
exports2.load = load;
|
|
339
|
-
exports2.useColors = useColors;
|
|
340
|
-
exports2.storage = localstorage();
|
|
341
|
-
exports2.destroy = /* @__PURE__ */ (() => {
|
|
342
|
-
let warned = false;
|
|
343
|
-
return () => {
|
|
344
|
-
if (!warned) {
|
|
345
|
-
warned = true;
|
|
346
|
-
console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
|
|
347
|
-
}
|
|
348
|
-
};
|
|
349
|
-
})();
|
|
350
|
-
exports2.colors = [
|
|
351
|
-
"#0000CC",
|
|
352
|
-
"#0000FF",
|
|
353
|
-
"#0033CC",
|
|
354
|
-
"#0033FF",
|
|
355
|
-
"#0066CC",
|
|
356
|
-
"#0066FF",
|
|
357
|
-
"#0099CC",
|
|
358
|
-
"#0099FF",
|
|
359
|
-
"#00CC00",
|
|
360
|
-
"#00CC33",
|
|
361
|
-
"#00CC66",
|
|
362
|
-
"#00CC99",
|
|
363
|
-
"#00CCCC",
|
|
364
|
-
"#00CCFF",
|
|
365
|
-
"#3300CC",
|
|
366
|
-
"#3300FF",
|
|
367
|
-
"#3333CC",
|
|
368
|
-
"#3333FF",
|
|
369
|
-
"#3366CC",
|
|
370
|
-
"#3366FF",
|
|
371
|
-
"#3399CC",
|
|
372
|
-
"#3399FF",
|
|
373
|
-
"#33CC00",
|
|
374
|
-
"#33CC33",
|
|
375
|
-
"#33CC66",
|
|
376
|
-
"#33CC99",
|
|
377
|
-
"#33CCCC",
|
|
378
|
-
"#33CCFF",
|
|
379
|
-
"#6600CC",
|
|
380
|
-
"#6600FF",
|
|
381
|
-
"#6633CC",
|
|
382
|
-
"#6633FF",
|
|
383
|
-
"#66CC00",
|
|
384
|
-
"#66CC33",
|
|
385
|
-
"#9900CC",
|
|
386
|
-
"#9900FF",
|
|
387
|
-
"#9933CC",
|
|
388
|
-
"#9933FF",
|
|
389
|
-
"#99CC00",
|
|
390
|
-
"#99CC33",
|
|
391
|
-
"#CC0000",
|
|
392
|
-
"#CC0033",
|
|
393
|
-
"#CC0066",
|
|
394
|
-
"#CC0099",
|
|
395
|
-
"#CC00CC",
|
|
396
|
-
"#CC00FF",
|
|
397
|
-
"#CC3300",
|
|
398
|
-
"#CC3333",
|
|
399
|
-
"#CC3366",
|
|
400
|
-
"#CC3399",
|
|
401
|
-
"#CC33CC",
|
|
402
|
-
"#CC33FF",
|
|
403
|
-
"#CC6600",
|
|
404
|
-
"#CC6633",
|
|
405
|
-
"#CC9900",
|
|
406
|
-
"#CC9933",
|
|
407
|
-
"#CCCC00",
|
|
408
|
-
"#CCCC33",
|
|
409
|
-
"#FF0000",
|
|
410
|
-
"#FF0033",
|
|
411
|
-
"#FF0066",
|
|
412
|
-
"#FF0099",
|
|
413
|
-
"#FF00CC",
|
|
414
|
-
"#FF00FF",
|
|
415
|
-
"#FF3300",
|
|
416
|
-
"#FF3333",
|
|
417
|
-
"#FF3366",
|
|
418
|
-
"#FF3399",
|
|
419
|
-
"#FF33CC",
|
|
420
|
-
"#FF33FF",
|
|
421
|
-
"#FF6600",
|
|
422
|
-
"#FF6633",
|
|
423
|
-
"#FF9900",
|
|
424
|
-
"#FF9933",
|
|
425
|
-
"#FFCC00",
|
|
426
|
-
"#FFCC33"
|
|
427
|
-
];
|
|
428
|
-
function useColors() {
|
|
429
|
-
if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) {
|
|
430
|
-
return true;
|
|
431
|
-
}
|
|
432
|
-
if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
|
|
433
|
-
return false;
|
|
434
|
-
}
|
|
435
|
-
let m;
|
|
436
|
-
return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773
|
|
437
|
-
typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?
|
|
438
|
-
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
|
|
439
|
-
typeof navigator !== "undefined" && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker
|
|
440
|
-
typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
|
|
441
|
-
}
|
|
442
|
-
function formatArgs(args2) {
|
|
443
|
-
args2[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args2[0] + (this.useColors ? "%c " : " ") + "+" + module2.exports.humanize(this.diff);
|
|
444
|
-
if (!this.useColors) {
|
|
445
|
-
return;
|
|
446
|
-
}
|
|
447
|
-
const c = "color: " + this.color;
|
|
448
|
-
args2.splice(1, 0, c, "color: inherit");
|
|
449
|
-
let index = 0;
|
|
450
|
-
let lastC = 0;
|
|
451
|
-
args2[0].replace(/%[a-zA-Z%]/g, (match) => {
|
|
452
|
-
if (match === "%%") {
|
|
453
|
-
return;
|
|
454
|
-
}
|
|
455
|
-
index++;
|
|
456
|
-
if (match === "%c") {
|
|
457
|
-
lastC = index;
|
|
458
|
-
}
|
|
459
|
-
});
|
|
460
|
-
args2.splice(lastC, 0, c);
|
|
461
|
-
}
|
|
462
|
-
exports2.log = console.debug || console.log || (() => {
|
|
463
|
-
});
|
|
464
|
-
function save(namespaces) {
|
|
465
|
-
try {
|
|
466
|
-
if (namespaces) {
|
|
467
|
-
exports2.storage.setItem("debug", namespaces);
|
|
468
|
-
} else {
|
|
469
|
-
exports2.storage.removeItem("debug");
|
|
470
|
-
}
|
|
471
|
-
} catch (error) {
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
function load() {
|
|
475
|
-
let r;
|
|
476
|
-
try {
|
|
477
|
-
r = exports2.storage.getItem("debug") || exports2.storage.getItem("DEBUG");
|
|
478
|
-
} catch (error) {
|
|
479
|
-
}
|
|
480
|
-
if (!r && typeof process !== "undefined" && "env" in process) {
|
|
481
|
-
r = process.env.DEBUG;
|
|
482
|
-
}
|
|
483
|
-
return r;
|
|
484
|
-
}
|
|
485
|
-
function localstorage() {
|
|
486
|
-
try {
|
|
487
|
-
return localStorage;
|
|
488
|
-
} catch (error) {
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
module2.exports = require_common()(exports2);
|
|
492
|
-
var { formatters } = module2.exports;
|
|
493
|
-
formatters.j = function(v) {
|
|
494
|
-
try {
|
|
495
|
-
return JSON.stringify(v);
|
|
496
|
-
} catch (error) {
|
|
497
|
-
return "[UnexpectedJSONParseError]: " + error.message;
|
|
498
|
-
}
|
|
499
|
-
};
|
|
500
|
-
}
|
|
501
|
-
});
|
|
502
|
-
|
|
503
|
-
// ../../node_modules/has-flag/index.js
|
|
504
|
-
var require_has_flag = __commonJS({
|
|
505
|
-
"../../node_modules/has-flag/index.js"(exports2, module2) {
|
|
506
|
-
"use strict";
|
|
507
|
-
module2.exports = (flag, argv = process.argv) => {
|
|
508
|
-
const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
|
|
509
|
-
const position = argv.indexOf(prefix + flag);
|
|
510
|
-
const terminatorPosition = argv.indexOf("--");
|
|
511
|
-
return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
|
|
512
|
-
};
|
|
513
|
-
}
|
|
514
|
-
});
|
|
515
|
-
|
|
516
|
-
// ../../node_modules/supports-color/index.js
|
|
517
|
-
var require_supports_color = __commonJS({
|
|
518
|
-
"../../node_modules/supports-color/index.js"(exports2, module2) {
|
|
519
|
-
"use strict";
|
|
520
|
-
var os2 = require("os");
|
|
521
|
-
var tty = require("tty");
|
|
522
|
-
var hasFlag = require_has_flag();
|
|
523
|
-
var { env } = process;
|
|
524
|
-
var forceColor;
|
|
525
|
-
if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
|
|
526
|
-
forceColor = 0;
|
|
527
|
-
} else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
|
|
528
|
-
forceColor = 1;
|
|
529
|
-
}
|
|
530
|
-
if ("FORCE_COLOR" in env) {
|
|
531
|
-
if (env.FORCE_COLOR === "true") {
|
|
532
|
-
forceColor = 1;
|
|
533
|
-
} else if (env.FORCE_COLOR === "false") {
|
|
534
|
-
forceColor = 0;
|
|
535
|
-
} else {
|
|
536
|
-
forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);
|
|
537
|
-
}
|
|
538
|
-
}
|
|
539
|
-
function translateLevel(level) {
|
|
540
|
-
if (level === 0) {
|
|
541
|
-
return false;
|
|
542
|
-
}
|
|
543
|
-
return {
|
|
544
|
-
level,
|
|
545
|
-
hasBasic: true,
|
|
546
|
-
has256: level >= 2,
|
|
547
|
-
has16m: level >= 3
|
|
548
|
-
};
|
|
549
|
-
}
|
|
550
|
-
function supportsColor(haveStream, streamIsTTY) {
|
|
551
|
-
if (forceColor === 0) {
|
|
552
|
-
return 0;
|
|
553
|
-
}
|
|
554
|
-
if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
|
|
555
|
-
return 3;
|
|
556
|
-
}
|
|
557
|
-
if (hasFlag("color=256")) {
|
|
558
|
-
return 2;
|
|
559
|
-
}
|
|
560
|
-
if (haveStream && !streamIsTTY && forceColor === void 0) {
|
|
561
|
-
return 0;
|
|
562
|
-
}
|
|
563
|
-
const min = forceColor || 0;
|
|
564
|
-
if (env.TERM === "dumb") {
|
|
565
|
-
return min;
|
|
566
|
-
}
|
|
567
|
-
if (process.platform === "win32") {
|
|
568
|
-
const osRelease = os2.release().split(".");
|
|
569
|
-
if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
|
|
570
|
-
return Number(osRelease[2]) >= 14931 ? 3 : 2;
|
|
571
|
-
}
|
|
572
|
-
return 1;
|
|
573
|
-
}
|
|
574
|
-
if ("CI" in env) {
|
|
575
|
-
if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "GITHUB_ACTIONS", "BUILDKITE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
|
|
576
|
-
return 1;
|
|
577
|
-
}
|
|
578
|
-
return min;
|
|
579
|
-
}
|
|
580
|
-
if ("TEAMCITY_VERSION" in env) {
|
|
581
|
-
return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
|
|
582
|
-
}
|
|
583
|
-
if (env.COLORTERM === "truecolor") {
|
|
584
|
-
return 3;
|
|
585
|
-
}
|
|
586
|
-
if ("TERM_PROGRAM" in env) {
|
|
587
|
-
const version = parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
|
|
588
|
-
switch (env.TERM_PROGRAM) {
|
|
589
|
-
case "iTerm.app":
|
|
590
|
-
return version >= 3 ? 3 : 2;
|
|
591
|
-
case "Apple_Terminal":
|
|
592
|
-
return 2;
|
|
593
|
-
}
|
|
594
|
-
}
|
|
595
|
-
if (/-256(color)?$/i.test(env.TERM)) {
|
|
596
|
-
return 2;
|
|
597
|
-
}
|
|
598
|
-
if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
|
|
599
|
-
return 1;
|
|
600
|
-
}
|
|
601
|
-
if ("COLORTERM" in env) {
|
|
602
|
-
return 1;
|
|
603
|
-
}
|
|
604
|
-
return min;
|
|
605
|
-
}
|
|
606
|
-
function getSupportLevel(stream) {
|
|
607
|
-
const level = supportsColor(stream, stream && stream.isTTY);
|
|
608
|
-
return translateLevel(level);
|
|
609
|
-
}
|
|
610
|
-
module2.exports = {
|
|
611
|
-
supportsColor: getSupportLevel,
|
|
612
|
-
stdout: translateLevel(supportsColor(true, tty.isatty(1))),
|
|
613
|
-
stderr: translateLevel(supportsColor(true, tty.isatty(2)))
|
|
614
|
-
};
|
|
615
|
-
}
|
|
616
|
-
});
|
|
617
|
-
|
|
618
|
-
// ../../node_modules/list-it/node_modules/debug/src/node.js
|
|
619
|
-
var require_node = __commonJS({
|
|
620
|
-
"../../node_modules/list-it/node_modules/debug/src/node.js"(exports2, module2) {
|
|
621
|
-
"use strict";
|
|
622
|
-
var tty = require("tty");
|
|
623
|
-
var util = require("util");
|
|
624
|
-
exports2.init = init;
|
|
625
|
-
exports2.log = log;
|
|
626
|
-
exports2.formatArgs = formatArgs;
|
|
627
|
-
exports2.save = save;
|
|
628
|
-
exports2.load = load;
|
|
629
|
-
exports2.useColors = useColors;
|
|
630
|
-
exports2.destroy = util.deprecate(
|
|
631
|
-
() => {
|
|
632
|
-
},
|
|
633
|
-
"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."
|
|
634
|
-
);
|
|
635
|
-
exports2.colors = [6, 2, 3, 4, 5, 1];
|
|
636
|
-
try {
|
|
637
|
-
const supportsColor = require_supports_color();
|
|
638
|
-
if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {
|
|
639
|
-
exports2.colors = [
|
|
640
|
-
20,
|
|
641
|
-
21,
|
|
642
|
-
26,
|
|
643
|
-
27,
|
|
644
|
-
32,
|
|
645
|
-
33,
|
|
646
|
-
38,
|
|
647
|
-
39,
|
|
648
|
-
40,
|
|
649
|
-
41,
|
|
650
|
-
42,
|
|
651
|
-
43,
|
|
652
|
-
44,
|
|
653
|
-
45,
|
|
654
|
-
56,
|
|
655
|
-
57,
|
|
656
|
-
62,
|
|
657
|
-
63,
|
|
658
|
-
68,
|
|
659
|
-
69,
|
|
660
|
-
74,
|
|
661
|
-
75,
|
|
662
|
-
76,
|
|
663
|
-
77,
|
|
664
|
-
78,
|
|
665
|
-
79,
|
|
666
|
-
80,
|
|
667
|
-
81,
|
|
668
|
-
92,
|
|
669
|
-
93,
|
|
670
|
-
98,
|
|
671
|
-
99,
|
|
672
|
-
112,
|
|
673
|
-
113,
|
|
674
|
-
128,
|
|
675
|
-
129,
|
|
676
|
-
134,
|
|
677
|
-
135,
|
|
678
|
-
148,
|
|
679
|
-
149,
|
|
680
|
-
160,
|
|
681
|
-
161,
|
|
682
|
-
162,
|
|
683
|
-
163,
|
|
684
|
-
164,
|
|
685
|
-
165,
|
|
686
|
-
166,
|
|
687
|
-
167,
|
|
688
|
-
168,
|
|
689
|
-
169,
|
|
690
|
-
170,
|
|
691
|
-
171,
|
|
692
|
-
172,
|
|
693
|
-
173,
|
|
694
|
-
178,
|
|
695
|
-
179,
|
|
696
|
-
184,
|
|
697
|
-
185,
|
|
698
|
-
196,
|
|
699
|
-
197,
|
|
700
|
-
198,
|
|
701
|
-
199,
|
|
702
|
-
200,
|
|
703
|
-
201,
|
|
704
|
-
202,
|
|
705
|
-
203,
|
|
706
|
-
204,
|
|
707
|
-
205,
|
|
708
|
-
206,
|
|
709
|
-
207,
|
|
710
|
-
208,
|
|
711
|
-
209,
|
|
712
|
-
214,
|
|
713
|
-
215,
|
|
714
|
-
220,
|
|
715
|
-
221
|
|
716
|
-
];
|
|
717
|
-
}
|
|
718
|
-
} catch (error) {
|
|
719
|
-
}
|
|
720
|
-
exports2.inspectOpts = Object.keys(process.env).filter((key) => {
|
|
721
|
-
return /^debug_/i.test(key);
|
|
722
|
-
}).reduce((obj, key) => {
|
|
723
|
-
const prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, (_, k) => {
|
|
724
|
-
return k.toUpperCase();
|
|
725
|
-
});
|
|
726
|
-
let val = process.env[key];
|
|
727
|
-
if (/^(yes|on|true|enabled)$/i.test(val)) {
|
|
728
|
-
val = true;
|
|
729
|
-
} else if (/^(no|off|false|disabled)$/i.test(val)) {
|
|
730
|
-
val = false;
|
|
731
|
-
} else if (val === "null") {
|
|
732
|
-
val = null;
|
|
733
|
-
} else {
|
|
734
|
-
val = Number(val);
|
|
735
|
-
}
|
|
736
|
-
obj[prop] = val;
|
|
737
|
-
return obj;
|
|
738
|
-
}, {});
|
|
739
|
-
function useColors() {
|
|
740
|
-
return "colors" in exports2.inspectOpts ? Boolean(exports2.inspectOpts.colors) : tty.isatty(process.stderr.fd);
|
|
741
|
-
}
|
|
742
|
-
function formatArgs(args2) {
|
|
743
|
-
const { namespace: name, useColors: useColors2 } = this;
|
|
744
|
-
if (useColors2) {
|
|
745
|
-
const c = this.color;
|
|
746
|
-
const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c);
|
|
747
|
-
const prefix = ` ${colorCode};1m${name} \x1B[0m`;
|
|
748
|
-
args2[0] = prefix + args2[0].split("\n").join("\n" + prefix);
|
|
749
|
-
args2.push(colorCode + "m+" + module2.exports.humanize(this.diff) + "\x1B[0m");
|
|
750
|
-
} else {
|
|
751
|
-
args2[0] = getDate() + name + " " + args2[0];
|
|
752
|
-
}
|
|
753
|
-
}
|
|
754
|
-
function getDate() {
|
|
755
|
-
if (exports2.inspectOpts.hideDate) {
|
|
756
|
-
return "";
|
|
757
|
-
}
|
|
758
|
-
return (/* @__PURE__ */ new Date()).toISOString() + " ";
|
|
759
|
-
}
|
|
760
|
-
function log(...args2) {
|
|
761
|
-
return process.stderr.write(util.formatWithOptions(exports2.inspectOpts, ...args2) + "\n");
|
|
762
|
-
}
|
|
763
|
-
function save(namespaces) {
|
|
764
|
-
if (namespaces) {
|
|
765
|
-
process.env.DEBUG = namespaces;
|
|
766
|
-
} else {
|
|
767
|
-
delete process.env.DEBUG;
|
|
768
|
-
}
|
|
769
|
-
}
|
|
770
|
-
function load() {
|
|
771
|
-
return process.env.DEBUG;
|
|
772
|
-
}
|
|
773
|
-
function init(debug) {
|
|
774
|
-
debug.inspectOpts = {};
|
|
775
|
-
const keys = Object.keys(exports2.inspectOpts);
|
|
776
|
-
for (let i = 0; i < keys.length; i++) {
|
|
777
|
-
debug.inspectOpts[keys[i]] = exports2.inspectOpts[keys[i]];
|
|
778
|
-
}
|
|
779
|
-
}
|
|
780
|
-
module2.exports = require_common()(exports2);
|
|
781
|
-
var { formatters } = module2.exports;
|
|
782
|
-
formatters.o = function(v) {
|
|
783
|
-
this.inspectOpts.colors = this.useColors;
|
|
784
|
-
return util.inspect(v, this.inspectOpts).split("\n").map((str) => str.trim()).join(" ");
|
|
785
|
-
};
|
|
786
|
-
formatters.O = function(v) {
|
|
787
|
-
this.inspectOpts.colors = this.useColors;
|
|
788
|
-
return util.inspect(v, this.inspectOpts);
|
|
789
|
-
};
|
|
790
|
-
}
|
|
791
|
-
});
|
|
792
|
-
|
|
793
|
-
// ../../node_modules/list-it/node_modules/debug/src/index.js
|
|
794
|
-
var require_src = __commonJS({
|
|
795
|
-
"../../node_modules/list-it/node_modules/debug/src/index.js"(exports2, module2) {
|
|
796
|
-
"use strict";
|
|
797
|
-
if (typeof process === "undefined" || process.type === "renderer" || process.browser === true || process.__nwjs) {
|
|
798
|
-
module2.exports = require_browser();
|
|
799
|
-
} else {
|
|
800
|
-
module2.exports = require_node();
|
|
801
|
-
}
|
|
802
|
-
}
|
|
803
|
-
});
|
|
804
|
-
|
|
805
|
-
// ../../node_modules/eastasianwidth/eastasianwidth.js
|
|
806
|
-
var require_eastasianwidth = __commonJS({
|
|
807
|
-
"../../node_modules/eastasianwidth/eastasianwidth.js"(exports2, module2) {
|
|
808
|
-
"use strict";
|
|
809
|
-
var eaw = {};
|
|
810
|
-
if ("undefined" == typeof module2) {
|
|
811
|
-
window.eastasianwidth = eaw;
|
|
812
|
-
} else {
|
|
813
|
-
module2.exports = eaw;
|
|
814
|
-
}
|
|
815
|
-
eaw.eastAsianWidth = function(character) {
|
|
816
|
-
var x = character.charCodeAt(0);
|
|
817
|
-
var y = character.length == 2 ? character.charCodeAt(1) : 0;
|
|
818
|
-
var codePoint = x;
|
|
819
|
-
if (55296 <= x && x <= 56319 && (56320 <= y && y <= 57343)) {
|
|
820
|
-
x &= 1023;
|
|
821
|
-
y &= 1023;
|
|
822
|
-
codePoint = x << 10 | y;
|
|
823
|
-
codePoint += 65536;
|
|
824
|
-
}
|
|
825
|
-
if (12288 == codePoint || 65281 <= codePoint && codePoint <= 65376 || 65504 <= codePoint && codePoint <= 65510) {
|
|
826
|
-
return "F";
|
|
827
|
-
}
|
|
828
|
-
if (8361 == codePoint || 65377 <= codePoint && codePoint <= 65470 || 65474 <= codePoint && codePoint <= 65479 || 65482 <= codePoint && codePoint <= 65487 || 65490 <= codePoint && codePoint <= 65495 || 65498 <= codePoint && codePoint <= 65500 || 65512 <= codePoint && codePoint <= 65518) {
|
|
829
|
-
return "H";
|
|
830
|
-
}
|
|
831
|
-
if (4352 <= codePoint && codePoint <= 4447 || 4515 <= codePoint && codePoint <= 4519 || 4602 <= codePoint && codePoint <= 4607 || 9001 <= codePoint && codePoint <= 9002 || 11904 <= codePoint && codePoint <= 11929 || 11931 <= codePoint && codePoint <= 12019 || 12032 <= codePoint && codePoint <= 12245 || 12272 <= codePoint && codePoint <= 12283 || 12289 <= codePoint && codePoint <= 12350 || 12353 <= codePoint && codePoint <= 12438 || 12441 <= codePoint && codePoint <= 12543 || 12549 <= codePoint && codePoint <= 12589 || 12593 <= codePoint && codePoint <= 12686 || 12688 <= codePoint && codePoint <= 12730 || 12736 <= codePoint && codePoint <= 12771 || 12784 <= codePoint && codePoint <= 12830 || 12832 <= codePoint && codePoint <= 12871 || 12880 <= codePoint && codePoint <= 13054 || 13056 <= codePoint && codePoint <= 19903 || 19968 <= codePoint && codePoint <= 42124 || 42128 <= codePoint && codePoint <= 42182 || 43360 <= codePoint && codePoint <= 43388 || 44032 <= codePoint && codePoint <= 55203 || 55216 <= codePoint && codePoint <= 55238 || 55243 <= codePoint && codePoint <= 55291 || 63744 <= codePoint && codePoint <= 64255 || 65040 <= codePoint && codePoint <= 65049 || 65072 <= codePoint && codePoint <= 65106 || 65108 <= codePoint && codePoint <= 65126 || 65128 <= codePoint && codePoint <= 65131 || 110592 <= codePoint && codePoint <= 110593 || 127488 <= codePoint && codePoint <= 127490 || 127504 <= codePoint && codePoint <= 127546 || 127552 <= codePoint && codePoint <= 127560 || 127568 <= codePoint && codePoint <= 127569 || 131072 <= codePoint && codePoint <= 194367 || 177984 <= codePoint && codePoint <= 196605 || 196608 <= codePoint && codePoint <= 262141) {
|
|
832
|
-
return "W";
|
|
833
|
-
}
|
|
834
|
-
if (32 <= codePoint && codePoint <= 126 || 162 <= codePoint && codePoint <= 163 || 165 <= codePoint && codePoint <= 166 || 172 == codePoint || 175 == codePoint || 10214 <= codePoint && codePoint <= 10221 || 10629 <= codePoint && codePoint <= 10630) {
|
|
835
|
-
return "Na";
|
|
836
|
-
}
|
|
837
|
-
if (161 == codePoint || 164 == codePoint || 167 <= codePoint && codePoint <= 168 || 170 == codePoint || 173 <= codePoint && codePoint <= 174 || 176 <= codePoint && codePoint <= 180 || 182 <= codePoint && codePoint <= 186 || 188 <= codePoint && codePoint <= 191 || 198 == codePoint || 208 == codePoint || 215 <= codePoint && codePoint <= 216 || 222 <= codePoint && codePoint <= 225 || 230 == codePoint || 232 <= codePoint && codePoint <= 234 || 236 <= codePoint && codePoint <= 237 || 240 == codePoint || 242 <= codePoint && codePoint <= 243 || 247 <= codePoint && codePoint <= 250 || 252 == codePoint || 254 == codePoint || 257 == codePoint || 273 == codePoint || 275 == codePoint || 283 == codePoint || 294 <= codePoint && codePoint <= 295 || 299 == codePoint || 305 <= codePoint && codePoint <= 307 || 312 == codePoint || 319 <= codePoint && codePoint <= 322 || 324 == codePoint || 328 <= codePoint && codePoint <= 331 || 333 == codePoint || 338 <= codePoint && codePoint <= 339 || 358 <= codePoint && codePoint <= 359 || 363 == codePoint || 462 == codePoint || 464 == codePoint || 466 == codePoint || 468 == codePoint || 470 == codePoint || 472 == codePoint || 474 == codePoint || 476 == codePoint || 593 == codePoint || 609 == codePoint || 708 == codePoint || 711 == codePoint || 713 <= codePoint && codePoint <= 715 || 717 == codePoint || 720 == codePoint || 728 <= codePoint && codePoint <= 731 || 733 == codePoint || 735 == codePoint || 768 <= codePoint && codePoint <= 879 || 913 <= codePoint && codePoint <= 929 || 931 <= codePoint && codePoint <= 937 || 945 <= codePoint && codePoint <= 961 || 963 <= codePoint && codePoint <= 969 || 1025 == codePoint || 1040 <= codePoint && codePoint <= 1103 || 1105 == codePoint || 8208 == codePoint || 8211 <= codePoint && codePoint <= 8214 || 8216 <= codePoint && codePoint <= 8217 || 8220 <= codePoint && codePoint <= 8221 || 8224 <= codePoint && codePoint <= 8226 || 8228 <= codePoint && codePoint <= 8231 || 8240 == codePoint || 8242 <= codePoint && codePoint <= 8243 || 8245 == codePoint || 8251 == codePoint || 8254 == codePoint || 8308 == codePoint || 8319 == codePoint || 8321 <= codePoint && codePoint <= 8324 || 8364 == codePoint || 8451 == codePoint || 8453 == codePoint || 8457 == codePoint || 8467 == codePoint || 8470 == codePoint || 8481 <= codePoint && codePoint <= 8482 || 8486 == codePoint || 8491 == codePoint || 8531 <= codePoint && codePoint <= 8532 || 8539 <= codePoint && codePoint <= 8542 || 8544 <= codePoint && codePoint <= 8555 || 8560 <= codePoint && codePoint <= 8569 || 8585 == codePoint || 8592 <= codePoint && codePoint <= 8601 || 8632 <= codePoint && codePoint <= 8633 || 8658 == codePoint || 8660 == codePoint || 8679 == codePoint || 8704 == codePoint || 8706 <= codePoint && codePoint <= 8707 || 8711 <= codePoint && codePoint <= 8712 || 8715 == codePoint || 8719 == codePoint || 8721 == codePoint || 8725 == codePoint || 8730 == codePoint || 8733 <= codePoint && codePoint <= 8736 || 8739 == codePoint || 8741 == codePoint || 8743 <= codePoint && codePoint <= 8748 || 8750 == codePoint || 8756 <= codePoint && codePoint <= 8759 || 8764 <= codePoint && codePoint <= 8765 || 8776 == codePoint || 8780 == codePoint || 8786 == codePoint || 8800 <= codePoint && codePoint <= 8801 || 8804 <= codePoint && codePoint <= 8807 || 8810 <= codePoint && codePoint <= 8811 || 8814 <= codePoint && codePoint <= 8815 || 8834 <= codePoint && codePoint <= 8835 || 8838 <= codePoint && codePoint <= 8839 || 8853 == codePoint || 8857 == codePoint || 8869 == codePoint || 8895 == codePoint || 8978 == codePoint || 9312 <= codePoint && codePoint <= 9449 || 9451 <= codePoint && codePoint <= 9547 || 9552 <= codePoint && codePoint <= 9587 || 9600 <= codePoint && codePoint <= 9615 || 9618 <= codePoint && codePoint <= 9621 || 9632 <= codePoint && codePoint <= 9633 || 9635 <= codePoint && codePoint <= 9641 || 9650 <= codePoint && codePoint <= 9651 || 9654 <= codePoint && codePoint <= 9655 || 9660 <= codePoint && codePoint <= 9661 || 9664 <= codePoint && codePoint <= 9665 || 9670 <= codePoint && codePoint <= 9672 || 9675 == codePoint || 9678 <= codePoint && codePoint <= 9681 || 9698 <= codePoint && codePoint <= 9701 || 9711 == codePoint || 9733 <= codePoint && codePoint <= 9734 || 9737 == codePoint || 9742 <= codePoint && codePoint <= 9743 || 9748 <= codePoint && codePoint <= 9749 || 9756 == codePoint || 9758 == codePoint || 9792 == codePoint || 9794 == codePoint || 9824 <= codePoint && codePoint <= 9825 || 9827 <= codePoint && codePoint <= 9829 || 9831 <= codePoint && codePoint <= 9834 || 9836 <= codePoint && codePoint <= 9837 || 9839 == codePoint || 9886 <= codePoint && codePoint <= 9887 || 9918 <= codePoint && codePoint <= 9919 || 9924 <= codePoint && codePoint <= 9933 || 9935 <= codePoint && codePoint <= 9953 || 9955 == codePoint || 9960 <= codePoint && codePoint <= 9983 || 10045 == codePoint || 10071 == codePoint || 10102 <= codePoint && codePoint <= 10111 || 11093 <= codePoint && codePoint <= 11097 || 12872 <= codePoint && codePoint <= 12879 || 57344 <= codePoint && codePoint <= 63743 || 65024 <= codePoint && codePoint <= 65039 || 65533 == codePoint || 127232 <= codePoint && codePoint <= 127242 || 127248 <= codePoint && codePoint <= 127277 || 127280 <= codePoint && codePoint <= 127337 || 127344 <= codePoint && codePoint <= 127386 || 917760 <= codePoint && codePoint <= 917999 || 983040 <= codePoint && codePoint <= 1048573 || 1048576 <= codePoint && codePoint <= 1114109) {
|
|
838
|
-
return "A";
|
|
839
|
-
}
|
|
840
|
-
return "N";
|
|
841
|
-
};
|
|
842
|
-
eaw.characterLength = function(character) {
|
|
843
|
-
var code = this.eastAsianWidth(character);
|
|
844
|
-
if (code == "F" || code == "W" || code == "A") {
|
|
845
|
-
return 2;
|
|
846
|
-
} else {
|
|
847
|
-
return 1;
|
|
848
|
-
}
|
|
849
|
-
};
|
|
850
|
-
function stringToArray(string) {
|
|
851
|
-
return string.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g) || [];
|
|
852
|
-
}
|
|
853
|
-
eaw.length = function(string) {
|
|
854
|
-
var characters = stringToArray(string);
|
|
855
|
-
var len = 0;
|
|
856
|
-
for (var i = 0; i < characters.length; i++) {
|
|
857
|
-
len = len + this.characterLength(characters[i]);
|
|
858
|
-
}
|
|
859
|
-
return len;
|
|
860
|
-
};
|
|
861
|
-
eaw.slice = function(text, start, end) {
|
|
862
|
-
textLen = eaw.length(text);
|
|
863
|
-
start = start ? start : 0;
|
|
864
|
-
end = end ? end : 1;
|
|
865
|
-
if (start < 0) {
|
|
866
|
-
start = textLen + start;
|
|
867
|
-
}
|
|
868
|
-
if (end < 0) {
|
|
869
|
-
end = textLen + end;
|
|
870
|
-
}
|
|
871
|
-
var result = "";
|
|
872
|
-
var eawLen = 0;
|
|
873
|
-
var chars = stringToArray(text);
|
|
874
|
-
for (var i = 0; i < chars.length; i++) {
|
|
875
|
-
var char = chars[i];
|
|
876
|
-
var charLen = eaw.length(char);
|
|
877
|
-
if (eawLen >= start - (charLen == 2 ? 1 : 0)) {
|
|
878
|
-
if (eawLen + charLen <= end) {
|
|
879
|
-
result += char;
|
|
880
|
-
} else {
|
|
881
|
-
break;
|
|
882
|
-
}
|
|
883
|
-
}
|
|
884
|
-
eawLen += charLen;
|
|
885
|
-
}
|
|
886
|
-
return result;
|
|
887
|
-
};
|
|
888
|
-
}
|
|
889
|
-
});
|
|
890
|
-
|
|
891
|
-
// ../../node_modules/list-it/lib/data-cell.js
|
|
892
|
-
var require_data_cell = __commonJS({
|
|
893
|
-
"../../node_modules/list-it/lib/data-cell.js"(exports2, module2) {
|
|
894
|
-
"use strict";
|
|
895
|
-
var eaw = require_eastasianwidth();
|
|
896
|
-
function DataCell() {
|
|
897
|
-
this.data = "";
|
|
898
|
-
}
|
|
899
|
-
module2.exports = DataCell;
|
|
900
|
-
DataCell.prototype.getData = function() {
|
|
901
|
-
return this.data;
|
|
902
|
-
};
|
|
903
|
-
DataCell.prototype.setData = function(data) {
|
|
904
|
-
this.data = data;
|
|
905
|
-
};
|
|
906
|
-
DataCell.prototype.visibleLength = function() {
|
|
907
|
-
if (typeof this.data != "string") {
|
|
908
|
-
return ("" + this.data).length;
|
|
909
|
-
}
|
|
910
|
-
return DataCell.visibleLength(this.data);
|
|
911
|
-
};
|
|
912
|
-
DataCell.visibleLength = function(data) {
|
|
913
|
-
const s = data.replace(/\x1b[^m]*m/g, "");
|
|
914
|
-
return eaw.length(s);
|
|
915
|
-
};
|
|
916
|
-
}
|
|
917
|
-
});
|
|
918
|
-
|
|
919
|
-
// ../../node_modules/list-it/lib/row.js
|
|
920
|
-
var require_row = __commonJS({
|
|
921
|
-
"../../node_modules/list-it/lib/row.js"(exports2, module2) {
|
|
922
|
-
"use strict";
|
|
923
|
-
function Row() {
|
|
924
|
-
this.cells = [];
|
|
925
|
-
this.empty = true;
|
|
926
|
-
this.fixed = false;
|
|
927
|
-
}
|
|
928
|
-
module2.exports = Row;
|
|
929
|
-
Row.prototype.getCellLength = function() {
|
|
930
|
-
return this.cells.length;
|
|
931
|
-
};
|
|
932
|
-
Row.prototype.getCell = function(idx) {
|
|
933
|
-
return this.cells[idx];
|
|
934
|
-
};
|
|
935
|
-
Row.prototype.pushCell = function(cell) {
|
|
936
|
-
if (this.isFixed()) {
|
|
937
|
-
throw "pushCell Fail, The row was already fixed.";
|
|
938
|
-
}
|
|
939
|
-
this.empty = false;
|
|
940
|
-
return this.cells.push(cell);
|
|
941
|
-
};
|
|
942
|
-
Row.prototype.fix = function() {
|
|
943
|
-
this.fixed = true;
|
|
944
|
-
};
|
|
945
|
-
Row.prototype.isEmpty = function() {
|
|
946
|
-
return this.empty;
|
|
947
|
-
};
|
|
948
|
-
Row.prototype.isFixed = function() {
|
|
949
|
-
return this.fixed;
|
|
950
|
-
};
|
|
951
|
-
}
|
|
952
|
-
});
|
|
953
|
-
|
|
954
|
-
// ../../node_modules/list-it/lib/column.js
|
|
955
|
-
var require_column = __commonJS({
|
|
956
|
-
"../../node_modules/list-it/lib/column.js"(exports2, module2) {
|
|
957
|
-
"use strict";
|
|
958
|
-
var DataCell = require_data_cell();
|
|
959
|
-
function Column() {
|
|
960
|
-
this.opt = {
|
|
961
|
-
"autoAlign": false
|
|
962
|
-
};
|
|
963
|
-
this.width = 0;
|
|
964
|
-
this.textWidth = null;
|
|
965
|
-
this.intLen = 0;
|
|
966
|
-
this.fracLen = 0;
|
|
967
|
-
this.expLen = 0;
|
|
968
|
-
this.cellAtRow = {};
|
|
969
|
-
this.header = null;
|
|
970
|
-
}
|
|
971
|
-
module2.exports = Column;
|
|
972
|
-
Column.prototype.getWidth = function() {
|
|
973
|
-
return this.width;
|
|
974
|
-
};
|
|
975
|
-
Column.prototype.setTextWidth = function(textWidth) {
|
|
976
|
-
this.textWidth = textWidth;
|
|
977
|
-
};
|
|
978
|
-
Column.prototype.setCellAt = function(row, cell) {
|
|
979
|
-
this.cellAtRow[row] = cell;
|
|
980
|
-
};
|
|
981
|
-
Column.prototype.setHeader = function(header) {
|
|
982
|
-
this.header = header;
|
|
983
|
-
};
|
|
984
|
-
Column.prototype.hasHeader = function() {
|
|
985
|
-
return this.header != null;
|
|
986
|
-
};
|
|
987
|
-
Column.prototype.updateWidth = function() {
|
|
988
|
-
const headerWidth = !this.hasHeader() ? 0 : DataCell.visibleLength("" + this.header);
|
|
989
|
-
this.width = headerWidth;
|
|
990
|
-
Object.keys(this.cellAtRow).forEach((key) => {
|
|
991
|
-
const cell = this.cellAtRow[key];
|
|
992
|
-
const data = cell.getData();
|
|
993
|
-
let width = cell.visibleLength();
|
|
994
|
-
if (typeof data == "number") {
|
|
995
|
-
if (this.opt.autoAlign) {
|
|
996
|
-
this.updateNumWidth(data);
|
|
997
|
-
width = this.getNumMaxWidth();
|
|
998
|
-
}
|
|
999
|
-
}
|
|
1000
|
-
if (width > this.width) {
|
|
1001
|
-
this.width = width;
|
|
1002
|
-
}
|
|
1003
|
-
if (typeof data == "string") {
|
|
1004
|
-
if (this.textWidth && this.textWidth > headerWidth) {
|
|
1005
|
-
if (this.width > this.textWidth) {
|
|
1006
|
-
this.width = this.textWidth;
|
|
1007
|
-
}
|
|
1008
|
-
}
|
|
1009
|
-
}
|
|
1010
|
-
});
|
|
1011
|
-
};
|
|
1012
|
-
Column.prototype.formatColumnHeader = function() {
|
|
1013
|
-
if (!this.hasHeader()) {
|
|
1014
|
-
return null;
|
|
1015
|
-
}
|
|
1016
|
-
const width = this.getWidth();
|
|
1017
|
-
const header = this.header;
|
|
1018
|
-
const headerWidth = DataCell.visibleLength("" + header);
|
|
1019
|
-
if (header.length == headerWidth && width - headerWidth <= 0) {
|
|
1020
|
-
return ("" + header).substring(0, width);
|
|
1021
|
-
}
|
|
1022
|
-
return "" + header + " ".repeat(width - headerWidth);
|
|
1023
|
-
};
|
|
1024
|
-
Column.prototype.formatCell = function(data) {
|
|
1025
|
-
const width = this.getWidth();
|
|
1026
|
-
if (this.opt.autoAlign) {
|
|
1027
|
-
if (typeof data == "number") {
|
|
1028
|
-
return this.makeAutoAlignNum(data).padStart(width, " ");
|
|
1029
|
-
}
|
|
1030
|
-
}
|
|
1031
|
-
const dataWidth = DataCell.visibleLength("" + data);
|
|
1032
|
-
if (data.length == dataWidth && width - dataWidth <= 0) {
|
|
1033
|
-
return ("" + data).substring(0, width);
|
|
1034
|
-
}
|
|
1035
|
-
return "" + data + " ".repeat(width - dataWidth);
|
|
1036
|
-
};
|
|
1037
|
-
Column.prototype.setAutoAlign = function(autoAlign) {
|
|
1038
|
-
this.opt.autoAlign = autoAlign;
|
|
1039
|
-
};
|
|
1040
|
-
Column.prototype.updateNumWidth = function(num) {
|
|
1041
|
-
const numInfo = this.analyzeNumber(num);
|
|
1042
|
-
const intLen = numInfo.intStr.length;
|
|
1043
|
-
const fracLen = numInfo.fracStr.length;
|
|
1044
|
-
const expLen = numInfo.expStr.length;
|
|
1045
|
-
if (intLen > this.intLen) {
|
|
1046
|
-
this.intLen = intLen;
|
|
1047
|
-
}
|
|
1048
|
-
if (fracLen > this.fracLen) {
|
|
1049
|
-
this.fracLen = fracLen;
|
|
1050
|
-
}
|
|
1051
|
-
if (expLen > this.expLen) {
|
|
1052
|
-
this.expLen = expLen;
|
|
1053
|
-
}
|
|
1054
|
-
};
|
|
1055
|
-
Column.prototype.getNumMaxWidth = function() {
|
|
1056
|
-
return this.intLen + this.fracLen + (this.fracLen > 0 ? 1 : 0) + this.expLen + (this.expLen > 0 ? 1 : 0);
|
|
1057
|
-
};
|
|
1058
|
-
Column.prototype.makeAutoAlignNum = function(num) {
|
|
1059
|
-
const numInfo = this.analyzeNumber(num);
|
|
1060
|
-
const intStr = numInfo.intStr.padStart(this.intLen, " ");
|
|
1061
|
-
const fracStr = numInfo.expStr != "" ? numInfo.fracStr.padEnd(this.fracLen, "0") : numInfo.fracStr.padEnd(this.fracLen, " ");
|
|
1062
|
-
const expStr = numInfo.expStr.padEnd(this.expLen, " ");
|
|
1063
|
-
if (numInfo.expStr != "") {
|
|
1064
|
-
return [intStr, ".", fracStr, "e", expStr].join("");
|
|
1065
|
-
}
|
|
1066
|
-
if (numInfo.pointPos >= 0) {
|
|
1067
|
-
if (this.expLen > 0) {
|
|
1068
|
-
return [intStr, ".", fracStr, " ", expStr].join("");
|
|
1069
|
-
}
|
|
1070
|
-
return [intStr, ".", fracStr].join("");
|
|
1071
|
-
} else if (this.fracLen == 0) {
|
|
1072
|
-
return intStr;
|
|
1073
|
-
}
|
|
1074
|
-
if (this.expLen > 0) {
|
|
1075
|
-
return [intStr, ".0", fracStr.substr(1), " ", expStr].join("");
|
|
1076
|
-
}
|
|
1077
|
-
return [intStr, ".0", fracStr.substr(1)].join("");
|
|
1078
|
-
};
|
|
1079
|
-
Column.prototype.analyzeNumber = function(num) {
|
|
1080
|
-
const s = "" + num;
|
|
1081
|
-
let intStr = "";
|
|
1082
|
-
let fracStr = "";
|
|
1083
|
-
const pointPos = s.indexOf(".");
|
|
1084
|
-
const expIndex = s.indexOf("e");
|
|
1085
|
-
if (expIndex >= 0) {
|
|
1086
|
-
if (pointPos < 0) {
|
|
1087
|
-
return {
|
|
1088
|
-
pointPos: expIndex,
|
|
1089
|
-
intStr: s.substr(0, expIndex),
|
|
1090
|
-
fracStr: "0",
|
|
1091
|
-
expStr: s.substr(expIndex + 1)
|
|
1092
|
-
};
|
|
1093
|
-
}
|
|
1094
|
-
return {
|
|
1095
|
-
pointPos,
|
|
1096
|
-
intStr: s.substr(0, pointPos),
|
|
1097
|
-
fracStr: s.substring(pointPos + 1, expIndex),
|
|
1098
|
-
expStr: s.substr(expIndex + 1)
|
|
1099
|
-
};
|
|
1100
|
-
}
|
|
1101
|
-
if (pointPos < 0) {
|
|
1102
|
-
intStr = s;
|
|
1103
|
-
} else {
|
|
1104
|
-
intStr = s.substr(0, pointPos);
|
|
1105
|
-
fracStr = s.substr(pointPos + 1);
|
|
1106
|
-
}
|
|
1107
|
-
return {
|
|
1108
|
-
"pointPos": pointPos,
|
|
1109
|
-
"intStr": intStr,
|
|
1110
|
-
"fracStr": fracStr,
|
|
1111
|
-
"expStr": ""
|
|
1112
|
-
};
|
|
1113
|
-
};
|
|
1114
|
-
}
|
|
1115
|
-
});
|
|
1116
|
-
|
|
1117
|
-
// ../../node_modules/ansi-escape-sequences/dist/index.cjs
|
|
1118
|
-
var require_dist = __commonJS({
|
|
1119
|
-
"../../node_modules/ansi-escape-sequences/dist/index.cjs"(exports2, module2) {
|
|
1120
|
-
"use strict";
|
|
1121
|
-
function isObject(input) {
|
|
1122
|
-
return typeof input === "object" && input !== null;
|
|
1123
|
-
}
|
|
1124
|
-
function isArrayLike(input) {
|
|
1125
|
-
return isObject(input) && typeof input.length === "number";
|
|
1126
|
-
}
|
|
1127
|
-
function arrayify(input) {
|
|
1128
|
-
if (Array.isArray(input)) {
|
|
1129
|
-
return input;
|
|
1130
|
-
} else if (input === void 0) {
|
|
1131
|
-
return [];
|
|
1132
|
-
} else if (isArrayLike(input) || input instanceof Set) {
|
|
1133
|
-
return Array.from(input);
|
|
1134
|
-
} else {
|
|
1135
|
-
return [input];
|
|
1136
|
-
}
|
|
1137
|
-
}
|
|
1138
|
-
var csi = "\x1B[";
|
|
1139
|
-
var ansi = {};
|
|
1140
|
-
ansi.style = {
|
|
1141
|
-
reset: "\x1B[0m",
|
|
1142
|
-
bold: "\x1B[1m",
|
|
1143
|
-
italic: "\x1B[3m",
|
|
1144
|
-
underline: "\x1B[4m",
|
|
1145
|
-
fontDefault: "\x1B[10m",
|
|
1146
|
-
font2: "\x1B[11m",
|
|
1147
|
-
font3: "\x1B[12m",
|
|
1148
|
-
font4: "\x1B[13m",
|
|
1149
|
-
font5: "\x1B[14m",
|
|
1150
|
-
font6: "\x1B[15m",
|
|
1151
|
-
imageNegative: "\x1B[7m",
|
|
1152
|
-
imagePositive: "\x1B[27m",
|
|
1153
|
-
black: "\x1B[30m",
|
|
1154
|
-
red: "\x1B[31m",
|
|
1155
|
-
green: "\x1B[32m",
|
|
1156
|
-
yellow: "\x1B[33m",
|
|
1157
|
-
blue: "\x1B[34m",
|
|
1158
|
-
magenta: "\x1B[35m",
|
|
1159
|
-
cyan: "\x1B[36m",
|
|
1160
|
-
white: "\x1B[37m",
|
|
1161
|
-
grey: "\x1B[90m",
|
|
1162
|
-
gray: "\x1B[90m",
|
|
1163
|
-
brightRed: "\x1B[91m",
|
|
1164
|
-
brightGreen: "\x1B[92m",
|
|
1165
|
-
brightYellow: "\x1B[93m",
|
|
1166
|
-
brightBlue: "\x1B[94m",
|
|
1167
|
-
brightMagenta: "\x1B[95m",
|
|
1168
|
-
brightCyan: "\x1B[96m",
|
|
1169
|
-
brightWhite: "\x1B[97m",
|
|
1170
|
-
"bg-black": "\x1B[40m",
|
|
1171
|
-
"bg-red": "\x1B[41m",
|
|
1172
|
-
"bg-green": "\x1B[42m",
|
|
1173
|
-
"bg-yellow": "\x1B[43m",
|
|
1174
|
-
"bg-blue": "\x1B[44m",
|
|
1175
|
-
"bg-magenta": "\x1B[45m",
|
|
1176
|
-
"bg-cyan": "\x1B[46m",
|
|
1177
|
-
"bg-white": "\x1B[47m",
|
|
1178
|
-
"bg-grey": "\x1B[100m",
|
|
1179
|
-
"bg-gray": "\x1B[100m",
|
|
1180
|
-
"bg-brightRed": "\x1B[101m",
|
|
1181
|
-
"bg-brightGreen": "\x1B[102m",
|
|
1182
|
-
"bg-brightYellow": "\x1B[103m",
|
|
1183
|
-
"bg-brightBlue": "\x1B[104m",
|
|
1184
|
-
"bg-brightMagenta": "\x1B[105m",
|
|
1185
|
-
"bg-brightCyan": "\x1B[106m",
|
|
1186
|
-
"bg-brightWhite": "\x1B[107m"
|
|
1187
|
-
};
|
|
1188
|
-
ansi.rgb = function(r, g, b) {
|
|
1189
|
-
return `\x1B[38;2;${r};${g};${b}m`;
|
|
1190
|
-
};
|
|
1191
|
-
ansi.bgRgb = function(r, g, b) {
|
|
1192
|
-
return `\x1B[48;2;${r};${g};${b}m`;
|
|
1193
|
-
};
|
|
1194
|
-
ansi.styles = function(styles) {
|
|
1195
|
-
styles = arrayify(styles);
|
|
1196
|
-
return styles.map(function(effect) {
|
|
1197
|
-
const rgbMatches = effect.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);
|
|
1198
|
-
const bgRgbMatches = effect.match(/bg-rgb\((\d+),\s*(\d+),\s*(\d+)\)/);
|
|
1199
|
-
if (bgRgbMatches) {
|
|
1200
|
-
const [full, r, g, b] = bgRgbMatches;
|
|
1201
|
-
return ansi.bgRgb(r, g, b);
|
|
1202
|
-
} else if (rgbMatches) {
|
|
1203
|
-
const [full, r, g, b] = rgbMatches;
|
|
1204
|
-
return ansi.rgb(r, g, b);
|
|
1205
|
-
} else {
|
|
1206
|
-
return ansi.style[effect];
|
|
1207
|
-
}
|
|
1208
|
-
}).join("");
|
|
1209
|
-
};
|
|
1210
|
-
ansi.format = function(str, styleArray) {
|
|
1211
|
-
const re = /\[([\w\s-\(\),]+)\]{([^]*?)}/;
|
|
1212
|
-
let matches;
|
|
1213
|
-
str = String(str);
|
|
1214
|
-
if (!str) return "";
|
|
1215
|
-
while (matches = str.match(re)) {
|
|
1216
|
-
const inlineStyles = matches[1].split(/\s+/);
|
|
1217
|
-
const inlineString = matches[2];
|
|
1218
|
-
str = str.replace(matches[0], ansi.format(inlineString, inlineStyles));
|
|
1219
|
-
}
|
|
1220
|
-
return styleArray && styleArray.length ? ansi.styles(styleArray) + str + ansi.style.reset : str;
|
|
1221
|
-
};
|
|
1222
|
-
ansi.cursor = {
|
|
1223
|
-
/**
|
|
1224
|
-
* Moves the cursor `lines` cells up. If the cursor is already at the edge of the screen, this has no effect
|
|
1225
|
-
* @param [lines=1] {number}
|
|
1226
|
-
* @return {string}
|
|
1227
|
-
*/
|
|
1228
|
-
up: function(lines) {
|
|
1229
|
-
return csi + (lines || 1) + "A";
|
|
1230
|
-
},
|
|
1231
|
-
/**
|
|
1232
|
-
* Moves the cursor `lines` cells down. If the cursor is already at the edge of the screen, this has no effect
|
|
1233
|
-
* @param [lines=1] {number}
|
|
1234
|
-
* @return {string}
|
|
1235
|
-
*/
|
|
1236
|
-
down: function(lines) {
|
|
1237
|
-
return csi + (lines || 1) + "B";
|
|
1238
|
-
},
|
|
1239
|
-
/**
|
|
1240
|
-
* Moves the cursor `lines` cells forward. If the cursor is already at the edge of the screen, this has no effect
|
|
1241
|
-
* @param [lines=1] {number}
|
|
1242
|
-
* @return {string}
|
|
1243
|
-
*/
|
|
1244
|
-
forward: function(lines) {
|
|
1245
|
-
return csi + (lines || 1) + "C";
|
|
1246
|
-
},
|
|
1247
|
-
/**
|
|
1248
|
-
* Moves the cursor `lines` cells back. If the cursor is already at the edge of the screen, this has no effect
|
|
1249
|
-
* @param [lines=1] {number}
|
|
1250
|
-
* @return {string}
|
|
1251
|
-
*/
|
|
1252
|
-
back: function(lines) {
|
|
1253
|
-
return csi + (lines || 1) + "D";
|
|
1254
|
-
},
|
|
1255
|
-
/**
|
|
1256
|
-
* Moves cursor to beginning of the line n lines down.
|
|
1257
|
-
* @param [lines=1] {number}
|
|
1258
|
-
* @return {string}
|
|
1259
|
-
*/
|
|
1260
|
-
nextLine: function(lines) {
|
|
1261
|
-
return csi + (lines || 1) + "E";
|
|
1262
|
-
},
|
|
1263
|
-
/**
|
|
1264
|
-
* Moves cursor to beginning of the line n lines up.
|
|
1265
|
-
* @param [lines=1] {number}
|
|
1266
|
-
* @return {string}
|
|
1267
|
-
*/
|
|
1268
|
-
previousLine: function(lines) {
|
|
1269
|
-
return csi + (lines || 1) + "F";
|
|
1270
|
-
},
|
|
1271
|
-
/**
|
|
1272
|
-
* Moves the cursor to column n.
|
|
1273
|
-
* @param n {number} - column number
|
|
1274
|
-
* @return {string}
|
|
1275
|
-
*/
|
|
1276
|
-
horizontalAbsolute: function(n) {
|
|
1277
|
-
return csi + n + "G";
|
|
1278
|
-
},
|
|
1279
|
-
/**
|
|
1280
|
-
* Moves the cursor to row n, column m. The values are 1-based, and default to 1 (top left corner) if omitted.
|
|
1281
|
-
* @param n {number} - row number
|
|
1282
|
-
* @param m {number} - column number
|
|
1283
|
-
* @return {string}
|
|
1284
|
-
*/
|
|
1285
|
-
position: function(n, m) {
|
|
1286
|
-
return csi + (n || 1) + ";" + (m || 1) + "H";
|
|
1287
|
-
},
|
|
1288
|
-
/**
|
|
1289
|
-
* Hides the cursor
|
|
1290
|
-
*/
|
|
1291
|
-
hide: csi + "?25l",
|
|
1292
|
-
/**
|
|
1293
|
-
* Shows the cursor
|
|
1294
|
-
*/
|
|
1295
|
-
show: csi + "?25h"
|
|
1296
|
-
};
|
|
1297
|
-
ansi.erase = {
|
|
1298
|
-
/**
|
|
1299
|
-
* Clears part of the screen. If n is 0 (or missing), clear from cursor to end of screen. If n is 1, clear from cursor to beginning of the screen. If n is 2, clear entire screen.
|
|
1300
|
-
* @param n {number}
|
|
1301
|
-
* @return {string}
|
|
1302
|
-
*/
|
|
1303
|
-
display: function(n) {
|
|
1304
|
-
return csi + (n || 0) + "J";
|
|
1305
|
-
},
|
|
1306
|
-
/**
|
|
1307
|
-
* Erases part of the line. If n is zero (or missing), clear from cursor to the end of the line. If n is one, clear from cursor to beginning of the line. If n is two, clear entire line. Cursor position does not change.
|
|
1308
|
-
* @param n {number}
|
|
1309
|
-
* @return {string}
|
|
1310
|
-
*/
|
|
1311
|
-
inLine: function(n) {
|
|
1312
|
-
return csi + (n || 0) + "K";
|
|
1313
|
-
}
|
|
1314
|
-
};
|
|
1315
|
-
module2.exports = ansi;
|
|
1316
|
-
}
|
|
1317
|
-
});
|
|
1318
|
-
|
|
1319
|
-
// ../../node_modules/list-it/lib/list-it-buffer.js
|
|
1320
|
-
var require_list_it_buffer = __commonJS({
|
|
1321
|
-
"../../node_modules/list-it/lib/list-it-buffer.js"(exports2, module2) {
|
|
1322
|
-
"use strict";
|
|
1323
|
-
var debug = require_src()("list-it-buffer");
|
|
1324
|
-
var DataCell = require_data_cell();
|
|
1325
|
-
var Row = require_row();
|
|
1326
|
-
var Column = require_column();
|
|
1327
|
-
var ansi = require_dist();
|
|
1328
|
-
function ListItBuffer(opt) {
|
|
1329
|
-
opt = opt || {};
|
|
1330
|
-
this.opt = {
|
|
1331
|
-
"autoAlign": true,
|
|
1332
|
-
"columnWidth": null,
|
|
1333
|
-
"header": null,
|
|
1334
|
-
"headerBold": false,
|
|
1335
|
-
"headerColor": "",
|
|
1336
|
-
"headerUnderline": false
|
|
1337
|
-
};
|
|
1338
|
-
if (opt.header != null && !Array.isArray(opt.header)) {
|
|
1339
|
-
throw new Error([
|
|
1340
|
-
`Invalid header was specified. It must be an array, but (${JSON.stringify(opt.header)}):${typeof opt.header} was specified.`
|
|
1341
|
-
].join(" "));
|
|
1342
|
-
}
|
|
1343
|
-
if (opt.headerColor && !(opt.headerColor in COLORS)) {
|
|
1344
|
-
throw new Error([
|
|
1345
|
-
`Invalid color ${JSON.stringify(opt.headerColor)} was specified.`,
|
|
1346
|
-
"Available color names:",
|
|
1347
|
-
...AVAILABLE_COLORS.map((color) => `* ${JSON.stringify(color)}`)
|
|
1348
|
-
].join("\n"));
|
|
1349
|
-
}
|
|
1350
|
-
Object.keys(this.opt).forEach((key) => {
|
|
1351
|
-
if (key in opt) {
|
|
1352
|
-
this.opt[key] = opt[key];
|
|
1353
|
-
}
|
|
1354
|
-
});
|
|
1355
|
-
this.lines = [];
|
|
1356
|
-
this.columns = [];
|
|
1357
|
-
this.columnWidth = this.opt.columnWidth;
|
|
1358
|
-
if (this.opt.header) {
|
|
1359
|
-
this.setHeaderRow(this.opt.header);
|
|
1360
|
-
}
|
|
1361
|
-
}
|
|
1362
|
-
module2.exports = ListItBuffer;
|
|
1363
|
-
ListItBuffer.prototype.nl = function() {
|
|
1364
|
-
const lastRowIndex = this.lines.length - 1;
|
|
1365
|
-
if (lastRowIndex >= 0 && !this.lines[lastRowIndex].isFixed()) {
|
|
1366
|
-
this.lines[lastRowIndex].fix();
|
|
1367
|
-
}
|
|
1368
|
-
this.pushNewRow();
|
|
1369
|
-
return this;
|
|
1370
|
-
};
|
|
1371
|
-
ListItBuffer.prototype.d = function(data) {
|
|
1372
|
-
if (arguments.length > 1) {
|
|
1373
|
-
const array = Array.apply(null, arguments);
|
|
1374
|
-
if (ListItBuffer.isMultiDimensionalArray(array)) {
|
|
1375
|
-
array.forEach((row) => this.addRow(row));
|
|
1376
|
-
} else {
|
|
1377
|
-
array.forEach((data2) => this.d(data2));
|
|
1378
|
-
}
|
|
1379
|
-
return this;
|
|
1380
|
-
}
|
|
1381
|
-
if (Array.isArray(data)) {
|
|
1382
|
-
if (ListItBuffer.isMultiDimensionalArray(data)) {
|
|
1383
|
-
data.forEach((row) => this.addRow(row));
|
|
1384
|
-
} else if (ListItBuffer.isObjectArray(data)) {
|
|
1385
|
-
data = objectArrayToTable(data);
|
|
1386
|
-
if (!this.header && (this.opt.headerBold || this.opt.headerColor || this.opt.headerUnderline)) {
|
|
1387
|
-
this.setHeaderRow(data.shift());
|
|
1388
|
-
}
|
|
1389
|
-
data.forEach((row) => this.addRow(row));
|
|
1390
|
-
} else {
|
|
1391
|
-
this.addRow(data);
|
|
1392
|
-
}
|
|
1393
|
-
return this;
|
|
1394
|
-
}
|
|
1395
|
-
const rowidx = this.lines.length - 1;
|
|
1396
|
-
if (rowidx < 0 || this.lines[rowidx].isFixed()) {
|
|
1397
|
-
this.pushNewRow();
|
|
1398
|
-
}
|
|
1399
|
-
const cell = new DataCell();
|
|
1400
|
-
cell.setData(data);
|
|
1401
|
-
const iRow = this.lines.length - 1;
|
|
1402
|
-
let iCol = this.lines[iRow].getCellLength();
|
|
1403
|
-
if (iCol >= this.columns.length) {
|
|
1404
|
-
this.addColumn();
|
|
1405
|
-
}
|
|
1406
|
-
this.columns[iCol].setCellAt(iRow, cell);
|
|
1407
|
-
this.lines[iRow].pushCell(cell);
|
|
1408
|
-
return this;
|
|
1409
|
-
};
|
|
1410
|
-
ListItBuffer.isMultiDimensionalArray = function(arr) {
|
|
1411
|
-
if (!Array.isArray(arr)) {
|
|
1412
|
-
throw Error("The parameter arr must be array");
|
|
1413
|
-
}
|
|
1414
|
-
for (let element of arr) {
|
|
1415
|
-
if (!Array.isArray(element)) {
|
|
1416
|
-
return false;
|
|
1417
|
-
}
|
|
1418
|
-
}
|
|
1419
|
-
return true;
|
|
1420
|
-
};
|
|
1421
|
-
ListItBuffer.isObjectArray = function(arr) {
|
|
1422
|
-
if (!Array.isArray(arr)) {
|
|
1423
|
-
throw Error("The parameter arr must be array");
|
|
1424
|
-
}
|
|
1425
|
-
const ctor = arr[0].constructor;
|
|
1426
|
-
for (let element of arr) {
|
|
1427
|
-
if (typeof element != "object") {
|
|
1428
|
-
return false;
|
|
1429
|
-
} else {
|
|
1430
|
-
if (element.constructor.name != ctor.name) {
|
|
1431
|
-
return false;
|
|
1432
|
-
}
|
|
1433
|
-
}
|
|
1434
|
-
}
|
|
1435
|
-
return true;
|
|
1436
|
-
};
|
|
1437
|
-
ListItBuffer.prototype.addRow = function(row) {
|
|
1438
|
-
row.forEach((col) => {
|
|
1439
|
-
switch (typeof col) {
|
|
1440
|
-
case "string":
|
|
1441
|
-
case "number":
|
|
1442
|
-
this.d(col);
|
|
1443
|
-
break;
|
|
1444
|
-
default:
|
|
1445
|
-
this.d(col != null ? col.toString() : "(null)");
|
|
1446
|
-
break;
|
|
1447
|
-
}
|
|
1448
|
-
});
|
|
1449
|
-
this.nl();
|
|
1450
|
-
};
|
|
1451
|
-
ListItBuffer.prototype.pushNewRow = function() {
|
|
1452
|
-
this.lines.push(new Row());
|
|
1453
|
-
};
|
|
1454
|
-
ListItBuffer.prototype.toString = function() {
|
|
1455
|
-
const rows = [];
|
|
1456
|
-
this.columns.forEach((column, iCol) => {
|
|
1457
|
-
if (this.header != null) {
|
|
1458
|
-
column.setHeader(this.header[iCol] || "");
|
|
1459
|
-
}
|
|
1460
|
-
column.setTextWidth(this.getColumnWidth(iCol));
|
|
1461
|
-
column.updateWidth();
|
|
1462
|
-
});
|
|
1463
|
-
if (this.header != null) {
|
|
1464
|
-
const headerLine = this.applyHeaderStyleOption(
|
|
1465
|
-
this.columns.map((column) => column.formatColumnHeader()).join(" ")
|
|
1466
|
-
);
|
|
1467
|
-
rows.push(headerLine);
|
|
1468
|
-
const headerUnderline = this.generateHeaderUnderline();
|
|
1469
|
-
if (headerUnderline) {
|
|
1470
|
-
rows.push(headerUnderline);
|
|
1471
|
-
}
|
|
1472
|
-
}
|
|
1473
|
-
this.lines.forEach((line) => {
|
|
1474
|
-
if (line.isFixed() || !line.isEmpty()) {
|
|
1475
|
-
if (line.isEmpty()) {
|
|
1476
|
-
rows.push("\n");
|
|
1477
|
-
} else {
|
|
1478
|
-
rows.push(this.columns.map((column, iCol) => {
|
|
1479
|
-
const cell = line.getCell(iCol);
|
|
1480
|
-
const data = cell.getData();
|
|
1481
|
-
return column.formatCell(data);
|
|
1482
|
-
}).join(" "));
|
|
1483
|
-
}
|
|
1484
|
-
}
|
|
1485
|
-
});
|
|
1486
|
-
return rows.join("\n");
|
|
1487
|
-
};
|
|
1488
|
-
var COLORS = {};
|
|
1489
|
-
var BGCOLORS = {};
|
|
1490
|
-
Object.keys(ansi.style).forEach((key) => {
|
|
1491
|
-
const value = ansi.style[key];
|
|
1492
|
-
if (/^bg-/.test(key)) {
|
|
1493
|
-
BGCOLORS[key.substr(3)] = value;
|
|
1494
|
-
} else {
|
|
1495
|
-
COLORS[key] = value;
|
|
1496
|
-
debug(`COLOR-KEY: ${key}`);
|
|
1497
|
-
}
|
|
1498
|
-
});
|
|
1499
|
-
Object.keys(COLORS).forEach((key) => {
|
|
1500
|
-
if (!(key in BGCOLORS)) {
|
|
1501
|
-
delete COLORS[key];
|
|
1502
|
-
debug(`remove COLOR-KEY: ${key}`);
|
|
1503
|
-
}
|
|
1504
|
-
});
|
|
1505
|
-
var AVAILABLE_COLORS = Object.keys(COLORS);
|
|
1506
|
-
debug(`AVAILABLE_COLORS:${JSON.stringify(AVAILABLE_COLORS)}`);
|
|
1507
|
-
ListItBuffer.prototype.applyHeaderStyleOption = function(line) {
|
|
1508
|
-
if (!this.opt.headerBold && !this.opt.headerColor) {
|
|
1509
|
-
return line;
|
|
1510
|
-
}
|
|
1511
|
-
const textBuffer = [];
|
|
1512
|
-
if (this.opt.headerBold) {
|
|
1513
|
-
textBuffer.push(ansi.style.bold);
|
|
1514
|
-
}
|
|
1515
|
-
if (this.opt.headerColor) {
|
|
1516
|
-
textBuffer.push(COLORS[this.opt.headerColor]);
|
|
1517
|
-
}
|
|
1518
|
-
textBuffer.push(line);
|
|
1519
|
-
textBuffer.push(ansi.style.reset);
|
|
1520
|
-
return textBuffer.join("");
|
|
1521
|
-
};
|
|
1522
|
-
ListItBuffer.prototype.generateHeaderUnderline = function() {
|
|
1523
|
-
if (!this.opt.headerUnderline) {
|
|
1524
|
-
return null;
|
|
1525
|
-
}
|
|
1526
|
-
if (this.header == null) {
|
|
1527
|
-
return null;
|
|
1528
|
-
}
|
|
1529
|
-
return this.columns.map(
|
|
1530
|
-
(column) => "-".repeat(column.getWidth())
|
|
1531
|
-
).join(" ");
|
|
1532
|
-
};
|
|
1533
|
-
function objectArrayToTable(objects) {
|
|
1534
|
-
const keys = Object.keys(objects[0]);
|
|
1535
|
-
const body = objects.map((item) => keys.map((key) => {
|
|
1536
|
-
if (item[key] != null && typeof item[key] == "object" && item[key].constructor.name == "Date") {
|
|
1537
|
-
return item[key].toISOString();
|
|
1538
|
-
}
|
|
1539
|
-
return item[key];
|
|
1540
|
-
}));
|
|
1541
|
-
return [keys, ...body];
|
|
1542
|
-
}
|
|
1543
|
-
ListItBuffer.prototype.setColumnWidth = function(indexOfColumns, width) {
|
|
1544
|
-
this.columnWidth = this.columnWidth || [];
|
|
1545
|
-
if (typeof indexOfColumns !== "number") {
|
|
1546
|
-
throw new Error("indexOfColumns must be a number");
|
|
1547
|
-
}
|
|
1548
|
-
if (!width) {
|
|
1549
|
-
delete this.columnWidth[indexOfColumns];
|
|
1550
|
-
} else {
|
|
1551
|
-
if (typeof width !== "number") {
|
|
1552
|
-
throw new Error("width must be a number");
|
|
1553
|
-
}
|
|
1554
|
-
this.columnWidth[indexOfColumns] = width;
|
|
1555
|
-
}
|
|
1556
|
-
return this;
|
|
1557
|
-
};
|
|
1558
|
-
ListItBuffer.prototype.setColumnWidthAll = function(widthForAll) {
|
|
1559
|
-
if (widthForAll != null && !Array.isArray(widthForAll) && typeof widthForAll !== "number") {
|
|
1560
|
-
throw new Error(
|
|
1561
|
-
"widthForAll must be one of a null, an Array or a number"
|
|
1562
|
-
);
|
|
1563
|
-
}
|
|
1564
|
-
if (Array.isArray(widthForAll)) {
|
|
1565
|
-
for (let i = 0; i < widthForAll.length; i++) {
|
|
1566
|
-
const width = widthForAll[i];
|
|
1567
|
-
if (width != void 0 && typeof width !== "number") {
|
|
1568
|
-
throw new Error(
|
|
1569
|
-
`widthForAll[${i}] must be an undefined or a number`
|
|
1570
|
-
);
|
|
1571
|
-
}
|
|
1572
|
-
}
|
|
1573
|
-
}
|
|
1574
|
-
this.columnWidth = widthForAll;
|
|
1575
|
-
return this;
|
|
1576
|
-
};
|
|
1577
|
-
ListItBuffer.prototype.getColumnWidth = function(indexOfColumns) {
|
|
1578
|
-
if (Array.isArray(this.columnWidth)) {
|
|
1579
|
-
return this.columnWidth[indexOfColumns];
|
|
1580
|
-
}
|
|
1581
|
-
return this.columnWidth;
|
|
1582
|
-
};
|
|
1583
|
-
ListItBuffer.prototype.setHeaderRow = function(header) {
|
|
1584
|
-
if (header && !Array.isArray(header)) {
|
|
1585
|
-
throw new Error([
|
|
1586
|
-
"The header must be an array,",
|
|
1587
|
-
`but ${typeof header} was specified.`,
|
|
1588
|
-
`header: ${JSON.stringify(header)}`
|
|
1589
|
-
].join(" "));
|
|
1590
|
-
}
|
|
1591
|
-
this.header = header;
|
|
1592
|
-
if (this.header == null) {
|
|
1593
|
-
this.columns.forEach((column) => column.setHeader(null));
|
|
1594
|
-
} else {
|
|
1595
|
-
this.header.forEach((headerText, iCol) => {
|
|
1596
|
-
if (iCol >= this.columns.length) {
|
|
1597
|
-
this.addColumn(headerText);
|
|
1598
|
-
}
|
|
1599
|
-
});
|
|
1600
|
-
}
|
|
1601
|
-
return this;
|
|
1602
|
-
};
|
|
1603
|
-
ListItBuffer.prototype.addColumn = function(headerText) {
|
|
1604
|
-
const column = new Column();
|
|
1605
|
-
if (headerText) {
|
|
1606
|
-
column.setHeader(headerText);
|
|
1607
|
-
}
|
|
1608
|
-
if (this.opt.autoAlign) {
|
|
1609
|
-
column.setAutoAlign(true);
|
|
1610
|
-
}
|
|
1611
|
-
this.columns.push(column);
|
|
1612
|
-
};
|
|
1613
|
-
}
|
|
1614
|
-
});
|
|
1615
|
-
|
|
1616
|
-
// ../../node_modules/list-it/index.js
|
|
1617
|
-
var require_list_it = __commonJS({
|
|
1618
|
-
"../../node_modules/list-it/index.js"(exports2, module2) {
|
|
1619
|
-
"use strict";
|
|
1620
|
-
var ListItBuffer = require_list_it_buffer();
|
|
1621
|
-
function ListIt2(opt) {
|
|
1622
|
-
ListItBuffer.call(this, opt);
|
|
1623
|
-
}
|
|
1624
|
-
ListIt2.prototype = new ListItBuffer();
|
|
1625
|
-
ListIt2.buffer = function(opt) {
|
|
1626
|
-
opt = opt || {};
|
|
1627
|
-
if (!("autoAlign" in opt)) {
|
|
1628
|
-
opt.autoAlign = false;
|
|
1629
|
-
}
|
|
1630
|
-
return new ListIt2(opt);
|
|
1631
|
-
};
|
|
1632
|
-
module2.exports = ListIt2;
|
|
1633
|
-
}
|
|
1634
|
-
});
|
|
1635
|
-
|
|
1636
30
|
// src/scripts/backtest.ts
|
|
1637
31
|
var backtest_exports = {};
|
|
1638
32
|
__export(backtest_exports, {
|
|
@@ -1680,12 +74,12 @@ var import_constants5 = require("@tradejs/core/constants");
|
|
|
1680
74
|
var import_time3 = require("@tradejs/core/time");
|
|
1681
75
|
var import_backtestArtifacts = require("@tradejs/infra/backtestArtifacts");
|
|
1682
76
|
var import_redis4 = require("@tradejs/infra/redis");
|
|
1683
|
-
var
|
|
77
|
+
var import_runtimeDeployments = require("@tradejs/infra/runtimeDeployments");
|
|
1684
78
|
var import_types3 = require("@tradejs/types");
|
|
1685
79
|
|
|
1686
80
|
// src/lib/runFormatting.ts
|
|
1687
81
|
var import_date_fns = require("date-fns");
|
|
1688
|
-
var ListIt =
|
|
82
|
+
var ListIt = require("list-it");
|
|
1689
83
|
var createTimestamp = (date) => (0, import_date_fns.format)(date, "yyyyMMddHHmm");
|
|
1690
84
|
var formatDuration = (startedAt) => {
|
|
1691
85
|
const seconds = Math.max(0, (Date.now() - startedAt) / 1e3);
|
|
@@ -1705,7 +99,7 @@ var timeOperation = async (label, operation, log = console.log) => {
|
|
|
1705
99
|
|
|
1706
100
|
// src/lib/marketContextPrepare.ts
|
|
1707
101
|
var import_chalk4 = __toESM(require("chalk"));
|
|
1708
|
-
var
|
|
102
|
+
var import_marketContext3 = require("@tradejs/infra/timescale/marketContext");
|
|
1709
103
|
var import_registry = require("@tradejs/node/registry");
|
|
1710
104
|
|
|
1711
105
|
// src/lib/binanceMarketContextBackfill.ts
|
|
@@ -1714,7 +108,8 @@ var import_chalk = __toESM(require("chalk"));
|
|
|
1714
108
|
var import_connectors = require("@tradejs/connectors");
|
|
1715
109
|
var import_connectors2 = require("@tradejs/node/connectors");
|
|
1716
110
|
var import_strategies = require("@tradejs/node/strategies");
|
|
1717
|
-
var
|
|
111
|
+
var import_marketContext = require("@tradejs/infra/timescale/marketContext");
|
|
112
|
+
var import_client = require("@tradejs/infra/timescale/client");
|
|
1718
113
|
|
|
1719
114
|
// src/lib/binanceMarketData.ts
|
|
1720
115
|
var MARKET_FEATURE_INTERVAL_MS = {
|
|
@@ -2222,7 +617,7 @@ var backfillBinanceMarketContext = async (params, enabled) => {
|
|
|
2222
617
|
if (endMs <= Math.min(breadthStartMs, tradeFlowStartMs)) {
|
|
2223
618
|
return skippedBackfillResult();
|
|
2224
619
|
}
|
|
2225
|
-
await (0,
|
|
620
|
+
await (0, import_client.waitForDbReady)();
|
|
2226
621
|
const connector = await getBinanceConnector({
|
|
2227
622
|
projectRoot: params.projectRoot,
|
|
2228
623
|
userName: params.userName
|
|
@@ -2268,7 +663,7 @@ var backfillBinanceMarketContext = async (params, enabled) => {
|
|
|
2268
663
|
)
|
|
2269
664
|
);
|
|
2270
665
|
if (includeTradeFlow && referenceSymbols.length) {
|
|
2271
|
-
const coverage = await (0,
|
|
666
|
+
const coverage = await (0, import_marketContext.getMarketTradeFlowCoverage)({
|
|
2272
667
|
symbols: referenceSymbols,
|
|
2273
668
|
interval: interval2,
|
|
2274
669
|
startMs: tradeFlowStartMs,
|
|
@@ -2352,7 +747,7 @@ var backfillBinanceMarketContext = async (params, enabled) => {
|
|
|
2352
747
|
const ts = row.ts.getTime();
|
|
2353
748
|
return ts >= chunk.startMs && ts <= chunk.endMs;
|
|
2354
749
|
});
|
|
2355
|
-
await (0,
|
|
750
|
+
await (0, import_marketContext.upsertMarketTradeFlowRows)(boundedRows);
|
|
2356
751
|
tradeFlowRows += boundedRows.length;
|
|
2357
752
|
chunkBar?.tick(1, {
|
|
2358
753
|
rows: tradeFlowRows,
|
|
@@ -2380,7 +775,7 @@ var backfillBinanceMarketContext = async (params, enabled) => {
|
|
|
2380
775
|
});
|
|
2381
776
|
const plans = await Promise.all(
|
|
2382
777
|
breadthUniverses.map(async (definition) => {
|
|
2383
|
-
const coverage = await (0,
|
|
778
|
+
const coverage = await (0, import_marketContext.getMarketBreadthCoverage)({
|
|
2384
779
|
universe: definition.universe,
|
|
2385
780
|
interval: interval2,
|
|
2386
781
|
startMs: breadthStartMs,
|
|
@@ -2481,7 +876,7 @@ var backfillBinanceMarketContext = async (params, enabled) => {
|
|
|
2481
876
|
const ts = row.ts.getTime();
|
|
2482
877
|
return ts >= chunk.startMs && ts <= chunk.endMs;
|
|
2483
878
|
});
|
|
2484
|
-
await (0,
|
|
879
|
+
await (0, import_marketContext.upsertMarketBreadthRows)(rows);
|
|
2485
880
|
breadthRows += rows.length;
|
|
2486
881
|
}
|
|
2487
882
|
}
|
|
@@ -2509,7 +904,8 @@ var import_progress2 = __toESM(require("progress"));
|
|
|
2509
904
|
var import_async = require("@tradejs/core/async");
|
|
2510
905
|
var import_constants = require("@tradejs/core/constants");
|
|
2511
906
|
var import_indicators = require("@tradejs/core/indicators");
|
|
2512
|
-
var
|
|
907
|
+
var import_derivatives = require("@tradejs/infra/timescale/derivatives");
|
|
908
|
+
var import_client2 = require("@tradejs/infra/timescale/client");
|
|
2513
909
|
var import_userSettings = require("@tradejs/infra/userSettings");
|
|
2514
910
|
var HOUR_MS = 60 * 60 * 1e3;
|
|
2515
911
|
var DAY_MS2 = 24 * HOUR_MS;
|
|
@@ -3022,13 +1418,13 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
|
|
|
3022
1418
|
if (!intervalWindows.length) {
|
|
3023
1419
|
return skippedBackfillResult2();
|
|
3024
1420
|
}
|
|
3025
|
-
await (0,
|
|
1421
|
+
await (0, import_client2.waitForDbReady)();
|
|
3026
1422
|
const edgesByInterval = /* @__PURE__ */ new Map();
|
|
3027
1423
|
await Promise.all(
|
|
3028
1424
|
intervalWindows.map(async ({ interval: interval2 }) => {
|
|
3029
1425
|
edgesByInterval.set(
|
|
3030
1426
|
interval2,
|
|
3031
|
-
await (0,
|
|
1427
|
+
await (0, import_derivatives.getDerivativesDataEdgesForSymbols)(symbols, interval2)
|
|
3032
1428
|
);
|
|
3033
1429
|
})
|
|
3034
1430
|
);
|
|
@@ -3037,32 +1433,32 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
|
|
|
3037
1433
|
const liquidationCoverageRangesByInterval = /* @__PURE__ */ new Map();
|
|
3038
1434
|
const coverageNowMs = Date.now();
|
|
3039
1435
|
await Promise.all(
|
|
3040
|
-
intervalWindows.map(async (
|
|
1436
|
+
intervalWindows.map(async (window) => {
|
|
3041
1437
|
const confirmedLiquidationWindow = (0, import_indicators.resolveCoinalyzeConfirmedIntradayCoverage)({
|
|
3042
|
-
interval:
|
|
3043
|
-
fromMs:
|
|
3044
|
-
toMs:
|
|
1438
|
+
interval: window.interval,
|
|
1439
|
+
fromMs: window.fromMs,
|
|
1440
|
+
toMs: window.toMs,
|
|
3045
1441
|
nowMs: coverageNowMs
|
|
3046
1442
|
});
|
|
3047
1443
|
const [coverageRows, liquidationCoverageRows] = await Promise.all([
|
|
3048
|
-
(0,
|
|
1444
|
+
(0, import_derivatives.getDerivativesBackfillCoverage)({
|
|
3049
1445
|
source: "coinalyze",
|
|
3050
1446
|
symbols,
|
|
3051
|
-
interval:
|
|
3052
|
-
fromMs:
|
|
3053
|
-
toMs:
|
|
1447
|
+
interval: window.interval,
|
|
1448
|
+
fromMs: window.fromMs,
|
|
1449
|
+
toMs: window.toMs
|
|
3054
1450
|
}),
|
|
3055
|
-
confirmedLiquidationWindow ? (0,
|
|
1451
|
+
confirmedLiquidationWindow ? (0, import_derivatives.getDerivativesMetricCoverage)({
|
|
3056
1452
|
source: "coinalyze",
|
|
3057
1453
|
metric: "liquidation",
|
|
3058
1454
|
symbols,
|
|
3059
|
-
interval:
|
|
1455
|
+
interval: window.interval,
|
|
3060
1456
|
fromMs: confirmedLiquidationWindow.fromMs,
|
|
3061
1457
|
toMs: confirmedLiquidationWindow.toMs
|
|
3062
1458
|
}) : Promise.resolve([])
|
|
3063
1459
|
]);
|
|
3064
1460
|
coverageKeysByInterval.set(
|
|
3065
|
-
|
|
1461
|
+
window.interval,
|
|
3066
1462
|
new Set(
|
|
3067
1463
|
coverageRows.map(
|
|
3068
1464
|
(row) => coverageKey({
|
|
@@ -3081,7 +1477,7 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
|
|
|
3081
1477
|
ranges.push({ fromMs: row.fromMs, toMs: row.toMs });
|
|
3082
1478
|
rangesBySymbol.set(symbol, ranges);
|
|
3083
1479
|
}
|
|
3084
|
-
coverageRangesByInterval.set(
|
|
1480
|
+
coverageRangesByInterval.set(window.interval, rangesBySymbol);
|
|
3085
1481
|
const liquidationRangesBySymbol = /* @__PURE__ */ new Map();
|
|
3086
1482
|
for (const row of liquidationCoverageRows) {
|
|
3087
1483
|
const symbol = row.symbol.toUpperCase();
|
|
@@ -3090,33 +1486,33 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
|
|
|
3090
1486
|
liquidationRangesBySymbol.set(symbol, ranges);
|
|
3091
1487
|
}
|
|
3092
1488
|
liquidationCoverageRangesByInterval.set(
|
|
3093
|
-
|
|
1489
|
+
window.interval,
|
|
3094
1490
|
liquidationRangesBySymbol
|
|
3095
1491
|
);
|
|
3096
1492
|
})
|
|
3097
1493
|
);
|
|
3098
1494
|
const cachedWindows = intervalWindows.reduce(
|
|
3099
|
-
(sum,
|
|
3100
|
-
fromMs:
|
|
3101
|
-
toMs:
|
|
1495
|
+
(sum, window) => sum + countBackfillWindows({
|
|
1496
|
+
fromMs: window.fromMs,
|
|
1497
|
+
toMs: window.toMs,
|
|
3102
1498
|
batchMs,
|
|
3103
|
-
intervalMs:
|
|
1499
|
+
intervalMs: window.intervalMs
|
|
3104
1500
|
}),
|
|
3105
1501
|
0
|
|
3106
1502
|
);
|
|
3107
|
-
const allBackfillWindowsCached = mode !== "signals" && intervalWindows.every((
|
|
3108
|
-
const edgesBySymbol = edgesByInterval.get(
|
|
3109
|
-
const coverageKeys = coverageKeysByInterval.get(
|
|
1503
|
+
const allBackfillWindowsCached = mode !== "signals" && intervalWindows.every((window) => {
|
|
1504
|
+
const edgesBySymbol = edgesByInterval.get(window.interval);
|
|
1505
|
+
const coverageKeys = coverageKeysByInterval.get(window.interval);
|
|
3110
1506
|
const backfillWindows = buildBackfillWindows({
|
|
3111
|
-
fromMs:
|
|
3112
|
-
toMs:
|
|
1507
|
+
fromMs: window.fromMs,
|
|
1508
|
+
toMs: window.toMs,
|
|
3113
1509
|
batchMs,
|
|
3114
|
-
intervalMs:
|
|
1510
|
+
intervalMs: window.intervalMs
|
|
3115
1511
|
});
|
|
3116
1512
|
return symbols.every(
|
|
3117
1513
|
(symbol) => backfillWindows.every((backfillWindow) => {
|
|
3118
1514
|
const normalizedSymbol = symbol.toUpperCase();
|
|
3119
|
-
const coverageRanges = coverageRangesByInterval.get(
|
|
1515
|
+
const coverageRanges = coverageRangesByInterval.get(window.interval)?.get(normalizedSymbol) ?? [];
|
|
3120
1516
|
const dataCovered = hasDerivativesWindowCoverage({
|
|
3121
1517
|
edges: edgesBySymbol?.get(normalizedSymbol),
|
|
3122
1518
|
fromMs: backfillWindow.fromMs,
|
|
@@ -3125,26 +1521,26 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
|
|
|
3125
1521
|
ranges: coverageRanges,
|
|
3126
1522
|
fromMs: backfillWindow.fromMs,
|
|
3127
1523
|
toMs: backfillWindow.toMs,
|
|
3128
|
-
intervalMs:
|
|
1524
|
+
intervalMs: window.intervalMs
|
|
3129
1525
|
}) == null || coverageKeys?.has(
|
|
3130
1526
|
coverageKey({
|
|
3131
1527
|
symbol: normalizedSymbol,
|
|
3132
|
-
interval:
|
|
1528
|
+
interval: window.interval,
|
|
3133
1529
|
fromMs: backfillWindow.fromMs,
|
|
3134
1530
|
toMs: backfillWindow.toMs
|
|
3135
1531
|
})
|
|
3136
1532
|
);
|
|
3137
1533
|
const confirmedLiquidationWindow = (0, import_indicators.resolveCoinalyzeConfirmedIntradayCoverage)({
|
|
3138
|
-
interval:
|
|
1534
|
+
interval: window.interval,
|
|
3139
1535
|
fromMs: backfillWindow.fromMs,
|
|
3140
1536
|
toMs: backfillWindow.toMs,
|
|
3141
1537
|
nowMs: coverageNowMs
|
|
3142
1538
|
});
|
|
3143
1539
|
const liquidationCovered = confirmedLiquidationWindow == null || resolveDerivativesContextMissingCoverageFetchFromMs({
|
|
3144
|
-
ranges: liquidationCoverageRangesByInterval.get(
|
|
1540
|
+
ranges: liquidationCoverageRangesByInterval.get(window.interval)?.get(normalizedSymbol) ?? [],
|
|
3145
1541
|
fromMs: confirmedLiquidationWindow.fromMs,
|
|
3146
1542
|
toMs: confirmedLiquidationWindow.toMs,
|
|
3147
|
-
intervalMs:
|
|
1543
|
+
intervalMs: window.intervalMs
|
|
3148
1544
|
}) == null;
|
|
3149
1545
|
return dataCovered && liquidationCovered;
|
|
3150
1546
|
})
|
|
@@ -3194,11 +1590,11 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
|
|
|
3194
1590
|
);
|
|
3195
1591
|
const symbolBatches = chunkArray(matches, symbolBatchSize);
|
|
3196
1592
|
const windowsPerPair = intervalWindows.reduce(
|
|
3197
|
-
(sum,
|
|
3198
|
-
fromMs:
|
|
3199
|
-
toMs:
|
|
1593
|
+
(sum, window) => sum + countBackfillWindows({
|
|
1594
|
+
fromMs: window.fromMs,
|
|
1595
|
+
toMs: window.toMs,
|
|
3200
1596
|
batchMs,
|
|
3201
|
-
intervalMs:
|
|
1597
|
+
intervalMs: window.intervalMs
|
|
3202
1598
|
}),
|
|
3203
1599
|
0
|
|
3204
1600
|
);
|
|
@@ -3221,9 +1617,9 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
|
|
|
3221
1617
|
`derivatives context backfill: symbols=${matches.length}, requestedSymbols=${requestedSymbols.length}, unmatched=${unmatched.length}, intervals=${intervals.join(",")}, window=${new Date(fromMs).toISOString()}..${new Date(safeEndMs).toISOString()}, testStart=${new Date(safeStartMs).toISOString()}`
|
|
3222
1618
|
)
|
|
3223
1619
|
);
|
|
3224
|
-
for (const
|
|
3225
|
-
const { interval: interval2, intervalMs } =
|
|
3226
|
-
const edgesBySymbol = edgesByInterval.get(interval2) ?? await (0,
|
|
1620
|
+
for (const window of intervalWindows) {
|
|
1621
|
+
const { interval: interval2, intervalMs } = window;
|
|
1622
|
+
const edgesBySymbol = edgesByInterval.get(interval2) ?? await (0, import_derivatives.getDerivativesDataEdgesForSymbols)(
|
|
3227
1623
|
matches.map((item) => item.symbol),
|
|
3228
1624
|
interval2
|
|
3229
1625
|
);
|
|
@@ -3238,9 +1634,9 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
|
|
|
3238
1634
|
);
|
|
3239
1635
|
for (let batchIdx = 0; batchIdx < symbolBatches.length; batchIdx += 1) {
|
|
3240
1636
|
const batch = symbolBatches[batchIdx];
|
|
3241
|
-
let cursor =
|
|
3242
|
-
while (cursor <
|
|
3243
|
-
const toMs = Math.min(
|
|
1637
|
+
let cursor = window.fromMs;
|
|
1638
|
+
while (cursor < window.toMs) {
|
|
1639
|
+
const toMs = Math.min(window.toMs, cursor + batchMs);
|
|
3244
1640
|
const missingRanges = batch.map((item) => {
|
|
3245
1641
|
const key = coverageKey({
|
|
3246
1642
|
symbol: item.symbol,
|
|
@@ -3346,7 +1742,7 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
|
|
|
3346
1742
|
);
|
|
3347
1743
|
}
|
|
3348
1744
|
if (rows.length) {
|
|
3349
|
-
await (0,
|
|
1745
|
+
await (0, import_derivatives.upsertDerivatives)(rows);
|
|
3350
1746
|
totalRows += rows.length;
|
|
3351
1747
|
}
|
|
3352
1748
|
const confirmedLiquidationWindow = (0, import_indicators.resolveCoinalyzeConfirmedIntradayCoverage)({
|
|
@@ -3374,7 +1770,7 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
|
|
|
3374
1770
|
eventRowsCount
|
|
3375
1771
|
};
|
|
3376
1772
|
});
|
|
3377
|
-
await (0,
|
|
1773
|
+
await (0, import_derivatives.applyDerivativesMetricCoverage)(metricCoverageRows);
|
|
3378
1774
|
for (const coverageRow of metricCoverageRows) {
|
|
3379
1775
|
const symbol = coverageRow.symbol.toUpperCase();
|
|
3380
1776
|
const ranges = liquidationCoverageRangesBySymbol.get(symbol) ?? [];
|
|
@@ -3406,7 +1802,7 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
|
|
|
3406
1802
|
rowsCount
|
|
3407
1803
|
};
|
|
3408
1804
|
});
|
|
3409
|
-
await (0,
|
|
1805
|
+
await (0, import_derivatives.upsertDerivativesBackfillCoverage)(coverageRows);
|
|
3410
1806
|
for (const coverageRow of coverageRows) {
|
|
3411
1807
|
const symbol = coverageRow.symbol.toUpperCase();
|
|
3412
1808
|
edgesBySymbol.set(
|
|
@@ -3483,7 +1879,8 @@ var backfillDerivativesContextForSignals = async (params) => backfillDerivatives
|
|
|
3483
1879
|
// src/lib/coinMarketCapContextBackfill.ts
|
|
3484
1880
|
var import_chalk3 = __toESM(require("chalk"));
|
|
3485
1881
|
var import_async2 = require("@tradejs/core/async");
|
|
3486
|
-
var
|
|
1882
|
+
var import_marketContext2 = require("@tradejs/infra/timescale/marketContext");
|
|
1883
|
+
var import_client3 = require("@tradejs/infra/timescale/client");
|
|
3487
1884
|
var import_userSettings2 = require("@tradejs/infra/userSettings");
|
|
3488
1885
|
var DAY_MS3 = 864e5;
|
|
3489
1886
|
var DEFAULT_CONTEXT_MAX_AGE_MS = 48 * 60 * 6e4;
|
|
@@ -3747,7 +2144,7 @@ var logBackfillSourceDone = (params) => {
|
|
|
3747
2144
|
)
|
|
3748
2145
|
);
|
|
3749
2146
|
};
|
|
3750
|
-
var markBackfillCoverage = (rows) => (0,
|
|
2147
|
+
var markBackfillCoverage = (rows) => (0, import_marketContext2.upsertMarketContextBackfillCoverage)(rows);
|
|
3751
2148
|
var coinMarketCapFetch = async (params) => {
|
|
3752
2149
|
const url = new URL(`${getBaseUrl()}${params.path}`);
|
|
3753
2150
|
for (const [key, value] of Object.entries(params.searchParams)) {
|
|
@@ -4076,7 +2473,7 @@ var backfillCoinMarketCapContext = async (params) => {
|
|
|
4076
2473
|
if (toMs <= fromMs) return skippedResult();
|
|
4077
2474
|
const exchangeLiquidityEnabled = isExchangeLiquidityBackfillEnabled();
|
|
4078
2475
|
const fearGreedEnabled = isFearGreedBackfillEnabled();
|
|
4079
|
-
await (0,
|
|
2476
|
+
await (0, import_client3.waitForDbReady)();
|
|
4080
2477
|
const [
|
|
4081
2478
|
globalDailyCoverage,
|
|
4082
2479
|
referenceDailyCoverage,
|
|
@@ -4089,66 +2486,66 @@ var backfillCoinMarketCapContext = async (params) => {
|
|
|
4089
2486
|
fearGreedBackfillCoverage,
|
|
4090
2487
|
indexBackfillCoverage
|
|
4091
2488
|
] = await Promise.all([
|
|
4092
|
-
(0,
|
|
2489
|
+
(0, import_marketContext2.getMarketGlobalContextCoverage)({
|
|
4093
2490
|
source: SOURCE_GLOBAL_DAILY,
|
|
4094
2491
|
startMs: fromMs,
|
|
4095
2492
|
endMs: toMs
|
|
4096
2493
|
}),
|
|
4097
|
-
(0,
|
|
2494
|
+
(0, import_marketContext2.getMarketReferenceAssetContextCoverage)({
|
|
4098
2495
|
source: SOURCE_REFERENCE,
|
|
4099
2496
|
symbols: REFERENCE_ASSETS.map((item) => item.symbol),
|
|
4100
2497
|
interval: "1d",
|
|
4101
2498
|
startMs: fromMs,
|
|
4102
2499
|
endMs: toMs
|
|
4103
2500
|
}),
|
|
4104
|
-
exchangeLiquidityEnabled ? (0,
|
|
2501
|
+
exchangeLiquidityEnabled ? (0, import_marketContext2.getMarketCmcExchangeLiquidityContextCoverage)({
|
|
4105
2502
|
source: SOURCE_EXCHANGE_LIQUIDITY,
|
|
4106
2503
|
interval: "1d",
|
|
4107
2504
|
startMs: fromMs,
|
|
4108
2505
|
endMs: toMs
|
|
4109
2506
|
}) : Promise.resolve(null),
|
|
4110
|
-
fearGreedEnabled ? (0,
|
|
2507
|
+
fearGreedEnabled ? (0, import_marketContext2.getMarketCmcFearGreedContextCoverage)({
|
|
4111
2508
|
source: SOURCE_FEAR_GREED,
|
|
4112
2509
|
interval: "1d",
|
|
4113
2510
|
startMs: fromMs,
|
|
4114
2511
|
endMs: toMs
|
|
4115
2512
|
}) : Promise.resolve(null),
|
|
4116
|
-
(0,
|
|
2513
|
+
(0, import_marketContext2.getMarketCmcIndexContextCoverage)({
|
|
4117
2514
|
source: SOURCE_INDEX,
|
|
4118
2515
|
indexSlugs: CMC_INDEXES.map((index) => index.slug),
|
|
4119
2516
|
interval: "1d",
|
|
4120
2517
|
startMs: fromMs,
|
|
4121
2518
|
endMs: toMs
|
|
4122
2519
|
}),
|
|
4123
|
-
(0,
|
|
2520
|
+
(0, import_marketContext2.getMarketContextBackfillCoverage)({
|
|
4124
2521
|
source: SOURCE_GLOBAL_DAILY,
|
|
4125
2522
|
scopes: [COVERAGE_SCOPE_ALL],
|
|
4126
2523
|
interval: "1d",
|
|
4127
2524
|
fromMs,
|
|
4128
2525
|
toMs
|
|
4129
2526
|
}),
|
|
4130
|
-
(0,
|
|
2527
|
+
(0, import_marketContext2.getMarketContextBackfillCoverage)({
|
|
4131
2528
|
source: SOURCE_REFERENCE,
|
|
4132
2529
|
scopes: REFERENCE_ASSETS.map((item) => item.symbol),
|
|
4133
2530
|
interval: "1d",
|
|
4134
2531
|
fromMs,
|
|
4135
2532
|
toMs
|
|
4136
2533
|
}),
|
|
4137
|
-
exchangeLiquidityEnabled ? (0,
|
|
2534
|
+
exchangeLiquidityEnabled ? (0, import_marketContext2.getMarketContextBackfillCoverage)({
|
|
4138
2535
|
source: SOURCE_EXCHANGE_LIQUIDITY,
|
|
4139
2536
|
scopes: [COVERAGE_SCOPE_ALL],
|
|
4140
2537
|
interval: "1d",
|
|
4141
2538
|
fromMs,
|
|
4142
2539
|
toMs
|
|
4143
2540
|
}) : Promise.resolve([]),
|
|
4144
|
-
fearGreedEnabled ? (0,
|
|
2541
|
+
fearGreedEnabled ? (0, import_marketContext2.getMarketContextBackfillCoverage)({
|
|
4145
2542
|
source: SOURCE_FEAR_GREED,
|
|
4146
2543
|
scopes: [COVERAGE_SCOPE_ALL],
|
|
4147
2544
|
interval: "1d",
|
|
4148
2545
|
fromMs,
|
|
4149
2546
|
toMs
|
|
4150
2547
|
}) : Promise.resolve([]),
|
|
4151
|
-
(0,
|
|
2548
|
+
(0, import_marketContext2.getMarketContextBackfillCoverage)({
|
|
4152
2549
|
source: SOURCE_INDEX,
|
|
4153
2550
|
scopes: CMC_INDEXES.map((index) => index.slug),
|
|
4154
2551
|
interval: "1d",
|
|
@@ -4339,7 +2736,7 @@ var backfillCoinMarketCapContext = async (params) => {
|
|
|
4339
2736
|
}
|
|
4340
2737
|
});
|
|
4341
2738
|
const rows = coinMarketCapGlobalPayloadToRows(payload, SOURCE_GLOBAL_DAILY);
|
|
4342
|
-
await (0,
|
|
2739
|
+
await (0, import_marketContext2.upsertMarketGlobalContextRows)(rows);
|
|
4343
2740
|
await markBackfillCoverage([
|
|
4344
2741
|
{
|
|
4345
2742
|
source: SOURCE_GLOBAL_DAILY,
|
|
@@ -4373,7 +2770,7 @@ var backfillCoinMarketCapContext = async (params) => {
|
|
|
4373
2770
|
}
|
|
4374
2771
|
});
|
|
4375
2772
|
const rows = coinMarketCapHistoricalQuotesPayloadToRows(payload, "1d");
|
|
4376
|
-
await (0,
|
|
2773
|
+
await (0, import_marketContext2.upsertMarketReferenceAssetContextRows)(rows);
|
|
4377
2774
|
await markBackfillCoverage(
|
|
4378
2775
|
REFERENCE_ASSETS.map((asset) => ({
|
|
4379
2776
|
source: SOURCE_REFERENCE,
|
|
@@ -4412,7 +2809,7 @@ var backfillCoinMarketCapContext = async (params) => {
|
|
|
4412
2809
|
payload,
|
|
4413
2810
|
"1d"
|
|
4414
2811
|
);
|
|
4415
|
-
await (0,
|
|
2812
|
+
await (0, import_marketContext2.upsertMarketCmcExchangeLiquidityContextRows)(rows);
|
|
4416
2813
|
await markBackfillCoverage([
|
|
4417
2814
|
{
|
|
4418
2815
|
source: SOURCE_EXCHANGE_LIQUIDITY,
|
|
@@ -4457,7 +2854,7 @@ var backfillCoinMarketCapContext = async (params) => {
|
|
|
4457
2854
|
const oldestPageTs = Math.min(...pageRows.map((row) => row.ts.getTime()));
|
|
4458
2855
|
if (oldestPageTs < fromMs || pageRows.length < pageSize) break;
|
|
4459
2856
|
}
|
|
4460
|
-
await (0,
|
|
2857
|
+
await (0, import_marketContext2.upsertMarketCmcFearGreedContextRows)(rows);
|
|
4461
2858
|
await markBackfillCoverage([
|
|
4462
2859
|
{
|
|
4463
2860
|
source: SOURCE_FEAR_GREED,
|
|
@@ -4491,7 +2888,7 @@ var backfillCoinMarketCapContext = async (params) => {
|
|
|
4491
2888
|
}))
|
|
4492
2889
|
);
|
|
4493
2890
|
const rows = rowsByIndex.flatMap((item) => item.result.rows);
|
|
4494
|
-
await (0,
|
|
2891
|
+
await (0, import_marketContext2.upsertMarketCmcIndexContextRows)(rows);
|
|
4495
2892
|
await markBackfillCoverage(
|
|
4496
2893
|
rowsByIndex.map(({ index, result }) => ({
|
|
4497
2894
|
source: SOURCE_INDEX,
|
|
@@ -4543,7 +2940,7 @@ var backfillCoinMarketCapContextForSignals = (params) => backfillCoinMarketCapCo
|
|
|
4543
2940
|
|
|
4544
2941
|
// src/lib/hyperliquidWhaleBackfill.ts
|
|
4545
2942
|
var import_progress3 = __toESM(require("progress"));
|
|
4546
|
-
var
|
|
2943
|
+
var import_hyperliquidWhales = require("@tradejs/infra/timescale/hyperliquidWhales");
|
|
4547
2944
|
var import_strategies2 = require("@tradejs/node/strategies");
|
|
4548
2945
|
|
|
4549
2946
|
// src/lib/hyperliquidWhaleData.ts
|
|
@@ -4798,7 +3195,7 @@ var backfillHyperliquidWhaleContext = async (params) => {
|
|
|
4798
3195
|
};
|
|
4799
3196
|
const fromMs = Math.floor(params.startMs / HYPERLIQUID_WHALE_BUCKET_MS) * HYPERLIQUID_WHALE_BUCKET_MS;
|
|
4800
3197
|
const toMs = minuteCeil(params.endMs);
|
|
4801
|
-
const cached = await (0,
|
|
3198
|
+
const cached = await (0, import_hyperliquidWhales.hasHyperliquidWhaleBackfillCoverage)({
|
|
4802
3199
|
fromMs,
|
|
4803
3200
|
toMs,
|
|
4804
3201
|
...identity
|
|
@@ -4847,7 +3244,7 @@ var backfillHyperliquidWhaleContext = async (params) => {
|
|
|
4847
3244
|
items: whales.addresses,
|
|
4848
3245
|
concurrency,
|
|
4849
3246
|
worker: async (address) => {
|
|
4850
|
-
const previous = await (0,
|
|
3247
|
+
const previous = await (0, import_hyperliquidWhales.getHyperliquidWhaleWalletCoverage)({
|
|
4851
3248
|
address,
|
|
4852
3249
|
fromMs,
|
|
4853
3250
|
toMs,
|
|
@@ -4874,8 +3271,8 @@ var backfillHyperliquidWhaleContext = async (params) => {
|
|
|
4874
3271
|
identity
|
|
4875
3272
|
})
|
|
4876
3273
|
).filter((row) => row != null);
|
|
4877
|
-
await (0,
|
|
4878
|
-
await (0,
|
|
3274
|
+
await (0, import_hyperliquidWhales.upsertHyperliquidWhaleTradeEvents)(addressEvents);
|
|
3275
|
+
await (0, import_hyperliquidWhales.upsertHyperliquidWhaleWalletCoverage)({
|
|
4879
3276
|
address,
|
|
4880
3277
|
fromMs,
|
|
4881
3278
|
toMs,
|
|
@@ -4893,7 +3290,7 @@ var backfillHyperliquidWhaleContext = async (params) => {
|
|
|
4893
3290
|
const normalizedError = error instanceof Error ? error : new Error(String(error));
|
|
4894
3291
|
failures.push(normalizedError);
|
|
4895
3292
|
failedWallets += 1;
|
|
4896
|
-
await (0,
|
|
3293
|
+
await (0, import_hyperliquidWhales.upsertHyperliquidWhaleWalletCoverage)({
|
|
4897
3294
|
address,
|
|
4898
3295
|
fromMs,
|
|
4899
3296
|
toMs,
|
|
@@ -4912,7 +3309,7 @@ var backfillHyperliquidWhaleContext = async (params) => {
|
|
|
4912
3309
|
);
|
|
4913
3310
|
}
|
|
4914
3311
|
});
|
|
4915
|
-
const buckets = await (0,
|
|
3312
|
+
const buckets = await (0, import_hyperliquidWhales.rebuildHyperliquidWhaleFlowRows)({
|
|
4916
3313
|
fromMs,
|
|
4917
3314
|
toMs,
|
|
4918
3315
|
...identity
|
|
@@ -4928,7 +3325,7 @@ var backfillHyperliquidWhaleContext = async (params) => {
|
|
|
4928
3325
|
}
|
|
4929
3326
|
);
|
|
4930
3327
|
let displayedCoverageBuckets = 0;
|
|
4931
|
-
const coverageBuckets = await (0,
|
|
3328
|
+
const coverageBuckets = await (0, import_hyperliquidWhales.rebuildHyperliquidWhaleCoverageRows)({
|
|
4932
3329
|
fromMs,
|
|
4933
3330
|
toMs,
|
|
4934
3331
|
expectedWhales: whales.addresses.length,
|
|
@@ -5134,7 +3531,7 @@ var prepareMarketContextForRun = async (params) => {
|
|
|
5134
3531
|
if (readableSources.length) {
|
|
5135
3532
|
await timeOperation3(
|
|
5136
3533
|
"market context schema ensure",
|
|
5137
|
-
() => (0,
|
|
3534
|
+
() => (0, import_marketContext3.ensureMarketContextSchemas)(readableSources)
|
|
5138
3535
|
);
|
|
5139
3536
|
}
|
|
5140
3537
|
if (requirements.derivatives.backfill) {
|
|
@@ -5215,20 +3612,20 @@ var resolveTimeWindow = ({
|
|
|
5215
3612
|
const explicitStart = toEpochMs(startTime);
|
|
5216
3613
|
const explicitEnd = toEpochMs(endTime);
|
|
5217
3614
|
const resolvedDays = toPositiveNumber(days);
|
|
5218
|
-
const alignToLastClosedInterval = (
|
|
3615
|
+
const alignToLastClosedInterval = (window, preserveDuration) => {
|
|
5219
3616
|
if (typeof closedIntervalMs !== "number" || !Number.isFinite(closedIntervalMs) || closedIntervalMs <= 0) {
|
|
5220
|
-
return
|
|
3617
|
+
return window;
|
|
5221
3618
|
}
|
|
5222
|
-
const alignedEnd = Math.floor(
|
|
5223
|
-
const delta =
|
|
5224
|
-
const alignedStart = preserveDuration ?
|
|
3619
|
+
const alignedEnd = Math.floor(window.end / closedIntervalMs) * closedIntervalMs - 1;
|
|
3620
|
+
const delta = window.end - alignedEnd;
|
|
3621
|
+
const alignedStart = preserveDuration ? window.start - delta : window.start;
|
|
5225
3622
|
if (alignedStart >= alignedEnd) {
|
|
5226
3623
|
throw new Error(
|
|
5227
3624
|
`Invalid closed-candle window: start (${alignedStart}) must be less than end (${alignedEnd})`
|
|
5228
3625
|
);
|
|
5229
3626
|
}
|
|
5230
3627
|
return {
|
|
5231
|
-
...
|
|
3628
|
+
...window,
|
|
5232
3629
|
start: Math.trunc(alignedStart),
|
|
5233
3630
|
end: Math.trunc(alignedEnd)
|
|
5234
3631
|
};
|
|
@@ -5289,57 +3686,11 @@ var import_chalk5 = __toESM(require("chalk"));
|
|
|
5289
3686
|
// src/lib/runtimeRedis.ts
|
|
5290
3687
|
var import_redis = require("@tradejs/infra/redis");
|
|
5291
3688
|
var import_time = require("@tradejs/core/time");
|
|
5292
|
-
var
|
|
5293
|
-
var RESERVED_CONFIG_IDS = /* @__PURE__ */ new Set(["results"]);
|
|
5294
|
-
var resolveStrategyConfigIdentityByKey = (userName2, key) => {
|
|
5295
|
-
const parts = key.split(":");
|
|
5296
|
-
if (parts.length !== 5) return null;
|
|
5297
|
-
const [users, keyUserName, strategiesKey, strategyName, configId] = parts;
|
|
5298
|
-
if (users !== "users" || keyUserName !== userName2 || strategiesKey !== "strategies" || !strategyName || !configId || RESERVED_STRATEGY_NAMES.has(strategyName) || RESERVED_CONFIG_IDS.has(configId) || !/^[a-zA-Z0-9_-]+$/.test(configId)) {
|
|
5299
|
-
return null;
|
|
5300
|
-
}
|
|
5301
|
-
return { strategyName, configId };
|
|
5302
|
-
};
|
|
3689
|
+
var import_runtimeStrategyConfigs = require("@tradejs/infra/runtimeStrategyConfigs");
|
|
5303
3690
|
var isRuntimeStrategyEnabled = (strategyConfig) => {
|
|
5304
3691
|
const enabled = strategyConfig.ENABLE;
|
|
5305
3692
|
return enabled !== false;
|
|
5306
3693
|
};
|
|
5307
|
-
var resolveStrategyNameByConfigKey = (userName2, key) => {
|
|
5308
|
-
return resolveStrategyConfigIdentityByKey(userName2, key)?.strategyName ?? null;
|
|
5309
|
-
};
|
|
5310
|
-
var getRuntimeStrategyConfigKeys = async (userName2) => {
|
|
5311
|
-
const keys = await (0, import_redis.getKeys)(`${import_redis.redisKeys.strategies(userName2)}:`);
|
|
5312
|
-
return keys.filter((key) => resolveStrategyConfigIdentityByKey(userName2, key)).sort((left, right) => left.localeCompare(right));
|
|
5313
|
-
};
|
|
5314
|
-
var loadRuntimeStrategyConfigs = async (userName2, {
|
|
5315
|
-
onInvalidConfig
|
|
5316
|
-
} = {}) => {
|
|
5317
|
-
const configKeys = await getRuntimeStrategyConfigKeys(userName2);
|
|
5318
|
-
const strategyConfigs = await Promise.all(
|
|
5319
|
-
configKeys.map(async (key) => {
|
|
5320
|
-
const strategyName = resolveStrategyNameByConfigKey(userName2, key);
|
|
5321
|
-
const identity = resolveStrategyConfigIdentityByKey(userName2, key);
|
|
5322
|
-
if (!strategyName || !identity) {
|
|
5323
|
-
return null;
|
|
5324
|
-
}
|
|
5325
|
-
const strategyConfig = await (0, import_redis.getData)(
|
|
5326
|
-
key,
|
|
5327
|
-
null
|
|
5328
|
-
);
|
|
5329
|
-
if (!strategyConfig || typeof strategyConfig !== "object" || Array.isArray(strategyConfig)) {
|
|
5330
|
-
onInvalidConfig?.(key);
|
|
5331
|
-
return null;
|
|
5332
|
-
}
|
|
5333
|
-
return {
|
|
5334
|
-
key,
|
|
5335
|
-
strategyName,
|
|
5336
|
-
configId: identity.configId,
|
|
5337
|
-
strategyConfig
|
|
5338
|
-
};
|
|
5339
|
-
})
|
|
5340
|
-
);
|
|
5341
|
-
return strategyConfigs.filter(Boolean);
|
|
5342
|
-
};
|
|
5343
3694
|
|
|
5344
3695
|
// src/lib/runtimeStrategyBacktest.ts
|
|
5345
3696
|
var BACKTEST_CLI_RUNTIME_CONFIG_KEYS = /* @__PURE__ */ new Set([
|
|
@@ -5354,7 +3705,7 @@ var toStrategyConfigGrid = (strategyConfig) => Object.fromEntries(
|
|
|
5354
3705
|
Object.entries(strategyConfig).filter(([key]) => !BACKTEST_CLI_RUNTIME_CONFIG_KEYS.has(key)).map(([key, value]) => [key, [value]])
|
|
5355
3706
|
);
|
|
5356
3707
|
var loadRuntimeStrategyBacktestConfigs = async (userName2) => {
|
|
5357
|
-
const configs = await loadRuntimeStrategyConfigs(userName2, {
|
|
3708
|
+
const configs = await (0, import_runtimeStrategyConfigs.loadRuntimeStrategyConfigs)(userName2, {
|
|
5358
3709
|
onInvalidConfig: (key) => {
|
|
5359
3710
|
console.log(import_chalk5.default.yellow(`Skip invalid runtime strategy config: ${key}`));
|
|
5360
3711
|
}
|
|
@@ -5725,7 +4076,7 @@ var prepareRunEnvironment = async ({
|
|
|
5725
4076
|
instrument
|
|
5726
4077
|
])
|
|
5727
4078
|
);
|
|
5728
|
-
const
|
|
4079
|
+
const window = resolveTimeWindow({
|
|
5729
4080
|
days,
|
|
5730
4081
|
startTime,
|
|
5731
4082
|
endTime,
|
|
@@ -5734,7 +4085,7 @@ var prepareRunEnvironment = async ({
|
|
|
5734
4085
|
closedIntervalMs
|
|
5735
4086
|
});
|
|
5736
4087
|
const preloadStart = (0, import_time2.getBacktestPreloadStart)(
|
|
5737
|
-
|
|
4088
|
+
window.start,
|
|
5738
4089
|
import_constants2.BACKTEST_PRELOAD_DAYS
|
|
5739
4090
|
);
|
|
5740
4091
|
if (!cacheOnly) {
|
|
@@ -5754,7 +4105,7 @@ var prepareRunEnvironment = async ({
|
|
|
5754
4105
|
interval: interval2,
|
|
5755
4106
|
symbols: loadedTickers,
|
|
5756
4107
|
preloadStart,
|
|
5757
|
-
preloadEnd:
|
|
4108
|
+
preloadEnd: window.end,
|
|
5758
4109
|
universe,
|
|
5759
4110
|
log: (message) => console.log(import_chalk7.default.gray(message))
|
|
5760
4111
|
});
|
|
@@ -5770,7 +4121,7 @@ var prepareRunEnvironment = async ({
|
|
|
5770
4121
|
{
|
|
5771
4122
|
connectorLabel: connectorName,
|
|
5772
4123
|
preloadStart,
|
|
5773
|
-
preloadEnd:
|
|
4124
|
+
preloadEnd: window.end,
|
|
5774
4125
|
skipCovered: true
|
|
5775
4126
|
}
|
|
5776
4127
|
)
|
|
@@ -5782,7 +4133,7 @@ var prepareRunEnvironment = async ({
|
|
|
5782
4133
|
marketConnector,
|
|
5783
4134
|
tickers: loadedTickers,
|
|
5784
4135
|
instrumentsBySymbol,
|
|
5785
|
-
window
|
|
4136
|
+
window,
|
|
5786
4137
|
preloadStart,
|
|
5787
4138
|
universe,
|
|
5788
4139
|
accountId,
|
|
@@ -5911,6 +4262,11 @@ import_args.default.option(
|
|
|
5911
4262
|
"Skip per-test artifact persistence and keep only in-memory summary/AI-ML dataset output",
|
|
5912
4263
|
false
|
|
5913
4264
|
);
|
|
4265
|
+
import_args.default.option(
|
|
4266
|
+
"researchTrace",
|
|
4267
|
+
"Write compact setup/entry/exit/skip research trace JSONL",
|
|
4268
|
+
false
|
|
4269
|
+
);
|
|
5914
4270
|
import_args.default.option(
|
|
5915
4271
|
["K", "continue"],
|
|
5916
4272
|
"Continue latest compatible interrupted backtest run",
|
|
@@ -6006,6 +4362,7 @@ var buildBacktestTestKey = (test) => hashValue({
|
|
|
6006
4362
|
connectorName: test.connectorName,
|
|
6007
4363
|
interval: String(test.interval ?? ""),
|
|
6008
4364
|
ml: Boolean(test.ml),
|
|
4365
|
+
researchTrace: Boolean(test.researchTrace),
|
|
6009
4366
|
options: test.options,
|
|
6010
4367
|
strategyConfig: test.strategyConfig,
|
|
6011
4368
|
strategyName: test.strategyName,
|
|
@@ -6266,11 +4623,11 @@ var setPersistedTestSummary = (key, item) => {
|
|
|
6266
4623
|
var setRuntimeCompareContext = ({
|
|
6267
4624
|
connector,
|
|
6268
4625
|
connectorName,
|
|
6269
|
-
window
|
|
4626
|
+
window
|
|
6270
4627
|
}) => {
|
|
6271
4628
|
runtimeCompareConnector = connector;
|
|
6272
4629
|
runtimeCompareConnectorName = connectorName;
|
|
6273
|
-
runtimeCompareWindow =
|
|
4630
|
+
runtimeCompareWindow = window;
|
|
6274
4631
|
};
|
|
6275
4632
|
var resetRunState = () => {
|
|
6276
4633
|
successTests = 0;
|
|
@@ -6674,7 +5031,7 @@ var validateBacktestRuntimeDeployment = ({
|
|
|
6674
5031
|
};
|
|
6675
5032
|
var prepareRunEnvironment2 = async () => {
|
|
6676
5033
|
const deployment = validateBacktestRuntimeDeployment({
|
|
6677
|
-
deployment: flags.deployment ? await (0,
|
|
5034
|
+
deployment: flags.deployment ? await (0, import_runtimeDeployments.getRuntimeDeployment)(userName, String(flags.deployment)) : null,
|
|
6678
5035
|
deploymentId: typeof flags.deployment === "string" ? flags.deployment : void 0,
|
|
6679
5036
|
requestedInterval: interval
|
|
6680
5037
|
});
|
|
@@ -6712,7 +5069,7 @@ var prepareRunEnvironment2 = async () => {
|
|
|
6712
5069
|
};
|
|
6713
5070
|
var buildPreparedTestSuite = async ({
|
|
6714
5071
|
testSuite,
|
|
6715
|
-
window
|
|
5072
|
+
window,
|
|
6716
5073
|
preloadStart,
|
|
6717
5074
|
isReplay
|
|
6718
5075
|
}) => {
|
|
@@ -6737,11 +5094,12 @@ var buildPreparedTestSuite = async ({
|
|
|
6737
5094
|
...flags.cacheOnly ? { EXECUTION_COSTS_CACHE_ONLY: true } : {}
|
|
6738
5095
|
},
|
|
6739
5096
|
options: {
|
|
6740
|
-
start:
|
|
6741
|
-
end:
|
|
5097
|
+
start: window.start,
|
|
5098
|
+
end: window.end
|
|
6742
5099
|
},
|
|
6743
5100
|
ml: mlEnabled,
|
|
6744
5101
|
ai: aiEnabled,
|
|
5102
|
+
researchTrace: Boolean(flags.researchTrace),
|
|
6745
5103
|
fast: isFastMode,
|
|
6746
5104
|
timeoutMs: testItemTimeoutMs
|
|
6747
5105
|
})).slice(
|
|
@@ -6760,8 +5118,8 @@ var buildPreparedTestSuite = async ({
|
|
|
6760
5118
|
symbols: preparedSuite.map((test) => test.symbol),
|
|
6761
5119
|
universe: preparedSuite[0]?.universe,
|
|
6762
5120
|
interval,
|
|
6763
|
-
startMs:
|
|
6764
|
-
endMs:
|
|
5121
|
+
startMs: window.start,
|
|
5122
|
+
endMs: window.end,
|
|
6765
5123
|
preloadStartMs: preloadStart,
|
|
6766
5124
|
cacheOnly: Boolean(flags.cacheOnly),
|
|
6767
5125
|
aiEnabled,
|
|
@@ -6782,7 +5140,7 @@ var trackTopResult = (result) => {
|
|
|
6782
5140
|
};
|
|
6783
5141
|
var buildRunIntroLines = ({
|
|
6784
5142
|
testSuite,
|
|
6785
|
-
window
|
|
5143
|
+
window,
|
|
6786
5144
|
preloadStart,
|
|
6787
5145
|
replayModeLabel
|
|
6788
5146
|
}) => {
|
|
@@ -6795,12 +5153,12 @@ var buildRunIntroLines = ({
|
|
|
6795
5153
|
);
|
|
6796
5154
|
lines.push(
|
|
6797
5155
|
import_chalk9.default.gray(
|
|
6798
|
-
`window: ${(0, import_time3.formatUnix)(
|
|
5156
|
+
`window: ${(0, import_time3.formatUnix)(window.start)} -> ${(0, import_time3.formatUnix)(window.end)} (${formatWindowDays(window.start, window.end)}d, ${window.source})`
|
|
6799
5157
|
)
|
|
6800
5158
|
);
|
|
6801
5159
|
lines.push(
|
|
6802
5160
|
import_chalk9.default.gray(
|
|
6803
|
-
`preload: ${(0, import_time3.formatUnix)(preloadStart)} -> ${(0, import_time3.formatUnix)(
|
|
5161
|
+
`preload: ${(0, import_time3.formatUnix)(preloadStart)} -> ${(0, import_time3.formatUnix)(window.end)} (${import_constants5.BACKTEST_PRELOAD_DAYS}d preload)`
|
|
6804
5162
|
)
|
|
6805
5163
|
);
|
|
6806
5164
|
return lines;
|
|
@@ -6828,7 +5186,7 @@ var resolveTesterWorker = () => {
|
|
|
6828
5186
|
};
|
|
6829
5187
|
var executeTestSuite = async ({
|
|
6830
5188
|
testSuite,
|
|
6831
|
-
window
|
|
5189
|
+
window,
|
|
6832
5190
|
preloadStart,
|
|
6833
5191
|
replayModeLabel,
|
|
6834
5192
|
onResult,
|
|
@@ -6853,7 +5211,7 @@ var executeTestSuite = async ({
|
|
|
6853
5211
|
testerNeedsTsRuntime,
|
|
6854
5212
|
introLines: buildRunIntroLines({
|
|
6855
5213
|
testSuite: executableTestSuite,
|
|
6856
|
-
window
|
|
5214
|
+
window,
|
|
6857
5215
|
preloadStart,
|
|
6858
5216
|
replayModeLabel
|
|
6859
5217
|
}),
|
|
@@ -6925,6 +5283,7 @@ var toPersistedBacktestResultEntry = (result) => ({
|
|
|
6925
5283
|
orderLogId: result.orderLogId,
|
|
6926
5284
|
stat: result.stat,
|
|
6927
5285
|
executionCostModel: result.executionCostModel,
|
|
5286
|
+
researchTraceSummary: result.researchTraceSummary,
|
|
6928
5287
|
test: {
|
|
6929
5288
|
userName: result.test.userName,
|
|
6930
5289
|
name: result.test.name,
|
|
@@ -7395,7 +5754,8 @@ var backtest = async () => {
|
|
|
7395
5754
|
backtestPriceMode,
|
|
7396
5755
|
cacheOnly: Boolean(flags.cacheOnly),
|
|
7397
5756
|
fast: Boolean(flags.fast),
|
|
7398
|
-
ml: Boolean(flags.ml)
|
|
5757
|
+
ml: Boolean(flags.ml),
|
|
5758
|
+
researchTrace: Boolean(flags.researchTrace)
|
|
7399
5759
|
},
|
|
7400
5760
|
marketContextPreparedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
7401
5761
|
testSuite
|