@tramvai/module-application-monitoring 6.82.10 → 6.82.12

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 CHANGED
@@ -1,278 +1,3 @@
1
1
  # @tramvai/module-application-monitoring
2
2
 
3
- Tramvai module for collecting and sending application health monitoring events throughout the application lifecycle.
4
-
5
- ## Overview
6
-
7
- Tramvai application's health and performance monitoring. It monitors critical lifecycle events from HTML parsing through app initialization and rendering, capturing errors and performance metrics along the way.
8
-
9
- ### Monitored Events
10
-
11
- | Event | Description | Trigger Point |
12
- | --- | --- | --- |
13
- | `html-opened` | HTML document parsed and ready | Document parse complete |
14
- | `assets-loaded` | All critical assets loaded successfully | Window load event |
15
- | `assets-load-failed` | One or more critical assets failed to load | Window load event (with errors) |
16
- | `app:initialized` | Application initialization complete | After 'init' command line |
17
- | `app:initialize-failed` | Application failed to initialize | App init error |
18
- | `app:rendered` | Application rendered successfully | After successful app render |
19
- | `app:render-failed` | Application rendering failed | Error boundary or renderer callback |
20
- | `react:render` | React rendered successfully | After successful react render |
21
- | `react:error` | React rendered with error | The error occure while react hydration, it can be uncaughtError,caughtError or recoverableError |
22
- | `app:render-failed` | Application rendering failed | Error boundary or renderer callback |
23
-
24
- | `unhandled-error` | Unhandled promise rejection | Global unhandledrejection event |
25
-
26
- ## Installation
27
-
28
- ```bash
29
- npm install @tramvai/module-application-monitoring
30
- ```
31
-
32
- Or with yarn:
33
-
34
- ```bash
35
- yarn add @tramvai/module-application-monitoring
36
- ```
37
-
38
- ## Basic Usage
39
-
40
- ### 1. Register the Module
41
-
42
- Add the module to your Tramvai application:
43
-
44
- ```typescript
45
- import { createApp } from '@tramvai/core';
46
- import { ApplicationMonitoringModule } from '@tramvai/module-application-monitoring';
47
-
48
- createApp({
49
- name: 'my-app',
50
- modules: [ApplicationMonitoringModule],
51
- });
52
- ```
53
-
54
- ### 2. Provide an Inline Reporter Factory
55
-
56
- Inline reporter are used to capture lifecycle events and send them to a monitoring service (like an analytics tool or error logger). Inline reporters are injected into the HTML during server-side rendering. This allows to detect errors and performance issues early, even before the app is fully up and running.
57
-
58
- Key Events Sent Through Inline Reporters:
59
-
60
- - **HTML Opened** (`html-opened`): Tracks when the HTML is parsed and ready.
61
- - **Assets Loaded** (`assets-loaded`) / Assets Load Failed (`**assets-load-failed**`): Tracks the success/failure of loading assets (JS, CSS, etc.).
62
- - **App Start Failed** (`app-start-failed`): Tracks initialization errors.
63
- - **Unhandled Errors** (`unhandled-error`): Tracks unhandled errors or promise rejections.
64
-
65
- The module requires an inline reporter factory to send events to your monitoring service. To do this provide `INLINE_REPORTER_FACTORY_SCRIPT_TOKEN` using inline script or object
66
-
67
- ```typescript
68
- import { provide } from '@tramvai/core';
69
- import { INLINE_REPORTER_FACTORY_SCRIPT_TOKEN } from '@tramvai/module-application-monitoring';
70
-
71
- const providers = [
72
- provide({
73
- provide: INLINE_REPORTER_FACTORY_SCRIPT_TOKEN,
74
- useValue: (parameters) => {
75
- return {
76
- send(eventName, payload) {
77
- fetch('/api/monitoring', {
78
- method: 'POST',
79
- headers: { 'Content-Type': 'application/json' },
80
- body: JSON.stringify({
81
- event: eventName,
82
- ...parameters,
83
- ...payload,
84
- timestamp: Date.now(),
85
- }),
86
- });
87
- },
88
- };
89
- },
90
- }),
91
- ];
92
- ```
93
-
94
- ```typescript
95
- import { provide } from '@tramvai/core';
96
- import { INLINE_REPORTER_FACTORY_SCRIPT_TOKEN } from '@tramvai/module-application-monitoring';
97
- import { inlineReporterFactoryScript } from './inlineReporter.inline';
98
-
99
- const providers = [
100
- provide({
101
- provide: INLINE_REPORTER_FACTORY_SCRIPT_TOKEN,
102
- useFactory: () => {
103
- return inlineReporterFactoryScript;
104
- },
105
- }),
106
- ];
107
- ```
108
-
109
- ## Configuration
110
-
111
- ### Tokens
112
-
113
- #### INLINE_REPORTER_PARAMETERS_TOKEN
114
-
115
- **Example: Adding Custom Parameters**
116
-
117
- ```typescript
118
- import { provide } from '@tramvai/core';
119
- import { INLINE_REPORTER_PARAMETERS_TOKEN } from '@tramvai/module-application-monitoring';
120
-
121
- provide({
122
- provide: INLINE_REPORTER_PARAMETERS_TOKEN,
123
- useFactory: ({ appInfo, envManager }) => {
124
- return {
125
- appName: appInfo.appName,
126
- appRelease: envManager.get('APP_RELEASE'),
127
- appVersion: envManager.get('APP_VERSION'),
128
- environment: envManager.get('NODE_ENV'),
129
- region: envManager.get('DEPLOY_REGION'),
130
- };
131
- },
132
- deps: {
133
- envManager: ENV_MANAGER_TOKEN,
134
- appInfo: APP_INFO_TOKEN,
135
- },
136
- });
137
- ```
138
-
139
- ### How to configure monitoring for main Tramvai events
140
-
141
- There is a possibility to monitor the main events that occur while the Tramvai application is being initialized. Here is a list of these events:
142
-
143
- - `app:initialized`
144
- - `app:initialize-failed`
145
- - `app:rendered`
146
- - `app:render-failed`
147
- - `react:render`
148
- - `react:error`
149
-
150
- When you are using ApplicationMonitoringModule, these events are sent to your logger by default. But in some cases, you will need custom metrics. Here is an example of how to do this:
151
-
152
- ```typescript
153
- import { provide } from '@tramvai/core';
154
- import { TRAMVAI_HOOKS_TOKEN, commandLineListTokens } from '@tramvai/core';
155
-
156
- const providers = [
157
- provide({
158
- provide: commandLineListTokens.init,
159
- useFactory: ({ tramvaiHooks }) => {
160
- hooks['app:initialized'].tap('app-init', () => {
161
- fetch('/api/monitoring', {
162
- method: 'POST',
163
- headers: { 'Content-Type': 'application/json' },
164
- body: JSON.stringify({
165
- event: 'app-initialized',
166
- ...parameters,
167
- ...payload,
168
- timestamp: Date.now(),
169
- }),
170
- });
171
- });
172
- hooks['app:initialize-failed'].tap('app-init-failed', (_, { error }) => {
173
- fetch('/api/monitoring', {
174
- method: 'POST',
175
- headers: { 'Content-Type': 'application/json' },
176
- body: JSON.stringify({
177
- event: 'app-initialize-failed',
178
- ...error,
179
- ...parameters,
180
- ...payload,
181
- timestamp: Date.now(),
182
- }),
183
- });
184
- });
185
- hooks['app:rendered'].tap('app-rendered', () => {
186
- fetch('/api/monitoring', {
187
- method: 'POST',
188
- headers: { 'Content-Type': 'application/json' },
189
- body: JSON.stringify({
190
- event: 'app-rendered',
191
- ...parameters,
192
- ...payload,
193
- timestamp: Date.now(),
194
- }),
195
- });
196
- s;
197
- });
198
- hooks['app:render-failed'].tap('app-render-failed', (_, { error }) => {
199
- fetch('/api/monitoring', {
200
- method: 'POST',
201
- headers: { 'Content-Type': 'application/json' },
202
- body: JSON.stringify({
203
- event: 'app-render-failed',
204
- error,
205
- ...parameters,
206
- ...payload,
207
- timestamp: Date.now(),
208
- }),
209
- });
210
- s;
211
- });
212
-
213
- hooks['react:render'].tap('react-render', () => {
214
- fetch('/api/monitoring', {
215
- method: 'POST',
216
- headers: { 'Content-Type': 'application/json' },
217
- body: JSON.stringify({
218
- event: eventName,
219
- ...parameters,
220
- ...payload,
221
- timestamp: Date.now(),
222
- }),
223
- });
224
- });
225
-
226
- hooks['react:error'].tap('react-error', (_, { error }) => {
227
- fetch('/api/monitoring', {
228
- method: 'POST',
229
- headers: { 'Content-Type': 'application/json' },
230
- body: JSON.stringify({
231
- error,
232
- event: 'react-error',
233
- ...parameters,
234
- ...payload,
235
- timestamp: Date.now(),
236
- }),
237
- });
238
- });
239
- },
240
- deps: {
241
- tramvaiHooks: TRAMVAI_HOOKS_TOKEN,
242
- },
243
- }),
244
- ];
245
- ```
246
-
247
- ## How It Works
248
-
249
- ### Server-Side
250
-
251
- 1. **Inline Scripts Injection**: The module injects monitoring scripts into the HTML `<head>` during server-side rendering
252
- 2. **Early Monitoring**: Scripts execute immediately to catch early errors and events
253
- 3. **Reporter Initialization**: The inline reporter factory creates a global reporter instance
254
- 4. **Hook Registration**: Server-side hooks are registered to track initialization events
255
-
256
- ### Client-Side
257
-
258
- 1. **HTML Opened**: First script executes when HTML is parsed
259
- 2. **Asset Monitoring**: Error listeners track script/link loading failures
260
- 3. **App Creation**: Monitors unhandled errors during app bootstrap
261
- 4. **Initialization**: Tracks when app completes initialization
262
- 5. **Rendering**: Integrates with error boundaries and renderer callbacks
263
-
264
- ### Event Flow
265
-
266
- ```
267
- HTML Parse → html-opened
268
-
269
- Asset Loading → assets-loaded / assets-load-failed
270
-
271
- App Bootstrap → app-start-failed (on error)
272
-
273
- App Init → app-initialized
274
-
275
- App Render → app-rendered / app-render-failed
276
-
277
- Runtime → unhandled-error (if occurs)
278
- ```
3
+ [Actual documentation](03-features/014-monitoring/04-application-health.md)
package/lib/browser.js CHANGED
@@ -1,11 +1,61 @@
1
- import { declareModule } from '@tramvai/core';
2
- import { sharedProviders } from './sharedProviders.browser.js';
1
+ import { declareModule, provide, commandLineListTokens, TRAMVAI_HOOKS_TOKEN } from '@tramvai/core';
2
+ import { LOGGER_TOKEN } from '@tramvai/module-common';
3
+ import { LOGGER_NAME } from './constants.browser.js';
3
4
  export { INLINE_REPORTER_FACTORY_SCRIPT_TOKEN, INLINE_REPORTER_PARAMETERS_TOKEN } from './tokens.browser.js';
