@everyonesoftware/common 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/outputs/chunk-AY3YWKOM.js +7741 -0
  2. package/outputs/chunk-AY3YWKOM.js.map +1 -0
  3. package/outputs/sources.cjs +9007 -0
  4. package/outputs/sources.cjs.map +1 -0
  5. package/outputs/sources.d.cts +4082 -0
  6. package/outputs/sources.d.ts +4082 -0
  7. package/outputs/sources.js +1370 -0
  8. package/outputs/sources.js.map +1 -0
  9. package/outputs/tests.cjs +17208 -0
  10. package/outputs/tests.cjs.map +1 -0
  11. package/outputs/tests.d.cts +3 -0
  12. package/outputs/tests.d.ts +3 -0
  13. package/outputs/tests.js +9798 -0
  14. package/outputs/tests.js.map +1 -0
  15. package/package.json +6 -1
  16. package/.c8rc.json +0 -12
  17. package/.github/workflows/publish.yml +0 -54
  18. package/.mocharc.json +0 -9
  19. package/sources/assertMessageParameters.ts +0 -22
  20. package/sources/asyncIterator.ts +0 -437
  21. package/sources/asyncIteratorToJavascriptAsyncIteratorAdapter.ts +0 -48
  22. package/sources/asyncResult.ts +0 -95
  23. package/sources/basicDisposable.ts +0 -57
  24. package/sources/byteList.ts +0 -202
  25. package/sources/byteListStream.ts +0 -121
  26. package/sources/byteReadStream.ts +0 -24
  27. package/sources/byteWriteStream.ts +0 -16
  28. package/sources/bytes.ts +0 -25
  29. package/sources/characterList.ts +0 -195
  30. package/sources/characterListStream.ts +0 -151
  31. package/sources/characterReadStream.ts +0 -81
  32. package/sources/characterReadStreamIterator.ts +0 -128
  33. package/sources/characterWriteStream.ts +0 -45
  34. package/sources/commandLineParameter.ts +0 -45
  35. package/sources/commandLineParameters.ts +0 -21
  36. package/sources/comparable.ts +0 -144
  37. package/sources/comparer.ts +0 -133
  38. package/sources/comparison.ts +0 -20
  39. package/sources/concatenateIterable.ts +0 -119
  40. package/sources/concatenateIterator.ts +0 -165
  41. package/sources/condition.ts +0 -329
  42. package/sources/currentProcess.ts +0 -158
  43. package/sources/dateTime.ts +0 -130
  44. package/sources/depthFirstSearch.ts +0 -230
  45. package/sources/disposable.ts +0 -31
  46. package/sources/emptyError.ts +0 -10
  47. package/sources/english.ts +0 -45
  48. package/sources/equalFunctions.ts +0 -123
  49. package/sources/fetchHttpClient.ts +0 -89
  50. package/sources/fetchHttpResponse.ts +0 -106
  51. package/sources/flatMapIterable.ts +0 -104
  52. package/sources/flatMapIterator.ts +0 -152
  53. package/sources/generator.ts +0 -251
  54. package/sources/httpClient.ts +0 -36
  55. package/sources/httpHeader.ts +0 -37
  56. package/sources/httpHeaders.ts +0 -216
  57. package/sources/httpIncomingRequest.ts +0 -30
  58. package/sources/httpIncomingResponse.ts +0 -19
  59. package/sources/httpMethod.ts +0 -164
  60. package/sources/httpOutgoingRequest.ts +0 -119
  61. package/sources/httpOutgoingResponse.ts +0 -113
  62. package/sources/httpServer.ts +0 -34
  63. package/sources/inMemoryCharacterWriteStream.ts +0 -78
  64. package/sources/index.ts +0 -101
  65. package/sources/iterable.ts +0 -345
  66. package/sources/iterator.ts +0 -481
  67. package/sources/iteratorToJavascriptIteratorAdapter.ts +0 -48
  68. package/sources/javascript.ts +0 -59
  69. package/sources/javascriptArrayList.ts +0 -175
  70. package/sources/javascriptAsyncIteratorToAsyncIteratorAdapter.ts +0 -124
  71. package/sources/javascriptIteratorToIteratorAdapter.ts +0 -133
  72. package/sources/javascriptMapMap.ts +0 -143
  73. package/sources/javascriptSetSet.ts +0 -134
  74. package/sources/list.ts +0 -330
  75. package/sources/listQueue.ts +0 -62
  76. package/sources/listStack.ts +0 -62
  77. package/sources/luxonDateTime.ts +0 -109
  78. package/sources/map.ts +0 -302
  79. package/sources/mapAsyncIterator.ts +0 -141
  80. package/sources/mapIterable.ts +0 -105
  81. package/sources/mapIterator.ts +0 -145
  82. package/sources/mutableCondition.ts +0 -451
  83. package/sources/mutableHttpHeaders.ts +0 -204
  84. package/sources/mutableMap.ts +0 -292
  85. package/sources/network.ts +0 -18
  86. package/sources/node.ts +0 -37
  87. package/sources/nodeJSCharacterWriteStream.ts +0 -42
  88. package/sources/nodeJSHttpIncomingRequest.ts +0 -132
  89. package/sources/nodeJSHttpServer.ts +0 -134
  90. package/sources/notFoundError.ts +0 -12
  91. package/sources/postCondition.ts +0 -284
  92. package/sources/postConditionError.ts +0 -12
  93. package/sources/preCondition.ts +0 -284
  94. package/sources/preConditionError.ts +0 -12
  95. package/sources/promiseAsyncResult.ts +0 -174
  96. package/sources/property.ts +0 -63
  97. package/sources/queue.ts +0 -49
  98. package/sources/realNetwork.ts +0 -28
  99. package/sources/recreationDotGovClient.ts +0 -259
  100. package/sources/searchControl.ts +0 -42
  101. package/sources/set.ts +0 -244
  102. package/sources/skipAsyncIterator.ts +0 -145
  103. package/sources/skipIterator.ts +0 -155
  104. package/sources/stack.ts +0 -48
  105. package/sources/stringComparer.ts +0 -33
  106. package/sources/stringIterator.ts +0 -149
  107. package/sources/strings.ts +0 -322
  108. package/sources/syncResult.ts +0 -300
  109. package/sources/takeAsyncIterator.ts +0 -141
  110. package/sources/takeIterator.ts +0 -151
  111. package/sources/toStringFunctions.ts +0 -185
  112. package/sources/types.ts +0 -371
  113. package/sources/whereAsyncIterator.ts +0 -143
  114. package/sources/whereIterable.ts +0 -108
  115. package/sources/whereIterator.ts +0 -157
  116. package/sources/wonderlandTrailClient.ts +0 -1503
  117. package/tests/assertTest.ts +0 -113
  118. package/tests/assertTestTests.ts +0 -75
  119. package/tests/basicTestSkip.ts +0 -51
  120. package/tests/byteListStreamTests.ts +0 -390
  121. package/tests/byteListTests.ts +0 -27
  122. package/tests/bytesTests.ts +0 -43
  123. package/tests/characterListStreamTests.ts +0 -391
  124. package/tests/characterListTests.ts +0 -250
  125. package/tests/characterWriteStreamTests.ts +0 -12
  126. package/tests/comparerTests.ts +0 -92
  127. package/tests/conditionTests.ts +0 -877
  128. package/tests/consoleTestRunner.ts +0 -404
  129. package/tests/consoleTestRunnerTests.ts +0 -651
  130. package/tests/dateTimeTests.ts +0 -30
  131. package/tests/depthFirstSearchTests.ts +0 -106
  132. package/tests/disposableTests.ts +0 -121
  133. package/tests/englishTests.ts +0 -103
  134. package/tests/equalFunctionsTests.ts +0 -223
  135. package/tests/failedTest.ts +0 -43
  136. package/tests/fetchHttpClientTests.ts +0 -33
  137. package/tests/generatorTests.ts +0 -86
  138. package/tests/httpClientTests.ts +0 -18
  139. package/tests/inMemoryCharacterWriteStreamTests.ts +0 -117
  140. package/tests/iterableTests.ts +0 -141
  141. package/tests/iteratorTests.ts +0 -1086
  142. package/tests/javascriptMapMapTests.ts +0 -21
  143. package/tests/listTests.ts +0 -338
  144. package/tests/mapIteratorTests.ts +0 -55
  145. package/tests/mapTests.ts +0 -104
  146. package/tests/mutableConditionTests.ts +0 -273
  147. package/tests/mutableMapTests.ts +0 -154
  148. package/tests/nodeJSHttpServerTests.ts +0 -75
  149. package/tests/notFoundErrorTests.ts +0 -24
  150. package/tests/postConditionErrorTests.ts +0 -24
  151. package/tests/preConditionErrorTests.ts +0 -24
  152. package/tests/promiseAsyncResultTests.ts +0 -688
  153. package/tests/propertyTests.ts +0 -63
  154. package/tests/queueTests.ts +0 -29
  155. package/tests/recreationDotGovClientTests.ts +0 -191
  156. package/tests/setTests.ts +0 -140
  157. package/tests/skippedTest.ts +0 -39
  158. package/tests/stackTests.ts +0 -66
  159. package/tests/stringComparerTests.ts +0 -60
  160. package/tests/stringIteratorTests.ts +0 -156
  161. package/tests/stringsTests.ts +0 -516
  162. package/tests/syncResultTests.ts +0 -1251
  163. package/tests/test.ts +0 -228
  164. package/tests/testAction.ts +0 -75
  165. package/tests/testActionTests.ts +0 -93
  166. package/tests/testFailureTests.ts +0 -12
  167. package/tests/testRunner.ts +0 -267
  168. package/tests/testRunnerTests.ts +0 -895
  169. package/tests/testSkip.ts +0 -34
  170. package/tests/tests.ts +0 -103
  171. package/tests/toStringFunctionsTests.ts +0 -55
  172. package/tests/typesTests.ts +0 -257
  173. package/tests/whereIteratorTests.ts +0 -77
  174. package/tests/wonderlandTrailClientTests.ts +0 -452
  175. package/tsconfig.json +0 -20
  176. package/tsup.config.ts +0 -13
