@outfitter/contracts 0.4.1 → 0.5.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 (100) hide show
  1. package/README.md +18 -15
  2. package/dist/actions.d.ts +8 -3
  3. package/dist/actions.js +25 -6
  4. package/dist/assert/index.d.ts +7 -3
  5. package/dist/assert/index.js +59 -6
  6. package/dist/capabilities.js +57 -8
  7. package/dist/context.d.ts +8 -3
  8. package/dist/context.js +1 -1
  9. package/dist/envelope.d.ts +6 -2
  10. package/dist/envelope.js +49 -7
  11. package/dist/errors.d.ts +6 -2
  12. package/dist/errors.js +7 -1
  13. package/dist/from-fetch.d.ts +7 -0
  14. package/dist/from-fetch.js +110 -0
  15. package/dist/handler.d.ts +7 -2
  16. package/dist/hints.d.ts +2 -0
  17. package/dist/index.d.ts +25 -14
  18. package/dist/index.js +17 -153
  19. package/dist/internal/error-base.d.ts +2 -0
  20. package/dist/internal/error-base.js +31 -0
  21. package/dist/internal/error-operational.d.ts +3 -0
  22. package/dist/internal/error-operational.js +125 -0
  23. package/dist/internal/error-serialization.d.ts +7 -0
  24. package/dist/{shared/@outfitter/contracts-3wj7xghe.js → internal/error-serialization.js} +28 -67
  25. package/dist/internal/error-taxonomy.d.ts +2 -0
  26. package/dist/internal/error-taxonomy.js +21 -0
  27. package/dist/internal/error-validation.d.ts +3 -0
  28. package/dist/internal/error-validation.js +121 -0
  29. package/dist/internal/safe-json.d.ts +7 -0
  30. package/dist/internal/safe-json.js +66 -0
  31. package/dist/internal/schema-converters.d.ts +26 -0
  32. package/dist/internal/schema-converters.js +12 -0
  33. package/dist/internal/schema-primitives.d.ts +10 -0
  34. package/dist/internal/schema-primitives.js +9 -0
  35. package/dist/internal/schema-types.d.ts +2 -0
  36. package/dist/internal/schema-types.js +9 -0
  37. package/dist/logging.js +11 -3
  38. package/dist/recovery.d.ts +6 -2
  39. package/dist/recovery.js +49 -6
  40. package/dist/resilience.d.ts +6 -2
  41. package/dist/resilience.js +80 -4
  42. package/dist/result/index.js +1 -16
  43. package/dist/result/utilities.js +29 -7
  44. package/dist/schema.d.ts +2 -1
  45. package/dist/schema.js +165 -2
  46. package/dist/serialization.d.ts +8 -2
  47. package/dist/serialization.js +1 -3
  48. package/dist/shared/@outfitter/{contracts-k71jqd1m.d.ts → contracts-10p5q75w.d.ts} +1 -1
  49. package/dist/shared/@outfitter/contracts-1zzcpfyg.d.ts +40 -0
  50. package/dist/shared/@outfitter/contracts-3f5k5tg5.d.ts +28 -0
  51. package/dist/shared/@outfitter/contracts-3qmyq81n.d.ts +78 -0
  52. package/dist/shared/@outfitter/contracts-3re9d4bp.js +114 -0
  53. package/dist/shared/@outfitter/contracts-735ecmbq.d.ts +107 -0
  54. package/dist/shared/@outfitter/contracts-7a0xmwbg.d.ts +11 -0
  55. package/dist/shared/@outfitter/contracts-8cmkh2db.d.ts +31 -0
  56. package/dist/shared/@outfitter/{contracts-agmt8915.js → contracts-c3qfce25.js} +3 -0
  57. package/dist/shared/@outfitter/{contracts-1waabxbk.d.ts → contracts-drwd9ywk.d.ts} +4 -1
  58. package/dist/shared/@outfitter/{contracts-0snpmkdt.js → contracts-hgh47193.js} +10 -4
  59. package/dist/shared/@outfitter/contracts-hrepwwne.js +62 -0
  60. package/dist/shared/@outfitter/contracts-jtn6b927.js +18 -0
  61. package/dist/shared/@outfitter/contracts-jtt6dnmg.js +2 -0
  62. package/dist/shared/@outfitter/contracts-jyhqr766.js +25 -0
  63. package/dist/shared/@outfitter/contracts-mehpmvwp.d.ts +164 -0
  64. package/dist/shared/@outfitter/contracts-msxdg52h.d.ts +125 -0
  65. package/dist/shared/@outfitter/{contracts-95cc3y06.d.ts → contracts-mt027fqj.d.ts} +2 -1
  66. package/dist/shared/@outfitter/contracts-njb2art4.d.ts +174 -0
  67. package/dist/shared/@outfitter/contracts-p77yjs4g.d.ts +46 -0
  68. package/dist/shared/@outfitter/contracts-qpbv29bg.d.ts +59 -0
  69. package/dist/shared/@outfitter/contracts-sawwfgb5.js +111 -0
  70. package/dist/shared/@outfitter/{contracts-e4m948m7.d.ts → contracts-t4txv24h.d.ts} +2 -1
  71. package/dist/shared/@outfitter/contracts-vbgt9rfn.d.ts +74 -0
  72. package/dist/shared/@outfitter/{contracts-56pcsavx.d.ts → contracts-vhajx4gg.d.ts} +8 -2
  73. package/dist/shared/@outfitter/contracts-vhr2ep6b.js +3 -0
  74. package/dist/shared/@outfitter/contracts-w7nvcwrp.d.ts +44 -0
  75. package/dist/shared/@outfitter/contracts-x0ppyt7e.d.ts +76 -0
  76. package/dist/shared/@outfitter/{contracts-0akf2sm6.d.ts → contracts-zma4mscd.d.ts} +16 -1
  77. package/dist/shared/@outfitter/contracts-zsgxsa91.d.ts +84 -0
  78. package/dist/stream.d.ts +2 -0
  79. package/dist/stream.js +1 -0
  80. package/dist/validation.d.ts +7 -3
  81. package/dist/validation.js +6 -2
  82. package/dist/wrap-error.d.ts +7 -0
  83. package/dist/wrap-error.js +71 -0
  84. package/package.json +44 -20
  85. package/dist/shared/@outfitter/contracts-31penhwa.d.ts +0 -81
  86. package/dist/shared/@outfitter/contracts-3gswmhb1.d.ts +0 -446
  87. package/dist/shared/@outfitter/contracts-4zaj7ejb.js +0 -52
  88. package/dist/shared/@outfitter/contracts-85nd53s9.js +0 -53
  89. package/dist/shared/@outfitter/contracts-9wtm5nsw.d.ts +0 -42
  90. package/dist/shared/@outfitter/contracts-cp5c6dws.js +0 -32
  91. package/dist/shared/@outfitter/contracts-d0tq2adf.js +0 -60
  92. package/dist/shared/@outfitter/contracts-mmg0npfk.d.ts +0 -30
  93. package/dist/shared/@outfitter/contracts-phjhz5q3.js +0 -293
  94. package/dist/shared/@outfitter/contracts-q0v44kef.js +0 -28
  95. package/dist/shared/@outfitter/contracts-r21yet6j.js +0 -80
  96. package/dist/shared/@outfitter/contracts-sm6vak1a.js +0 -14
  97. package/dist/shared/@outfitter/contracts-t79engf9.d.ts +0 -60
  98. package/dist/shared/@outfitter/contracts-wfht4q2b.js +0 -341
  99. package/dist/shared/@outfitter/contracts-zx72gyh1.js +0 -32
  100. /package/dist/{shared/@outfitter/contracts-37gpc56f.js → hints.js} +0 -0