4
5
 
5
6
  const ApplicationMonitoringModule = declareModule({
6
7
  name: 'ApplicationMonitoringModule',
7
8
  imports: [],
8
- providers: [...sharedProviders],
9
+ providers: [
10
+ provide({
11
+ provide: commandLineListTokens.init,
12
+ useFactory: ({ logger, tramvaiHooks }) => {
13
+ const log = logger({
14
+ name: LOGGER_NAME,
15
+ });
16
+ return function applicationHealthSubscribe() {
17
+ let applicationRenderFinished = false;
18
+ tramvaiHooks['app:initialized'].tap('application-health', () => {
19
+ log.info({ event: 'app:initialized' });
20
+ });
21
+ tramvaiHooks['app:initialize-failed'].tap('application-health', () => {
22
+ log.info({ event: 'app:initialized-failed' });
23
+ });
24
+ tramvaiHooks['app:rendered'].tap('application-health', () => {
25
+ log.info({ event: 'app:rendered' });
26
+ });
27
+ tramvaiHooks['react:render'].tap('application-health', () => {
28
+ log.info({ event: 'react:render' });
29
+ if (!applicationRenderFinished) {
30
+ applicationRenderFinished = true;
31
+ tramvaiHooks['app:rendered'].call({});
32
+ }
33
+ });
34
+ tramvaiHooks['app:render-failed'].tap('application-health', (_, { error }) => {
35
+ log.error({ event: 'app:render-failed', error });
36
+ });
37
+ tramvaiHooks['react:error'].tap('application-health', (_, { event, error, errorInfo, otherErrors }) => {
38
+ log.error({ event: 'react:error', error, errorInfo, otherErrors });
39
+ switch (event) {
40
+ case 'page-error-boundary':
41
+ case 'hydrate:on-uncaught-error':
42
+ case 'hydrate:failed': {
43
+ if (!applicationRenderFinished) {
44
+ applicationRenderFinished = true;
45
+ tramvaiHooks['app:render-failed'].call({ error });
46
+ }
47
+ break;
48
+ }
49
+ }
50
+ });
51
+ };
52
+ },
53
+ deps: {
54
+ logger: LOGGER_TOKEN,
55
+ tramvaiHooks: TRAMVAI_HOOKS_TOKEN,
56
+ },
57
+ }),
58
+ ],
9
59
  });
