@tramvai/cli 3.26.2 → 3.27.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.
Files changed (109) hide show
  1. package/lib/api/shared/providers/selfSignedCertificateProvider.d.ts +3 -0
  2. package/lib/api/shared/providers/selfSignedCertificateProvider.d.ts.map +1 -0
  3. package/lib/api/shared/providers/selfSignedCertificateProvider.js +27 -0
  4. package/lib/api/shared/providers/selfSignedCertificateProvider.js.map +1 -0
  5. package/lib/api/shared/types/base.d.ts +4 -0
  6. package/lib/api/shared/types/base.d.ts.map +1 -1
  7. package/lib/api/shared/utils/selfSignedCertificate/certificatedHostsList.d.ts +4 -0
  8. package/lib/api/shared/utils/selfSignedCertificate/certificatedHostsList.d.ts.map +1 -0
  9. package/lib/api/shared/utils/selfSignedCertificate/certificatedHostsList.js +22 -0
  10. package/lib/api/shared/utils/selfSignedCertificate/certificatedHostsList.js.map +1 -0
  11. package/lib/api/shared/utils/selfSignedCertificate/common.d.ts +3 -0
  12. package/lib/api/shared/utils/selfSignedCertificate/common.d.ts.map +1 -0
  13. package/lib/api/shared/utils/selfSignedCertificate/common.js +8 -0
  14. package/lib/api/shared/utils/selfSignedCertificate/common.js.map +1 -0
  15. package/lib/api/shared/utils/selfSignedCertificate/createSelfSignedCertificate.d.ts +9 -0
  16. package/lib/api/shared/utils/selfSignedCertificate/createSelfSignedCertificate.d.ts.map +1 -0
  17. package/lib/api/shared/utils/selfSignedCertificate/createSelfSignedCertificate.js +64 -0
  18. package/lib/api/shared/utils/selfSignedCertificate/createSelfSignedCertificate.js.map +1 -0
  19. package/lib/api/shared/utils/selfSignedCertificate/getHosts.d.ts +3 -0
  20. package/lib/api/shared/utils/selfSignedCertificate/getHosts.d.ts.map +1 -0
  21. package/lib/api/shared/utils/selfSignedCertificate/getHosts.js +32 -0
  22. package/lib/api/shared/utils/selfSignedCertificate/getHosts.js.map +1 -0
  23. package/lib/api/start/index.d.ts +3 -0
  24. package/lib/api/start/index.d.ts.map +1 -1
  25. package/lib/api/start/index.js.map +1 -1
  26. package/lib/api/start/providers/application/server.d.ts.map +1 -1
  27. package/lib/api/start/providers/application/server.js +14 -3
  28. package/lib/api/start/providers/application/server.js.map +1 -1
  29. package/lib/api/start/providers/application/shared.d.ts.map +1 -1
  30. package/lib/api/start/providers/application/shared.js +11 -1
  31. package/lib/api/start/providers/application/shared.js.map +1 -1
  32. package/lib/api/start/utils/banner.d.ts.map +1 -1
  33. package/lib/api/start/utils/banner.js +8 -2
  34. package/lib/api/start/utils/banner.js.map +1 -1
  35. package/lib/api/start/utils/createServer.d.ts +3 -1
  36. package/lib/api/start/utils/createServer.d.ts.map +1 -1
  37. package/lib/api/start/utils/createServer.js +16 -1
  38. package/lib/api/start/utils/createServer.js.map +1 -1
  39. package/lib/api/start-prod/providers/application.d.ts.map +1 -1
  40. package/lib/api/start-prod/providers/application.js +24 -3
  41. package/lib/api/start-prod/providers/application.js.map +1 -1
  42. package/lib/api/start-prod/providers/child-app.d.ts.map +1 -1
  43. package/lib/api/start-prod/providers/child-app.js +5 -0
  44. package/lib/api/start-prod/providers/child-app.js.map +1 -1
  45. package/lib/api/start-prod/providers/shared.d.ts.map +1 -1
  46. package/lib/api/start-prod/providers/shared.js +0 -5
  47. package/lib/api/start-prod/providers/shared.js.map +1 -1
  48. package/lib/builder/webpack/devServer/server.d.ts.map +1 -1
  49. package/lib/builder/webpack/devServer/server.js +6 -1
  50. package/lib/builder/webpack/devServer/server.js.map +1 -1
  51. package/lib/builder/webpack/tokens.d.ts +3 -0
  52. package/lib/builder/webpack/tokens.d.ts.map +1 -1
  53. package/lib/commands/start/command.d.ts.map +1 -1
  54. package/lib/commands/start/command.js +16 -0
  55. package/lib/commands/start/command.js.map +1 -1
  56. package/lib/commands/start-prod/command.d.ts.map +1 -1
  57. package/lib/commands/start-prod/command.js +16 -0
  58. package/lib/commands/start-prod/command.js.map +1 -1
  59. package/lib/commands/static/application.d.ts.map +1 -1
  60. package/lib/commands/static/application.js +1 -1
  61. package/lib/commands/static/application.js.map +1 -1
  62. package/lib/config/configManager.d.ts +2 -0
  63. package/lib/config/configManager.d.ts.map +1 -1
  64. package/lib/config/configManager.js +2 -2
  65. package/lib/config/configManager.js.map +1 -1
  66. package/lib/di/tokens/config.d.ts +1 -0
  67. package/lib/di/tokens/config.d.ts.map +1 -1
  68. package/lib/di/tokens/server.d.ts +6 -0
  69. package/lib/di/tokens/server.d.ts.map +1 -1
  70. package/lib/di/tokens/server.js +2 -1
  71. package/lib/di/tokens/server.js.map +1 -1
  72. package/lib/library/webpack/application/client/dev.d.ts.map +1 -1
  73. package/lib/library/webpack/application/client/dev.js +6 -1
  74. package/lib/library/webpack/application/client/dev.js.map +1 -1
  75. package/lib/library/webpack/application/server/dev.d.ts.map +1 -1
  76. package/lib/library/webpack/application/server/dev.js +6 -1
  77. package/lib/library/webpack/application/server/dev.js.map +1 -1
  78. package/lib/schema/autogeneratedSchema.json +15 -15
  79. package/lib/utils/getApplicationUrl.d.ts +6 -0
  80. package/lib/utils/getApplicationUrl.d.ts.map +1 -0
  81. package/lib/utils/getApplicationUrl.js +8 -0
  82. package/lib/utils/getApplicationUrl.js.map +1 -0
  83. package/package.json +3 -3
  84. package/schema.json +15 -15
  85. package/src/api/shared/providers/selfSignedCertificateProvider.ts +29 -0
  86. package/src/api/shared/types/base.ts +5 -0
  87. package/src/api/shared/utils/selfSignedCertificate/certificatedHostsList.ts +22 -0
  88. package/src/api/shared/utils/selfSignedCertificate/common.ts +4 -0
  89. package/src/api/shared/utils/selfSignedCertificate/createSelfSignedCertificate.spec.ts +154 -0
  90. package/src/api/shared/utils/selfSignedCertificate/createSelfSignedCertificate.ts +99 -0
  91. package/src/api/shared/utils/selfSignedCertificate/getHosts.ts +31 -0
  92. package/src/api/start/index.ts +3 -0
  93. package/src/api/start/providers/application/server.ts +21 -5
  94. package/src/api/start/providers/application/shared.ts +12 -2
  95. package/src/api/start/utils/banner.ts +12 -4
  96. package/src/api/start/utils/createServer.ts +19 -1
  97. package/src/api/start-prod/providers/application.ts +27 -3
  98. package/src/api/start-prod/providers/child-app.ts +6 -0
  99. package/src/api/start-prod/providers/shared.ts +0 -5
  100. package/src/builder/webpack/devServer/server.ts +6 -1
  101. package/src/commands/start/command.ts +16 -0
  102. package/src/commands/start-prod/command.ts +16 -0
  103. package/src/commands/static/application.ts +3 -1
  104. package/src/config/configManager.ts +7 -4
  105. package/src/di/tokens/server.ts +5 -0
  106. package/src/library/webpack/application/client/dev.ts +6 -3
  107. package/src/library/webpack/application/server/dev.ts +6 -3
  108. package/src/schema/autogeneratedSchema.json +15 -15
  109. package/src/utils/getApplicationUrl.ts +11 -0
