@@ -41,31 +41,32 @@ export function addItemToEnvelope<E extends Envelope>(envelope: E, newItem: E[1]
41
41
/**
42
42
* Convenience function to loop through the items and item types of an envelope.
43
43
* (This function was mostly created because working with envelope types is painful at the moment)
44
+ *
45
+ * If the callback returns true, the rest of the items will be skipped.
44
46
*/
45
47
export function forEachEnvelopeItem < E extends Envelope > (
46
48
envelope : Envelope ,
47
- callback : ( envelopeItem : E [ 1 ] [ number ] , envelopeItemType : E [ 1 ] [ number ] [ 0 ] [ 'type' ] ) => void ,
48
- ) : void {
49
+ callback : ( envelopeItem : E [ 1 ] [ number ] , envelopeItemType : E [ 1 ] [ number ] [ 0 ] [ 'type' ] ) => boolean | void ,
50
+ ) : boolean {
49
51
const envelopeItems = envelope [ 1 ] ;
50
- envelopeItems . forEach ( ( envelopeItem : EnvelopeItem ) => {
52
+
53
+ for ( const envelopeItem of envelopeItems ) {
51
54
const envelopeItemType = envelopeItem [ 0 ] . type ;
52
- callback ( envelopeItem , envelopeItemType ) ;
53
- } ) ;
55
+ const result = callback ( envelopeItem , envelopeItemType ) ;
56
+
57
+ if ( result ) {
58
+ return true ;
59
+ }
60
+ }
61
+
62
+ return false ;
54
63
}
55
64
56
65
/**
57
66
* Returns true if the envelope contains any of the given envelope item types
58
67
*/
59
68
export function envelopeContainsItemType ( envelope : Envelope , ...types : EnvelopeItemType [ ] ) : boolean {
60
- let isType = false ;
61
-
62
- forEachEnvelopeItem ( envelope , ( _ , type ) => {
63
- if ( types . includes ( type ) ) {
64
- isType = true ;
65
- }
66
- } ) ;
67
-
68
- return isType ;
69
+ return forEachEnvelopeItem ( envelope , ( _ , type ) => types . includes ( type ) ) ;
69
70
}
70
71
71
72
/**
0 commit comments