10
60
 
11
61
  export { ApplicationMonitoringModule };
package/lib/server.es.js CHANGED
@@ -1,18 +1,58 @@
1
- import { declareModule, provide } from '@tramvai/core';
1
+ import { declareModule, provide, commandLineListTokens, TRAMVAI_HOOKS_TOKEN, APP_INFO_TOKEN } from '@tramvai/core';
2
2
  import { RENDER_SLOTS, ResourceSlot, ResourceType } from '@tramvai/tokens-render';
3
- import { LOGGER_TOKEN } from '@tramvai/module-common';
3
+ import { LOGGER_TOKEN, ENV_MANAGER_TOKEN } from '@tramvai/module-common';
4
4
  import { INLINE_REPORTER_PARAMETERS_TOKEN, INLINE_REPORTER_FACTORY_SCRIPT_TOKEN } from './tokens.es.js';
5
5
  export { INLINE_REPORTER_FACTORY_SCRIPT_TOKEN, INLINE_REPORTER_PARAMETERS_TOKEN } from './tokens.es.js';
6
+ import { LOGGER_NAME } from './constants.es.js';
6
7
  import { appCreationMonitoringScript } from './inlineReporters/events/appCreationMonitoringScript.inline.es.js';
7
8
  import { errorMonitoringScript } from './inlineReporters/events/errorMonitoringScript.inline.es.js';
