@equinor/fusion-framework 7.3.20 → 7.4.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.
@@ -2,7 +2,8 @@ import { type AnyModule, ModulesConfigurator } from '@equinor/fusion-framework-m
2
2
  import { configureHttpClient, configureHttp, type HttpClientOptions } from '@equinor/fusion-framework-module-http';
3
3
  import type { HttpClientMsal } from '@equinor/fusion-framework-module-http/client';
4
4
  import { type AuthConfigFn } from '@equinor/fusion-framework-module-msal';
5
- import type { FusionModules } from './types';
5
+ import { enableTelemetry } from '@equinor/fusion-framework-module-telemetry';
6
+ import type { FusionModules } from './types.js';
6
7
  import type { AuthClientConfig } from '@equinor/fusion-framework-module-msal/v2';
7
8
  /**
8
9
  * Module configurator for Framework modules
@@ -10,12 +11,167 @@ import type { AuthClientConfig } from '@equinor/fusion-framework-module-msal/v2'
10
11
  * @template TRef - usually undefined, optional references
11
12
  */
12
13
  export declare class FrameworkConfigurator<TModules extends Array<AnyModule> = [], TRef = any> extends ModulesConfigurator<FusionModules<TModules>, TRef> {
14
+ /**
15
+ * The class name used for event naming. This static property ensures
16
+ * the name is preserved through compilation and minification.
17
+ */
18
+ static readonly className: string;
19
+ /**
20
+ * Creates a new FrameworkConfigurator instance with default telemetry configuration.
21
+ *
22
+ * Initializes the framework with core modules (event, auth, http, service discovery,
23
+ * services, context, and telemetry) and sets up default telemetry that includes
24
+ * framework version metadata and 'framework' scope for all telemetry events.
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * const configurator = new FrameworkConfigurator();
29
+ * // Now ready to configure additional modules
30
+ * ```
31
+ */
13
32
  constructor();
33
+ /**
34
+ * Configures the global HTTP module settings such as base URLs, default headers,
35
+ * request/response interceptors, and timeout settings.
36
+ *
37
+ * This affects all HTTP requests made through the framework's HTTP module.
38
+ * Use this for application-wide HTTP configuration.
39
+ *
40
+ * @param args - HTTP module configuration arguments (same as configureHttp function)
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * configurator.configureHttp({
45
+ * baseUri: 'https://api.example.com',
46
+ * defaultHeaders: { 'X-App-Version': '1.0.0' }
47
+ * });
48
+ * ```
49
+ */
14
50
  configureHttp(...args: Parameters<typeof configureHttp>): void;
51
+ /**
52
+ * Configures a named HTTP client instance with specific settings.
53
+ *
54
+ * Unlike configureHttp which sets global HTTP settings, this creates a named client
55
+ * that can have its own base URL, headers, interceptors, and other HTTP-specific
56
+ * configuration. Useful for connecting to different APIs or services with different requirements.
57
+ *
58
+ * @param args - HTTP client configuration arguments: [name, clientOptions]
59
+ * where name is a string identifier and clientOptions contains HTTP settings
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * // Configure a client for external API
64
+ * configurator.configureHttpClient('external-api', {
65
+ * baseUri: 'https://external-api.com',
66
+ * defaultHeaders: { 'Authorization': 'Bearer token' }
67
+ * });
68
+ *
69
+ * // Configure a client for internal services
70
+ * configurator.configureHttpClient('internal', {
71
+ * baseUri: 'https://internal.company.com',
72
+ * timeout: 10000
73
+ * });
74
+ * ```
75
+ */
15
76
  configureHttpClient(...args: Parameters<typeof configureHttpClient>): void;
77
+ /**
78
+ * Configures Microsoft Authentication Library (MSAL) authentication for the framework.
79
+ *
80
+ * This sets up OAuth 2.0 / OpenID Connect authentication using Azure AD or other
81
+ * MSAL-compatible identity providers. The authentication module will handle token
82
+ * acquisition, refresh, and user session management.
83
+ *
84
+ * @param cb_or_config - Authentication configuration. Can be either:
85
+ * - A callback function that receives an auth builder for advanced configuration
86
+ * - A client configuration object with MSAL settings
87
+ * @param requiresAuth - Whether the application requires authentication to function.
88
+ * When true (default), unauthenticated users cannot access the app.
89
+ * When false, authentication is optional but available when needed.
90
+ *
91
+ * @example
92
+ * ```typescript
93
+ * // Simple configuration with client config object
94
+ * configurator.configureMsal({
95
+ * clientId: 'your-client-id',
96
+ * authority: 'https://login.microsoftonline.com/your-tenant-id'
97
+ * });
98
+ *
99
+ * // Advanced configuration with callback
100
+ * configurator.configureMsal((builder) => {
101
+ * builder.setClientConfig({
102
+ * clientId: 'your-client-id',
103
+ * authority: 'https://login.microsoftonline.com/your-tenant-id'
104
+ * });
105
+ * builder.setScopes(['User.Read', 'api://your-api/scope']);
106
+ * builder.setRequiresAuth(true);
107
+ * });
108
+ *
109
+ * // Optional authentication
110
+ * configurator.configureMsal(config, false);
111
+ * ```
112
+ */
16
113
  configureMsal(cb_or_config: AuthConfigFn | AuthClientConfig, requiresAuth?: boolean): void;
114
+ /**
115
+ * Configures the service discovery module to automatically find and connect to services.
116
+ *
117
+ * Service discovery allows the framework to dynamically locate microservices and APIs
118
+ * at runtime rather than hardcoding their URLs. This is essential in distributed systems
119
+ * where services may be deployed across multiple environments or scaled dynamically.
120
+ *
121
+ * @param args - Configuration object for service discovery
122
+ * @param args.client - HTTP client configuration used to communicate with the
123
+ * service discovery registry. Typically includes base URL,
124
+ * authentication, and timeout settings.
125
+ *
126
+ * @example
127
+ * ```typescript
128
+ * configurator.configureServiceDiscovery({
129
+ * client: {
130
+ * baseUri: 'https://service-registry.company.com',
131
+ * defaultHeaders: { 'Authorization': 'Bearer token' },
132
+ * timeout: 5000
133
+ * }
134
+ * });
135
+ * ```
136
+ */
17
137
  configureServiceDiscovery(args: {
18
138
  client: HttpClientOptions<HttpClientMsal>;
19
139
  }): void;
140
+ /**
141
+ * Configures application telemetry and observability settings.
142
+ *
143
+ * Telemetry enables tracking of application usage, performance metrics, errors,
144
+ * and custom events. This helps with monitoring, debugging, and understanding
145
+ * how your application is being used. The framework comes with default telemetry
146
+ * that includes framework version and scope information.
147
+ *
148
+ * @param cb - Configuration callback function that receives a telemetry builder.
149
+ * Use this to customize telemetry settings like event scopes, metadata,
150
+ * sampling rates, and custom instrumentation.
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * configurator.configureTelemetry((builder) => {
155
+ * // Add custom metadata to all telemetry events
156
+ * builder.setMetadata({
157
+ * application: 'my-app',
158
+ * environment: 'production',
159
+ * version: '1.2.3'
160
+ * });
161
+ *
162
+ * // Set custom scopes for filtering events
163
+ * builder.setDefaultScope(['app', 'performance']);
164
+ *
165
+ * // Configure sampling (only send 10% of events)
166
+ * builder.setSamplingRate(0.1);
167
+ *
168
+ * // Add custom instrumentation
169
+ * builder.addInstrumentation('custom-operation', (context) => {
170
+ * // Track custom metrics
171
+ * });
172
+ * });
173
+ * ```
174
+ */
175
+ configureTelemetry(cb: Parameters<typeof enableTelemetry>[1]): void;
20
176
  }
