@scenarist/core 0.2.1 → 0.3.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.
Files changed (55) hide show
  1. package/dist/adapters/console-logger.d.ts +40 -0
  2. package/dist/adapters/console-logger.d.ts.map +1 -0
  3. package/dist/adapters/console-logger.js +193 -0
  4. package/dist/adapters/in-memory-state-manager.d.ts.map +1 -1
  5. package/dist/adapters/in-memory-state-manager.js +3 -0
  6. package/dist/adapters/index.d.ts +2 -0
  7. package/dist/adapters/index.d.ts.map +1 -1
  8. package/dist/adapters/index.js +2 -0
  9. package/dist/adapters/noop-logger.d.ts +26 -0
  10. package/dist/adapters/noop-logger.d.ts.map +1 -0
  11. package/dist/adapters/noop-logger.js +26 -0
  12. package/dist/contracts/framework-adapter.d.ts +18 -0
  13. package/dist/contracts/framework-adapter.d.ts.map +1 -1
  14. package/dist/domain/config-builder.d.ts.map +1 -1
  15. package/dist/domain/config-builder.js +13 -0
  16. package/dist/domain/deep-equals.d.ts.map +1 -1
  17. package/dist/domain/deep-equals.js +2 -0
  18. package/dist/domain/index.d.ts +1 -0
  19. package/dist/domain/index.d.ts.map +1 -1
  20. package/dist/domain/index.js +1 -0
  21. package/dist/domain/log-events.d.ts +71 -0
  22. package/dist/domain/log-events.d.ts.map +1 -0
  23. package/dist/domain/log-events.js +74 -0
  24. package/dist/domain/path-extraction.js +1 -0
  25. package/dist/domain/regex-matching.d.ts.map +1 -1
  26. package/dist/domain/regex-matching.js +1 -0
  27. package/dist/domain/response-selector.d.ts +2 -1
  28. package/dist/domain/response-selector.d.ts.map +1 -1
  29. package/dist/domain/response-selector.js +120 -13
  30. package/dist/domain/scenario-manager.d.ts +4 -2
  31. package/dist/domain/scenario-manager.d.ts.map +1 -1
  32. package/dist/domain/scenario-manager.js +42 -24
  33. package/dist/domain/state-condition-evaluator.js +1 -0
  34. package/dist/domain/template-replacement.d.ts.map +1 -1
  35. package/dist/domain/template-replacement.js +3 -0
  36. package/dist/index.d.ts +1 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +2 -0
  39. package/dist/ports/driven/logger.d.ts +119 -0
  40. package/dist/ports/driven/logger.d.ts.map +1 -0
  41. package/dist/ports/driven/logger.js +1 -0
  42. package/dist/ports/driven/response-selector.d.ts +3 -1
  43. package/dist/ports/driven/response-selector.d.ts.map +1 -1
  44. package/dist/ports/driven/response-selector.js +1 -0
  45. package/dist/ports/index.d.ts +1 -0
  46. package/dist/ports/index.d.ts.map +1 -1
  47. package/dist/types/config.d.ts +29 -0
  48. package/dist/types/config.d.ts.map +1 -1
  49. package/dist/types/errors.d.ts +49 -0
  50. package/dist/types/errors.d.ts.map +1 -0
  51. package/dist/types/errors.js +26 -0
  52. package/dist/types/index.d.ts +3 -1
  53. package/dist/types/index.d.ts.map +1 -1
  54. package/dist/types/index.js +2 -1
  55. package/package.json +3 -3
@@ -1,4 +1,24 @@
1
1
  import type { ScenaristScenarios } from "./scenario.js";
