@@ -445,49 +445,58 @@ class InternalInstance {
445445export function start (
446446 machine : ( ( ) => StateDefinition ) | ( ( ) => Generator < Yielded , StateDefinition , never > )
447447) : MachineInstance {
448- let changeCount = - 1 ;
449- const aborter = new AbortController ( ) ;
450- const signal = aborter . signal ;
448+ let _changeCount = - 1 ;
449+ let _aborter : null | AbortController = null ;
450+ function ensureAborter ( ) : AbortController {
451+ if ( _aborter !== null ) return _aborter ;
451452
452- signal . addEventListener ( 'abort' , ( ) => {
453- instance . cleanup ( ) ;
454- } , { once : true } ) ;
453+ const newAborter = new AbortController ( ) ;
454+ const signal = newAborter . signal ;
455+
456+ signal . addEventListener ( 'abort' , ( ) => {
457+ instance . cleanup ( ) ;
458+ } , { once : true } ) ;
459+
460+ _aborter = newAborter ;
461+
462+ return newAborter ;
463+ }
455464
456465 const rootName = machine . name ;
457466 const instance : InternalInstance = new InternalInstance (
458467 null ,
459468 machine ,
460469 {
461- get changeCount ( ) { return changeCount } ,
470+ get changeCount ( ) { return _changeCount } ,
462471 willChangeState ( ) {
463- changeCount += 1 ;
472+ _changeCount += 1 ;
464473 } ,
465474 didChangeState ( ) {
466- signal . dispatchEvent ( new Event ( 'StateChanged' ) ) ;
475+ _aborter ?. signal . dispatchEvent ( new Event ( 'StateChanged' ) ) ;
467476 } ,
468477 didChangeAccumulations ( ) {
469- signal . dispatchEvent ( new Event ( 'AccumulationsChanged' ) ) ;
478+ _aborter ?. signal . dispatchEvent ( new Event ( 'AccumulationsChanged' ) ) ;
470479 } ,
471480 sendEvent ( event , snapshotCount ) {
472- if ( typeof snapshotCount === "number" && snapshotCount !== changeCount ) {
481+ if ( typeof snapshotCount === "number" && snapshotCount !== _changeCount ) {
473482 return ;
474483 }
475484 instance . receive ( event ) ;
476485 }
477486 }
478487 ) ;
479488
480- changeCount = 0 ;
489+ _changeCount = 0 ;
481490
482491 return {
483492 get changeCount ( ) {
484- return changeCount ;
493+ return _changeCount ;
485494 } ,
486495 get current ( ) {
487496 return instance . current !== null ? instance . current [ rootName ] : null ;
488497 } ,
489498 get signal ( ) {
490- return signal ;
499+ return ensureAborter ( ) . signal ;
491500 } ,
492501 get results ( ) {
493502 return instance . results ;
@@ -506,7 +515,7 @@ export function start(
506515 } ;
507516 } ,
508517 abort ( ) {
509- aborter . abort ( ) ;
518+ ensureAborter ( ) . abort ( ) ;
510519 } ,
511520 get done ( ) {
512521 return instance . child !== null ;
0 commit comments