@develia/commons 0.1.1 → 0.2.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.
- package/dist/index.js +7 -1
- package/package.json +1 -1
- package/src/action.js +2 -0
- package/src/action.js.map +1 -0
- package/src/action.ts +1 -0
- package/src/equality-comparer.js +2 -0
- package/src/equality-comparer.js.map +1 -0
- package/src/equality-comparer.ts +1 -0
- package/src/from.js +427 -0
- package/src/from.js.map +1 -0
- package/src/from.ts +504 -0
- package/src/functions.js +6 -8
- package/src/functions.js.map +1 -1
- package/src/functions.ts +7 -8
- package/src/grouping.js +12 -0
- package/src/grouping.js.map +1 -0
- package/src/grouping.ts +24 -0
- package/src/mapper.js +2 -0
- package/src/mapper.js.map +1 -0
- package/src/mapper.ts +1 -0
- package/src/predicate.js +2 -0
- package/src/predicate.js.map +1 -0
- package/src/predicate.ts +1 -0
- package/src/provider.js +2 -0
- package/src/provider.js.map +1 -0
- package/src/provider.ts +1 -0
package/dist/index.js
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
export * from '../src/functions';
|
|
2
|
-
export * from '../src/cache-dictionary'
|
|
2
|
+
export * from '../src/cache-dictionary'
|
|
3
|
+
export * from '../src/from'
|
|
4
|
+
export * from '../src/action'
|
|
5
|
+
export * from '../src/equality-comparer'
|
|
6
|
+
export * from '../src/mapper'
|
|
7
|
+
export * from '../src/predicate'
|
|
8
|
+
export * from '../src/provider'
|
package/package.json
CHANGED
package/src/action.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["action.ts"],"names":[],"mappings":""}
|
package/src/action.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type Action<T> = (arg: T) => void
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equality-comparer.js","sourceRoot":"","sources":["equality-comparer.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type EqualityComparer<T> = (arg1: T, arg2: T) => boolean;
|
package/src/from.js
ADDED
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
import Grouping from "./grouping";
|
|
2
|
+
export default function from(source) {
|
|
3
|
+
if (source == null)
|
|
4
|
+
throw "Source is null.";
|
|
5
|
+
if (typeof source === 'function')
|
|
6
|
+
return From.fn(source);
|
|
7
|
+
if (typeof source[Symbol.iterator] === 'function') {
|
|
8
|
+
return From.iterable(source);
|
|
9
|
+
}
|
|
10
|
+
throw "Invalid source.";
|
|
11
|
+
}
|
|
12
|
+
export class From {
|
|
13
|
+
static _shallowEqual(obj1, obj2) {
|
|
14
|
+
const keys1 = Object.keys(obj1);
|
|
15
|
+
const keys2 = Object.keys(obj2);
|
|
16
|
+
if (keys1.length !== keys2.length) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
for (let key of keys1) {
|
|
20
|
+
if (obj1[key] !== obj2[key]) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
constructor(fn) {
|
|
27
|
+
this._fn = fn;
|
|
28
|
+
}
|
|
29
|
+
static fn(callable) {
|
|
30
|
+
return new From(callable);
|
|
31
|
+
}
|
|
32
|
+
;
|
|
33
|
+
collect() {
|
|
34
|
+
const cache = Array.from(this);
|
|
35
|
+
return From.iterable(cache);
|
|
36
|
+
}
|
|
37
|
+
static iterable(iterable) {
|
|
38
|
+
return From.fn(function* () {
|
|
39
|
+
for (const item of iterable) {
|
|
40
|
+
yield item;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
;
|
|
45
|
+
map(mapper) {
|
|
46
|
+
const self = this;
|
|
47
|
+
return From.fn(function* () {
|
|
48
|
+
for (let item of self) {
|
|
49
|
+
yield mapper(item);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
*[Symbol.iterator]() {
|
|
54
|
+
yield* this._fn();
|
|
55
|
+
}
|
|
56
|
+
all(predicate) {
|
|
57
|
+
for (let item of this._fn()) {
|
|
58
|
+
if (!predicate(item)) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
any(predicate) {
|
|
65
|
+
for (let item of this) {
|
|
66
|
+
if (predicate(item)) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
filter(predicate) {
|
|
73
|
+
const self = this;
|
|
74
|
+
return From.fn(function* () {
|
|
75
|
+
for (let item of self) {
|
|
76
|
+
if (predicate(item)) {
|
|
77
|
+
yield item;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
contains(value) {
|
|
83
|
+
for (let item of this) {
|
|
84
|
+
if (item === value) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
// noinspection LoopStatementThatDoesntLoopJS
|
|
91
|
+
first(predicate) {
|
|
92
|
+
if (predicate) {
|
|
93
|
+
for (let item of this) {
|
|
94
|
+
if (!predicate || predicate(item)) {
|
|
95
|
+
return item;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
// noinspection LoopStatementThatDoesntLoopJS
|
|
101
|
+
for (let item of this) {
|
|
102
|
+
return item;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
append(item) {
|
|
108
|
+
const self = this;
|
|
109
|
+
return From.fn(function* () {
|
|
110
|
+
for (let element of self) {
|
|
111
|
+
yield element;
|
|
112
|
+
}
|
|
113
|
+
yield item;
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
prepend(item) {
|
|
117
|
+
const self = this;
|
|
118
|
+
return From.fn(function* () {
|
|
119
|
+
yield item;
|
|
120
|
+
for (let element of self) {
|
|
121
|
+
yield element;
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
at(index) {
|
|
126
|
+
let idx = 0;
|
|
127
|
+
for (let item of this) {
|
|
128
|
+
if (idx++ === index) {
|
|
129
|
+
return item;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
last(predicate) {
|
|
135
|
+
let last = undefined;
|
|
136
|
+
if (predicate)
|
|
137
|
+
for (let item of this) {
|
|
138
|
+
if (!predicate || predicate(item)) {
|
|
139
|
+
last = item;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
for (let item of this) {
|
|
144
|
+
last = item;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return last;
|
|
148
|
+
}
|
|
149
|
+
mapMany(mapper) {
|
|
150
|
+
const self = this;
|
|
151
|
+
return From.fn(function* () {
|
|
152
|
+
for (const item of self) {
|
|
153
|
+
const subitems = mapper(item);
|
|
154
|
+
for (const subitem of subitems) {
|
|
155
|
+
yield subitem;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
flatten() {
|
|
161
|
+
const self = this;
|
|
162
|
+
return From.fn(function* () {
|
|
163
|
+
for (let item of self) {
|
|
164
|
+
let temp = item;
|
|
165
|
+
for (let subitem of temp) {
|
|
166
|
+
yield subitem;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
sum(mapper) {
|
|
172
|
+
let total = 0;
|
|
173
|
+
if (mapper)
|
|
174
|
+
for (let item of this) {
|
|
175
|
+
total += mapper(item);
|
|
176
|
+
}
|
|
177
|
+
else
|
|
178
|
+
for (let item of this) {
|
|
179
|
+
total += item;
|
|
180
|
+
}
|
|
181
|
+
return total;
|
|
182
|
+
}
|
|
183
|
+
avg(mapper) {
|
|
184
|
+
let total = 0;
|
|
185
|
+
let count = 0;
|
|
186
|
+
if (mapper)
|
|
187
|
+
for (let item of this) {
|
|
188
|
+
total += mapper(item);
|
|
189
|
+
count++;
|
|
190
|
+
}
|
|
191
|
+
else
|
|
192
|
+
for (let item of this) {
|
|
193
|
+
total += item;
|
|
194
|
+
count++;
|
|
195
|
+
}
|
|
196
|
+
return count > 0 ? total / count : 0;
|
|
197
|
+
}
|
|
198
|
+
max(mapper) {
|
|
199
|
+
let max = -Infinity;
|
|
200
|
+
for (let item of this) {
|
|
201
|
+
let value = mapper(item);
|
|
202
|
+
max = value > max ? value : max;
|
|
203
|
+
}
|
|
204
|
+
return max;
|
|
205
|
+
}
|
|
206
|
+
min(mapper) {
|
|
207
|
+
let min = Infinity;
|
|
208
|
+
for (let item of this) {
|
|
209
|
+
let value = mapper(item);
|
|
210
|
+
min = value < min ? value : min;
|
|
211
|
+
}
|
|
212
|
+
return min;
|
|
213
|
+
}
|
|
214
|
+
maxBy(mapper) {
|
|
215
|
+
let max = -Infinity;
|
|
216
|
+
let maxItem;
|
|
217
|
+
for (let item of this) {
|
|
218
|
+
let value = mapper(item);
|
|
219
|
+
if (value > max) {
|
|
220
|
+
max = value;
|
|
221
|
+
maxItem = item;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return maxItem;
|
|
225
|
+
}
|
|
226
|
+
minBy(mapper) {
|
|
227
|
+
let min = Infinity;
|
|
228
|
+
let minItem;
|
|
229
|
+
for (let item of this) {
|
|
230
|
+
let value = mapper(item);
|
|
231
|
+
if (value < min) {
|
|
232
|
+
min = value;
|
|
233
|
+
minItem = item;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return minItem;
|
|
237
|
+
}
|
|
238
|
+
orderBy(mapper) {
|
|
239
|
+
const array = Array.from(this._fn());
|
|
240
|
+
array.sort((a, b) => {
|
|
241
|
+
const aValue = mapper(a);
|
|
242
|
+
const bValue = mapper(b);
|
|
243
|
+
return aValue > bValue ? 1 : aValue < bValue ? -1 : 0;
|
|
244
|
+
});
|
|
245
|
+
return From.iterable(array);
|
|
246
|
+
}
|
|
247
|
+
groupBy(keySelector, equalityComparer) {
|
|
248
|
+
equalityComparer = (equalityComparer == null ? From._shallowEqual : equalityComparer);
|
|
249
|
+
const self = this;
|
|
250
|
+
return From.fn(function* () {
|
|
251
|
+
const groups = [];
|
|
252
|
+
for (let item of self) {
|
|
253
|
+
const key = keySelector(item);
|
|
254
|
+
let found = false;
|
|
255
|
+
for (let [entryKey, group] of groups) {
|
|
256
|
+
if (equalityComparer(key, entryKey)) {
|
|
257
|
+
group.push(item);
|
|
258
|
+
found = true;
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
if (!found) {
|
|
263
|
+
groups.push([key, [item]]);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
yield* groups.map(([key, values]) => new Grouping(key, values));
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
head(n) {
|
|
270
|
+
const self = this;
|
|
271
|
+
return From.fn(function* () {
|
|
272
|
+
let count = 0;
|
|
273
|
+
for (let item of self) {
|
|
274
|
+
if (count++ < n) {
|
|
275
|
+
yield item;
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
tail(n) {
|
|
284
|
+
const self = this;
|
|
285
|
+
return From.fn(function* () {
|
|
286
|
+
let buffer = [];
|
|
287
|
+
for (let item of self) {
|
|
288
|
+
buffer.push(item);
|
|
289
|
+
if (buffer.length > n) {
|
|
290
|
+
buffer.shift();
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
yield* buffer;
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
forEach(action) {
|
|
297
|
+
for (let item of this) {
|
|
298
|
+
action(item);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
toArray() {
|
|
302
|
+
return Array.from(this);
|
|
303
|
+
}
|
|
304
|
+
instancesOf(type) {
|
|
305
|
+
return this.filter(item => typeof item === type);
|
|
306
|
+
}
|
|
307
|
+
allInstanceOf(type) {
|
|
308
|
+
for (let item of this) {
|
|
309
|
+
if (!(item instanceof type)) {
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return true;
|
|
314
|
+
}
|
|
315
|
+
distinct(eq_comparer) {
|
|
316
|
+
if (eq_comparer == null)
|
|
317
|
+
eq_comparer = From._shallowEqual;
|
|
318
|
+
const self = this;
|
|
319
|
+
return From.fn(function* () {
|
|
320
|
+
const included = [];
|
|
321
|
+
for (let item of self) {
|
|
322
|
+
if (!From.iterable(included).any(x => eq_comparer(x, item))) {
|
|
323
|
+
included.push(item);
|
|
324
|
+
yield item;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
insert(item, index) {
|
|
330
|
+
const self = this;
|
|
331
|
+
return From.fn(function* () {
|
|
332
|
+
let i = 0;
|
|
333
|
+
let inserted = false;
|
|
334
|
+
for (let existingItem of self) {
|
|
335
|
+
if (i === index) {
|
|
336
|
+
yield item;
|
|
337
|
+
inserted = true;
|
|
338
|
+
}
|
|
339
|
+
yield existingItem;
|
|
340
|
+
i++;
|
|
341
|
+
}
|
|
342
|
+
if (!inserted) {
|
|
343
|
+
yield item;
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
skip(n) {
|
|
348
|
+
const self = this;
|
|
349
|
+
return From.fn(function* () {
|
|
350
|
+
let i = 0;
|
|
351
|
+
for (let item of self) {
|
|
352
|
+
if (i >= n) {
|
|
353
|
+
yield item;
|
|
354
|
+
}
|
|
355
|
+
i++;
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
union(other) {
|
|
360
|
+
const self = this;
|
|
361
|
+
return From.fn(function* () {
|
|
362
|
+
yield* self;
|
|
363
|
+
yield* other;
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
innerJoin(other, thisKeySelector, otherKeySelector, resultSelector) {
|
|
367
|
+
const self = this;
|
|
368
|
+
return From.fn(() => {
|
|
369
|
+
const otherByKey = new Map();
|
|
370
|
+
for (let item of other) {
|
|
371
|
+
otherByKey.set(otherKeySelector(item), item);
|
|
372
|
+
}
|
|
373
|
+
return Array.from(self)
|
|
374
|
+
.filter(item => otherByKey.has(thisKeySelector(item)))
|
|
375
|
+
.map(item => resultSelector(item, otherByKey.get(thisKeySelector(item))));
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
leftJoin(other, thisKeySelector, otherKeySelector, resultSelector) {
|
|
379
|
+
const self = this;
|
|
380
|
+
return From.fn(() => {
|
|
381
|
+
const otherByKey = new Map();
|
|
382
|
+
for (let item of other) {
|
|
383
|
+
otherByKey.set(otherKeySelector(item), item);
|
|
384
|
+
}
|
|
385
|
+
return Array.from(self).map(item => resultSelector(item, otherByKey.get(thisKeySelector(item))));
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
leftGroupJoin(other, thisKeySelector, otherKeySelector, resultSelector) {
|
|
389
|
+
const self = this;
|
|
390
|
+
return From.fn(() => {
|
|
391
|
+
const otherByKeys = new Map();
|
|
392
|
+
for (let item of other) {
|
|
393
|
+
const key = otherKeySelector(item);
|
|
394
|
+
if (!otherByKeys.has(key)) {
|
|
395
|
+
otherByKeys.set(key, []);
|
|
396
|
+
}
|
|
397
|
+
otherByKeys.get(key).push(item);
|
|
398
|
+
}
|
|
399
|
+
return Array.from(self).map(item => resultSelector(item, otherByKeys.get(thisKeySelector(item)) || []));
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
rightGroupJoin(other, thisKeySelector, otherKeySelector, resultSelector) {
|
|
403
|
+
const self = this;
|
|
404
|
+
return From.fn(() => {
|
|
405
|
+
const thisByKeys = new Map();
|
|
406
|
+
for (let item of self) {
|
|
407
|
+
const key = thisKeySelector(item);
|
|
408
|
+
if (!thisByKeys.has(key)) {
|
|
409
|
+
thisByKeys.set(key, []);
|
|
410
|
+
}
|
|
411
|
+
thisByKeys.get(key).push(item);
|
|
412
|
+
}
|
|
413
|
+
return Array.from(other).map(item => resultSelector(thisByKeys.get(otherKeySelector(item)) || [], item));
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
rightJoin(other, thisKeySelector, otherKeySelector, resultSelector) {
|
|
417
|
+
const self = this;
|
|
418
|
+
return From.fn(() => {
|
|
419
|
+
const thisByKey = new Map();
|
|
420
|
+
for (let item of self) {
|
|
421
|
+
thisByKey.set(thisKeySelector(item), item);
|
|
422
|
+
}
|
|
423
|
+
return Array.from(other).map(item => resultSelector(thisByKey.get(otherKeySelector(item)), item));
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
//# sourceMappingURL=from.js.map
|
package/src/from.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"from.js","sourceRoot":"","sources":["from.ts"],"names":[],"mappings":"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"}
|
package/src/from.ts
ADDED
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
import {Provider} from "./provider";
|
|
2
|
+
import {Mapper} from "./mapper";
|
|
3
|
+
import {Predicate} from "./predicate";
|
|
4
|
+
import {EqualityComparer} from "./equality-comparer";
|
|
5
|
+
import {Action} from "./action";
|
|
6
|
+
import Grouping from "./grouping"
|
|
7
|
+
|
|
8
|
+
export default function from<T>(source: Iterable<T> | Provider<Iterable<T>>): From<T> {
|
|
9
|
+
if (source == null)
|
|
10
|
+
throw "Source is null.";
|
|
11
|
+
if (typeof source === 'function')
|
|
12
|
+
return From.fn<T>(source);
|
|
13
|
+
if (typeof source[Symbol.iterator] === 'function') {
|
|
14
|
+
return From.iterable<T>(source);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
throw "Invalid source.";
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export class From<T> implements Iterable<T> {
|
|
21
|
+
|
|
22
|
+
private static _shallowEqual(obj1: any, obj2: any): boolean {
|
|
23
|
+
const keys1 = Object.keys(obj1);
|
|
24
|
+
const keys2 = Object.keys(obj2);
|
|
25
|
+
|
|
26
|
+
if (keys1.length !== keys2.length) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
for (let key of keys1) {
|
|
31
|
+
if (obj1[key] !== obj2[key]) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
private readonly _fn: Provider<Iterable<T>>
|
|
40
|
+
|
|
41
|
+
protected constructor(fn: Provider<Iterable<T>>) {
|
|
42
|
+
this._fn = fn;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public static fn<T>(callable: Provider<Iterable<T>>): From<T> {
|
|
46
|
+
return new From<T>(callable);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
public collect(): From<T> {
|
|
50
|
+
const cache = Array.from(this);
|
|
51
|
+
return From.iterable(cache);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public static iterable<T>(iterable: Iterable<T>): From<T> {
|
|
55
|
+
return From.fn<T>(function* () {
|
|
56
|
+
for (const item of iterable) {
|
|
57
|
+
yield item;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
public map<R>(mapper: Mapper<T, R>): From<R> {
|
|
63
|
+
const self = this;
|
|
64
|
+
return From.fn<R>(function* () {
|
|
65
|
+
for (let item of self) {
|
|
66
|
+
yield mapper(item);
|
|
67
|
+
}
|
|
68
|
+
})
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
* [Symbol.iterator](): Iterator<T> {
|
|
72
|
+
yield* this._fn()
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
public all(predicate: Predicate<T>): boolean {
|
|
77
|
+
for (let item of this._fn()) {
|
|
78
|
+
if (!predicate(item)) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
public any(predicate: Predicate<T>): boolean {
|
|
86
|
+
for (let item of this) {
|
|
87
|
+
if (predicate(item)) {
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
public filter(predicate: Predicate<T>): From<T> {
|
|
95
|
+
const self = this;
|
|
96
|
+
return From.fn<T>(function* () {
|
|
97
|
+
for (let item of self) {
|
|
98
|
+
if (predicate(item)) {
|
|
99
|
+
yield item;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
public contains(value: T): boolean {
|
|
106
|
+
for (let item of this) {
|
|
107
|
+
if (item === value) {
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
// noinspection LoopStatementThatDoesntLoopJS
|
|
116
|
+
public first(predicate?: Predicate<T>): T | undefined {
|
|
117
|
+
|
|
118
|
+
if (predicate) {
|
|
119
|
+
for (let item of this) {
|
|
120
|
+
if (!predicate || predicate(item)) {
|
|
121
|
+
return item;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
} else {
|
|
125
|
+
// noinspection LoopStatementThatDoesntLoopJS
|
|
126
|
+
for (let item of this) {
|
|
127
|
+
return item;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
public append(item: T): From<T> {
|
|
135
|
+
const self = this;
|
|
136
|
+
return From.fn<T>(function* () {
|
|
137
|
+
for (let element of self) {
|
|
138
|
+
yield element;
|
|
139
|
+
}
|
|
140
|
+
yield item;
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
public prepend(item: T): From<T> {
|
|
145
|
+
const self = this;
|
|
146
|
+
return From.fn<T>(function* () {
|
|
147
|
+
yield item;
|
|
148
|
+
for (let element of self) {
|
|
149
|
+
yield element;
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
public at(index: number): T | undefined {
|
|
155
|
+
let idx = 0;
|
|
156
|
+
for (let item of this) {
|
|
157
|
+
if (idx++ === index) {
|
|
158
|
+
return item;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
public last(predicate?: Predicate<T>): T | undefined {
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
let last: T | undefined = undefined;
|
|
168
|
+
|
|
169
|
+
if (predicate)
|
|
170
|
+
for (let item of this) {
|
|
171
|
+
if (!predicate || predicate(item)) {
|
|
172
|
+
last = item;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
for (let item of this) {
|
|
177
|
+
last = item;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return last;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
public mapMany<R>(mapper: Mapper<T, Iterable<R>>): From<R> {
|
|
184
|
+
const self = this;
|
|
185
|
+
return From.fn(function* () {
|
|
186
|
+
for (const item of self) {
|
|
187
|
+
const subitems = mapper(item)
|
|
188
|
+
for (const subitem of subitems) {
|
|
189
|
+
yield subitem;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
})
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
public flatten(): From<any> {
|
|
196
|
+
const self = this;
|
|
197
|
+
return From.fn<T>(function* () {
|
|
198
|
+
for (let item of self) {
|
|
199
|
+
let temp = <Iterable<any>>item;
|
|
200
|
+
for (let subitem of temp) {
|
|
201
|
+
yield subitem
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
public sum(mapper?: Mapper<T, number>): number {
|
|
208
|
+
let total = 0;
|
|
209
|
+
|
|
210
|
+
if (mapper)
|
|
211
|
+
for (let item of this) {
|
|
212
|
+
total += mapper(item);
|
|
213
|
+
}
|
|
214
|
+
else
|
|
215
|
+
for (let item of this) {
|
|
216
|
+
total += item as number;
|
|
217
|
+
}
|
|
218
|
+
return total;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
public avg(mapper?: Mapper<T, number>): number {
|
|
222
|
+
let total = 0;
|
|
223
|
+
let count = 0;
|
|
224
|
+
|
|
225
|
+
if (mapper)
|
|
226
|
+
for (let item of this) {
|
|
227
|
+
total += mapper(item);
|
|
228
|
+
count++;
|
|
229
|
+
}
|
|
230
|
+
else
|
|
231
|
+
for (let item of this) {
|
|
232
|
+
total += item as number;
|
|
233
|
+
count++;
|
|
234
|
+
}
|
|
235
|
+
return count > 0 ? total / count : 0;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
public max(mapper: Mapper<T, number>): number {
|
|
239
|
+
let max = -Infinity;
|
|
240
|
+
for (let item of this) {
|
|
241
|
+
let value = mapper(item);
|
|
242
|
+
max = value > max ? value : max;
|
|
243
|
+
}
|
|
244
|
+
return max;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
public min(mapper: Mapper<T, number>): number {
|
|
248
|
+
let min = Infinity;
|
|
249
|
+
for (let item of this) {
|
|
250
|
+
let value = mapper(item);
|
|
251
|
+
min = value < min ? value : min;
|
|
252
|
+
}
|
|
253
|
+
return min;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
public maxBy(mapper: Mapper<T, number>): T | undefined {
|
|
257
|
+
let max = -Infinity;
|
|
258
|
+
let maxItem: T | undefined;
|
|
259
|
+
for (let item of this) {
|
|
260
|
+
let value = mapper(item);
|
|
261
|
+
if (value > max) {
|
|
262
|
+
max = value;
|
|
263
|
+
maxItem = item;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return maxItem;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
public minBy(mapper: Mapper<T, number>): T | undefined {
|
|
270
|
+
let min = Infinity;
|
|
271
|
+
let minItem: T | undefined;
|
|
272
|
+
for (let item of this) {
|
|
273
|
+
let value = mapper(item);
|
|
274
|
+
if (value < min) {
|
|
275
|
+
min = value;
|
|
276
|
+
minItem = item;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return minItem;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
public orderBy<R>(mapper: Mapper<T, R>): From<T> {
|
|
283
|
+
const array = Array.from(this._fn());
|
|
284
|
+
array.sort((a, b) => {
|
|
285
|
+
const aValue = mapper(a);
|
|
286
|
+
const bValue = mapper(b);
|
|
287
|
+
return aValue > bValue ? 1 : aValue < bValue ? -1 : 0;
|
|
288
|
+
});
|
|
289
|
+
return From.iterable(array);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
public groupBy<TKey>(keySelector: Mapper<T, TKey>, equalityComparer?: EqualityComparer<TKey>): From<Grouping<TKey, T>> {
|
|
293
|
+
|
|
294
|
+
equalityComparer = (equalityComparer == null ? From._shallowEqual : equalityComparer);
|
|
295
|
+
const self = this;
|
|
296
|
+
|
|
297
|
+
return From.fn<Grouping<TKey, T>>(function* () {
|
|
298
|
+
const groups: Array<[TKey, T[]]> = [];
|
|
299
|
+
for (let item of self) {
|
|
300
|
+
const key = keySelector(item);
|
|
301
|
+
let found = false;
|
|
302
|
+
for (let [entryKey, group] of groups) {
|
|
303
|
+
if (equalityComparer(key, entryKey)) {
|
|
304
|
+
group.push(item);
|
|
305
|
+
found = true;
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
if (!found) {
|
|
310
|
+
groups.push([key, [item]]);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
yield* groups.map(([key, values]) => new Grouping<TKey, T>(key, values));
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
public head(n: number): From<T> {
|
|
318
|
+
|
|
319
|
+
const self = this;
|
|
320
|
+
return From.fn<T>(function* () {
|
|
321
|
+
let count = 0;
|
|
322
|
+
for (let item of self) {
|
|
323
|
+
if (count++ < n) {
|
|
324
|
+
yield item;
|
|
325
|
+
} else {
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
public tail(n: number): From<T> {
|
|
333
|
+
|
|
334
|
+
const self = this;
|
|
335
|
+
return From.fn<T>(function* () {
|
|
336
|
+
let buffer = [];
|
|
337
|
+
for (let item of self) {
|
|
338
|
+
buffer.push(item);
|
|
339
|
+
if (buffer.length > n) {
|
|
340
|
+
buffer.shift();
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
yield* buffer;
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
public forEach(action: Action<T>): void {
|
|
348
|
+
for (let item of this) {
|
|
349
|
+
action(item);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
public toArray(): T[] {
|
|
354
|
+
return Array.from(this);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
public instancesOf(type: string): From<T> {
|
|
359
|
+
return this.filter(item => typeof item === type);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
public allInstanceOf(type: new (...args: any[]) => any): boolean {
|
|
363
|
+
for (let item of this) {
|
|
364
|
+
if (!(item instanceof type)) {
|
|
365
|
+
return false;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
return true;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
public distinct(eq_comparer?: EqualityComparer<T>): From<T> {
|
|
372
|
+
|
|
373
|
+
if (eq_comparer == null)
|
|
374
|
+
eq_comparer = From._shallowEqual;
|
|
375
|
+
|
|
376
|
+
const self = this;
|
|
377
|
+
return From.fn<T>(function* () {
|
|
378
|
+
|
|
379
|
+
const included = [];
|
|
380
|
+
|
|
381
|
+
for (let item of self) {
|
|
382
|
+
if (!From.iterable(included).any(x => eq_comparer(x, item))) {
|
|
383
|
+
included.push(item);
|
|
384
|
+
yield item;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
public insert(item: T, index: number): From<T> {
|
|
391
|
+
|
|
392
|
+
const self = this;
|
|
393
|
+
return From.fn<T>(function* () {
|
|
394
|
+
let i = 0;
|
|
395
|
+
let inserted = false;
|
|
396
|
+
for (let existingItem of self) {
|
|
397
|
+
if (i === index) {
|
|
398
|
+
yield item;
|
|
399
|
+
inserted = true;
|
|
400
|
+
}
|
|
401
|
+
yield existingItem;
|
|
402
|
+
i++;
|
|
403
|
+
}
|
|
404
|
+
if (!inserted) {
|
|
405
|
+
yield item;
|
|
406
|
+
}
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
public skip(n: number): From<T> {
|
|
411
|
+
const self = this;
|
|
412
|
+
return From.fn<T>(function* () {
|
|
413
|
+
let i = 0;
|
|
414
|
+
for (let item of self) {
|
|
415
|
+
if (i >= n) {
|
|
416
|
+
yield item;
|
|
417
|
+
}
|
|
418
|
+
i++;
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
public union(other: Iterable<T>): From<T> {
|
|
425
|
+
const self = this;
|
|
426
|
+
return From.fn<T>(function* () {
|
|
427
|
+
yield* self;
|
|
428
|
+
yield* other;
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
public innerJoin<T2, R, R2>(other: Iterable<T2>, thisKeySelector: Mapper<T, R>, otherKeySelector: Mapper<T2, R>, resultSelector: (thisItem: T, otherItem: T2) => R2): From<R2> {
|
|
433
|
+
|
|
434
|
+
const self = this;
|
|
435
|
+
return From.fn<R2>(() => {
|
|
436
|
+
const otherByKey = new Map<R, T2>();
|
|
437
|
+
for (let item of other) {
|
|
438
|
+
otherByKey.set(otherKeySelector(item), item);
|
|
439
|
+
}
|
|
440
|
+
return Array.from(self)
|
|
441
|
+
.filter(item => otherByKey.has(thisKeySelector(item)))
|
|
442
|
+
.map(item => resultSelector(item, otherByKey.get(thisKeySelector(item))!));
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
public leftJoin<U, K, R>(other: Iterable<U>, thisKeySelector: Mapper<T, K>, otherKeySelector: Mapper<U, K>, resultSelector: (thisItem: T, otherItem: U | undefined) => R): From<R> {
|
|
447
|
+
|
|
448
|
+
const self = this;
|
|
449
|
+
return From.fn<R>(() => {
|
|
450
|
+
const otherByKey = new Map<K, U>();
|
|
451
|
+
for (let item of other) {
|
|
452
|
+
otherByKey.set(otherKeySelector(item), item);
|
|
453
|
+
}
|
|
454
|
+
return Array.from(self).map(item => resultSelector(item, otherByKey.get(thisKeySelector(item))));
|
|
455
|
+
});
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
public leftGroupJoin<U, K, R>(other: Iterable<U>, thisKeySelector: Mapper<T, K>, otherKeySelector: Mapper<U, K>, resultSelector: (thisItem: T, otherItems: Array<U>) => R): From<R> {
|
|
460
|
+
|
|
461
|
+
const self = this;
|
|
462
|
+
return From.fn<R>(() => {
|
|
463
|
+
const otherByKeys = new Map<K, Array<U>>();
|
|
464
|
+
for (let item of other) {
|
|
465
|
+
const key = otherKeySelector(item);
|
|
466
|
+
if (!otherByKeys.has(key)) {
|
|
467
|
+
otherByKeys.set(key, []);
|
|
468
|
+
}
|
|
469
|
+
otherByKeys.get(key)!.push(item);
|
|
470
|
+
}
|
|
471
|
+
return Array.from(self).map(item => resultSelector(item, otherByKeys.get(thisKeySelector(item)) || []));
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
public rightGroupJoin<U, K, R>(other: Iterable<U>, thisKeySelector: Mapper<T, K>, otherKeySelector: Mapper<U, K>, resultSelector: (thisItems: Array<T>, otherItem: U) => R): From<R> {
|
|
476
|
+
|
|
477
|
+
const self = this;
|
|
478
|
+
return From.fn<R>(() => {
|
|
479
|
+
const thisByKeys = new Map<K, Array<T>>();
|
|
480
|
+
for (let item of self) {
|
|
481
|
+
const key = thisKeySelector(item);
|
|
482
|
+
if (!thisByKeys.has(key)) {
|
|
483
|
+
thisByKeys.set(key, []);
|
|
484
|
+
}
|
|
485
|
+
thisByKeys.get(key)!.push(item);
|
|
486
|
+
}
|
|
487
|
+
return Array.from(other).map(item => resultSelector(thisByKeys.get(otherKeySelector(item)) || [], item));
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
public rightJoin<U, K, R>(other: Iterable<U>, thisKeySelector: Mapper<T, K>, otherKeySelector: Mapper<U, K>, resultSelector: (thisItem: T | undefined, otherItem: U) => R): From<R> {
|
|
493
|
+
|
|
494
|
+
const self = this;
|
|
495
|
+
return From.fn<R>(() => {
|
|
496
|
+
const thisByKey = new Map<K, T>();
|
|
497
|
+
for (let item of self) {
|
|
498
|
+
thisByKey.set(thisKeySelector(item), item);
|
|
499
|
+
}
|
|
500
|
+
return Array.from(other).map(item => resultSelector(thisByKey.get(otherKeySelector(item)), item));
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
}
|
package/src/functions.js
CHANGED
|
@@ -95,10 +95,7 @@ export function deepClone(obj) {
|
|
|
95
95
|
}
|
|
96
96
|
return copy;
|
|
97
97
|
}
|
|
98
|
-
function
|
|
99
|
-
if (!formData) {
|
|
100
|
-
formData = new FormData();
|
|
101
|
-
}
|
|
98
|
+
function _objectToFormData(data, formData, parentKey = '') {
|
|
102
99
|
for (const key in data) {
|
|
103
100
|
if (data.hasOwnProperty(key)) {
|
|
104
101
|
const value = data[key];
|
|
@@ -109,13 +106,13 @@ function objectToFormData(data, formData = null, parentKey = '') {
|
|
|
109
106
|
formData.append(parentKey ? `${parentKey}[${key}]` : key, value);
|
|
110
107
|
}
|
|
111
108
|
else if (typeof value === 'object' && !Array.isArray(value)) {
|
|
112
|
-
|
|
109
|
+
_objectToFormData(value, formData, parentKey ? `${parentKey}[${key}]` : key);
|
|
113
110
|
}
|
|
114
111
|
else if (Array.isArray(value)) {
|
|
115
112
|
value.forEach((item, index) => {
|
|
116
113
|
const arrayKey = `${parentKey ? `${parentKey}[${key}]` : key}[${index}]`;
|
|
117
114
|
if (typeof item === 'object' && !Array.isArray(item)) {
|
|
118
|
-
|
|
115
|
+
_objectToFormData(item, formData, arrayKey);
|
|
119
116
|
}
|
|
120
117
|
else {
|
|
121
118
|
formData.append(arrayKey, item);
|
|
@@ -129,7 +126,8 @@ function objectToFormData(data, formData = null, parentKey = '') {
|
|
|
129
126
|
}
|
|
130
127
|
return formData;
|
|
131
128
|
}
|
|
132
|
-
export function
|
|
133
|
-
|
|
129
|
+
export function objectToFormData(data) {
|
|
130
|
+
let formData = new FormData();
|
|
131
|
+
return _objectToFormData(data, formData);
|
|
134
132
|
}
|
|
135
133
|
//# sourceMappingURL=functions.js.map
|
package/src/functions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.js","sourceRoot":"","sources":["functions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"functions.js","sourceRoot":"","sources":["functions.ts"],"names":[],"mappings":"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"}
|
package/src/functions.ts
CHANGED
|
@@ -112,10 +112,8 @@ export function deepClone<T>(obj: T): T {
|
|
|
112
112
|
return copy as T;
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
function
|
|
116
|
-
|
|
117
|
-
formData = new FormData();
|
|
118
|
-
}
|
|
115
|
+
function _objectToFormData(data: Record<string, any>, formData: FormData, parentKey: string = ''): FormData {
|
|
116
|
+
|
|
119
117
|
|
|
120
118
|
for (const key in data) {
|
|
121
119
|
if (data.hasOwnProperty(key)) {
|
|
@@ -126,12 +124,12 @@ function objectToFormData(data: Record<string, any>, formData: FormData | null =
|
|
|
126
124
|
} else if (value instanceof File) {
|
|
127
125
|
formData.append(parentKey ? `${parentKey}[${key}]` : key, value);
|
|
128
126
|
} else if (typeof value === 'object' && !Array.isArray(value)) {
|
|
129
|
-
|
|
127
|
+
_objectToFormData(value, formData, parentKey ? `${parentKey}[${key}]` : key);
|
|
130
128
|
} else if (Array.isArray(value)) {
|
|
131
129
|
value.forEach((item, index) => {
|
|
132
130
|
const arrayKey = `${parentKey ? `${parentKey}[${key}]` : key}[${index}]`;
|
|
133
131
|
if (typeof item === 'object' && !Array.isArray(item)) {
|
|
134
|
-
|
|
132
|
+
_objectToFormData(item, formData, arrayKey);
|
|
135
133
|
} else {
|
|
136
134
|
formData.append(arrayKey, item);
|
|
137
135
|
}
|
|
@@ -145,6 +143,7 @@ function objectToFormData(data: Record<string, any>, formData: FormData | null =
|
|
|
145
143
|
return formData;
|
|
146
144
|
}
|
|
147
145
|
|
|
148
|
-
export function
|
|
149
|
-
|
|
146
|
+
export function objectToFormData(data: Record<string, any>): FormData {
|
|
147
|
+
let formData = new FormData();
|
|
148
|
+
return _objectToFormData(data, formData);
|
|
150
149
|
}
|
package/src/grouping.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// noinspection JSUnusedGlobalSymbols
|
|
2
|
+
import { From } from "./from";
|
|
3
|
+
export default class Grouping extends From {
|
|
4
|
+
get key() {
|
|
5
|
+
return this._key;
|
|
6
|
+
}
|
|
7
|
+
constructor(key, values) {
|
|
8
|
+
super(() => values);
|
|
9
|
+
this._key = key;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=grouping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouping.js","sourceRoot":"","sources":["grouping.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAGrC,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAG5B,MAAM,CAAC,OAAO,OAAO,QAAkB,SAAQ,IAAO;IAIlD,IAAW,GAAG;QACV,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,YAAmB,GAAS,EAAE,MAAgB;QAC1C,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IACpB,CAAC;CAGJ"}
|
package/src/grouping.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// noinspection JSUnusedGlobalSymbols
|
|
2
|
+
|
|
3
|
+
import {Provider} from "./provider";
|
|
4
|
+
import {From} from "./from";
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
export default class Grouping<TKey, T> extends From<T> {
|
|
8
|
+
|
|
9
|
+
private readonly _key: TKey;
|
|
10
|
+
|
|
11
|
+
public get key(): TKey {
|
|
12
|
+
return this._key;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public constructor(key: TKey, values: Array<T>) {
|
|
16
|
+
super(() => values);
|
|
17
|
+
this._key = key;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
package/src/mapper.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["mapper.ts"],"names":[],"mappings":""}
|
package/src/mapper.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type Mapper<T, R> = (arg: T) => R;
|
package/src/predicate.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.js","sourceRoot":"","sources":["predicate.ts"],"names":[],"mappings":""}
|
package/src/predicate.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type Predicate<T> = (arg: T) => boolean;
|
package/src/provider.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["provider.ts"],"names":[],"mappings":""}
|
package/src/provider.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type Provider<T> = () => T;
|