@@ -1,481 +0,0 @@
1
- import { Comparable } from "./comparable";
2
- import { ConcatenateIterator } from "./concatenateIterator";
3
- import { EmptyError } from "./emptyError";
4
- import { FlatMapIterator } from "./flatMapIterator";
5
- import { IteratorToJavascriptIteratorAdapter } from "./iteratorToJavascriptIteratorAdapter";
6
- import { JavascriptIterable, JavascriptIterator } from "./javascript";
7
- import { JavascriptIteratorToIteratorAdapter } from "./javascriptIteratorToIteratorAdapter";
8
- import { MapIterator } from "./mapIterator";
9
- import { NotFoundError } from "./notFoundError";
10
- import { PreCondition } from "./preCondition";
11
- import { SkipIterator } from "./skipIterator";
12
- import { SyncResult } from "./syncResult";
13
- import { TakeIterator } from "./takeIterator";
14
- import { instanceOfType, isJavascriptIterator, isUndefinedOrNull, Type } from "./types";
15
- import { WhereIterator } from "./whereIterator";
16
-
17
- /**
18
- * A type that can be used to iterate over a collection.
19
- */
20
- export abstract class Iterator<T> implements JavascriptIterable<T>
21
- {
22
- /**
23
- * Create a new {@link Iterator} that contains the provided values.
24
- * @param values The values that the new {@link Iterator} will iterate over.
25
- */
26
- public static create<T>(values: JavascriptIterator<T> | JavascriptIterable<T>): Iterator<T>
27
- {
28
- PreCondition.assertNotUndefinedAndNotNull(values, "values");
29
-
30
- return JavascriptIteratorToIteratorAdapter.create(values);
31
- }
32
-
33
- /**
34
- * Move to the next value in the collection. Return whether this {@link Iterator} points to a
35
- * value after the move.
36
- */
37
- public abstract next(): SyncResult<boolean>;
38
-
39
- /**
40
- * Get whether this {@link Iterator} has started iterating over the values in the collection.
41
- */
42
- public abstract hasStarted(): boolean;
43
-
44
- /**
45
- * Get whether this {@link Iterator} currently points at a value in the collection.
46
- */
47
- public abstract hasCurrent(): boolean;
48
-
49
- /**
50
- * Get the value that this {@link Iterator} points to.
51
- */
52
- public abstract getCurrent(): T;
53
-
54
- /**
55
- * Move to the first value if this {@link Iterator} hasn't started yet.
56
- * @returns This object for method chaining.
57
- */
58
- public start(): SyncResult<this>
59
- {
60
- return Iterator.start(this);
61
- }
62
-
63
- /**
64
- * Move the provided {@link Iterator} to its first value if it hasn't started yet.
65
- */
66
- public static start<T, TIterator extends Iterator<T>>(iterator: TIterator): SyncResult<TIterator>
67
- {
68
- PreCondition.assertNotUndefinedAndNotNull(iterator, "iterator");
69
-
70
- return SyncResult.create(() =>
71
- {
72
- if (!iterator.hasStarted())
73
- {
74
- iterator.next().await();
75
- }
76
- return iterator;
77
- });
78
- }
79
-
80
- /**
81
- * Get the current value from this {@link Iterator} and advance this {@link Iterator} to the
82
- * next value.
83
- */
84
- public takeCurrent(): SyncResult<T>
85
- {
86
- return Iterator.takeCurrent(this);
87
- }
88
-
89
- public static takeCurrent<T>(iterator: Iterator<T>): SyncResult<T>
90
- {
91
- PreCondition.assertNotUndefinedAndNotNull(iterator, "iterator");
92
- PreCondition.assertTrue(iterator.hasCurrent(), "iterator.hasCurrent()");
93
-
94
- return SyncResult.create(() =>
95
- {
96
- const result: T = iterator.getCurrent();
97
- iterator.next().await();
98
- return result;
99
- });
100
- }
101
-
102
- public [Symbol.iterator](): JavascriptIterator<T>
103
- {
104
- return Iterator[Symbol.iterator](this);
105
- }
106
-
107
- /**
108
- * Convert the provided {@link Iterator} to a {@link IteratorToJavascriptIteratorAdapter}.
109
- * @param iterator The {@link Iterator} to convert.
110
- */
111
- public static [Symbol.iterator]<T>(iterator: Iterator<T>): JavascriptIterator<T>
112
- {
113
- PreCondition.assertNotUndefinedAndNotNull(iterator, "iterator");
114
-
115
- return IteratorToJavascriptIteratorAdapter.create(iterator);
116
- }
117
-
118
- /**
119
- * Get whether this {@link Iterator} contains any values.
120
- * Note: This may advance the {@link Iterator} to the first value if it hasn't been
121
- * started yet.
122
- */
123
- public any(): SyncResult<boolean>
124
- {
125
- return Iterator.any(this);
126
- }
127
-
128
- /**
129
- * Get whether this {@link Iterator} contains any values.
130
- * Note: This may advance the {@link Iterator} to the first value if it hasn't been
131
- * started yet.
132
- */
133
- public static any<T>(iterator: Iterator<T>): SyncResult<boolean>
134
- {
135
- PreCondition.assertNotUndefinedAndNotNull(iterator, "iterator");
136
-
137
- return SyncResult.create(() =>
138
- {
139
- iterator.start().await();
140
- return iterator.hasCurrent();
141
- });
142
-
143
- }
144
-
145
- /**
146
- * Get the number of values in this {@link Iterator}.
147
- * Note: This will consume all of the values in this {@link Iterator}.
148
- */
149
- public getCount(): SyncResult<number>
150
- {
151
- return Iterator.getCount(this);
152
- }
153
-
154
- /**
155
- * Get the number of values in the provided {@link Iterator}.
156
- * Note: This will consume all of the values in the provided {@link Iterator}.
157
- */
158
- public static getCount<T>(iterator: Iterator<T>): SyncResult<number>
159
- {
160
- PreCondition.assertNotUndefinedAndNotNull(iterator, "iterator");
161
-
162
- return SyncResult.create(() =>
163
- {
164
- let result: number = 0;
165
- if (iterator.hasCurrent())
166
- {
167
- result++;
168
- }
169
- while (iterator.next().await())
170
- {
171
- result++;
172
- }
173
- return result;
174
- });
175
- }
176
-
177
- /**
178
- * Get all of the remaining values in this {@link Iterator} in a {@link T} {@link Array}.
179
- */
180
- public toArray(): SyncResult<T[]>
181
- {
182
- return Iterator.toArray(this);
183
- }
184
-
185
- /**
186
- * Get all of the remaining values in the provided {@link Iterator} in a {@link T}
187
- * {@link Array}.
188
- */
189
- public static toArray<T>(iterator: Iterator<T>): SyncResult<T[]>
190
- {
191
- PreCondition.assertNotUndefinedAndNotNull(iterator, "iterator");
192
-
193
- return SyncResult.create(() =>
194
- {
195
- const result: T[] = [];
196
-
197
- if (iterator.hasCurrent())
198
- {
199
- result.push(iterator.getCurrent());
200
- }
201
- while (iterator.next().await())
202
- {
203
- result.push(iterator.getCurrent());
204
- }
205
-
206
- return result;
207
- });
208
- }
209
-
210
- public concatenate(...toConcatenate: JavascriptIterable<T>[]): Iterator<T>
211
- {
212
- return Iterator.concatenate(this, ...toConcatenate);
213
- }
214
-
215
- public static concatenate<T>(iterator: Iterator<T>, ...toConcatenate: JavascriptIterable<T>[]): Iterator<T>
216
- {
217
- PreCondition.assertNotUndefinedAndNotNull(iterator, "iterator");
218
- PreCondition.assertNotUndefinedAndNotNull(toConcatenate, "toConcatenate");
219
-
220
- return ConcatenateIterator.create(iterator, ...toConcatenate);
221
- }
222
-
223
- /**
224
- * Get an {@link Iterator} that will only return values that match the provided condition.
225
- * @param condition The condition to run against each of the values in this {@link Iterator}.
226
- */
227
- public where(condition: (value: T) => (boolean | SyncResult<boolean>)): Iterator<T>
228
- {
229
- return Iterator.where(this, condition);
230
- }
231
-
232
- public static where<T>(iterator: Iterator<T>, condition: (value: T) => (boolean | SyncResult<boolean>)): Iterator<T>
233
- {
234
- PreCondition.assertNotUndefinedAndNotNull(iterator, "iterator");
235
- PreCondition.assertNotUndefinedAndNotNull(condition, "condition");
236
-
237
- return WhereIterator.create(iterator, condition);
238
- }
239
-
240
- /**
241
- * Get a {@link MapIterator} that will map all {@link T} values from this {@link Iterator} to
242
- * {@link TOutput} values.
243
- * @param mapping The mapping that maps {@link T} values to {@link TOutput} values.
244
- */
245
- public map<TOutput>(mapping: (value: T) => (TOutput | SyncResult<TOutput>)): Iterator<TOutput>
246
- {
247
- return Iterator.map(this, mapping);
248
- }
249
-
250
- public static map<T, TOutput>(iterator: Iterator<T>, mapping: (value: T) => (TOutput | SyncResult<TOutput>)): Iterator<TOutput>
251
- {
252
- PreCondition.assertNotUndefinedAndNotNull(iterator, "iterator");
253
- PreCondition.assertNotUndefinedAndNotNull(mapping, "mapping");
254
-
255
- return MapIterator.create(iterator, mapping);
256
- }
257
-
258
- public flatMap<TOutput>(mapping: (value: T) => JavascriptIterable<TOutput>): Iterator<TOutput>
259
- {
260
- return Iterator.flatMap(this, mapping);
261
- }
262
-
263
- public static flatMap<T,TOutput>(iterator: Iterator<T>, mapping: (value: T) => JavascriptIterable<TOutput>): Iterator<TOutput>
264
- {
265
- PreCondition.assertNotUndefinedAndNotNull(iterator, "iterator");
266
- PreCondition.assertNotUndefinedAndNotNull(mapping, "mapping");
267
-
268
- return FlatMapIterator.create(iterator, mapping);
269
- }
270
-
271
- /**
272
- * Get an {@link Iterator} that will filter this {@link Iterator} to only the values that are
273
- * instances of {@link U} based on the provided type check {@link Function}.
274
- * @param typeCheck The {@link Function} that will be used to determine if values are of type
275
- * {@link U}.
276
- */
277
- public whereInstanceOf<U extends T>(typeCheck: (value: T) => value is U): Iterator<U>
278
- {
279
- return Iterator.whereInstanceOf(this, typeCheck);
280
- }
281
-
282
- public static whereInstanceOf<T, U extends T>(iterator: Iterator<T>, typeCheck: (value: T) => value is U): Iterator<U>
283
- {
284
- PreCondition.assertNotUndefinedAndNotNull(typeCheck, "typeCheck");
285
-
286
- return iterator.where(typeCheck)
287
- .map((value: T) => value as U);
288
- }
289
-
290
- /**
291
- * Get an {@link Iterator} that will filter this {@link Iterator} to only the values that are
292
- * instances of the provided {@link Type}.
293
- * @param type The type of values to return from the new {@link Iterator}.
294
- */
295
- public whereInstanceOfType<U extends T>(type: Type<U>): Iterator<U>
296
- {
297
- return Iterator.whereInstanceOfType(this, type);
298
- }
299
-
300
- public static whereInstanceOfType<T, U extends T>(iterator: Iterator<T>, type: Type<U>): Iterator<U>
301
- {
302
- PreCondition.assertNotUndefinedAndNotNull(type, "type");
303
-
304
- return iterator.whereInstanceOf((value: T) => instanceOfType(value, type));
305
- }
306
-
307
- /**
308
- * If the condition function is undefined, then this function will return the first value in
309
- * this {@link Iterator}. If this condition function is provided, then this function will return
310
- * the first value that matches the provided condition.
311
- * @param condition The condition that the returned value must satisfy.
312
- */
313
- public first(condition?: (value: T) => (boolean | SyncResult<boolean>)): SyncResult<T>
314
- {
315
- return Iterator.first(this, condition);
316
- }
317
-
318
- /**
319
- * If the condition function is undefined, then this function will return the first value in
320
- * the {@link Iterator}. If this condition function is provided, then this function will return
321
- * the first value that matches the provided condition.
322
- * @param iterator The {@link Iterator} to get the first value from.
323
- */
324
- public static first<T>(iterator: Iterator<T>, condition?: (value: T) => (boolean | SyncResult<boolean>)): SyncResult<T>
325
- {
326
- PreCondition.assertNotUndefinedAndNotNull(iterator, "iterator");
327
-
328
- return SyncResult.create(() =>
329
- {
330
- iterator.start().await();
331
- if (isUndefinedOrNull(condition))
332
- {
333
- if (!iterator.hasCurrent())
334
- {
335
- throw new EmptyError();
336
- }
337
- }
338
- else
339
- {
340
- while (iterator.hasCurrent() && !condition(iterator.getCurrent()))
341
- {
342
- const conditionResult: boolean | SyncResult<boolean> = condition(iterator.getCurrent());
343
- const conditionBoolean: boolean = conditionResult instanceof SyncResult ? conditionResult.await() : conditionResult;
344
- if (conditionBoolean)
345
- {
346
- break;
347
- }
348
- else
349
- {
350
- iterator.next().await();
351
- }
352
- }
353
-
354
- if (!iterator.hasCurrent())
355
- {
356
- throw new NotFoundError("No value was found in the Iterator that matched the provided condition.");
357
- }
358
- }
359
- return iterator.getCurrent();
360
- });
361
- }
362
-
363
- /**
364
- * If the condition function is undefined, then this function will return the last value in this
365
- * {@link Iterator}. If this condition function is provided, then this function will return the
366
- * last value that matches the provided condition.
367
- * @param condition The condition that the returned value must satisfy.
368
- */
369
- public last(condition?: (value: T) => (boolean | SyncResult<boolean>)): SyncResult<T>
370
- {
371
- return Iterator.last(this, condition);
372
- }
373
-
374
- /**
375
- * If the condition function is undefined, then this function will return the last value in the
376
- * {@link Iterator}. If this condition function is provided, then this function will return the
377
- * last value that matches the provided condition.
378
- * @param iterator The {@link Iterator} to get the last value from.
379
- */
380
- public static last<T>(iterator: Iterator<T>, condition?: (value: T) => (boolean | SyncResult<boolean>)): SyncResult<T>
381
- {
382
- PreCondition.assertNotUndefinedAndNotNull(iterator, "iterator");
383
-
384
- return SyncResult.create(() =>
385
- {
386
- iterator.start().await();
387
-
388
- if (!iterator.hasCurrent())
389
- {
390
- throw new EmptyError();
391
- }
392
-
393
- let result: T;
394
- let found: boolean = false;
395
- do
396
- {
397
- if (!condition || condition(iterator.getCurrent()))
398
- {
399
- result = iterator.getCurrent();
400
- found = true;
401
- }
402
- }
403
- while (iterator.next().await());
404
-
405
- if (!found)
406
- {
407
- if (!condition)
408
- {
409
- throw new EmptyError();
410
- }
411
- else
412
- {
413
- throw new NotFoundError("No value was found in the Iterator that matched the provided condition.");
414
- }
415
- }
416
-
417
- return result!;
418
- });
419
- }
420
-
421
- /**
422
- * Find the maximum value in the provided {@link Iterator}.
423
- * @param iterator The values to find the maximum of.
424
- */
425
- public static findMaximum<T extends Comparable<T>>(iterator: JavascriptIterator<T> | Iterator<T>): SyncResult<T>
426
- {
427
- PreCondition.assertNotUndefinedAndNotNull(iterator, "iterable");
428
-
429
- return SyncResult.create(() =>
430
- {
431
- if (isJavascriptIterator(iterator))
432
- {
433
- iterator = Iterator.create(iterator);
434
- }
435
-
436
- let result: T = iterator.first()
437
- .convertError(EmptyError, () => new EmptyError("Can't find the maximum of an empty Iterator."))
438
- .await();
439
- while (iterator.next().await())
440
- {
441
- const currentValue: T = iterator.getCurrent();
442
- if (result.lessThan(currentValue))
443
- {
444
- result = currentValue;
445
- }
446
- }
447
-
448
- return result;
449
- });
450
- }
451
-
452
- /**
453
- * Get a new {@link Iterator} that wraps around this {@link Iterator} and only
454
- * returns a maximum number of values from this {@link Iterator}.
455
- * @param maximumToTake The maximum number of values to take from this {@link Iterator}.
456
- */
457
- public take(maximumToTake: number): Iterator<T>
458
- {
459
- return Iterator.take(this, maximumToTake);
460
- }
461
-
462
- public static take<T>(iterator: Iterator<T>, maximumToTake: number): Iterator<T>
463
- {
464
- return TakeIterator.create(iterator, maximumToTake);
465
- }
466
-
467
- /**
468
- * Get a new {@link Iterator} that wraps around this {@link Iterator} and will skip the initial
469
- * provided number of values before beginning to return values.
470
- * @param maximumToSkip The maximum number of values to skip from this {@link Iterator}.
471
- */
472
- public skip(maximumToSkip: number): Iterator<T>
473
- {
474
- return Iterator.skip(this, maximumToSkip);
475
- }
476
-
477
- public static skip<T>(iterator: Iterator<T>, maximumToSkip: number): Iterator<T>
478
- {
479
- return SkipIterator.create(iterator, maximumToSkip);
480
- }
481
- }
@@ -1,48 +0,0 @@
1
- import { Iterator } from "./iterator";
2
- import { JavascriptIterator, JavascriptIteratorResult } from "./javascript";
3
- import { PreCondition } from "./preCondition";
4
-
5
- /**
6
- * A JavaScript/TypeScript object that is used to iterate over a collection of values.
7
- */
8
- export class IteratorToJavascriptIteratorAdapter<T> implements JavascriptIterator<T>
9
- {
10
- private readonly iterator: Iterator<T>;
11
- private hasStarted: boolean;
12
-
13
- private constructor(iterator: Iterator<T>)
14
- {
15
- PreCondition.assertNotUndefinedAndNotNull(iterator, "iterator");
16
-
17
- this.iterator = iterator;
18
- this.hasStarted = false;
19
- }
20
-
21
- public static create<T>(iterator: Iterator<T>): IteratorToJavascriptIteratorAdapter<T>
22
- {
23
- return new IteratorToJavascriptIteratorAdapter<T>(iterator);
24
- }
25
-
26
- public next(): JavascriptIteratorResult<T>
27
- {
28
- if (!this.hasStarted)
29
- {
30
- this.hasStarted = true;
31
- this.iterator.start();
32
- }
33
- else
34
- {
35
- this.iterator.next();
36
- }
37
-
38
- const result: JavascriptIteratorResult<T> = {
39
- done: !this.iterator.hasCurrent(),
40
- value: undefined!,
41
- };
42
- if (!result.done)
43
- {
44
- result.value = this.iterator.getCurrent();
45
- }
46
- return result;
47
- }
48
- }
@@ -1,59 +0,0 @@
1
- /**
2
- * The built-in {@link Array} type.
3
- *
4
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
5
- */
6
- export type JavascriptArray<T> = Array<T>;
7
-
8
- /**
9
- * The built-in {@link Iterator} type.
10
- *
11
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators#iterators
12
- */
13
- export type JavascriptIterator<T> = Iterator<T>;
14
-
15
- /**
16
- * The built-in {@link IteratorResult} type.
17
- */
18
- export type JavascriptIteratorResult<T> = IteratorResult<T,T>;
19
-
20
- /**
21
- * The built-in {@link Iterable} type.
22
- *
23
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators#iterables
24
- */
25
- export type JavascriptIterable<T> = Iterable<T>;
26
-
27
- /**
28
- * The built-in {@link Map} type.
29
- *
30
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
31
- */
32
- export type JavascriptMap<TKey,TValue> = Map<TKey,TValue>;
33
- /**
34
- * The built-in {@link Map} type.
35
- *
36
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
37
- */
38
- export const JavascriptMap = Map;
39
-
40
- /**
41
- * The built-in {@link AsyncIterator} type.
42
- *
43
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncIterator
44
- */
45
- export type JavascriptAsyncIterator<T> = AsyncIterator<T>;
46
-
47
- export interface JavascriptAsyncIterable<T>
48
- {
49
- [Symbol.asyncIterator](): JavascriptAsyncIterator<T>;
50
- }
51
-
52
- /**
53
- * The built-in {@link Set} type.
54
- *
55
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set
56
- */
57
- export type JavascriptSet<T> = Set<T>;
58
-
59
- export const JavascriptSet = Set;