@typed/fx 0.0.6 → 0.0.8
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/.eslintcache +1 -1
- package/cjs/Env/Env.d.ts +9 -1
- package/cjs/Env/Env.d.ts.map +1 -1
- package/cjs/Env/Env.js +32 -5
- package/cjs/Env/Env.js.map +1 -1
- package/cjs/FiberContext/FiberContext.js +1 -1
- package/cjs/FiberContext/FiberContext.js.map +1 -1
- package/cjs/FiberRef/builtins.d.ts +4 -1
- package/cjs/FiberRef/builtins.d.ts.map +1 -1
- package/cjs/FiberRef/builtins.js +40 -13
- package/cjs/FiberRef/builtins.js.map +1 -1
- package/cjs/FiberRuntime/FiberRuntime.js +1 -1
- package/cjs/FiberRuntime/FiberRuntime.js.map +1 -1
- package/cjs/Fx/Fx.d.ts +1 -1
- package/cjs/Fx/Fx.d.ts.map +1 -1
- package/cjs/Fx/Fx.js +1 -2
- package/cjs/Fx/Fx.js.map +1 -1
- package/cjs/Stream/Stream.d.ts +0 -4
- package/cjs/Stream/Stream.d.ts.map +1 -1
- package/cjs/Stream/Stream.js.map +1 -1
- package/cjs/Stream/bimap.d.ts +29 -1
- package/cjs/Stream/bimap.d.ts.map +1 -1
- package/cjs/Stream/bimap.js +98 -3
- package/cjs/Stream/bimap.js.map +1 -1
- package/cjs/Stream/delay.d.ts +4 -0
- package/cjs/Stream/delay.d.ts.map +1 -0
- package/cjs/Stream/delay.js +30 -0
- package/cjs/Stream/delay.js.map +1 -0
- package/cjs/Stream/flatMap.d.ts.map +1 -1
- package/cjs/Stream/flatMap.js +10 -22
- package/cjs/Stream/flatMap.js.map +1 -1
- package/cjs/Stream/flatMapConcurrently.d.ts +1 -0
- package/cjs/Stream/flatMapConcurrently.d.ts.map +1 -1
- package/cjs/Stream/flatMapConcurrently.js +6 -1
- package/cjs/Stream/flatMapConcurrently.js.map +1 -1
- package/cjs/Stream/foldMap.d.ts +11 -0
- package/cjs/Stream/foldMap.d.ts.map +1 -0
- package/cjs/Stream/foldMap.js +67 -0
- package/cjs/Stream/foldMap.js.map +1 -0
- package/cjs/Stream/fromArray.d.ts +2 -0
- package/cjs/Stream/fromArray.d.ts.map +1 -0
- package/cjs/Stream/fromArray.js +12 -0
- package/cjs/Stream/fromArray.js.map +1 -0
- package/cjs/Stream/fromFx.d.ts +9 -0
- package/cjs/Stream/fromFx.d.ts.map +1 -1
- package/cjs/Stream/fromFx.js +14 -3
- package/cjs/Stream/fromFx.js.map +1 -1
- package/cjs/Stream/hkt.d.ts +24 -1
- package/cjs/Stream/hkt.d.ts.map +1 -1
- package/cjs/Stream/hkt.js +43 -5
- package/cjs/Stream/hkt.js.map +1 -1
- package/cjs/Stream/hold.d.ts.map +1 -1
- package/cjs/Stream/hold.js +2 -2
- package/cjs/Stream/hold.js.map +1 -1
- package/cjs/Stream/index.d.ts +6 -1
- package/cjs/Stream/index.d.ts.map +1 -1
- package/cjs/Stream/index.js +6 -1
- package/cjs/Stream/index.js.map +1 -1
- package/cjs/Stream/orElse.d.ts +1 -1
- package/cjs/Stream/orElse.d.ts.map +1 -1
- package/cjs/Stream/orElse.js +7 -20
- package/cjs/Stream/orElse.js.map +1 -1
- package/cjs/Stream/provide.d.ts +8 -0
- package/cjs/Stream/provide.d.ts.map +1 -0
- package/cjs/Stream/provide.js +42 -0
- package/cjs/Stream/provide.js.map +1 -0
- package/cjs/Stream/run.d.ts +2 -2
- package/cjs/Stream/run.d.ts.map +1 -1
- package/cjs/Stream/run.js +1 -1
- package/cjs/Stream/run.js.map +1 -1
- package/cjs/Stream/setFiberRefLocally.d.ts.map +1 -1
- package/cjs/Stream/setFiberRefLocally.js +6 -4
- package/cjs/Stream/setFiberRefLocally.js.map +1 -1
- package/cjs/Stream/skipRepeats.d.ts +5 -0
- package/cjs/Stream/skipRepeats.d.ts.map +1 -0
- package/cjs/Stream/skipRepeats.js +36 -0
- package/cjs/Stream/skipRepeats.js.map +1 -0
- package/cjs/Stream/switchMap.d.ts.map +1 -1
- package/cjs/Stream/switchMap.js +9 -21
- package/cjs/Stream/switchMap.js.map +1 -1
- package/cjs/Supervisor/index.d.ts +2 -0
- package/cjs/Supervisor/index.d.ts.map +1 -1
- package/cjs/Supervisor/index.js +2 -0
- package/cjs/Supervisor/index.js.map +1 -1
- package/cjs/Supervisor/inheritFiberRefs.d.ts +2 -0
- package/cjs/Supervisor/inheritFiberRefs.d.ts.map +1 -0
- package/cjs/Supervisor/inheritFiberRefs.js +17 -0
- package/cjs/Supervisor/inheritFiberRefs.js.map +1 -0
- package/esm/Env/Env.d.ts +9 -1
- package/esm/Env/Env.d.ts.map +1 -1
- package/esm/Env/Env.js +8 -5
- package/esm/Env/Env.js.map +1 -1
- package/esm/FiberContext/FiberContext.js +1 -1
- package/esm/FiberContext/FiberContext.js.map +1 -1
- package/esm/FiberRef/builtins.d.ts +4 -1
- package/esm/FiberRef/builtins.d.ts.map +1 -1
- package/esm/FiberRef/builtins.js +36 -12
- package/esm/FiberRef/builtins.js.map +1 -1
- package/esm/FiberRuntime/FiberRuntime.js +1 -1
- package/esm/FiberRuntime/FiberRuntime.js.map +1 -1
- package/esm/Fx/Fx.d.ts +1 -1
- package/esm/Fx/Fx.d.ts.map +1 -1
- package/esm/Fx/Fx.js +1 -2
- package/esm/Fx/Fx.js.map +1 -1
- package/esm/Stream/Stream.d.ts +0 -4
- package/esm/Stream/Stream.d.ts.map +1 -1
- package/esm/Stream/Stream.js.map +1 -1
- package/esm/Stream/bimap.d.ts +29 -1
- package/esm/Stream/bimap.d.ts.map +1 -1
- package/esm/Stream/bimap.js +91 -2
- package/esm/Stream/bimap.js.map +1 -1
- package/esm/Stream/delay.d.ts +4 -0
- package/esm/Stream/delay.d.ts.map +1 -0
- package/esm/Stream/delay.js +26 -0
- package/esm/Stream/delay.js.map +1 -0
- package/esm/Stream/flatMap.d.ts.map +1 -1
- package/esm/Stream/flatMap.js +9 -21
- package/esm/Stream/flatMap.js.map +1 -1
- package/esm/Stream/flatMapConcurrently.d.ts +1 -0
- package/esm/Stream/flatMapConcurrently.d.ts.map +1 -1
- package/esm/Stream/flatMapConcurrently.js +4 -0
- package/esm/Stream/flatMapConcurrently.js.map +1 -1
- package/esm/Stream/foldMap.d.ts +11 -0
- package/esm/Stream/foldMap.d.ts.map +1 -0
- package/esm/Stream/foldMap.js +38 -0
- package/esm/Stream/foldMap.js.map +1 -0
- package/esm/Stream/fromArray.d.ts +2 -0
- package/esm/Stream/fromArray.d.ts.map +1 -0
- package/esm/Stream/fromArray.js +8 -0
- package/esm/Stream/fromArray.js.map +1 -0
- package/esm/Stream/fromFx.d.ts +9 -0
- package/esm/Stream/fromFx.d.ts.map +1 -1
- package/esm/Stream/fromFx.js +12 -2
- package/esm/Stream/fromFx.js.map +1 -1
- package/esm/Stream/hkt.d.ts +24 -1
- package/esm/Stream/hkt.d.ts.map +1 -1
- package/esm/Stream/hkt.js +41 -4
- package/esm/Stream/hkt.js.map +1 -1
- package/esm/Stream/hold.d.ts.map +1 -1
- package/esm/Stream/hold.js +2 -2
- package/esm/Stream/hold.js.map +1 -1
- package/esm/Stream/index.d.ts +6 -1
- package/esm/Stream/index.d.ts.map +1 -1
- package/esm/Stream/index.js +6 -1
- package/esm/Stream/index.js.map +1 -1
- package/esm/Stream/orElse.d.ts +1 -1
- package/esm/Stream/orElse.d.ts.map +1 -1
- package/esm/Stream/orElse.js +8 -21
- package/esm/Stream/orElse.js.map +1 -1
- package/esm/Stream/provide.d.ts +8 -0
- package/esm/Stream/provide.d.ts.map +1 -0
- package/esm/Stream/provide.js +13 -0
- package/esm/Stream/provide.js.map +1 -0
- package/esm/Stream/run.d.ts +2 -2
- package/esm/Stream/run.d.ts.map +1 -1
- package/esm/Stream/run.js +2 -2
- package/esm/Stream/run.js.map +1 -1
- package/esm/Stream/setFiberRefLocally.d.ts.map +1 -1
- package/esm/Stream/setFiberRefLocally.js +6 -4
- package/esm/Stream/setFiberRefLocally.js.map +1 -1
- package/esm/Stream/skipRepeats.d.ts +5 -0
- package/esm/Stream/skipRepeats.d.ts.map +1 -0
- package/esm/Stream/skipRepeats.js +31 -0
- package/esm/Stream/skipRepeats.js.map +1 -0
- package/esm/Stream/switchMap.d.ts.map +1 -1
- package/esm/Stream/switchMap.js +8 -20
- package/esm/Stream/switchMap.js.map +1 -1
- package/esm/Supervisor/index.d.ts +2 -0
- package/esm/Supervisor/index.d.ts.map +1 -1
- package/esm/Supervisor/index.js +2 -0
- package/esm/Supervisor/index.js.map +1 -1
- package/esm/Supervisor/inheritFiberRefs.d.ts +2 -0
- package/esm/Supervisor/inheritFiberRefs.d.ts.map +1 -0
- package/esm/Supervisor/inheritFiberRefs.js +14 -0
- package/esm/Supervisor/inheritFiberRefs.js.map +1 -0
- package/package.json +68 -22
- package/perf/Stream-filter-map-reduce.test.ts +103 -0
- package/src/Env/Env.ts +15 -5
- package/src/FiberContext/FiberContext.ts +1 -1
- package/src/FiberRef/builtins.ts +45 -2
- package/src/FiberRuntime/FiberRuntime.ts +3 -3
- package/src/Fx/Fx.ts +1 -1
- package/src/Stream/Stream.ts +0 -4
- package/src/Stream/bimap.ts +148 -3
- package/src/Stream/delay.ts +43 -0
- package/src/Stream/flatMap.ts +3 -16
- package/src/Stream/flatMapConcurrently.ts +4 -0
- package/src/Stream/foldMap.ts +88 -0
- package/src/Stream/fromArray.ts +8 -0
- package/src/Stream/fromFx.ts +16 -7
- package/src/Stream/hkt.ts +59 -10
- package/src/Stream/hold.ts +2 -2
- package/src/Stream/index.ts +6 -1
- package/src/Stream/orElse.ts +7 -23
- package/src/Stream/provide.test.ts +78 -0
- package/src/Stream/provide.ts +34 -0
- package/src/Stream/run.ts +6 -3
- package/src/Stream/setFiberRefLocally.ts +10 -16
- package/src/Stream/skipRepeats.ts +41 -0
- package/src/Stream/switchMap.ts +3 -17
- package/src/Supervisor/index.ts +2 -0
- package/src/Supervisor/inheritFiberRefs.ts +17 -0
- package/cjs/Stream/map.d.ts +0 -15
- package/cjs/Stream/map.d.ts.map +0 -1
- package/cjs/Stream/map.js +0 -33
- package/cjs/Stream/map.js.map +0 -1
- package/cjs/test.d.ts +0 -1
- package/cjs/test.d.ts.map +0 -1
- package/cjs/test.js +0 -2
- package/cjs/test.js.map +0 -1
- package/esm/Stream/map.d.ts +0 -15
- package/esm/Stream/map.d.ts.map +0 -1
- package/esm/Stream/map.js +0 -28
- package/esm/Stream/map.js.map +0 -1
- package/esm/test.d.ts +0 -1
- package/esm/test.d.ts.map +0 -1
- package/esm/test.js +0 -2
- package/esm/test.js.map +0 -1
- package/src/Stream/map.ts +0 -49
- package/src/test.ts +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { isRight } from 'hkt-ts/Either';
|
|
2
|
+
import { isJust } from 'hkt-ts/Maybe';
|
|
3
|
+
import { None } from './Supervisor.js';
|
|
4
|
+
import { join } from "../FiberRefs/FiberRefs.js";
|
|
5
|
+
export const inheritFiberRefs = None.extend({
|
|
6
|
+
onEnd: () => (fiber, exit) => {
|
|
7
|
+
const parentContext = fiber.context.parent;
|
|
8
|
+
// Merge FiberRefs upon successful completion
|
|
9
|
+
if (isRight(exit) && isJust(parentContext)) {
|
|
10
|
+
join(parentContext.value.fiberRefs, fiber.context.fiberRefs);
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=inheritFiberRefs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inheritFiberRefs.js","sourceRoot":"","sources":["../../src/Supervisor/inheritFiberRefs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAE,IAAI,EAAE,kCAAgC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1C,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA;QAE1C,6CAA6C;QAC7C,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE;YAC1C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;SAC7D;IACH,CAAC;CACF,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typed/fx",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8",
|
|
4
4
|
"description": "High-performance Asynchronous Effects",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "esm/index.js",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"preversion": "npm test",
|
|
26
26
|
"postversion": "npm run build && npm publish --access=public",
|
|
27
27
|
"prepare": "ts-patch install -s",
|
|
28
|
-
"
|
|
28
|
+
"perf:stream:filter-map-reduce": "node --loader @esbuild-kit/esm-loader perf/Stream-filter-map-reduce.test.ts"
|
|
29
29
|
},
|
|
30
30
|
"keywords": [
|
|
31
31
|
"Fx",
|
|
@@ -51,12 +51,17 @@
|
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@esbuild-kit/esm-loader": "^2.4.2",
|
|
54
|
+
"@most/core": "^1.6.1",
|
|
55
|
+
"@most/scheduler": "^1.3.0",
|
|
56
|
+
"@most/types": "^1.1.0",
|
|
57
|
+
"@types/benchmark": "^2.1.2",
|
|
54
58
|
"@types/mocha": "^9.1.1",
|
|
55
59
|
"@types/node": "^17.0.45",
|
|
56
60
|
"@types/prettier": "^2.7.0",
|
|
57
61
|
"@typescript-eslint/eslint-plugin": "^5.34.0",
|
|
58
62
|
"@typescript-eslint/parser": "^5.34.0",
|
|
59
63
|
"@zoltu/typescript-transformer-append-js-extension": "^1.0.1",
|
|
64
|
+
"benchmark": "^2.1.4",
|
|
60
65
|
"c8": "^7.12.0",
|
|
61
66
|
"concurrently": "^7.3.0",
|
|
62
67
|
"eslint": "^8.22.0",
|
|
@@ -71,6 +76,7 @@
|
|
|
71
76
|
"lint-staged": "^12.5.0",
|
|
72
77
|
"mocha": "^10.0.0",
|
|
73
78
|
"prettier": "^2.7.1",
|
|
79
|
+
"rxjs": "^7.5.6",
|
|
74
80
|
"source-map-support": "^0.5.21",
|
|
75
81
|
"ts-morph": "^15.1.0",
|
|
76
82
|
"ts-node": "^10.9.1",
|
|
@@ -1196,6 +1202,16 @@
|
|
|
1196
1202
|
"types": "./esm/Stream/continueWith.d.ts"
|
|
1197
1203
|
}
|
|
1198
1204
|
},
|
|
1205
|
+
"./Stream/delay": {
|
|
1206
|
+
"require": {
|
|
1207
|
+
"default": "./cjs/Stream/delay.js",
|
|
1208
|
+
"types": "./cjs/Stream/delay.d.ts"
|
|
1209
|
+
},
|
|
1210
|
+
"import": {
|
|
1211
|
+
"default": "./esm/Stream/delay.js",
|
|
1212
|
+
"types": "./esm/Stream/delay.d.ts"
|
|
1213
|
+
}
|
|
1214
|
+
},
|
|
1199
1215
|
"./Stream/drain": {
|
|
1200
1216
|
"require": {
|
|
1201
1217
|
"default": "./cjs/Stream/drain.js",
|
|
@@ -1246,6 +1262,26 @@
|
|
|
1246
1262
|
"types": "./esm/Stream/flatMapFx.d.ts"
|
|
1247
1263
|
}
|
|
1248
1264
|
},
|
|
1265
|
+
"./Stream/foldMap": {
|
|
1266
|
+
"require": {
|
|
1267
|
+
"default": "./cjs/Stream/foldMap.js",
|
|
1268
|
+
"types": "./cjs/Stream/foldMap.d.ts"
|
|
1269
|
+
},
|
|
1270
|
+
"import": {
|
|
1271
|
+
"default": "./esm/Stream/foldMap.js",
|
|
1272
|
+
"types": "./esm/Stream/foldMap.d.ts"
|
|
1273
|
+
}
|
|
1274
|
+
},
|
|
1275
|
+
"./Stream/fromArray": {
|
|
1276
|
+
"require": {
|
|
1277
|
+
"default": "./cjs/Stream/fromArray.js",
|
|
1278
|
+
"types": "./cjs/Stream/fromArray.d.ts"
|
|
1279
|
+
},
|
|
1280
|
+
"import": {
|
|
1281
|
+
"default": "./esm/Stream/fromArray.js",
|
|
1282
|
+
"types": "./esm/Stream/fromArray.d.ts"
|
|
1283
|
+
}
|
|
1284
|
+
},
|
|
1249
1285
|
"./Stream/fromCallback": {
|
|
1250
1286
|
"require": {
|
|
1251
1287
|
"default": "./cjs/Stream/fromCallback.js",
|
|
@@ -1296,16 +1332,6 @@
|
|
|
1296
1332
|
"types": "./esm/Stream/lazy.d.ts"
|
|
1297
1333
|
}
|
|
1298
1334
|
},
|
|
1299
|
-
"./Stream/map": {
|
|
1300
|
-
"require": {
|
|
1301
|
-
"default": "./cjs/Stream/map.js",
|
|
1302
|
-
"types": "./cjs/Stream/map.d.ts"
|
|
1303
|
-
},
|
|
1304
|
-
"import": {
|
|
1305
|
-
"default": "./esm/Stream/map.js",
|
|
1306
|
-
"types": "./esm/Stream/map.d.ts"
|
|
1307
|
-
}
|
|
1308
|
-
},
|
|
1309
1335
|
"./Stream/merge": {
|
|
1310
1336
|
"require": {
|
|
1311
1337
|
"default": "./cjs/Stream/merge.js",
|
|
@@ -1346,6 +1372,16 @@
|
|
|
1346
1372
|
"types": "./esm/Stream/periodic.d.ts"
|
|
1347
1373
|
}
|
|
1348
1374
|
},
|
|
1375
|
+
"./Stream/provide": {
|
|
1376
|
+
"require": {
|
|
1377
|
+
"default": "./cjs/Stream/provide.js",
|
|
1378
|
+
"types": "./cjs/Stream/provide.d.ts"
|
|
1379
|
+
},
|
|
1380
|
+
"import": {
|
|
1381
|
+
"default": "./esm/Stream/provide.js",
|
|
1382
|
+
"types": "./esm/Stream/provide.d.ts"
|
|
1383
|
+
}
|
|
1384
|
+
},
|
|
1349
1385
|
"./Stream/run": {
|
|
1350
1386
|
"require": {
|
|
1351
1387
|
"default": "./cjs/Stream/run.js",
|
|
@@ -1386,6 +1422,16 @@
|
|
|
1386
1422
|
"types": "./esm/Stream/setFiberRefLocally.d.ts"
|
|
1387
1423
|
}
|
|
1388
1424
|
},
|
|
1425
|
+
"./Stream/skipRepeats": {
|
|
1426
|
+
"require": {
|
|
1427
|
+
"default": "./cjs/Stream/skipRepeats.js",
|
|
1428
|
+
"types": "./cjs/Stream/skipRepeats.d.ts"
|
|
1429
|
+
},
|
|
1430
|
+
"import": {
|
|
1431
|
+
"default": "./esm/Stream/skipRepeats.js",
|
|
1432
|
+
"types": "./esm/Stream/skipRepeats.d.ts"
|
|
1433
|
+
}
|
|
1434
|
+
},
|
|
1389
1435
|
"./Stream/switchMap": {
|
|
1390
1436
|
"require": {
|
|
1391
1437
|
"default": "./cjs/Stream/switchMap.js",
|
|
@@ -1426,6 +1472,16 @@
|
|
|
1426
1472
|
"types": "./esm/Supervisor/Supervisor.d.ts"
|
|
1427
1473
|
}
|
|
1428
1474
|
},
|
|
1475
|
+
"./Supervisor/inheritFiberRefs": {
|
|
1476
|
+
"require": {
|
|
1477
|
+
"default": "./cjs/Supervisor/inheritFiberRefs.js",
|
|
1478
|
+
"types": "./cjs/Supervisor/inheritFiberRefs.d.ts"
|
|
1479
|
+
},
|
|
1480
|
+
"import": {
|
|
1481
|
+
"default": "./esm/Supervisor/inheritFiberRefs.js",
|
|
1482
|
+
"types": "./esm/Supervisor/inheritFiberRefs.d.ts"
|
|
1483
|
+
}
|
|
1484
|
+
},
|
|
1429
1485
|
"./Supervisor/maxFailures": {
|
|
1430
1486
|
"require": {
|
|
1431
1487
|
"default": "./cjs/Supervisor/maxFailures.js",
|
|
@@ -1585,16 +1641,6 @@
|
|
|
1585
1641
|
"default": "./esm/_internal/suite.js",
|
|
1586
1642
|
"types": "./esm/_internal/suite.d.ts"
|
|
1587
1643
|
}
|
|
1588
|
-
},
|
|
1589
|
-
"./test": {
|
|
1590
|
-
"require": {
|
|
1591
|
-
"default": "./cjs/test.js",
|
|
1592
|
-
"types": "./cjs/test.d.ts"
|
|
1593
|
-
},
|
|
1594
|
-
"import": {
|
|
1595
|
-
"default": "./esm/test.js",
|
|
1596
|
-
"types": "./esm/test.d.ts"
|
|
1597
|
-
}
|
|
1598
1644
|
}
|
|
1599
1645
|
}
|
|
1600
1646
|
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import * as M from '@most/core'
|
|
2
|
+
import * as MS from '@most/scheduler'
|
|
3
|
+
import benchmark from 'benchmark'
|
|
4
|
+
import { pipe } from 'hkt-ts'
|
|
5
|
+
import * as rxjs from 'rxjs'
|
|
6
|
+
|
|
7
|
+
import * as Stream from './index.js'
|
|
8
|
+
|
|
9
|
+
import * as Fx from '@/Fx/index.js'
|
|
10
|
+
import { RootScheduler } from '@/Scheduler/RootScheduler.js'
|
|
11
|
+
import { Scheduler } from '@/Scheduler/Scheduler.js'
|
|
12
|
+
|
|
13
|
+
const filterEvens = (x: number) => x % 2 === 0
|
|
14
|
+
const addOne = (x: number) => x + 1
|
|
15
|
+
const sum = (x: number, y: number) => x + y
|
|
16
|
+
|
|
17
|
+
const iterations = 1000000
|
|
18
|
+
const array = Array.from({ length: iterations }, (_, i) => i)
|
|
19
|
+
|
|
20
|
+
const fxStream = pipe(
|
|
21
|
+
Stream.fromArray(array),
|
|
22
|
+
Stream.filter(filterEvens),
|
|
23
|
+
Stream.map(addOne),
|
|
24
|
+
Stream.reduce(sum, 0),
|
|
25
|
+
Fx.provideService(Scheduler, RootScheduler()),
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
const mostStream = pipe(
|
|
29
|
+
M.periodic(0),
|
|
30
|
+
M.withItems(array),
|
|
31
|
+
M.filter(filterEvens),
|
|
32
|
+
M.map(addOne),
|
|
33
|
+
M.scan(sum, 0),
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
const mostScheduler = MS.newDefaultScheduler()
|
|
37
|
+
|
|
38
|
+
const rxjsStream = pipe(
|
|
39
|
+
rxjs.from(array),
|
|
40
|
+
rxjs.filter(filterEvens),
|
|
41
|
+
rxjs.map(addOne),
|
|
42
|
+
rxjs.scan(sum, 0),
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
// eslint-disable-next-line import/no-named-as-default-member
|
|
46
|
+
const suite = new benchmark.Suite('filter -> map -> reduce ' + iterations + ' integers')
|
|
47
|
+
|
|
48
|
+
suite
|
|
49
|
+
.add('@typed/fx', function (deferred: benchmark.Deferred) {
|
|
50
|
+
Fx.runMain(fxStream).then(() => deferred.resolve())
|
|
51
|
+
})
|
|
52
|
+
.add('@most/core', function (deferred: benchmark.Deferred) {
|
|
53
|
+
M.runEffects(mostStream, mostScheduler).then(() => deferred.resolve())
|
|
54
|
+
})
|
|
55
|
+
.add('rxjs @7', function (deferred: benchmark.Deferred) {
|
|
56
|
+
rxjsStream.subscribe({
|
|
57
|
+
complete: () => deferred.resolve(),
|
|
58
|
+
})
|
|
59
|
+
})
|
|
60
|
+
.on('start', logStart)
|
|
61
|
+
.on('cycle', logResults)
|
|
62
|
+
.on('complete', logComplete)
|
|
63
|
+
.run()
|
|
64
|
+
|
|
65
|
+
function logResults(e: any) {
|
|
66
|
+
const t = e.target
|
|
67
|
+
|
|
68
|
+
if (t.failure) {
|
|
69
|
+
console.error(padl(10, t.name) + 'FAILED: ' + e.target.failure)
|
|
70
|
+
} else {
|
|
71
|
+
const result =
|
|
72
|
+
padl(18, t.name) +
|
|
73
|
+
padr(13, t.hz.toFixed(2) + ' op/s') +
|
|
74
|
+
' \xb1' +
|
|
75
|
+
padr(7, t.stats.rme.toFixed(2) + '%') +
|
|
76
|
+
padr(15, ' (' + t.stats.sample.length + ' samples)')
|
|
77
|
+
|
|
78
|
+
console.log(result)
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function logStart(this: any) {
|
|
83
|
+
console.log(this.name)
|
|
84
|
+
console.log('-------------------------------------------------------')
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function logComplete() {
|
|
88
|
+
console.log('-------------------------------------------------------')
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function padl(n: number, s: string) {
|
|
92
|
+
while (s.length < n) {
|
|
93
|
+
s += ' '
|
|
94
|
+
}
|
|
95
|
+
return s
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function padr(n: number, s: string) {
|
|
99
|
+
while (s.length < n) {
|
|
100
|
+
s = ' ' + s
|
|
101
|
+
}
|
|
102
|
+
return s
|
|
103
|
+
}
|
package/src/Env/Env.ts
CHANGED
|
@@ -1,14 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { makeEnvFromFiberRefs } from '@/FiberRef/builtins.js'
|
|
2
2
|
import * as FiberRefs from '@/FiberRefs/FiberRefs.js'
|
|
3
3
|
import { Of } from '@/Fx/Fx.js'
|
|
4
4
|
import { Service } from '@/Service/Service.js'
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* Env is an abstraction over FiberRefs which keeps track of services and joining them back together.
|
|
8
|
+
*/
|
|
6
9
|
export interface Env<R> {
|
|
10
|
+
readonly fiberRefs: FiberRefs.FiberRefs
|
|
7
11
|
readonly get: <S extends R>(service: Service<S>) => Of<S>
|
|
12
|
+
readonly addService: <S, I extends S>(service: Service<S>, impl: I) => Env<R | S>
|
|
13
|
+
readonly join: <S>(other: Env<S>) => Env<R | S>
|
|
8
14
|
}
|
|
9
15
|
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
export const Empty = makeEnvFromFiberRefs<never>(FiberRefs.FiberRefs())
|
|
17
|
+
|
|
18
|
+
export function Env<S, I extends S>(service: Service<S>, impl: I): Env<S> {
|
|
19
|
+
return Empty.addService(service, impl)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function fromFiberRefs<R>(fiberRefs: FiberRefs.FiberRefs): Env<R> {
|
|
23
|
+
return makeEnvFromFiberRefs(fiberRefs)
|
|
14
24
|
}
|
|
@@ -61,7 +61,7 @@ export function fork<Id extends FiberId.FiberId = FiberId.Live, Id2 extends Fibe
|
|
|
61
61
|
platform: overrides?.platform ?? context.platform.fork(),
|
|
62
62
|
fiberRefs: overrides?.fiberRefs ?? context.fiberRefs.fork(),
|
|
63
63
|
scope: overrides?.scope ?? context.scope.fork(),
|
|
64
|
-
supervisor: overrides?.supervisor ??
|
|
64
|
+
supervisor: overrides?.supervisor ?? None,
|
|
65
65
|
logger: overrides?.logger ?? context.logger,
|
|
66
66
|
parent: overrides?.parent ?? Just(context),
|
|
67
67
|
})
|
package/src/FiberRef/builtins.ts
CHANGED
|
@@ -19,8 +19,7 @@ import { Trace } from '@/Trace/Trace.js'
|
|
|
19
19
|
export const CurrentEnv = make(
|
|
20
20
|
pipe(
|
|
21
21
|
Fx.getFiberContext,
|
|
22
|
-
|
|
23
|
-
Fx.map((c): Env<any> => ({ get: getServiceFromFiberRefs(c.fiberRefs.fork()) })),
|
|
22
|
+
Fx.map((c) => makeEnvFromFiberRefs(c.fiberRefs)),
|
|
24
23
|
),
|
|
25
24
|
{
|
|
26
25
|
fork: constant(Nothing), // Always create a new Env for each Fiber.
|
|
@@ -28,6 +27,18 @@ export const CurrentEnv = make(
|
|
|
28
27
|
},
|
|
29
28
|
)
|
|
30
29
|
|
|
30
|
+
export function makeEnvFromFiberRefs<R>(fiberRefs: FiberRefs.FiberRefs): Env<R> {
|
|
31
|
+
// Always use a snapshot of the FiberRefs to avoid mutability problems.
|
|
32
|
+
const forked = FiberRefs.fork(fiberRefs)
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
fiberRefs: forked,
|
|
36
|
+
get: getServiceFromFiberRefs(forked),
|
|
37
|
+
addService: addServiceFromFiberRefs(forked),
|
|
38
|
+
join: joinEnvFromFiberRefs(forked),
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
31
42
|
export const CurrentConcurrencyLevel = make(
|
|
32
43
|
Fx.fromLazy(() => new Semaphore(NonNegativeInteger(Infinity))),
|
|
33
44
|
{
|
|
@@ -121,3 +132,35 @@ const getLayerFromFiberRefs = <S>(id: Service<S>, fiberRefs: FiberRefs.FiberRefs
|
|
|
121
132
|
|
|
122
133
|
return join(fiber)
|
|
123
134
|
})
|
|
135
|
+
|
|
136
|
+
export function addServiceFromFiberRefs<R>(fiberRefs: FiberRefs.FiberRefs): Env<R>['addService'] {
|
|
137
|
+
return (id, impl) => {
|
|
138
|
+
const forked = fiberRefs.fork()
|
|
139
|
+
|
|
140
|
+
// AddService
|
|
141
|
+
FiberRefs.setFiberRef(
|
|
142
|
+
Services,
|
|
143
|
+
pipe(
|
|
144
|
+
forked,
|
|
145
|
+
FiberRefs.maybeGetFiberRefValue(Services),
|
|
146
|
+
Maybe.match(
|
|
147
|
+
() => ImmutableMap<Service<any>, any>().set(id, impl),
|
|
148
|
+
(s) => s.set(id, impl),
|
|
149
|
+
),
|
|
150
|
+
),
|
|
151
|
+
)(forked)
|
|
152
|
+
|
|
153
|
+
return makeEnvFromFiberRefs(forked)
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export function joinEnvFromFiberRefs<R>(fiberRefs: FiberRefs.FiberRefs): Env<R>['join'] {
|
|
158
|
+
return (other) => {
|
|
159
|
+
const forked = other.fiberRefs.fork()
|
|
160
|
+
|
|
161
|
+
// Reverse the order to ensure incoming values take precedence for Services + Layers
|
|
162
|
+
FiberRefs.join(forked, fiberRefs)
|
|
163
|
+
|
|
164
|
+
return makeEnvFromFiberRefs(forked)
|
|
165
|
+
}
|
|
166
|
+
}
|
|
@@ -456,12 +456,12 @@ export class FiberRuntime<F extends Fx.AnyFx>
|
|
|
456
456
|
protected processProvideService(
|
|
457
457
|
instr: Extract<AnyInstruction, { readonly tag: 'ProvideService' }>,
|
|
458
458
|
) {
|
|
459
|
-
this.withFiberRef(Builtin.
|
|
459
|
+
this.withFiberRef(Builtin.CurrentEnv, (env) =>
|
|
460
460
|
pipe(
|
|
461
461
|
instr.fx,
|
|
462
462
|
Fx.fiberRefLocally(
|
|
463
|
-
Builtin.
|
|
464
|
-
|
|
463
|
+
Builtin.CurrentEnv,
|
|
464
|
+
env.value.addService(instr.service, instr.implementation),
|
|
465
465
|
),
|
|
466
466
|
),
|
|
467
467
|
)
|
package/src/Fx/Fx.ts
CHANGED
package/src/Stream/Stream.ts
CHANGED
|
@@ -10,12 +10,10 @@ import { Sink } from '@/Sink/Sink.js'
|
|
|
10
10
|
* - Loop
|
|
11
11
|
* - zipItems
|
|
12
12
|
* - withItems
|
|
13
|
-
* - concatMap
|
|
14
13
|
* - combine/combineArray
|
|
15
14
|
* - zip/zipArray
|
|
16
15
|
* - sample
|
|
17
16
|
* - snapshot
|
|
18
|
-
* - skipRepeats
|
|
19
17
|
* - slice/take/skip
|
|
20
18
|
* - takeWhile/skipWhile
|
|
21
19
|
* - takeUntil/skipUntil
|
|
@@ -23,10 +21,8 @@ import { Sink } from '@/Sink/Sink.js'
|
|
|
23
21
|
* - since
|
|
24
22
|
* - during
|
|
25
23
|
* - until
|
|
26
|
-
* - delay
|
|
27
24
|
* - throttle
|
|
28
25
|
* - debounce
|
|
29
|
-
* - reduce
|
|
30
26
|
* - Fusion/Commutation
|
|
31
27
|
* - Unique Identification for streams to add to tracing
|
|
32
28
|
* - How to build a dynamic stream graph?
|
package/src/Stream/bimap.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Maybe } from 'hkt-ts'
|
|
2
|
+
import { flow, pipe } from 'hkt-ts/function'
|
|
2
3
|
|
|
3
4
|
import { Stream } from './Stream.js'
|
|
4
|
-
import { MapStream } from './map.js'
|
|
5
5
|
|
|
6
6
|
import * as Cause from '@/Cause/index.js'
|
|
7
7
|
import { FiberContext } from '@/FiberContext/FiberContext.js'
|
|
8
8
|
import { Live } from '@/FiberId/FiberId.js'
|
|
9
|
+
import { unit } from '@/Fx/Fx.js'
|
|
9
10
|
import { Scheduler } from '@/Scheduler/Scheduler.js'
|
|
10
|
-
import { Sink } from '@/Sink/Sink.js'
|
|
11
|
+
import { Sink, addTrace } from '@/Sink/Sink.js'
|
|
11
12
|
|
|
12
13
|
export function bimap<A, B, C, D>(
|
|
13
14
|
f: (a: A) => B,
|
|
@@ -64,3 +65,147 @@ class BimapSink<A, B, C, D, E> implements Sink<A, C, E> {
|
|
|
64
65
|
error = flow(Cause.map(this.f), this.sink.error)
|
|
65
66
|
end = this.sink.end
|
|
66
67
|
}
|
|
68
|
+
|
|
69
|
+
export function map<A, B>(
|
|
70
|
+
f: (a: A) => B,
|
|
71
|
+
__trace?: string,
|
|
72
|
+
): <R, E>(stream: Stream<R, E, A>) => Stream<R, E, B> {
|
|
73
|
+
return (stream) => MapStream.make(stream, f, __trace)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export class MapStream<R, E, A, B> implements Stream<R, E, B> {
|
|
77
|
+
constructor(
|
|
78
|
+
readonly stream: Stream<R, E, A>,
|
|
79
|
+
readonly f: (a: A) => B,
|
|
80
|
+
readonly __trace?: string,
|
|
81
|
+
) {}
|
|
82
|
+
|
|
83
|
+
fork<E2>(sink: Sink<E, B, E2>, scheduler: Scheduler, context: FiberContext<Live>) {
|
|
84
|
+
return this.stream.fork(
|
|
85
|
+
addTrace(
|
|
86
|
+
{
|
|
87
|
+
...sink,
|
|
88
|
+
event: flow(this.f, sink.event),
|
|
89
|
+
},
|
|
90
|
+
this.__trace,
|
|
91
|
+
),
|
|
92
|
+
scheduler,
|
|
93
|
+
context,
|
|
94
|
+
)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
static make<R, E, A, B>(
|
|
98
|
+
stream: Stream<R, E, A>,
|
|
99
|
+
f: (a: A) => B,
|
|
100
|
+
__trace?: string,
|
|
101
|
+
): Stream<R, E, B> {
|
|
102
|
+
if (stream instanceof MapStream) {
|
|
103
|
+
return MapStream.make(stream.stream, flow(stream.f, f), __trace)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (stream instanceof MapLeftStream) {
|
|
107
|
+
return BimapStream.make(stream.stream, stream.f, f, __trace)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (stream instanceof FilterMapStream) {
|
|
111
|
+
return FilterMapStream.make(stream.stream, flow(stream.f, Maybe.map(f)), __trace)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return new MapStream(stream, f, __trace)
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export function mapLeft<E1, E2>(
|
|
119
|
+
f: (error: E1) => E2,
|
|
120
|
+
__trace?: string,
|
|
121
|
+
): <R, A>(stream: Stream<R, E1, A>) => Stream<R, E2, A> {
|
|
122
|
+
return (stream) => MapLeftStream.make(stream, f, __trace)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export class MapLeftStream<R, E1, A, E2> implements Stream<R, E2, A> {
|
|
126
|
+
constructor(
|
|
127
|
+
readonly stream: Stream<R, E1, A>,
|
|
128
|
+
readonly f: (error: E1) => E2,
|
|
129
|
+
readonly __trace?: string,
|
|
130
|
+
) {}
|
|
131
|
+
|
|
132
|
+
fork<E3>(sink: Sink<E2, A, E3>, scheduler: Scheduler, context: FiberContext<Live>) {
|
|
133
|
+
return this.stream.fork(
|
|
134
|
+
addTrace(
|
|
135
|
+
{
|
|
136
|
+
...sink,
|
|
137
|
+
error: flow(Cause.map(this.f), sink.error),
|
|
138
|
+
},
|
|
139
|
+
this.__trace,
|
|
140
|
+
),
|
|
141
|
+
scheduler,
|
|
142
|
+
context,
|
|
143
|
+
)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
static make<R, E1, A, E2>(
|
|
147
|
+
stream: Stream<R, E1, A>,
|
|
148
|
+
f: (e: E1) => E2,
|
|
149
|
+
__trace?: string,
|
|
150
|
+
): Stream<R, E2, A> {
|
|
151
|
+
if (stream instanceof MapLeftStream) {
|
|
152
|
+
return MapLeftStream.make(stream.stream, flow(stream.f, f), __trace)
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (stream instanceof MapStream) {
|
|
156
|
+
return BimapStream.make(stream.stream, f, stream.f, __trace)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return new MapLeftStream(stream, f, __trace)
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export function filterMap<A, B>(
|
|
164
|
+
f: (a: A) => Maybe.Maybe<B>,
|
|
165
|
+
__trace?: string,
|
|
166
|
+
): <R, E>(stream: Stream<R, E, A>) => Stream<R, E, B> {
|
|
167
|
+
return (stream) => FilterMapStream.make(stream, f, __trace)
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export class FilterMapStream<R, E, A, B> implements Stream<R, E, B> {
|
|
171
|
+
constructor(
|
|
172
|
+
readonly stream: Stream<R, E, A>,
|
|
173
|
+
readonly f: (a: A) => Maybe.Maybe<B>,
|
|
174
|
+
readonly __trace?: string,
|
|
175
|
+
) {}
|
|
176
|
+
|
|
177
|
+
fork<E2>(sink: Sink<E, B, E2>, scheduler: Scheduler, context: FiberContext<Live>) {
|
|
178
|
+
return this.stream.fork(
|
|
179
|
+
addTrace(
|
|
180
|
+
{
|
|
181
|
+
...sink,
|
|
182
|
+
event: (a) =>
|
|
183
|
+
pipe(
|
|
184
|
+
a,
|
|
185
|
+
this.f,
|
|
186
|
+
Maybe.match(() => unit, sink.event),
|
|
187
|
+
),
|
|
188
|
+
},
|
|
189
|
+
this.__trace,
|
|
190
|
+
),
|
|
191
|
+
scheduler,
|
|
192
|
+
context,
|
|
193
|
+
)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
static make<R, E, A, B>(
|
|
197
|
+
stream: Stream<R, E, A>,
|
|
198
|
+
f: (a: A) => Maybe.Maybe<B>,
|
|
199
|
+
__trace?: string,
|
|
200
|
+
): Stream<R, E, B> {
|
|
201
|
+
if (stream instanceof MapStream) {
|
|
202
|
+
return FilterMapStream.make(stream.stream, flow(stream.f, f), __trace)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
if (stream instanceof FilterMapStream) {
|
|
206
|
+
return FilterMapStream.make(stream.stream, flow(stream.f, Maybe.flatMap(f)), __trace)
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return new FilterMapStream(stream, f, __trace)
|
|
210
|
+
}
|
|
211
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Stream } from './Stream.js'
|
|
2
|
+
|
|
3
|
+
import { Env } from '@/Env/Env.js'
|
|
4
|
+
import { FiberContext } from '@/FiberContext/FiberContext.js'
|
|
5
|
+
import { FiberId } from '@/FiberId/FiberId.js'
|
|
6
|
+
import { access, fromLazy } from '@/Fx/index.js'
|
|
7
|
+
import { delayed } from '@/Schedule/Schedule.js'
|
|
8
|
+
import { Scheduler } from '@/Scheduler/Scheduler.js'
|
|
9
|
+
import { Sink } from '@/Sink/Sink.js'
|
|
10
|
+
import { Delay } from '@/Time/index.js'
|
|
11
|
+
|
|
12
|
+
export function delay(delay: Delay) {
|
|
13
|
+
return <R, E, A>(stream: Stream<R, E, A>): Stream<R, E, A> =>
|
|
14
|
+
Stream((sink, scheduler, context) =>
|
|
15
|
+
access((env: Env<R>) =>
|
|
16
|
+
stream.fork(new DelaySink(sink, scheduler, context, env, delay), scheduler, context),
|
|
17
|
+
),
|
|
18
|
+
)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
class DelaySink<E, A, E2> implements Sink<E, A, E2> {
|
|
22
|
+
constructor(
|
|
23
|
+
readonly sink: Sink<E, A, E2>,
|
|
24
|
+
readonly scheduler: Scheduler,
|
|
25
|
+
readonly context: FiberContext<FiberId.Live>,
|
|
26
|
+
readonly env: Env<any>,
|
|
27
|
+
readonly delay: Delay,
|
|
28
|
+
) {}
|
|
29
|
+
|
|
30
|
+
event(value: A) {
|
|
31
|
+
return fromLazy(() =>
|
|
32
|
+
this.scheduler.schedule(
|
|
33
|
+
this.sink.event(value),
|
|
34
|
+
this.env,
|
|
35
|
+
delayed(this.delay),
|
|
36
|
+
this.context.fork(),
|
|
37
|
+
),
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
error = this.sink.error
|
|
42
|
+
end = this.sink.end
|
|
43
|
+
}
|