@@ -18,7 +18,7 @@ const enum States {
1818 * Thenable class that behaves like a Promise and follows it's interface
1919 * but is not async internally
2020 */
21- class SyncPromise < T > implements PromiseLike < T > {
21+ export class SyncPromise < T > implements PromiseLike < T > {
2222 private _state : States = States . PENDING ;
2323 private _handlers : Array < {
2424 done : boolean ;
@@ -39,48 +39,17 @@ class SyncPromise<T> implements PromiseLike<T> {
3939
4040 /** JSDoc */
4141 public static resolve < T > ( value : T | PromiseLike < T > ) : PromiseLike < T > {
42- return new SyncPromise ( resolve => {
43- resolve ( value ) ;
44- } ) ;
42+ return syncPromiseResolve ( value ) ;
4543 }
4644
4745 /** JSDoc */
4846 public static reject < T = never > ( reason ?: any ) : PromiseLike < T > {
49- return new SyncPromise ( ( _ , reject ) => {
50- reject ( reason ) ;
51- } ) ;
47+ return syncPromiseReject ( reason ) ;
5248 }
5349
5450 /** JSDoc */
5551 public static all < U = any > ( collection : Array < U | PromiseLike < U > > ) : PromiseLike < U [ ] > {
56- return new SyncPromise < U [ ] > ( ( resolve , reject ) => {
57- if ( ! Array . isArray ( collection ) ) {
58- reject ( new TypeError ( `Promise.all requires an array as input.` ) ) ;
59- return ;
60- }
61-
62- if ( collection . length === 0 ) {
63- resolve ( [ ] ) ;
64- return ;
65- }
66-
67- let counter = collection . length ;
68- const resolvedCollection : U [ ] = [ ] ;
69-
70- collection . forEach ( ( item , index ) => {
71- void SyncPromise . resolve ( item )
72- . then ( value => {
73- resolvedCollection [ index ] = value ;
74- counter -= 1 ;
75-
76- if ( counter !== 0 ) {
77- return ;
78- }
79- resolve ( resolvedCollection ) ;
80- } )
81- . then ( null , reject ) ;
82- } ) ;
83- } ) ;
52+ return syncPromiseAll ( collection ) ;
8453 }
8554
8655 /** JSDoc */
@@ -240,4 +209,48 @@ class SyncPromise<T> implements PromiseLike<T> {
240209 } ;
241210}
242211
243- export { SyncPromise } ;
212+ /** JSDoc */
213+ export function syncPromiseResolve < T > ( value : T | PromiseLike < T > ) : PromiseLike < T > {
214+ return new SyncPromise ( resolve => {
215+ resolve ( value ) ;
216+ } ) ;
217+ }
218+
219+ /** JSDoc */
220+ export function syncPromiseReject < T = never > ( reason ?: any ) : PromiseLike < T > {
221+ return new SyncPromise ( ( _ , reject ) => {
222+ reject ( reason ) ;
223+ } ) ;
224+ }
225+
226+ /** JSDoc */
227+ export function syncPromiseAll < U = any > ( collection : Array < U | PromiseLike < U > > ) : PromiseLike < U [ ] > {
228+ return new SyncPromise < U [ ] > ( ( resolve , reject ) => {
229+ if ( ! Array . isArray ( collection ) ) {
230+ reject ( new TypeError ( `Promise.all requires an array as input.` ) ) ;
231+ return ;
232+ }
233+
234+ if ( collection . length === 0 ) {
235+ resolve ( [ ] ) ;
236+ return ;
237+ }
238+
239+ let counter = collection . length ;
240+ const resolvedCollection : U [ ] = [ ] ;
241+
242+ collection . forEach ( ( item , index ) => {
243+ void syncPromiseResolve ( item )
244+ . then ( value => {
245+ resolvedCollection [ index ] = value ;
246+ counter -= 1 ;
247+
248+ if ( counter !== 0 ) {
249+ return ;
250+ }
251+ resolve ( resolvedCollection ) ;
252+ } )
253+ . then ( null , reject ) ;
254+ } ) ;
255+ } ) ;
256+ }
0 commit comments