@tradejs/cli 2.0.18 → 2.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/cli.js +12810 -19565
  2. package/dist/lib/aiExport.js +1 -1607
  3. package/dist/lib/binanceMarketContextBackfill.js +7 -6
  4. package/dist/lib/coinMarketCapContextBackfill.js +19 -18
  5. package/dist/lib/derivativesContextBackfill.js +10 -9
  6. package/dist/lib/hyperliquidWhaleBackfill.js +8 -8
  7. package/dist/lib/hyperliquidWhaleStream.js +4 -4
  8. package/dist/lib/marketContextPrepare.js +83 -1686
  9. package/dist/lib/runEnvironment.js +14 -1666
  10. package/dist/lib/runFormatting.js +1 -1607
  11. package/dist/lib/runtimeDebugEvidence.js +2 -48
  12. package/dist/lib/runtimeRedis.js +6 -57
  13. package/dist/lib/runtimeStrategyBacktest.js +2 -48
  14. package/dist/scripts/aiExport.js +1 -1607
  15. package/dist/scripts/aiPocketSearch.js +1 -1607
  16. package/dist/scripts/aiTrain.js +17 -1623
  17. package/dist/scripts/backtest.js +110 -1759
  18. package/dist/scripts/binanceMarketIngest.js +5 -4
  19. package/dist/scripts/candlesMigrateProvider.js +6 -5186
  20. package/dist/scripts/cleanupMarketContext.js +4 -3
  21. package/dist/scripts/continuity.js +4 -3
  22. package/dist/scripts/derivativesIngest.js +6 -4
  23. package/dist/scripts/derivativesIngestCoinalyzeAll.js +5 -4
  24. package/dist/scripts/doctor.js +2 -5184
  25. package/dist/scripts/hyperliquidWhaleBackfill.js +8 -8
  26. package/dist/scripts/hyperliquidWhaleIngest.js +4 -4
  27. package/dist/scripts/hyperliquidWhalesUpdate.js +1 -1
  28. package/dist/scripts/migration.js +3 -3
  29. package/dist/scripts/mlExport.js +1 -1607
  30. package/dist/scripts/replay.js +133 -1782
  31. package/dist/scripts/replayRunner.js +133 -1782
  32. package/dist/scripts/replayRuntimeEvidence.js +2 -48
  33. package/dist/scripts/researchAuto.js +3 -49
  34. package/dist/scripts/results.js +1 -1607
  35. package/dist/scripts/runtimeEvidence.js +2 -48
  36. package/dist/scripts/runtimeParity.js +121 -1746
  37. package/dist/scripts/signals.js +1057 -2647
  38. package/dist/scripts/signalsDaemon.js +1051 -2608
  39. package/dist/scripts/signalsSummary.js +4 -26
  40. package/dist/workers/testerWorker.js +2 -2
  41. package/package.json +11 -9
@@ -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 os = 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 = os.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/replayRunner.ts
1637
31
  var replayRunner_exports = {};