@@ -7,6 +7,8 @@ import {
7
7
  CONFIG_ENTRY_TOKEN,
8
8
  CONFIG_MANAGER_TOKEN,
9
9
  PORT_MANAGER_TOKEN,
10
+ SELF_SIGNED_CERTIFICATE_TOKEN,
11
+ STATIC_SERVER_TOKEN,
10
12
  } from '../../../di/tokens';
11
13
  import type { ApplicationConfigEntry } from '../../../typings/configEntry/application';
12
14
  import { CLOSE_HANDLER_TOKEN, SERVER_PROCESS_TOKEN } from '../tokens';
@@ -14,8 +16,23 @@ import { DEBUG_ARGV } from '../../../config/constants';
14
16
  import { safeRequire } from '../../../utils/safeRequire';
15
17
  import type { ConfigManager } from '../../../config/configManager';
16
18
  import { createConfigManager } from '../../../config/configManager';
19
+ import { selfSignedCertificateProvider } from '../../shared/providers/selfSignedCertificateProvider';
20
+ import { createServer } from '../../start/utils/createServer';
17
21
 
18
22
  export const applicationsProviders: readonly Provider[] = [
23
+ ...selfSignedCertificateProvider,
24
+ provide({
25
+ provide: STATIC_SERVER_TOKEN,
26
+ useFactory: ({ selfSignedCertificate }) => {
27
+ return createServer(selfSignedCertificate);
28
+ },
29
+ deps: {
30
+ selfSignedCertificate: {
31
+ token: SELF_SIGNED_CERTIFICATE_TOKEN,
32
+ optional: true,
33
+ },
34
+ },
35
+ }),
19
36
  provide({
20
37
  provide: CONFIG_MANAGER_TOKEN,
21
38
  useFactory: ({ configEntry, parameters, portManager }) =>
@@ -35,16 +52,15 @@ export const applicationsProviders: readonly Provider[] = [
35
52
  }),
36
53
  provide({
37
54
  provide: SERVER_PROCESS_TOKEN,
38
- useFactory: ({ configManager, parameters }) => {
55
+ useFactory: ({ configManager, parameters, selfSignedCertificate }) => {
39
56
  const { env } = parameters;
40
57
  const serverConfigManager = (
41
58
  configManager as ConfigManager<ApplicationConfigEntry>
42
59
  ).withSettings({
43
60
  buildType: 'server',
44
61
  });
45
- const { debug, port, assetsPrefix } = serverConfigManager;
62
+ const { debug, port, assetsPrefix, https } = serverConfigManager;
46
63
  const root = serverConfigManager.buildPath;
47
-
48
64
  return fork(path.resolve(root, 'server.js'), [], {
49
65
  execArgv: debug ? DEBUG_ARGV : [],
50
66
  cwd: root,
@@ -58,12 +74,20 @@ export const applicationsProviders: readonly Provider[] = [
58
74
  PORT: `${port}`,
59
75
  PORT_SERVER: `${port}`,
60
76
  ASSETS_PREFIX: assetsPrefix,
77
+ HOST: serverConfigManager.host,
78
+ HTTPS: serverConfigManager.https
79
+ ? JSON.stringify({
80
+ key: selfSignedCertificate.keyPath,
81
+ cert: selfSignedCertificate.certificatePath,
82
+ })
83
+ : null,
61
84
  },
62
85
  });
63
86
  },
64
87
  deps: {
65
88
  configManager: CONFIG_MANAGER_TOKEN,
66
89
  parameters: COMMAND_PARAMETERS_TOKEN,
90
+ selfSignedCertificate: SELF_SIGNED_CERTIFICATE_TOKEN,
67
91
  },
68
92
  }),
69
93
  provide({
@@ -5,11 +5,17 @@ import {
5
5
  CONFIG_ENTRY_TOKEN,
6
6
  CONFIG_MANAGER_TOKEN,
7
7
  PORT_MANAGER_TOKEN,
8
+ STATIC_SERVER_TOKEN,
8
9
  } from '../../../di/tokens';
9
10
  import { createConfigManager } from '../../../config/configManager';
10
11
  import type { ChildAppConfigEntry } from '../../../typings/configEntry/child-app';
12
+ import { createServer } from '../../start/utils/createServer';
11
13
 
12
14
  export const childAppProviders: readonly Provider[] = [
15
+ provide({
16
+ provide: STATIC_SERVER_TOKEN,
17
+ useFactory: createServer,
18
+ }),
13
19
  provide({
14
20
  provide: CONFIG_MANAGER_TOKEN,
15
21
  useFactory: ({ configEntry, parameters, portManager }) =>
@@ -6,16 +6,11 @@ import fastifyStatic from '@fastify/static';
6
6
  import zlib from 'zlib';
7
7
  import { CLOSE_HANDLER_TOKEN, INIT_HANDLER_TOKEN, PROCESS_HANDLER_TOKEN } from '../tokens';
8
8
  import { CONFIG_MANAGER_TOKEN, PORT_MANAGER_TOKEN, STATIC_SERVER_TOKEN } from '../../../di/tokens';
9
- import { createServer } from '../../start/utils/createServer';
10
9
  import { stopServer } from '../../start/utils/stopServer';
11
10
  import { listenServer } from '../../start/utils/listenServer';
12
11
  import { isApplication, isChildApp } from '../../../config/validate';
13
12
 
14
13
  export const sharedProviders: readonly Provider[] = [
15
- provide({
16
- provide: STATIC_SERVER_TOKEN,
17
- useFactory: createServer,
18
- }),
19
14
  provide({
20
15
  provide: INIT_HANDLER_TOKEN,
21
16
  multi: true,
@@ -17,6 +17,7 @@ import { ThreadWorkerBridge } from './pool/thread/pool';
17
17
  import { createWorkerPool } from './pool/pool';
18
18
  import type { SERVER_TOKEN } from '../../../di/tokens';
19
19
  import { CLOSE_HANDLER_TOKEN } from '../tokens';
20
+ import { getApplicationUrl } from '../../../utils/getApplicationUrl';
20
21
 
21
22
  const EXITED_UNEXPECTEDLY = `
22
23
 
@@ -59,7 +60,11 @@ export const serverRunner = ({
59
60
  const file = `${Object.keys(config.entryPoints.entries())[0]}.js`;
60
61
  const filename = path.resolve(config.output.get('path'), file);
61
62
  // настоящая ссылка на файл используется для отладки в debug режиме
62
- const realFilename = `http://${configManager.staticHost}:${configManager.staticPort}/${configManager.output.server}/${file}`;
63
+ const realFilename = `${getApplicationUrl({
64
+ host: configManager.staticHost,
65
+ port: configManager.staticPort,
66
+ protocol: configManager.httpProtocol,
67
+ })}/${configManager.output.server}/${file}`;
63
68
  const serverCompiler = compiler.compilers.find((comp) => comp.name === 'server');
64
69
 
65
70
  if (!serverCompiler) {
@@ -111,6 +111,22 @@ export class StartCommand extends CLICommand<Params> {
111
111
  transformer: (value: string) => value !== 'false',
112
112
  description: 'Enable/disable persistent file cache for used cli builder',
113
113
  },
114
+ {
115
+ name: '--https',
116
+ value: '[https]',
117
+ transformer: (value: string) => value !== 'false',
118
+ description: 'Enable/disable https protocol for application',
119
+ },
120
+ {
121
+ name: '--httpsKey',
122
+ value: '[httpsKey]',
123
+ description: 'Path to https key certificate',
124
+ },
125
+ {
126
+ name: '--httpsCert',
127
+ value: '[httpsCert]',
128
+ description: 'Path to https certificate',
129
+ },
114
130
  ];
115
131
 
116
132
  alias = 's';
@@ -85,6 +85,22 @@ export class StartProdCommand extends CLICommand<Params> {
85
85
  transformer: (value: string) => value !== 'false',
86
86
  description: 'Enable/disable persistent file cache for used cli builder',
87
87
  },
88
+ {
89
+ name: '--https',
90
+ value: '[https]',
91
+ transformer: (value: string) => value !== 'false',
92
+ description: 'Enable/disable https protocol for application',
93
+ },
94
+ {
95
+ name: '--httpsKey',
96
+ value: '[httpsKey]',
97
+ description: 'Path to https key certificate',
98
+ },
99
+ {
100
+ name: '--httpsCert',
101
+ value: '[httpsCert]',
102
+ description: 'Path to https certificate',
103
+ },
88
104
  ];
89
105
 
90
106
  alias = 'sp';
@@ -127,7 +127,9 @@ export const staticApp = async (
127
127
  handleServerOutput(context.logger, chunk);
128
128
  });
129
129
 
130
- const readinessProbePath = `http://localhost:${envVariables.UTILITY_SERVER_PORT ?? port}/readyz`;
130
+ const readinessProbePath = `${clientConfigManager.httpProtocol}://localhost:${
131
+ envVariables.UTILITY_SERVER_PORT ?? port
132
+ }/readyz`;
131
133
 
132
134
  await Promise.race([
133
135
  server,
@@ -30,6 +30,7 @@ export interface Settings<E extends Env> {
30
30
  trace?: boolean;
31
31
  sourceMap?: boolean;
32
32
  host?: string;
33
+ https?: boolean;
33
34
  port?: number;
34
35
  staticHost?: string;
35
36
  staticPort?: number;
@@ -93,6 +94,7 @@ export type ConfigManager<
93
94
  withSettings(settings: Settings<E>): ConfigManager<C, E>;
94
95
  dehydrate(): [C, Settings<E>];
95
96
  assetsPrefix?: string;
97
+ httpProtocol?: 'https' | 'http';
96
98
  };
97
99
 
98
100
  export const DEFAULT_STATIC_HOST = 'localhost';
@@ -137,6 +139,8 @@ export const createConfigManager = <C extends ConfigEntry = ConfigEntry, E exten
137
139
  'unknown',
138
140
  trace: false,
139
141
  host: '0.0.0.0',
142
+ https: !!settings.https,
143
+ httpProtocol: settings.https ? 'https' : 'http',
140
144
  profile: false,
141
145
  noClientRebuild: false,
142
146
  noServerRebuild: false,
@@ -196,10 +200,9 @@ export const createConfigManager = <C extends ConfigEntry = ConfigEntry, E exten
196
200
  config.assetsPrefix =
197
201
  process.env.ASSETS_PREFIX && process.env.ASSETS_PREFIX !== 'static'
198
202
  ? process.env.ASSETS_PREFIX
199
- : `http://${config.staticHost}:${config.staticPort}/${config.output.client.replace(
200
- /\/$/,
201
- ''
202
- )}/`;
203
+ : `${config.httpProtocol}://${config.staticHost}:${
204
+ config.staticPort
205
+ }/${config.output.client.replace(/\/$/, '')}/`;
203
206
  config.buildPath = resolve(
204
207
  rootDir,
205
208
  buildType === 'server' ? config.output.server : config.output.client
@@ -4,3 +4,8 @@ import type { StoppableServer } from 'stoppable';
4
4
  export const SERVER_TOKEN = createToken<StoppableServer>('server server');
5
5
 
6
6
  export const STATIC_SERVER_TOKEN = createToken<StoppableServer>('server staticServer');
7
+
8
+ export const SELF_SIGNED_CERTIFICATE_TOKEN = createToken<{
9
+ keyPath: string;
10
+ certificatePath: string;
11
+ }>('self signed certificates token');
@@ -22,6 +22,7 @@ import FancyReporter from '../../plugins/WebpackBar/reporters/fancy';
22
22
  import { extendEntry } from '../../utils/extendEntry';
23
23
  import { extractCssPluginFactory } from '../../blocks/extractCssPlugin';
24
24
  import { splitChunksConfig } from './prod/optimization/splitChunks';
25
+ import { getApplicationUrl } from '../../../../utils/getApplicationUrl';
25
26
 
26
27
  // eslint-disable-next-line max-statements
27
28
  export const webpackClientConfig = ({
@@ -66,9 +67,11 @@ export const webpackClientConfig = ({
66
67
  config.output
67
68
  .path(configManager.buildPath)
68
69
  .publicPath(
69
- `http://${configManager.staticHost}:${
70
- configManager.staticPort
71
- }/${configManager.output.client.replace(/\/$/, '')}/`
70
+ `${getApplicationUrl({
71
+ host: configManager.staticHost,
72
+ port: configManager.staticPort,
73
+ protocol: configManager.httpProtocol,
74
+ })}/${configManager.output.client.replace(/\/$/, '')}/`
72
75
  )
73
76
  .filename('[name].js')
74
77
  .chunkFilename('[name].chunk.js')
@@ -13,6 +13,7 @@ import configResolve from '../../blocks/configResolve';
13
13
  import type { UI_SHOW_PROGRESS_TOKEN } from '../../../../di/tokens';
14
14
  import sourcemaps from '../../blocks/sourcemaps';
15
15
  import FancyReporter from '../../plugins/WebpackBar/reporters/fancy';
16
+ import { getApplicationUrl } from '../../../../utils/getApplicationUrl';
16
17
 
17
18
  export const webpackServerConfig = ({
18
19
  configManager,
@@ -91,9 +92,11 @@ export const webpackServerConfig = ({
91
92
  {
92
93
  publicPath: process.env.ASSETS_PREFIX
93
94
  ? 'process.env.ASSETS_PREFIX'
94
- : `"http://${configManager.staticHost}:${
95
- configManager.staticPort
96
- }/${configManager.output.client.replace(/\/$/, '')}/"`,
95
+ : `"${getApplicationUrl({
96
+ host: configManager.staticHost,
97
+ port: configManager.staticPort,
98
+ protocol: configManager.httpProtocol,
99
+ })}/${configManager.output.client.replace(/\/$/, '')}/"`,
97
100
  },
98
101
  ]);
99
102
 
@@ -1144,23 +1144,23 @@
1144
1144
  "dotAll": {
1145
1145
  "type": "boolean"
1146
1146
  },
1147
- "__@match@6849": {
1147
+ "__@match@6855": {
1148
1148
  "type": "object",
1149
1149
  "additionalProperties": false
1150
1150
  },
1151
- "__@replace@6851": {
1151
+ "__@replace@6857": {
1152
1152
  "type": "object",
1153
1153
  "additionalProperties": false
1154
1154
  },
1155
- "__@search@6854": {
1155
+ "__@search@6860": {
1156
1156
  "type": "object",
1157
1157
  "additionalProperties": false
1158
1158
  },
1159
- "__@split@6856": {
1159
+ "__@split@6862": {
1160
1160
  "type": "object",
1161
1161
  "additionalProperties": false
1162
1162
  },
1163
- "__@matchAll@6858": {
1163
+ "__@matchAll@6864": {
1164
1164
  "type": "object",
1165
1165
  "additionalProperties": false
1166
1166
  }
@@ -1813,23 +1813,23 @@
1813
1813
  "dotAll": {
1814
1814
  "type": "boolean"
1815
1815
  },
1816
- "__@match@6849": {
1816
+ "__@match@6855": {
1817
1817
  "type": "object",
1818
1818
  "additionalProperties": false
1819
1819
  },
1820
- "__@replace@6851": {
1820
+ "__@replace@6857": {
1821
1821
  "type": "object",
1822
1822
  "additionalProperties": false
1823
1823
  },
1824
- "__@search@6854": {
1824
+ "__@search@6860": {
1825
1825
  "type": "object",
1826
1826
  "additionalProperties": false
1827
1827
  },
1828
- "__@split@6856": {
1828
+ "__@split@6862": {
1829
1829
  "type": "object",
1830
1830
  "additionalProperties": false
1831
1831
  },
1832
- "__@matchAll@6858": {
1832
+ "__@matchAll@6864": {
1833
1833
  "type": "object",
1834
1834
  "additionalProperties": false
1835
1835
  }
@@ -2482,23 +2482,23 @@
2482
2482
  "dotAll": {
2483
2483
  "type": "boolean"
2484
2484
  },
2485
- "__@match@6849": {
2485
+ "__@match@6855": {
2486
2486
  "type": "object",
2487
2487
  "additionalProperties": false
2488
2488
  },
2489
- "__@replace@6851": {
2489
+ "__@replace@6857": {
2490
2490
  "type": "object",
2491
2491
  "additionalProperties": false
2492
2492
  },
2493
- "__@search@6854": {
2493
+ "__@search@6860": {
2494
2494
  "type": "object",
2495
2495
  "additionalProperties": false
2496
2496
  },
2497
- "__@split@6856": {
2497
+ "__@split@6862": {
2498
2498
  "type": "object",
2499
2499
  "additionalProperties": false
2500
2500
  },
2501
- "__@matchAll@6858": {
2501
+ "__@matchAll@6864": {
2502
2502
  "type": "object",
2503
2503
  "additionalProperties": false
2504
2504
  }
@@ -0,0 +1,11 @@
1
+ export const getApplicationUrl = ({
2
+ protocol,
3
+ host,
4
+ port,
5
+ }: {
6
+ protocol: 'https' | 'http';
7
+ host: string;
8
+ port: number;
9
+ }) => {
10
+ return `${protocol}://${host}:${port}`;
11
+ };