@seontechnologies/playwright-utils 3.10.0 → 3.10.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 +1 -0
- package/dist/cjs/network-error-monitor/fixtures.d.ts +23 -2
- package/dist/cjs/network-error-monitor/fixtures.d.ts.map +1 -1
- package/dist/cjs/network-error-monitor/fixtures.js +30 -10
- package/dist/cjs/network-error-monitor/fixtures.js.map +1 -1
- package/dist/esm/network-error-monitor/fixtures.d.ts +23 -2
- package/dist/esm/network-error-monitor/fixtures.d.ts.map +1 -1
- package/dist/esm/network-error-monitor/fixtures.js +30 -10
- package/dist/esm/network-error-monitor/fixtures.js.map +1 -1
- package/dist/types/network-error-monitor/fixtures.d.ts +23 -2
- package/dist/types/network-error-monitor/fixtures.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -710,6 +710,7 @@ You can trigger a release directly from GitHub's web interface:
|
|
|
710
710
|
4. Click "Run workflow"
|
|
711
711
|
|
|
712
712
|
**Important**:
|
|
713
|
+
|
|
713
714
|
- Requires `NPM_TOKEN` secret to be configured in GitHub repository settings
|
|
714
715
|
- You must review and merge the PR to complete the process
|
|
715
716
|
|
|
@@ -14,17 +14,38 @@ type NetworkErrorMonitorFixture = {
|
|
|
14
14
|
/** Automatically monitors network responses for errors */
|
|
15
15
|
networkErrorMonitor: void;
|
|
16
16
|
};
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Base configuration without excludePatterns - maxTestsPerError cannot be used
|
|
19
|
+
*/
|
|
20
|
+
type BaseNetworkErrorMonitorConfig = {
|
|
21
|
+
/** Not specified - maxTestsPerError cannot be used without excludePatterns */
|
|
22
|
+
excludePatterns?: undefined;
|
|
23
|
+
/** Cannot be specified without excludePatterns */
|
|
24
|
+
maxTestsPerError?: never;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Configuration with excludePatterns - enables maxTestsPerError option
|
|
28
|
+
*/
|
|
29
|
+
type NetworkErrorMonitorConfigWithPatterns = {
|
|
18
30
|
/** Regex patterns for URLs to exclude from error monitoring */
|
|
19
|
-
excludePatterns
|
|
31
|
+
excludePatterns: RegExp[];
|
|
20
32
|
/**
|
|
21
33
|
* Maximum number of tests that can fail per unique error pattern.
|
|
22
34
|
* Once this limit is reached, subsequent tests just log the error without failing.
|
|
23
35
|
* Default: Infinity (all tests fail)
|
|
36
|
+
* Requires excludePatterns to be specified.
|
|
24
37
|
* @example maxTestsPerError: 1 // Only first test fails, rest just log
|
|
25
38
|
*/
|
|
26
39
|
maxTestsPerError?: number;
|
|
27
40
|
};
|
|
41
|
+
/**
|
|
42
|
+
* Configuration options for the network error monitor.
|
|
43
|
+
*
|
|
44
|
+
* Note: maxTestsPerError can only be used when excludePatterns is specified.
|
|
45
|
+
* This enforces a best practice where domino effect prevention is paired with
|
|
46
|
+
* known exclusion patterns.
|
|
47
|
+
*/
|
|
48
|
+
type NetworkErrorMonitorConfig = BaseNetworkErrorMonitorConfig | NetworkErrorMonitorConfigWithPatterns;
|
|
28
49
|
/**
|
|
29
50
|
* Creates a network error monitoring fixture with configurable exclusion patterns and fail-fast behavior.
|
|
30
51
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/network-error-monitor/fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAY,QAAQ,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/network-error-monitor/fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAY,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAwBhE,KAAK,0BAA0B,GAAG;IAChC,0DAA0D;IAC1D,mBAAmB,EAAE,IAAI,CAAA;CAC1B,CAAA;AAED;;GAEG;AACH,KAAK,6BAA6B,GAAG;IACnC,8EAA8E;IAC9E,eAAe,CAAC,EAAE,SAAS,CAAA;IAC3B,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,KAAK,CAAA;CACzB,CAAA;AAED;;GAEG;AACH,KAAK,qCAAqC,GAAG;IAC3C,+DAA+D;IAC/D,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED;;;;;;GAMG;AACH,KAAK,yBAAyB,GAC1B,6BAA6B,GAC7B,qCAAqC,CAAA;AAyNzC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,GAAE,yBAA8B;sCAOtB;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,OACnB,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,YACtB,QAAQ;;;EAoFzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,eAAO,MAAM,IAAI,0QAGhB,CAAA;AAED,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -19,7 +19,12 @@ const log_1 = require("../log/log");
|
|
|
19
19
|
* Global state to track how many tests have failed per error pattern.
|
|
20
20
|
* This prevents domino effect where same backend issue fails hundreds of tests.
|
|
21
21
|
*
|
|
22
|
-
*
|
|
22
|
+
* IMPORTANT: This state is worker-scoped and persists across test files.
|
|
23
|
+
* - Parallel workers have independent state (no cross-contamination)
|
|
24
|
+
* - Sequential tests in same worker share this state
|
|
25
|
+
* - State is never reset during worker lifetime
|
|
26
|
+
*
|
|
27
|
+
* Key format: `${method}:${status}:${basePath}` (e.g., "GET:500:/api/v2/case-management")
|
|
23
28
|
* Value: number of tests that have already failed with this error pattern
|
|
24
29
|
*/
|
|
25
30
|
const errorPatternFailureCount = new Map();
|
|
@@ -66,18 +71,27 @@ function extractBasePath(url) {
|
|
|
66
71
|
return '/' + pathSegments.slice(0, 3).join('/');
|
|
67
72
|
}
|
|
68
73
|
catch {
|
|
74
|
+
// Log parsing failures to help debug issues with malformed URLs
|
|
75
|
+
log_1.log.warningSync(`Failed to parse URL for error pattern grouping: ${url}. Using full URL as pattern key.`);
|
|
69
76
|
return url;
|
|
70
77
|
}
|
|
71
78
|
}
|
|
72
79
|
/**
|
|
73
80
|
* Create error pattern key for tracking failures across tests.
|
|
81
|
+
* Includes HTTP method to distinguish between different error types on same endpoint.
|
|
74
82
|
*
|
|
75
83
|
* @example
|
|
76
|
-
* GET 500 /api/v2/case-management/cases/123 → "500:/api/v2/case-management"
|
|
84
|
+
* GET 500 /api/v2/case-management/cases/123 → "GET:500:/api/v2/case-management"
|
|
85
|
+
* POST 404 /api/v2/users → "POST:404:/api/v2/users"
|
|
86
|
+
*
|
|
87
|
+
* @rationale
|
|
88
|
+
* A GET 404 vs POST 404 on same endpoint might represent different issues:
|
|
89
|
+
* - GET 404 /api/users/123 → User not found (expected in some tests)
|
|
90
|
+
* - POST 404 /api/users → Endpoint doesn't exist (critical error)
|
|
77
91
|
*/
|
|
78
92
|
function createErrorPatternKey(error) {
|
|
79
93
|
const basePath = extractBasePath(error.url);
|
|
80
|
-
return `${error.status}:${basePath}`;
|
|
94
|
+
return `${error.method}:${error.status}:${basePath}`;
|
|
81
95
|
}
|
|
82
96
|
/**
|
|
83
97
|
* Check if we've already failed enough tests for this error pattern.
|
|
@@ -88,9 +102,9 @@ function createErrorPatternKey(error) {
|
|
|
88
102
|
*
|
|
89
103
|
* @example
|
|
90
104
|
* Test encounters 3 errors:
|
|
91
|
-
* - 500:/api/v2/cases (count: 1, limit: 1) → at limit
|
|
92
|
-
* - 404:/api/v2/users (count: 0, limit: 1) → NEW pattern
|
|
93
|
-
* - 503:/api/v2/metrics (count: 0, limit: 1) → NEW pattern
|
|
105
|
+
* - GET:500:/api/v2/cases (count: 1, limit: 1) → at limit
|
|
106
|
+
* - POST:404:/api/v2/users (count: 0, limit: 1) → NEW pattern
|
|
107
|
+
* - GET:503:/api/v2/metrics (count: 0, limit: 1) → NEW pattern
|
|
94
108
|
* Result: false (test should fail because 2 patterns are new)
|
|
95
109
|
*/
|
|
96
110
|
function shouldSkipFailureForErrorPattern(errorData, maxTestsPerError) {
|
|
@@ -115,9 +129,9 @@ function shouldSkipFailureForErrorPattern(errorData, maxTestsPerError) {
|
|
|
115
129
|
*
|
|
116
130
|
* @example
|
|
117
131
|
* Test encounters 3 errors with maxTestsPerError: 1
|
|
118
|
-
* - 500:/api/v2/old (count: 1, limit: 1) → at limit, DON'T increment
|
|
119
|
-
* - 404:/api/v2/new (count: 0, limit: 1) → new pattern, increment to 1
|
|
120
|
-
* - 503:/api/v2/other (count: 0, limit: 1) → new pattern, increment to 1
|
|
132
|
+
* - GET:500:/api/v2/old (count: 1, limit: 1) → at limit, DON'T increment
|
|
133
|
+
* - POST:404:/api/v2/new (count: 0, limit: 1) → new pattern, increment to 1
|
|
134
|
+
* - GET:503:/api/v2/other (count: 0, limit: 1) → new pattern, increment to 1
|
|
121
135
|
*/
|
|
122
136
|
function incrementErrorPatternCounts(errorData, maxTestsPerError) {
|
|
123
137
|
for (const error of errorData) {
|
|
@@ -126,7 +140,13 @@ function incrementErrorPatternCounts(errorData, maxTestsPerError) {
|
|
|
126
140
|
// Only increment if this pattern contributed to the test failing
|
|
127
141
|
// (i.e., it was below the limit and thus caused the failure)
|
|
128
142
|
if (currentCount < maxTestsPerError) {
|
|
129
|
-
|
|
143
|
+
const newCount = currentCount + 1;
|
|
144
|
+
errorPatternFailureCount.set(patternKey, newCount);
|
|
145
|
+
// Debug logging to help developers track pattern counts
|
|
146
|
+
log_1.log.debugSync(`Pattern ${patternKey} count incremented: ${currentCount} -> ${newCount} (limit: ${maxTestsPerError})`);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
log_1.log.debugSync(`Pattern ${patternKey} already at limit: ${currentCount}/${maxTestsPerError} - not incrementing`);
|
|
130
150
|
}
|
|
131
151
|
}
|
|
132
152
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../../src/network-error-monitor/fixtures.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;
|
|
1
|
+
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../../src/network-error-monitor/fixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,17 +14,38 @@ type NetworkErrorMonitorFixture = {
|
|
|
14
14
|
/** Automatically monitors network responses for errors */
|
|
15
15
|
networkErrorMonitor: void;
|
|
16
16
|
};
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Base configuration without excludePatterns - maxTestsPerError cannot be used
|
|
19
|
+
*/
|
|
20
|
+
type BaseNetworkErrorMonitorConfig = {
|
|
21
|
+
/** Not specified - maxTestsPerError cannot be used without excludePatterns */
|
|
22
|
+
excludePatterns?: undefined;
|
|
23
|
+
/** Cannot be specified without excludePatterns */
|
|
24
|
+
maxTestsPerError?: never;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Configuration with excludePatterns - enables maxTestsPerError option
|
|
28
|
+
*/
|
|
29
|
+
type NetworkErrorMonitorConfigWithPatterns = {
|
|
18
30
|
/** Regex patterns for URLs to exclude from error monitoring */
|
|
19
|
-
excludePatterns
|
|
31
|
+
excludePatterns: RegExp[];
|
|
20
32
|
/**
|
|
21
33
|
* Maximum number of tests that can fail per unique error pattern.
|
|
22
34
|
* Once this limit is reached, subsequent tests just log the error without failing.
|
|
23
35
|
* Default: Infinity (all tests fail)
|
|
36
|
+
* Requires excludePatterns to be specified.
|
|
24
37
|
* @example maxTestsPerError: 1 // Only first test fails, rest just log
|
|
25
38
|
*/
|
|
26
39
|
maxTestsPerError?: number;
|
|
27
40
|
};
|
|
41
|
+
/**
|
|
42
|
+
* Configuration options for the network error monitor.
|
|
43
|
+
*
|
|
44
|
+
* Note: maxTestsPerError can only be used when excludePatterns is specified.
|
|
45
|
+
* This enforces a best practice where domino effect prevention is paired with
|
|
46
|
+
* known exclusion patterns.
|
|
47
|
+
*/
|
|
48
|
+
type NetworkErrorMonitorConfig = BaseNetworkErrorMonitorConfig | NetworkErrorMonitorConfigWithPatterns;
|
|
28
49
|
/**
|
|
29
50
|
* Creates a network error monitoring fixture with configurable exclusion patterns and fail-fast behavior.
|
|
30
51
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/network-error-monitor/fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAY,QAAQ,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/network-error-monitor/fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAY,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAwBhE,KAAK,0BAA0B,GAAG;IAChC,0DAA0D;IAC1D,mBAAmB,EAAE,IAAI,CAAA;CAC1B,CAAA;AAED;;GAEG;AACH,KAAK,6BAA6B,GAAG;IACnC,8EAA8E;IAC9E,eAAe,CAAC,EAAE,SAAS,CAAA;IAC3B,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,KAAK,CAAA;CACzB,CAAA;AAED;;GAEG;AACH,KAAK,qCAAqC,GAAG;IAC3C,+DAA+D;IAC/D,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED;;;;;;GAMG;AACH,KAAK,yBAAyB,GAC1B,6BAA6B,GAC7B,qCAAqC,CAAA;AAyNzC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,GAAE,yBAA8B;sCAOtB;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,OACnB,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,YACtB,QAAQ;;;EAoFzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,eAAO,MAAM,IAAI,0QAGhB,CAAA;AAED,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -19,7 +19,12 @@ const log_1 = require("../log/log");
|
|
|
19
19
|
* Global state to track how many tests have failed per error pattern.
|
|
20
20
|
* This prevents domino effect where same backend issue fails hundreds of tests.
|
|
21
21
|
*
|
|
22
|
-
*
|
|
22
|
+
* IMPORTANT: This state is worker-scoped and persists across test files.
|
|
23
|
+
* - Parallel workers have independent state (no cross-contamination)
|
|
24
|
+
* - Sequential tests in same worker share this state
|
|
25
|
+
* - State is never reset during worker lifetime
|
|
26
|
+
*
|
|
27
|
+
* Key format: `${method}:${status}:${basePath}` (e.g., "GET:500:/api/v2/case-management")
|
|
23
28
|
* Value: number of tests that have already failed with this error pattern
|
|
24
29
|
*/
|
|
25
30
|
const errorPatternFailureCount = new Map();
|
|
@@ -66,18 +71,27 @@ function extractBasePath(url) {
|
|
|
66
71
|
return '/' + pathSegments.slice(0, 3).join('/');
|
|
67
72
|
}
|
|
68
73
|
catch {
|
|
74
|
+
// Log parsing failures to help debug issues with malformed URLs
|
|
75
|
+
log_1.log.warningSync(`Failed to parse URL for error pattern grouping: ${url}. Using full URL as pattern key.`);
|
|
69
76
|
return url;
|
|
70
77
|
}
|
|
71
78
|
}
|
|
72
79
|
/**
|
|
73
80
|
* Create error pattern key for tracking failures across tests.
|
|
81
|
+
* Includes HTTP method to distinguish between different error types on same endpoint.
|
|
74
82
|
*
|
|
75
83
|
* @example
|
|
76
|
-
* GET 500 /api/v2/case-management/cases/123 → "500:/api/v2/case-management"
|
|
84
|
+
* GET 500 /api/v2/case-management/cases/123 → "GET:500:/api/v2/case-management"
|
|
85
|
+
* POST 404 /api/v2/users → "POST:404:/api/v2/users"
|
|
86
|
+
*
|
|
87
|
+
* @rationale
|
|
88
|
+
* A GET 404 vs POST 404 on same endpoint might represent different issues:
|
|
89
|
+
* - GET 404 /api/users/123 → User not found (expected in some tests)
|
|
90
|
+
* - POST 404 /api/users → Endpoint doesn't exist (critical error)
|
|
77
91
|
*/
|
|
78
92
|
function createErrorPatternKey(error) {
|
|
79
93
|
const basePath = extractBasePath(error.url);
|
|
80
|
-
return `${error.status}:${basePath}`;
|
|
94
|
+
return `${error.method}:${error.status}:${basePath}`;
|
|
81
95
|
}
|
|
82
96
|
/**
|
|
83
97
|
* Check if we've already failed enough tests for this error pattern.
|
|
@@ -88,9 +102,9 @@ function createErrorPatternKey(error) {
|
|
|
88
102
|
*
|
|
89
103
|
* @example
|
|
90
104
|
* Test encounters 3 errors:
|
|
91
|
-
* - 500:/api/v2/cases (count: 1, limit: 1) → at limit
|
|
92
|
-
* - 404:/api/v2/users (count: 0, limit: 1) → NEW pattern
|
|
93
|
-
* - 503:/api/v2/metrics (count: 0, limit: 1) → NEW pattern
|
|
105
|
+
* - GET:500:/api/v2/cases (count: 1, limit: 1) → at limit
|
|
106
|
+
* - POST:404:/api/v2/users (count: 0, limit: 1) → NEW pattern
|
|
107
|
+
* - GET:503:/api/v2/metrics (count: 0, limit: 1) → NEW pattern
|
|
94
108
|
* Result: false (test should fail because 2 patterns are new)
|
|
95
109
|
*/
|
|
96
110
|
function shouldSkipFailureForErrorPattern(errorData, maxTestsPerError) {
|
|
@@ -115,9 +129,9 @@ function shouldSkipFailureForErrorPattern(errorData, maxTestsPerError) {
|
|
|
115
129
|
*
|
|
116
130
|
* @example
|
|
117
131
|
* Test encounters 3 errors with maxTestsPerError: 1
|
|
118
|
-
* - 500:/api/v2/old (count: 1, limit: 1) → at limit, DON'T increment
|
|
119
|
-
* - 404:/api/v2/new (count: 0, limit: 1) → new pattern, increment to 1
|
|
120
|
-
* - 503:/api/v2/other (count: 0, limit: 1) → new pattern, increment to 1
|
|
132
|
+
* - GET:500:/api/v2/old (count: 1, limit: 1) → at limit, DON'T increment
|
|
133
|
+
* - POST:404:/api/v2/new (count: 0, limit: 1) → new pattern, increment to 1
|
|
134
|
+
* - GET:503:/api/v2/other (count: 0, limit: 1) → new pattern, increment to 1
|
|
121
135
|
*/
|
|
122
136
|
function incrementErrorPatternCounts(errorData, maxTestsPerError) {
|
|
123
137
|
for (const error of errorData) {
|
|
@@ -126,7 +140,13 @@ function incrementErrorPatternCounts(errorData, maxTestsPerError) {
|
|
|
126
140
|
// Only increment if this pattern contributed to the test failing
|
|
127
141
|
// (i.e., it was below the limit and thus caused the failure)
|
|
128
142
|
if (currentCount < maxTestsPerError) {
|
|
129
|
-
|
|
143
|
+
const newCount = currentCount + 1;
|
|
144
|
+
errorPatternFailureCount.set(patternKey, newCount);
|
|
145
|
+
// Debug logging to help developers track pattern counts
|
|
146
|
+
log_1.log.debugSync(`Pattern ${patternKey} count incremented: ${currentCount} -> ${newCount} (limit: ${maxTestsPerError})`);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
log_1.log.debugSync(`Pattern ${patternKey} already at limit: ${currentCount}/${maxTestsPerError} - not incrementing`);
|
|
130
150
|
}
|
|
131
151
|
}
|
|
132
152
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../../src/network-error-monitor/fixtures.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;
|
|
1
|
+
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../../src/network-error-monitor/fixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,17 +14,38 @@ type NetworkErrorMonitorFixture = {
|
|
|
14
14
|
/** Automatically monitors network responses for errors */
|
|
15
15
|
networkErrorMonitor: void;
|
|
16
16
|
};
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Base configuration without excludePatterns - maxTestsPerError cannot be used
|
|
19
|
+
*/
|
|
20
|
+
type BaseNetworkErrorMonitorConfig = {
|
|
21
|
+
/** Not specified - maxTestsPerError cannot be used without excludePatterns */
|
|
22
|
+
excludePatterns?: undefined;
|
|
23
|
+
/** Cannot be specified without excludePatterns */
|
|
24
|
+
maxTestsPerError?: never;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Configuration with excludePatterns - enables maxTestsPerError option
|
|
28
|
+
*/
|
|
29
|
+
type NetworkErrorMonitorConfigWithPatterns = {
|
|
18
30
|
/** Regex patterns for URLs to exclude from error monitoring */
|
|
19
|
-
excludePatterns
|
|
31
|
+
excludePatterns: RegExp[];
|
|
20
32
|
/**
|
|
21
33
|
* Maximum number of tests that can fail per unique error pattern.
|
|
22
34
|
* Once this limit is reached, subsequent tests just log the error without failing.
|
|
23
35
|
* Default: Infinity (all tests fail)
|
|
36
|
+
* Requires excludePatterns to be specified.
|
|
24
37
|
* @example maxTestsPerError: 1 // Only first test fails, rest just log
|
|
25
38
|
*/
|
|
26
39
|
maxTestsPerError?: number;
|
|
27
40
|
};
|
|
41
|
+
/**
|
|
42
|
+
* Configuration options for the network error monitor.
|
|
43
|
+
*
|
|
44
|
+
* Note: maxTestsPerError can only be used when excludePatterns is specified.
|
|
45
|
+
* This enforces a best practice where domino effect prevention is paired with
|
|
46
|
+
* known exclusion patterns.
|
|
47
|
+
*/
|
|
48
|
+
type NetworkErrorMonitorConfig = BaseNetworkErrorMonitorConfig | NetworkErrorMonitorConfigWithPatterns;
|
|
28
49
|
/**
|
|
29
50
|
* Creates a network error monitoring fixture with configurable exclusion patterns and fail-fast behavior.
|
|
30
51
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/network-error-monitor/fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAY,QAAQ,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../src/network-error-monitor/fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAY,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAwBhE,KAAK,0BAA0B,GAAG;IAChC,0DAA0D;IAC1D,mBAAmB,EAAE,IAAI,CAAA;CAC1B,CAAA;AAED;;GAEG;AACH,KAAK,6BAA6B,GAAG;IACnC,8EAA8E;IAC9E,eAAe,CAAC,EAAE,SAAS,CAAA;IAC3B,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,KAAK,CAAA;CACzB,CAAA;AAED;;GAEG;AACH,KAAK,qCAAqC,GAAG;IAC3C,+DAA+D;IAC/D,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED;;;;;;GAMG;AACH,KAAK,yBAAyB,GAC1B,6BAA6B,GAC7B,qCAAqC,CAAA;AAyNzC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,GAAE,yBAA8B;sCAOtB;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,OACnB,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,YACtB,QAAQ;;;EAoFzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,eAAO,MAAM,IAAI,0QAGhB,CAAA;AAED,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA"}
|