2
+ /**
3
+ * How errors should be handled when they occur.
4
+ *
5
+ * - `throw`: Throw ScenaristError (strict - test fails with clear message)
6
+ * - `warn`: Log at warn level, return undefined (let strictMode decide next step)
7
+ * - `ignore`: Return undefined silently (let strictMode decide next step)
8
+ */
9
+ export type ErrorBehavior = "throw" | "warn" | "ignore";
10
+ /**
11
+ * Configuration for how different error types should be handled.
12
+ * Default is 'throw' for all (strict by default).
13
+ */
14
+ export type ErrorBehaviors = {
15
+ /** How to handle when no mock matches a request. Default: 'throw' */
16
+ readonly onNoMockFound: ErrorBehavior;
17
+ /** How to handle when a sequence is exhausted. Default: 'throw' */
18
+ readonly onSequenceExhausted: ErrorBehavior;
19
+ /** How to handle when x-scenarist-test-id header is missing. Default: 'throw' */
20
+ readonly onMissingTestId: ErrorBehavior;
21
+ };
2
22
  /**
3
23
  * Configuration for the scenario management system.
4
24
  * All properties are readonly for immutability.
@@ -35,6 +55,11 @@ export type ScenaristConfig = {
35
55
  * The default test ID to use when no x-scenarist-test-id header is present.
36
56
  */
37
57
  readonly defaultTestId: string;
58
+ /**
59
+ * How different error types should be handled.
60
+ * Default is 'throw' for all (strict by default).
61
+ */
62
+ readonly errorBehaviors: ErrorBehaviors;
38
63
  };
39
64
  /**
40
65
  * Partial config for user input - missing values will use defaults.
@@ -66,5 +91,9 @@ export type ScenaristConfigInput<T extends ScenaristScenarios = ScenaristScenari
66
91
  */
67
92
  readonly scenarios: T;
68
93
  readonly defaultTestId?: string;
94
+ /**
95
+ * Optional error behavior overrides. Missing values use 'throw' as default.
96
+ */
97
+ readonly errorBehaviors?: Partial<ErrorBehaviors>;
69
98
  };
70
99
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE;QAClB,kEAAkE;QAClE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,kEAAkE;QAClE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,CAAC;IAEF;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,oBAAoB,CAC9B,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,IAC/C;IACF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3D;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IACtB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAExD;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,qEAAqE;IACrE,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,mEAAmE;IACnE,QAAQ,CAAC,mBAAmB,EAAE,aAAa,CAAC;IAC5C,iFAAiF;IACjF,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;CACzC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE;QAClB,kEAAkE;QAClE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,kEAAkE;QAClE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,CAAC;IAEF;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAE/B;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;CACzC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,oBAAoB,CAC9B,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,IAC/C;IACF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3D;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IACtB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC;;OAEG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CACnD,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Standard error codes for Scenarist errors.
3
+ * Use these constants when creating ScenaristError instances.
4
+ */
5
+ export declare const ErrorCodes: {
6
+ readonly SCENARIO_NOT_FOUND: "SCENARIO_NOT_FOUND";
7
+ readonly DUPLICATE_SCENARIO: "DUPLICATE_SCENARIO";
8
+ readonly NO_MOCK_FOUND: "NO_MOCK_FOUND";
9
+ readonly SEQUENCE_EXHAUSTED: "SEQUENCE_EXHAUSTED";
10
+ readonly MISSING_TEST_ID: "MISSING_TEST_ID";
11
+ readonly VALIDATION_ERROR: "VALIDATION_ERROR";
12
+ };
13
+ export type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];
14
+ /**
15
+ * Context information for Scenarist errors.
16
+ * Provides structured data to help diagnose and fix issues.
17
+ */
18
+ export type ErrorContext = {
19
+ readonly testId?: string;
20
+ readonly scenarioId?: string;
21
+ readonly requestInfo?: {
22
+ readonly method: string;
23
+ readonly url: string;
24
+ readonly headers?: Record<string, string>;
25
+ };
26
+ readonly mockInfo?: {
27
+ readonly index: number;
28
+ readonly matchCriteria?: object;
29
+ };
30
+ readonly hint?: string;
31
+ };
32
+ /**
33
+ * Options for creating a ScenaristError.
34
+ */
35
+ export type ScenaristErrorOptions = {
36
+ readonly code: string;
37
+ readonly context: ErrorContext;
38
+ readonly cause?: Error;
39
+ };
40
+ /**
41
+ * Base error class for all Scenarist errors.
42
+ * Includes error code and structured context for debugging.
43
+ */
44
+ export declare class ScenaristError extends Error {
45
+ readonly code: string;
46
+ readonly context: ErrorContext;
47
+ constructor(message: string, options: ScenaristErrorOptions);
48
+ }
49
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;;;CAOb,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAErE;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE;QACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC3C,CAAC;IACF,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;KACjC,CAAC;IACF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;gBAEnB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB;CAM5D"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Standard error codes for Scenarist errors.
3
+ * Use these constants when creating ScenaristError instances.
4
+ */
5
+ export const ErrorCodes = {
6
+ SCENARIO_NOT_FOUND: "SCENARIO_NOT_FOUND",
7
+ DUPLICATE_SCENARIO: "DUPLICATE_SCENARIO",
8
+ NO_MOCK_FOUND: "NO_MOCK_FOUND",
9
+ SEQUENCE_EXHAUSTED: "SEQUENCE_EXHAUSTED",
10
+ MISSING_TEST_ID: "MISSING_TEST_ID",
11
+ VALIDATION_ERROR: "VALIDATION_ERROR",
12
+ };
13
+ /**
14
+ * Base error class for all Scenarist errors.
15
+ * Includes error code and structured context for debugging.
16
+ */
17
+ export class ScenaristError extends Error {
18
+ code;
19
+ context;
20
+ constructor(message, options) {
21
+ super(message, { cause: options.cause });
22
+ this.name = "ScenaristError";
23
+ this.code = options.code;
24
+ this.context = options.context;
25
+ }
26
+ }
@@ -1,4 +1,6 @@
1
1
  export type { HttpMethod, ScenaristResponse, ScenaristMock, ScenaristMatch, RepeatMode, ScenaristSequence, ScenaristCaptureConfig, ScenaristScenario, } from "../schemas/scenario-definition.js";
