@backtest-kit/ui 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -0
- package/build/.gitkeep +0 -0
- package/build/index.cjs +1320 -0
- package/build/index.mjs +1312 -0
- package/build/modules/frontend/build/assets/index-DGpfEm4w.js +1 -0
- package/build/modules/frontend/build/assets/index-DqRtQQzL.js +230 -0
- package/build/modules/frontend/build/assets/index-DrRm3Jka.css +1 -0
- package/build/modules/frontend/build/assets/markdownit-BOD7oTDJ.js +1 -0
- package/build/modules/frontend/build/images/cubes.png +0 -0
- package/build/modules/frontend/build/images/dots.png +0 -0
- package/build/modules/frontend/build/images/snow.png +0 -0
- package/build/modules/frontend/build/images/square.png +0 -0
- package/build/modules/frontend/build/images/triangle.png +0 -0
- package/build/modules/frontend/build/index.html +155 -0
- package/build/modules/frontend/build/logo/icon512_maskable.png +0 -0
- package/build/modules/frontend/build/logo/icon512_rounded.png +0 -0
- package/build/modules/frontend/build/manifest.json +23 -0
- package/package.json +115 -0
- package/types.d.ts +160 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="ru" translate="no">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<title>BacktestKit</title>
|
|
6
|
+
<meta
|
|
7
|
+
name="viewport"
|
|
8
|
+
content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1, minimal-ui"
|
|
9
|
+
/>
|
|
10
|
+
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
|
|
11
|
+
<meta name="apple-mobile-web-app-title" content="TradeGPT" />
|
|
12
|
+
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
13
|
+
<meta name="mobile-web-app-capable" content="yes" />
|
|
14
|
+
<link
|
|
15
|
+
rel="apple-touch-icon"
|
|
16
|
+
sizes="512x512"
|
|
17
|
+
href="/logo/icon512_maskable.png"
|
|
18
|
+
/>
|
|
19
|
+
<link
|
|
20
|
+
rel="icon"
|
|
21
|
+
type="image/png"
|
|
22
|
+
sizes="512x512"
|
|
23
|
+
href="/logo/icon512_maskable.png"
|
|
24
|
+
/>
|
|
25
|
+
<link rel="manifest" href="/manifest.json" />
|
|
26
|
+
<link
|
|
27
|
+
rel="prefetch"
|
|
28
|
+
href="/images/cubes.png"
|
|
29
|
+
as="image"
|
|
30
|
+
type="image/png"
|
|
31
|
+
/>
|
|
32
|
+
<link
|
|
33
|
+
rel="prefetch"
|
|
34
|
+
href="/images/snow.png"
|
|
35
|
+
as="image"
|
|
36
|
+
type="image/png"
|
|
37
|
+
/>
|
|
38
|
+
<link
|
|
39
|
+
rel="prefetch"
|
|
40
|
+
href="/images/square.png"
|
|
41
|
+
as="image"
|
|
42
|
+
type="image/png"
|
|
43
|
+
/>
|
|
44
|
+
<link
|
|
45
|
+
rel="prefetch"
|
|
46
|
+
href="/images/triangle.png"
|
|
47
|
+
as="image"
|
|
48
|
+
type="image/png"
|
|
49
|
+
/>
|
|
50
|
+
<link
|
|
51
|
+
rel="prefetch"
|
|
52
|
+
href="/images/dots.png"
|
|
53
|
+
as="image"
|
|
54
|
+
type="image/png"
|
|
55
|
+
/>
|
|
56
|
+
<link
|
|
57
|
+
rel="prefetch"
|
|
58
|
+
href="/logo/icon512_maskable.png"
|
|
59
|
+
as="image/png"
|
|
60
|
+
/>
|
|
61
|
+
<style>
|
|
62
|
+
html,
|
|
63
|
+
body {
|
|
64
|
+
margin: 0;
|
|
65
|
+
padding: 0;
|
|
66
|
+
height: 100dvh;
|
|
67
|
+
width: 100dvw;
|
|
68
|
+
overflow-x: hidden;
|
|
69
|
+
scrollbar-width: none;
|
|
70
|
+
background: #eee !important;
|
|
71
|
+
}
|
|
72
|
+
</style>
|
|
73
|
+
<style>
|
|
74
|
+
.loader_wraper {
|
|
75
|
+
display: flex;
|
|
76
|
+
align-items: center;
|
|
77
|
+
justify-content: center;
|
|
78
|
+
height: 100vh;
|
|
79
|
+
width: 100vw;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.loader,
|
|
83
|
+
.loader:after {
|
|
84
|
+
border-radius: 50%;
|
|
85
|
+
width: 10em;
|
|
86
|
+
height: 10em;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.loader {
|
|
90
|
+
margin: 60px auto;
|
|
91
|
+
font-size: 10px;
|
|
92
|
+
position: relative;
|
|
93
|
+
text-indent: -9999em;
|
|
94
|
+
border-top: 1.1em solid transparent;
|
|
95
|
+
border-right: 1.1em solid transparent;
|
|
96
|
+
border-bottom: 1.1em solid transparent;
|
|
97
|
+
border-left: 1.1em solid #1f497a;
|
|
98
|
+
-webkit-transform: translateZ(0);
|
|
99
|
+
-ms-transform: translateZ(0);
|
|
100
|
+
transform: translateZ(0);
|
|
101
|
+
-webkit-animation: load8 1.1s infinite linear;
|
|
102
|
+
animation: load8 1.1s infinite linear;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@-webkit-keyframes load8 {
|
|
106
|
+
0% {
|
|
107
|
+
-webkit-transform: rotate(0deg);
|
|
108
|
+
transform: rotate(0deg);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
100% {
|
|
112
|
+
-webkit-transform: rotate(360deg);
|
|
113
|
+
transform: rotate(360deg);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
@keyframes load8 {
|
|
118
|
+
0% {
|
|
119
|
+
-webkit-transform: rotate(0deg);
|
|
120
|
+
transform: rotate(0deg);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
100% {
|
|
124
|
+
-webkit-transform: rotate(360deg);
|
|
125
|
+
transform: rotate(360deg);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.react-declarative__listContentMark,
|
|
130
|
+
.react-declarative__listPaperMark {
|
|
131
|
+
overflow: visible !important;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
* {
|
|
135
|
+
font-family: "Roboto", sans-serif !important;
|
|
136
|
+
overscroll-behavior: none;
|
|
137
|
+
}
|
|
138
|
+
</style>
|
|
139
|
+
<link
|
|
140
|
+
href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"
|
|
141
|
+
rel="stylesheet"
|
|
142
|
+
/>
|
|
143
|
+
<script type="module" crossorigin src="/assets/index-DqRtQQzL.js"></script>
|
|
144
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DrRm3Jka.css">
|
|
145
|
+
</head>
|
|
146
|
+
|
|
147
|
+
<body>
|
|
148
|
+
<div id="root">
|
|
149
|
+
<div class="loader_wraper">
|
|
150
|
+
<div class="loader"></div>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
154
|
+
</body>
|
|
155
|
+
</html>
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "BacktestKit",
|
|
3
|
+
"theme_color": "#6974b0",
|
|
4
|
+
"background_color": "#6974b0",
|
|
5
|
+
"icons": [
|
|
6
|
+
{
|
|
7
|
+
"purpose": "maskable",
|
|
8
|
+
"sizes": "512x512",
|
|
9
|
+
"src": "/logo/icon512_maskable.png",
|
|
10
|
+
"type": "image/png"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"purpose": "any",
|
|
14
|
+
"sizes": "512x512",
|
|
15
|
+
"src": "/logo/icon512_rounded.png",
|
|
16
|
+
"type": "image/png"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"orientation": "any",
|
|
20
|
+
"display": "standalone",
|
|
21
|
+
"dir": "ltr",
|
|
22
|
+
"lang": "ru-RU"
|
|
23
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@backtest-kit/ui",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Full-stack UI framework for visualizing cryptocurrency trading signals, backtests, and real-time market data. React dashboard with candlestick charts, signal tracking, and risk analysis.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Petr Tripolsky",
|
|
7
|
+
"email": "tripolskypetr@gmail.com",
|
|
8
|
+
"url": "https://github.com/tripolskypetr"
|
|
9
|
+
},
|
|
10
|
+
"funding": {
|
|
11
|
+
"type": "individual",
|
|
12
|
+
"url": "http://paypal.me/tripolskypetr"
|
|
13
|
+
},
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"homepage": "https://backtest-kit.github.io/documents/example_02_first_backtest.html",
|
|
16
|
+
"keywords": [
|
|
17
|
+
"backtest",
|
|
18
|
+
"backtesting",
|
|
19
|
+
"trading",
|
|
20
|
+
"crypto",
|
|
21
|
+
"cryptocurrency",
|
|
22
|
+
"bitcoin",
|
|
23
|
+
"ethereum",
|
|
24
|
+
"dashboard",
|
|
25
|
+
"ui",
|
|
26
|
+
"react",
|
|
27
|
+
"material-ui",
|
|
28
|
+
"mui",
|
|
29
|
+
"charts",
|
|
30
|
+
"candlestick",
|
|
31
|
+
"lightweight-charts",
|
|
32
|
+
"signals",
|
|
33
|
+
"trading-signals",
|
|
34
|
+
"risk-management",
|
|
35
|
+
"ccxt",
|
|
36
|
+
"binance",
|
|
37
|
+
"exchange",
|
|
38
|
+
"visualization",
|
|
39
|
+
"trading-bot",
|
|
40
|
+
"algo-trading",
|
|
41
|
+
"algorithmic-trading",
|
|
42
|
+
"quantitative-trading"
|
|
43
|
+
],
|
|
44
|
+
"files": [
|
|
45
|
+
"build",
|
|
46
|
+
"types.d.ts",
|
|
47
|
+
"README.md"
|
|
48
|
+
],
|
|
49
|
+
"repository": {
|
|
50
|
+
"type": "git",
|
|
51
|
+
"url": "https://github.com/tripolskypetr/backtest-kit",
|
|
52
|
+
"documentation": "https://github.com/tripolskypetr/backtest-kit/tree/master/docs"
|
|
53
|
+
},
|
|
54
|
+
"bugs": {
|
|
55
|
+
"url": "https://github.com/tripolskypetr/backtest-kit/issues"
|
|
56
|
+
},
|
|
57
|
+
"scripts": {
|
|
58
|
+
"start": "npm run build && cross-env NODE_ENV=development CC_ENABLE_MOCK=1 npm run serve",
|
|
59
|
+
"serve": "node ./scripts/mock.mjs",
|
|
60
|
+
"build:modules": "npm run build:modules:win",
|
|
61
|
+
"build:modules:win": "dotenv -e .env -- .\\scripts\\win\\build.bat && npm run build:copy && npm run build:postbuild",
|
|
62
|
+
"build:modules:x": "dotenv -e .env -- sh ./scripts/linux/build.sh && npm run build:copy && npm run build:postbuild",
|
|
63
|
+
"build:copy": "node ./scripts/copy.mjs",
|
|
64
|
+
"build:postbuild": "node ./scripts/postbuild.mjs",
|
|
65
|
+
"build": "rollup -c"
|
|
66
|
+
},
|
|
67
|
+
"main": "build/index.cjs",
|
|
68
|
+
"module": "build/index.mjs",
|
|
69
|
+
"source": "src/index.ts",
|
|
70
|
+
"types": "./types.d.ts",
|
|
71
|
+
"exports": {
|
|
72
|
+
"require": "./build/index.cjs",
|
|
73
|
+
"types": "./types.d.ts",
|
|
74
|
+
"import": "./build/index.mjs",
|
|
75
|
+
"default": "./build/index.cjs"
|
|
76
|
+
},
|
|
77
|
+
"devDependencies": {
|
|
78
|
+
"@rollup/plugin-typescript": "11.1.6",
|
|
79
|
+
"@rollup/plugin-terser": "0.4.4",
|
|
80
|
+
"@types/finalhandler": "1.2.3",
|
|
81
|
+
"@types/serve-handler": "6.1.4",
|
|
82
|
+
"cross-env": "7.0.3",
|
|
83
|
+
"@types/node": "22.9.0",
|
|
84
|
+
"glob": "11.0.1",
|
|
85
|
+
"rimraf": "6.0.1",
|
|
86
|
+
"rollup": "3.29.5",
|
|
87
|
+
"rollup-plugin-dts": "6.1.1",
|
|
88
|
+
"rollup-plugin-peer-deps-external": "2.2.4",
|
|
89
|
+
"ts-morph": "27.0.2",
|
|
90
|
+
"tslib": "2.7.0",
|
|
91
|
+
"typedoc": "0.27.9",
|
|
92
|
+
"ccxt": "4.5.24",
|
|
93
|
+
"touch": "3.1.1",
|
|
94
|
+
"worker-testbed": "1.0.12"
|
|
95
|
+
},
|
|
96
|
+
"peerDependencies": {
|
|
97
|
+
"backtest-kit": "^3.0.3",
|
|
98
|
+
"ccxt": "^4.5.24",
|
|
99
|
+
"typescript": "^5.0.0"
|
|
100
|
+
},
|
|
101
|
+
"dependencies": {
|
|
102
|
+
"di-kit": "^1.0.18",
|
|
103
|
+
"di-scoped": "^1.0.20",
|
|
104
|
+
"functools-kit": "^1.0.95",
|
|
105
|
+
"get-moment-stamp": "^1.1.1",
|
|
106
|
+
"finalhandler": "^1.3.1",
|
|
107
|
+
"serve-handler": "^6.1.6",
|
|
108
|
+
"cryptocurrency-icons": "^0.18.1",
|
|
109
|
+
"router": "^1.3.8",
|
|
110
|
+
"micro": "^10.0.1"
|
|
111
|
+
},
|
|
112
|
+
"publishConfig": {
|
|
113
|
+
"access": "public"
|
|
114
|
+
}
|
|
115
|
+
}
|
package/types.d.ts
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import http from 'http';
|
|
2
|
+
import * as backtest_kit from 'backtest-kit';
|
|
3
|
+
import { CandleInterval, NotificationModel, IStorageSignalRow } from 'backtest-kit';
|
|
4
|
+
import * as functools_kit from 'functools-kit';
|
|
5
|
+
|
|
6
|
+
declare function serve(host?: string, port?: number): () => void;
|
|
7
|
+
declare function getRouter(): http.RequestListener;
|
|
8
|
+
|
|
9
|
+
interface ILogger {
|
|
10
|
+
log(topic: string, ...args: any[]): void;
|
|
11
|
+
debug(topic: string, ...args: any[]): void;
|
|
12
|
+
info(topic: string, ...args: any[]): void;
|
|
13
|
+
warn(topic: string, ...args: any[]): void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
declare const setLogger: (logger: ILogger) => void;
|
|
17
|
+
|
|
18
|
+
interface SymbolModel {
|
|
19
|
+
icon: string;
|
|
20
|
+
logo: string;
|
|
21
|
+
symbol: string;
|
|
22
|
+
displayName: string;
|
|
23
|
+
color: string;
|
|
24
|
+
priority: number;
|
|
25
|
+
description: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
declare function getModulesPath(): string;
|
|
29
|
+
|
|
30
|
+
declare function getPublicPath(): string;
|
|
31
|
+
|
|
32
|
+
declare class LoggerService implements ILogger {
|
|
33
|
+
private _commonLogger;
|
|
34
|
+
log: (topic: string, ...args: any[]) => Promise<void>;
|
|
35
|
+
debug: (topic: string, ...args: any[]) => Promise<void>;
|
|
36
|
+
info: (topic: string, ...args: any[]) => Promise<void>;
|
|
37
|
+
warn: (topic: string, ...args: any[]) => Promise<void>;
|
|
38
|
+
setLogger: (logger: ILogger) => void;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
type ExchangeName = string;
|
|
42
|
+
declare class ExchangeService {
|
|
43
|
+
private readonly loggerService;
|
|
44
|
+
getRangeCandles: (dto: {
|
|
45
|
+
symbol: string;
|
|
46
|
+
interval: CandleInterval;
|
|
47
|
+
exchangeName: ExchangeName;
|
|
48
|
+
signalStartTime: number;
|
|
49
|
+
signalStopTime: number;
|
|
50
|
+
}) => Promise<backtest_kit.ICandleData[]>;
|
|
51
|
+
getPointCandles: (dto: {
|
|
52
|
+
symbol: string;
|
|
53
|
+
interval: CandleInterval;
|
|
54
|
+
exchangeName: ExchangeName;
|
|
55
|
+
currentTime: number;
|
|
56
|
+
}) => Promise<backtest_kit.ICandleData[]>;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
declare class NotificationMockService {
|
|
60
|
+
private readonly loggerService;
|
|
61
|
+
findByFilter: <T extends object = Record<string, string>>(filterData: T, limit?: number, offset?: number) => Promise<NotificationModel[]>;
|
|
62
|
+
getList: () => Promise<NotificationModel[]>;
|
|
63
|
+
getOne: (id: string) => Promise<NotificationModel>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
declare class StorageMockService {
|
|
67
|
+
private readonly loggerService;
|
|
68
|
+
findSignalById: (signalId: string) => Promise<IStorageSignalRow>;
|
|
69
|
+
listSignalLive: () => Promise<IStorageSignalRow[]>;
|
|
70
|
+
listSignalBacktest: () => Promise<IStorageSignalRow[]>;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
declare class ExchangeMockService {
|
|
74
|
+
private readonly loggerService;
|
|
75
|
+
private readonly storageMockService;
|
|
76
|
+
private readonly exchangeService;
|
|
77
|
+
getSignalCandles: (signalId: string, interval: CandleInterval) => Promise<backtest_kit.ICandleData[]>;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
declare class NotificationViewService {
|
|
81
|
+
private readonly loggerService;
|
|
82
|
+
private readonly notificationMockService;
|
|
83
|
+
findByFilter: <T extends object = Record<string, string>>(filterData: T, limit?: number, offset?: number) => Promise<NotificationModel[]>;
|
|
84
|
+
getList: () => Promise<NotificationModel[]>;
|
|
85
|
+
getOne: (id: string) => Promise<NotificationModel>;
|
|
86
|
+
protected init: (() => Promise<void>) & functools_kit.ISingleshotClearable;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
declare class StorageViewService {
|
|
90
|
+
private readonly loggerService;
|
|
91
|
+
private readonly storageMockService;
|
|
92
|
+
findSignalById: (signalId: string) => Promise<backtest_kit.IStorageSignalRow>;
|
|
93
|
+
listSignalLive: () => Promise<backtest_kit.IStorageSignalRow[]>;
|
|
94
|
+
listSignalBacktest: () => Promise<backtest_kit.IStorageSignalRow[]>;
|
|
95
|
+
protected init: (() => Promise<void>) & functools_kit.ISingleshotClearable;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
declare class ExchangeViewService {
|
|
99
|
+
private readonly loggerService;
|
|
100
|
+
private readonly storageViewService;
|
|
101
|
+
private readonly exchangeService;
|
|
102
|
+
private readonly exchangeMockService;
|
|
103
|
+
getSignalCandles: (signalId: string, interval: CandleInterval) => Promise<backtest_kit.ICandleData[]>;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
declare class SymbolConnectionService {
|
|
107
|
+
private readonly loggerService;
|
|
108
|
+
getSymbolList: (() => Promise<{
|
|
109
|
+
color: string;
|
|
110
|
+
description: string;
|
|
111
|
+
symbol: string;
|
|
112
|
+
icon: string;
|
|
113
|
+
logo: string;
|
|
114
|
+
priority: number;
|
|
115
|
+
displayName: string;
|
|
116
|
+
index: number;
|
|
117
|
+
}[]>) & functools_kit.ISingleshotClearable;
|
|
118
|
+
protected init: (() => Promise<void>) & functools_kit.ISingleshotClearable;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
declare class SymbolMetaService {
|
|
122
|
+
private readonly symbolConnectionService;
|
|
123
|
+
private readonly loggerService;
|
|
124
|
+
getSymbolList: (() => Promise<string[]>) & functools_kit.ISingleshotClearable;
|
|
125
|
+
getSymbolMap: (() => Promise<{}>) & functools_kit.ISingleshotClearable;
|
|
126
|
+
getSymbol: ((symbol: string) => Promise<{
|
|
127
|
+
color: string;
|
|
128
|
+
description: string;
|
|
129
|
+
symbol: string;
|
|
130
|
+
icon: string;
|
|
131
|
+
logo: string;
|
|
132
|
+
priority: number;
|
|
133
|
+
displayName: string;
|
|
134
|
+
index: number;
|
|
135
|
+
}>) & functools_kit.IClearableMemoize<string> & functools_kit.IControlMemoize<string, Promise<{
|
|
136
|
+
color: string;
|
|
137
|
+
description: string;
|
|
138
|
+
symbol: string;
|
|
139
|
+
icon: string;
|
|
140
|
+
logo: string;
|
|
141
|
+
priority: number;
|
|
142
|
+
displayName: string;
|
|
143
|
+
index: number;
|
|
144
|
+
}>>;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
declare const ioc: {
|
|
148
|
+
notificationViewService: NotificationViewService;
|
|
149
|
+
storageViewService: StorageViewService;
|
|
150
|
+
exchangeViewService: ExchangeViewService;
|
|
151
|
+
notificationMockService: NotificationMockService;
|
|
152
|
+
storageMockService: StorageMockService;
|
|
153
|
+
exchangeMockService: ExchangeMockService;
|
|
154
|
+
symbolMetaService: SymbolMetaService;
|
|
155
|
+
symbolConnectionService: SymbolConnectionService;
|
|
156
|
+
loggerService: LoggerService;
|
|
157
|
+
exchangeService: ExchangeService;
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
export { type SymbolModel, getModulesPath, getPublicPath, getRouter, ioc as lib, serve, setLogger };
|