8
9
  import { htmlOpenedMonitoringScript } from './inlineReporters/events/htmlOpenedMonitoringScript.inline.es.js';
9
- import { sharedProviders } from './sharedProviders.es.js';
10
10
 
11
11
  const ApplicationMonitoringModule = declareModule({
12
12
  name: 'ApplicationMonitoringModule',
13
13
  imports: [],
14
14
  providers: [
15
- ...sharedProviders,
15
+ provide({
16
+ provide: commandLineListTokens.init,
17
+ useFactory: ({ logger, tramvaiHooks }) => {
18
+ const log = logger({
19
+ name: LOGGER_NAME,
20
+ });
21
+ return function applicationHealthSubscribe() {
22
+ tramvaiHooks['app:initialized'].tap('application-health', () => {
23
+ log.info({ event: 'app:initialized' });
24
+ });
25
+ tramvaiHooks['app:initialize-failed'].tap('application-health', () => {
26
+ log.info({ event: 'app:initialized-failed' });
27
+ });
28
+ tramvaiHooks['app:rendered'].tap('application-health', () => {
29
+ log.info({ event: 'app:rendered' });
30
+ });
31
+ tramvaiHooks['react:render'].tap('application-health', (_, payload) => {
32
+ log.info({ event: 'react:render' });
33
+ if (payload.event === 'ssr:on-all-ready') {
34
+ tramvaiHooks['app:rendered'].call({});
35
+ }
36
+ });
37
+ tramvaiHooks['app:render-failed'].tap('application-health', (_, { error }) => {
38
+ log.error({ event: 'app:render-failed', error });
39
+ });
40
+ tramvaiHooks['react:error'].tap('application-health', (_, { event, error, errorInfo, otherErrors }) => {
41
+ log.error({ event: 'react:error', error, errorInfo, otherErrors });
42
+ switch (event) {
43
+ case 'ssr:on-shell-error': {
44
+ tramvaiHooks['app:render-failed'].call({ error });
45
+ break;
46
+ }
47
+ }
48
+ });
49
+ };
50
+ },
51
+ deps: {
52
+ logger: LOGGER_TOKEN,
53
+ tramvaiHooks: TRAMVAI_HOOKS_TOKEN,
54
+ },
55
+ }),
16
56
  provide({
17
57
  provide: RENDER_SLOTS,
18
58
  multi: true,
@@ -37,6 +77,20 @@ const ApplicationMonitoringModule = declareModule({
37
77
  },
38
78
  },
39
79
  }),
80
+ provide({
81
+ provide: INLINE_REPORTER_PARAMETERS_TOKEN,
82
+ useFactory: ({ appInfo, envManager }) => {
83
+ return {
84
+ appName: appInfo.appName,
85
+ appRelease: envManager.get('APP_RELEASE'),
86
+ appVersion: envManager.get('APP_VERSION'),
87
+ };
88
+ },
89
+ deps: {
90
+ envManager: ENV_MANAGER_TOKEN,
91
+ appInfo: APP_INFO_TOKEN,
92
+ },
93
+ }),
40
94
  provide({
41
95
  provide: RENDER_SLOTS,
42
96
  multi: true,
package/lib/server.js CHANGED
@@ -6,16 +6,56 @@ var core = require('@tramvai/core');
6
6
  var tokensRender = require('@tramvai/tokens-render');
7
7
  var moduleCommon = require('@tramvai/module-common');
8
8
  var tokens = require('./tokens.js');
9
+ var constants = require('./constants.js');
9
10
  var appCreationMonitoringScript_inline = require('./inlineReporters/events/appCreationMonitoringScript.inline.js');
10
11
  var errorMonitoringScript_inline = require('./inlineReporters/events/errorMonitoringScript.inline.js');
11
12
  var htmlOpenedMonitoringScript_inline = require('./inlineReporters/events/htmlOpenedMonitoringScript.inline.js');
12
- var sharedProviders = require('./sharedProviders.js');
13
13
 
14
14
  const ApplicationMonitoringModule = core.declareModule({
15
15
  name: 'ApplicationMonitoringModule',
16
16
  imports: [],
17
17
  providers: [
18
- ...sharedProviders.sharedProviders,
18
+ core.provide({
19
+ provide: core.commandLineListTokens.init,
20
+ useFactory: ({ logger, tramvaiHooks }) => {
21
+ const log = logger({
22
+ name: constants.LOGGER_NAME,
23
+ });
24
+ return function applicationHealthSubscribe() {
25
+ tramvaiHooks['app:initialized'].tap('application-health', () => {
26
+ log.info({ event: 'app:initialized' });
27
+ });
28
+ tramvaiHooks['app:initialize-failed'].tap('application-health', () => {
29
+ log.info({ event: 'app:initialized-failed' });
30
+ });
31
+ tramvaiHooks['app:rendered'].tap('application-health', () => {
32
+ log.info({ event: 'app:rendered' });
33
+ });
34
+ tramvaiHooks['react:render'].tap('application-health', (_, payload) => {
35
+ log.info({ event: 'react:render' });
36
+ if (payload.event === 'ssr:on-all-ready') {
37
+ tramvaiHooks['app:rendered'].call({});
38
+ }
39
+ });
40
+ tramvaiHooks['app:render-failed'].tap('application-health', (_, { error }) => {
41
+ log.error({ event: 'app:render-failed', error });
42
+ });
43
+ tramvaiHooks['react:error'].tap('application-health', (_, { event, error, errorInfo, otherErrors }) => {
44
+ log.error({ event: 'react:error', error, errorInfo, otherErrors });
45
+ switch (event) {
46
+ case 'ssr:on-shell-error': {
47
+ tramvaiHooks['app:render-failed'].call({ error });
48
+ break;
49
+ }
50
+ }
51
+ });
52
+ };
53
+ },
54
+ deps: {
55
+ logger: moduleCommon.LOGGER_TOKEN,
56
+ tramvaiHooks: core.TRAMVAI_HOOKS_TOKEN,
57
+ },
58
+ }),
19
59
  core.provide({
20
60
  provide: tokensRender.RENDER_SLOTS,
21
61
  multi: true,
@@ -40,6 +80,20 @@ const ApplicationMonitoringModule = core.declareModule({
40
80
  },
41
81
  },
42
82
  }),
83
+ core.provide({
84
+ provide: tokens.INLINE_REPORTER_PARAMETERS_TOKEN,
85
+ useFactory: ({ appInfo, envManager }) => {
86
+ return {
87
+ appName: appInfo.appName,
88
+ appRelease: envManager.get('APP_RELEASE'),
89
+ appVersion: envManager.get('APP_VERSION'),
90
+ };
91
+ },
92
+ deps: {
93
+ envManager: moduleCommon.ENV_MANAGER_TOKEN,
94
+ appInfo: core.APP_INFO_TOKEN,
95
+ },
96
+ }),
43
97
  core.provide({
44
98
  provide: tokensRender.RENDER_SLOTS,
45
99
  multi: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tramvai/module-application-monitoring",
3
- "version": "6.82.10",
3
+ "version": "6.82.12",
4
4
  "description": "Модуль сбора и отправки событий мониторинга состояния приложения",
5
5
  "browser": "lib/browser.js",
6
6
  "main": "lib/server.js",
@@ -23,13 +23,13 @@
23
23
  "registry": "https://registry.npmjs.org/"
24
24
  },
25
25
  "dependencies": {
26
- "@tramvai/module-common": "6.82.10",
27
- "@tramvai/tokens-render": "6.82.10"
26
+ "@tramvai/module-common": "6.82.12",
27
+ "@tramvai/tokens-render": "6.82.12"
28
28
  },
29
29
  "peerDependencies": {
30
30
  "@tinkoff/dippy": "^1.0.0",
31
- "@tramvai/core": "6.82.10",
32
- "@tramvai/react": "6.82.10",
31
+ "@tramvai/core": "6.82.12",
32
+ "@tramvai/react": "6.82.12",
33
33
  "tslib": "^2.4.0"
34
34
  }
35
35
  }
@@ -1,71 +0,0 @@
1
- import { LOGGER_TOKEN, ENV_MANAGER_TOKEN } from '@tramvai/module-common';
2
- import { provide, commandLineListTokens, TRAMVAI_HOOKS_TOKEN, APP_INFO_TOKEN } from '@tramvai/core';
3
- import { INLINE_REPORTER_PARAMETERS_TOKEN } from './tokens.browser.js';
4
- import { LOGGER_NAME } from './constants.browser.js';
5
-
6
- const sharedProviders = [
7
- provide({
8
- provide: commandLineListTokens.init,
9
- useFactory: ({ logger, tramvaiHooks }) => {
10
- const log = logger({
11
- name: LOGGER_NAME,
12
- });
13
- return function applicationHealthSubscribe() {
14
- let applicationRenderFinished = false;
15
- tramvaiHooks['app:initialized'].tap('application-health', () => {
16
- log.info({ event: 'app:initialized' });
17
- });
18
- tramvaiHooks['app:initialize-failed'].tap('application-health', () => {
19
- log.info({ event: 'app:initialized-failed' });
20
- });
21
- tramvaiHooks['app:rendered'].tap('application-health', () => {
22
- log.info({ event: 'app:rendered' });
23
- });
24
- tramvaiHooks['react:render'].tap('application-health', () => {
25
- log.info({ event: 'react:render' });
26
- if (!applicationRenderFinished) {
27
- applicationRenderFinished = true;
28
- tramvaiHooks['app:rendered'].call({});
29
- }
30
- });
31
- tramvaiHooks['app:render-failed'].tap('application-health', (_, { error }) => {
32
- log.error({ event: 'app:render-failed', error });
33
- });
34
- tramvaiHooks['react:error'].tap('application-health', (_, { event, error, errorInfo, otherErrors }) => {
35
- log.error({ event: 'react:error', error, errorInfo, otherErrors });
36
- switch (event) {
37
- case 'page-error-boundary':
38
- case 'hydrate:on-uncaught-error':
39
- case 'hydrate:failed': {
40
- if (!applicationRenderFinished) {
41
- applicationRenderFinished = true;
42
- tramvaiHooks['app:render-failed'].call({ error });
43
- }
44
- break;
45
- }
46
- }
47
- });
48
- };
49
- },
50
- deps: {
51
- logger: LOGGER_TOKEN,
52
- tramvaiHooks: TRAMVAI_HOOKS_TOKEN,
53
- },
54
- }),
55
- provide({
56
- provide: INLINE_REPORTER_PARAMETERS_TOKEN,
57
- useFactory: ({ appInfo, envManager }) => {
58
- return {
59
- appName: appInfo.appName,
60
- appRelease: envManager.get('APP_RELEASE'),
61
- appVersion: envManager.get('APP_VERSION'),
62
- };
63
- },
64
- deps: {
65
- envManager: ENV_MANAGER_TOKEN,
66
- appInfo: APP_INFO_TOKEN,
67
- },
68
- }),
69
- ];
70
-
71
- export { sharedProviders };
@@ -1,26 +0,0 @@
1
- export declare const sharedProviders: (import("@tramvai/core").Provider<{
2
- logger: import("@tramvai/module-common").Logger & ((configOrName: string | {
3
- [key: string]: any;
4
- name: string;
5
- }) => import("@tramvai/module-common").Logger) & {
6
- __type?: "base token" | undefined;
7
- };
8
- tramvaiHooks: import("@tramvai/core").TramvaiHooks & {
9
- __type?: "base token" | undefined;
10
- };
11
- }, import("@tramvai/core").Command & {
12
- __type?: "multi token" | undefined;
13
- }> | import("@tramvai/core").Provider<{
14
- envManager: import("@tramvai/module-common").EnvironmentManager & {
15
- __type?: "base token" | undefined;
16
- };
17
- appInfo: {
18
- [key: string]: string;
19
- appName: string;
20
- } & {
21
- __type?: "base token" | undefined;
22
- };
23
- }, import("./types").InlineReporterParameters & {
24
- __type?: "base token" | undefined;
25
- }>)[];
26
- //# sourceMappingURL=sharedProviders.d.ts.map
@@ -1,71 +0,0 @@
1
- import { LOGGER_TOKEN, ENV_MANAGER_TOKEN } from '@tramvai/module-common';
2
- import { provide, commandLineListTokens, TRAMVAI_HOOKS_TOKEN, APP_INFO_TOKEN } from '@tramvai/core';
3
- import { INLINE_REPORTER_PARAMETERS_TOKEN } from './tokens.es.js';
4
- import { LOGGER_NAME } from './constants.es.js';
5
-
6
- const sharedProviders = [
7
- provide({
8
- provide: commandLineListTokens.init,
9
- useFactory: ({ logger, tramvaiHooks }) => {
10
- const log = logger({
11
- name: LOGGER_NAME,
12
- });
13
- return function applicationHealthSubscribe() {
14
- let applicationRenderFinished = false;
15
- tramvaiHooks['app:initialized'].tap('application-health', () => {
16
- log.info({ event: 'app:initialized' });
17
- });
18
- tramvaiHooks['app:initialize-failed'].tap('application-health', () => {
19
- log.info({ event: 'app:initialized-failed' });
20
- });
21
- tramvaiHooks['app:rendered'].tap('application-health', () => {
22
- log.info({ event: 'app:rendered' });
23
- });
24
- tramvaiHooks['react:render'].tap('application-health', () => {
25
- log.info({ event: 'react:render' });
26
- if (!applicationRenderFinished) {
27
- applicationRenderFinished = true;
28
- tramvaiHooks['app:rendered'].call({});
29
- }
30
- });
31
- tramvaiHooks['app:render-failed'].tap('application-health', (_, { error }) => {
32
- log.error({ event: 'app:render-failed', error });
33
- });
34
- tramvaiHooks['react:error'].tap('application-health', (_, { event, error, errorInfo, otherErrors }) => {
35
- log.error({ event: 'react:error', error, errorInfo, otherErrors });
36
- switch (event) {
37
- case 'page-error-boundary':
38
- case 'hydrate:on-uncaught-error':
39
- case 'hydrate:failed': {
40
- if (!applicationRenderFinished) {
41
- applicationRenderFinished = true;
42
- tramvaiHooks['app:render-failed'].call({ error });
43
- }
44
- break;
45
- }
46
- }
47
- });
48
- };
49
- },
50
- deps: {
51
- logger: LOGGER_TOKEN,
52
- tramvaiHooks: TRAMVAI_HOOKS_TOKEN,
53
- },
54
- }),
55
- provide({
56
- provide: INLINE_REPORTER_PARAMETERS_TOKEN,
57
- useFactory: ({ appInfo, envManager }) => {
58
- return {
59
- appName: appInfo.appName,
60
- appRelease: envManager.get('APP_RELEASE'),
61
- appVersion: envManager.get('APP_VERSION'),
62
- };
63
- },
64
- deps: {
65
- envManager: ENV_MANAGER_TOKEN,
66
- appInfo: APP_INFO_TOKEN,
67
- },
68
- }),
69
- ];
70
-
71
- export { sharedProviders };
@@ -1,75 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var moduleCommon = require('@tramvai/module-common');
6
- var core = require('@tramvai/core');
7
- var tokens = require('./tokens.js');
8
- var constants = require('./constants.js');
9
-
10
- const sharedProviders = [
11
- core.provide({
12
- provide: core.commandLineListTokens.init,
13
- useFactory: ({ logger, tramvaiHooks }) => {
14
- const log = logger({
15
- name: constants.LOGGER_NAME,
16
- });
17
- return function applicationHealthSubscribe() {
18
- let applicationRenderFinished = false;
19
- tramvaiHooks['app:initialized'].tap('application-health', () => {
20
- log.info({ event: 'app:initialized' });
21
- });
22
- tramvaiHooks['app:initialize-failed'].tap('application-health', () => {
23
- log.info({ event: 'app:initialized-failed' });
24
- });
25
- tramvaiHooks['app:rendered'].tap('application-health', () => {
26
- log.info({ event: 'app:rendered' });
27
- });
28
- tramvaiHooks['react:render'].tap('application-health', () => {
29
- log.info({ event: 'react:render' });
30
- if (!applicationRenderFinished) {
31
- applicationRenderFinished = true;
32
- tramvaiHooks['app:rendered'].call({});
33
- }
34
- });
35
- tramvaiHooks['app:render-failed'].tap('application-health', (_, { error }) => {
36
- log.error({ event: 'app:render-failed', error });
37
- });
38
- tramvaiHooks['react:error'].tap('application-health', (_, { event, error, errorInfo, otherErrors }) => {
39
- log.error({ event: 'react:error', error, errorInfo, otherErrors });
40
- switch (event) {
41
- case 'page-error-boundary':
42
- case 'hydrate:on-uncaught-error':
43
- case 'hydrate:failed': {
44
- if (!applicationRenderFinished) {
45
- applicationRenderFinished = true;
46
- tramvaiHooks['app:render-failed'].call({ error });
47
- }
48
- break;
49
- }
50
- }
51
- });
52
- };
53
- },
54
- deps: {
55
- logger: moduleCommon.LOGGER_TOKEN,
56
- tramvaiHooks: core.TRAMVAI_HOOKS_TOKEN,
57
- },
58
- }),
59
- core.provide({
60
- provide: tokens.INLINE_REPORTER_PARAMETERS_TOKEN,
61
- useFactory: ({ appInfo, envManager }) => {
62
- return {
63
- appName: appInfo.appName,
64
- appRelease: envManager.get('APP_RELEASE'),
65
- appVersion: envManager.get('APP_VERSION'),
66
- };
67
- },
68
- deps: {
69
- envManager: moduleCommon.ENV_MANAGER_TOKEN,
70
- appInfo: core.APP_INFO_TOKEN,
71
- },
72
- }),
73
- ];
74
-
75
- exports.sharedProviders = sharedProviders;