@flemist/test-variants 3.0.2 → 5.0.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 (118) hide show
  1. package/README.md +283 -49
  2. package/build/browser/index.cjs +1 -0
  3. package/build/browser/index.d.ts +1 -0
  4. package/build/browser/index.mjs +4 -0
  5. package/build/common/-test/freezeProps.d.ts +2 -0
  6. package/build/common/garbage-collect/garbageCollect.d.ts +5 -0
  7. package/build/common/helpers/log.d.ts +5 -0
  8. package/build/common/index.cjs +1 -0
  9. package/build/common/index.d.ts +2 -0
  10. package/build/common/index.mjs +4 -0
  11. package/build/common/test-variants/-test/caches.d.ts +1 -0
  12. package/build/common/test-variants/-test/constants.d.ts +8 -0
  13. package/build/common/test-variants/-test/estimations/estimateCallCount.d.ts +4 -0
  14. package/build/common/test-variants/-test/estimations/estimateModeChanges.d.ts +4 -0
  15. package/build/common/test-variants/-test/generators/findBestError.d.ts +4 -0
  16. package/build/common/test-variants/-test/generators/primitives.d.ts +16 -0
  17. package/build/common/test-variants/-test/generators/run.d.ts +9 -0
  18. package/build/common/test-variants/-test/generators/template.d.ts +3 -0
  19. package/build/common/test-variants/-test/generators/testFunc.d.ts +3 -0
  20. package/build/common/test-variants/-test/helpers/CallController.d.ts +28 -0
  21. package/build/common/test-variants/-test/helpers/ErrorVariantController.d.ts +17 -0
  22. package/build/common/test-variants/-test/helpers/TestError.d.ts +2 -0
  23. package/build/common/test-variants/-test/helpers/deepEqualJsonLikeWithoutSeed.d.ts +1 -0
  24. package/build/common/test-variants/-test/helpers/deepFreezeJsonLike.d.ts +1 -0
  25. package/build/common/test-variants/-test/helpers/forEachVariant.d.ts +4 -0
  26. package/build/common/test-variants/-test/helpers/getMaxAttemptsPerVariant.d.ts +2 -0
  27. package/build/common/test-variants/-test/helpers/getParallelLimit.d.ts +7 -0
  28. package/build/common/test-variants/-test/helpers/getVariantArgs.d.ts +12 -0
  29. package/build/common/test-variants/-test/helpers/runWithTimeController.d.ts +7 -0
  30. package/build/common/test-variants/-test/invariants/CallCountInvariant.d.ts +18 -0
  31. package/build/common/test-variants/-test/invariants/CallOptionsInvariant.d.ts +32 -0
  32. package/build/common/test-variants/-test/invariants/ErrorBehaviorInvariant.d.ts +32 -0
  33. package/build/common/test-variants/-test/invariants/FindBestErrorInvariant.d.ts +37 -0
  34. package/build/common/test-variants/-test/invariants/IterationsInvariant.d.ts +21 -0
  35. package/build/common/test-variants/-test/invariants/LimitTimeInvariant.d.ts +26 -0
  36. package/build/common/test-variants/-test/invariants/LogInvariant.d.ts +126 -0
  37. package/build/common/test-variants/-test/invariants/OnErrorInvariant.d.ts +38 -0
  38. package/build/common/test-variants/-test/invariants/OnModeChangeInvariant.d.ts +32 -0
  39. package/build/common/test-variants/-test/invariants/ParallelInvariant.d.ts +25 -0
  40. package/build/common/test-variants/-test/log.d.ts +3 -0
  41. package/build/common/test-variants/-test/types.d.ts +34 -0
  42. package/build/common/test-variants/-test/variants.d.ts +3 -0
  43. package/build/common/test-variants/createTestRun.d.ts +3 -0
  44. package/build/common/test-variants/createTestVariants.d.ts +4 -0
  45. package/build/common/test-variants/iterator/createVariantsIterator.d.ts +4 -0
  46. package/build/common/test-variants/iterator/helpers/findValueIndex.d.ts +2 -0
  47. package/build/common/test-variants/iterator/helpers/mode.d.ts +3 -0
  48. package/build/common/test-variants/iterator/helpers/template.d.ts +7 -0
  49. package/build/common/test-variants/iterator/types.d.ts +102 -0
  50. package/build/common/test-variants/iterator/variant-navigation/-test/helpers/caches.d.ts +1 -0
  51. package/build/common/test-variants/iterator/variant-navigation/-test/helpers/check.d.ts +2 -0
  52. package/build/common/test-variants/iterator/variant-navigation/-test/helpers/create.d.ts +3 -0
  53. package/build/common/test-variants/iterator/variant-navigation/-test/helpers/format.d.ts +6 -0
  54. package/build/common/test-variants/iterator/variant-navigation/-test/helpers/parse.d.ts +8 -0
  55. package/build/common/test-variants/iterator/variant-navigation/-test/helpers/variants.d.ts +12 -0
  56. package/build/common/test-variants/iterator/variant-navigation/variantNavigation.d.ts +28 -0
  57. package/build/common/test-variants/log/format.d.ts +7 -0
  58. package/build/common/test-variants/log/getMemoryUsage.d.ts +2 -0
  59. package/build/common/test-variants/log/logOptions.d.ts +8 -0
  60. package/build/common/test-variants/run/AbortErrorSilent.d.ts +3 -0
  61. package/build/common/test-variants/run/RunContext.d.ts +21 -0
  62. package/build/common/test-variants/run/createRunResult.d.ts +6 -0
  63. package/build/common/test-variants/run/createRunState.d.ts +23 -0
  64. package/build/common/test-variants/run/errorHandlers.d.ts +20 -0
  65. package/build/common/test-variants/run/gcManager.d.ts +6 -0
  66. package/build/common/test-variants/run/resolveRunOptions.d.ts +23 -0
  67. package/build/common/test-variants/run/runIterationLoop.d.ts +9 -0
  68. package/build/common/test-variants/run/runLogger.d.ts +9 -0
  69. package/build/common/test-variants/run/types.d.ts +57 -0
  70. package/build/common/test-variants/testVariantsRun.d.ts +6 -0
  71. package/build/common/test-variants/types.d.ts +183 -0
  72. package/build/createTestVariants-BL9wiuRD.mjs +1014 -0
  73. package/build/createTestVariants-CpzwjKTs.js +4 -0
  74. package/build/node/index.cjs +1 -0
  75. package/build/node/index.d.ts +8 -0
  76. package/build/node/index.mjs +102 -0
  77. package/build/node/test-variants/createSaveErrorVariantsStore.d.ts +5 -0
  78. package/{dist/lib → build/node}/test-variants/saveErrorVariants.d.ts +4 -3
  79. package/package.json +109 -68
  80. package/dist/bundle/browser.js +0 -650
  81. package/dist/lib/garbage-collect/garbageCollect.cjs +0 -30
  82. package/dist/lib/garbage-collect/garbageCollect.d.ts +0 -2
  83. package/dist/lib/garbage-collect/garbageCollect.mjs +0 -26
  84. package/dist/lib/index.cjs +0 -23
  85. package/dist/lib/index.d.ts +0 -7
  86. package/dist/lib/index.mjs +0 -13
  87. package/dist/lib/test-variants/argsToString.cjs +0 -17
  88. package/dist/lib/test-variants/argsToString.d.ts +0 -2
  89. package/dist/lib/test-variants/argsToString.mjs +0 -13
  90. package/dist/lib/test-variants/createTestVariants.cjs +0 -91
  91. package/dist/lib/test-variants/createTestVariants.d.ts +0 -8
  92. package/dist/lib/test-variants/createTestVariants.mjs +0 -87
  93. package/dist/lib/test-variants/createTestVariants.perf.cjs +0 -44
  94. package/dist/lib/test-variants/createTestVariants.perf.d.ts +0 -1
  95. package/dist/lib/test-variants/createTestVariants.perf.mjs +0 -42
  96. package/dist/lib/test-variants/prime.cjs +0 -65
  97. package/dist/lib/test-variants/prime.d.ts +0 -3
  98. package/dist/lib/test-variants/prime.mjs +0 -59
  99. package/dist/lib/test-variants/prime.perf.cjs +0 -30
  100. package/dist/lib/test-variants/prime.perf.d.ts +0 -1
  101. package/dist/lib/test-variants/prime.perf.mjs +0 -28
  102. package/dist/lib/test-variants/saveErrorVariants.cjs +0 -97
  103. package/dist/lib/test-variants/saveErrorVariants.mjs +0 -69
  104. package/dist/lib/test-variants/testVariantsCreateTestRun.cjs +0 -80
  105. package/dist/lib/test-variants/testVariantsCreateTestRun.d.ts +0 -22
  106. package/dist/lib/test-variants/testVariantsCreateTestRun.mjs +0 -76
  107. package/dist/lib/test-variants/testVariantsIterable.cjs +0 -70
  108. package/dist/lib/test-variants/testVariantsIterable.d.ts +0 -15
  109. package/dist/lib/test-variants/testVariantsIterable.mjs +0 -66
  110. package/dist/lib/test-variants/testVariantsIterator.cjs +0 -359
  111. package/dist/lib/test-variants/testVariantsIterator.d.ts +0 -67
  112. package/dist/lib/test-variants/testVariantsIterator.mjs +0 -355
  113. package/dist/lib/test-variants/testVariantsRun.cjs +0 -289
  114. package/dist/lib/test-variants/testVariantsRun.d.ts +0 -50
  115. package/dist/lib/test-variants/testVariantsRun.mjs +0 -265
  116. package/dist/lib/test-variants/types.cjs +0 -2
  117. package/dist/lib/test-variants/types.d.ts +0 -20
  118. package/dist/lib/test-variants/types.mjs +0 -1