2
2
  export type { HttpRequestContext, ScenaristMockWithParams, ActiveScenario, ScenaristResult, ScenaristScenarios, ScenarioIds, } from "./scenario.js";
3
- export type { ScenaristConfig, ScenaristConfigInput } from "./config.js";
3
+ export type { ScenaristConfig, ScenaristConfigInput, ErrorBehavior, ErrorBehaviors, } from "./config.js";
4
+ export { ScenaristError, ErrorCodes } from "./errors.js";
5
+ export type { ErrorContext, ErrorCode, ScenaristErrorOptions, } from "./errors.js";
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,mCAAmC,CAAC;AAG3C,YAAY,EACV,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,mCAAmC,CAAC;AAG3C,YAAY,EACV,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EACV,YAAY,EACZ,SAAS,EACT,qBAAqB,GACtB,MAAM,aAAa,CAAC"}
@@ -1 +1,2 @@
1
- export {};
1
+ // Error types
2
+ export { ScenaristError, ErrorCodes } from "./errors.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scenarist/core",
3
- "version": "0.2.1",
3
+ "version": "0.3.1",
4
4
  "description": "Internal: Hexagonal architecture core for scenario-based testing with MSW",
5
5
  "author": "Paul Hammond (citypaul) <paul@packsoftware.co.uk>",
6
6
  "license": "MIT",
@@ -51,11 +51,11 @@
51
51
  },
52
52
  "devDependencies": {
53
53
  "@vitest/coverage-v8": "^4.0.14",
54
- "@vitest/ui": "^4.0.14",
54
+ "@vitest/ui": "^4.0.15",
55
55
  "eslint": "^9.39.1",
56
56
  "fast-check": "^4.3.0",
57
57
  "typescript": "^5.9.3",
58
- "vitest": "^4.0.14",
58
+ "vitest": "^4.0.15",
59
59
  "@scenarist/eslint-config": "0.0.0",
60
60
  "@scenarist/typescript-config": "0.0.0"
61
61
  },