21
177
  export default FrameworkConfigurator;
@@ -1,5 +1,5 @@
1
1
  import type { FrameworkEvent, FrameworkEventInit } from '@equinor/fusion-framework-module-event';
2
- import type { Fusion } from './types';
2
+ import type { Fusion } from './types.js';
3
3
  declare module '@equinor/fusion-framework-module-event' {
4
4
  interface FrameworkEventMap {
5
5
  onFrameworkLoaded: FrameworkEvent<FrameworkEventInit<Fusion>>;
@@ -1,6 +1,6 @@
1
1
  import type { AnyModule } from '@equinor/fusion-framework-module';
2
- import type { FrameworkConfigurator } from './FrameworkConfigurator';
3
- import type { Fusion } from './types';
2
+ import type { FrameworkConfigurator } from './FrameworkConfigurator.js';
3
+ import type { Fusion } from './types.js';
4
4
  /**
5
5
  *
6
6
  * @template TModules addition modules
@@ -6,6 +6,7 @@ import type { HttpModule } from '@equinor/fusion-framework-module-http';
6
6
  import type { MsalModule } from '@equinor/fusion-framework-module-msal';
7
7
  import type { ServiceDiscoveryModule } from '@equinor/fusion-framework-module-service-discovery';
8
8
  import type { ServicesModule } from '@equinor/fusion-framework-module-services';
9
+ import type { TelemetryModule } from '@equinor/fusion-framework-module-telemetry';
9
10
  /**
10
11
  * interface of the modules provided by Fusion Framework
11
12
  */
@@ -15,7 +16,8 @@ export type FusionModules<TModules extends Array<AnyModule> | unknown = unknown>
15
16
  HttpModule,
16
17
  MsalModule,
17
18
  ServicesModule,
18
- ServiceDiscoveryModule
19
+ ServiceDiscoveryModule,
20
+ TelemetryModule
19
21
  ]>;
20
22
  /**
21
23
  * Blueprint of instance of framework modules
@@ -1 +1 @@
1
- export declare const version = "7.3.20";
1
+ export declare const version = "7.4.1";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@equinor/fusion-framework",
3
- "version": "7.3.20",
3
+ "version": "7.4.1",
4
4
  "description": "",
5
5
  "main": "dist/esm/index.js",
6
6
  "types": "dist/types/index.d.ts",
@@ -32,18 +32,21 @@
32
32
  },
33
33
  "dependencies": {
34
34
  "rxjs": "^7.8.1",
35
- "@equinor/fusion-framework-module-context": "^7.0.0",
36
- "@equinor/fusion-framework-module": "^5.0.2",
37
- "@equinor/fusion-framework-module-msal": "^5.0.1",
38
- "@equinor/fusion-framework-module-event": "^4.3.7",
39
- "@equinor/fusion-framework-module-http": "^7.0.1",
40
- "@equinor/fusion-framework-module-service-discovery": "^9.0.1",
41
- "@equinor/fusion-framework-module-services": "^7.1.2"
35
+ "@equinor/fusion-framework-module": "^5.0.4",
36
+ "@equinor/fusion-framework-module-context": "^7.0.2",
37
+ "@equinor/fusion-framework-module-http": "^7.0.3",
38
+ "@equinor/fusion-framework-module-service-discovery": "^9.0.3",
39
+ "@equinor/fusion-framework-module-services": "^7.1.3",
40
+ "@equinor/fusion-framework-module-msal": "^5.1.1",
41
+ "@equinor/fusion-framework-module-event": "^4.4.0",
42
+ "@equinor/fusion-framework-module-telemetry": "^4.3.0"
42
43
  },
43
44
  "devDependencies": {
44
- "typescript": "^5.8.2"
45
+ "typescript": "^5.8.2",
46
+ "vitest": "^3.2.4"
45
47
  },
46
48
  "scripts": {
47
- "build": "tsc -b"
49
+ "build": "tsc -b",
50
+ "test": "vitest --run"
48
51
  }
49
52
  }
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  type AnyModule,
3
- ModuleConsoleLogger,
4
3
  ModulesConfigurator,
4
+ type ModuleEvent,
5
5
  } from '@equinor/fusion-framework-module';
6
6
 
7
7
  import event from '@equinor/fusion-framework-module-event';
@@ -19,9 +19,13 @@ import context from '@equinor/fusion-framework-module-context';
19
19
 
20
20
  import disco from '@equinor/fusion-framework-module-service-discovery';
21
21
  import services from '@equinor/fusion-framework-module-services';
22
+ import telemetry, { enableTelemetry } from '@equinor/fusion-framework-module-telemetry';
22
23
 
23
- import type { FusionModules } from './types';
24
+ import type { FusionModules } from './types.js';
24
25
  import type { AuthClientConfig } from '@equinor/fusion-framework-module-msal/v2';
26
+ import { version } from './version.js';
27
+ import { map } from 'rxjs/operators';
28
+ import type { Observable } from 'rxjs';
25
29
 
26
30
  /**
27
31
  * Module configurator for Framework modules
@@ -33,19 +37,130 @@ export class FrameworkConfigurator<
33
37
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
38
  TRef = any,
35
39
  > extends ModulesConfigurator<FusionModules<TModules>, TRef> {
40
+ /**
41
+ * The class name used for event naming. This static property ensures
42
+ * the name is preserved through compilation and minification.
43
+ */
44
+ static readonly className: string = 'FrameworkConfigurator';
45
+
46
+ /**
47
+ * Creates a new FrameworkConfigurator instance with default telemetry configuration.
48
+ *
49
+ * Initializes the framework with core modules (event, auth, http, service discovery,
50
+ * services, context, and telemetry) and sets up default telemetry that includes
51
+ * framework version metadata and 'framework' scope for all telemetry events.
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * const configurator = new FrameworkConfigurator();
56
+ * // Now ready to configure additional modules
57
+ * ```
58
+ */
36
59
  constructor() {
37
- super([event, auth, http, disco, services, context]);
38
- this.logger = new ModuleConsoleLogger('FrameworkConfigurator');
60
+ super([event, auth, http, disco, services, context, telemetry]);
61
+
62
+ // default configuration
63
+ enableTelemetry(this, {
64
+ configure: (builder) => {
65
+ builder.setMetadata({
66
+ fusion: {
67
+ type: 'framework-telemetry',
68
+ framework: {
69
+ version,
70
+ },
71
+ },
72
+ });
73
+ builder.setDefaultScope(['framework']);
74
+ },
75
+ });
39
76
  }
40
77
 
78
+ /**
79
+ * Configures the global HTTP module settings such as base URLs, default headers,
80
+ * request/response interceptors, and timeout settings.
81
+ *
82
+ * This affects all HTTP requests made through the framework's HTTP module.
83
+ * Use this for application-wide HTTP configuration.
84
+ *
85
+ * @param args - HTTP module configuration arguments (same as configureHttp function)
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * configurator.configureHttp({
90
+ * baseUri: 'https://api.example.com',
91
+ * defaultHeaders: { 'X-App-Version': '1.0.0' }
92
+ * });
93
+ * ```
94
+ */
41
95
  public configureHttp(...args: Parameters<typeof configureHttp>) {
42
96
  this.addConfig(configureHttp(...args));
43
97
  }
44
98
 
99
+ /**
100
+ * Configures a named HTTP client instance with specific settings.
101
+ *
102
+ * Unlike configureHttp which sets global HTTP settings, this creates a named client
103
+ * that can have its own base URL, headers, interceptors, and other HTTP-specific
104
+ * configuration. Useful for connecting to different APIs or services with different requirements.
105
+ *
106
+ * @param args - HTTP client configuration arguments: [name, clientOptions]
107
+ * where name is a string identifier and clientOptions contains HTTP settings
108
+ *
109
+ * @example
110
+ * ```typescript
111
+ * // Configure a client for external API
112
+ * configurator.configureHttpClient('external-api', {
113
+ * baseUri: 'https://external-api.com',
114
+ * defaultHeaders: { 'Authorization': 'Bearer token' }
115
+ * });
116
+ *
117
+ * // Configure a client for internal services
118
+ * configurator.configureHttpClient('internal', {
119
+ * baseUri: 'https://internal.company.com',
120
+ * timeout: 10000
121
+ * });
122
+ * ```
123
+ */
45
124
  public configureHttpClient(...args: Parameters<typeof configureHttpClient>) {
46
125
  this.addConfig(configureHttpClient(...args));
47
126
  }
48
127
 
128
+ /**
129
+ * Configures Microsoft Authentication Library (MSAL) authentication for the framework.
130
+ *
131
+ * This sets up OAuth 2.0 / OpenID Connect authentication using Azure AD or other
132
+ * MSAL-compatible identity providers. The authentication module will handle token
133
+ * acquisition, refresh, and user session management.
134
+ *
135
+ * @param cb_or_config - Authentication configuration. Can be either:
136
+ * - A callback function that receives an auth builder for advanced configuration
137
+ * - A client configuration object with MSAL settings
138
+ * @param requiresAuth - Whether the application requires authentication to function.
139
+ * When true (default), unauthenticated users cannot access the app.
140
+ * When false, authentication is optional but available when needed.
141
+ *
142
+ * @example
143
+ * ```typescript
144
+ * // Simple configuration with client config object
145
+ * configurator.configureMsal({
146
+ * clientId: 'your-client-id',
147
+ * authority: 'https://login.microsoftonline.com/your-tenant-id'
148
+ * });
149
+ *
150
+ * // Advanced configuration with callback
151
+ * configurator.configureMsal((builder) => {
152
+ * builder.setClientConfig({
153
+ * clientId: 'your-client-id',
154
+ * authority: 'https://login.microsoftonline.com/your-tenant-id'
155
+ * });
156
+ * builder.setScopes(['User.Read', 'api://your-api/scope']);
157
+ * builder.setRequiresAuth(true);
158
+ * });
159
+ *
160
+ * // Optional authentication
161
+ * configurator.configureMsal(config, false);
162
+ * ```
163
+ */
49
164
  public configureMsal(cb_or_config: AuthConfigFn | AuthClientConfig, requiresAuth = true) {
50
165
  this.addConfig({
51
166
  module: auth,
@@ -63,9 +178,71 @@ export class FrameworkConfigurator<
63
178
  });
64
179
  }
65
180
 
181
+ /**
182
+ * Configures the service discovery module to automatically find and connect to services.
183
+ *
184
+ * Service discovery allows the framework to dynamically locate microservices and APIs
185
+ * at runtime rather than hardcoding their URLs. This is essential in distributed systems
186
+ * where services may be deployed across multiple environments or scaled dynamically.
187
+ *
188
+ * @param args - Configuration object for service discovery
189
+ * @param args.client - HTTP client configuration used to communicate with the
190
+ * service discovery registry. Typically includes base URL,
191
+ * authentication, and timeout settings.
192
+ *
193
+ * @example
194
+ * ```typescript
195
+ * configurator.configureServiceDiscovery({
196
+ * client: {
197
+ * baseUri: 'https://service-registry.company.com',
198
+ * defaultHeaders: { 'Authorization': 'Bearer token' },
199
+ * timeout: 5000
200
+ * }
201
+ * });
202
+ * ```
203
+ */
66
204
  public configureServiceDiscovery(args: { client: HttpClientOptions<HttpClientMsal> }) {
67
205
  this.configureHttpClient('service_discovery', args.client);
68
206
  }
207
+
208
+ /**
209
+ * Configures application telemetry and observability settings.
210
+ *
211
+ * Telemetry enables tracking of application usage, performance metrics, errors,
212
+ * and custom events. This helps with monitoring, debugging, and understanding
213
+ * how your application is being used. The framework comes with default telemetry
214
+ * that includes framework version and scope information.
215
+ *
216
+ * @param cb - Configuration callback function that receives a telemetry builder.
217
+ * Use this to customize telemetry settings like event scopes, metadata,
218
+ * sampling rates, and custom instrumentation.
219
+ *
220
+ * @example
221
+ * ```typescript
222
+ * configurator.configureTelemetry((builder) => {
223
+ * // Add custom metadata to all telemetry events
224
+ * builder.setMetadata({
225
+ * application: 'my-app',
226
+ * environment: 'production',
227
+ * version: '1.2.3'
228
+ * });
229
+ *
230
+ * // Set custom scopes for filtering events
231
+ * builder.setDefaultScope(['app', 'performance']);
232
+ *
233
+ * // Configure sampling (only send 10% of events)
234
+ * builder.setSamplingRate(0.1);
235
+ *
236
+ * // Add custom instrumentation
237
+ * builder.addInstrumentation('custom-operation', (context) => {
238
+ * // Track custom metrics
239
+ * });
240
+ * });
241
+ * ```
242
+ */
243
+ public configureTelemetry(cb: Parameters<typeof enableTelemetry>[1]): void {
244
+ enableTelemetry(this, cb);
245
+ }
69
246
  }
