@quenk/potoo 4.1.15 → 4.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.
@@ -1,8 +1,8 @@
1
1
  import { Err } from '@quenk/noni/lib/control/error';
2
+ import { Case } from '@quenk/noni/lib/control/match/case';
2
3
  import { Address } from './address';
3
4
  import { Spawnable } from './template';
4
5
  import { Message } from '.';
5
- import { Case } from '@quenk/noni/lib/control/match/case';
6
6
  /**
7
7
  * Parent is any object capable of spawning a child actor.
8
8
  */
@@ -33,6 +33,12 @@ export interface Api extends Parent {
33
33
  * An actor can only specify itself or a child as the target.
34
34
  */
35
35
  kill(target: Address): Promise<void>;
36
+ /**
37
+ * exit kills the actor.
38
+ *
39
+ * A value can be optionally provided to return to the parent.
40
+ */
41
+ exit<T>(value?: T): Promise<void>;
36
42
  /**
37
43
  * tell a message to an actor address.
38
44
  */
@@ -1,31 +1 @@
1
- import { Case } from '@quenk/noni/lib/control/match/case';
2
- import { Address } from '../address';
3
- /**
4
- * init should be called as early as possible in the child process if using the
5
- * direct API (Process).
6
- *
7
- * It sets up a listener for incoming messages to the child_process that can
8
- * be read later via receive() or select().
9
- */
10
- export declare const init: () => void;
11
- /**
12
- * self provides the address for this child actor.
13
- */
14
- export declare const self: string;
15
- /**
16
- * tell sends a message to another actor in the system using the VM in the
17
- * parent process.
18
- */
19
- export declare const tell: <M>(to: Address, message: M) => any;
20
- /**
21
- * receive the next message in the message queue.
22
- *
23
- * TODO: drop messages that do not match any cases.
24
- */
25
- export declare const receive: <T>(cases?: Case<T>[]) => Promise<T>;
26
- /**
27
- * exit the actor, ending the process as a result.
28
- *
29
- * This is simply a wrapper around process.exit();
30
- */
31
- export declare const exit: () => never;
1
+ export * from '../process';
@@ -1,68 +1,18 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.exit = exports.receive = exports.tell = exports.self = exports.init = void 0;
4
- const array_1 = require("@quenk/noni/lib/data/array");
5
- const case_1 = require("@quenk/noni/lib/control/match/case");
6
- const function_1 = require("@quenk/noni/lib/data/function");
7
- const address_1 = require("../address");
8
- const messages = [];
9
- /**
10
- * init should be called as early as possible in the child process if using the
11
- * direct API (Process).
12
- *
13
- * It sets up a listener for incoming messages to the child_process that can
14
- * be read later via receive() or select().
15
- */
16
- const init = () => {
17
- if (!process.send)
18
- throw new Error('process: direct API is meant to ' + 'be used in a child process!');
19
- process.on('message', (m) => {
20
- messages.unshift(m);
21
- drain();
22
- });
23
- process.on('uncaughtExceptionMonitor', err => process.send(err));
24
- };
25
- exports.init = init;
26
- /**
27
- * self provides the address for this child actor.
28
- */
29
- exports.self = process.env.POTOO_ACTOR_ADDRESS || address_1.ADDRESS_DISCARD;
30
- /**
31
- * tell sends a message to another actor in the system using the VM in the
32
- * parent process.
33
- */
34
- const tell = (to, message) => process.send({ from: exports.self, to, message });
35
- exports.tell = tell;
36
- const receivers = [];
37
- const defaultCases = [new case_1.Default(function_1.identity)];
38
- /**
39
- * receive the next message in the message queue.
40
- *
41
- * TODO: drop messages that do not match any cases.
42
- */
43
- const receive = async (cases = defaultCases) => new Promise(resolve => {
44
- let matcher = new case_1.CaseFunction(cases || defaultCases);
45
- let receiver = async (msg) => {
46
- if (matcher.test(msg)) {
47
- resolve(await matcher.apply(msg));
48
- }
49
- else {
50
- receivers.push(receiver);
51
- }
52
- };
53
- receivers.push(receiver);
54
- drain();
55
- });
56
- exports.receive = receive;
57
- const drain = () => {
58
- if (!(0, array_1.empty)(messages) && !(0, array_1.empty)(receivers))
59
- receivers.pop()(messages.shift());
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
60
15
  };
61
- /**
62
- * exit the actor, ending the process as a result.
63
- *
64
- * This is simply a wrapper around process.exit();
65
- */
66
- const exit = () => process.exit();
67
- exports.exit = exit;
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("../process"), exports);
68
18
  //# sourceMappingURL=process.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/actor/framework/process.ts"],"names":[],"mappings":";;;AACA,sDAAmD;AACnD,6DAI4C;AAC5C,4DAAyD;AAEzD,wCAAsD;AAGtD,MAAM,QAAQ,GAAc,EAAE,CAAC;AAE/B;;;;;;GAMG;AACI,MAAM,IAAI,GAAG,GAAG,EAAE;IACrB,IAAI,CAAC,OAAO,CAAC,IAAI;QACb,MAAM,IAAI,KAAK,CACX,kCAAkC,GAAG,6BAA6B,CACrE,CAAC;IAEN,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAU,EAAE,EAAE;QACjC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpB,KAAK,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,0BAA0B,EAAE,GAAG,CAAC,EAAE,CAC9B,OAAO,CAAC,IAAK,CAAC,GAAG,CAAC,CAChC,CAAC;AACN,CAAC,CAAC;AAdW,QAAA,IAAI,QAcf;AAEF;;GAEG;AACU,QAAA,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,yBAAe,CAAC;AAEvE;;;GAGG;AACI,MAAM,IAAI,GAAG,CAAI,EAAW,EAAE,OAAU,EAAE,EAAE,CACpC,OAAO,CAAC,IAAK,CAAC,EAAE,IAAI,EAAE,YAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAD7C,QAAA,IAAI,QACyC;AAI1D,MAAM,SAAS,GAAc,EAAE,CAAC;AAEhC,MAAM,YAAY,GAAG,CAAC,IAAI,cAAO,CAAC,mBAAQ,CAAC,CAAC,CAAC;AAE7C;;;;GAIG;AACI,MAAM,OAAO,GAAG,KAAK,EAAK,QAAmB,YAAY,EAAc,EAAE,CAC5E,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;IAClB,IAAI,OAAO,GAAG,IAAI,mBAAY,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC;IACtD,IAAI,QAAQ,GAAG,KAAK,EAAE,GAAY,EAAE,EAAE;QAClC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACJ,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC,CAAC;IACF,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,KAAK,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAZM,QAAA,OAAO,WAYb;AAEP,MAAM,KAAK,GAAG,GAAG,EAAE;IACf,IAAI,CAAC,IAAA,aAAK,EAAC,QAAQ,CAAC,IAAI,CAAC,IAAA,aAAK,EAAC,SAAS,CAAC;QAC3B,SAAS,CAAC,GAAG,EAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF;;;;GAIG;AACI,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAA5B,QAAA,IAAI,QAAwB"}
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/actor/framework/process.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B"}
@@ -1,54 +1 @@
1
- import { Err } from '@quenk/noni/lib/control/error';
2
- import { Runtime } from '../system/vm/runtime';
3
- import { Address } from '../address';
4
- import { Spawnable } from '../template';
5
- import { Api } from '../api';
6
- import { Message, Actor } from '../';
7
- import { Case } from '.';
8
- /**
9
- * Resident is an actor that exists in the current runtime.
10
- */
11
- export interface Resident extends Api, Actor {
12
- }
13
- /**
14
- * AbstractResident is a base implementation of a Resident actor.
15
- */
16
- export declare abstract class AbstractResident implements Resident {
17
- runtime: Runtime;
18
- constructor(runtime: Runtime);
19
- self: string;
20
- notify(msg: Message): Promise<void>;
21
- spawn(target: Spawnable): Promise<string>;
22
- tell<M>(addr: Address, msg: M): Promise<void>;
23
- raise(err: Err): Promise<void>;
24
- kill(addr: Address): Promise<void>;
25
- exit(): Promise<void>;
26
- start(): Promise<void>;
27
- run(): Promise<void>;
28
- stop(): Promise<void>;
29
- receive<T>(cases?: Case<T>[]): Promise<T>;
30
- watch<T>(task: () => Promise<T>): Promise<void>;
31
- }
32
- /**
33
- * Mutable actors can change their behaviour after message processing.
34
- */
35
- export declare abstract class Mutable extends AbstractResident {
36
- }
37
- /**
38
- * Immutable is an actor whose behaviour does not change when a message is
39
- * received.
40
- *
41
- * For each message received, the same set of TypeCase classes are applied.
42
- * This class is useful for simple request/response style actors that do
43
- * not require much complicated logic.
44
- *
45
- * @typeparam T - The type of messages the actor is interested in receiving.
46
- */
47
- export declare abstract class Immutable extends AbstractResident {
48
- /**
49
- * selectors provides the list of TypeCase classes that will be applied to
50
- * all incoming messages.
51
- */
52
- selectors(): Case<Promise<void> | void>[];
53
- start(): Promise<void>;
54
- }
1
+ export { Immutable, Mutable } from '../local';
@@ -1,74 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Immutable = exports.Mutable = exports.AbstractResident = void 0;
4
- /**
5
- * AbstractResident is a base implementation of a Resident actor.
6
- */
7
- class AbstractResident {
8
- constructor(runtime) {
9
- this.runtime = runtime;
10
- this.self = this.runtime.self;
11
- }
12
- async notify(msg) {
13
- await this.runtime.notify(msg);
14
- }
15
- spawn(target) {
16
- return this.runtime.spawn(target);
17
- }
18
- async tell(addr, msg) {
19
- await this.runtime.tell(addr, msg);
20
- }
21
- async raise(err) {
22
- await this.runtime.raise(err);
23
- }
24
- async kill(addr) {
25
- await this.runtime.kill(addr);
26
- }
27
- async exit() {
28
- await this.runtime.kill(this.self);
29
- }
30
- async start() {
31
- return this.run();
32
- }
33
- async run() { }
34
- async stop() { }
35
- async receive(cases = []) {
36
- return this.runtime.receive(cases);
37
- }
38
- watch(task) {
39
- return this.runtime.watch(task);
40
- }
41
- }
42
- exports.AbstractResident = AbstractResident;
43
- /**
44
- * Mutable actors can change their behaviour after message processing.
45
- */
46
- class Mutable extends AbstractResident {
47
- }
48
- exports.Mutable = Mutable;
49
- /**
50
- * Immutable is an actor whose behaviour does not change when a message is
51
- * received.
52
- *
53
- * For each message received, the same set of TypeCase classes are applied.
54
- * This class is useful for simple request/response style actors that do
55
- * not require much complicated logic.
56
- *
57
- * @typeparam T - The type of messages the actor is interested in receiving.
58
- */
59
- class Immutable extends AbstractResident {
60
- /**
61
- * selectors provides the list of TypeCase classes that will be applied to
62
- * all incoming messages.
63
- */
64
- selectors() {
65
- return [];
66
- }
67
- async start() {
68
- await this.run();
69
- while (this.runtime.isValid())
70
- await this.receive(this.selectors());
71
- }
72
- }
73
- exports.Immutable = Immutable;
3
+ exports.Mutable = exports.Immutable = void 0;
4
+ var local_1 = require("../local");
5
+ Object.defineProperty(exports, "Immutable", { enumerable: true, get: function () { return local_1.Immutable; } });
6
+ Object.defineProperty(exports, "Mutable", { enumerable: true, get: function () { return local_1.Mutable; } });
74
7
  //# sourceMappingURL=resident.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resident.js","sourceRoot":"","sources":["../../../src/actor/framework/resident.ts"],"names":[],"mappings":";;;AAcA;;GAEG;AACH,MAAsB,gBAAgB;IAClC,YAAmB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAEnC,SAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAFa,CAAC;IAIvC,KAAK,CAAC,MAAM,CAAC,GAAY;QACrB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,MAAiB;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,IAAa,EAAE,GAAM;QAC/B,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAQ;QAChB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAa;QACpB,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI;QACN,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,KAAK;QACP,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,GAAG,KAAI,CAAC;IAEd,KAAK,CAAC,IAAI,KAAI,CAAC;IAEf,KAAK,CAAC,OAAO,CAAI,QAAmB,EAAE;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAI,IAAsB;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;CACJ;AA5CD,4CA4CC;AAED;;GAEG;AACH,MAAsB,OAAQ,SAAQ,gBAAgB;CAAG;AAAzD,0BAAyD;AAEzD;;;;;;;;;GASG;AACH,MAAsB,SAAU,SAAQ,gBAAgB;IACpD;;;OAGG;IACH,SAAS;QACL,OAAO,EAAE,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAAE,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;CACJ;AAbD,8BAaC"}
