PluginProbe
WP-Stateless – Google Cloud Storage / 2.1.4
WP-Stateless – Google Cloud Storage v2.1.4
4.4.3 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.3.0 2.3.1 2.3.2 3.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.2.0 3.2.1 3.2.2 All 62 releases
wp-stateless / lib / Google / vendor / react / promise / src / functions.php

functions.php in WP-Stateless – Google Cloud Storage 2.1.4, at lib/Google/vendor/react/promise/src/functions.php

245 lines 8.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace React\Promise;
4
5 function resolve($promiseOrValue = null)
6 {
7 if ($promiseOrValue instanceof ExtendedPromiseInterface) {
8 return $promiseOrValue;
9 }
10
11 if (method_exists($promiseOrValue, 'then')) {
12 $canceller = null;
13
14 if (method_exists($promiseOrValue, 'cancel')) {
15 $canceller = [$promiseOrValue, 'cancel'];
16 }
17
18 return new Promise(function ($resolve, $reject, $notify) use ($promiseOrValue) {
19 $promiseOrValue->then($resolve, $reject, $notify);
20 }, $canceller);
21 }
22
23 return new FulfilledPromise($promiseOrValue);
24 }
25
26 function reject($promiseOrValue = null)
27 {
28 if ($promiseOrValue instanceof PromiseInterface) {
29 return resolve($promiseOrValue)->then(function ($value) {
30 return new RejectedPromise($value);
31 });
32 }
33
34 return new RejectedPromise($promiseOrValue);
35 }
36
37 function all($promisesOrValues)
38 {
39 return map($promisesOrValues, function ($val) {
40 return $val;
41 });
42 }
43
44 function race($promisesOrValues)
45 {
46 $cancellationQueue = new CancellationQueue();
47 $cancellationQueue->enqueue($promisesOrValues);
48
49 return new Promise(function ($resolve, $reject, $notify) use ($promisesOrValues, $cancellationQueue) {
50 resolve($promisesOrValues)
51 ->done(function ($array) use ($cancellationQueue, $resolve, $reject, $notify) {
52 if (!is_array($array) || !$array) {
53 $resolve();
54 return;
55 }
56
57 foreach ($array as $promiseOrValue) {
58 $cancellationQueue->enqueue($promiseOrValue);
59
60 resolve($promiseOrValue)
61 ->done($resolve, $reject, $notify);
62 }
63 }, $reject, $notify);
64 }, $cancellationQueue);
65 }
66
67 function any($promisesOrValues)
68 {
69 return some($promisesOrValues, 1)
70 ->then(function ($val) {
71 return array_shift($val);
72 });
73 }
74
75 function some($promisesOrValues, $howMany)
76 {
77 $cancellationQueue = new CancellationQueue();
78 $cancellationQueue->enqueue($promisesOrValues);
79
80 return new Promise(function ($resolve, $reject, $notify) use ($promisesOrValues, $howMany, $cancellationQueue) {
81 resolve($promisesOrValues)
82 ->done(function ($array) use ($howMany, $cancellationQueue, $resolve, $reject, $notify) {
83 if (!is_array($array) || $howMany < 1) {
84 $resolve([]);
85 return;
86 }
87
88 $len = count($array);
89
90 if ($len < $howMany) {
91 throw new Exception\LengthException(
92 sprintf(
93 'Input array must contain at least %d item%s but contains only %s item%s.',
94 $howMany,
95 1 === $howMany ? '' : 's',
96 $len,
97 1 === $len ? '' : 's'
98 )
99 );
100 }
101
102 $toResolve = $howMany;
103 $toReject = ($len - $toResolve) + 1;
104 $values = [];
105 $reasons = [];
106
107 foreach ($array as $i => $promiseOrValue) {
108 $fulfiller = function ($val) use ($i, &$values, &$toResolve, $toReject, $resolve) {
109 if ($toResolve < 1 || $toReject < 1) {
110 return;
111 }
112
113 $values[$i] = $val;
114
115 if (0 === --$toResolve) {
116 $resolve($values);
117 }
118 };
119
120 $rejecter = function ($reason) use ($i, &$reasons, &$toReject, $toResolve, $reject) {
121 if ($toResolve < 1 || $toReject < 1) {
122 return;
123 }
124
125 $reasons[$i] = $reason;
126
127 if (0 === --$toReject) {
128 $reject($reasons);
129 }
130 };
131
132 $cancellationQueue->enqueue($promiseOrValue);
133
134 resolve($promiseOrValue)
135 ->done($fulfiller, $rejecter, $notify);
136 }
137 }, $reject, $notify);
138 }, $cancellationQueue);
139 }
140
141 function map($promisesOrValues, callable $mapFunc)
142 {
143 $cancellationQueue = new CancellationQueue();
144 $cancellationQueue->enqueue($promisesOrValues);
145
146 return new Promise(function ($resolve, $reject, $notify) use ($promisesOrValues, $mapFunc, $cancellationQueue) {
147 resolve($promisesOrValues)
148 ->done(function ($array) use ($mapFunc, $cancellationQueue, $resolve, $reject, $notify) {
149 if (!is_array($array) || !$array) {
150 $resolve([]);
151 return;
152 }
153
154 $toResolve = count($array);
155 $values = [];
156
157 foreach ($array as $i => $promiseOrValue) {
158 $cancellationQueue->enqueue($promiseOrValue);
159 $values[$i] = null;
160
161 resolve($promiseOrValue)
162 ->then($mapFunc)
163 ->done(
164 function ($mapped) use ($i, &$values, &$toResolve, $resolve) {
165 $values[$i] = $mapped;
166
167 if (0 === --$toResolve) {
168 $resolve($values);
169 }
170 },
171 $reject,
172 $notify
173 );
174 }
175 }, $reject, $notify);
176 }, $cancellationQueue);
177 }
178
179 function reduce($promisesOrValues, callable $reduceFunc, $initialValue = null)
180 {
181 $cancellationQueue = new CancellationQueue();
182 $cancellationQueue->enqueue($promisesOrValues);
183
184 return new Promise(function ($resolve, $reject, $notify) use ($promisesOrValues, $reduceFunc, $initialValue, $cancellationQueue) {
185 resolve($promisesOrValues)
186 ->done(function ($array) use ($reduceFunc, $initialValue, $cancellationQueue, $resolve, $reject, $notify) {
187 if (!is_array($array)) {
188 $array = [];
189 }
190
191 $total = count($array);
192 $i = 0;
193
194 // Wrap the supplied $reduceFunc with one that handles promises and then
195 // delegates to the supplied.
196 $wrappedReduceFunc = function ($current, $val) use ($reduceFunc, $cancellationQueue, $total, &$i) {
197 $cancellationQueue->enqueue($val);
198
199 return $current
200 ->then(function ($c) use ($reduceFunc, $total, &$i, $val) {
201 return resolve($val)
202 ->then(function ($value) use ($reduceFunc, $total, &$i, $c) {
203 return $reduceFunc($c, $value, $i++, $total);
204 });
205 });
206 };
207
208 $cancellationQueue->enqueue($initialValue);
209
210 array_reduce($array, $wrappedReduceFunc, resolve($initialValue))
211 ->done($resolve, $reject, $notify);
212 }, $reject, $notify);
213 }, $cancellationQueue);
214 }
215
216 // Internal functions
217 function _checkTypehint(callable $callback, $object)
218 {
219 if (!is_object($object)) {
220 return true;
221 }
222
223 if (is_array($callback)) {
224 $callbackReflection = new \ReflectionMethod($callback[0], $callback[1]);
225 } elseif (is_object($callback) && !$callback instanceof \Closure) {
226 $callbackReflection = new \ReflectionMethod($callback, '__invoke');
227 } else {
228 $callbackReflection = new \ReflectionFunction($callback);
229 }
230
231 $parameters = $callbackReflection->getParameters();
232
233 if (!isset($parameters[0])) {
234 return true;
235 }
236
237 $expectedException = $parameters[0];
238
239 if (!$expectedException->getClass()) {
240 return true;
241 }
242
243 return $expectedException->getClass()->isInstance($object);
244 }
245