70
247
 
71
248
  export default FrameworkConfigurator;
@@ -0,0 +1,35 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { firstValueFrom, take } from 'rxjs';
3
+ import { FrameworkConfigurator } from '../FrameworkConfigurator.js';
4
+ import type { AnyModule } from '@equinor/fusion-framework-module';
5
+ import { SemanticVersion } from '@equinor/fusion-framework-module';
6
+
7
+ describe('FrameworkConfigurator', () => {
8
+ let configurator: FrameworkConfigurator;
9
+
10
+ // Create a mock module for testing
11
+ const createMockModule = (name: string, version = '1.0.0'): AnyModule => ({
12
+ name,
13
+ version: new SemanticVersion(version),
14
+ initialize: () => ({ mockInstance: true }),
15
+ });
16
+
17
+ beforeEach(() => {
18
+ configurator = new FrameworkConfigurator();
19
+ });
20
+
21
+ describe('Event Name Prefixing', () => {
22
+ it('should prefix event names with "FrameworkConfigurator::"', async () => {
23
+ // Trigger event by adding a config
24
+ configurator.addConfig({
25
+ module: createMockModule('test', '1.0.0'),
26
+ configure: () => {},
27
+ });
28
+
29
+ // Wait for the first event to be emitted
30
+ const event = await firstValueFrom(configurator.event$.pipe(take(1)));
31
+
32
+ expect(event.name).toMatch(/^FrameworkConfigurator::/);
33
+ });
34
+ });
35
+ });
package/src/index.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { FrameworkEvent, FrameworkEventInit } from '@equinor/fusion-framework-module-event';
2
- import type { Fusion } from './types';
2
+ import type { Fusion } from './types.js';
3
3
 
