occam-languages 3.0.31 → 3.0.32

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.
@@ -1,18 +1,13 @@
1
1
  "use strict";
2
2
 
3
- import { arrayUtilities } from "necessary";
4
-
5
- const { filter: arrayFilter } = arrayUtilities;
6
-
7
3
  export function one(array, callback, ...initialArguments) {
8
4
  const back = initialArguments.pop(),
9
5
  forward = initialArguments.pop(),
10
- length = array.length,
11
- index = 0;
6
+ length = array.length;
12
7
 
13
- function next(index, ...nextArguments) {
8
+ function next(index, count, ...nextArguments) {
14
9
  if (index === length) {
15
- if (count !== 1) {
10
+ if (count === 0) {
16
11
  return back();
17
12
  }
18
13
 
@@ -25,32 +20,29 @@ export function one(array, callback, ...initialArguments) {
25
20
  element,
26
21
  ...initialArguments,
27
22
  (...forwardArguments) => {
28
- forwardArguments.pop(); ///
29
-
30
- count++;
31
-
32
- if (count === 2) {
23
+ if (count === 1) {
33
24
  return back();
34
25
  }
35
26
 
36
- return next(index + 1, ...forwardArguments);
37
- },
38
- (...backArguments) => {
39
- const exception = backArguments.pop();
27
+ forwardArguments.pop(); ///
40
28
 
29
+ return next(index + 1, count + 1, ...forwardArguments);
30
+ },
31
+ (exception) => {
41
32
  if (exception) {
42
33
  return back(exception);
43
34
  }
44
35
 
45
- return next(index + 1, ...nextArguments);
36
+ return next(index + 1, count, ...nextArguments);
46
37
  },
47
38
  index
48
39
  );
49
40
  }
50
41
 
51
- let count = 0;
42
+ const index = 0,
43
+ count = 0;
52
44
 
53
- return next(index, ...initialArguments);
45
+ return next(index, count);
54
46
  }
55
47
 
56
48
  export function some(array, callback, ...initialArguments) {
@@ -69,9 +61,7 @@ export function some(array, callback, ...initialArguments) {
69
61
  element,
70
62
  ...initialArguments,
71
63
  forward,
72
- (...backArguments) => {
73
- const exception = backArguments.pop();
74
-
64
+ (exception) => {
75
65
  if (exception) {
76
66
  return back(exception);
77
67
  }
@@ -90,10 +80,11 @@ export function some(array, callback, ...initialArguments) {
90
80
  export function each(array, callback, ...initialArguments) {
91
81
  const back = initialArguments.pop(),
92
82
  forward = initialArguments.pop(),
93
- length = array.length,
94
- index = 0;
83
+ length = array.length;
84
+
85
+ function next(index, count, ...nextArguments) {
86
+ const back = nextArguments.pop();
95
87
 
96
- function next(index, ...nextArguments) {
97
88
  if (index === length) {
98
89
  if (count === 0) {
99
90
  return back();
@@ -108,29 +99,27 @@ export function each(array, callback, ...initialArguments) {
108
99
  element,
109
100
  ...nextArguments,
110
101
  (...forwardArguments) => {
111
- forwardArguments.pop(); ///
112
-
113
- count++;
114
-
115
- return next(index + 1, ...forwardArguments);
102
+ return next(index + 1, count + 1, ...forwardArguments);
116
103
  },
117
104
  back,
118
105
  index
119
106
  );
120
107
  }
121
108
 
122
- let count = 0;
109
+ const index = 0,
110
+ count = 0;
123
111
 
124
- return next(index, ...initialArguments);
112
+ return next(index, count, ...initialArguments, back);
125
113
  }
126
114
 
127
115
  export function every(array, callback, ...initialArguments) {
128
116
  const back = initialArguments.pop(),
129
117
  forward = initialArguments.pop(),
130
- length = array.length,
131
- index = 0;
118
+ length = array.length;
132
119
 
133
120
  function next(index, ...nextArguments) {
121
+ const back = nextArguments.pop();
122
+
134
123
  if (index === length) {
135
124
  return forward(...nextArguments, back);
136
125
  }
@@ -141,8 +130,6 @@ export function every(array, callback, ...initialArguments) {
141
130
  element,
142
131
  ...nextArguments,
143
132
  (...forwardArguments) => {
144
- forwardArguments.pop(); ///
145
-
146
133
  return next(index + 1, ...forwardArguments);
147
134
  },
148
135
  back,
@@ -150,16 +137,21 @@ export function every(array, callback, ...initialArguments) {
150
137
  );
151
138
  }
152
139
 
153
- return next(index, ...initialArguments);
140
+ const index = 0;
141
+
142
+ return next(index, ...initialArguments, back);
154
143
  }
155
144
 
156
145
  export function map(array, callback, ...initialArguments) {
157
146
  const back = initialArguments.pop(),
158
147
  forward = initialArguments.pop(),
159
- length = array.length,
160
- index = 0;
148
+ arrayA = array, ///
149
+ arrayB = [],
150
+ length = array.length;
161
151
 
162
152
  function next(index, arrayB, ...nextArguments) {
153
+ const back = nextArguments.pop();
154
+
163
155
  if (index === length) {
164
156
  return forward(arrayB, ...nextArguments, back);
165
157
  }
@@ -170,70 +162,26 @@ export function map(array, callback, ...initialArguments) {
170
162
  elementA,
171
163
  ...nextArguments,
172
164
  (elementB, ...forwardArguments) => {
173
- forwardArguments.pop(); ///
174
-
175
- arrayB = [ ///
176
- ...arrayB,
177
- elementB
178
- ];
179
-
180
- return next(index + 1, arrayB, ...forwardArguments);
165
+ return next(index + 1, [ ...arrayB, elementB ], ...forwardArguments);
181
166
  },
182
167
  back,
183
168
  index
184
169
  );
185
170
  }
186
171
 
187
- const arrayA = array, ///
188
- arrayB = [];
189
-
190
- return next(index, arrayB, ...initialArguments);
191
- }
192
-
193
- export function find(array, callback, ...initialArguments) {
194
- const back = initialArguments.pop(),
195
- forward = initialArguments.pop(),
196
- length = array.length,
197
- index = 0;
198
-
199
- function next(index, ...nextArguments) {
200
- if (index === length) {
201
- return back();
202
- }
203
-
204
- const element = array[index];
205
-
206
- return callback(
207
- element,
208
- ...nextArguments,
209
- (...forwardArguments) => {
210
- forwardArguments.pop(); ///
211
-
212
- return forward(element, ...forwardArguments, back);
213
- },
214
- (...backArguments) => {
215
- const exception = backArguments.pop();
216
-
217
- if (exception) {
218
- return back(exception);
219
- }
220
-
221
- return next(index + 1, ...nextArguments);
222
- },
223
- index
224
- );
225
- }
172
+ const index = 0;
226
173
 
227
- return next(index, ...initialArguments);
174
+ return next(index, arrayB, ...initialArguments, back);
228
175
  }
229
176
 
230
177
  export function reduce(array, initialValue, callback, ...initialArguments) {
231
178
  const back = initialArguments.pop(),
232
179
  forward = initialArguments.pop(),
233
- length = array.length,
234
- index = 0;
180
+ length = array.length;
235
181
 
236
182
  function next(index, value, ...nextArguments) {
183
+ const back = nextArguments.pop();
184
+
237
185
  if (index === length) {
238
186
  return forward(value, ...nextArguments, back);
239
187
  }
@@ -245,8 +193,6 @@ export function reduce(array, initialValue, callback, ...initialArguments) {
245
193
  value,
246
194
  ...nextArguments,
247
195
  (value, ...forwardArguments) => {
248
- forwardArguments.pop(); ///
249
-
250
196
  return next(index + 1, value, ...forwardArguments);
251
197
  },
252
198
  back,
@@ -254,16 +200,19 @@ export function reduce(array, initialValue, callback, ...initialArguments) {
254
200
  );
255
201
  }
256
202
 
257
- return next(index, initialValue, ...initialArguments);
203
+ const index = 0;
204
+
205
+ return next(index, initialValue, ...initialArguments, back);
258
206
  }
259
207
 
260
208
  export function forEach(array, callback, ...initialArguments) {
261
209
  const back = initialArguments.pop(),
262
210
  forward = initialArguments.pop(),
263
- length = array.length,
264
- index = 0;
211
+ length = array.length;
265
212
 
266
213
  function next(index, ...nextArguments) {
214
+ const back = nextArguments.pop();
215
+
267
216
  if (index === length) {
268
217
  return forward(...nextArguments, back);
269
218
  }
@@ -274,8 +223,6 @@ export function forEach(array, callback, ...initialArguments) {
274
223
  element,
275
224
  ...nextArguments,
276
225
  (...forwardArguments) => {
277
- forwardArguments.pop(); ///
278
-
279
226
  return next(index + 1, ...forwardArguments);
280
227
  },
281
228
  back,
@@ -283,17 +230,20 @@ export function forEach(array, callback, ...initialArguments) {
283
230
  );
284
231
  }
285
232
 
286
- return next(index, ...initialArguments);
233
+ const index = 0;
234
+
235
+ return next(index, ...initialArguments, back);
287
236
  }
288
237
 
289
238
  export function filter(array, callback, ...initialArguments) {
290
239
  const back = initialArguments.pop(),
291
240
  forward = initialArguments.pop(),
292
- length = array.length,
293
241
  deletedElements = [],
294
- index = length - 1;
242
+ length = array.length;
295
243
 
296
244
  function next(index, ...nextArguments) {
245
+ const back = nextArguments.pop();
246
+
297
247
  if (index === -1) {
298
248
  return forward(deletedElements, ...nextArguments, back);
299
249
  }
@@ -304,8 +254,6 @@ export function filter(array, callback, ...initialArguments) {
304
254
  element,
305
255
  ...nextArguments,
306
256
  (passed, ...forwardArguments) => {
307
- forwardArguments.pop(); ///
308
-
309
257
  if (!passed) {
310
258
  const startIndex = index, ///
311
259
  deleteCount = 1,
@@ -323,16 +271,19 @@ export function filter(array, callback, ...initialArguments) {
323
271
  );
324
272
  }
325
273
 
326
- return next(index, ...initialArguments);
274
+ const index = length - 1;
275
+
276
+ return next(index, ...initialArguments, back);
327
277
  }
328
278
 
329
279
  export function prune(array, callback, ...initialArguments) {
330
280
  const back = initialArguments.pop(),
331
281
  forward = initialArguments.pop(),
332
- length = array.length,
333
- index = 0;
282
+ length = array.length;
334
283
 
335
284
  function next(index, ...nextArguments) {
285
+ const back = nextArguments.pop();
286
+
336
287
  if (index === length) {
337
288
  const deletedElement = undefined;
338
289
 
@@ -345,8 +296,6 @@ export function prune(array, callback, ...initialArguments) {
345
296
  element,
346
297
  ...nextArguments,
347
298
  (passed, ...forwardArguments) => {
348
- forwardArguments.pop(); ///
349
-
350
299
  if (!passed) {
351
300
  const startIndex = index, ///
352
301
  deleteCount = 1,
@@ -354,7 +303,7 @@ export function prune(array, callback, ...initialArguments) {
354
303
 
355
304
  array.splice(startIndex, deleteCount);
356
305
 
357
- return forward(deletedElement, ...forwardArguments, back);
306
+ return forward(deletedElement, ...forwardArguments);
358
307
  }
359
308
 
360
309
  return next(index + 1, ...forwardArguments);
@@ -364,16 +313,19 @@ export function prune(array, callback, ...initialArguments) {
364
313
  );
365
314
  }
366
315
 
367
- return next(index, ...initialArguments);
316
+ const index = 0;
317
+
318
+ return next(index, ...initialArguments, back);
368
319
  }
369
320
 
370
321
  export function extract(array, callback, ...initialArguments) {
371
322
  const back = initialArguments.pop(),
372
323
  forward = initialArguments.pop(),
373
- length = array.length,
374
- index = 0;
324
+ length = array.length;
375
325
 
376
326
  function next(index, ...nextArguments) {
327
+ const back = nextArguments.pop();
328
+
377
329
  if (index === length) {
378
330
  const deletedElement = undefined;
379
331
 
@@ -386,8 +338,6 @@ export function extract(array, callback, ...initialArguments) {
386
338
  element,
387
339
  ...nextArguments,
388
340
  (passed, ...forwardArguments) => {
389
- forwardArguments.pop(); ///
390
-
391
341
  if (passed) {
392
342
  const startIndex = index, ///
393
343
  deleteCount = 1,
@@ -395,7 +345,7 @@ export function extract(array, callback, ...initialArguments) {
395
345
 
396
346
  array.splice(startIndex, deleteCount);
397
347
 
398
- return forward(deletedElement, ...forwardArguments, back);
348
+ return forward(deletedElement, ...forwardArguments);
399
349
  }
400
350
 
401
351
  return next(index + 1, ...forwardArguments);
@@ -405,122 +355,154 @@ export function extract(array, callback, ...initialArguments) {
405
355
  );
406
356
  }
407
357
 
408
- return next(index, ...initialArguments);
358
+ const index = 0;
359
+
360
+ return next(index, ...initialArguments, back);
409
361
  }
410
362
 
411
- export function match(arrayA, arrayB, callback, ...initialArguments) {
363
+ export function find(array, callback, ...initialArguments) {
412
364
  const back = initialArguments.pop(),
413
365
  forward = initialArguments.pop(),
414
- arrayALength = arrayA.length,
415
- arrayBLength = arrayB.length;
416
-
417
- if (arrayALength !== arrayBLength) {
418
- return back();
419
- }
366
+ elements = [],
367
+ length = array.length;
420
368
 
421
- const length = arrayALength, ///
422
- index = 0;
369
+ function next(index, elements, ...nextArguments) {
370
+ const back = nextArguments.pop();
423
371
 
424
- function next(index, ...nextArguments) {
425
372
  if (index === length) {
426
- return forward(...nextArguments, back);
373
+ return forward(elements, ...nextArguments, back);
427
374
  }
428
375
 
429
- const elementA = arrayA[index],
430
- elementB = arrayB[index];
376
+ const element = array[index];
431
377
 
432
378
  return callback(
433
- elementA,
434
- elementB,
379
+ element,
435
380
  ...nextArguments,
436
- (...forwardArguments) => {
437
- forwardArguments.pop(); ///
381
+ (passed, ...forwardArguments) => {
382
+ if (passed) {
383
+ return next(index + 1, [ ...elements, element ], ...forwardArguments);
384
+ }
438
385
 
439
- return next(index + 1, ...forwardArguments);
386
+ return next(index + 1, elements, ...forwardArguments);
440
387
  },
441
388
  back,
442
389
  index
443
390
  );
444
391
  }
445
392
 
446
- return next(index, ...initialArguments);
447
- }
393
+ const index = 0;
448
394
 
449
- export function resolve(arrayA, arrayB, callback, ...initialArguments) {
450
- arrayA = [ ///
451
- ...arrayA
452
- ];
395
+ return next(index, elements, ...initialArguments, back);
396
+ }
453
397
 
398
+ export function resolve(array, callback, ...initialArguments) {
454
399
  const back = initialArguments.pop(),
455
- forward = initialArguments.pop();
400
+ forward = initialArguments.pop(),
401
+ arrayA = array, ///
402
+ arrayB = [];
456
403
 
457
- function nextPass(...nextPassArguments) {
458
- const length = arrayA.length; ///
404
+ function next(arrayA, arrayB, ...nextArguments) {
405
+ const back = nextArguments.pop(),
406
+ length = arrayA.length;
459
407
 
460
408
  if (length === 0) {
461
- return forward(...nextPassArguments, back);
409
+ return forward(arrayB, ...nextArguments, back);
462
410
  }
463
411
 
464
- function nextElement(index, success, ...nextElementArguments) {
465
- if (index === length) {
466
- if (!success) {
412
+ return find(
413
+ arrayA,
414
+ (element, ...callbackArguments) => {
415
+ const index = callbackArguments.pop(),
416
+ back = callbackArguments.pop(),
417
+ forward = callbackArguments.pop();
418
+
419
+ return callback(
420
+ element,
421
+ ...callbackArguments,
422
+ (...forwardArguments) => {
423
+ const success = true;
424
+
425
+ return forward(success, ...forwardArguments);
426
+ },
427
+ (exception) => {
428
+ if (exception) {
429
+ return back(exception);
430
+ }
431
+
432
+ const success = false;
433
+
434
+ return forward(success, ...callbackArguments, back);
435
+ },
436
+ index
437
+ );
438
+ },
439
+ ...nextArguments,
440
+ (elements, ...forwardArguments) => {
441
+ const elementsLength = elements.length;
442
+
443
+ if (elementsLength === 0) {
467
444
  return back();
468
445
  }
469
446
 
470
- arrayFilter(arrayA, (elementA) => {
471
- const arrayBIncludesElementA = arrayB.includes(elementA);
472
-
473
- if (!arrayBIncludesElementA) {
474
- return true;
475
- }
476
- });
477
-
478
- return nextPass(...nextElementArguments);
479
- }
480
-
481
- const elementA = arrayA[index];
482
-
483
- return callback(
484
- elementA,
485
- ...nextElementArguments,
486
- (...forwardArguments) => {
487
- forwardArguments.pop(); ///
447
+ return next(
448
+ arrayA.filter((element) => !elements.includes(element)),
449
+ [ ...arrayB, ...elements ],
450
+ ...forwardArguments
451
+ );
452
+ },
453
+ back
454
+ );
455
+ }
488
456
 
489
- const elementB = elementA; ///
457
+ return next(arrayA, arrayB, ...initialArguments, back);
458
+ }
490
459
 
491
- arrayB.push(elementB);
460
+ export function match(arrayA, arrayB, callback, ...initialArguments) {
461
+ const back = initialArguments.pop(),
462
+ forward = initialArguments.pop(),
463
+ arrayALength = arrayA.length,
464
+ arrayBLength = arrayB.length,
465
+ length = arrayALength; ///
492
466
 
493
- return nextElement(index + 1, true, ...forwardArguments);
494
- },
495
- (...backArguments) => {
496
- const exception = backArguments.pop();
467
+ if (arrayALength !== arrayBLength) {
468
+ return back();
469
+ }
497
470
 
498
- if (exception) {
499
- return back(exception);
500
- }
471
+ function next(index, ...nextArguments) {
472
+ const back = nextArguments.pop();
501
473
 
502
- return nextElement(index + 1, success, ...nextElementArguments);
503
- },
504
- index
505
- );
474
+ if (index === length) {
475
+ return forward(...nextArguments, back);
506
476
  }
507
477
 
508
- const index = 0,
509
- success = false;
478
+ const elementA = arrayA[index],
479
+ elementB = arrayB[index];
510
480
 
511
- return nextElement(index, success, ...nextPassArguments);
481
+ return callback(
482
+ elementA,
483
+ elementB,
484
+ ...nextArguments,
485
+ (...forwardArguments) => {
486
+ return next(index + 1, ...forwardArguments);
487
+ },
488
+ back,
489
+ index
490
+ );
512
491
  }
513
492
 
514
- return nextPass(...initialArguments);
493
+ const index = 0;
494
+
495
+ return next(index, ...initialArguments, back);
515
496
  }
516
497
 
517
498
  export function forwardsEvery(array, callback, ...initialArguments) {
518
499
  const back = initialArguments.pop(),
519
500
  forward = initialArguments.pop(),
520
- length = array.length,
521
- index = 0;
501
+ length = array.length;
522
502
 
523
503
  function next(index, ...nextArguments) {
504
+ const back = nextArguments.pop();
505
+
524
506
  if (index === length) {
525
507
  return forward(...nextArguments, back);
526
508
  }
@@ -531,8 +513,6 @@ export function forwardsEvery(array, callback, ...initialArguments) {
531
513
  element,
532
514
  ...nextArguments,
533
515
  (...forwardArguments) => {
534
- forwardArguments.pop(); ///
535
-
536
516
  return next(index + 1, ...forwardArguments);
537
517
  },
538
518
  back,
@@ -540,16 +520,19 @@ export function forwardsEvery(array, callback, ...initialArguments) {
540
520
  );
541
521
  }
542
522
 
543
- return next(index, ...initialArguments);
523
+ const index = 0;
524
+
525
+ return next(index, ...initialArguments, back);
544
526
  }
545
527
 
546
528
  export function backwardsEvery(array, callback, ...initialArguments) {
547
529
  const back = initialArguments.pop(),
548
530
  forward = initialArguments.pop(),
549
- length = array.length,
550
- index = length - 1;
531
+ length = array.length;
551
532
 
552
533
  function next(index, ...nextArguments) {
534
+ const back = nextArguments.pop();
535
+
553
536
  if (index === -1) {
554
537
  return forward(...nextArguments, back);
555
538
  }
@@ -560,8 +543,6 @@ export function backwardsEvery(array, callback, ...initialArguments) {
560
543
  element,
561
544
  ...nextArguments,
562
545
  (...forwardArguments) => {
563
- forwardArguments.pop(); ///
564
-
565
546
  return next(index - 1, ...forwardArguments);
566
547
  },
567
548
  back,
@@ -569,16 +550,19 @@ export function backwardsEvery(array, callback, ...initialArguments) {
569
550
  );
570
551
  }
571
552
 
572
- return next(index, ...initialArguments);
553
+ const index = length - 1;
554
+
555
+ return next(index, ...initialArguments, back);
573
556
  }
574
557
 
575
558
  export function forwardsForEach(array, callback, ...initialArguments) {
576
559
  const back = initialArguments.pop(),
577
560
  forward = initialArguments.pop(),
578
- length = array.length,
579
- index = 0;
561
+ length = array.length;
580
562
 
581
563
  function next(index, ...nextArguments) {
564
+ const back = nextArguments.pop();
565
+
582
566
  if (index === length) {
583
567
  return forward(...nextArguments, back);
584
568
  }
@@ -589,8 +573,6 @@ export function forwardsForEach(array, callback, ...initialArguments) {
589
573
  element,
590
574
  ...nextArguments,
591
575
  (...forwardArguments) => {
592
- forwardArguments.pop(); ///
593
-
594
576
  return next(index + 1, ...forwardArguments);
595
577
  },
596
578
  back,
@@ -598,16 +580,19 @@ export function forwardsForEach(array, callback, ...initialArguments) {
598
580
  );
599
581
  }
600
582
 
601
- return next(index, ...initialArguments);
583
+ const index = 0;
584
+
585
+ return next(index, ...initialArguments, back);
602
586
  }
603
587
 
604
588
  export function backwardsForEach(array, callback, ...initialArguments) {
605
589
  const back = initialArguments.pop(),
606
590
  forward = initialArguments.pop(),
607
- length = array.length,
608
- index = length - 1;
591
+ length = array.length;
609
592
 
610
593
  function next(index, ...nextArguments) {
594
+ const back = nextArguments.pop();
595
+
611
596
  if (index === -1) {
612
597
  return forward(...nextArguments, back);
613
598
  }
@@ -618,8 +603,6 @@ export function backwardsForEach(array, callback, ...initialArguments) {
618
603
  element,
619
604
  ...nextArguments,
620
605
  (...forwardArguments) => {
621
- forwardArguments.pop(); ///
622
-
623
606
  return next(index - 1, ...forwardArguments);
624
607
  },
625
608
  back,
@@ -627,7 +610,9 @@ export function backwardsForEach(array, callback, ...initialArguments) {
627
610
  );
628
611
  }
629
612
 
630
- return next(index, ...initialArguments);
613
+ const index = length - 1;
614
+
615
+ return next(index, ...initialArguments, back);
631
616
  }
632
617
 
633
618
  export function all(callbacks, ...initialArguments) {
@@ -648,14 +633,14 @@ export default {
648
633
  each,
649
634
  every,
650
635
  map,
651
- find,
652
636
  reduce,
653
637
  forEach,
654
638
  filter,
655
639
  prune,
656
640
  extract,
657
- match,
641
+ find,
658
642
  resolve,
643
+ match,
659
644
  forwardsEvery,
660
645
  backwardsEvery,
661
646
  forwardsForEach,