@@ -1,50 +0,0 @@
1
- import { TestVariantsTestRun } from './testVariantsCreateTestRun';
2
- import { type IAbortSignalFast } from '@flemist/abort-controller-fast';
3
- import { Obj, type SaveErrorVariantsOptions } from "./types";
4
- import { TestVariantsIterator, type GetSeedParams, type LimitArgOnError } from './testVariantsIterator';
5
- /** Options for finding the earliest failing variant across multiple test runs */
6
- export declare type TestVariantsFindBestErrorOptions = {
7
- /** Number of full passes through all variants */
8
- cycles: number;
9
- /** Generates seed for reproducible randomized testing; seed is added to args */
10
- getSeed?: null | ((params: GetSeedParams) => any);
11
- /** Number of repeat tests per variant within each cycle */
12
- repeatsPerVariant?: null | number;
13
- /** Custom equality for comparing arg values when finding indexes */
14
- equals?: null | ((a: any, b: any) => boolean);
15
- /** Limit per-arg indexes on error; boolean enables/disables, function for custom per-arg logic */
16
- limitArgOnError?: null | boolean | LimitArgOnError;
17
- /** Return found error instead of throwing after all cycles complete */
18
- dontThrowIfError?: null | boolean;
19
- };
20
- export declare type TestVariantsRunOptions<Args extends Obj = Obj, SavedArgs = Args> = {
21
- /** Wait for garbage collection after iterations */
22
- GC_Iterations?: null | number;
23
- /** Same as GC_Iterations but only for async test variants, required for 10000 and more of Promise rejections */
24
- GC_IterationsAsync?: null | number;
25
- /** Wait for garbage collection after time interval, required to prevent the karma browserDisconnectTimeout */
26
- GC_Interval?: null | number;
27
- /** console log current iterations, required to prevent the karma browserNoActivityTimeout */
28
- logInterval?: null | number;
29
- /** console log iterations on test completed */
30
- logCompleted?: null | boolean;
31
- abortSignal?: null | IAbortSignalFast;
32
- parallel?: null | number | boolean;
33
- findBestError?: null | TestVariantsFindBestErrorOptions;
34
- /** Save error-causing args to files and replay them before normal iteration */
35
- saveErrorVariants?: null | SaveErrorVariantsOptions<Args, SavedArgs>;
36
- /** Tests only first N variants, ignores the rest. If null or not specified, tests all variants */
37
- limitVariantsCount?: null | number;
38
- /** Maximum test run duration in milliseconds; when exceeded, iteration stops and current results are returned */
39
- limitTime?: null | number;
40
- };
41
- export declare type TestVariantsBestError<Args extends Obj> = {
42
- error: any;
43
- args: Args;
44
- index: number;
45
- };
46
- export declare type TestVariantsRunResult<Arg extends Obj> = {
47
- iterations: number;
48
- bestError: null | TestVariantsBestError<Arg>;
49
- };
50
- export declare function testVariantsRun<Args extends Obj, SavedArgs = Args>(testRun: TestVariantsTestRun<Args>, variants: TestVariantsIterator<Args>, options?: TestVariantsRunOptions<Args, SavedArgs>): Promise<TestVariantsRunResult<Args>>;
@@ -1,265 +0,0 @@
1
- import { __awaiter } from 'tslib';
2
- import { AbortControllerFast } from '@flemist/abort-controller-fast';
3
- import { isPromiseLike, combineAbortSignals } from '@flemist/async-utils';
4
- import { Pool } from '@flemist/time-limits';
5
- import { garbageCollect } from '../garbage-collect/garbageCollect.mjs';
6
- import { generateErrorVariantFilePath, readErrorVariantFiles, parseErrorVariantFile, saveErrorVariantFile } from './saveErrorVariants.mjs';
7
- import * as path from 'path';
8
- import 'fs';
9
-
10
- function formatDuration(ms) {
11
- const seconds = ms / 1000;
12
- if (seconds < 60) {
13
- return `${seconds.toFixed(1)}s`;
14
- }
15
- const minutes = seconds / 60;
16
- if (minutes < 60) {
17
- return `${minutes.toFixed(1)}m`;
18
- }
19
- const hours = minutes / 60;
20
- return `${hours.toFixed(1)}h`;
21
- }
22
- function testVariantsRun(testRun, variants, options = {}) {
23
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
24
- return __awaiter(this, void 0, void 0, function* () {
25
- const saveErrorVariants = options.saveErrorVariants;
26
- const retriesPerVariant = (_a = saveErrorVariants === null || saveErrorVariants === void 0 ? void 0 : saveErrorVariants.retriesPerVariant) !== null && _a !== void 0 ? _a : 1;
27
- const useToFindBestError = saveErrorVariants === null || saveErrorVariants === void 0 ? void 0 : saveErrorVariants.useToFindBestError;
28
- const sessionDate = new Date();
29
- const errorVariantFilePath = saveErrorVariants
30
- ? path.resolve(saveErrorVariants.dir, (_c = (_b = saveErrorVariants.getFilePath) === null || _b === void 0 ? void 0 : _b.call(saveErrorVariants, { sessionDate })) !== null && _c !== void 0 ? _c : generateErrorVariantFilePath({ sessionDate }))
31
- : null;
32
- const GC_Iterations = (_d = options.GC_Iterations) !== null && _d !== void 0 ? _d : 1000000;
33
- const GC_IterationsAsync = (_e = options.GC_IterationsAsync) !== null && _e !== void 0 ? _e : 10000;
34
- const GC_Interval = (_f = options.GC_Interval) !== null && _f !== void 0 ? _f : 1000;
35
- const logInterval = (_g = options.logInterval) !== null && _g !== void 0 ? _g : 5000;
36
- const logCompleted = (_h = options.logCompleted) !== null && _h !== void 0 ? _h : true;
37
- const abortSignalExternal = options.abortSignal;
38
- const findBestError = options.findBestError;
39
- const cycles = (_j = findBestError === null || findBestError === void 0 ? void 0 : findBestError.cycles) !== null && _j !== void 0 ? _j : 1;
40
- const dontThrowIfError = findBestError === null || findBestError === void 0 ? void 0 : findBestError.dontThrowIfError;
41
- const limitTime = options.limitTime;
42
- const parallel = options.parallel === true
43
- ? Math.pow(2, 31)
44
- : !options.parallel || options.parallel <= 0
45
- ? 1
46
- : options.parallel;
47
- // Apply initial limits
48
- if (options.limitVariantsCount != null) {
49
- variants.addLimit({ index: options.limitVariantsCount });
50
- }
51
- // Replay phase: run previously saved error variants before normal iteration
52
- if (saveErrorVariants) {
53
- const files = yield readErrorVariantFiles(saveErrorVariants.dir);
54
- for (const filePath of files) {
55
- const args = yield parseErrorVariantFile(filePath, saveErrorVariants.jsonToArgs);
56
- for (let retry = 0; retry < retriesPerVariant; retry++) {
57
- try {
58
- const promiseOrResult = testRun(args, -1, null);
59
- if (isPromiseLike(promiseOrResult)) {
60
- yield promiseOrResult;
61
- }
62
- }
63
- catch (error) {
64
- if (useToFindBestError && findBestError) {
65
- // Store as pending limit for findBestError cycle
66
- variants.addLimit({ args, error });
67
- break; // Exit retry loop, continue to next file
68
- }
69
- else {
70
- throw error;
71
- }
72
- }
73
- }
74
- // If no error occurred during replays, the saved variant is no longer reproducible
75
- // (templates may have changed) - silently skip
76
- }
77
- }
78
- let prevCycleVariantsCount = null;
79
- let prevCycleDuration = null;
80
- const startTime = Date.now();
81
- let cycleStartTime = startTime;
82
- const abortControllerParallel = new AbortControllerFast();
83
- const abortSignalParallel = combineAbortSignals(abortSignalExternal, abortControllerParallel.signal);
84
- const abortSignalAll = abortSignalParallel;
85
- let debug = false;
86
- let iterations = 0;
87
- let iterationsAsync = 0;
88
- let prevLogTime = Date.now();
89
- let prevGC_Time = prevLogTime;
90
- let prevGC_Iterations = iterations;
91
- let prevGC_IterationsAsync = iterationsAsync;
92
- const pool = parallel <= 1
93
- ? null
94
- : new Pool(parallel);
95
- function onCompleted() {
96
- if (logCompleted) {
97
- console.log(`[test-variants] variants: ${variants.index}, iterations: ${iterations}, async: ${iterationsAsync}`);
98
- }
99
- }
100
- // Main iteration using iterator
101
- let timeLimitExceeded = false;
102
- variants.start();
103
- while (variants.cycleIndex < cycles && !timeLimitExceeded) {
104
- let args;
105
- while (!(abortSignalExternal === null || abortSignalExternal === void 0 ? void 0 : abortSignalExternal.aborted) && (debug || (args = variants.next()) != null)) {
106
- const _index = variants.index;
107
- const _args = args;
108
- const now = (logInterval || GC_Interval || limitTime) && Date.now();
109
- if (limitTime && now - startTime >= limitTime) {
110
- timeLimitExceeded = true;
111
- break;
112
- }
113
- if (logInterval && now - prevLogTime >= logInterval) {
114
- // the log is required to prevent the karma browserNoActivityTimeout
115
- let log = '';
116
- const cycleElapsed = now - cycleStartTime;
117
- const totalElapsed = now - startTime;
118
- if (findBestError) {
119
- log += `cycle: ${variants.cycleIndex}, variant: ${variants.index}`;
120
- let max = variants.count;
121
- if (max != null) {
122
- if (prevCycleVariantsCount != null && prevCycleVariantsCount < max) {
123
- max = prevCycleVariantsCount;
124
- }
125
- }
126
- if (max != null && variants.index > 0) {
127
- let estimatedCycleTime;
128
- if (prevCycleDuration != null && prevCycleVariantsCount != null
129
- && variants.index < prevCycleVariantsCount && cycleElapsed < prevCycleDuration) {
130
- const adjustedDuration = prevCycleDuration - cycleElapsed;
131
- const adjustedCount = prevCycleVariantsCount - variants.index;
132
- const speedForRemaining = adjustedDuration / adjustedCount;
133
- const remainingTime = (max - variants.index) * speedForRemaining;
134
- estimatedCycleTime = cycleElapsed + remainingTime;
135
- }
136
- else {
137
- estimatedCycleTime = cycleElapsed * max / variants.index;
138
- }
139
- log += `/${max} (${formatDuration(cycleElapsed)}/${formatDuration(estimatedCycleTime)})`;
140
- }
141
- else {
142
- log += ` (${formatDuration(cycleElapsed)})`;
143
- }
144
- }
145
- else {
146
- log += `variant: ${variants.index} (${formatDuration(cycleElapsed)})`;
147
- }
148
- log += `, total: ${iterations} (${formatDuration(totalElapsed)})`;
149
- console.log(log);
150
- prevLogTime = now;
151
- }
152
- if (GC_Iterations && iterations - prevGC_Iterations >= GC_Iterations
153
- || GC_IterationsAsync && iterationsAsync - prevGC_IterationsAsync >= GC_IterationsAsync
154
- || GC_Interval && now - prevGC_Time >= GC_Interval) {
155
- prevGC_Iterations = iterations;
156
- prevGC_IterationsAsync = iterationsAsync;
157
- prevGC_Time = now;
158
- yield garbageCollect(1);
159
- }
160
- if (abortSignalExternal === null || abortSignalExternal === void 0 ? void 0 : abortSignalExternal.aborted) {
161
- continue;
162
- }
163
- if (!pool || abortSignalParallel.aborted) {
164
- try {
165
- let promiseOrIterations = testRun(_args, _index, abortSignalParallel);
166
- if (isPromiseLike(promiseOrIterations)) {
167
- promiseOrIterations = yield promiseOrIterations;
168
- }
169
- if (!promiseOrIterations) {
170
- debug = true;
171
- abortControllerParallel.abort();
172
- continue;
173
- }
174
- const { iterationsAsync: _iterationsAsync, iterationsSync: _iterationsSync } = promiseOrIterations;
175
- iterationsAsync += _iterationsAsync;
176
- iterations += _iterationsSync + _iterationsAsync;
177
- }
178
- catch (err) {
179
- if (errorVariantFilePath) {
180
- yield saveErrorVariantFile(_args, errorVariantFilePath, saveErrorVariants.argsToJson);
181
- }
182
- if (findBestError) {
183
- variants.addLimit({ error: err });
184
- debug = false;
185
- }
186
- else {
187
- throw err;
188
- }
189
- }
190
- }
191
- else {
192
- if (!pool.hold(1)) {
193
- yield pool.holdWait(1);
194
- }
195
- // eslint-disable-next-line @typescript-eslint/no-loop-func
196
- void (() => __awaiter(this, void 0, void 0, function* () {
197
- try {
198
- if (abortSignalParallel === null || abortSignalParallel === void 0 ? void 0 : abortSignalParallel.aborted) {
199
- return;
200
- }
201
- let promiseOrIterations = testRun(_args, _index, abortSignalParallel);
202
- if (isPromiseLike(promiseOrIterations)) {
203
- promiseOrIterations = yield promiseOrIterations;
204
- }
205
- if (!promiseOrIterations) {
206
- debug = true;
207
- abortControllerParallel.abort();
208
- return;
209
- }
210
- const { iterationsAsync: _iterationsAsync, iterationsSync: _iterationsSync } = promiseOrIterations;
211
- iterationsAsync += _iterationsAsync;
212
- iterations += _iterationsSync + _iterationsAsync;
213
- }
214
- catch (err) {
215
- if (errorVariantFilePath) {
216
- yield saveErrorVariantFile(_args, errorVariantFilePath, saveErrorVariants.argsToJson);
217
- }
218
- if (findBestError) {
219
- variants.addLimit({ error: err });
220
- debug = false;
221
- }
222
- else {
223
- throw err;
224
- }
225
- }
226
- finally {
227
- void pool.release(1);
228
- }
229
- }))();
230
- }
231
- }
232
- // Track cycle metrics for logging
233
- prevCycleVariantsCount = variants.count;
234
- prevCycleDuration = Date.now() - cycleStartTime;
235
- cycleStartTime = Date.now();
236
- variants.start();
237
- }
238
- if (pool) {
239
- yield pool.holdWait(parallel);
240
- void pool.release(parallel);
241
- }
242
- if (abortSignalAll === null || abortSignalAll === void 0 ? void 0 : abortSignalAll.aborted) {
243
- throw abortSignalAll.reason;
244
- }
245
- onCompleted();
246
- yield garbageCollect(1);
247
- // Construct bestError from iterator state
248
- const bestError = variants.limit
249
- ? {
250
- error: variants.limit.error,
251
- args: variants.limit.args,
252
- index: variants.count,
253
- }
254
- : null;
255
- if (bestError && !dontThrowIfError) {
256
- throw bestError.error;
257
- }
258
- return {
259
- iterations,
260
- bestError,
261
- };
262
- });
263
- }
264
-
265
- export { testVariantsRun };
@@ -1,2 +0,0 @@
1
- 'use strict';
2
-
@@ -1,20 +0,0 @@
1
- export declare type Obj = Record<string, any>;
2
- /** Options for generating error variant file path */
3
- export declare type GenerateErrorVariantFilePathOptions = {
4
- sessionDate: Date;
5
- };
6
- /** Options for saving and replaying error-causing parameter combinations */
7
- export declare type SaveErrorVariantsOptions<Args, SavedArgs = Args> = {
8
- /** Directory path for error variant JSON files */
9
- dir: string;
10
- /** Retry attempts per variant during replay phase (default: 1) */
11
- retriesPerVariant?: null | number;
12
- /** Custom file path generator; returns path relative to dir; null - use default path */
13
- getFilePath?: null | ((options: GenerateErrorVariantFilePathOptions) => string | null);
14
- /** Transform args before JSON serialization */
15
- argsToJson?: null | ((args: Args) => string | SavedArgs);
16
- /** Transform parsed JSON back to args */
17
- jsonToArgs?: null | ((json: SavedArgs) => Args);
18
- /** Use saved errors to set findBestError limits instead of throwing on replay */
19
- useToFindBestError?: null | boolean;
20
- };
@@ -1 +0,0 @@
1
-