@quenk/potoo 3.1.2-0 → 3.1.3-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/actor/address.js +25 -29
- package/lib/actor/address.js.map +1 -1
- package/lib/actor/flags.js +8 -10
- package/lib/actor/flags.js.map +1 -1
- package/lib/actor/mailbox.js +3 -4
- package/lib/actor/mailbox.js.map +1 -1
- package/lib/actor/message.js +3 -4
- package/lib/actor/message.js.map +1 -1
- package/lib/actor/process/index.js +45 -53
- package/lib/actor/process/index.js.map +1 -1
- package/lib/actor/process/script.js +37 -46
- package/lib/actor/process/script.js.map +1 -1
- package/lib/actor/resident/api.d.ts +9 -0
- package/lib/actor/resident/api.ts +10 -0
- package/lib/actor/resident/case/function.js +10 -11
- package/lib/actor/resident/case/function.js.map +1 -1
- package/lib/actor/resident/case/index.js +18 -35
- package/lib/actor/resident/case/index.js.map +1 -1
- package/lib/actor/resident/immutable/callback.js +3 -21
- package/lib/actor/resident/immutable/callback.js.map +1 -1
- package/lib/actor/resident/immutable/index.js +11 -33
- package/lib/actor/resident/immutable/index.js.map +1 -1
- package/lib/actor/resident/index.d.ts +2 -0
- package/lib/actor/resident/index.js +48 -49
- package/lib/actor/resident/index.js.map +1 -1
- package/lib/actor/resident/index.ts +13 -0
- package/lib/actor/resident/mutable/index.js +12 -28
- package/lib/actor/resident/mutable/index.js.map +1 -1
- package/lib/actor/resident/scripts.js +62 -96
- package/lib/actor/resident/scripts.js.map +1 -1
- package/lib/actor/resident/scripts.ts +1 -2
- package/lib/actor/resident/task.js +6 -24
- package/lib/actor/resident/task.js.map +1 -1
- package/lib/actor/system/error.js +3 -4
- package/lib/actor/system/error.js.map +1 -1
- package/lib/actor/system/vm/conf.js +5 -4
- package/lib/actor/system/vm/conf.js.map +1 -1
- package/lib/actor/system/vm/event.js +17 -17
- package/lib/actor/system/vm/event.js.map +1 -1
- package/lib/actor/system/vm/index.d.ts +3 -3
- package/lib/actor/system/vm/index.js +201 -284
- package/lib/actor/system/vm/index.js.map +1 -1
- package/lib/actor/system/vm/index.ts +2 -2
- package/lib/actor/system/vm/runtime/context.js +6 -5
- package/lib/actor/system/vm/runtime/context.js.map +1 -1
- package/lib/actor/system/vm/runtime/error.js +119 -196
- package/lib/actor/system/vm/runtime/error.js.map +1 -1
- package/lib/actor/system/vm/runtime/heap/ledger.js +58 -64
- package/lib/actor/system/vm/runtime/heap/ledger.js.map +1 -1
- package/lib/actor/system/vm/runtime/op/actor.js +24 -16
- package/lib/actor/system/vm/runtime/op/actor.js.map +1 -1
- package/lib/actor/system/vm/runtime/op/base.js +53 -35
- package/lib/actor/system/vm/runtime/op/base.js.map +1 -1
- package/lib/actor/system/vm/runtime/op/index.js +74 -85
- package/lib/actor/system/vm/runtime/op/index.js.map +1 -1
- package/lib/actor/system/vm/runtime/op/object.js +14 -11
- package/lib/actor/system/vm/runtime/op/object.js.map +1 -1
- package/lib/actor/system/vm/runtime/stack/frame.js +93 -110
- package/lib/actor/system/vm/runtime/stack/frame.js.map +1 -1
- package/lib/actor/system/vm/script/index.js +9 -12
- package/lib/actor/system/vm/script/index.js.map +1 -1
- package/lib/actor/system/vm/script/info.js +116 -177
- package/lib/actor/system/vm/script/info.js.map +1 -1
- package/lib/actor/system/vm/scripts/factory.js +12 -15
- package/lib/actor/system/vm/scripts/factory.js.map +1 -1
- package/lib/actor/system/vm/scripts/index.js +12 -34
- package/lib/actor/system/vm/scripts/index.js.map +1 -1
- package/lib/actor/system/vm/state.js +40 -40
- package/lib/actor/system/vm/state.js.map +1 -1
- package/lib/actor/system/vm/thread/index.d.ts +16 -24
- package/lib/actor/system/vm/thread/index.js +3 -4
- package/lib/actor/system/vm/thread/index.js.map +1 -1
- package/lib/actor/system/vm/thread/index.ts +16 -26
- package/lib/actor/system/vm/thread/shared/index.d.ts +31 -12
- package/lib/actor/system/vm/thread/shared/index.js +130 -127
- package/lib/actor/system/vm/thread/shared/index.js.map +1 -1
- package/lib/actor/system/vm/thread/shared/index.ts +118 -51
- package/lib/actor/system/vm/thread/shared/scheduler.d.ts +38 -0
- package/lib/actor/system/vm/thread/shared/scheduler.js +62 -0
- package/lib/actor/system/vm/thread/shared/scheduler.js.map +1 -0
- package/lib/actor/system/vm/thread/shared/scheduler.ts +84 -0
- package/lib/actor/system/vm/type.js +2 -3
- package/lib/actor/system/vm/type.js.map +1 -1
- package/lib/tsconfig.json +1 -1
- package/package.json +2 -2
- package/lib/actor/system/vm/thread/shared/runner.d.ts +0 -55
- package/lib/actor/system/vm/thread/shared/runner.js +0 -122
- package/lib/actor/system/vm/thread/shared/runner.js.map +0 -1
- package/lib/actor/system/vm/thread/shared/runner.ts +0 -157
package/lib/actor/address.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isGroup = exports.isChild = exports.getId = exports.getParent = exports.make = exports.isRestricted = exports.ADDRESS_RESTRICTED = exports.ADDRESS_EMPTY = exports.ADDRESS_SYSTEM = exports.ADDRESS_DISCARD = exports.SEPERATOR = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
const array_1 = require("@quenk/noni/lib/data/array");
|
|
5
|
+
const string_1 = require("@quenk/noni/lib/data/string");
|
|
6
6
|
exports.SEPERATOR = '/';
|
|
7
7
|
exports.ADDRESS_DISCARD = '?';
|
|
8
8
|
exports.ADDRESS_SYSTEM = '$';
|
|
@@ -15,35 +15,33 @@ exports.ADDRESS_RESTRICTED = [
|
|
|
15
15
|
/**
|
|
16
16
|
* isRestricted indicates whether an actor id is restricted or not.
|
|
17
17
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
18
|
+
const isRestricted = (id) => ((exports.ADDRESS_RESTRICTED.some(a => id.indexOf(a) > -1)) && (id !== exports.SEPERATOR));
|
|
19
|
+
exports.isRestricted = isRestricted;
|
|
21
20
|
/**
|
|
22
21
|
* make a child address given its id and parent address.
|
|
23
22
|
*/
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
};
|
|
23
|
+
const make = (parent, id) => ((parent === exports.SEPERATOR) || (parent === exports.ADDRESS_EMPTY)) ?
|
|
24
|
+
`${parent}${id}` :
|
|
25
|
+
(parent === exports.ADDRESS_SYSTEM) ?
|
|
26
|
+
id :
|
|
27
|
+
`${parent}${exports.SEPERATOR}${id}`;
|
|
28
|
+
exports.make = make;
|
|
31
29
|
/**
|
|
32
30
|
* getParent computes the parent of an Address.
|
|
33
31
|
*/
|
|
34
|
-
|
|
32
|
+
const getParent = (addr) => {
|
|
35
33
|
if (((addr === exports.ADDRESS_SYSTEM) ||
|
|
36
34
|
(addr === exports.ADDRESS_EMPTY) ||
|
|
37
35
|
(addr === exports.ADDRESS_DISCARD) || (addr === exports.SEPERATOR))) {
|
|
38
36
|
return exports.ADDRESS_SYSTEM;
|
|
39
37
|
}
|
|
40
38
|
else {
|
|
41
|
-
|
|
39
|
+
let b4 = addr.split(exports.SEPERATOR);
|
|
42
40
|
if ((b4.length === 2) && (b4[0] === '')) {
|
|
43
41
|
return exports.SEPERATOR;
|
|
44
42
|
}
|
|
45
43
|
else {
|
|
46
|
-
|
|
44
|
+
let a = b4
|
|
47
45
|
.reverse()
|
|
48
46
|
.slice(1)
|
|
49
47
|
.reverse()
|
|
@@ -52,27 +50,25 @@ exports.getParent = function (addr) {
|
|
|
52
50
|
}
|
|
53
51
|
}
|
|
54
52
|
};
|
|
53
|
+
exports.getParent = getParent;
|
|
55
54
|
/**
|
|
56
55
|
* getId provides the id part of an actor address.
|
|
57
56
|
*/
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
};
|
|
57
|
+
const getId = (addr) => ((addr === exports.ADDRESS_SYSTEM) ||
|
|
58
|
+
(addr === exports.ADDRESS_DISCARD) ||
|
|
59
|
+
(addr === exports.ADDRESS_EMPTY) ||
|
|
60
|
+
(addr === exports.SEPERATOR)) ?
|
|
61
|
+
addr :
|
|
62
|
+
(0, array_1.tail)(addr.split(exports.SEPERATOR));
|
|
63
|
+
exports.getId = getId;
|
|
66
64
|
/**
|
|
67
65
|
* isChild tests whether an address is a child of the parent address.
|
|
68
66
|
*/
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
};
|
|
67
|
+
const isChild = (parent, child) => (parent === exports.ADDRESS_SYSTEM) || (parent !== child) && (0, string_1.startsWith)(child, parent);
|
|
68
|
+
exports.isChild = isChild;
|
|
72
69
|
/**
|
|
73
70
|
* isGroup determines if an address is a group reference.
|
|
74
71
|
*/
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
};
|
|
72
|
+
const isGroup = (addr) => ((addr[0] === '$') && (addr !== '$'));
|
|
73
|
+
exports.isGroup = isGroup;
|
|
78
74
|
//# sourceMappingURL=address.js.map
|
package/lib/actor/address.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"address.js","sourceRoot":"","sources":["address.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"address.js","sourceRoot":"","sources":["address.ts"],"names":[],"mappings":"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"}
|
package/lib/actor/flags.js
CHANGED
|
@@ -10,23 +10,21 @@ exports.FLAG_EXIT_AFTER_RUN = 32;
|
|
|
10
10
|
/**
|
|
11
11
|
* isImmutable flag test.
|
|
12
12
|
*/
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
};
|
|
13
|
+
const isImmutable = (f) => (f & exports.FLAG_IMMUTABLE) === exports.FLAG_IMMUTABLE;
|
|
14
|
+
exports.isImmutable = isImmutable;
|
|
16
15
|
/**
|
|
17
16
|
* isBuffered flag test.
|
|
18
17
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
};
|
|
18
|
+
const isBuffered = (f) => (f & exports.FLAG_BUFFERED) === exports.FLAG_BUFFERED;
|
|
19
|
+
exports.isBuffered = isBuffered;
|
|
22
20
|
/**
|
|
23
21
|
* isRouter flag test.
|
|
24
22
|
*/
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
};
|
|
23
|
+
const isRouter = (f) => (f & exports.FLAG_ROUTER) === exports.FLAG_ROUTER;
|
|
24
|
+
exports.isRouter = isRouter;
|
|
28
25
|
/**
|
|
29
26
|
* isResident flag test.
|
|
30
27
|
*/
|
|
31
|
-
|
|
28
|
+
const isResident = (f) => (f & exports.FLAG_RESIDENT) === exports.FLAG_RESIDENT;
|
|
29
|
+
exports.isResident = isResident;
|
|
32
30
|
//# sourceMappingURL=flags.js.map
|
package/lib/actor/flags.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flags.js","sourceRoot":"","sources":["flags.ts"],"names":[],"mappings":";;;AACa,QAAA,cAAc,GAAG,CAAC,CAAC;AACnB,QAAA,aAAa,GAAG,CAAC,CAAC;AAClB,QAAA,uBAAuB,GAAG,CAAC,CAAA;AAC3B,QAAA,WAAW,GAAG,CAAC,CAAC;AAChB,QAAA,aAAa,GAAG,EAAE,CAAC;AACnB,QAAA,mBAAmB,GAAG,EAAE,CAAC;AAQtC;;GAEG;
|
|
1
|
+
{"version":3,"file":"flags.js","sourceRoot":"","sources":["flags.ts"],"names":[],"mappings":";;;AACa,QAAA,cAAc,GAAG,CAAC,CAAC;AACnB,QAAA,aAAa,GAAG,CAAC,CAAC;AAClB,QAAA,uBAAuB,GAAG,CAAC,CAAA;AAC3B,QAAA,WAAW,GAAG,CAAC,CAAC;AAChB,QAAA,aAAa,GAAG,EAAE,CAAC;AACnB,QAAA,mBAAmB,GAAG,EAAE,CAAC;AAQtC;;GAEG;AACI,MAAM,WAAW,GAAG,CAAC,CAAQ,EAAE,EAAE,CACpC,CAAC,CAAC,GAAG,sBAAc,CAAC,KAAK,sBAAc,CAAC;AAD/B,QAAA,WAAW,eACoB;AAE5C;;GAEG;AACI,MAAM,UAAU,GAAG,CAAC,CAAQ,EAAE,EAAE,CACnC,CAAC,CAAC,GAAG,qBAAa,CAAC,KAAK,qBAAa,CAAC;AAD7B,QAAA,UAAU,cACmB;AAE1C;;GAEG;AACI,MAAM,QAAQ,GAAG,CAAC,CAAQ,EAAE,EAAE,CACjC,CAAC,CAAC,GAAG,mBAAW,CAAC,KAAK,mBAAW,CAAC;AADzB,QAAA,QAAQ,YACiB;AAEtC;;GAEG;AACI,MAAM,UAAU,GAAG,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,qBAAa,CAAC,KAAK,qBAAa,CAAC;AAAjE,QAAA,UAAU,cAAuD"}
|
package/lib/actor/mailbox.js
CHANGED
|
@@ -6,13 +6,12 @@ exports.Envelope = void 0;
|
|
|
6
6
|
*
|
|
7
7
|
* Used to internally keep track of message sources and destintations.
|
|
8
8
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
class Envelope {
|
|
10
|
+
constructor(to, from, message) {
|
|
11
11
|
this.to = to;
|
|
12
12
|
this.from = from;
|
|
13
13
|
this.message = message;
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
}());
|
|
15
|
+
}
|
|
17
16
|
exports.Envelope = Envelope;
|
|
18
17
|
//# sourceMappingURL=mailbox.js.map
|
package/lib/actor/mailbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mailbox.js","sourceRoot":"","sources":["mailbox.ts"],"names":[],"mappings":";;;AAOA;;;;GAIG;AACH;
|
|
1
|
+
{"version":3,"file":"mailbox.js","sourceRoot":"","sources":["mailbox.ts"],"names":[],"mappings":";;;AAOA;;;;GAIG;AACH,MAAa,QAAQ;IAEnB,YACS,EAAU,EACV,IAAY,EACZ,OAAgB;QAFhB,OAAE,GAAF,EAAE,CAAQ;QACV,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAS;IAAI,CAAC;CAE/B;AAPD,4BAOC"}
|
package/lib/actor/message.js
CHANGED
|
@@ -6,13 +6,12 @@ exports.Envelope = void 0;
|
|
|
6
6
|
*
|
|
7
7
|
* Used to internally keep track of message sources and destintations.
|
|
8
8
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
class Envelope {
|
|
10
|
+
constructor(to, from, message) {
|
|
11
11
|
this.to = to;
|
|
12
12
|
this.from = from;
|
|
13
13
|
this.message = message;
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
}());
|
|
15
|
+
}
|
|
17
16
|
exports.Envelope = Envelope;
|
|
18
17
|
//# sourceMappingURL=message.js.map
|
package/lib/actor/message.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.js","sourceRoot":"","sources":["message.ts"],"names":[],"mappings":";;;AAMA;;;;GAIG;AACH;
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["message.ts"],"names":[],"mappings":";;;AAMA;;;;GAIG;AACH,MAAa,QAAQ;IAEnB,YACS,EAAU,EACV,IAAY,EACZ,OAAgB;QAFhB,OAAE,GAAF,EAAE,CAAQ;QACV,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAS;IAAI,CAAC;CAE/B;AAPD,4BAOC"}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Process = exports.SCRIPT_PATH = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
exports.SCRIPT_PATH = __dirname
|
|
13
|
-
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const child_process_1 = require("child_process");
|
|
6
|
+
const match_1 = require("@quenk/noni/lib/control/match");
|
|
7
|
+
const type_1 = require("@quenk/noni/lib/data/type");
|
|
8
|
+
const op_1 = require("../system/vm/runtime/op");
|
|
9
|
+
const address_1 = require("../address");
|
|
10
|
+
const flags_1 = require("../flags");
|
|
11
|
+
const address_2 = require("../address");
|
|
12
|
+
exports.SCRIPT_PATH = `${__dirname}/../../../lib/actor/process/script.js`;
|
|
13
|
+
const raiseShape = {
|
|
14
14
|
code: op_1.RAISE,
|
|
15
15
|
src: String,
|
|
16
16
|
dest: String,
|
|
17
17
|
message: String,
|
|
18
18
|
stack: String
|
|
19
19
|
};
|
|
20
|
-
|
|
20
|
+
const tellShape = {
|
|
21
21
|
code: op_1.SEND,
|
|
22
22
|
to: String,
|
|
23
23
|
from: String,
|
|
@@ -39,68 +39,60 @@ var tellShape = {
|
|
|
39
39
|
* Node's builtin child_process API to monitor and receive
|
|
40
40
|
* messages from the child process.
|
|
41
41
|
*/
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
if (script === void 0) { script = exports.SCRIPT_PATH; }
|
|
42
|
+
class Process {
|
|
43
|
+
constructor(module, system, script = exports.SCRIPT_PATH) {
|
|
45
44
|
this.module = module;
|
|
46
45
|
this.system = system;
|
|
47
46
|
this.script = script;
|
|
48
47
|
this.process = nullHandle;
|
|
49
|
-
this.self =
|
|
48
|
+
this.self = () => address_2.ADDRESS_DISCARD;
|
|
50
49
|
}
|
|
51
|
-
|
|
50
|
+
init(c) {
|
|
52
51
|
c.flags = c.flags | flags_1.FLAG_IMMUTABLE | flags_1.FLAG_ROUTER;
|
|
53
52
|
return c;
|
|
54
|
-
}
|
|
55
|
-
|
|
53
|
+
}
|
|
54
|
+
accept(e) {
|
|
56
55
|
this.process.send(e);
|
|
57
56
|
return this;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
}
|
|
58
|
+
notify() { }
|
|
59
|
+
stop() {
|
|
61
60
|
this.process.kill();
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
p.on('error', function (e) { return _this.system.getPlatform().raise(_this, e); });
|
|
61
|
+
}
|
|
62
|
+
start(addr) {
|
|
63
|
+
this.self = () => addr;
|
|
64
|
+
let p = (0, child_process_1.fork)((0, path_1.resolve)(this.script), [], spawnOpts(this));
|
|
65
|
+
p.on('error', e => this.system.getPlatform().raise(this, e));
|
|
68
66
|
//TODO: What should we do with invalid messages?
|
|
69
|
-
p.on('message',
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
_this.process = nullHandle;
|
|
78
|
-
_this.system.getPlatform().kill(_this, _this.self());
|
|
67
|
+
p.on('message', (m) => (0, match_1.match)(m)
|
|
68
|
+
.caseOf(tellShape, handleTell(this))
|
|
69
|
+
.caseOf(raiseShape, handleRaise(this))
|
|
70
|
+
.orElse(() => { })
|
|
71
|
+
.end());
|
|
72
|
+
p.on('exit', () => {
|
|
73
|
+
this.process = nullHandle;
|
|
74
|
+
this.system.getPlatform().kill(this, this.self());
|
|
79
75
|
});
|
|
80
76
|
this.process = p;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
}());
|
|
77
|
+
}
|
|
78
|
+
}
|
|
84
79
|
exports.Process = Process;
|
|
85
|
-
|
|
86
|
-
send
|
|
87
|
-
kill
|
|
80
|
+
const nullHandle = {
|
|
81
|
+
send() { },
|
|
82
|
+
kill() { }
|
|
88
83
|
};
|
|
89
|
-
|
|
84
|
+
const spawnOpts = (p) => ({
|
|
90
85
|
env: {
|
|
91
|
-
POTOO_ACTOR_ID: address_1.getId(p.self()),
|
|
86
|
+
POTOO_ACTOR_ID: (0, address_1.getId)(p.self()),
|
|
92
87
|
POTOO_ACTOR_ADDRESS: p.self(),
|
|
93
88
|
POTOO_ACTOR_MODULE: p.module,
|
|
94
89
|
POTOO_PVM_CONF: process.env.POTOO_PVM_CONF
|
|
95
90
|
}
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
var handleRaise = function (p) { return function (_a) {
|
|
101
|
-
var message = _a.message, stack = _a.stack;
|
|
102
|
-
var err = new Error(message);
|
|
91
|
+
});
|
|
92
|
+
const handleTell = (p) => (m) => p.system.getPlatform().tell(m.to, m.message);
|
|
93
|
+
const handleRaise = (p) => ({ message, stack }) => {
|
|
94
|
+
let err = new Error(message);
|
|
103
95
|
err.stack = stack;
|
|
104
96
|
p.system.getPlatform().raise(p, err);
|
|
105
|
-
};
|
|
97
|
+
};
|
|
106
98
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,54 +1,52 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
const match_1 = require("@quenk/noni/lib/control/match");
|
|
4
|
+
const type_1 = require("@quenk/noni/lib/data/type");
|
|
5
|
+
const record_1 = require("@quenk/noni/lib/data/record");
|
|
6
|
+
const json_1 = require("@quenk/noni/lib/data/json");
|
|
7
|
+
const op_1 = require("../system/vm/runtime/op");
|
|
8
|
+
const event_1 = require("../system/vm/event");
|
|
9
|
+
const vm_1 = require("../system/vm");
|
|
10
10
|
//ENV vars:
|
|
11
11
|
//POTOO_ACTOR_ID
|
|
12
12
|
//POTOO_ACTOR_ADDRESS
|
|
13
13
|
//POTOO_PVM_CONF
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
_a[event_1.EVENT_SEND_FAILED] = function (from, _, to, message) { return process.send({
|
|
14
|
+
class Sys {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.vm = vm_1.PVM.create(this, (0, record_1.rmerge)(getConf(), {
|
|
17
|
+
on: {
|
|
18
|
+
[event_1.EVENT_SEND_FAILED]: (from, _, to, message) => process.send({
|
|
20
19
|
code: op_1.SEND,
|
|
21
|
-
to
|
|
22
|
-
from
|
|
23
|
-
message
|
|
24
|
-
})
|
|
25
|
-
|
|
20
|
+
to,
|
|
21
|
+
from,
|
|
22
|
+
message
|
|
23
|
+
})
|
|
24
|
+
}
|
|
26
25
|
}));
|
|
27
26
|
}
|
|
28
|
-
|
|
27
|
+
getPlatform() {
|
|
29
28
|
return this.vm;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
var tellShape = {
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const id = process.env.POTOO_ACTOR_ID;
|
|
32
|
+
const address = process.env.POTOO_ACTOR_ADDRESS;
|
|
33
|
+
const tellShape = {
|
|
36
34
|
to: String,
|
|
37
35
|
from: String,
|
|
38
36
|
message: type_1.Any
|
|
39
37
|
};
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if (type_1.isString(process.env.POTOO_PVM_CONF)) {
|
|
43
|
-
|
|
38
|
+
const defaultConf = {};
|
|
39
|
+
const getConf = () => {
|
|
40
|
+
if ((0, type_1.isString)(process.env.POTOO_PVM_CONF)) {
|
|
41
|
+
let econf = (0, json_1.parse)(process.env.POTOO_PVM_CONF);
|
|
44
42
|
if (econf.isRight())
|
|
45
43
|
return econf.takeRight();
|
|
46
44
|
}
|
|
47
45
|
return defaultConf;
|
|
48
46
|
};
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
process.on('uncaughtException',
|
|
47
|
+
const main = () => {
|
|
48
|
+
let sys = new Sys();
|
|
49
|
+
process.on('uncaughtException', e => {
|
|
52
50
|
process.send({
|
|
53
51
|
code: op_1.RAISE,
|
|
54
52
|
message: e.message,
|
|
@@ -59,24 +57,17 @@ var main = function () {
|
|
|
59
57
|
process.exit(-1);
|
|
60
58
|
});
|
|
61
59
|
sys.vm.spawn(sys.vm, {
|
|
62
|
-
id
|
|
63
|
-
create:
|
|
60
|
+
id,
|
|
61
|
+
create: (s) => {
|
|
64
62
|
//TODO: Handle invalid messages?
|
|
65
|
-
process.on('message',
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
.end();
|
|
70
|
-
});
|
|
63
|
+
process.on('message', (m) => (0, match_1.match)(m)
|
|
64
|
+
.caseOf(tellShape, filterTell(sys.vm))
|
|
65
|
+
.orElse(() => { })
|
|
66
|
+
.end());
|
|
71
67
|
return require(process.env.POTOO_ACTOR_MODULE).create(s);
|
|
72
68
|
}
|
|
73
69
|
});
|
|
74
70
|
};
|
|
75
|
-
|
|
76
|
-
return function (_a) {
|
|
77
|
-
var to = _a.to, message = _a.message;
|
|
78
|
-
return vm.tell(to, message);
|
|
79
|
-
};
|
|
80
|
-
};
|
|
71
|
+
const filterTell = (vm) => ({ to, message }) => vm.tell(to, message);
|
|
81
72
|
main();
|
|
82
73
|
//# sourceMappingURL=script.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script.js","sourceRoot":"","sources":["script.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"script.js","sourceRoot":"","sources":["script.ts"],"names":[],"mappings":";;AAAA,yDAAsD;AACtD,oDAA0D;AAC1D,wDAAqD;AACrD,oDAAkD;AAElD,gDAAsD;AACtD,8CAAuD;AAEvD,qCAAmC;AAKnC,WAAW;AACX,gBAAgB;AAChB,qBAAqB;AACrB,gBAAgB;AAEhB,MAAM,GAAG;IAAT;QAEI,OAAE,GAAQ,QAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAA,eAAM,EAAC,OAAO,EAAE,EAAE;YAEzC,EAAE,EAAE;gBAEA,CAAC,yBAAiB,CAAC,EAAE,CACjB,IAAa,EACb,CAAS,EACT,EAAW,EACX,OAAgB,EAAE,EAAE,CAAY,OAAO,CAAC,IAAK,CAAC;oBAE1C,IAAI,EAAE,SAAI;oBACV,EAAE;oBACF,IAAI;oBACJ,OAAO;iBAEV,CAAC;aAET;SAEJ,CAAC,CAAC,CAAC;IAQR,CAAC;IANG,WAAW;QAEP,OAAO,IAAI,CAAC,EAAE,CAAC;IAEnB,CAAC;CAEJ;AAED,MAAM,EAAE,GAAW,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAE9C,MAAM,OAAO,GAAW,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAExD,MAAM,SAAS,GAAG;IAEd,EAAE,EAAE,MAAM;IAEV,IAAI,EAAE,MAAM;IAEZ,OAAO,EAAE,UAAG;CAEf,CAAA;AAED,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,MAAM,OAAO,GAAG,GAAkB,EAAE;IAEhC,IAAI,IAAA,eAAQ,EAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;QAEtC,IAAI,KAAK,GAAG,IAAA,YAAK,EAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAE9C,IAAI,KAAK,CAAC,OAAO,EAAE;YAAE,OAAsB,KAAK,CAAC,SAAS,EAAE,CAAC;KAEhE;IAED,OAAO,WAAW,CAAC;AAEvB,CAAC,CAAA;AAED,MAAM,IAAI,GAAG,GAAG,EAAE;IAEd,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IAEpB,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE;QAErB,OAAO,CAAC,IAAK,CAAC;YAErB,IAAI,EAAE,UAAK;YACX,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,GAAG,EAAE,OAAO;YACZ,IAAI,EAAE,OAAO;SAEhB,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAErB,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE;QAEjB,EAAE;QAEF,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;YAElB,gCAAgC;YAChC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAU,EAAE,EAAE,CACjC,IAAA,aAAK,EAAC,CAAC,CAAC;iBACH,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBACrC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBACjB,GAAG,EAAE,CAAC,CAAC;YAEhB,OAAO,OAAO,CAAS,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAErE,CAAC;KAEJ,CAAC,CAAC;AAEP,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,EAAO,EAAE,EAAE,CAC3B,CAAC,EAAE,EAAE,EAAE,OAAO,EAAoC,EAAE,EAAE,CAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AAEvF,IAAI,EAAE,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Err } from '@quenk/noni/lib/control/error';
|
|
2
|
+
import { Future } from '@quenk/noni/lib/control/monad/future';
|
|
2
3
|
import { Address, AddressMap } from '../address';
|
|
3
4
|
import { Spawnable, Templates } from '../template';
|
|
4
5
|
/**
|
|
@@ -33,6 +34,14 @@ export interface Api extends Spawner {
|
|
|
33
34
|
* kill a child actor.
|
|
34
35
|
*/
|
|
35
36
|
kill(addr: Address): Api;
|
|
37
|
+
/**
|
|
38
|
+
* wait on a Future to complete blocking the actor until it does.
|
|
39
|
+
*
|
|
40
|
+
* The blocking only occurs in the VM and not the JS event loop. Errors are
|
|
41
|
+
* propagated through the event handling machinery and any return values
|
|
42
|
+
* are ignored.
|
|
43
|
+
*/
|
|
44
|
+
wait(ft: Future<void>): void;
|
|
36
45
|
/**
|
|
37
46
|
* exit instructs the system to kill off this actor.
|
|
38
47
|
*/
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Err } from '@quenk/noni/lib/control/error';
|
|
2
|
+
import { Future } from '@quenk/noni/lib/control/monad/future';
|
|
2
3
|
|
|
3
4
|
import { Address, AddressMap } from '../address';
|
|
4
5
|
import { Spawnable, Templates } from '../template';
|
|
@@ -47,6 +48,15 @@ export interface Api extends Spawner {
|
|
|
47
48
|
*/
|
|
48
49
|
kill(addr: Address): Api;
|
|
49
50
|
|
|
51
|
+
/**
|
|
52
|
+
* wait on a Future to complete blocking the actor until it does.
|
|
53
|
+
*
|
|
54
|
+
* The blocking only occurs in the VM and not the JS event loop. Errors are
|
|
55
|
+
* propagated through the event handling machinery and any return values
|
|
56
|
+
* are ignored.
|
|
57
|
+
*/
|
|
58
|
+
wait(ft: Future<void>) : void
|
|
59
|
+
|
|
50
60
|
/**
|
|
51
61
|
* exit instructs the system to kill off this actor.
|
|
52
62
|
*/
|
|
@@ -7,29 +7,28 @@ exports.CaseFunction = void 0;
|
|
|
7
7
|
* It combines mutliple Case classes into one serving effectively as a pattern
|
|
8
8
|
* matching function.
|
|
9
9
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
class CaseFunction {
|
|
11
|
+
constructor(cases) {
|
|
12
12
|
this.cases = cases;
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* test whether at least one of the underlying Case classes will handle the
|
|
16
16
|
* Message.
|
|
17
17
|
*/
|
|
18
|
-
|
|
19
|
-
return this.cases.some(
|
|
20
|
-
}
|
|
18
|
+
test(msg) {
|
|
19
|
+
return this.cases.some(kase => kase.test(msg));
|
|
20
|
+
}
|
|
21
21
|
/**
|
|
22
22
|
* apply the first Case class that will handle the provided Message.
|
|
23
23
|
*
|
|
24
24
|
* Throws if none of them will.
|
|
25
25
|
*/
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
apply(msg) {
|
|
27
|
+
let kase = this.cases.find(kase => kase.test(msg));
|
|
28
28
|
if (!kase)
|
|
29
|
-
throw new Error(
|
|
29
|
+
throw new Error(`CaseFunction: No Case patterns match!`);
|
|
30
30
|
return kase.apply(msg);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
}());
|
|
31
|
+
}
|
|
32
|
+
}
|
|
34
33
|
exports.CaseFunction = CaseFunction;
|
|
35
34
|
//# sourceMappingURL=function.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.js","sourceRoot":"","sources":["function.ts"],"names":[],"mappings":";;;AAIA;;;;;GAKG;AACH;
|
|
1
|
+
{"version":3,"file":"function.js","sourceRoot":"","sources":["function.ts"],"names":[],"mappings":";;;AAIA;;;;;GAKG;AACH,MAAa,YAAY;IAErB,YAAmB,KAAgB;QAAhB,UAAK,GAAL,KAAK,CAAW;IAAI,CAAC;IAExC;;;OAGG;IACH,IAAI,CAAC,GAAY;QAEb,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAEnD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,GAAY;QAEd,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAEnD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAEpE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE3B,CAAC;CAEJ;AA7BD,oCA6BC"}
|