1
+ {"version":3,"file":"resident.js","sourceRoot":"","sources":["../../../src/actor/framework/resident.ts"],"names":[],"mappings":";;;AAAA,kCAA8C;AAArC,kGAAA,SAAS,OAAA;AAAE,gGAAA,OAAO,OAAA"}
@@ -29,3 +29,12 @@ export interface Actor {
29
29
  */
30
30
  stop(): Promise<void>;
31
31
  }
32
+ /**
33
+ * Runnable is an extended actor interface used mainly by the fork machinery.
34
+ */
35
+ export interface Runnable<T> extends Actor {
36
+ /**
37
+ * run is invoked by the Runnable's start() method.
38
+ */
39
+ run(): Promise<T>;
40
+ }
@@ -0,0 +1,84 @@
1
+ import { Err } from '@quenk/noni/lib/control/error';
2
+ import { Case } from '@quenk/noni/lib/control/match/case';
3
+ import { MessagePredicate, Runtime } from '../system/vm/runtime';
4
+ import { Address } from '../address';
5
+ import { Forkable, Spawnable } from '../template';
6
+ import { Api } from '../api';
7
+ import { Message, Actor, Runnable } from '../';
8
+ export { TypeCase, Default } from '@quenk/noni/lib/control/match/case';
9
+ export { Case };
10
+ /**
11
+ * Local is an actor that exists in the current runtime.
12
+ */
13
+ export interface Local extends Api, Actor {
14
+ }
15
+ /**
16
+ * BaseLocal is a base implementation of a Local actor.
17
+ */
18
+ export declare abstract class BaseLocal implements Local {
19
+ runtime: Runtime;
20
+ constructor(runtime: Runtime);
21
+ self: string;
22
+ notify(msg: Message): Promise<void>;
23
+ spawn(target: Spawnable): Promise<string>;
24
+ fork<T>(t: Forkable<T>): Promise<T>;
25
+ tell<M>(addr: Address, msg: M): Promise<void>;
26
+ raise(err: Err): Promise<void>;
27
+ kill(addr: Address): Promise<void>;
28
+ exit(): Promise<void>;
29
+ start(): Promise<void>;
30
+ stop(): Promise<void>;
31
+ receive<T>(cases?: Case<T>[]): Promise<T>;
32
+ watch<T>(task: () => Promise<T>): Promise<void>;
33
+ }
34
+ /**
35
+ * Mutable actors can change their behaviour after message processing.
36
+ */
37
+ export declare abstract class Mutable extends BaseLocal {
38
+ start(): Promise<void>;
39
+ run(): Promise<void>;
40
+ }
41
+ /**
42
+ * Immutable is an actor whose behaviour does not change when a message is
43
+ * received.
44
+ *
45
+ * For each message received, the same set of TypeCase classes are applied.
46
+ * This class is useful for simple request/response style actors that do
47
+ * not require much complicated logic.
48
+ *
49
+ * @typeparam T - The type of messages the actor is interested in receiving.
50
+ */
51
+ export declare abstract class Immutable extends BaseLocal {
52
+ /**
53
+ * selectors provides the list of TypeCase classes that will be applied to
54
+ * all incoming messages.
55
+ */
56
+ selectors(): Case<Promise<void> | void>[];
57
+ run(): Promise<void>;
58
+ start(): Promise<void>;
59
+ }
60
+ /**
61
+ * Fork is a short lived actor spawned primarily for the result of its run()
62
+ * method.
63
+ *
64
+ * These actors can communicate with the rest of the system if needed but
65
+ * should limit communication with the parent as much as possible to the
66
+ * final result.
67
+ *
68
+ * A Fork is like an Immutable except it does not automatically start
69
+ * receiving messages on start. This must be manually triggered using
70
+ * receiveUntil() or just receive() if Mutable like behaviour is preferred.
71
+ */
72
+ export declare abstract class Fork<T> extends BaseLocal implements Runnable<T> {
73
+ selectors<M>(): Case<Promise<M> | M>[];
74
+ /**
75
+ * receiveUntil uses the internal selctors define to keep processing
76
+ * incomming messages until the conditions of the predicate function
77
+ * are met.
78
+ *
79
+ * Use this to block the actor until it is ready to return a value.s
80
+ */
81
+ receiveUntil<M>(f: MessagePredicate): Promise<M>;
82
+ abstract run(): Promise<T>;
83
+ start(): Promise<void>;
84
+ }
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Fork = exports.Immutable = exports.Mutable = exports.BaseLocal = exports.Default = exports.TypeCase = void 0;
4
+ var case_1 = require("@quenk/noni/lib/control/match/case");
5
+ Object.defineProperty(exports, "TypeCase", { enumerable: true, get: function () { return case_1.TypeCase; } });
6
+ Object.defineProperty(exports, "Default", { enumerable: true, get: function () { return case_1.Default; } });
7
+ /**
8
+ * BaseLocal is a base implementation of a Local actor.
9
+ */
10
+ class BaseLocal {
11
+ constructor(runtime) {
12
+ this.runtime = runtime;
13
+ this.self = this.runtime.self;
14
+ }
15
+ async notify(msg) {
16
+ await this.runtime.notify(msg);
17
+ }
18
+ spawn(target) {
19
+ return this.runtime.spawn(target);
20
+ }
21
+ fork(t) {
22
+ return this.runtime.fork(t);
23
+ }
24
+ async tell(addr, msg) {
25
+ await this.runtime.tell(addr, msg);
26
+ }
27
+ async raise(err) {
28
+ await this.runtime.raise(err);
29
+ }
30
+ async kill(addr) {
31
+ await this.runtime.kill(addr);
32
+ }
33
+ async exit() {
34
+ await this.runtime.kill(this.self);
35
+ }
36
+ async start() { }
37
+ async stop() { }
38
+ async receive(cases = []) {
39
+ return this.runtime.receive(cases);
40
+ }
41
+ watch(task) {
42
+ return this.runtime.watch(task);
43
+ }
44
+ }
45
+ exports.BaseLocal = BaseLocal;
46
+ /**
47
+ * Mutable actors can change their behaviour after message processing.
48
+ */
49
+ class Mutable extends BaseLocal {
50
+ async start() {
51
+ return this.run();
52
+ }
53
+ async run() { }
54
+ }
55
+ exports.Mutable = Mutable;
56
+ /**
57
+ * Immutable is an actor whose behaviour does not change when a message is
58
+ * received.
59
+ *
60
+ * For each message received, the same set of TypeCase classes are applied.
61
+ * This class is useful for simple request/response style actors that do
62
+ * not require much complicated logic.
63
+ *
64
+ * @typeparam T - The type of messages the actor is interested in receiving.
65
+ */
66
+ class Immutable extends BaseLocal {
67
+ /**
68
+ * selectors provides the list of TypeCase classes that will be applied to
69
+ * all incoming messages.
70
+ */
71
+ selectors() {
72
+ return [];
73
+ }
74
+ async run() { }
75
+ async start() {
76
+ await this.run();
77
+ while (this.runtime.isValid())
78
+ await this.receive(this.selectors());
79
+ }
80
+ }
81
+ exports.Immutable = Immutable;
82
+ /**
83
+ * Fork is a short lived actor spawned primarily for the result of its run()
84
+ * method.
85
+ *
86
+ * These actors can communicate with the rest of the system if needed but
87
+ * should limit communication with the parent as much as possible to the
88
+ * final result.
89
+ *
90
+ * A Fork is like an Immutable except it does not automatically start
91
+ * receiving messages on start. This must be manually triggered using
92
+ * receiveUntil() or just receive() if Mutable like behaviour is preferred.
93
+ */
94
+ class Fork extends BaseLocal {
95
+ selectors() {
96
+ return [];
97
+ }
98
+ /**
99
+ * receiveUntil uses the internal selctors define to keep processing
100
+ * incomming messages until the conditions of the predicate function
101
+ * are met.
102
+ *
103
+ * Use this to block the actor until it is ready to return a value.s
104
+ */
105
+ async receiveUntil(f) {
106
+ return this.runtime.receiveUntil(this.selectors(), f);
107
+ }
108
+ async start() {
109
+ this.runtime.finalValue = await this.run();
110
+ this.exit();
111
+ }
112
+ }
113
+ exports.Fork = Fork;
114
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/actor/local/index.ts"],"names":[],"mappings":";;;AASA,2DAAuE;AAA9D,gGAAA,QAAQ,OAAA;AAAE,+FAAA,OAAO,OAAA;AAQ1B;;GAEG;AACH,MAAsB,SAAS;IAC3B,YAAmB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAEnC,SAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAFa,CAAC;IAIvC,KAAK,CAAC,MAAM,CAAC,GAAY;QACrB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,MAAiB;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,CAAI,CAAc;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,IAAa,EAAE,GAAM;QAC/B,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAQ;QAChB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAa;QACpB,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI;QACN,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,KAAK,KAAI,CAAC;IAEhB,KAAK,CAAC,IAAI,KAAI,CAAC;IAEf,KAAK,CAAC,OAAO,CAAI,QAAmB,EAAE;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAI,IAAsB;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;CACJ;AA5CD,8BA4CC;AAED;;GAEG;AACH,MAAsB,OAAQ,SAAQ,SAAS;IAC3C,KAAK,CAAC,KAAK;QACP,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,GAAG,KAAI,CAAC;CACjB;AAND,0BAMC;AAED;;;;;;;;;GASG;AACH,MAAsB,SAAU,SAAQ,SAAS;IAC7C;;;OAGG;IACH,SAAS;QACL,OAAO,EAAE,CAAC;IACd,CAAC;IAED,KAAK,CAAC,GAAG,KAAI,CAAC;IAEd,KAAK,CAAC,KAAK;QACP,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAAE,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;CACJ;AAfD,8BAeC;AAED;;;;;;;;;;;GAWG;AACH,MAAsB,IAAQ,SAAQ,SAAS;IAC3C,SAAS;QACL,OAAO,EAAE,CAAC;IACd,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,YAAY,CAAI,CAAmB;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IAID,KAAK,CAAC,KAAK;QACP,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC;CACJ;AAtBD,oBAsBC"}
@@ -0,0 +1,31 @@
1
+ import { Case } from '@quenk/noni/lib/control/match/case';
2
+ import { Address } from './address';
3
+ /**
4
+ * init should be called as early as possible in the child process if using the
5
+ * direct API (Process).
6
+ *
7
+ * It sets up a listener for incoming messages to the child_process that can
8
+ * be read later via receive() or select().
9
+ */
10
+ export declare const init: () => void;
11
+ /**
12
+ * self provides the address for this child actor.
13
+ */
14
+ export declare const self: string;
15
+ /**
16
+ * tell sends a message to another actor in the system using the VM in the
17
+ * parent process.
18
+ */
19
+ export declare const tell: <M>(to: Address, message: M) => any;
20
+ /**
21
+ * receive the next message in the message queue.
22
+ *
23
+ * TODO: drop messages that do not match any cases.
24
+ */
25
+ export declare const receive: <T>(cases?: Case<T>[]) => Promise<T>;
26
+ /**
27
+ * exit the actor, ending the process as a result.
28
+ *
29
+ * This is simply a wrapper around process.exit();
30
+ */
31
+ export declare const exit: () => never;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exit = exports.receive = exports.tell = exports.self = exports.init = void 0;
4
+ const array_1 = require("@quenk/noni/lib/data/array");
5
+ const case_1 = require("@quenk/noni/lib/control/match/case");
6
+ const function_1 = require("@quenk/noni/lib/data/function");
7
+ const address_1 = require("./address");
8
+ const messages = [];
9
+ /**
10
+ * init should be called as early as possible in the child process if using the
11
+ * direct API (Process).
12
+ *
13
+ * It sets up a listener for incoming messages to the child_process that can
14
+ * be read later via receive() or select().
15
+ */
16
+ const init = () => {
17
+ if (!process.send)
18
+ throw new Error('process: direct API is meant to ' + 'be used in a child process!');
19
+ process.on('message', (m) => {
20
+ messages.unshift(m);
21
+ drain();
22
+ });
23
+ process.on('uncaughtExceptionMonitor', err => process.send(err));
24
+ };
25
+ exports.init = init;
26
+ /**
27
+ * self provides the address for this child actor.
28
+ */
29
+ exports.self = process.env.POTOO_ACTOR_ADDRESS || address_1.ADDRESS_DISCARD;
30
+ /**
31
+ * tell sends a message to another actor in the system using the VM in the
32
+ * parent process.
33
+ */
34
+ const tell = (to, message) => process.send({ from: exports.self, to, message });
35
+ exports.tell = tell;
36
+ const receivers = [];
37
+ const defaultCases = [new case_1.Default(function_1.identity)];
38
+ /**
39
+ * receive the next message in the message queue.
40
+ *
41
+ * TODO: drop messages that do not match any cases.
42
+ */
43
+ const receive = async (cases = defaultCases) => new Promise(resolve => {
44
+ let matcher = new case_1.CaseFunction(cases || defaultCases);
45
+ let receiver = async (msg) => {
46
+ if (matcher.test(msg)) {
47
+ resolve(await matcher.apply(msg));
48
+ }
49
+ else {
50
+ receivers.push(receiver);
51
+ }
52
+ };
53
+ receivers.push(receiver);
54
+ drain();
55
+ });
56
+ exports.receive = receive;
57
+ const drain = () => {
58
+ if (!(0, array_1.empty)(messages) && !(0, array_1.empty)(receivers))
59
+ receivers.pop()(messages.shift());
60
+ };
61
+ /**
62
+ * exit the actor, ending the process as a result.
63
+ *
64
+ * This is simply a wrapper around process.exit();
65
+ */
66
+ const exit = () => process.exit();
67
+ exports.exit = exit;
68
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/actor/process.ts"],"names":[],"mappings":";;;AACA,sDAAmD;AACnD,6DAI4C;AAC5C,4DAAyD;AAEzD,uCAAqD;AAGrD,MAAM,QAAQ,GAAc,EAAE,CAAC;AAE/B;;;;;;GAMG;AACI,MAAM,IAAI,GAAG,GAAG,EAAE;IACrB,IAAI,CAAC,OAAO,CAAC,IAAI;QACb,MAAM,IAAI,KAAK,CACX,kCAAkC,GAAG,6BAA6B,CACrE,CAAC;IAEN,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAU,EAAE,EAAE;QACjC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpB,KAAK,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,0BAA0B,EAAE,GAAG,CAAC,EAAE,CAC9B,OAAO,CAAC,IAAK,CAAC,GAAG,CAAC,CAChC,CAAC;AACN,CAAC,CAAC;AAdW,QAAA,IAAI,QAcf;AAEF;;GAEG;AACU,QAAA,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,yBAAe,CAAC;AAEvE;;;GAGG;AACI,MAAM,IAAI,GAAG,CAAI,EAAW,EAAE,OAAU,EAAE,EAAE,CACpC,OAAO,CAAC,IAAK,CAAC,EAAE,IAAI,EAAE,YAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAD7C,QAAA,IAAI,QACyC;AAI1D,MAAM,SAAS,GAAc,EAAE,CAAC;AAEhC,MAAM,YAAY,GAAG,CAAC,IAAI,cAAO,CAAC,mBAAQ,CAAC,CAAC,CAAC;AAE7C;;;;GAIG;AACI,MAAM,OAAO,GAAG,KAAK,EAAK,QAAmB,YAAY,EAAc,EAAE,CAC5E,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;IAClB,IAAI,OAAO,GAAG,IAAI,mBAAY,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC;IACtD,IAAI,QAAQ,GAAG,KAAK,EAAE,GAAY,EAAE,EAAE;QAClC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACJ,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC,CAAC;IACF,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,KAAK,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC;AAZM,QAAA,OAAO,WAYb;AAEP,MAAM,KAAK,GAAG,GAAG,EAAE;IACf,IAAI,CAAC,IAAA,aAAK,EAAC,QAAQ,CAAC,IAAI,CAAC,IAAA,aAAK,EAAC,SAAS,CAAC;QAC3B,SAAS,CAAC,GAAG,EAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF;;;;GAIG;AACI,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAA5B,QAAA,IAAI,QAAwB"}
@@ -85,7 +85,9 @@ class EventDispatcher {
85
85
  reject(new Error(`[${thread.address}]: ERR_MONITOR_ACTOR_STOPPED`));
86
86
  }
