@@ -13,13 +13,7 @@ import {
13
13
TimeoutType ,
14
14
} from '../failure' ;
15
15
import { hasOwnProperties , isRecord } from '../type-helpers' ;
16
- import {
17
- arrayFromPayloads ,
18
- defaultPayloadConverter ,
19
- fromPayloadsAtIndex ,
20
- PayloadConverter ,
21
- toPayloads ,
22
- } from './payload-converter' ;
16
+ import { arrayFromPayloads , fromPayloadsAtIndex , PayloadConverter , toPayloads } from './payload-converter' ;
23
17
24
18
/**
25
19
* Stack traces will be cutoff when on of these patterns is matched
@@ -60,11 +54,11 @@ export interface FailureConverter {
60
54
/**
61
55
* Converts a caught error to a Failure proto message.
62
56
*/
63
- errorToFailure ( err : unknown ) : ProtoFailure ;
57
+ errorToFailure ( err : unknown , payloadConverter : PayloadConverter ) : ProtoFailure ;
64
58
/**
65
59
* Converts a Failure proto message to a JS Error object.
66
60
*/
67
- failureToError ( err : ProtoFailure ) : Error ;
61
+ failureToError ( err : ProtoFailure , payloadConverter : PayloadConverter ) : Error ;
68
62
}
69
63
70
64
/**
@@ -80,10 +74,6 @@ export interface DefaultEncodedFailureAttributes {
80
74
* Options for the {@link DefaultFailureConverter} constructor.
81
75
*/
82
76
export interface DefaultFailureConverterOptions {
83
- /**
84
- * The {@link PayloadConverter} to use for converting failure attributes.
85
- */
86
- payloadConverter : PayloadConverter ;
87
77
/**
88
78
* Whether to encode error messages and stack traces (for encrypting these attributes use a {@link PayloadCodec}).
89
79
*/
@@ -103,10 +93,9 @@ export class DefaultFailureConverter implements FailureConverter {
103
93
public readonly options : DefaultFailureConverterOptions ;
104
94
105
95
constructor ( options ?: Partial < DefaultFailureConverterOptions > ) {
106
- const { encodeCommonAttributes, payloadConverter } = options ?? { } ;
96
+ const { encodeCommonAttributes } = options ?? { } ;
107
97
this . options = {
108
98
encodeCommonAttributes : encodeCommonAttributes ?? false ,
109
- payloadConverter : payloadConverter ?? defaultPayloadConverter ,
110
99
} ;
111
100
}
112
101
@@ -115,54 +104,50 @@ export class DefaultFailureConverter implements FailureConverter {
115
104
*
116
105
* Does not set common properties, that is done in {@link failureToError}.
117
106
*/
118
- failureToErrorInner ( failure : ProtoFailure ) : TemporalFailure {
107
+ failureToErrorInner ( failure : ProtoFailure , payloadConverter : PayloadConverter ) : TemporalFailure {
119
108
if ( failure . applicationFailureInfo ) {
120
109
return new ApplicationFailure (
121
110
failure . message ?? undefined ,
122
111
failure . applicationFailureInfo . type ,
123
112
Boolean ( failure . applicationFailureInfo . nonRetryable ) ,
124
- arrayFromPayloads ( this . options . payloadConverter , failure . applicationFailureInfo . details ?. payloads ) ,
125
- this . optionalFailureToOptionalError ( failure . cause )
113
+ arrayFromPayloads ( payloadConverter , failure . applicationFailureInfo . details ?. payloads ) ,
114
+ this . optionalFailureToOptionalError ( failure . cause , payloadConverter )
126
115
) ;
127
116
}
128
117
if ( failure . serverFailureInfo ) {
129
118
return new ServerFailure (
130
119
failure . message ?? undefined ,
131
120
Boolean ( failure . serverFailureInfo . nonRetryable ) ,
132
- this . optionalFailureToOptionalError ( failure . cause )
121
+ this . optionalFailureToOptionalError ( failure . cause , payloadConverter )
133
122
) ;
134
123
}
135
124
if ( failure . timeoutFailureInfo ) {
136
125
return new TimeoutFailure (
137
126
failure . message ?? undefined ,
138
- fromPayloadsAtIndex (
139
- this . options . payloadConverter ,
140
- 0 ,
141
- failure . timeoutFailureInfo . lastHeartbeatDetails ?. payloads
142
- ) ,
127
+ fromPayloadsAtIndex ( payloadConverter , 0 , failure . timeoutFailureInfo . lastHeartbeatDetails ?. payloads ) ,
143
128
failure . timeoutFailureInfo . timeoutType ?? TimeoutType . TIMEOUT_TYPE_UNSPECIFIED
144
129
) ;
145
130
}
146
131
if ( failure . terminatedFailureInfo ) {
147
- return new TerminatedFailure ( failure . message ?? undefined , this . optionalFailureToOptionalError ( failure . cause ) ) ;
132
+ return new TerminatedFailure (
133
+ failure . message ?? undefined ,
134
+ this . optionalFailureToOptionalError ( failure . cause , payloadConverter )
135
+ ) ;
148
136
}
149
137
if ( failure . canceledFailureInfo ) {
150
138
return new CancelledFailure (
151
139
failure . message ?? undefined ,
152
- arrayFromPayloads ( this . options . payloadConverter , failure . canceledFailureInfo . details ?. payloads ) ,
153
- this . optionalFailureToOptionalError ( failure . cause )
140
+ arrayFromPayloads ( payloadConverter , failure . canceledFailureInfo . details ?. payloads ) ,
141
+ this . optionalFailureToOptionalError ( failure . cause , payloadConverter )
154
142
) ;
155
143
}
156
144
if ( failure . resetWorkflowFailureInfo ) {
157
145
return new ApplicationFailure (
158
146
failure . message ?? undefined ,
159
147
'ResetWorkflow' ,
160
148
false ,
161
- arrayFromPayloads (
162
- this . options . payloadConverter ,
163
- failure . resetWorkflowFailureInfo . lastHeartbeatDetails ?. payloads
164
- ) ,
165
- this . optionalFailureToOptionalError ( failure . cause )
149
+ arrayFromPayloads ( payloadConverter , failure . resetWorkflowFailureInfo . lastHeartbeatDetails ?. payloads ) ,
150
+ this . optionalFailureToOptionalError ( failure . cause , payloadConverter )
166
151
) ;
167
152
}
168
153
if ( failure . childWorkflowExecutionFailureInfo ) {
@@ -175,7 +160,7 @@ export class DefaultFailureConverter implements FailureConverter {
175
160
workflowExecution ,
176
161
workflowType . name ,
177
162
retryState ?? RetryState . RETRY_STATE_UNSPECIFIED ,
178
- this . optionalFailureToOptionalError ( failure . cause )
163
+ this . optionalFailureToOptionalError ( failure . cause , payloadConverter )
179
164
) ;
180
165
}
181
166
if ( failure . activityFailureInfo ) {
@@ -187,17 +172,18 @@ export class DefaultFailureConverter implements FailureConverter {
187
172
failure . activityFailureInfo . activityId ?? undefined ,
188
173
failure . activityFailureInfo . retryState ?? RetryState . RETRY_STATE_UNSPECIFIED ,
189
174
failure . activityFailureInfo . identity ?? undefined ,
190
- this . optionalFailureToOptionalError ( failure . cause )
175
+ this . optionalFailureToOptionalError ( failure . cause , payloadConverter )
191
176
) ;
192
177
}
193
- return new TemporalFailure ( failure . message ?? undefined , this . optionalFailureToOptionalError ( failure . cause ) ) ;
178
+ return new TemporalFailure (
179
+ failure . message ?? undefined ,
180
+ this . optionalFailureToOptionalError ( failure . cause , payloadConverter )
181
+ ) ;
194
182
}
195
183
196
- failureToError ( failure : ProtoFailure ) : Error {
184
+ failureToError ( failure : ProtoFailure , payloadConverter : PayloadConverter ) : Error {
197
185
if ( failure . encodedAttributes ) {
198
- const attrs = this . options . payloadConverter . fromPayload < DefaultEncodedFailureAttributes > (
199
- failure . encodedAttributes
200
- ) ;
186
+ const attrs = payloadConverter . fromPayload < DefaultEncodedFailureAttributes > ( failure . encodedAttributes ) ;
201
187
// Don't apply encodedAttributes unless they conform to an expected schema
202
188
if ( typeof attrs === 'object' && attrs !== null ) {
203
189
const { message, stack_trace } = attrs ;
@@ -211,30 +197,30 @@ export class DefaultFailureConverter implements FailureConverter {
211
197
}
212
198
}
213
199
}
214
- const err = this . failureToErrorInner ( failure ) ;
200
+ const err = this . failureToErrorInner ( failure , payloadConverter ) ;
215
201
err . stack = failure . stackTrace ?? '' ;
216
202
err . failure = failure ;
217
203
return err ;
218
204
}
219
205
220
- errorToFailure ( err : unknown ) : ProtoFailure {
221
- const failure = this . errorToFailureInner ( err ) ;
206
+ errorToFailure ( err : unknown , payloadConverter : PayloadConverter ) : ProtoFailure {
207
+ const failure = this . errorToFailureInner ( err , payloadConverter ) ;
222
208
if ( this . options . encodeCommonAttributes ) {
223
209
const { message, stackTrace } = failure ;
224
210
failure . message = 'Encoded failure' ;
225
211
failure . stackTrace = '' ;
226
- failure . encodedAttributes = this . options . payloadConverter . toPayload ( { message, stack_trace : stackTrace } ) ;
212
+ failure . encodedAttributes = payloadConverter . toPayload ( { message, stack_trace : stackTrace } ) ;
227
213
}
228
214
return failure ;
229
215
}
230
216
231
- errorToFailureInner ( err : unknown ) : ProtoFailure {
217
+ errorToFailureInner ( err : unknown , payloadConverter : PayloadConverter ) : ProtoFailure {
232
218
if ( err instanceof TemporalFailure ) {
233
219
if ( err . failure ) return err . failure ;
234
220
const base = {
235
221
message : err . message ,
236
222
stackTrace : cutoffStackTrace ( err . stack ) ,
237
- cause : this . optionalErrorToOptionalFailure ( err . cause ) ,
223
+ cause : this . optionalErrorToOptionalFailure ( err . cause , payloadConverter ) ,
238
224
source : FAILURE_SOURCE ,
239
225
} ;
240
226
@@ -265,7 +251,7 @@ export class DefaultFailureConverter implements FailureConverter {
265
251
nonRetryable : err . nonRetryable ,
266
252
details :
267
253
err . details && err . details . length
268
- ? { payloads : toPayloads ( this . options . payloadConverter , ...err . details ) }
254
+ ? { payloads : toPayloads ( payloadConverter , ...err . details ) }
269
255
: undefined ,
270
256
} ,
271
257
} ;
@@ -276,7 +262,7 @@ export class DefaultFailureConverter implements FailureConverter {
276
262
canceledFailureInfo : {
277
263
details :
278
264
err . details && err . details . length
279
- ? { payloads : toPayloads ( this . options . payloadConverter , ...err . details ) }
265
+ ? { payloads : toPayloads ( payloadConverter , ...err . details ) }
280
266
: undefined ,
281
267
} ,
282
268
} ;
@@ -287,7 +273,7 @@ export class DefaultFailureConverter implements FailureConverter {
287
273
timeoutFailureInfo : {
288
274
timeoutType : err . timeoutType ,
289
275
lastHeartbeatDetails : err . lastHeartbeatDetails
290
- ? { payloads : toPayloads ( this . options . payloadConverter , err . lastHeartbeatDetails ) }
276
+ ? { payloads : toPayloads ( payloadConverter , err . lastHeartbeatDetails ) }
291
277
: undefined ,
292
278
} ,
293
279
} ;
@@ -317,7 +303,7 @@ export class DefaultFailureConverter implements FailureConverter {
317
303
...base ,
318
304
message : String ( err . message ) ?? '' ,
319
305
stackTrace : cutoffStackTrace ( String ( err . stack ) ) ,
320
- cause : this . optionalErrorToOptionalFailure ( err . cause ) ,
306
+ cause : this . optionalErrorToOptionalFailure ( err . cause , payloadConverter ) ,
321
307
} ;
322
308
}
323
309
@@ -342,14 +328,17 @@ export class DefaultFailureConverter implements FailureConverter {
342
328
/**
343
329
* Converts a Failure proto message to a JS Error object if defined or returns undefined.
344
330
*/
345
- optionalFailureToOptionalError ( failure : ProtoFailure | undefined | null ) : Error | undefined {
346
- return failure ? this . failureToError ( failure ) : undefined ;
331
+ optionalFailureToOptionalError (
332
+ failure : ProtoFailure | undefined | null ,
333
+ payloadConverter : PayloadConverter
334
+ ) : Error | undefined {
335
+ return failure ? this . failureToError ( failure , payloadConverter ) : undefined ;
347
336
}
348
337
349
338
/**
350
339
* Converts an error to a Failure proto message if defined or returns undefined
351
340
*/
352
- optionalErrorToOptionalFailure ( err : unknown ) : ProtoFailure | undefined {
353
- return err ? this . errorToFailure ( err ) : undefined ;
341
+ optionalErrorToOptionalFailure ( err : unknown , payloadConverter : PayloadConverter ) : ProtoFailure | undefined {
342
+ return err ? this . errorToFailure ( err , payloadConverter ) : undefined ;
354
343
}
355
344
}
0 commit comments