1638
32
  __export(replayRunner_exports, {
@@ -1652,7 +46,7 @@ var import_redis6 = require("@tradejs/infra/redis");
1652
46
 
1653
47
  // src/lib/runFormatting.ts
1654
48
  var import_date_fns = require("date-fns");
1655
- var ListIt = require_list_it();
49
+ var ListIt = require("list-it");
1656
50
  var createListIt = () => new ListIt({
1657
51
  autoAlign: true,
1658
52
  headerUnderline: true
@@ -1716,20 +110,20 @@ var resolveTimeWindow = ({
1716
110
  const explicitStart = toEpochMs(startTime);
1717
111
  const explicitEnd = toEpochMs(endTime);
1718
112
  const resolvedDays = toPositiveNumber(days);
1719
- const alignToLastClosedInterval = (window2, preserveDuration) => {
113
+ const alignToLastClosedInterval = (window, preserveDuration) => {
1720
114
  if (typeof closedIntervalMs !== "number" || !Number.isFinite(closedIntervalMs) || closedIntervalMs <= 0) {
1721
- return window2;
115
+ return window;
1722
116
  }
1723
- const alignedEnd = Math.floor(window2.end / closedIntervalMs) * closedIntervalMs - 1;
1724
- const delta = window2.end - alignedEnd;
1725
- const alignedStart = preserveDuration ? window2.start - delta : window2.start;
117
+ const alignedEnd = Math.floor(window.end / closedIntervalMs) * closedIntervalMs - 1;
118
+ const delta = window.end - alignedEnd;
119
+ const alignedStart = preserveDuration ? window.start - delta : window.start;
1726
120
  if (alignedStart >= alignedEnd) {
1727
121
  throw new Error(
1728
122
  `Invalid closed-candle window: start (${alignedStart}) must be less than end (${alignedEnd})`
1729
123
  );
1730
124
  }
1731
125
  return {
1732
- ...window2,
126
+ ...window,
1733
127
  start: Math.trunc(alignedStart),
1734
128
  end: Math.trunc(alignedEnd)
1735
129
  };
@@ -1790,17 +184,7 @@ var import_chalk = __toESM(require("chalk"));
1790
184
  // src/lib/runtimeRedis.ts
1791
185
  var import_redis = require("@tradejs/infra/redis");
1792
186
  var import_time = require("@tradejs/core/time");
1793
- var RESERVED_STRATEGY_NAMES = /* @__PURE__ */ new Set(["charts"]);
1794
- var RESERVED_CONFIG_IDS = /* @__PURE__ */ new Set(["results"]);
1795
- var resolveStrategyConfigIdentityByKey = (userName, key) => {
1796
- const parts = key.split(":");
1797
- if (parts.length !== 5) return null;
1798
- const [users, keyUserName, strategiesKey, strategyName, configId] = parts;
1799
- if (users !== "users" || keyUserName !== userName || strategiesKey !== "strategies" || !strategyName || !configId || RESERVED_STRATEGY_NAMES.has(strategyName) || RESERVED_CONFIG_IDS.has(configId) || !/^[a-zA-Z0-9_-]+$/.test(configId)) {
1800
- return null;
1801
- }
1802
- return { strategyName, configId };
1803
- };
187
+ var import_runtimeStrategyConfigs = require("@tradejs/infra/runtimeStrategyConfigs");
1804
188
  var isRuntimeStrategyEnabled = (strategyConfig) => {
1805
189
  const enabled = strategyConfig.ENABLE;
1806
190
  return enabled !== false;
@@ -1812,42 +196,6 @@ var isRuntimeTradeRecord = (value) => {
1812
196
  const record = value;
1813
197
  return typeof record.orderId === "string" && typeof record.strategy === "string" && typeof record.symbol === "string" && typeof record.entryTimestamp === "number" && typeof record.entryPrice === "number" && typeof record.qty === "number" && (record.direction === "LONG" || record.direction === "SHORT");
1814
198
  };
1815
- var resolveStrategyNameByConfigKey = (userName, key) => {
1816
- return resolveStrategyConfigIdentityByKey(userName, key)?.strategyName ?? null;
1817
- };
1818
- var getRuntimeStrategyConfigKeys = async (userName) => {
1819
- const keys = await (0, import_redis.getKeys)(`${import_redis.redisKeys.strategies(userName)}:`);
1820
- return keys.filter((key) => resolveStrategyConfigIdentityByKey(userName, key)).sort((left, right) => left.localeCompare(right));
1821
- };
1822
- var loadRuntimeStrategyConfigs = async (userName, {
1823
- onInvalidConfig
1824
- } = {}) => {
1825
- const configKeys = await getRuntimeStrategyConfigKeys(userName);
1826
- const strategyConfigs = await Promise.all(
1827
- configKeys.map(async (key) => {
1828
- const strategyName = resolveStrategyNameByConfigKey(userName, key);
1829
- const identity = resolveStrategyConfigIdentityByKey(userName, key);
1830
- if (!strategyName || !identity) {
1831
- return null;
1832
- }
1833
- const strategyConfig = await (0, import_redis.getData)(
1834
- key,
1835
- null
1836
- );
1837
- if (!strategyConfig || typeof strategyConfig !== "object" || Array.isArray(strategyConfig)) {
1838
- onInvalidConfig?.(key);
1839
- return null;
1840
- }
1841
- return {
1842
- key,
1843
- strategyName,
1844
- configId: identity.configId,
1845
- strategyConfig
1846
- };
1847
- })
1848
- );
1849
- return strategyConfigs.filter(Boolean);
1850
- };
1851
199
  var loadRuntimeTrades = async (userName, {
1852
200
  startTime,
1853
201
  endTime
@@ -1897,7 +245,7 @@ var toStrategyConfigGrid = (strategyConfig) => Object.fromEntries(
1897
245
  Object.entries(strategyConfig).filter(([key]) => !BACKTEST_CLI_RUNTIME_CONFIG_KEYS.has(key)).map(([key, value]) => [key, [value]])
1898
246
  );
1899
247
  var loadRuntimeStrategyBacktestConfigs = async (userName) => {
1900
- const configs = await loadRuntimeStrategyConfigs(userName, {
248
+ const configs = await (0, import_runtimeStrategyConfigs.loadRuntimeStrategyConfigs)(userName, {
1901
249
  onInvalidConfig: (key) => {
1902
250
  console.log(import_chalk.default.yellow(`Skip invalid runtime strategy config: ${key}`));
1903
251
  }
@@ -2280,7 +628,7 @@ var prepareRunEnvironment = async ({
2280
628
  instrument
2281
629
  ])
2282
630
  );
2283
- const window2 = resolveTimeWindow({
631
+ const window = resolveTimeWindow({
2284
632
  days,
2285
633
  startTime,
2286
634
  endTime,
@@ -2289,7 +637,7 @@ var prepareRunEnvironment = async ({
2289
637
  closedIntervalMs
2290
638
  });
2291
639
  const preloadStart = (0, import_time2.getBacktestPreloadStart)(
2292
- window2.start,
640
+ window.start,
2293
641
  import_constants.BACKTEST_PRELOAD_DAYS
2294
642
  );
2295
643
  if (!cacheOnly) {
@@ -2309,7 +657,7 @@ var prepareRunEnvironment = async ({
2309
657
  interval,
2310
658
  symbols: loadedTickers,
2311
659
  preloadStart,
2312
- preloadEnd: window2.end,
660
+ preloadEnd: window.end,
2313
661
  universe,
2314
662
  log: (message) => console.log(import_chalk3.default.gray(message))
2315
663
  });
@@ -2325,7 +673,7 @@ var prepareRunEnvironment = async ({
2325
673
  {
2326
674
  connectorLabel: connectorName,
2327
675
  preloadStart,
2328
- preloadEnd: window2.end,
676
+ preloadEnd: window.end,
2329
677
  skipCovered: true
2330
678
  }
2331
679
  )
@@ -2337,7 +685,7 @@ var prepareRunEnvironment = async ({
2337
685
  marketConnector,
2338
686
  tickers: loadedTickers,
2339
687
  instrumentsBySymbol,
2340
- window: window2,
688
+ window,
2341
689
  preloadStart,
2342
690
  universe,
2343
691
  accountId,
@@ -2349,7 +697,7 @@ var prepareRunEnvironment = async ({
2349
697
 
2350
698
  // src/lib/marketContextPrepare.ts
2351
699
  var import_chalk7 = __toESM(require("chalk"));
2352
- var import_timescale5 = require("@tradejs/infra/timescale");
700
+ var import_marketContext3 = require("@tradejs/infra/timescale/marketContext");
2353
701
  var import_registry = require("@tradejs/node/registry");
2354
702
 
2355
703
  // src/lib/binanceMarketContextBackfill.ts
@@ -2358,7 +706,8 @@ var import_chalk4 = __toESM(require("chalk"));
2358
706
  var import_connectors4 = require("@tradejs/connectors");
2359
707
  var import_connectors5 = require("@tradejs/node/connectors");
2360
708
  var import_strategies = require("@tradejs/node/strategies");
2361
- var import_timescale = require("@tradejs/infra/timescale");
709
+ var import_marketContext = require("@tradejs/infra/timescale/marketContext");
710
+ var import_client = require("@tradejs/infra/timescale/client");
2362
711
 
2363
712
  // src/lib/binanceMarketData.ts
2364
713
  var MARKET_FEATURE_INTERVAL_MS = {
@@ -2866,7 +1215,7 @@ var backfillBinanceMarketContext = async (params, enabled) => {
2866
1215
  if (endMs <= Math.min(breadthStartMs, tradeFlowStartMs)) {
2867
1216
  return skippedBackfillResult();
2868
1217
  }
2869
- await (0, import_timescale.waitForDbReady)();
1218
+ await (0, import_client.waitForDbReady)();
2870
1219
  const connector = await getBinanceConnector({
2871
1220
  projectRoot: params.projectRoot,
2872
1221
  userName: params.userName
@@ -2912,7 +1261,7 @@ var backfillBinanceMarketContext = async (params, enabled) => {
2912
1261
  )
2913
1262
  );
2914
1263
  if (includeTradeFlow && referenceSymbols.length) {
2915
- const coverage = await (0, import_timescale.getMarketTradeFlowCoverage)({
1264
+ const coverage = await (0, import_marketContext.getMarketTradeFlowCoverage)({
2916
1265
  symbols: referenceSymbols,
2917
1266
  interval,
2918
1267
  startMs: tradeFlowStartMs,
@@ -2996,7 +1345,7 @@ var backfillBinanceMarketContext = async (params, enabled) => {
2996
1345
  const ts = row.ts.getTime();
2997
1346
  return ts >= chunk.startMs && ts <= chunk.endMs;
2998
1347
  });
2999
- await (0, import_timescale.upsertMarketTradeFlowRows)(boundedRows);
1348
+ await (0, import_marketContext.upsertMarketTradeFlowRows)(boundedRows);
3000
1349
  tradeFlowRows += boundedRows.length;
3001
1350
  chunkBar?.tick(1, {
3002
1351
  rows: tradeFlowRows,
@@ -3024,7 +1373,7 @@ var backfillBinanceMarketContext = async (params, enabled) => {
3024
1373
  });
3025
1374
  const plans = await Promise.all(
3026
1375
  breadthUniverses.map(async (definition) => {
3027
- const coverage = await (0, import_timescale.getMarketBreadthCoverage)({
1376
+ const coverage = await (0, import_marketContext.getMarketBreadthCoverage)({
3028
1377
  universe: definition.universe,
3029
1378
  interval,
3030
1379
  startMs: breadthStartMs,
@@ -3125,7 +1474,7 @@ var backfillBinanceMarketContext = async (params, enabled) => {
3125
1474
  const ts = row.ts.getTime();
3126
1475
  return ts >= chunk.startMs && ts <= chunk.endMs;
3127
1476
  });
3128
- await (0, import_timescale.upsertMarketBreadthRows)(rows);
1477
+ await (0, import_marketContext.upsertMarketBreadthRows)(rows);
3129
1478
  breadthRows += rows.length;
3130
1479
  }
3131
1480
  }
@@ -3153,7 +1502,8 @@ var import_progress2 = __toESM(require("progress"));
3153
1502
  var import_async = require("@tradejs/core/async");
3154
1503
  var import_constants2 = require("@tradejs/core/constants");
3155
1504
  var import_indicators = require("@tradejs/core/indicators");
3156
- var import_timescale2 = require("@tradejs/infra/timescale");
1505
+ var import_derivatives = require("@tradejs/infra/timescale/derivatives");
1506
+ var import_client2 = require("@tradejs/infra/timescale/client");
3157
1507
  var import_userSettings = require("@tradejs/infra/userSettings");
3158
1508
  var HOUR_MS = 60 * 60 * 1e3;
3159
1509
  var DAY_MS2 = 24 * HOUR_MS;
@@ -3666,13 +2016,13 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
3666
2016
  if (!intervalWindows.length) {
3667
2017
  return skippedBackfillResult2();
3668
2018
  }
3669
- await (0, import_timescale2.waitForDbReady)();
2019
+ await (0, import_client2.waitForDbReady)();
3670
2020
  const edgesByInterval = /* @__PURE__ */ new Map();
3671
2021
  await Promise.all(
3672
2022
  intervalWindows.map(async ({ interval }) => {
3673
2023
  edgesByInterval.set(
3674
2024
  interval,
3675
- await (0, import_timescale2.getDerivativesDataEdgesForSymbols)(symbols, interval)
2025
+ await (0, import_derivatives.getDerivativesDataEdgesForSymbols)(symbols, interval)
3676
2026
  );
3677
2027
  })
3678
2028
  );
@@ -3681,32 +2031,32 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
3681
2031
  const liquidationCoverageRangesByInterval = /* @__PURE__ */ new Map();
3682
2032
  const coverageNowMs = Date.now();
3683
2033
  await Promise.all(
3684
- intervalWindows.map(async (window2) => {
2034
+ intervalWindows.map(async (window) => {
3685
2035
  const confirmedLiquidationWindow = (0, import_indicators.resolveCoinalyzeConfirmedIntradayCoverage)({
3686
- interval: window2.interval,
3687
- fromMs: window2.fromMs,
3688
- toMs: window2.toMs,
2036
+ interval: window.interval,
2037
+ fromMs: window.fromMs,
2038
+ toMs: window.toMs,
3689
2039
  nowMs: coverageNowMs
3690
2040
  });
3691
2041
  const [coverageRows, liquidationCoverageRows] = await Promise.all([
3692
- (0, import_timescale2.getDerivativesBackfillCoverage)({
2042
+ (0, import_derivatives.getDerivativesBackfillCoverage)({
3693
2043
  source: "coinalyze",
3694
2044
  symbols,
3695
- interval: window2.interval,
3696
- fromMs: window2.fromMs,
3697
- toMs: window2.toMs
2045
+ interval: window.interval,
2046
+ fromMs: window.fromMs,
2047
+ toMs: window.toMs
3698
2048
  }),
3699
- confirmedLiquidationWindow ? (0, import_timescale2.getDerivativesMetricCoverage)({
2049
+ confirmedLiquidationWindow ? (0, import_derivatives.getDerivativesMetricCoverage)({
3700
2050
  source: "coinalyze",
3701
2051
  metric: "liquidation",
3702
2052
  symbols,
3703
- interval: window2.interval,
2053
+ interval: window.interval,
3704
2054
  fromMs: confirmedLiquidationWindow.fromMs,
3705
2055
  toMs: confirmedLiquidationWindow.toMs
3706
2056
  }) : Promise.resolve([])
3707
2057
  ]);
3708
2058
  coverageKeysByInterval.set(
3709
- window2.interval,
2059
+ window.interval,
3710
2060
  new Set(
3711
2061
  coverageRows.map(
3712
2062
  (row) => coverageKey({
@@ -3725,7 +2075,7 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
3725
2075
  ranges.push({ fromMs: row.fromMs, toMs: row.toMs });
3726
2076
  rangesBySymbol.set(symbol, ranges);
3727
2077
  }
3728
- coverageRangesByInterval.set(window2.interval, rangesBySymbol);
2078
+ coverageRangesByInterval.set(window.interval, rangesBySymbol);
3729
2079
  const liquidationRangesBySymbol = /* @__PURE__ */ new Map();
3730
2080
  for (const row of liquidationCoverageRows) {
3731
2081
  const symbol = row.symbol.toUpperCase();
@@ -3734,33 +2084,33 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
3734
2084
  liquidationRangesBySymbol.set(symbol, ranges);
3735
2085
  }
3736
2086
  liquidationCoverageRangesByInterval.set(
3737
- window2.interval,
2087
+ window.interval,
3738
2088
  liquidationRangesBySymbol
3739
2089
  );
3740
2090
  })
3741
2091
  );
3742
2092
  const cachedWindows = intervalWindows.reduce(
3743
- (sum, window2) => sum + countBackfillWindows({
3744
- fromMs: window2.fromMs,
3745
- toMs: window2.toMs,
2093
+ (sum, window) => sum + countBackfillWindows({
2094
+ fromMs: window.fromMs,
2095
+ toMs: window.toMs,
3746
2096
  batchMs,
3747
- intervalMs: window2.intervalMs
2097
+ intervalMs: window.intervalMs
3748
2098
  }),
3749
2099
  0
3750
2100
  );
3751
- const allBackfillWindowsCached = mode !== "signals" && intervalWindows.every((window2) => {
3752
- const edgesBySymbol = edgesByInterval.get(window2.interval);
3753
- const coverageKeys = coverageKeysByInterval.get(window2.interval);
2101
+ const allBackfillWindowsCached = mode !== "signals" && intervalWindows.every((window) => {
2102
+ const edgesBySymbol = edgesByInterval.get(window.interval);
2103
+ const coverageKeys = coverageKeysByInterval.get(window.interval);
3754
2104
  const backfillWindows = buildBackfillWindows({
3755
- fromMs: window2.fromMs,
3756
- toMs: window2.toMs,
2105
+ fromMs: window.fromMs,
2106
+ toMs: window.toMs,
3757
2107
  batchMs,
3758
- intervalMs: window2.intervalMs
2108
+ intervalMs: window.intervalMs
3759
2109
  });
3760
2110
  return symbols.every(
3761
2111
  (symbol) => backfillWindows.every((backfillWindow) => {
3762
2112
  const normalizedSymbol = symbol.toUpperCase();
3763
- const coverageRanges = coverageRangesByInterval.get(window2.interval)?.get(normalizedSymbol) ?? [];
2113
+ const coverageRanges = coverageRangesByInterval.get(window.interval)?.get(normalizedSymbol) ?? [];
3764
2114
  const dataCovered = hasDerivativesWindowCoverage({
3765
2115
  edges: edgesBySymbol?.get(normalizedSymbol),
3766
2116
  fromMs: backfillWindow.fromMs,
@@ -3769,26 +2119,26 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
3769
2119
  ranges: coverageRanges,
3770
2120
  fromMs: backfillWindow.fromMs,
3771
2121
  toMs: backfillWindow.toMs,
3772
- intervalMs: window2.intervalMs
2122
+ intervalMs: window.intervalMs
3773
2123
  }) == null || coverageKeys?.has(
3774
2124
  coverageKey({
3775
2125
  symbol: normalizedSymbol,
3776
- interval: window2.interval,
2126
+ interval: window.interval,
3777
2127
  fromMs: backfillWindow.fromMs,
3778
2128
  toMs: backfillWindow.toMs
3779
2129
  })
3780
2130
  );
3781
2131
  const confirmedLiquidationWindow = (0, import_indicators.resolveCoinalyzeConfirmedIntradayCoverage)({
3782
- interval: window2.interval,
2132
+ interval: window.interval,
3783
2133
  fromMs: backfillWindow.fromMs,
3784
2134
  toMs: backfillWindow.toMs,
3785
2135
  nowMs: coverageNowMs
3786
2136
  });
3787
2137
  const liquidationCovered = confirmedLiquidationWindow == null || resolveDerivativesContextMissingCoverageFetchFromMs({
3788
- ranges: liquidationCoverageRangesByInterval.get(window2.interval)?.get(normalizedSymbol) ?? [],
2138
+ ranges: liquidationCoverageRangesByInterval.get(window.interval)?.get(normalizedSymbol) ?? [],
3789
2139
  fromMs: confirmedLiquidationWindow.fromMs,
3790
2140
  toMs: confirmedLiquidationWindow.toMs,
3791
- intervalMs: window2.intervalMs
2141
+ intervalMs: window.intervalMs
3792
2142
  }) == null;
3793
2143
  return dataCovered && liquidationCovered;
3794
2144
  })
@@ -3838,11 +2188,11 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
3838
2188
  );
3839
2189
  const symbolBatches = chunkArray(matches, symbolBatchSize);
3840
2190
  const windowsPerPair = intervalWindows.reduce(
3841
- (sum, window2) => sum + countBackfillWindows({
3842
- fromMs: window2.fromMs,
3843
- toMs: window2.toMs,
2191
+ (sum, window) => sum + countBackfillWindows({
2192
+ fromMs: window.fromMs,
2193
+ toMs: window.toMs,
3844
2194
  batchMs,
3845
- intervalMs: window2.intervalMs
2195
+ intervalMs: window.intervalMs
3846
2196
  }),
3847
2197
  0
3848
2198
  );
@@ -3865,9 +2215,9 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
3865
2215
  `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()}`
3866
2216
  )
3867
2217
  );
3868
- for (const window2 of intervalWindows) {
3869
- const { interval, intervalMs } = window2;
3870
- const edgesBySymbol = edgesByInterval.get(interval) ?? await (0, import_timescale2.getDerivativesDataEdgesForSymbols)(
2218
+ for (const window of intervalWindows) {
2219
+ const { interval, intervalMs } = window;
2220
+ const edgesBySymbol = edgesByInterval.get(interval) ?? await (0, import_derivatives.getDerivativesDataEdgesForSymbols)(
3871
2221
  matches.map((item) => item.symbol),
3872
2222
  interval
3873
2223
  );
@@ -3882,9 +2232,9 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
3882
2232
  );
3883
2233
  for (let batchIdx = 0; batchIdx < symbolBatches.length; batchIdx += 1) {
3884
2234
  const batch = symbolBatches[batchIdx];
3885
- let cursor = window2.fromMs;
3886
- while (cursor < window2.toMs) {
3887
- const toMs = Math.min(window2.toMs, cursor + batchMs);
2235
+ let cursor = window.fromMs;
2236
+ while (cursor < window.toMs) {
2237
+ const toMs = Math.min(window.toMs, cursor + batchMs);
3888
2238
  const missingRanges = batch.map((item) => {
3889
2239
  const key = coverageKey({
3890
2240
  symbol: item.symbol,
@@ -3990,7 +2340,7 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
3990
2340
  );
3991
2341
  }
3992
2342
  if (rows.length) {
3993
- await (0, import_timescale2.upsertDerivatives)(rows);
2343
+ await (0, import_derivatives.upsertDerivatives)(rows);
3994
2344
  totalRows += rows.length;
3995
2345
  }
3996
2346
  const confirmedLiquidationWindow = (0, import_indicators.resolveCoinalyzeConfirmedIntradayCoverage)({
@@ -4018,7 +2368,7 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
4018
2368
  eventRowsCount
4019
2369
  };
4020
2370
  });
4021
- await (0, import_timescale2.applyDerivativesMetricCoverage)(metricCoverageRows);
2371
+ await (0, import_derivatives.applyDerivativesMetricCoverage)(metricCoverageRows);
4022
2372
  for (const coverageRow of metricCoverageRows) {
4023
2373
  const symbol = coverageRow.symbol.toUpperCase();
4024
2374
  const ranges = liquidationCoverageRangesBySymbol.get(symbol) ?? [];
@@ -4050,7 +2400,7 @@ var backfillDerivativesContext = async (params, enabled, mode) => {
4050
2400
  rowsCount
4051
2401
  };
4052
2402
  });
4053
- await (0, import_timescale2.upsertDerivativesBackfillCoverage)(coverageRows);
2403
+ await (0, import_derivatives.upsertDerivativesBackfillCoverage)(coverageRows);
4054
2404
  for (const coverageRow of coverageRows) {
4055
2405
  const symbol = coverageRow.symbol.toUpperCase();
4056
2406
  edgesBySymbol.set(
@@ -4127,7 +2477,8 @@ var backfillDerivativesContextForSignals = async (params) => backfillDerivatives
4127
2477
  // src/lib/coinMarketCapContextBackfill.ts
4128
2478
  var import_chalk6 = __toESM(require("chalk"));
4129
2479
  var import_async2 = require("@tradejs/core/async");
4130
- var import_timescale3 = require("@tradejs/infra/timescale");
2480
+ var import_marketContext2 = require("@tradejs/infra/timescale/marketContext");
2481
+ var import_client3 = require("@tradejs/infra/timescale/client");
4131
2482
  var import_userSettings2 = require("@tradejs/infra/userSettings");
4132
2483
  var DAY_MS3 = 864e5;
4133
2484
  var DEFAULT_CONTEXT_MAX_AGE_MS = 48 * 60 * 6e4;
@@ -4391,7 +2742,7 @@ var logBackfillSourceDone = (params) => {
4391
2742
  )
4392
2743
  );
4393
2744
  };
4394
- var markBackfillCoverage = (rows) => (0, import_timescale3.upsertMarketContextBackfillCoverage)(rows);
2745
+ var markBackfillCoverage = (rows) => (0, import_marketContext2.upsertMarketContextBackfillCoverage)(rows);
4395
2746
  var coinMarketCapFetch = async (params) => {
4396
2747
  const url = new URL(`${getBaseUrl()}${params.path}`);
4397
2748
  for (const [key, value] of Object.entries(params.searchParams)) {
@@ -4720,7 +3071,7 @@ var backfillCoinMarketCapContext = async (params) => {
4720
3071
  if (toMs <= fromMs) return skippedResult();
4721
3072
  const exchangeLiquidityEnabled = isExchangeLiquidityBackfillEnabled();
4722
3073
  const fearGreedEnabled = isFearGreedBackfillEnabled();
4723
- await (0, import_timescale3.waitForDbReady)();
3074
+ await (0, import_client3.waitForDbReady)();
4724
3075
  const [
4725
3076
  globalDailyCoverage,
4726
3077
  referenceDailyCoverage,
@@ -4733,66 +3084,66 @@ var backfillCoinMarketCapContext = async (params) => {
4733
3084
  fearGreedBackfillCoverage,
4734
3085
  indexBackfillCoverage
4735
3086
  ] = await Promise.all([
4736
- (0, import_timescale3.getMarketGlobalContextCoverage)({
3087
+ (0, import_marketContext2.getMarketGlobalContextCoverage)({
4737
3088
  source: SOURCE_GLOBAL_DAILY,
4738
3089
  startMs: fromMs,
4739
3090
  endMs: toMs
4740
3091
  }),
4741
- (0, import_timescale3.getMarketReferenceAssetContextCoverage)({
3092
+ (0, import_marketContext2.getMarketReferenceAssetContextCoverage)({
4742
3093
  source: SOURCE_REFERENCE,
4743
3094
  symbols: REFERENCE_ASSETS.map((item) => item.symbol),
4744
3095
  interval: "1d",
4745
3096
  startMs: fromMs,
4746
3097
  endMs: toMs
4747
3098
  }),
4748
- exchangeLiquidityEnabled ? (0, import_timescale3.getMarketCmcExchangeLiquidityContextCoverage)({
3099
+ exchangeLiquidityEnabled ? (0, import_marketContext2.getMarketCmcExchangeLiquidityContextCoverage)({
4749
3100
  source: SOURCE_EXCHANGE_LIQUIDITY,
4750
3101
  interval: "1d",
4751
3102
  startMs: fromMs,
4752
3103
  endMs: toMs
4753
3104
  }) : Promise.resolve(null),
4754
- fearGreedEnabled ? (0, import_timescale3.getMarketCmcFearGreedContextCoverage)({
3105
+ fearGreedEnabled ? (0, import_marketContext2.getMarketCmcFearGreedContextCoverage)({
4755
3106
  source: SOURCE_FEAR_GREED,
4756
3107
  interval: "1d",
4757
3108
  startMs: fromMs,
4758
3109
  endMs: toMs
4759
3110
  }) : Promise.resolve(null),
4760
- (0, import_timescale3.getMarketCmcIndexContextCoverage)({
3111
+ (0, import_marketContext2.getMarketCmcIndexContextCoverage)({
4761
3112
  source: SOURCE_INDEX,
4762
3113
  indexSlugs: CMC_INDEXES.map((index) => index.slug),
4763
3114
  interval: "1d",
4764
3115
  startMs: fromMs,
4765
3116
  endMs: toMs
4766
3117
  }),
4767
- (0, import_timescale3.getMarketContextBackfillCoverage)({
3118
+ (0, import_marketContext2.getMarketContextBackfillCoverage)({
4768
3119
  source: SOURCE_GLOBAL_DAILY,
4769
3120
  scopes: [COVERAGE_SCOPE_ALL],
4770
3121
  interval: "1d",
4771
3122
  fromMs,
4772
3123
  toMs
4773
3124
  }),
4774
- (0, import_timescale3.getMarketContextBackfillCoverage)({
3125
+ (0, import_marketContext2.getMarketContextBackfillCoverage)({
4775
3126
  source: SOURCE_REFERENCE,
4776
3127
  scopes: REFERENCE_ASSETS.map((item) => item.symbol),
4777
3128
  interval: "1d",
4778
3129
  fromMs,
4779
3130
  toMs
4780
3131
  }),
4781
- exchangeLiquidityEnabled ? (0, import_timescale3.getMarketContextBackfillCoverage)({
3132
+ exchangeLiquidityEnabled ? (0, import_marketContext2.getMarketContextBackfillCoverage)({
4782
3133
  source: SOURCE_EXCHANGE_LIQUIDITY,
4783
3134
  scopes: [COVERAGE_SCOPE_ALL],
4784
3135
  interval: "1d",
4785
3136
  fromMs,
4786
3137
  toMs
4787
3138
  }) : Promise.resolve([]),
4788
- fearGreedEnabled ? (0, import_timescale3.getMarketContextBackfillCoverage)({
3139
+ fearGreedEnabled ? (0, import_marketContext2.getMarketContextBackfillCoverage)({
4789
3140
  source: SOURCE_FEAR_GREED,
4790
3141
  scopes: [COVERAGE_SCOPE_ALL],
4791
3142
  interval: "1d",
4792
3143
  fromMs,
4793
3144
  toMs
4794
3145
  }) : Promise.resolve([]),
4795
- (0, import_timescale3.getMarketContextBackfillCoverage)({
3146
+ (0, import_marketContext2.getMarketContextBackfillCoverage)({
4796
3147
  source: SOURCE_INDEX,
4797
3148
  scopes: CMC_INDEXES.map((index) => index.slug),
4798
3149
  interval: "1d",
@@ -4983,7 +3334,7 @@ var backfillCoinMarketCapContext = async (params) => {
4983
3334
  }
4984
3335
  });
4985
3336
  const rows = coinMarketCapGlobalPayloadToRows(payload, SOURCE_GLOBAL_DAILY);
4986
- await (0, import_timescale3.upsertMarketGlobalContextRows)(rows);
3337
+ await (0, import_marketContext2.upsertMarketGlobalContextRows)(rows);
4987
3338
  await markBackfillCoverage([
4988
3339
  {
4989
3340
  source: SOURCE_GLOBAL_DAILY,
@@ -5017,7 +3368,7 @@ var backfillCoinMarketCapContext = async (params) => {
5017
3368
  }
5018
3369
  });
5019
3370
  const rows = coinMarketCapHistoricalQuotesPayloadToRows(payload, "1d");
5020
- await (0, import_timescale3.upsertMarketReferenceAssetContextRows)(rows);
3371
+ await (0, import_marketContext2.upsertMarketReferenceAssetContextRows)(rows);
5021
3372
  await markBackfillCoverage(
5022
3373
  REFERENCE_ASSETS.map((asset) => ({
5023
3374
  source: SOURCE_REFERENCE,
@@ -5056,7 +3407,7 @@ var backfillCoinMarketCapContext = async (params) => {
5056
3407
  payload,
5057
3408
  "1d"
5058
3409
  );
5059
- await (0, import_timescale3.upsertMarketCmcExchangeLiquidityContextRows)(rows);
3410
+ await (0, import_marketContext2.upsertMarketCmcExchangeLiquidityContextRows)(rows);
5060
3411
  await markBackfillCoverage([
5061
3412
  {
5062
3413
  source: SOURCE_EXCHANGE_LIQUIDITY,
@@ -5101,7 +3452,7 @@ var backfillCoinMarketCapContext = async (params) => {
5101
3452
  const oldestPageTs = Math.min(...pageRows.map((row) => row.ts.getTime()));
5102
3453
  if (oldestPageTs < fromMs || pageRows.length < pageSize) break;
5103
3454
  }
5104
- await (0, import_timescale3.upsertMarketCmcFearGreedContextRows)(rows);
3455
+ await (0, import_marketContext2.upsertMarketCmcFearGreedContextRows)(rows);
5105
3456
  await markBackfillCoverage([
5106
3457
  {
5107
3458
  source: SOURCE_FEAR_GREED,
@@ -5135,7 +3486,7 @@ var backfillCoinMarketCapContext = async (params) => {
5135
3486
  }))
5136
3487
  );
5137
3488
  const rows = rowsByIndex.flatMap((item) => item.result.rows);
5138
- await (0, import_timescale3.upsertMarketCmcIndexContextRows)(rows);
3489
+ await (0, import_marketContext2.upsertMarketCmcIndexContextRows)(rows);
5139
3490
  await markBackfillCoverage(
5140
3491
  rowsByIndex.map(({ index, result }) => ({
5141
3492
  source: SOURCE_INDEX,
@@ -5187,7 +3538,7 @@ var backfillCoinMarketCapContextForSignals = (params) => backfillCoinMarketCapCo
5187
3538
 
5188
3539
  // src/lib/hyperliquidWhaleBackfill.ts
5189
3540
  var import_progress3 = __toESM(require("progress"));
5190
- var import_timescale4 = require("@tradejs/infra/timescale");
3541
+ var import_hyperliquidWhales = require("@tradejs/infra/timescale/hyperliquidWhales");
5191
3542
  var import_strategies2 = require("@tradejs/node/strategies");
5192
3543
 
5193
3544
  // src/lib/hyperliquidWhaleData.ts
@@ -5442,7 +3793,7 @@ var backfillHyperliquidWhaleContext = async (params) => {
5442
3793
  };
5443
3794
  const fromMs = Math.floor(params.startMs / HYPERLIQUID_WHALE_BUCKET_MS) * HYPERLIQUID_WHALE_BUCKET_MS;
5444
3795
  const toMs = minuteCeil(params.endMs);
5445
- const cached = await (0, import_timescale4.hasHyperliquidWhaleBackfillCoverage)({
3796
+ const cached = await (0, import_hyperliquidWhales.hasHyperliquidWhaleBackfillCoverage)({
5446
3797
  fromMs,
5447
3798
  toMs,
5448
3799
  ...identity
@@ -5491,7 +3842,7 @@ var backfillHyperliquidWhaleContext = async (params) => {
5491
3842
  items: whales.addresses,
5492
3843
  concurrency,
5493
3844
  worker: async (address) => {
5494
- const previous = await (0, import_timescale4.getHyperliquidWhaleWalletCoverage)({
3845
+ const previous = await (0, import_hyperliquidWhales.getHyperliquidWhaleWalletCoverage)({
5495
3846
  address,
5496
3847
  fromMs,
5497
3848
  toMs,
@@ -5518,8 +3869,8 @@ var backfillHyperliquidWhaleContext = async (params) => {
5518
3869
  identity
5519
3870
  })
5520
3871
  ).filter((row) => row != null);
5521
- await (0, import_timescale4.upsertHyperliquidWhaleTradeEvents)(addressEvents);
5522
- await (0, import_timescale4.upsertHyperliquidWhaleWalletCoverage)({
3872
+ await (0, import_hyperliquidWhales.upsertHyperliquidWhaleTradeEvents)(addressEvents);
3873
+ await (0, import_hyperliquidWhales.upsertHyperliquidWhaleWalletCoverage)({
5523
3874
  address,
5524
3875
  fromMs,
5525
3876
  toMs,
@@ -5537,7 +3888,7 @@ var backfillHyperliquidWhaleContext = async (params) => {
5537
3888
  const normalizedError = error instanceof Error ? error : new Error(String(error));
5538
3889
  failures.push(normalizedError);
5539
3890
  failedWallets += 1;
5540
- await (0, import_timescale4.upsertHyperliquidWhaleWalletCoverage)({
3891
+ await (0, import_hyperliquidWhales.upsertHyperliquidWhaleWalletCoverage)({
5541
3892
  address,
5542
3893
  fromMs,
5543
3894
  toMs,
@@ -5556,7 +3907,7 @@ var backfillHyperliquidWhaleContext = async (params) => {
5556
3907
  );
5557
3908
  }
5558
3909
  });
5559
- const buckets = await (0, import_timescale4.rebuildHyperliquidWhaleFlowRows)({
3910
+ const buckets = await (0, import_hyperliquidWhales.rebuildHyperliquidWhaleFlowRows)({
5560
3911
  fromMs,
5561
3912
  toMs,
5562
3913
  ...identity
@@ -5572,7 +3923,7 @@ var backfillHyperliquidWhaleContext = async (params) => {
5572
3923
  }
5573
3924
  );
5574
3925
  let displayedCoverageBuckets = 0;
5575
- const coverageBuckets = await (0, import_timescale4.rebuildHyperliquidWhaleCoverageRows)({
3926
+ const coverageBuckets = await (0, import_hyperliquidWhales.rebuildHyperliquidWhaleCoverageRows)({
5576
3927
  fromMs,
5577
3928
  toMs,
5578
3929
  expectedWhales: whales.addresses.length,
@@ -5778,7 +4129,7 @@ var prepareMarketContextForRun = async (params) => {
5778
4129
  if (readableSources.length) {
5779
4130
  await timeOperation3(
5780
4131
  "market context schema ensure",
5781
- () => (0, import_timescale5.ensureMarketContextSchemas)(readableSources)
4132
+ () => (0, import_marketContext3.ensureMarketContextSchemas)(readableSources)
5782
4133
  );
5783
4134
  }
5784
4135
  if (requirements.derivatives.backfill) {
@@ -5855,11 +4206,11 @@ var markTestsStarted = () => {
5855
4206
  var setRuntimeCompareContext = ({
5856
4207
  connector,
5857
4208
  connectorName,
5858
- window: window2
4209
+ window
5859
4210
  }) => {
5860
4211
  runtimeCompareConnector = connector;
5861
4212
  runtimeCompareConnectorName = connectorName;
5862
- runtimeCompareWindow = window2;
4213
+ runtimeCompareWindow = window;
5863
4214
  };
5864
4215
  var getRuntimeCompareContext = () => ({
5865
4216
  connector: runtimeCompareConnector,
@@ -9024,11 +7375,11 @@ var filterReplayComparisonByLineage = ({
9024
7375
  expectedByScope
9025
7376
  });
9026
7377
  }
9027
- const window2 = deploymentWindows.get(
7378
+ const window = deploymentWindows.get(
9028
7379
  lineageScopeKey(trade.strategy, trade.symbol)
9029
7380
  );
9030
7381
  const signalTimestamp = trade.signalTimestamp ?? trade.entryTimestamp;
9031
- return window2 != null && signalTimestamp >= window2.firstTimestamp && signalTimestamp <= window2.lastTimestamp;
7382
+ return window != null && signalTimestamp >= window.firstTimestamp && signalTimestamp <= window.lastTimestamp;
9032
7383
  });
9033
7384
  for (const artifact of [
9034
7385
  ...comparableRuntimeSignals,
@@ -9042,11 +7393,11 @@ var filterReplayComparisonByLineage = ({
9042
7393
  });
9043
7394
  }
9044
7395
  const comparableBacktestEntries = backtestEntries.filter((entry) => {
9045
- const window2 = deploymentWindows.get(
7396
+ const window = deploymentWindows.get(
9046
7397
  lineageScopeKey(entry.strategy, entry.symbol)
9047
7398
  );
9048
7399
  const signalTimestamp = entry.signalTimestamp ?? entry.timestamp;
9049
- return window2 != null && signalTimestamp >= window2.firstTimestamp && signalTimestamp <= window2.lastTimestamp;
7400
+ return window != null && signalTimestamp >= window.firstTimestamp && signalTimestamp <= window.lastTimestamp;
9050
7401
  });
9051
7402
  const comparableScopeKeys = new Set(deploymentWindows.keys());
9052
7403
  return {
@@ -9458,11 +7809,11 @@ var saveAndPrintReplayExchangeComparison = async ({
9458
7809
  runtimeSignalEvaluations,
9459
7810
  lineage
9460
7811
  }) => {
9461
- const { connector, connectorName, window: window2 } = getRuntimeCompareContext();
7812
+ const { connector, connectorName, window } = getRuntimeCompareContext();
9462
7813
  const rawExchangeEntries = await loadExchangeEntriesForComparison({
9463
7814
  connector,
9464
- startTime: window2.start,
9465
- endTime: window2.end
7815
+ startTime: window.start,
7816
+ endTime: window.end
9466
7817
  });
9467
7818
  const strategyNameByOrderLinkKey = buildStrategyNameByOrderLinkKey(
9468
7819
  liveStrategySummaries.map((summary) => summary.strategyName)
@@ -9497,8 +7848,8 @@ var saveAndPrintReplayExchangeComparison = async ({
9497
7848
  console.log(
9498
7849
  import_chalk11.default.yellow(
9499
7850
  `SIGNALS REPLAY VS EXCHANGE: no lineage-linked exchange entry executions found for ${connectorName} in ${(0, import_time6.formatUnix)(
9500
- window2.start
9501
- )} -> ${(0, import_time6.formatUnix)(window2.end)}`
7851
+ window.start
7852
+ )} -> ${(0, import_time6.formatUnix)(window.end)}`
9502
7853
  )
9503
7854
  );
9504
7855
  console.log("");
@@ -9694,8 +8045,8 @@ var saveAndPrintReplayRuntimeComparison = async ({
9694
8045
  replayLineages,
9695
8046
  runtimeEvidencePath
9696
8047
  }) => {
9697
- const { connector, connectorName, window: window2 } = getRuntimeCompareContext();
9698
- if (!connector || !window2) {
8048
+ const { connector, connectorName, window } = getRuntimeCompareContext();
8049
+ if (!connector || !window) {
9699
8050
  return null;
9700
8051
  }
9701
8052
  const relevantStrategies = new Set(
@@ -9706,7 +8057,7 @@ var saveAndPrintReplayRuntimeComparison = async ({
9706
8057
  filePath: runtimeEvidencePath,
9707
8058
  projectRoot: replayProjectRoot,
9708
8059
  expectedUserName: replayUserName,
9709
- expectedWindow: window2
8060
+ expectedWindow: window
9710
8061
  }) : null;
9711
8062
  const [
9712
8063
  rawRuntimeTrades,
@@ -9720,20 +8071,20 @@ var saveAndPrintReplayRuntimeComparison = async ({
9720
8071
  runtimeEvidence.lineageScopes
9721
8072
  ] : await Promise.all([
9722
8073
  loadRuntimeTrades(replayUserName, {
9723
- startTime: window2.start,
9724
- endTime: window2.end
8074
+ startTime: window.start,
8075
+ endTime: window.end
9725
8076
  }),
9726
8077
  loadRuntimeSignals(replayUserName, {
9727
- startTime: window2.start,
9728
- endTime: window2.end
8078
+ startTime: window.start,
8079
+ endTime: window.end
9729
8080
  }),
9730
8081
  loadRuntimeSignalEvaluations(replayUserName, {
9731
- startTime: window2.start,
9732
- endTime: window2.end
8082
+ startTime: window.start,
8083
+ endTime: window.end
9733
8084
  }),
9734
8085
  loadRuntimeLineageScopes(replayUserName, {
9735
- startTime: window2.start,
9736
- endTime: window2.end
8086
+ startTime: window.start,
8087
+ endTime: window.end
9737
8088
  })
9738
8089
  ]);
9739
8090
  if (runtimeEvidence) {
@@ -9747,8 +8098,8 @@ var saveAndPrintReplayRuntimeComparison = async ({
9747
8098
  userName: replayUserName,
9748
8099
  connector,
9749
8100
  trades: rawRuntimeTrades,
9750
- startTime: window2.start,
9751
- endTime: window2.end,
8101
+ startTime: window.start,
8102
+ endTime: window.end,
9752
8103
  openPositionCallbacks: {
9753
8104
  onError: (error) => {
9754
8105
  console.log(
@@ -9792,15 +8143,15 @@ var saveAndPrintReplayRuntimeComparison = async ({
9792
8143
  });
9793
8144
  const comparableBacktestEntries = comparable.backtestEntries;
9794
8145
  const windowRuntimeTrades = comparable.runtimeTrades.filter(
9795
- (trade) => trade.entryTimestamp >= window2.start && trade.entryTimestamp < window2.end && relevantStrategies.has(trade.strategy)
8146
+ (trade) => trade.entryTimestamp >= window.start && trade.entryTimestamp < window.end && relevantStrategies.has(trade.strategy)
9796
8147
  );
9797
8148
  if (!windowRuntimeTrades.length && !runtimeEvidence) {
9798
8149
  console.log("");
9799
8150
  console.log(
9800
8151
  import_chalk11.default.yellow(
9801
8152
  `SIGNALS REPLAY VS RUNTIME: no local runtime trades found for ${connectorName} in ${(0, import_time6.formatUnix)(
9802
- window2.start
9803
- )} -> ${(0, import_time6.formatUnix)(window2.end)} with matching lineage; checking lineage-linked exchange executions`
8153
+ window.start
8154
+ )} -> ${(0, import_time6.formatUnix)(window.end)} with matching lineage; checking lineage-linked exchange executions`
9804
8155
  )
9805
8156
  );
9806
8157
  console.log("");
@@ -10225,7 +8576,7 @@ var writeReplayOutputReport = async ({
10225
8576
  connectorName,
10226
8577
  interval,
10227
8578
  tickers,
10228
- window: window2,
8579
+ window,
10229
8580
  durationSeconds,
10230
8581
  replayResult,
10231
8582
  strategySnapshot,
@@ -10243,12 +8594,12 @@ var writeReplayOutputReport = async ({
10243
8594
  interval,
10244
8595
  command: process.argv.join(" "),
10245
8596
  window: {
10246
- startTime: window2.start,
10247
- endTime: window2.end,
10248
- startIso: new Date(window2.start).toISOString(),
10249
- endIso: new Date(window2.end).toISOString(),
10250
- startMsk: formatMsk(window2.start),
10251
- endMsk: formatMsk(window2.end)
8597
+ startTime: window.start,
8598
+ endTime: window.end,
8599
+ startIso: new Date(window.start).toISOString(),
8600
+ endIso: new Date(window.end).toISOString(),
8601
+ startMsk: formatMsk(window.start),
8602
+ endMsk: formatMsk(window.end)
10252
8603
  },
10253
8604
  durationSeconds,
10254
8605
  counts: {
@@ -10285,7 +8636,7 @@ var writeReplayOutputReport = async ({
10285
8636
  ["Strategies", replayResult.strategies.length],
10286
8637
  ["Signals", replayResult.signals.length],
10287
8638
  ["Duration", `${durationSeconds.toFixed(2)}s`],
10288
- ["Window", `${formatMsk(window2.start)} - ${formatMsk(window2.end)} MSK`],
8639
+ ["Window", `${formatMsk(window.start)} - ${formatMsk(window.end)} MSK`],
10289
8640
  ["Runtime compare mode", runtimeComparison?.mode ?? "none"],
10290
8641
  ["Matched", runtimeComparison?.matchedCount ?? 0],
10291
8642
  ["Order failed", runtimeComparison?.orderFailedCount ?? 0],
@@ -10366,7 +8717,7 @@ var finishReplay = async ({
10366
8717
  replayResult,
10367
8718
  tickers,
10368
8719
  connectorName,
10369
- window: window2
8720
+ window
10370
8721
  }) => {
10371
8722
  const replayStrategySnapshot = await saveAndPrintReplayResultsByStrategy({
10372
8723
  replayResult,
@@ -10406,7 +8757,7 @@ var finishReplay = async ({
10406
8757
  connectorName,
10407
8758
  interval: replayInterval,
10408
8759
  tickers,
10409
- window: window2,
8760
+ window,
10410
8761
  durationSeconds,
10411
8762
  replayResult,
10412
8763
  strategySnapshot: replayStrategySnapshot,