package/dist/index.js CHANGED
@@ -1,153 +1,17 @@
1
- // @bun
2
- import"./shared/@outfitter/contracts-37gpc56f.js";
3
- import {
4
- assertDefined,
5
- assertMatches,
6
- assertNonEmpty,
7
- isNonEmptyArray
8
- } from "./shared/@outfitter/contracts-cp5c6dws.js";
9
- import {
10
- createValidator,
11
- validateInput
12
- } from "./shared/@outfitter/contracts-0snpmkdt.js";
13
- import {
14
- ACTION_CAPABILITIES,
15
- CAPABILITY_SURFACES,
16
- DEFAULT_ACTION_SURFACES,
17
- capability,
18
- capabilityAll,
19
- getActionsForSurface
20
- } from "./shared/@outfitter/contracts-d0tq2adf.js";
21
- import {
22
- getBackoffDelay,
23
- isRecoverable,
24
- isRetryable,
25
- shouldRetry
26
- } from "./shared/@outfitter/contracts-4zaj7ejb.js";
27
- import {
28
- zodToJsonSchema
29
- } from "./shared/@outfitter/contracts-wfht4q2b.js";
30
- import {
31
- ACTION_SURFACES,
32
- DEFAULT_REGISTRY_SURFACES,
33
- createActionRegistry,
34
- defineAction
35
- } from "./shared/@outfitter/contracts-q0v44kef.js";
36
- import {
37
- retry,
38
- withTimeout
39
- } from "./shared/@outfitter/contracts-r21yet6j.js";
40
- import {
41
- combine2,
42
- combine3,
43
- expect,
44
- orElse,
45
- unwrapOrElse
46
- } from "./shared/@outfitter/contracts-zx72gyh1.js";
47
- import {
48
- toEnvelope,
49
- toHttpResponse
50
- } from "./shared/@outfitter/contracts-85nd53s9.js";
51
- import {
52
- deserializeError,
53
- safeParse,
54
- safeStringify,
55
- serializeError
56
- } from "./shared/@outfitter/contracts-3wj7xghe.js";
57
- import {
58
- DEFAULT_PATTERNS,
59
- DEFAULT_SENSITIVE_KEYS,
60
- createRedactor
61
- } from "./shared/@outfitter/contracts-s15x2rs4.js";
62
- import {
63
- AlreadyExistsError,
64
- AmbiguousError,
65
- AssertionError,
66
- AuthError,
67
- CancelledError,
68
- ConflictError,
69
- ERROR_CODES,
70
- InternalError,
71
- NetworkError,
72
- NotFoundError,
73
- PermissionError,
74
- RateLimitError,
75
- TimeoutError,
76
- ValidationError,
77
- exitCodeMap,
78
- getExitCode,
79
- getStatusCode,
80
- statusCodeMap
81
- } from "./shared/@outfitter/contracts-phjhz5q3.js";
82
- import {
83
- createContext,
84
- generateRequestId
85
- } from "./shared/@outfitter/contracts-agmt8915.js";
86
- import {
87
- createLoggerFactory
88
- } from "./shared/@outfitter/contracts-sm6vak1a.js";
89
-
90
- // packages/contracts/src/index.ts
91
- import { Result, TaggedError } from "better-result";
92
- export {
93
- zodToJsonSchema,
94
- withTimeout,
95
- validateInput,
96
- unwrapOrElse,
97
- toHttpResponse,
98
- toEnvelope,
99
- statusCodeMap,
100
- shouldRetry,
101
- serializeError,
102
- safeStringify,
103
- safeParse,
104
- retry,
105
- orElse,
106
- isRetryable,
107
- isRecoverable,
108
- isNonEmptyArray,
109
- getStatusCode,
110
- getExitCode,
111
- getBackoffDelay,
112
- getActionsForSurface,
113
- generateRequestId,
114
- expect,
115
- exitCodeMap,
116
- deserializeError,
117
- defineAction,
118
- createValidator,
119
- createRedactor,
120
- createLoggerFactory,
121
- createContext,
122
- createActionRegistry,
123
- combine3,
124
- combine2,
125
- capabilityAll,
126
- capability,
127
- assertNonEmpty,
128
- assertMatches,
129
- assertDefined,
130
- ValidationError,
131
- TimeoutError,
132
- TaggedError,
133
- Result,
134
- RateLimitError,
135
- PermissionError,
136
- NotFoundError,
137
- NetworkError,
138
- InternalError,
139
- ERROR_CODES,
140
- DEFAULT_SENSITIVE_KEYS,
141
- DEFAULT_REGISTRY_SURFACES,
142
- DEFAULT_PATTERNS,
143
- DEFAULT_ACTION_SURFACES,
144
- ConflictError,
145
- CancelledError,
146
- CAPABILITY_SURFACES,
147
- AuthError,
148
- AssertionError,
149
- AmbiguousError,
150
- AlreadyExistsError,
151
- ACTION_SURFACES,
152
- ACTION_CAPABILITIES
153
- };
1
+ export { Result, TaggedError } from "better-result";
2
+ export { ACTION_SURFACES, createActionRegistry, DEFAULT_REGISTRY_SURFACES, defineAction } from "./actions.js";
3
+ export { assertDefined, assertMatches, assertNonEmpty, expectErr, expectOk, isNonEmptyArray } from "./assert/index.js";
4
+ export { ACTION_CAPABILITIES, CAPABILITY_SURFACES, capability, capabilityAll, DEFAULT_ACTION_SURFACES, getActionsForSurface } from "./capabilities.js";
5
+ export { createContext, generateRequestId } from "./context.js";
6
+ export { toEnvelope, toHttpResponse } from "./envelope.js";
7
+ export { fromFetch } from "./from-fetch.js";
8
+ export { AlreadyExistsError, AmbiguousError, AssertionError, AuthError, CancelledError, ConflictError, ERROR_CODES, errorCategoryMeta, exitCodeMap, getExitCode, getStatusCode, InternalError, jsonRpcCodeMap, NetworkError, NotFoundError, PermissionError, RateLimitError, retryableMap, statusCodeMap, TimeoutError, ValidationError } from "./errors.js";
9
+ export { createLoggerFactory } from "./logging.js";
10
+ export { getBackoffDelay, isRecoverable, isRetryable, shouldRetry } from "./recovery.js";
11
+ export { createRedactor, DEFAULT_PATTERNS, DEFAULT_SENSITIVE_KEYS } from "./redactor.js";
12
+ export { retry, withTimeout } from "./resilience.js";
13
+ export { combine2, combine3, expect, orElse, unwrapOrElse } from "./result/index.js";
14
+ export { zodToJsonSchema } from "./schema.js";
15
+ export { deserializeError, safeParse, safeStringify, serializeError } from "./serialization.js";
16
+ export { createValidator, formatZodIssues, parseInput, validateInput } from "./validation.js";
17
+ export { composeMappers, extractMessage, isOutfitterError, wrapError } from "./wrap-error.js";
@@ -0,0 +1,2 @@
1
+ import { AlreadyExistsErrorBase, AmbiguousErrorBase, AssertionErrorBase, AuthErrorBase, CancelledErrorBase, ConflictErrorBase, InternalErrorBase, NetworkErrorBase, NotFoundErrorBase, PermissionErrorBase, RateLimitErrorBase, TimeoutErrorBase, ValidationErrorBase } from "../shared/@outfitter/contracts-qpbv29bg.js";
2
+ export { ValidationErrorBase, TimeoutErrorBase, RateLimitErrorBase, PermissionErrorBase, NotFoundErrorBase, NetworkErrorBase, InternalErrorBase, ConflictErrorBase, CancelledErrorBase, AuthErrorBase, AssertionErrorBase, AmbiguousErrorBase, AlreadyExistsErrorBase };
@@ -0,0 +1,31 @@
1
+ // @bun
2
+ import {
3
+ AlreadyExistsErrorBase,
4
+ AmbiguousErrorBase,
5
+ AssertionErrorBase,
6
+ AuthErrorBase,
7
+ CancelledErrorBase,
8
+ ConflictErrorBase,
9
+ InternalErrorBase,
10
+ NetworkErrorBase,
11
+ NotFoundErrorBase,
12
+ PermissionErrorBase,
13
+ RateLimitErrorBase,
14
+ TimeoutErrorBase,
15
+ ValidationErrorBase
16
+ } from "../shared/@outfitter/contracts-jtn6b927.js";
17
+ export {
18
+ ValidationErrorBase,
19
+ TimeoutErrorBase,
20
+ RateLimitErrorBase,
21
+ PermissionErrorBase,
22
+ NotFoundErrorBase,
23
+ NetworkErrorBase,
24
+ InternalErrorBase,
25
+ ConflictErrorBase,
26
+ CancelledErrorBase,
27
+ AuthErrorBase,
28
+ AssertionErrorBase,
29
+ AmbiguousErrorBase,
30
+ AlreadyExistsErrorBase
31
+ };
@@ -0,0 +1,3 @@
1
+ import { AuthError, CancelledError, InternalError, NetworkError, PermissionError, RateLimitError, TimeoutError } from "../shared/@outfitter/contracts-735ecmbq.js";
2
+ import "../shared/@outfitter/contracts-qpbv29bg.js";
3
+ export { TimeoutError, RateLimitError, PermissionError, NetworkError, InternalError, CancelledError, AuthError };
@@ -0,0 +1,125 @@
1
+ // @bun
2
+ import {
3
+ AuthErrorBase,
4
+ CancelledErrorBase,
5
+ InternalErrorBase,
6
+ NetworkErrorBase,
7
+ PermissionErrorBase,
8
+ RateLimitErrorBase,
9
+ TimeoutErrorBase
10
+ } from "../shared/@outfitter/contracts-jtn6b927.js";
11
+ import {
12
+ getExitCode,
13
+ getStatusCode
14
+ } from "../shared/@outfitter/contracts-sawwfgb5.js";
15
+
16
+ // packages/contracts/src/internal/error-operational.ts
17
+ class PermissionError extends PermissionErrorBase {
18
+ category = "permission";
19
+ static create(message, context) {
20
+ return new PermissionError({
21
+ message,
22
+ ...context != null && { context }
23
+ });
24
+ }
25
+ exitCode() {
26
+ return getExitCode(this.category);
27
+ }
28
+ statusCode() {
29
+ return getStatusCode(this.category);
30
+ }
31
+ }
32
+
33
+ class TimeoutError extends TimeoutErrorBase {
34
+ category = "timeout";
35
+ static create(operation, timeoutMs) {
36
+ return new TimeoutError({
37
+ message: `${operation} timed out after ${timeoutMs}ms`,
38
+ operation,
39
+ timeoutMs
40
+ });
41
+ }
42
+ exitCode() {
43
+ return getExitCode(this.category);
44
+ }
45
+ statusCode() {
46
+ return getStatusCode(this.category);
47
+ }
48
+ }
49
+
50
+ class RateLimitError extends RateLimitErrorBase {
51
+ category = "rate_limit";
52
+ static create(message, retryAfterSeconds) {
53
+ return new RateLimitError({
54
+ message,
55
+ ...retryAfterSeconds != null && { retryAfterSeconds }
56
+ });
57
+ }
58
+ exitCode() {
59
+ return getExitCode(this.category);
60
+ }
61
+ statusCode() {
62
+ return getStatusCode(this.category);
63
+ }
64
+ }
65
+
66
+ class NetworkError extends NetworkErrorBase {
67
+ category = "network";
68
+ static create(message, context) {
69
+ return new NetworkError({ message, ...context != null && { context } });
70
+ }
71
+ exitCode() {
72
+ return getExitCode(this.category);
73
+ }
74
+ statusCode() {
75
+ return getStatusCode(this.category);
76
+ }
77
+ }
78
+
79
+ class InternalError extends InternalErrorBase {
80
+ category = "internal";
81
+ static create(message, context) {
82
+ return new InternalError({ message, ...context != null && { context } });
83
+ }
84
+ exitCode() {
85
+ return getExitCode(this.category);
86
+ }
87
+ statusCode() {
88
+ return getStatusCode(this.category);
89
+ }
90
+ }
91
+
92
+ class AuthError extends AuthErrorBase {
93
+ category = "auth";
94
+ static create(message, reason) {
95
+ return new AuthError({ message, ...reason != null && { reason } });
96
+ }
97
+ exitCode() {
98
+ return getExitCode(this.category);
99
+ }
100
+ statusCode() {
101
+ return getStatusCode(this.category);
102
+ }
103
+ }
104
+
105
+ class CancelledError extends CancelledErrorBase {
106
+ category = "cancelled";
107
+ static create(message) {
108
+ return new CancelledError({ message });
109
+ }
110
+ exitCode() {
111
+ return getExitCode(this.category);
112
+ }
113
+ statusCode() {
114
+ return getStatusCode(this.category);
115
+ }
116
+ }
117
+ export {
118
+ TimeoutError,
119
+ RateLimitError,
120
+ PermissionError,
121
+ NetworkError,
122
+ InternalError,
123
+ CancelledError,
124
+ AuthError
125
+ };
@@ -0,0 +1,7 @@
1
+ import { SerializeErrorOptions, deserializeError, serializeError } from "../shared/@outfitter/contracts-p77yjs4g.js";
2
+ import "../shared/@outfitter/contracts-7a0xmwbg.js";
3
+ import "../shared/@outfitter/contracts-735ecmbq.js";
4
+ import "../shared/@outfitter/contracts-mehpmvwp.js";
5
+ import "../shared/@outfitter/contracts-qpbv29bg.js";
6
+ import "../shared/@outfitter/contracts-njb2art4.js";
7
+ export { serializeError, deserializeError, SerializeErrorOptions };
@@ -1,9 +1,4 @@
1
1
  // @bun