4
4
  declare module '@equinor/fusion-framework-module-event' {
5
5
  interface FrameworkEventMap {
package/src/init.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { AnyModule } from '@equinor/fusion-framework-module';
2
2
 
3
- import type { FrameworkConfigurator } from './FrameworkConfigurator';
4
- import type { Fusion, FusionModules } from './types';
3
+ import type { FrameworkConfigurator } from './FrameworkConfigurator.js';
4
+ import type { Fusion, FusionModules } from './types.js';
5
5
 
6
6
  /**
7
7
  *
package/src/types.ts CHANGED
@@ -7,13 +7,22 @@ import type { HttpModule } from '@equinor/fusion-framework-module-http';
7
7
  import type { MsalModule } from '@equinor/fusion-framework-module-msal';
8
8
  import type { ServiceDiscoveryModule } from '@equinor/fusion-framework-module-service-discovery';
9
9
  import type { ServicesModule } from '@equinor/fusion-framework-module-services';
10
+ import type { TelemetryModule } from '@equinor/fusion-framework-module-telemetry';
10
11
 
11
12
  /**
12
13
  * interface of the modules provided by Fusion Framework
13
14
  */
14
15
  export type FusionModules<TModules extends Array<AnyModule> | unknown = unknown> = CombinedModules<
15
16
  TModules,
16
- [ContextModule, EventModule, HttpModule, MsalModule, ServicesModule, ServiceDiscoveryModule]
17
+ [
18
+ ContextModule,
19
+ EventModule,
20
+ HttpModule,
21
+ MsalModule,
22
+ ServicesModule,
23
+ ServiceDiscoveryModule,
24
+ TelemetryModule,
25
+ ]
17
26
  >;
18
27
 
19
28
  /**
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  // Generated by genversion.
2
- export const version = '7.3.20';
2
+ export const version = '7.4.1';
package/tsconfig.json CHANGED
@@ -12,6 +12,9 @@
12
12
  {
13
13
  "path": "../modules/event"
14
14
  },
15
+ {
16
+ "path": "../modules/telemetry"
17
+ },
15
18
  {
16
19
  "path": "../modules/http"
17
20
  },
@@ -0,0 +1,10 @@
1
+ import { defineProject } from 'vitest/config';
2
+
3
+ import { name, version } from './package.json';
4
+
5
+ export default defineProject({
6
+ test: {
7
+ include: ['src/__tests__/**'],
8
+ name: `${name}@${version}`,
9
+ },
10
+ });