87
87
  };
88
- if (type !== events.EVENT_ACTOR_STOPPED)
88
+ // listen for the stop event if the target is not one of the EOL
89
+ // events.
90
+ if ((type !== events.EVENT_ACTOR_STOPPED) && (type !== events.EVENT_ACTOR_DEALLOCATED))
89
91
  this.addListener(thread.address, events.EVENT_ACTOR_STOPPED, handler);
90
92
  this.addListener(thread.address, type, handler);
91
93
  });
@@ -1 +1 @@
1
- {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../../../../src/actor/system/vm/event/dispatcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../../../../src/actor/system/vm/event/dispatcher.ts"],"names":[],"mappings":"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"}
@@ -109,6 +109,7 @@ export declare class PVM implements VM {
109
109
  tell(to: Address, msg: Message): Promise<void>;
110
110
  raise(err: Err): Promise<void>;
111
111
  kill(addr: Address): Promise<void>;
112
+ exit(): Promise<void>;
112
113
  receive<T>(): Promise<T>;
113
114
  sendMessage(from: Thread, to: Address, msg: Message): Promise<void>;
114
115
  sendKillSignal(src: Thread, target: Address): Promise<void>;
@@ -81,6 +81,7 @@ class PVM {
81
81
  async kill(addr) {
82
82
  await this.sendKillSignal(this, addr);
83
83
  }
84
+ async exit() { }
84
85
  async receive() {
85
86
  return future_1.Future.raise(new Error('Not implemented'));
86
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/actor/system/vm/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/actor/system/vm/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,14 @@
1
+ import { Case } from '@quenk/noni/lib/control/match/case';
2
+ import { Type } from '@quenk/noni/lib/data/type';
3
+ import { Forkable } from '../../../actor/template';
1
4
  import { Api } from '../../api';
2
- import { Actor } from '../..';
5
+ import { Actor, Message } from '../..';
3
6
  import { VM } from '.';
7
+ /**
8
+ * MessagePredicate is a function that tests whether a message satisfies a certain
9
+ * condition.
10
+ */
11
+ export type MessagePredicate = (msg: Message) => boolean | Case<Message>;
4
12
  /**
5
13
  * Runtime is the interface used by the outside world (JS) to execute code
6
14
  * in the VM.
@@ -10,6 +18,13 @@ export interface Runtime extends Actor, Api {
10
18
  * vm the Runtime belongs to.
11
19
  */
12
20
  vm: VM;
21
+ /**
22
+ * finalValue of the Runtime.
23
+ *
24
+ * This can be set so that the parent of the Runtime obtains a result
25
+ * if the child has been forked instead of spawned.
26
+ */
27
+ finalValue?: Type;
13
28
  /**
14
29
  * isValid indicates whether the Runtime is still valid.
15
30
  *
@@ -17,6 +32,22 @@ export interface Runtime extends Actor, Api {
17
32
  * part of the system.
18
33
  */
19
34
  isValid(): boolean;
35
+ /**
36
+ * fork is like spawn but meant for returning the result of a child
37
+ * actor instead of an address.
38
+ *
39
+ * The child actor only provides the result upon its exit.
40
+ */
41
+ fork<T>(t: Forkable<T>): Promise<T>;
42
+ /**
43
+ * receiveUntil continues invoking receive() until the result satisfies
44
+ * the test function provided.
45
+ *
46
+ * Note that the function is applied to the result of case matching it
47
+ * is therefore important to return a value in at least one of the cases
48
+ * to the predicate can be satisfied.
49
+ */
50
+ receiveUntil<T>(cases: Case<T>[], f: MessagePredicate): Promise<T>;
20
51
  /**
21
52
  * watch an asynchronous task, feeding any errors into the VM's
22
53
  * error handling machinery.
@@ -5,8 +5,8 @@ import { Thread } from '.';
5
5
  * ThreadCollector is used to automatically deallocate dead threads from the
6
6
  * system.
7
7
  *
8
- * This applies to function actors which are deallocated automatically after t
9
- * hey execute. However, this deallocation is delayed until all child threads
8
+ * This applies to function actors which are deallocated automatically after
9
+ * they execute. However, this deallocation is delayed until all child threads
10
10
  * have also been deallocated for the actor.
11
11
  */
12
12
  export declare class ThreadCollector {
@@ -8,8 +8,8 @@ const shared_1 = require("./shared");
8
8
  * ThreadCollector is used to automatically deallocate dead threads from the
9
9
  * system.
10
10
  *
11
- * This applies to function actors which are deallocated automatically after t
12
- * hey execute. However, this deallocation is delayed until all child threads
11
+ * This applies to function actors which are deallocated automatically after
12
+ * they execute. However, this deallocation is delayed until all child threads
13
13
  * have also been deallocated for the actor.
14
14
  */
15
15
  class ThreadCollector {
@@ -50,7 +50,12 @@ class ThreadRunner {
50
50
  let { events, collector } = (0, lazy_1.evaluate)(this.vm);
51
51
  if (thread.template.run)
52
52
  collector.mark(thread);
53
- await thread.start();
53
+ try {
54
+ await thread.start();
55
+ }
56
+ catch (e) {
57
+ await thread.raise(e);
58
+ }
54
59
  await events.dispatchActorEvent(thread.address, thread.address, event_1.EVENT_ACTOR_STARTED);
55
60
  await collector.collect(thread);
56
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../../src/actor/system/vm/thread/runner.ts"],"names":[],"mappings":";;;AAAA,oDAA2D;AAG3D,gDAO2B;AAC3B,oCAOkB;AAIlB,MAAM,YAAY,GAAG,CAAC,6BAAqB,EAAE,+BAAuB,CAAC,CAAC;AAEtE,MAAM,aAAa,GAAsB;IACrC,CAAC,kCAAuB,CAAC,EAAE,6BAAqB;IAChD,CAAC,gCAAqB,CAAC,EAAE,2BAAmB;IAC5C,CAAC,kCAAuB,CAAC,EAAE,2BAAmB;IAC9C,CAAC,gCAAqB,CAAC,EAAE,2BAAmB;CAC/C,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAwB,EAAE,EAAE,WACpD,OAAA,MAAA,aAAa,CAAC,KAAK,CAAC,mCAAI,6BAAqB,CAAA,EAAA,CAAC;AAElD;;;GAGG;AACH,MAAa,YAAY;IACrB,YAAmB,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAEnC;;;;;;OAMG;IACH,KAAK,CAAC,cAAc,CAChB,MAAc,EACd,KAAa,EACb,QAA2B,kCAAuB;QAElD,IAAI,EAAE,MAAM,EAAE,GAAG,IAAA,eAAQ,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAEpC,sEAAsE;QACtE,mEAAmE;QACnE,OAAO,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC7B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;YAC7B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,SAAS,CAAC,MAAc;QAC1B,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,eAAQ,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE9C,IAAwB,MAAM,CAAC,QAAS,CAAC,GAAG;YAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,MAAM,MAAM,CAAC,kBAAkB,CAC3B,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,OAAO,EACd,2BAAmB,CACtB,CAAC;QAEF,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;CACJ;AAlDD,oCAkDC"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../../src/actor/system/vm/thread/runner.ts"],"names":[],"mappings":";;;AAAA,oDAA2D;AAG3D,gDAO2B;AAC3B,oCAOkB;AAIlB,MAAM,YAAY,GAAG,CAAC,6BAAqB,EAAE,+BAAuB,CAAC,CAAC;AAEtE,MAAM,aAAa,GAAsB;IACrC,CAAC,kCAAuB,CAAC,EAAE,6BAAqB;IAChD,CAAC,gCAAqB,CAAC,EAAE,2BAAmB;IAC5C,CAAC,kCAAuB,CAAC,EAAE,2BAAmB;IAC9C,CAAC,gCAAqB,CAAC,EAAE,2BAAmB;CAC/C,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAwB,EAAE,EAAE,WACpD,OAAA,MAAA,aAAa,CAAC,KAAK,CAAC,mCAAI,6BAAqB,CAAA,EAAA,CAAC;AAElD;;;GAGG;AACH,MAAa,YAAY;IACrB,YAAmB,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAEnC;;;;;;OAMG;IACH,KAAK,CAAC,cAAc,CAChB,MAAc,EACd,KAAa,EACb,QAA2B,kCAAuB;QAElD,IAAI,EAAE,MAAM,EAAE,GAAG,IAAA,eAAQ,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAEpC,sEAAsE;QACtE,mEAAmE;QACnE,OAAO,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC7B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;YAC7B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,SAAS,CAAC,MAAc;QAC1B,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,eAAQ,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE9C,IAAwB,MAAM,CAAC,QAAS,CAAC,GAAG;YAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErE,IAAI,CAAC;YACD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,MAAM,MAAM,CAAC,KAAK,CAAQ,CAAC,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,MAAM,CAAC,kBAAkB,CAC3B,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,OAAO,EACd,2BAAmB,CACtB,CAAC;QAEF,MAAM,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;CACJ;AAtDD,oCAsDC"}
@@ -1,5 +1,6 @@
1
1
  import { Err } from '@quenk/noni/lib/control/error';
2
2
  import { Case } from '@quenk/noni/lib/control/match/case';
3
+ import { Type } from '@quenk/noni/lib/data/type';
3
4
  import { Maybe } from '@quenk/noni/lib/data/maybe';
4
5
  import { SharedTemplate, Spawnable } from '../../../../template';
5
6
  import { Address } from '../../../../address';
@@ -17,7 +18,8 @@ export declare class JSThread implements SharedThread {
17
18
  mailbox: Message[];
18
19
  state: ThreadState;
19
20
  actor: Maybe<Actor>;
20
- constructor(vm: VM, template: SharedTemplate, address: Address, mailbox?: Message[], state?: ThreadState, actor?: Maybe<Actor>);
21
+ finalValue?: Type | undefined;
22
+ constructor(vm: VM, template: SharedTemplate, address: Address, mailbox?: Message[], state?: ThreadState, actor?: Maybe<Actor>, finalValue?: Type | undefined);
21
23
  readonly self: string;
22
24
  _assertValid(): void;
23
25
  isValid(): boolean;
@@ -25,6 +27,7 @@ export declare class JSThread implements SharedThread {
25
27
  notify(msg: Message): Promise<void>;
26
28
  stop(): Promise<void>;
27
29
  watch<T>(task: () => Promise<T> | Promise<T>): Promise<void>;
30
+ exit(): Promise<void>;
28
31
  kill(address: Address): Promise<void>;
29
32
  die(): void;
30
33
  /**
@@ -33,6 +36,11 @@ export declare class JSThread implements SharedThread {
33
36
  resume(): void;
34
37
  raise(e: Err): Promise<void>;
35
38
  spawn(tmpl: Spawnable): Promise<Address>;
39
+ /**
40
+ * TODO: move to allocator
41
+ */
42
+ fork<T>(tmpl: Spawnable): Promise<T>;
36
43
  tell(addr: Address, msg: Message): Promise<void>;
37
- receive<T = Message>(cases?: Case<T>[]): Promise<T>;
44
+ receive<T>(cases?: Case<T>[]): Promise<T>;
45
+ receiveUntil<T = Message>(cases: Case<T>[], f: (m: Message) => boolean): Promise<T>;
38
46
  }
@@ -18,13 +18,14 @@ exports.ERR_THREAD_INVALID = 'ERR_THREAD_INVALID';
18
18
  * JSThread is used by actors that run in the same event loop as the VM.
19
19
  */
20
20
  class JSThread {
21
- constructor(vm, template, address, mailbox = [], state = _1.ThreadState.IDLE, actor = maybe_1.Maybe.nothing()) {
21
+ constructor(vm, template, address, mailbox = [], state = _1.ThreadState.IDLE, actor = maybe_1.Maybe.nothing(), finalValue) {
22
22
  this.vm = vm;
23
23
  this.template = template;
24
24
  this.address = address;
25
25
  this.mailbox = mailbox;
26
26
  this.state = state;
27
27
  this.actor = actor;
28
+ this.finalValue = finalValue;
28
29
  this.self = this.address;
29
30
  }
30
31
  _assertValid() {
@@ -62,6 +63,9 @@ class JSThread {
62
63
  this._assertValid();
63
64
  await ((0, type_1.isFunction)(task) ? future_1.Future.do(task) : task).catch(err => this.raise(err));
64
65
  }
66
+ async exit() {
67
+ await this.kill(this.self);
68
+ }
65
69
  async kill(address) {
66
70
  this._assertValid();
67
71
  if (address === this.self)
@@ -95,6 +99,21 @@ class JSThread {
95
99
  });
96
100
  return result;
97
101
  }
102
+ /**
103
+ * TODO: move to allocator
104
+ */
105
+ async fork(tmpl) {
106
+ this._assertValid();
107
+ // Ensure we do not wait until the child dies.
108
+ let addr = await this.spawn(Object.assign(Object.assign({}, (0, template_1.fromSpawnable)(tmpl)), { spawnConcern: template_1.SPAWN_CONCERN_ALLOCATED }));
109
+ let mthread = this.vm.allocator.getThread(addr);
110
+ if (mthread.isNothing()) {
111
+ throw new Error(`Failed to find thread with address ${addr}`);
112
+ }
113
+ let thread = mthread.get();
114
+ await this.vm.events.monitor(thread, event_1.EVENT_ACTOR_DEALLOCATED);
115
+ return thread.finalValue;
116
+ }
98
117
  async tell(addr, msg) {
99
118
  this._assertValid();
100
119
  await future_1.Future.fromCallback(cb => {
@@ -130,6 +149,14 @@ class JSThread {
130
149
  });
131
150
  return msg;
132
151
  }
152
+ async receiveUntil(cases, f) {
153
+ this._assertValid();
154
+ while (true) {
155
+ let msg = await this.receive(cases);
156
+ if (f(msg))
157
+ return msg;
158
+ }
159
+ }
133
160
  }
134
161
  exports.JSThread = JSThread;
135
162
  //# sourceMappingURL=js.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"js.js","sourceRoot":"","sources":["../../../../../../src/actor/system/vm/thread/shared/js.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"js.js","sourceRoot":"","sources":["../../../../../../src/actor/system/vm/thread/shared/js.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Path } from '@quenk/noni/lib/data/record/path';
2
2
  import { Err } from '@quenk/noni/lib/control/error';
3
3
  import { Runtime } from './system/vm/runtime';
4
- import { Actor } from './';
4
+ import { Actor, Runnable } from './';
5
5
  export declare const ACTION_RAISE = -1;
6
6
  export declare const ACTION_IGNORE = 0;
7
7
  export declare const ACTION_RESTART = 1;
@@ -87,6 +87,11 @@ export type CreateFunc = (runtime: Runtime) => Actor;
87
87
  * not just a function that returns a Promise.
88
88
  */
89
89
  export type RunFunc = (runtime: Runtime) => Promise<void>;
90
+ /**
91
+ * CreateForkFunc is a function that creates a forked actor given the handle
92
+ * the system has generated.
93
+ */
94
+ export type CreateForkFunc<T> = (runtime: Runtime) => Runnable<T>;
90
95
  /**
91
96
  * Template is an object that tells the system how to create an manage an
92
97
  * actor.
@@ -129,6 +134,13 @@ export interface ProcessTemplate extends BaseTemplate {
129
134
  */
130
135
  script: Path;
131
136
  }
137
+ /**
138
+ * ForkTemplate is used for creating forked actors.
139
+ */
140
+ export interface ForkTemplate<T> extends BaseTemplate {
141
+ create: CreateForkFunc<T>;
142
+ }
143
+ export type Forkable<T> = ForkTemplate<T>;
132
144
  /**
133
145
  * Spawnable allows a CreateFunc to be used in place of a Template.
134
146
  */
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/actor/template.ts"],"names":[],"mappings":";;;AAEA,oDAAiE;AAKpD,QAAA,YAAY,GAAG,CAAC,GAAG,CAAC;AACpB,QAAA,aAAa,GAAG,GAAG,CAAC;AACpB,QAAA,cAAc,GAAG,GAAG,CAAC;AACrB,QAAA,WAAW,GAAG,GAAG,CAAC;AAkJ/B,MAAM,aAAa,GAAG,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC,CAAC,WAAW,CAAC;AAEnD,MAAM,eAAe,GAAG,CAAC,IAAc,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,aAAa,CAAC;AAE/E;;GAEG;AACI,MAAM,iBAAiB,GAAG,CAAC,IAAc,EAA2B,EAAE,CACzE,IAAA,eAAQ,EAAmB,IAAK,CAAC,MAAM,CAAC,CAAC;AADhC,QAAA,iBAAiB,qBACe;AAE7C;;;;;;;GAOG;AACI,MAAM,aAAa,GAAG,CAAC,IAAe,EAAY,EAAE;IACvD,IAAI,IAAA,iBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,eAAe,CAAC,IAAI,CAAC;YACxB,CAAC,CAAC,EAAE,GAAG,EAAW,IAAI,EAAE;YACxB,CAAC,CAAC,EAAE,MAAM,EAAc,IAAI,EAAE,CAAC;IACvC,CAAC;SAAM,CAAC;QACJ,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AARW,QAAA,aAAa,iBAQxB;AAEW,QAAA,uBAAuB,GAAG,WAAW,CAAC;AACtC,QAAA,qBAAqB,GAAG,SAAS,CAAC;AAClC,QAAA,uBAAuB,GAAG,WAAW,CAAC;AACtC,QAAA,qBAAqB,GAAG,SAAS,CAAC"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/actor/template.ts"],"names":[],"mappings":";;;AAEA,oDAAiE;AAKpD,QAAA,YAAY,GAAG,CAAC,GAAG,CAAC;AACpB,QAAA,aAAa,GAAG,GAAG,CAAC;AACpB,QAAA,cAAc,GAAG,GAAG,CAAC;AACrB,QAAA,WAAW,GAAG,GAAG,CAAC;AAiK/B,MAAM,aAAa,GAAG,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC,CAAC,WAAW,CAAC;AAEnD,MAAM,eAAe,GAAG,CAAC,IAAc,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,aAAa,CAAC;AAE/E;;GAEG;AACI,MAAM,iBAAiB,GAAG,CAAC,IAAc,EAA2B,EAAE,CACzE,IAAA,eAAQ,EAAmB,IAAK,CAAC,MAAM,CAAC,CAAC;AADhC,QAAA,iBAAiB,qBACe;AAE7C;;;;;;;GAOG;AACI,MAAM,aAAa,GAAG,CAAC,IAAe,EAAY,EAAE;IACvD,IAAI,IAAA,iBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,eAAe,CAAC,IAAI,CAAC;YACxB,CAAC,CAAC,EAAE,GAAG,EAAW,IAAI,EAAE;YACxB,CAAC,CAAC,EAAE,MAAM,EAAc,IAAI,EAAE,CAAC;IACvC,CAAC;SAAM,CAAC;QACJ,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC,CAAC;AARW,QAAA,aAAa,iBAQxB;AAEW,QAAA,uBAAuB,GAAG,WAAW,CAAC;AACtC,QAAA,qBAAqB,GAAG,SAAS,CAAC;AAClC,QAAA,uBAAuB,GAAG,WAAW,CAAC;AACtC,QAAA,qBAAqB,GAAG,SAAS,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quenk/potoo",
3
- "version": "4.1.15",
3
+ "version": "4.2.0",
4
4
  "description": "Message passing virtual machine.",
5
5
  "main": "lib/index.js",
6
6
  "types": "./lib/index.d.ts",