2
- import {
3
- DEFAULT_PATTERNS,
4
- DEFAULT_SENSITIVE_KEYS,
5
- createRedactor
6
- } from "./contracts-s15x2rs4.js";
7
2
  import {
8
3
  AlreadyExistsError,
9
4
  AmbiguousError,
@@ -18,10 +13,9 @@ import {
18
13
  RateLimitError,
19
14
  TimeoutError,
20
15
  ValidationError
21
- } from "./contracts-phjhz5q3.js";
16
+ } from "../shared/@outfitter/contracts-vhr2ep6b.js";
22
17
 
23
- // packages/contracts/src/serialization.ts
24
- import { Result } from "better-result";
18
+ // packages/contracts/src/internal/error-serialization.ts
25
19
  var errorRegistry = {
26
20
  ValidationError,
27
21
  AmbiguousError,
@@ -45,6 +39,9 @@ function extractContext(error) {
45
39
  switch (error._tag) {
46
40
  case "ValidationError": {
47
41
  const ve = error;
42
+ if (ve.context !== undefined) {
43
+ Object.assign(context, ve.context);
44
+ }
48
45
  if (ve.field !== undefined) {
49
46
  context["field"] = ve.field;
50
47
  }
@@ -90,6 +87,9 @@ function extractContext(error) {
90
87
  }
91
88
  case "AmbiguousError": {
92
89
  const amb = error;
90
+ if (amb.context !== undefined) {
91
+ Object.assign(context, amb.context);
92
+ }
93
93
  context["candidates"] = amb.candidates;
94
94
  break;
95
95
  }
@@ -110,9 +110,9 @@ function extractContext(error) {
110
110
  }
111
111
  return Object.keys(context).length > 0 ? context : undefined;
112
112
  }
113
- function serializeError(error, options) {
114
- const isProduction = process.env["NODE_ENV"] === "production";
115
- const includeStack = options?.includeStack ?? !isProduction;
113
+ function serializeError(error, options, isProduction) {
114
+ const production = isProduction ?? process.env["NODE_ENV"] === "production";
115
+ const includeStack = options?.includeStack ?? !production;
116
116
  const context = extractContext(error);
117
117
  const serialized = {
118
118
  _tag: error._tag,
@@ -151,6 +151,10 @@ function deserializeError(data) {
151
151
  if (field !== undefined) {
152
152
  props.field = field;
153
153
  }
154
+ const contextWithoutField = Object.fromEntries(Object.entries(context).filter(([key]) => key !== "field"));
155
+ if (Object.keys(contextWithoutField).length > 0) {
156
+ props.context = contextWithoutField;
157
+ }
154
158
  return new ValidationError(props);
155
159
  }
156
160
  case "NotFoundError": {
@@ -239,11 +243,17 @@ function deserializeError(data) {
239
243
  }
240
244
  return new AuthError(props);
241
245
  }
242
- case "AmbiguousError":
243
- return new AmbiguousError({
246
+ case "AmbiguousError": {
247
+ const props = {
244
248
  message: data.message,
245
249
  candidates: context["candidates"] ?? []
246
- });
250
+ };
251
+ const contextWithoutCandidates = Object.fromEntries(Object.entries(context).filter(([key]) => key !== "candidates"));
252
+ if (Object.keys(contextWithoutCandidates).length > 0) {
253
+ props.context = contextWithoutCandidates;
254
+ }
255
+ return new AmbiguousError(props);
256
+ }
247
257
  case "AssertionError":
248
258
  return new AssertionError({
249
259
  message: data.message
@@ -263,56 +273,7 @@ function deserializeError(data) {
263
273
  }
264
274
  }
265
275
  }
266
- function safeStringify(value, space) {
267
- const seen = new WeakSet;
268
- const redactor = createRedactor({
269
- patterns: [...DEFAULT_PATTERNS],
270
- keys: [...DEFAULT_SENSITIVE_KEYS]
271
- });
272
- const replacer = (key, val) => {
273
- if (typeof val === "bigint") {
274
- return val.toString();
275
- }
276
- if (typeof val === "object" && val !== null) {
277
- if (seen.has(val)) {
278
- return "[Circular]";
279
- }
280
- seen.add(val);
281
- }
282
- if (key !== "" && redactor.isSensitiveKey(key) && val !== null && val !== undefined) {
283
- return "[REDACTED]";
284
- }
285
- if (typeof val === "string") {
286
- return redactor.redactString(val);
287
- }
288
- return val;
289
- };
290
- return JSON.stringify(value, replacer, space);
291
- }
292
- function safeParse(json, schema) {
293
- let parsed;
294
- try {
295
- parsed = JSON.parse(json);
296
- } catch (err) {
297
- const errorMessage = err instanceof Error ? err.message : "Unknown parse error";
298
- return Result.err(new ValidationError({
299
- message: `JSON parse error: ${errorMessage}`
300
- }));
301
- }
302
- if (schema === undefined) {
303
- return Result.ok(parsed);
304
- }
305
- const parseResult = schema.safeParse(parsed);
306
- if (parseResult.success) {
307
- return Result.ok(parseResult.data);
308
- }
309
- const issues = parseResult.error.issues.map((issue) => {
310
- const path = issue.path.length > 0 ? issue.path.join(".") : "(root)";
311
- return `${path}: ${issue.message}`;
312
- }).join("; ");
313
- return Result.err(new ValidationError({
314
- message: `Schema validation failed: ${issues}`
315
- }));
316
- }
317
-
318
- export { serializeError, deserializeError, safeStringify, safeParse };
276
+ export {
277
+ serializeError,
278
+ deserializeError
279
+ };
@@ -0,0 +1,2 @@
1
+ import { ERROR_CODES, ErrorCategory, ErrorCategoryMeta, ErrorCode, KitErrorProps, SerializedError, errorCategoryMeta, exitCodeMap, getExitCode, getStatusCode, jsonRpcCodeMap, retryableMap, statusCodeMap } from "../shared/@outfitter/contracts-njb2art4.js";
2
+ export { statusCodeMap, retryableMap, jsonRpcCodeMap, getStatusCode, getExitCode, exitCodeMap, errorCategoryMeta, SerializedError, KitErrorProps, ErrorCode, ErrorCategoryMeta, ErrorCategory, ERROR_CODES };
@@ -0,0 +1,21 @@
1
+ // @bun
2
+ import {
3
+ ERROR_CODES,
4
+ errorCategoryMeta,
5
+ exitCodeMap,
6
+ getExitCode,
7
+ getStatusCode,
8
+ jsonRpcCodeMap,
9
+ retryableMap,
10
+ statusCodeMap
11
+ } from "../shared/@outfitter/contracts-sawwfgb5.js";
12
+ export {
13
+ statusCodeMap,
14
+ retryableMap,
15
+ jsonRpcCodeMap,
16
+ getStatusCode,
17
+ getExitCode,
18
+ exitCodeMap,
19
+ errorCategoryMeta,
20
+ ERROR_CODES
21
+ };
@@ -0,0 +1,3 @@
1
+ import { AlreadyExistsError, AmbiguousError, AssertionError, ConflictError, NotFoundError, ValidationError } from "../shared/@outfitter/contracts-mehpmvwp.js";
2
+ import "../shared/@outfitter/contracts-qpbv29bg.js";
3
+ export { ValidationError, NotFoundError, ConflictError, AssertionError, AmbiguousError, AlreadyExistsError };
@@ -0,0 +1,121 @@
1
+ // @bun
2
+ import {
3
+ AlreadyExistsErrorBase,
4
+ AmbiguousErrorBase,
5
+ AssertionErrorBase,
6
+ ConflictErrorBase,
7
+ NotFoundErrorBase,
8
+ ValidationErrorBase
9
+ } from "../shared/@outfitter/contracts-jtn6b927.js";
10
+ import {
11
+ getExitCode,
12
+ getStatusCode
13
+ } from "../shared/@outfitter/contracts-sawwfgb5.js";
14
+
15
+ // packages/contracts/src/internal/error-validation.ts
16
+ class ValidationError extends ValidationErrorBase {
17
+ category = "validation";
18
+ static create(field, reason, context) {
19
+ return new ValidationError({
20
+ message: `${field}: ${reason}`,
21
+ field,
22
+ ...context != null && { context }
23
+ });
24
+ }
25
+ static fromMessage(message, context) {
26
+ return new ValidationError({
27
+ message,
28
+ ...context != null && { context }
29
+ });
30
+ }
31
+ exitCode() {
32
+ return getExitCode(this.category);
33
+ }
34
+ statusCode() {
35
+ return getStatusCode(this.category);
36
+ }
37
+ }
38
+
39
+ class AmbiguousError extends AmbiguousErrorBase {
40
+ category = "validation";
41
+ static create(what, candidates, context) {
42
+ return new AmbiguousError({
43
+ message: `Ambiguous ${what}: ${candidates.length} matches found`,
44
+ candidates,
45
+ ...context != null && { context }
46
+ });
47
+ }
48
+ exitCode() {
49
+ return getExitCode(this.category);
50
+ }
51
+ statusCode() {
52
+ return getStatusCode(this.category);
53
+ }
54
+ }
55
+
56
+ class AssertionError extends AssertionErrorBase {
57
+ category = "internal";
58
+ exitCode() {
59
+ return getExitCode(this.category);
60
+ }
61
+ statusCode() {
62
+ return getStatusCode(this.category);
63
+ }
64
+ }
65
+
66
+ class NotFoundError extends NotFoundErrorBase {
67
+ category = "not_found";
68
+ static create(resourceType, resourceId, context) {
69
+ return new NotFoundError({
70
+ message: `${resourceType} not found: ${resourceId}`,
71
+ resourceType,
72
+ resourceId,
73
+ ...context != null && { context }
74
+ });
75
+ }
76
+ exitCode() {
77
+ return getExitCode(this.category);
78
+ }
79
+ statusCode() {
80
+ return getStatusCode(this.category);
81
+ }
82
+ }
83
+
84
+ class AlreadyExistsError extends AlreadyExistsErrorBase {
85
+ category = "conflict";
86
+ static create(resourceType, resourceId, context) {
87
+ return new AlreadyExistsError({
88
+ message: `${resourceType} already exists: ${resourceId}`,
89
+ resourceType,
90
+ resourceId,
91
+ ...context != null && { context }
92
+ });
93
+ }
94
+ exitCode() {
95
+ return getExitCode(this.category);
96
+ }
97
+ statusCode() {
98
+ return getStatusCode(this.category);
99
+ }
100
+ }
101
+
102
+ class ConflictError extends ConflictErrorBase {
103
+ category = "conflict";
104
+ static create(message, context) {
105
+ return new ConflictError({ message, ...context != null && { context } });
106
+ }
107
+ exitCode() {
108
+ return getExitCode(this.category);
109
+ }
110
+ statusCode() {
111
+ return getStatusCode(this.category);
112
+ }
113
+ }
114
+ export {
115
+ ValidationError,
116
+ NotFoundError,
117
+ ConflictError,
118
+ AssertionError,
119
+ AmbiguousError,
120
+ AlreadyExistsError
121
+ };
@@ -0,0 +1,7 @@
1
+ import { safeParse, safeStringify } from "../shared/@outfitter/contracts-1zzcpfyg.js";
2
+ import "../shared/@outfitter/contracts-7a0xmwbg.js";
3
+ import "../shared/@outfitter/contracts-735ecmbq.js";
4
+ import "../shared/@outfitter/contracts-mehpmvwp.js";
5
+ import "../shared/@outfitter/contracts-qpbv29bg.js";
6
+ import "../shared/@outfitter/contracts-njb2art4.js";
7
+ export { safeStringify, safeParse };