@tramvai/module-server 1.95.1 → 1.97.0
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 +25 -0
- package/lib/modules/index.d.ts +1 -0
- package/lib/modules/utilityServer.d.ts +2 -0
- package/lib/server.es.js +101 -9
- package/lib/server.js +98 -6
- package/package.json +11 -11
package/README.md
CHANGED
|
@@ -183,6 +183,31 @@ By default server starts at `3000` port. You have next options to override this
|
|
|
183
183
|
- **in dev environment** port in fully controlled by `@tramvai/cli` and should be specified by [`-p` option](references/cli/start.md#-p---port)
|
|
184
184
|
- **in prod environment** it can be specified explicitly as an environment variable `PORT` e.g. `PORT=8080`
|
|
185
185
|
|
|
186
|
+
### Specify port for utility paths
|
|
187
|
+
|
|
188
|
+
It includes: health checks, liveness checks, metrics.
|
|
189
|
+
|
|
190
|
+
By default port for utility paths equals [base server port](#specify-server-port) and they will use the same http server.
|
|
191
|
+
|
|
192
|
+
If you want to change this and run utility routes on different server with different port, use token `UTILITY_SERVER_PORT_TOKEN`:
|
|
193
|
+
|
|
194
|
+
```ts
|
|
195
|
+
import { UTILITY_SERVER_PORT_TOKEN } from '@tramvai/tokens-server';
|
|
196
|
+
|
|
197
|
+
const providers = [
|
|
198
|
+
{
|
|
199
|
+
provide: UTILITY_SERVER_PORT_TOKEN,
|
|
200
|
+
useValue: 6532,
|
|
201
|
+
},
|
|
202
|
+
];
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Or use env variable `UTILITY_SERVER_PORT` with defined value.
|
|
206
|
+
|
|
207
|
+
```sh
|
|
208
|
+
env UTILITY_SERVER_PORT=6532 tramvai start app
|
|
209
|
+
```
|
|
210
|
+
|
|
186
211
|
## Exportable tokens
|
|
187
212
|
|
|
188
213
|
[Link](references/tokens/server.md)
|
package/lib/modules/index.d.ts
CHANGED
package/lib/server.es.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { __decorate } from 'tslib';
|
|
2
|
-
import { Scope, APP_INFO_TOKEN, Module, provide, DI_TOKEN, COMMAND_LINE_RUNNER_TOKEN, commandLineListTokens } from '@tramvai/core';
|
|
3
|
-
import { SERVER_MODULE_PAPI_PUBLIC_ROUTE, SERVER_MODULE_PAPI_PUBLIC_URL, SERVER_MODULE_PAPI_PRIVATE_URL, WEB_APP_BEFORE_INIT_TOKEN, WEB_APP_TOKEN, SERVER_MODULE_PAPI_PRIVATE_ROUTE, SERVER_MODULE_STATICS_OPTIONS, SERVER_TOKEN, READINESS_PROBE_TOKEN, LIVENESS_PROBE_TOKEN,
|
|
2
|
+
import { Scope, APP_INFO_TOKEN, Module, provide, DI_TOKEN, COMMAND_LINE_RUNNER_TOKEN, commandLineListTokens, createToken } from '@tramvai/core';
|
|
3
|
+
import { SERVER_MODULE_PAPI_PUBLIC_ROUTE, SERVER_MODULE_PAPI_PUBLIC_URL, SERVER_MODULE_PAPI_PRIVATE_URL, WEB_APP_BEFORE_INIT_TOKEN, WEB_APP_TOKEN, SERVER_MODULE_PAPI_PRIVATE_ROUTE, SERVER_MODULE_STATICS_OPTIONS, SERVER_TOKEN, READINESS_PROBE_TOKEN, LIVENESS_PROBE_TOKEN, UTILITY_SERVER_PATHS, PROXY_CONFIG_TOKEN, DEPENDENCIES_VERSION_FILTER_TOKEN, UTILITY_SERVER_PORT_TOKEN, WEB_APP_INIT_TOKEN, WEB_APP_AFTER_INIT_TOKEN, WEB_APP_LIMITER_TOKEN } from '@tramvai/tokens-server';
|
|
4
4
|
export * from '@tramvai/tokens-server';
|
|
5
|
-
import { WEB_FASTIFY_APP_BEFORE_INIT_TOKEN,
|
|
5
|
+
import { WEB_FASTIFY_APP_BEFORE_INIT_TOKEN, UTILITY_WEB_FASTIFY_APP_TOKEN, UTILITY_SERVER_TOKEN, SERVER_FACTORY_TOKEN, WEB_FASTIFY_APP_TOKEN, WEB_FASTIFY_APP_FACTORY_TOKEN, WEB_FASTIFY_APP_INIT_TOKEN, WEB_FASTIFY_APP_AFTER_INIT_TOKEN, WEB_FASTIFY_APP_LIMITER_TOKEN, WEB_FASTIFY_APP_BEFORE_ERROR_TOKEN, WEB_FASTIFY_APP_PROCESS_ERROR_TOKEN, WEB_FASTIFY_APP_AFTER_ERROR_TOKEN } from '@tramvai/tokens-server-private';
|
|
6
6
|
import { REQUEST, RESPONSE, FASTIFY_REQUEST, FASTIFY_RESPONSE, RESPONSE_MANAGER_TOKEN, LOGGER_TOKEN, ENV_MANAGER_TOKEN, ENV_USED_TOKEN } from '@tramvai/tokens-common';
|
|
7
7
|
import { MetricsModule } from '@tramvai/module-metrics';
|
|
8
8
|
import { CacheWarmupModule } from '@tramvai/module-cache-warmup';
|
|
@@ -579,13 +579,13 @@ let ServerGracefulShutdownModule = class ServerGracefulShutdownModule {
|
|
|
579
579
|
ServerGracefulShutdownModule = __decorate([
|
|
580
580
|
Module({
|
|
581
581
|
providers: [
|
|
582
|
-
{
|
|
582
|
+
provide({
|
|
583
583
|
provide: WEB_FASTIFY_APP_BEFORE_INIT_TOKEN,
|
|
584
584
|
multi: true,
|
|
585
|
-
useFactory: ({ server, logger, commandLineRunner, livenessProbe, readinessProbe, }) => {
|
|
585
|
+
useFactory: ({ app, server, logger, commandLineRunner, livenessProbe, readinessProbe, }) => {
|
|
586
586
|
const log = logger('server');
|
|
587
|
-
return function serverListen(
|
|
588
|
-
createTerminus(server,
|
|
587
|
+
return function serverListen() {
|
|
588
|
+
createTerminus(server, app, {
|
|
589
589
|
signal: 'SIGTERM',
|
|
590
590
|
timeout: GRACEFUL_SHUTDOWN_TIMEOUT,
|
|
591
591
|
logger: (msg, error) => {
|
|
@@ -625,15 +625,16 @@ ServerGracefulShutdownModule = __decorate([
|
|
|
625
625
|
};
|
|
626
626
|
},
|
|
627
627
|
deps: {
|
|
628
|
+
app: UTILITY_WEB_FASTIFY_APP_TOKEN,
|
|
628
629
|
server: SERVER_TOKEN,
|
|
629
630
|
logger: LOGGER_TOKEN,
|
|
630
631
|
commandLineRunner: COMMAND_LINE_RUNNER_TOKEN,
|
|
631
632
|
readinessProbe: { token: READINESS_PROBE_TOKEN, optional: true },
|
|
632
633
|
livenessProbe: { token: LIVENESS_PROBE_TOKEN, optional: true },
|
|
633
634
|
},
|
|
634
|
-
},
|
|
635
|
+
}),
|
|
635
636
|
{
|
|
636
|
-
provide:
|
|
637
|
+
provide: UTILITY_SERVER_PATHS,
|
|
637
638
|
useValue: [readyzPath, healthzPath],
|
|
638
639
|
multi: true,
|
|
639
640
|
},
|
|
@@ -878,6 +879,96 @@ DependenciesVersionModule = __decorate([
|
|
|
878
879
|
})
|
|
879
880
|
], DependenciesVersionModule);
|
|
880
881
|
|
|
882
|
+
const IS_CUSTOM_SERVER_TOKEN = createToken('server utility isCustomServer');
|
|
883
|
+
let UtilityServerModule = class UtilityServerModule {
|
|
884
|
+
};
|
|
885
|
+
UtilityServerModule = __decorate([
|
|
886
|
+
Module({
|
|
887
|
+
providers: [
|
|
888
|
+
provide({
|
|
889
|
+
provide: ENV_USED_TOKEN,
|
|
890
|
+
multi: true,
|
|
891
|
+
useValue: [{ key: 'UTILITY_SERVER_PORT', optional: true }],
|
|
892
|
+
}),
|
|
893
|
+
provide({
|
|
894
|
+
provide: UTILITY_SERVER_PORT_TOKEN,
|
|
895
|
+
useFactory: ({ envManager }) => {
|
|
896
|
+
return +(envManager.get('UTILITY_SERVER_PORT') || envManager.get('PORT'));
|
|
897
|
+
},
|
|
898
|
+
deps: {
|
|
899
|
+
envManager: ENV_MANAGER_TOKEN,
|
|
900
|
+
},
|
|
901
|
+
}),
|
|
902
|
+
provide({
|
|
903
|
+
provide: IS_CUSTOM_SERVER_TOKEN,
|
|
904
|
+
useFactory: ({ port, envManager }) => {
|
|
905
|
+
return +envManager.get('PORT') !== port;
|
|
906
|
+
},
|
|
907
|
+
deps: {
|
|
908
|
+
envManager: ENV_MANAGER_TOKEN,
|
|
909
|
+
port: UTILITY_SERVER_PORT_TOKEN,
|
|
910
|
+
},
|
|
911
|
+
}),
|
|
912
|
+
provide({
|
|
913
|
+
provide: UTILITY_SERVER_TOKEN,
|
|
914
|
+
scope: Scope.SINGLETON,
|
|
915
|
+
useFactory: ({ isCustomServer, serverFactory, server }) => {
|
|
916
|
+
return isCustomServer ? serverFactory() : server;
|
|
917
|
+
},
|
|
918
|
+
deps: {
|
|
919
|
+
isCustomServer: IS_CUSTOM_SERVER_TOKEN,
|
|
920
|
+
server: SERVER_TOKEN,
|
|
921
|
+
serverFactory: SERVER_FACTORY_TOKEN,
|
|
922
|
+
},
|
|
923
|
+
}),
|
|
924
|
+
provide({
|
|
925
|
+
provide: UTILITY_WEB_FASTIFY_APP_TOKEN,
|
|
926
|
+
scope: Scope.SINGLETON,
|
|
927
|
+
useFactory: ({ isCustomServer, app, appFactory, server }) => {
|
|
928
|
+
return isCustomServer ? appFactory({ server }) : app;
|
|
929
|
+
},
|
|
930
|
+
deps: {
|
|
931
|
+
isCustomServer: IS_CUSTOM_SERVER_TOKEN,
|
|
932
|
+
app: WEB_FASTIFY_APP_TOKEN,
|
|
933
|
+
appFactory: WEB_FASTIFY_APP_FACTORY_TOKEN,
|
|
934
|
+
server: UTILITY_SERVER_TOKEN,
|
|
935
|
+
},
|
|
936
|
+
}),
|
|
937
|
+
provide({
|
|
938
|
+
provide: commandLineListTokens.listen,
|
|
939
|
+
multi: true,
|
|
940
|
+
scope: Scope.SINGLETON,
|
|
941
|
+
useFactory: ({ logger, isCustomServer, port, app, server }) => {
|
|
942
|
+
return async function utilityServerListen() {
|
|
943
|
+
if (!isCustomServer) {
|
|
944
|
+
return;
|
|
945
|
+
}
|
|
946
|
+
const log = logger('server:utility');
|
|
947
|
+
await app.ready();
|
|
948
|
+
return new Promise((resolve, reject) => {
|
|
949
|
+
server.once('error', (error) => {
|
|
950
|
+
log.error({ event: 'server-listen-port', error });
|
|
951
|
+
reject(error);
|
|
952
|
+
});
|
|
953
|
+
server.listen(port, () => {
|
|
954
|
+
log.warn({ event: 'server-listen-port', message: `Server listen ${port} port` });
|
|
955
|
+
resolve();
|
|
956
|
+
});
|
|
957
|
+
});
|
|
958
|
+
};
|
|
959
|
+
},
|
|
960
|
+
deps: {
|
|
961
|
+
logger: LOGGER_TOKEN,
|
|
962
|
+
isCustomServer: IS_CUSTOM_SERVER_TOKEN,
|
|
963
|
+
port: UTILITY_SERVER_PORT_TOKEN,
|
|
964
|
+
app: UTILITY_WEB_FASTIFY_APP_TOKEN,
|
|
965
|
+
server: UTILITY_SERVER_TOKEN,
|
|
966
|
+
},
|
|
967
|
+
}),
|
|
968
|
+
],
|
|
969
|
+
})
|
|
970
|
+
], UtilityServerModule);
|
|
971
|
+
|
|
881
972
|
let ServerModule = class ServerModule {
|
|
882
973
|
};
|
|
883
974
|
ServerModule = __decorate([
|
|
@@ -890,6 +981,7 @@ ServerModule = __decorate([
|
|
|
890
981
|
ServerGracefulShutdownModule,
|
|
891
982
|
ServerProxyModule,
|
|
892
983
|
DependenciesVersionModule,
|
|
984
|
+
UtilityServerModule,
|
|
893
985
|
process.env.NODE_ENV !== 'production' && DebugHttpRequestsModule,
|
|
894
986
|
].filter(Boolean),
|
|
895
987
|
providers: [
|
package/lib/server.js
CHANGED
|
@@ -604,13 +604,13 @@ let ServerGracefulShutdownModule = class ServerGracefulShutdownModule {
|
|
|
604
604
|
ServerGracefulShutdownModule = tslib.__decorate([
|
|
605
605
|
core.Module({
|
|
606
606
|
providers: [
|
|
607
|
-
{
|
|
607
|
+
core.provide({
|
|
608
608
|
provide: tokensServerPrivate.WEB_FASTIFY_APP_BEFORE_INIT_TOKEN,
|
|
609
609
|
multi: true,
|
|
610
|
-
useFactory: ({ server, logger, commandLineRunner, livenessProbe, readinessProbe, }) => {
|
|
610
|
+
useFactory: ({ app, server, logger, commandLineRunner, livenessProbe, readinessProbe, }) => {
|
|
611
611
|
const log = logger('server');
|
|
612
|
-
return function serverListen(
|
|
613
|
-
terminus.createTerminus(server,
|
|
612
|
+
return function serverListen() {
|
|
613
|
+
terminus.createTerminus(server, app, {
|
|
614
614
|
signal: 'SIGTERM',
|
|
615
615
|
timeout: GRACEFUL_SHUTDOWN_TIMEOUT,
|
|
616
616
|
logger: (msg, error) => {
|
|
@@ -650,15 +650,16 @@ ServerGracefulShutdownModule = tslib.__decorate([
|
|
|
650
650
|
};
|
|
651
651
|
},
|
|
652
652
|
deps: {
|
|
653
|
+
app: tokensServerPrivate.UTILITY_WEB_FASTIFY_APP_TOKEN,
|
|
653
654
|
server: tokensServer.SERVER_TOKEN,
|
|
654
655
|
logger: tokensCommon.LOGGER_TOKEN,
|
|
655
656
|
commandLineRunner: core.COMMAND_LINE_RUNNER_TOKEN,
|
|
656
657
|
readinessProbe: { token: tokensServer.READINESS_PROBE_TOKEN, optional: true },
|
|
657
658
|
livenessProbe: { token: tokensServer.LIVENESS_PROBE_TOKEN, optional: true },
|
|
658
659
|
},
|
|
659
|
-
},
|
|
660
|
+
}),
|
|
660
661
|
{
|
|
661
|
-
provide: tokensServer.
|
|
662
|
+
provide: tokensServer.UTILITY_SERVER_PATHS,
|
|
662
663
|
useValue: [readyzPath, healthzPath],
|
|
663
664
|
multi: true,
|
|
664
665
|
},
|
|
@@ -903,6 +904,96 @@ DependenciesVersionModule = tslib.__decorate([
|
|
|
903
904
|
})
|
|
904
905
|
], DependenciesVersionModule);
|
|
905
906
|
|
|
907
|
+
const IS_CUSTOM_SERVER_TOKEN = core.createToken('server utility isCustomServer');
|
|
908
|
+
let UtilityServerModule = class UtilityServerModule {
|
|
909
|
+
};
|
|
910
|
+
UtilityServerModule = tslib.__decorate([
|
|
911
|
+
core.Module({
|
|
912
|
+
providers: [
|
|
913
|
+
core.provide({
|
|
914
|
+
provide: tokensCommon.ENV_USED_TOKEN,
|
|
915
|
+
multi: true,
|
|
916
|
+
useValue: [{ key: 'UTILITY_SERVER_PORT', optional: true }],
|
|
917
|
+
}),
|
|
918
|
+
core.provide({
|
|
919
|
+
provide: tokensServer.UTILITY_SERVER_PORT_TOKEN,
|
|
920
|
+
useFactory: ({ envManager }) => {
|
|
921
|
+
return +(envManager.get('UTILITY_SERVER_PORT') || envManager.get('PORT'));
|
|
922
|
+
},
|
|
923
|
+
deps: {
|
|
924
|
+
envManager: tokensCommon.ENV_MANAGER_TOKEN,
|
|
925
|
+
},
|
|
926
|
+
}),
|
|
927
|
+
core.provide({
|
|
928
|
+
provide: IS_CUSTOM_SERVER_TOKEN,
|
|
929
|
+
useFactory: ({ port, envManager }) => {
|
|
930
|
+
return +envManager.get('PORT') !== port;
|
|
931
|
+
},
|
|
932
|
+
deps: {
|
|
933
|
+
envManager: tokensCommon.ENV_MANAGER_TOKEN,
|
|
934
|
+
port: tokensServer.UTILITY_SERVER_PORT_TOKEN,
|
|
935
|
+
},
|
|
936
|
+
}),
|
|
937
|
+
core.provide({
|
|
938
|
+
provide: tokensServerPrivate.UTILITY_SERVER_TOKEN,
|
|
939
|
+
scope: core.Scope.SINGLETON,
|
|
940
|
+
useFactory: ({ isCustomServer, serverFactory, server }) => {
|
|
941
|
+
return isCustomServer ? serverFactory() : server;
|
|
942
|
+
},
|
|
943
|
+
deps: {
|
|
944
|
+
isCustomServer: IS_CUSTOM_SERVER_TOKEN,
|
|
945
|
+
server: tokensServer.SERVER_TOKEN,
|
|
946
|
+
serverFactory: tokensServerPrivate.SERVER_FACTORY_TOKEN,
|
|
947
|
+
},
|
|
948
|
+
}),
|
|
949
|
+
core.provide({
|
|
950
|
+
provide: tokensServerPrivate.UTILITY_WEB_FASTIFY_APP_TOKEN,
|
|
951
|
+
scope: core.Scope.SINGLETON,
|
|
952
|
+
useFactory: ({ isCustomServer, app, appFactory, server }) => {
|
|
953
|
+
return isCustomServer ? appFactory({ server }) : app;
|
|
954
|
+
},
|
|
955
|
+
deps: {
|
|
956
|
+
isCustomServer: IS_CUSTOM_SERVER_TOKEN,
|
|
957
|
+
app: tokensServerPrivate.WEB_FASTIFY_APP_TOKEN,
|
|
958
|
+
appFactory: tokensServerPrivate.WEB_FASTIFY_APP_FACTORY_TOKEN,
|
|
959
|
+
server: tokensServerPrivate.UTILITY_SERVER_TOKEN,
|
|
960
|
+
},
|
|
961
|
+
}),
|
|
962
|
+
core.provide({
|
|
963
|
+
provide: core.commandLineListTokens.listen,
|
|
964
|
+
multi: true,
|
|
965
|
+
scope: core.Scope.SINGLETON,
|
|
966
|
+
useFactory: ({ logger, isCustomServer, port, app, server }) => {
|
|
967
|
+
return async function utilityServerListen() {
|
|
968
|
+
if (!isCustomServer) {
|
|
969
|
+
return;
|
|
970
|
+
}
|
|
971
|
+
const log = logger('server:utility');
|
|
972
|
+
await app.ready();
|
|
973
|
+
return new Promise((resolve, reject) => {
|
|
974
|
+
server.once('error', (error) => {
|
|
975
|
+
log.error({ event: 'server-listen-port', error });
|
|
976
|
+
reject(error);
|
|
977
|
+
});
|
|
978
|
+
server.listen(port, () => {
|
|
979
|
+
log.warn({ event: 'server-listen-port', message: `Server listen ${port} port` });
|
|
980
|
+
resolve();
|
|
981
|
+
});
|
|
982
|
+
});
|
|
983
|
+
};
|
|
984
|
+
},
|
|
985
|
+
deps: {
|
|
986
|
+
logger: tokensCommon.LOGGER_TOKEN,
|
|
987
|
+
isCustomServer: IS_CUSTOM_SERVER_TOKEN,
|
|
988
|
+
port: tokensServer.UTILITY_SERVER_PORT_TOKEN,
|
|
989
|
+
app: tokensServerPrivate.UTILITY_WEB_FASTIFY_APP_TOKEN,
|
|
990
|
+
server: tokensServerPrivate.UTILITY_SERVER_TOKEN,
|
|
991
|
+
},
|
|
992
|
+
}),
|
|
993
|
+
],
|
|
994
|
+
})
|
|
995
|
+
], UtilityServerModule);
|
|
996
|
+
|
|
906
997
|
exports.ServerModule = class ServerModule {
|
|
907
998
|
};
|
|
908
999
|
exports.ServerModule = tslib.__decorate([
|
|
@@ -915,6 +1006,7 @@ exports.ServerModule = tslib.__decorate([
|
|
|
915
1006
|
ServerGracefulShutdownModule,
|
|
916
1007
|
ServerProxyModule,
|
|
917
1008
|
DependenciesVersionModule,
|
|
1009
|
+
UtilityServerModule,
|
|
918
1010
|
process.env.NODE_ENV !== 'production' && DebugHttpRequestsModule,
|
|
919
1011
|
].filter(Boolean),
|
|
920
1012
|
providers: [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tramvai/module-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.97.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"browser": "lib/browser.js",
|
|
6
6
|
"main": "lib/server.js",
|
|
@@ -23,11 +23,11 @@
|
|
|
23
23
|
"@tinkoff/monkeypatch": "1.3.3",
|
|
24
24
|
"@tinkoff/terminus": "0.0.2",
|
|
25
25
|
"@tinkoff/url": "0.7.37",
|
|
26
|
-
"@tramvai/module-cache-warmup": "1.
|
|
27
|
-
"@tramvai/module-metrics": "1.
|
|
28
|
-
"@tramvai/papi": "1.
|
|
29
|
-
"@tramvai/tokens-server": "1.
|
|
30
|
-
"@tramvai/tokens-server-private": "1.
|
|
26
|
+
"@tramvai/module-cache-warmup": "1.97.0",
|
|
27
|
+
"@tramvai/module-metrics": "1.97.0",
|
|
28
|
+
"@tramvai/papi": "1.97.0",
|
|
29
|
+
"@tramvai/tokens-server": "1.97.0",
|
|
30
|
+
"@tramvai/tokens-server-private": "1.97.0",
|
|
31
31
|
"compression": "^1.7.4",
|
|
32
32
|
"express": "^4.17.1",
|
|
33
33
|
"fastify": "^3.27.4",
|
|
@@ -40,11 +40,11 @@
|
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"@tinkoff/dippy": "0.7.39",
|
|
42
42
|
"@tinkoff/utils": "^2.1.2",
|
|
43
|
-
"@tramvai/cli": "1.
|
|
44
|
-
"@tramvai/core": "1.
|
|
45
|
-
"@tramvai/module-common": "1.
|
|
46
|
-
"@tramvai/module-environment": "1.
|
|
47
|
-
"@tramvai/tokens-common": "1.
|
|
43
|
+
"@tramvai/cli": "1.97.0",
|
|
44
|
+
"@tramvai/core": "1.97.0",
|
|
45
|
+
"@tramvai/module-common": "1.97.0",
|
|
46
|
+
"@tramvai/module-environment": "1.97.0",
|
|
47
|
+
"@tramvai/tokens-common": "1.97.0",
|
|
48
48
|
"tslib": "^2.0.3"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|