@@ -257,30 +257,45 @@ export const unsafeRunSyncExit =
257
257
}
258
258
259
259
/** @internal */
260
- export const unsafeRunPromise =
261
- < R > ( runtime : Runtime . Runtime < R > ) => < A , E > ( effect : Effect . Effect < A , E , R > ) : Promise < A > =>
262
- unsafeRunPromiseExit ( runtime ) ( effect ) . then ( ( result ) => {
263
- switch ( result . _tag ) {
264
- case OpCodes . OP_SUCCESS : {
265
- return result . i0
266
- }
267
- case OpCodes . OP_FAILURE : {
268
- throw fiberFailure ( result . i0 )
269
- }
260
+ export const unsafeRunPromise = < R > ( runtime : Runtime . Runtime < R > ) =>
261
+ < A , E > ( effect : Effect . Effect < A , E , R > , options ?: {
262
+ readonly signal ?: AbortSignal
263
+ } ) : Promise < A > =>
264
+ unsafeRunPromiseExit ( runtime ) ( effect , options ) . then ( ( result ) => {
265
+ switch ( result . _tag ) {
266
+ case OpCodes . OP_SUCCESS : {
267
+ return result . i0
270
268
}
271
- } )
269
+ case OpCodes . OP_FAILURE : {
270
+ throw fiberFailure ( result . i0 )
271
+ }
272
+ }
273
+ } )
272
274
273
275
/** @internal */
274
276
export const unsafeRunPromiseExit =
275
- < R > ( runtime : Runtime . Runtime < R > ) => < A , E > ( effect : Effect . Effect < A , E , R > ) : Promise < Exit . Exit < A , E > > =>
277
+ < R > ( runtime : Runtime . Runtime < R > ) =>
278
+ < A , E > ( effect : Effect . Effect < A , E , R > , options ?: {
279
+ readonly signal ?: AbortSignal
280
+ } ) : Promise < Exit . Exit < A , E > > =>
276
281
new Promise ( ( resolve ) => {
277
282
const op = fastPath ( effect )
278
283
if ( op ) {
279
284
resolve ( op )
280
285
}
281
- unsafeFork ( runtime ) ( effect ) . addObserver ( ( exit ) => {
286
+ const fiber = unsafeFork ( runtime ) ( effect )
287
+ fiber . addObserver ( ( exit ) => {
282
288
resolve ( exit )
283
289
} )
290
+ if ( options ?. signal !== undefined ) {
291
+ if ( options . signal . aborted ) {
292
+ fiber . unsafeInterruptAsFork ( fiber . id ( ) )
293
+ } else {
294
+ options . signal . addEventListener ( "abort" , ( ) => {
295
+ fiber . unsafeInterruptAsFork ( fiber . id ( ) )
296
+ } )
297
+ }
298
+ }
284
299
} )
285
300
286
301
/** @internal */
0 commit comments