1 | const { Cause, event, field, IO } = require("@cause/cause");
|
2 | const legacy = require("@cause/cause/record");
|
3 | const { inferredSerialize, inferredDeserialize } = require("./spawn");
|
4 |
|
5 |
|
6 | const Parent = Cause("Process.Parent",
|
7 | {
|
8 | [field `process`]: IO.start(start),
|
9 | [field `ready`]: false,
|
10 |
|
11 | [event.on (Cause.Ready)]: (parent, event) =>
|
12 | [parent.set("ready", true), [Cause.Ready()]],
|
13 |
|
14 | [event.in `Message`]: { event: -1 },
|
15 | [event.on `Message`]: (parent, { event }) =>
|
16 | (process.send(inferredSerialize(event)), parent),
|
17 |
|
18 | [event.in `ParentMessage`]: { event: -1 },
|
19 | [event.on `ParentMessage`]: (parent, { event }) =>
|
20 | [parent, [event]]
|
21 | });
|
22 |
|
23 | module.exports = Parent;
|
24 |
|
25 | function start(push)
|
26 | {
|
27 | process.on("message", message =>
|
28 | push(Parent.ParentMessage({ event: inferredDeserialize(message) })));
|
29 |
|
30 | push(Cause.Ready());
|
31 | }
|