@quenk/potoo 3.0.3-0 → 3.1.0-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.d.ts +0 -4
- package/lib/actor/address.js +1 -6
- package/lib/actor/address.js.map +1 -1
- package/lib/actor/address.ts +0 -7
- package/lib/actor/flags.d.ts +7 -1
- package/lib/actor/flags.js +11 -5
- package/lib/actor/flags.js.map +1 -1
- package/lib/actor/flags.ts +11 -4
- package/lib/actor/process/index.d.ts +1 -1
- package/lib/actor/process/index.js +12 -13
- package/lib/actor/process/index.js.map +1 -1
- package/lib/actor/process/index.ts +23 -19
- package/lib/actor/process/script.js +6 -9
- package/lib/actor/process/script.js.map +1 -1
- package/lib/actor/process/script.ts +8 -19
- package/lib/actor/resident/api.d.ts +0 -6
- package/lib/actor/resident/api.ts +0 -8
- package/lib/actor/resident/case/function.d.ts +24 -0
- package/lib/actor/resident/case/function.js +35 -0
- package/lib/actor/resident/case/function.js.map +1 -0
- package/lib/actor/resident/case/function.ts +40 -0
- package/lib/actor/resident/{case.d.ts → case/index.d.ts} +18 -2
- package/lib/actor/resident/{case.js → case/index.js} +6 -2
- package/lib/actor/resident/case/index.js.map +1 -0
- package/lib/actor/resident/{case.ts → case/index.ts} +30 -3
- package/lib/actor/resident/immutable/callback.d.ts +9 -0
- package/lib/actor/resident/immutable/callback.js +32 -0
- package/lib/actor/resident/immutable/callback.js.map +1 -0
- package/lib/actor/resident/immutable/callback.ts +9 -0
- package/lib/actor/resident/immutable/index.d.ts +17 -0
- package/lib/actor/resident/immutable/index.js +50 -0
- package/lib/actor/resident/immutable/index.js.map +1 -0
- package/lib/actor/resident/immutable/index.ts +38 -0
- package/lib/actor/resident/index.d.ts +6 -44
- package/lib/actor/resident/index.js +29 -132
- package/lib/actor/resident/index.js.map +1 -1
- package/lib/actor/resident/index.ts +28 -143
- package/lib/actor/resident/mutable/index.d.ts +18 -0
- package/lib/actor/resident/mutable/index.js +47 -0
- package/lib/actor/resident/mutable/index.js.map +1 -0
- package/lib/actor/resident/mutable/index.ts +39 -0
- package/lib/actor/resident/scripts.d.ts +26 -71
- package/lib/actor/resident/scripts.js +132 -184
- package/lib/actor/resident/scripts.js.map +1 -1
- package/lib/actor/resident/scripts.ts +95 -192
- package/lib/actor/resident/task.d.ts +11 -0
- package/lib/actor/resident/task.js +37 -0
- package/lib/actor/resident/task.js.map +1 -0
- package/lib/actor/resident/task.ts +21 -0
- package/lib/actor/system/index.d.ts +7 -12
- package/lib/actor/system/index.ts +7 -14
- package/lib/actor/system/vm/index.d.ts +73 -62
- package/lib/actor/system/vm/index.js +237 -207
- package/lib/actor/system/vm/index.js.map +1 -1
- package/lib/actor/system/vm/index.ts +303 -290
- package/lib/actor/system/vm/runtime/context.d.ts +9 -1
- package/lib/actor/system/vm/runtime/context.js +2 -1
- package/lib/actor/system/vm/runtime/context.js.map +1 -1
- package/lib/actor/system/vm/runtime/context.ts +13 -1
- package/lib/actor/system/vm/runtime/error.d.ts +16 -2
- package/lib/actor/system/vm/runtime/error.js +38 -9
- package/lib/actor/system/vm/runtime/error.js.map +1 -1
- package/lib/actor/system/vm/runtime/error.ts +34 -4
- package/lib/actor/system/vm/runtime/heap/index.d.ts +1 -46
- package/lib/actor/system/vm/runtime/heap/index.js +0 -85
- package/lib/actor/system/vm/runtime/heap/index.js.map +1 -1
- package/lib/actor/system/vm/runtime/heap/index.ts +1 -126
- package/lib/actor/system/vm/runtime/heap/ledger.d.ts +111 -0
- package/lib/actor/system/vm/runtime/heap/ledger.js +94 -0
- package/lib/actor/system/vm/runtime/heap/ledger.js.map +1 -0
- package/lib/actor/system/vm/runtime/heap/ledger.ts +252 -0
- package/lib/actor/system/vm/runtime/index.d.ts +0 -70
- package/lib/actor/system/vm/runtime/index.js +1 -0
- package/lib/actor/system/vm/runtime/index.js.map +1 -1
- package/lib/actor/system/vm/runtime/index.ts +0 -84
- package/lib/actor/system/vm/runtime/op/actor.d.ts +12 -26
- package/lib/actor/system/vm/runtime/op/actor.js +5 -43
- package/lib/actor/system/vm/runtime/op/actor.js.map +1 -1
- package/lib/actor/system/vm/runtime/op/actor.ts +14 -67
- package/lib/actor/system/vm/runtime/op/base.d.ts +20 -19
- package/lib/actor/system/vm/runtime/op/base.js.map +1 -1
- package/lib/actor/system/vm/runtime/op/base.ts +20 -19
- package/lib/actor/system/vm/runtime/op/index.d.ts +5 -6
- package/lib/actor/system/vm/runtime/op/index.js +1 -13
- package/lib/actor/system/vm/runtime/op/index.js.map +1 -1
- package/lib/actor/system/vm/runtime/op/index.ts +33 -54
- package/lib/actor/system/vm/runtime/op/object.d.ts +5 -4
- package/lib/actor/system/vm/runtime/op/object.js +2 -2
- package/lib/actor/system/vm/runtime/op/object.js.map +1 -1
- package/lib/actor/system/vm/runtime/op/object.ts +7 -6
- package/lib/actor/system/vm/runtime/stack/frame.d.ts +32 -18
- package/lib/actor/system/vm/runtime/stack/frame.js +54 -21
- package/lib/actor/system/vm/runtime/stack/frame.js.map +1 -1
- package/lib/actor/system/vm/runtime/stack/frame.ts +97 -34
- package/lib/actor/system/vm/script/info.d.ts +23 -34
- package/lib/actor/system/vm/script/info.js +160 -102
- package/lib/actor/system/vm/script/info.js.map +1 -1
- package/lib/actor/system/vm/script/info.ts +36 -39
- package/lib/actor/system/vm/scripts/factory.d.ts +12 -0
- package/lib/actor/system/vm/scripts/factory.js +39 -0
- package/lib/actor/system/vm/scripts/factory.js.map +1 -0
- package/lib/actor/system/vm/scripts/factory.ts +49 -0
- package/lib/actor/system/vm/scripts/index.d.ts +32 -0
- package/lib/actor/system/vm/scripts/index.js +76 -0
- package/lib/actor/system/vm/scripts/index.js.map +1 -0
- package/lib/actor/system/vm/scripts/index.ts +53 -0
- package/lib/actor/system/vm/state.d.ts +32 -12
- package/lib/actor/system/vm/state.js +27 -12
- package/lib/actor/system/vm/state.js.map +1 -1
- package/lib/actor/system/vm/state.ts +49 -20
- package/lib/actor/system/vm/thread/index.d.ts +113 -0
- package/lib/actor/system/vm/thread/index.js +9 -0
- package/lib/actor/system/vm/thread/index.js.map +1 -0
- package/lib/actor/system/vm/thread/index.ts +135 -0
- package/lib/actor/system/vm/thread/shared/index.d.ts +41 -0
- package/lib/actor/system/vm/thread/shared/index.js +158 -0
- package/lib/actor/system/vm/thread/shared/index.js.map +1 -0
- package/lib/actor/system/vm/thread/shared/index.ts +187 -0
- package/lib/actor/system/vm/thread/shared/runner.d.ts +50 -0
- package/lib/actor/system/vm/thread/shared/runner.js +115 -0
- package/lib/actor/system/vm/thread/shared/runner.js.map +1 -0
- package/lib/actor/system/vm/thread/shared/runner.ts +143 -0
- package/lib/actor/system/vm/type.d.ts +41 -5
- package/lib/actor/system/vm/type.js.map +1 -1
- package/lib/actor/system/vm/type.ts +51 -5
- package/lib/actor/template.d.ts +0 -11
- package/lib/actor/template.js +1 -12
- package/lib/actor/template.js.map +1 -1
- package/lib/actor/template.ts +1 -16
- package/package.json +5 -5
- package/lib/actor/resident/case.js.map +0 -1
- package/lib/actor/system/vm/runtime/heap/object/es.d.ts +0 -35
- package/lib/actor/system/vm/runtime/heap/object/es.js +0 -107
- package/lib/actor/system/vm/runtime/heap/object/es.js.map +0 -1
- package/lib/actor/system/vm/runtime/heap/object/es.ts +0 -161
- package/lib/actor/system/vm/runtime/heap/object/index.d.ts +0 -37
- package/lib/actor/system/vm/runtime/heap/object/index.js +0 -3
- package/lib/actor/system/vm/runtime/heap/object/index.js.map +0 -1
- package/lib/actor/system/vm/runtime/heap/object/index.ts +0 -46
- package/lib/actor/system/vm/runtime/thread.d.ts +0 -32
- package/lib/actor/system/vm/runtime/thread.js +0 -114
- package/lib/actor/system/vm/runtime/thread.js.map +0 -1
- package/lib/actor/system/vm/runtime/thread.ts +0 -171
package/lib/actor/address.d.ts
CHANGED
|
@@ -40,7 +40,3 @@ export declare const isChild: (parent: Address, child: Address) => boolean;
|
|
|
40
40
|
* isGroup determines if an address is a group reference.
|
|
41
41
|
*/
|
|
42
42
|
export declare const isGroup: (addr: Address) => boolean;
|
|
43
|
-
/**
|
|
44
|
-
* randomID generates a random id suitable for use by child actors.
|
|
45
|
-
*/
|
|
46
|
-
export declare const randomID: () => string;
|
package/lib/actor/address.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
var uuid = require("uuid");
|
|
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;
|
|
5
4
|
var array_1 = require("@quenk/noni/lib/data/array");
|
|
6
5
|
var string_1 = require("@quenk/noni/lib/data/string");
|
|
7
6
|
exports.SEPERATOR = '/';
|
|
@@ -76,8 +75,4 @@ exports.isChild = function (parent, child) {
|
|
|
76
75
|
exports.isGroup = function (addr) {
|
|
77
76
|
return ((addr[0] === '$') && (addr !== '$'));
|
|
78
77
|
};
|
|
79
|
-
/**
|
|
80
|
-
* randomID generates a random id suitable for use by child actors.
|
|
81
|
-
*/
|
|
82
|
-
exports.randomID = function () { return uuid.v4().split('-').join(''); };
|
|
83
78
|
//# 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":";;;AAAA,oDAAkD;AAClD,sDAAyD;AAE5C,QAAA,SAAS,GAAG,GAAG,CAAC;AAEhB,QAAA,eAAe,GAAG,GAAG,CAAC;AACtB,QAAA,cAAc,GAAG,GAAG,CAAC;AACrB,QAAA,aAAa,GAAG,EAAE,CAAC;AACnB,QAAA,kBAAkB,GAAG;IAC9B,uBAAe;IACf,sBAAc;IACd,iBAAS;CACZ,CAAC;AAmBF;;GAEG;AACU,QAAA,YAAY,GAAG,UAAC,EAAU;IACnC,OAAA,CAAC,CAAC,0BAAkB,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAlB,CAAkB,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,iBAAS,CAAC,CAAC;AAA1E,CAA0E,CAAC;AAE/E;;GAEG;AACU,QAAA,IAAI,GAAG,UAAC,MAAe,EAAE,EAAU;IAC5C,OAAA,CAAC,CAAC,MAAM,KAAK,iBAAS,CAAC,IAAI,CAAC,MAAM,KAAK,qBAAa,CAAC,CAAC,CAAC,CAAC;QACpD,KAAG,MAAM,GAAG,EAAI,CAAC,CAAC;QAClB,CAAC,MAAM,KAAK,sBAAc,CAAC,CAAC,CAAC;YACzB,EAAE,CAAC,CAAC;YACJ,KAAG,MAAM,GAAG,iBAAS,GAAG,EAAI;AAJpC,CAIoC,CAAC;AAEzC;;GAEG;AACU,QAAA,SAAS,GAAG,UAAC,IAAa;IAEnC,IAAI,CAAC,CAAC,IAAI,KAAK,sBAAc,CAAC;QAC1B,CAAC,IAAI,KAAK,qBAAa,CAAC;QACxB,CAAC,IAAI,KAAK,uBAAe,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAS,CAAC,CAAC,EAAE;QAErD,OAAO,sBAAc,CAAC;KAEzB;SAAM;QAEH,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAS,CAAC,CAAC;QAE/B,IAAI,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;YAErC,OAAO,iBAAS,CAAC;SAEpB;aAAM;YAEH,IAAI,CAAC,GAAG,EAAE;iBACL,OAAO,EAAE;iBACT,KAAK,CAAC,CAAC,CAAC;iBACR,OAAO,EAAE;iBACT,IAAI,CAAC,iBAAS,CAAC,CAAC;YAErB,OAAO,CAAC,KAAK,qBAAa,CAAC,CAAC,CAAC,sBAAc,CAAC,CAAC,CAAC,CAAC,CAAC;SAGnD;KAEJ;AAEL,CAAC,CAAA;AAED;;GAEG;AACU,QAAA,KAAK,GAAG,UAAC,IAAa;IAC/B,OAAA,CAAC,CAAC,IAAI,KAAK,sBAAc,CAAC;QACtB,CAAC,IAAI,KAAK,uBAAe,CAAC;QAC1B,CAAC,IAAI,KAAK,qBAAa,CAAC;QACxB,CAAC,IAAI,KAAK,iBAAS,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,CAAC;QACN,YAAI,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAS,CAAC,CAAC;AAL/B,CAK+B,CAAC;AAEpC;;GAEG;AACU,QAAA,OAAO,GAAG,UAAC,MAAe,EAAE,KAAc;IACnD,OAAA,CAAC,MAAM,KAAK,sBAAc,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,mBAAU,CAAC,KAAK,EAAE,MAAM,CAAC;AAA9E,CAA8E,CAAC;AAEnF;;GAEG;AACU,QAAA,OAAO,GAAG,UAAC,IAAa;IACjC,OAAA,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;AAArC,CAAqC,CAAA"}
|
package/lib/actor/address.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import * as uuid from 'uuid';
|
|
2
|
-
|
|
3
1
|
import { tail } from '@quenk/noni/lib/data/array';
|
|
4
2
|
import { startsWith } from '@quenk/noni/lib/data/string';
|
|
5
3
|
|
|
@@ -105,8 +103,3 @@ export const isChild = (parent: Address, child: Address): boolean =>
|
|
|
105
103
|
*/
|
|
106
104
|
export const isGroup = (addr: Address): boolean =>
|
|
107
105
|
((addr[0] === '$') && (addr !== '$'))
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* randomID generates a random id suitable for use by child actors.
|
|
111
|
-
*/
|
|
112
|
-
export const randomID = () => uuid.v4().split('-').join('');
|
package/lib/actor/flags.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export declare const FLAG_IMMUTABLE = 1;
|
|
2
2
|
export declare const FLAG_BUFFERED = 2;
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const FLAG_EXIT_AFTER_RECEIVE = 4;
|
|
4
4
|
export declare const FLAG_ROUTER = 8;
|
|
5
|
+
export declare const FLAG_RESIDENT = 16;
|
|
6
|
+
export declare const FLAG_EXIT_AFTER_RUN = 32;
|
|
5
7
|
/**
|
|
6
8
|
* Flags allow an actor to enable or disable various features provided by
|
|
7
9
|
* the system.
|
|
@@ -19,3 +21,7 @@ export declare const isBuffered: (f: Flags) => boolean;
|
|
|
19
21
|
* isRouter flag test.
|
|
20
22
|
*/
|
|
21
23
|
export declare const isRouter: (f: Flags) => boolean;
|
|
24
|
+
/**
|
|
25
|
+
* isResident flag test.
|
|
26
|
+
*/
|
|
27
|
+
export declare const isResident: (f: Flags) => boolean;
|
package/lib/actor/flags.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isRouter = exports.isBuffered = exports.isImmutable = exports.FLAG_ROUTER = exports.
|
|
4
|
-
exports.FLAG_IMMUTABLE =
|
|
5
|
-
exports.FLAG_BUFFERED =
|
|
6
|
-
exports.
|
|
7
|
-
exports.FLAG_ROUTER =
|
|
3
|
+
exports.isResident = exports.isRouter = exports.isBuffered = exports.isImmutable = exports.FLAG_EXIT_AFTER_RUN = exports.FLAG_RESIDENT = exports.FLAG_ROUTER = exports.FLAG_EXIT_AFTER_RECEIVE = exports.FLAG_BUFFERED = exports.FLAG_IMMUTABLE = void 0;
|
|
4
|
+
exports.FLAG_IMMUTABLE = 1;
|
|
5
|
+
exports.FLAG_BUFFERED = 2;
|
|
6
|
+
exports.FLAG_EXIT_AFTER_RECEIVE = 4;
|
|
7
|
+
exports.FLAG_ROUTER = 8;
|
|
8
|
+
exports.FLAG_RESIDENT = 16;
|
|
9
|
+
exports.FLAG_EXIT_AFTER_RUN = 32;
|
|
8
10
|
/**
|
|
9
11
|
* isImmutable flag test.
|
|
10
12
|
*/
|
|
@@ -23,4 +25,8 @@ exports.isBuffered = function (f) {
|
|
|
23
25
|
exports.isRouter = function (f) {
|
|
24
26
|
return (f & exports.FLAG_ROUTER) === exports.FLAG_ROUTER;
|
|
25
27
|
};
|
|
28
|
+
/**
|
|
29
|
+
* isResident flag test.
|
|
30
|
+
*/
|
|
31
|
+
exports.isResident = function (f) { return (f & exports.FLAG_RESIDENT) === exports.FLAG_RESIDENT; };
|
|
26
32
|
//# 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,
|
|
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;AACU,QAAA,WAAW,GAAG,UAAC,CAAQ;IAChC,OAAA,CAAC,CAAC,GAAG,sBAAc,CAAC,KAAK,sBAAc;AAAvC,CAAuC,CAAC;AAE5C;;GAEG;AACU,QAAA,UAAU,GAAG,UAAC,CAAQ;IAC/B,OAAA,CAAC,CAAC,GAAG,qBAAa,CAAC,KAAK,qBAAa;AAArC,CAAqC,CAAC;AAE1C;;GAEG;AACU,QAAA,QAAQ,GAAG,UAAC,CAAQ;IAC7B,OAAA,CAAC,CAAC,GAAG,mBAAW,CAAC,KAAK,mBAAW;AAAjC,CAAiC,CAAC;AAEtC;;GAEG;AACU,QAAA,UAAU,GAAG,UAAC,CAAQ,IAAK,OAAA,CAAC,CAAC,GAAG,qBAAa,CAAC,KAAK,qBAAa,EAArC,CAAqC,CAAC"}
|
package/lib/actor/flags.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
|
|
2
|
-
export const FLAG_IMMUTABLE =
|
|
3
|
-
export const FLAG_BUFFERED =
|
|
4
|
-
export const
|
|
5
|
-
export const FLAG_ROUTER =
|
|
2
|
+
export const FLAG_IMMUTABLE = 1;
|
|
3
|
+
export const FLAG_BUFFERED = 2;
|
|
4
|
+
export const FLAG_EXIT_AFTER_RECEIVE = 4
|
|
5
|
+
export const FLAG_ROUTER = 8;
|
|
6
|
+
export const FLAG_RESIDENT = 16;
|
|
7
|
+
export const FLAG_EXIT_AFTER_RUN = 32;
|
|
6
8
|
|
|
7
9
|
/**
|
|
8
10
|
* Flags allow an actor to enable or disable various features provided by
|
|
@@ -27,3 +29,8 @@ export const isBuffered = (f: Flags) =>
|
|
|
27
29
|
*/
|
|
28
30
|
export const isRouter = (f: Flags) =>
|
|
29
31
|
(f & FLAG_ROUTER) === FLAG_ROUTER;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* isResident flag test.
|
|
35
|
+
*/
|
|
36
|
+
export const isResident = (f: Flags) => (f & FLAG_RESIDENT) === FLAG_RESIDENT;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Type } from '@quenk/noni/lib/data/type';
|
|
2
|
-
import { System } from '../system';
|
|
3
2
|
import { Context } from '../system/vm/runtime/context';
|
|
3
|
+
import { System } from '../system';
|
|
4
4
|
import { Envelope } from '../mailbox';
|
|
5
5
|
import { Address } from '../address';
|
|
6
6
|
import { Actor } from '../';
|
|
@@ -9,13 +9,13 @@ var op_1 = require("../system/vm/runtime/op");
|
|
|
9
9
|
var address_1 = require("../address");
|
|
10
10
|
var flags_1 = require("../flags");
|
|
11
11
|
var address_2 = require("../address");
|
|
12
|
-
var scripts_1 = require("../resident/scripts");
|
|
13
12
|
exports.SCRIPT_PATH = __dirname + "/../../../lib/actor/process/script.js";
|
|
14
13
|
var raiseShape = {
|
|
15
14
|
code: op_1.RAISE,
|
|
16
15
|
src: String,
|
|
17
16
|
dest: String,
|
|
18
|
-
|
|
17
|
+
message: String,
|
|
18
|
+
stack: String
|
|
19
19
|
};
|
|
20
20
|
var tellShape = {
|
|
21
21
|
code: op_1.SEND,
|
|
@@ -56,8 +56,7 @@ var Process = /** @class */ (function () {
|
|
|
56
56
|
this.process.send(e);
|
|
57
57
|
return this;
|
|
58
58
|
};
|
|
59
|
-
Process.prototype.notify = function () {
|
|
60
|
-
};
|
|
59
|
+
Process.prototype.notify = function () { };
|
|
61
60
|
Process.prototype.stop = function () {
|
|
62
61
|
this.process.kill();
|
|
63
62
|
};
|
|
@@ -65,7 +64,7 @@ var Process = /** @class */ (function () {
|
|
|
65
64
|
var _this = this;
|
|
66
65
|
this.self = function () { return addr; };
|
|
67
66
|
var p = child_process_1.fork(path_1.resolve(this.script), [], spawnOpts(this));
|
|
68
|
-
p.on('error', function (e) { return _this.system.
|
|
67
|
+
p.on('error', function (e) { return _this.system.getPlatform().raise(_this, e); });
|
|
69
68
|
//TODO: What should we do with invalid messages?
|
|
70
69
|
p.on('message', function (m) {
|
|
71
70
|
return match_1.match(m)
|
|
@@ -76,7 +75,7 @@ var Process = /** @class */ (function () {
|
|
|
76
75
|
});
|
|
77
76
|
p.on('exit', function () {
|
|
78
77
|
_this.process = nullHandle;
|
|
79
|
-
_this.system.
|
|
78
|
+
_this.system.getPlatform().kill(_this, _this.self());
|
|
80
79
|
});
|
|
81
80
|
this.process = p;
|
|
82
81
|
};
|
|
@@ -84,10 +83,8 @@ var Process = /** @class */ (function () {
|
|
|
84
83
|
}());
|
|
85
84
|
exports.Process = Process;
|
|
86
85
|
var nullHandle = {
|
|
87
|
-
send: function () {
|
|
88
|
-
}
|
|
89
|
-
kill: function () {
|
|
90
|
-
}
|
|
86
|
+
send: function () { },
|
|
87
|
+
kill: function () { }
|
|
91
88
|
};
|
|
92
89
|
var spawnOpts = function (p) { return ({
|
|
93
90
|
env: {
|
|
@@ -98,10 +95,12 @@ var spawnOpts = function (p) { return ({
|
|
|
98
95
|
}
|
|
99
96
|
}); };
|
|
100
97
|
var handleTell = function (p) { return function (m) {
|
|
101
|
-
return p.system.
|
|
98
|
+
return p.system.getPlatform().tell(m.to, m.message);
|
|
102
99
|
}; };
|
|
103
100
|
var handleRaise = function (p) { return function (_a) {
|
|
104
|
-
var
|
|
105
|
-
|
|
101
|
+
var message = _a.message, stack = _a.stack;
|
|
102
|
+
var err = new Error(message);
|
|
103
|
+
err.stack = stack;
|
|
104
|
+
p.system.getPlatform().raise(p, err);
|
|
106
105
|
}; };
|
|
107
106
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAAA,6BAA+B;AAC/B,+CAAqC;AAErC,uDAAsD;AACtD,kDAAsD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,15 +4,15 @@ import { fork } from 'child_process';
|
|
|
4
4
|
import { match } from '@quenk/noni/lib/control/match';
|
|
5
5
|
import { Any, Type } from '@quenk/noni/lib/data/type';
|
|
6
6
|
|
|
7
|
-
import { System } from '../system';
|
|
8
7
|
import { RAISE, SEND } from '../system/vm/runtime/op';
|
|
9
8
|
import { Context } from '../system/vm/runtime/context';
|
|
9
|
+
import { PVM } from '../system/vm';
|
|
10
|
+
import { System } from '../system';
|
|
10
11
|
import { Envelope } from '../mailbox';
|
|
11
12
|
import { Message } from '../message';
|
|
12
13
|
import { Address, getId } from '../address';
|
|
13
14
|
import { FLAG_IMMUTABLE, FLAG_ROUTER } from '../flags';
|
|
14
15
|
import { ADDRESS_DISCARD } from '../address';
|
|
15
|
-
import { Tell, Raise, Kill } from '../resident/scripts';
|
|
16
16
|
import { Actor } from '../';
|
|
17
17
|
|
|
18
18
|
export const SCRIPT_PATH = `${__dirname}/../../../lib/actor/process/script.js`;
|
|
@@ -25,7 +25,9 @@ const raiseShape = {
|
|
|
25
25
|
|
|
26
26
|
dest: String,
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
message: String,
|
|
29
|
+
|
|
30
|
+
stack: String
|
|
29
31
|
|
|
30
32
|
}
|
|
31
33
|
|
|
@@ -55,7 +57,9 @@ interface TellMsg {
|
|
|
55
57
|
|
|
56
58
|
interface RaiseMsg {
|
|
57
59
|
|
|
58
|
-
|
|
60
|
+
message: string,
|
|
61
|
+
|
|
62
|
+
stack: string,
|
|
59
63
|
|
|
60
64
|
src: string
|
|
61
65
|
|
|
@@ -119,9 +123,7 @@ export class Process implements Actor {
|
|
|
119
123
|
|
|
120
124
|
}
|
|
121
125
|
|
|
122
|
-
notify() {
|
|
123
|
-
|
|
124
|
-
}
|
|
126
|
+
notify() { }
|
|
125
127
|
|
|
126
128
|
stop() {
|
|
127
129
|
|
|
@@ -135,7 +137,7 @@ export class Process implements Actor {
|
|
|
135
137
|
|
|
136
138
|
let p = fork(resolve(this.script), [], spawnOpts(this));
|
|
137
139
|
|
|
138
|
-
p.on('error', e => this.system.
|
|
140
|
+
p.on('error', e => this.system.getPlatform().raise(this, e));
|
|
139
141
|
|
|
140
142
|
//TODO: What should we do with invalid messages?
|
|
141
143
|
p.on('message', (m: Message) =>
|
|
@@ -149,7 +151,7 @@ export class Process implements Actor {
|
|
|
149
151
|
|
|
150
152
|
this.process = nullHandle;
|
|
151
153
|
|
|
152
|
-
this.system.
|
|
154
|
+
this.system.getPlatform().kill(this, this.self());
|
|
153
155
|
|
|
154
156
|
});
|
|
155
157
|
|
|
@@ -161,14 +163,9 @@ export class Process implements Actor {
|
|
|
161
163
|
|
|
162
164
|
const nullHandle = {
|
|
163
165
|
|
|
164
|
-
send() {
|
|
165
|
-
|
|
166
|
-
},
|
|
167
|
-
|
|
168
|
-
kill() {
|
|
166
|
+
send() { },
|
|
169
167
|
|
|
170
|
-
|
|
171
|
-
}
|
|
168
|
+
kill() { }
|
|
172
169
|
|
|
173
170
|
}
|
|
174
171
|
|
|
@@ -189,8 +186,15 @@ const spawnOpts = (p: Process) => ({
|
|
|
189
186
|
});
|
|
190
187
|
|
|
191
188
|
const handleTell = (p: Process) => (m: TellMsg) =>
|
|
192
|
-
p.system.
|
|
189
|
+
(<PVM>p.system.getPlatform()).tell(m.to, m.message);
|
|
193
190
|
|
|
194
191
|
const handleRaise =
|
|
195
|
-
(p: Process) => ({
|
|
196
|
-
|
|
192
|
+
(p: Process) => ({ message, stack }: RaiseMsg) => {
|
|
193
|
+
|
|
194
|
+
let err = new Error(message);
|
|
195
|
+
|
|
196
|
+
err.stack = stack;
|
|
197
|
+
|
|
198
|
+
p.system.getPlatform().raise(p, err);
|
|
199
|
+
|
|
200
|
+
}
|
|
@@ -4,7 +4,6 @@ var match_1 = require("@quenk/noni/lib/control/match");
|
|
|
4
4
|
var type_1 = require("@quenk/noni/lib/data/type");
|
|
5
5
|
var record_1 = require("@quenk/noni/lib/data/record");
|
|
6
6
|
var json_1 = require("@quenk/noni/lib/data/json");
|
|
7
|
-
var scripts_1 = require("../resident/scripts");
|
|
8
7
|
var op_1 = require("../system/vm/runtime/op");
|
|
9
8
|
var event_1 = require("../system/vm/event");
|
|
10
9
|
var vm_1 = require("../system/vm");
|
|
@@ -26,11 +25,8 @@ var Sys = /** @class */ (function () {
|
|
|
26
25
|
_a)
|
|
27
26
|
}));
|
|
28
27
|
}
|
|
29
|
-
Sys.prototype.
|
|
30
|
-
this.vm
|
|
31
|
-
};
|
|
32
|
-
Sys.prototype.execNow = function (i, s) {
|
|
33
|
-
return this.vm.execNow(i, s);
|
|
28
|
+
Sys.prototype.getPlatform = function () {
|
|
29
|
+
return this.vm;
|
|
34
30
|
};
|
|
35
31
|
return Sys;
|
|
36
32
|
}());
|
|
@@ -55,13 +51,14 @@ var main = function () {
|
|
|
55
51
|
process.on('uncaughtException', function (e) {
|
|
56
52
|
process.send({
|
|
57
53
|
code: op_1.RAISE,
|
|
58
|
-
|
|
54
|
+
message: e.message,
|
|
55
|
+
stack: e.stack,
|
|
59
56
|
src: address,
|
|
60
57
|
dest: address
|
|
61
58
|
});
|
|
62
59
|
process.exit(-1);
|
|
63
60
|
});
|
|
64
|
-
sys.vm.spawn({
|
|
61
|
+
sys.vm.spawn(sys.vm, {
|
|
65
62
|
id: id,
|
|
66
63
|
create: function (s) {
|
|
67
64
|
//TODO: Handle invalid messages?
|
|
@@ -78,7 +75,7 @@ var main = function () {
|
|
|
78
75
|
var filterTell = function (vm) {
|
|
79
76
|
return function (_a) {
|
|
80
77
|
var to = _a.to, message = _a.message;
|
|
81
|
-
return vm.
|
|
78
|
+
return vm.tell(to, message);
|
|
82
79
|
};
|
|
83
80
|
};
|
|
84
81
|
main();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script.js","sourceRoot":"","sources":["script.ts"],"names":[],"mappings":";;AAAA,uDAAsD;AACtD,kDAA0D;
|
|
1
|
+
{"version":3,"file":"script.js","sourceRoot":"","sources":["script.ts"],"names":[],"mappings":";;AAAA,uDAAsD;AACtD,kDAA0D;AAC1D,sDAAqD;AACrD,kDAAkD;AAElD,8CAAsD;AACtD,4CAAuD;AAEvD,mCAAmC;AAKnC,WAAW;AACX,gBAAgB;AAChB,qBAAqB;AACrB,gBAAgB;AAEhB;IAAA;;QAEI,OAAE,GAAQ,QAAG,CAAC,MAAM,CAAC,IAAI,EAAE,eAAM,CAAC,OAAO,EAAE,EAAE;YAEzC,EAAE;gBAEE,GAAC,yBAAiB,IAAG,UACjB,IAAa,EACb,CAAS,EACT,EAAW,EACX,OAAgB,IAAK,OAAW,OAAO,CAAC,IAAK,CAAC;oBAE1C,IAAI,EAAE,SAAI;oBACV,EAAE,IAAA;oBACF,IAAI,MAAA;oBACJ,OAAO,SAAA;iBAEV,CAAC,EAPmB,CAOnB;mBAET;SAEJ,CAAC,CAAC,CAAC;IAQR,CAAC;IANG,yBAAW,GAAX;QAEI,OAAO,IAAI,CAAC,EAAE,CAAC;IAEnB,CAAC;IAEL,UAAC;AAAD,CAAC,AA7BD,IA6BC;AAED,IAAM,EAAE,GAAW,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAE9C,IAAM,OAAO,GAAW,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAExD,IAAM,SAAS,GAAG;IAEd,EAAE,EAAE,MAAM;IAEV,IAAI,EAAE,MAAM;IAEZ,OAAO,EAAE,UAAG;CAEf,CAAA;AAED,IAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,IAAM,OAAO,GAAG;IAEZ,IAAI,eAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;QAEtC,IAAI,KAAK,GAAG,YAAK,CAAC,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,IAAM,IAAI,GAAG;IAET,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IAEpB,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,UAAA,CAAC;QAElB,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,IAAA;QAEF,MAAM,EAAE,UAAC,CAAS;YAEd,gCAAgC;YAChC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,UAAC,CAAU;gBAC7B,OAAA,aAAK,CAAC,CAAC,CAAC;qBACH,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;qBACrC,MAAM,CAAC,cAAQ,CAAC,CAAC;qBACjB,GAAG,EAAE;YAHV,CAGU,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,IAAM,UAAU,GAAG,UAAC,EAAO;IACvB,OAAA,UAAC,EAAiD;YAA/C,EAAE,QAAA,EAAE,OAAO,aAAA;QAAgD,OAAA,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC;IAApB,CAAoB;AAAlF,CAAkF,CAAC;AAEvF,IAAI,EAAE,CAAC"}
|
|
@@ -1,20 +1,15 @@
|
|
|
1
1
|
import { match } from '@quenk/noni/lib/control/match';
|
|
2
2
|
import { isString, Any } from '@quenk/noni/lib/data/type';
|
|
3
|
-
import { Maybe } from '@quenk/noni/lib/data/maybe';
|
|
4
3
|
import { rmerge } from '@quenk/noni/lib/data/record';
|
|
5
4
|
import { parse } from '@quenk/noni/lib/data/json';
|
|
6
5
|
|
|
7
|
-
import { Tell } from '../resident/scripts';
|
|
8
6
|
import { RAISE, SEND } from '../system/vm/runtime/op';
|
|
9
7
|
import { EVENT_SEND_FAILED } from '../system/vm/event';
|
|
10
|
-
import { PTValue } from '../system/vm/type';
|
|
11
|
-
import { Script } from '../system/vm/script';
|
|
12
8
|
import { Conf } from '../system/vm/conf';
|
|
13
9
|
import { PVM } from '../system/vm';
|
|
14
10
|
import { System } from '../system';
|
|
15
11
|
import { Message } from '../message';
|
|
16
12
|
import { Address } from '../address';
|
|
17
|
-
import { Instance } from '../';
|
|
18
13
|
|
|
19
14
|
//ENV vars:
|
|
20
15
|
//POTOO_ACTOR_ID
|
|
@@ -23,7 +18,7 @@ import { Instance } from '../';
|
|
|
23
18
|
|
|
24
19
|
class Sys {
|
|
25
20
|
|
|
26
|
-
vm = PVM.create(this, rmerge(getConf(), {
|
|
21
|
+
vm: PVM = PVM.create(this, rmerge(getConf(), {
|
|
27
22
|
|
|
28
23
|
on: {
|
|
29
24
|
|
|
@@ -44,15 +39,9 @@ class Sys {
|
|
|
44
39
|
|
|
45
40
|
}));
|
|
46
41
|
|
|
47
|
-
|
|
42
|
+
getPlatform() {
|
|
48
43
|
|
|
49
|
-
this.vm
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
execNow(i: Instance, s: Script): Maybe<PTValue> {
|
|
54
|
-
|
|
55
|
-
return this.vm.execNow(i, s);
|
|
44
|
+
return this.vm;
|
|
56
45
|
|
|
57
46
|
}
|
|
58
47
|
|
|
@@ -97,7 +86,8 @@ const main = () => {
|
|
|
97
86
|
(<Function>process.send)({
|
|
98
87
|
|
|
99
88
|
code: RAISE,
|
|
100
|
-
|
|
89
|
+
message: e.message,
|
|
90
|
+
stack: e.stack,
|
|
101
91
|
src: address,
|
|
102
92
|
dest: address
|
|
103
93
|
|
|
@@ -107,11 +97,11 @@ const main = () => {
|
|
|
107
97
|
|
|
108
98
|
});
|
|
109
99
|
|
|
110
|
-
sys.vm.spawn({
|
|
100
|
+
sys.vm.spawn(sys.vm, {
|
|
111
101
|
|
|
112
102
|
id,
|
|
113
103
|
|
|
114
|
-
create: (s:System) => {
|
|
104
|
+
create: (s: System) => {
|
|
115
105
|
|
|
116
106
|
//TODO: Handle invalid messages?
|
|
117
107
|
process.on('message', (m: Message) =>
|
|
@@ -129,7 +119,6 @@ const main = () => {
|
|
|
129
119
|
}
|
|
130
120
|
|
|
131
121
|
const filterTell = (vm: PVM) =>
|
|
132
|
-
({ to, message }: { to: string,
|
|
133
|
-
vm.exec(vm, new Tell(to, message));
|
|
122
|
+
({ to, message }: { to: string, message: Message }) => vm.tell(to, message);
|
|
134
123
|
|
|
135
124
|
main();
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Err } from '@quenk/noni/lib/control/error';
|
|
2
2
|
import { Address, AddressMap } from '../address';
|
|
3
3
|
import { Spawnable, Templates } from '../template';
|
|
4
|
-
import { Case } from './case';
|
|
5
4
|
/**
|
|
6
5
|
* Spawner is an object that can spawn a new actor.
|
|
7
6
|
*/
|
|
@@ -26,11 +25,6 @@ export interface Api extends Spawner {
|
|
|
26
25
|
* tell a message to an actor address.
|
|
27
26
|
*/
|
|
28
27
|
tell<M>(ref: string, m: M): Api;
|
|
29
|
-
/**
|
|
30
|
-
* select the next message to be processed, applying each Case
|
|
31
|
-
* until one matches.
|
|
32
|
-
*/
|
|
33
|
-
select<T>(c: Case<T>[]): Api;
|
|
34
28
|
/**
|
|
35
29
|
* raise an error triggering the systems error handling mechanism.
|
|
36
30
|
*/
|
|
@@ -3,8 +3,6 @@ import { Err } from '@quenk/noni/lib/control/error';
|
|
|
3
3
|
import { Address, AddressMap } from '../address';
|
|
4
4
|
import { Spawnable, Templates } from '../template';
|
|
5
5
|
|
|
6
|
-
import { Case } from './case';
|
|
7
|
-
|
|
8
6
|
/**
|
|
9
7
|
* Spawner is an object that can spawn a new actor.
|
|
10
8
|
*/
|
|
@@ -39,12 +37,6 @@ export interface Api extends Spawner {
|
|
|
39
37
|
*/
|
|
40
38
|
tell<M>(ref: string, m: M): Api;
|
|
41
39
|
|
|
42
|
-
/**
|
|
43
|
-
* select the next message to be processed, applying each Case
|
|
44
|
-
* until one matches.
|
|
45
|
-
*/
|
|
46
|
-
select<T>(c: Case<T>[]): Api;
|
|
47
|
-
|
|
48
40
|
/**
|
|
49
41
|
* raise an error triggering the systems error handling mechanism.
|
|
50
42
|
*/
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Eff } from '../..';
|
|
2
|
+
import { Message } from '../../message';
|
|
3
|
+
import { Case } from './';
|
|
4
|
+
/**
|
|
5
|
+
* CaseFunction is a composite object for Case classes.
|
|
6
|
+
*
|
|
7
|
+
* It combines mutliple Case classes into one serving effectively as a pattern
|
|
8
|
+
* matching function.
|
|
9
|
+
*/
|
|
10
|
+
export declare class CaseFunction<T> {
|
|
11
|
+
cases: Case<T>[];
|
|
12
|
+
constructor(cases: Case<T>[]);
|
|
13
|
+
/**
|
|
14
|
+
* test whether at least one of the underlying Case classes will handle the
|
|
15
|
+
* Message.
|
|
16
|
+
*/
|
|
17
|
+
test(msg: Message): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* apply the first Case class that will handle the provided Message.
|
|
20
|
+
*
|
|
21
|
+
* Throws if none of them will.
|
|
22
|
+
*/
|
|
23
|
+
apply(msg: Message): Eff;
|
|
24
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CaseFunction = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* CaseFunction is a composite object for Case classes.
|
|
6
|
+
*
|
|
7
|
+
* It combines mutliple Case classes into one serving effectively as a pattern
|
|
8
|
+
* matching function.
|
|
9
|
+
*/
|
|
10
|
+
var CaseFunction = /** @class */ (function () {
|
|
11
|
+
function CaseFunction(cases) {
|
|
12
|
+
this.cases = cases;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* test whether at least one of the underlying Case classes will handle the
|
|
16
|
+
* Message.
|
|
17
|
+
*/
|
|
18
|
+
CaseFunction.prototype.test = function (msg) {
|
|
19
|
+
return this.cases.some(function (kase) { return kase.test(msg); });
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* apply the first Case class that will handle the provided Message.
|
|
23
|
+
*
|
|
24
|
+
* Throws if none of them will.
|
|
25
|
+
*/
|
|
26
|
+
CaseFunction.prototype.apply = function (msg) {
|
|
27
|
+
var kase = this.cases.find(function (kase) { return kase.test(msg); });
|
|
28
|
+
if (!kase)
|
|
29
|
+
throw new Error("CaseFunction: No Case patterns match!");
|
|
30
|
+
return kase.apply(msg);
|
|
31
|
+
};
|
|
32
|
+
return CaseFunction;
|
|
33
|
+
}());
|
|
34
|
+
exports.CaseFunction = CaseFunction;
|
|
35
|
+
//# sourceMappingURL=function.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function.js","sourceRoot":"","sources":["function.ts"],"names":[],"mappings":";;;AAIA;;;;;GAKG;AACH;IAEI,sBAAmB,KAAgB;QAAhB,UAAK,GAAL,KAAK,CAAW;IAAI,CAAC;IAExC;;;OAGG;IACH,2BAAI,GAAJ,UAAK,GAAY;QAEb,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAd,CAAc,CAAC,CAAC;IAEnD,CAAC;IAED;;;;OAIG;IACH,4BAAK,GAAL,UAAM,GAAY;QAEd,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAd,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;IAEL,mBAAC;AAAD,CAAC,AA7BD,IA6BC;AA7BY,oCAAY"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Eff } from '../..';
|
|
2
|
+
import { Message } from '../../message';
|
|
3
|
+
import { Case } from './';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* CaseFunction is a composite object for Case classes.
|
|
7
|
+
*
|
|
8
|
+
* It combines mutliple Case classes into one serving effectively as a pattern
|
|
9
|
+
* matching function.
|
|
10
|
+
*/
|
|
11
|
+
export class CaseFunction<T> {
|
|
12
|
+
|
|
13
|
+
constructor(public cases: Case<T>[]) { }
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* test whether at least one of the underlying Case classes will handle the
|
|
17
|
+
* Message.
|
|
18
|
+
*/
|
|
19
|
+
test(msg: Message): boolean {
|
|
20
|
+
|
|
21
|
+
return this.cases.some(kase => kase.test(msg));
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* apply the first Case class that will handle the provided Message.
|
|
27
|
+
*
|
|
28
|
+
* Throws if none of them will.
|
|
29
|
+
*/
|
|
30
|
+
apply(msg: Message): Eff {
|
|
31
|
+
|
|
32
|
+
let kase = this.cases.find(kase => kase.test(msg));
|
|
33
|
+
|
|
34
|
+
if (!kase) throw new Error(`CaseFunction: No Case patterns match!`);
|
|
35
|
+
|
|
36
|
+
return kase.apply(msg);
|
|
37
|
+
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Constructor } from '@quenk/noni/lib/data/type/constructor';
|
|
2
2
|
import { Pattern } from '@quenk/noni/lib/data/type';
|
|
3
|
-
import { Message } from '
|
|
4
|
-
import { Eff } from '
|
|
3
|
+
import { Message } from '../../message';
|
|
4
|
+
import { Eff } from '../../';
|
|
5
5
|
export { Pattern };
|
|
6
6
|
/**
|
|
7
7
|
* Handler function type for Cases.
|
|
@@ -33,6 +33,22 @@ export declare class Case<T> {
|
|
|
33
33
|
*/
|
|
34
34
|
apply(m: Message): Eff;
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* caseOf is a helper for constructing Case classes.
|
|
38
|
+
*
|
|
39
|
+
* It should be used instead of "new Case(...)"
|
|
40
|
+
*/
|
|
41
|
+
export declare function caseOf(pattern: NumberConstructor, handler: (value: number) => void): Case<number>;
|
|
42
|
+
export declare function caseOf(pattern: BooleanConstructor, handler: (value: boolean) => void): Case<boolean>;
|
|
43
|
+
export declare function caseOf(pattern: StringConstructor, handler: (value: string) => void): Case<string>;
|
|
44
|
+
export declare function caseOf<T>(pattern: object, handler: (value: {
|
|
45
|
+
[P in keyof T]: Message;
|
|
46
|
+
}) => void): Case<object>;
|
|
47
|
+
export declare function caseOf(pattern: string, handler: (value: string) => void): Case<string>;
|
|
48
|
+
export declare function caseOf(pattern: number, handler: (value: number) => void): Case<number>;
|
|
49
|
+
export declare function caseOf(pattern: boolean, handler: (value: boolean) => void): Case<boolean>;
|
|
50
|
+
export declare function caseOf<T>(pattern: Constructor<T>, handler: (value: T) => void): Case<Constructor<T>>;
|
|
51
|
+
export declare function caseOf<T>(pattern: Pattern<T>, handler: Handler<T>): Case<Pattern<T>>;
|
|
36
52
|
/**
|
|
37
53
|
* Default matches any message value.
|
|
38
54
|
*/
|