@logicflow/engine 0.0.9 → 0.0.10-beta.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.
Files changed (190) hide show
  1. package/README.md +5 -2
  2. package/dist/index.js +2 -0
  3. package/dist/index.js.map +1 -0
  4. package/es/EventEmitter.d.ts +34 -4
  5. package/es/EventEmitter.js +70 -48
  6. package/es/EventEmitter.js.map +1 -0
  7. package/es/FlowModel.d.ts +75 -73
  8. package/es/FlowModel.js +130 -173
  9. package/es/FlowModel.js.map +1 -0
  10. package/es/Scheduler.d.ts +50 -34
  11. package/es/Scheduler.js +134 -209
  12. package/es/Scheduler.js.map +1 -0
  13. package/es/constant/{constant.js → index.js} +8 -7
  14. package/es/constant/index.js.map +1 -0
  15. package/es/constant/logCode.js +29 -0
  16. package/es/constant/logCode.js.map +1 -0
  17. package/es/expression/brewserVm.d.ts +2 -0
  18. package/es/expression/brewserVm.js +30 -0
  19. package/es/expression/brewserVm.js.map +1 -0
  20. package/es/expression/index.d.ts +1 -1
  21. package/es/expression/index.js +16 -59
  22. package/es/expression/index.js.map +1 -0
  23. package/es/expression/nodeVm.d.ts +4 -2
  24. package/es/expression/nodeVm.js +10 -50
  25. package/es/expression/nodeVm.js.map +1 -0
  26. package/es/index.d.ts +135 -38
  27. package/es/index.js +92 -144
  28. package/es/index.js.map +1 -0
  29. package/es/nodes/base.d.ts +108 -0
  30. package/es/nodes/base.js +149 -0
  31. package/es/nodes/base.js.map +1 -0
  32. package/es/nodes/index.d.ts +3 -0
  33. package/es/nodes/index.js +4 -0
  34. package/es/nodes/index.js.map +1 -0
  35. package/es/nodes/{StartNode.d.ts → start.d.ts} +3 -2
  36. package/es/nodes/start.js +11 -0
  37. package/es/nodes/start.js.map +1 -0
  38. package/es/nodes/{TaskNode.d.ts → task.d.ts} +3 -2
  39. package/es/nodes/task.js +11 -0
  40. package/es/nodes/task.js.map +1 -0
  41. package/es/platform/browser/browserVm.d.ts +4 -0
  42. package/es/platform/browser/browserVm.js +44 -0
  43. package/es/platform/browser/browserVm.js.map +1 -0
  44. package/es/platform/browser/index.d.ts +4 -0
  45. package/es/platform/browser/index.js +23 -0
  46. package/es/platform/browser/index.js.map +1 -0
  47. package/es/platform/index.d.ts +1 -0
  48. package/es/platform/index.js +2 -0
  49. package/es/platform/index.js.map +1 -0
  50. package/es/platform/node/index.d.ts +4 -0
  51. package/es/platform/node/index.js +23 -0
  52. package/es/platform/node/index.js.map +1 -0
  53. package/es/platform/node/nodeVm.d.ts +1 -0
  54. package/es/platform/node/nodeVm.js +9 -0
  55. package/es/platform/node/nodeVm.js.map +1 -0
  56. package/es/recorder/index.d.ts +36 -10
  57. package/es/recorder/index.js +82 -135
  58. package/es/recorder/index.js.map +1 -0
  59. package/es/utils/global.d.ts +5 -0
  60. package/es/utils/global.js +27 -0
  61. package/es/utils/global.js.map +1 -0
  62. package/es/utils/id.js +14 -0
  63. package/es/utils/id.js.map +1 -0
  64. package/es/utils/index.d.ts +4 -0
  65. package/es/utils/index.js +5 -0
  66. package/es/utils/index.js.map +1 -0
  67. package/es/{util → utils}/storage.js +17 -16
  68. package/es/utils/storage.js.map +1 -0
  69. package/lib/EventEmitter.d.ts +37 -0
  70. package/lib/EventEmitter.js +94 -0
  71. package/lib/EventEmitter.js.map +1 -0
  72. package/lib/FlowModel.d.ts +146 -0
  73. package/lib/FlowModel.js +236 -0
  74. package/lib/FlowModel.js.map +1 -0
  75. package/lib/Scheduler.d.ts +78 -0
  76. package/lib/Scheduler.js +179 -0
  77. package/lib/Scheduler.js.map +1 -0
  78. package/lib/constant/index.d.ts +16 -0
  79. package/{cjs/constant/constant.js → lib/constant/index.js} +4 -3
  80. package/lib/constant/index.js.map +1 -0
  81. package/lib/constant/logCode.d.ts +12 -0
  82. package/{cjs/constant/LogCode.js → lib/constant/logCode.js} +16 -13
  83. package/lib/constant/logCode.js.map +1 -0
  84. package/lib/expression/brewserVm.d.ts +2 -0
  85. package/lib/expression/brewserVm.js +33 -0
  86. package/lib/expression/brewserVm.js.map +1 -0
  87. package/lib/expression/index.d.ts +2 -0
  88. package/lib/expression/index.js +20 -0
  89. package/lib/expression/index.js.map +1 -0
  90. package/lib/expression/nodeVm.d.ts +4 -0
  91. package/lib/expression/nodeVm.js +13 -0
  92. package/lib/expression/nodeVm.js.map +1 -0
  93. package/lib/index.d.ts +157 -0
  94. package/lib/index.js +159 -0
  95. package/lib/index.js.map +1 -0
  96. package/lib/nodes/base.d.ts +108 -0
  97. package/lib/nodes/base.js +152 -0
  98. package/lib/nodes/base.js.map +1 -0
  99. package/lib/nodes/index.d.ts +3 -0
  100. package/lib/nodes/index.js +7 -0
  101. package/lib/nodes/index.js.map +1 -0
  102. package/lib/nodes/start.d.ts +6 -0
  103. package/lib/nodes/start.js +15 -0
  104. package/lib/nodes/start.js.map +1 -0
  105. package/lib/nodes/task.d.ts +6 -0
  106. package/lib/nodes/task.js +15 -0
  107. package/lib/nodes/task.js.map +1 -0
  108. package/lib/platform/browser/browserVm.d.ts +4 -0
  109. package/lib/platform/browser/browserVm.js +49 -0
  110. package/lib/platform/browser/browserVm.js.map +1 -0
  111. package/lib/platform/browser/index.d.ts +4 -0
  112. package/lib/platform/browser/index.js +28 -0
  113. package/lib/platform/browser/index.js.map +1 -0
  114. package/lib/platform/index.d.ts +1 -0
  115. package/lib/platform/index.js +5 -0
  116. package/lib/platform/index.js.map +1 -0
  117. package/lib/platform/node/index.d.ts +4 -0
  118. package/lib/platform/node/index.js +28 -0
  119. package/lib/platform/node/index.js.map +1 -0
  120. package/lib/platform/node/nodeVm.d.ts +1 -0
  121. package/lib/platform/node/nodeVm.js +13 -0
  122. package/lib/platform/node/nodeVm.js.map +1 -0
  123. package/lib/recorder/index.d.ts +46 -0
  124. package/lib/recorder/index.js +117 -0
  125. package/lib/recorder/index.js.map +1 -0
  126. package/lib/utils/global.d.ts +5 -0
  127. package/lib/utils/global.js +31 -0
  128. package/lib/utils/global.js.map +1 -0
  129. package/lib/utils/id.d.ts +3 -0
  130. package/lib/utils/id.js +20 -0
  131. package/lib/utils/id.js.map +1 -0
  132. package/lib/utils/index.d.ts +4 -0
  133. package/lib/utils/index.js +9 -0
  134. package/lib/utils/index.js.map +1 -0
  135. package/lib/utils/storage.d.ts +7 -0
  136. package/{cjs/util → lib/utils}/storage.js +18 -17
  137. package/lib/utils/storage.js.map +1 -0
  138. package/package.json +30 -71
  139. package/src/EventEmitter.ts +103 -0
  140. package/src/FlowModel.ts +325 -0
  141. package/src/Scheduler.ts +244 -0
  142. package/src/constant/index.ts +23 -0
  143. package/src/constant/logCode.ts +34 -0
  144. package/src/expression/brewserVm.ts +36 -0
  145. package/src/expression/index.ts +17 -0
  146. package/src/expression/nodeVm.ts +14 -0
  147. package/src/index.ts +300 -0
  148. package/src/nodes/base.ts +234 -0
  149. package/src/nodes/index.ts +3 -0
  150. package/src/nodes/start.ts +8 -0
  151. package/src/nodes/task.ts +8 -0
  152. package/src/platform/browser/browserVm.ts +52 -0
  153. package/src/platform/browser/index.ts +28 -0
  154. package/src/platform/index.ts +1 -0
  155. package/src/platform/node/index.ts +28 -0
  156. package/src/platform/node/nodeVm.ts +12 -0
  157. package/src/recorder/index.ts +137 -0
  158. package/src/typings.d.ts +0 -0
  159. package/src/utils/global.ts +41 -0
  160. package/src/utils/id.ts +16 -0
  161. package/src/utils/index.ts +5 -0
  162. package/src/utils/storage.ts +55 -0
  163. package/cjs/EventEmitter.js +0 -70
  164. package/cjs/FlowModel.js +0 -277
  165. package/cjs/Scheduler.js +0 -252
  166. package/cjs/expression/browserVm.js +0 -81
  167. package/cjs/expression/index.js +0 -63
  168. package/cjs/expression/nodeVm.js +0 -53
  169. package/cjs/index.js +0 -210
  170. package/cjs/nodes/BaseNode.js +0 -252
  171. package/cjs/nodes/StartNode.js +0 -27
  172. package/cjs/nodes/TaskNode.js +0 -27
  173. package/cjs/recorder/index.js +0 -168
  174. package/cjs/util/ID.js +0 -16
  175. package/cjs/util/global.js +0 -32
  176. package/es/constant/LogCode.js +0 -28
  177. package/es/expression/browserVm.d.ts +0 -4
  178. package/es/expression/browserVm.js +0 -76
  179. package/es/nodes/BaseNode.d.ts +0 -110
  180. package/es/nodes/BaseNode.js +0 -250
  181. package/es/nodes/StartNode.js +0 -25
  182. package/es/nodes/TaskNode.js +0 -25
  183. package/es/util/ID.js +0 -13
  184. package/es/util/global.d.ts +0 -5
  185. package/es/util/global.js +0 -26
  186. package/lib/main.js +0 -1
  187. /package/es/constant/{constant.d.ts → index.d.ts} +0 -0
  188. /package/es/constant/{LogCode.d.ts → logCode.d.ts} +0 -0
  189. /package/es/{util/ID.d.ts → utils/id.d.ts} +0 -0
  190. /package/es/{util → utils}/storage.d.ts +0 -0
@@ -3,11 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ActionStatus = exports.FlowStatus = exports.EVENT_INSTANCE_ERROR = exports.EVENT_INSTANCE_INTERRUPTED = exports.EVENT_INSTANCE_COMPLETE = exports.BASE_START_NODE = void 0;
4
4
  // baseType
5
5
  exports.BASE_START_NODE = 'start';
6
- // event name
6
+ // eventType
7
7
  exports.EVENT_INSTANCE_COMPLETE = 'instance:complete';
8
8
  exports.EVENT_INSTANCE_INTERRUPTED = 'instance:interrupted';
9
9
  exports.EVENT_INSTANCE_ERROR = 'instance:error';
10
- // flow status
10
+ // flowStatus
11
11
  var FlowStatus;
12
12
  (function (FlowStatus) {
13
13
  FlowStatus["COMPLETED"] = "completed";
@@ -16,10 +16,11 @@ var FlowStatus;
16
16
  FlowStatus["PENDING"] = "pending";
17
17
  FlowStatus["ERROR"] = "error";
18
18
  })(FlowStatus = exports.FlowStatus || (exports.FlowStatus = {}));
19
- // action status
19
+ // actionStatus
20
20
  var ActionStatus;
21
21
  (function (ActionStatus) {
22
22
  ActionStatus["SUCCESS"] = "success";
23
23
  ActionStatus["ERROR"] = "error";
24
24
  ActionStatus["INTERRUPTED"] = "interrupted";
25
25
  })(ActionStatus = exports.ActionStatus || (exports.ActionStatus = {}));
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constant/index.ts"],"names":[],"mappings":";;;AAAA,WAAW;AACE,QAAA,eAAe,GAAG,OAAO,CAAA;AAEtC,YAAY;AACC,QAAA,uBAAuB,GAAG,mBAAmB,CAAA;AAC7C,QAAA,0BAA0B,GAAG,sBAAsB,CAAA;AACnD,QAAA,oBAAoB,GAAG,gBAAgB,CAAA;AAEpD,aAAa;AACb,IAAY,UAMX;AAND,WAAY,UAAU;IACpB,qCAAuB,CAAA;IACvB,yCAA2B,CAAA;IAC3B,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,6BAAe,CAAA;AACjB,CAAC,EANW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAMrB;AAED,eAAe;AACf,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,mCAAmB,CAAA;IACnB,+BAAe,CAAA;IACf,2CAA2B,CAAA;AAC7B,CAAC,EAJW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAIvB"}
@@ -0,0 +1,12 @@
1
+ export declare enum ErrorCode {
2
+ NONE_START_NODE = 1000,
3
+ NONE_NODE_ID = 1001,
4
+ NO_DOCUMENT_BODY = 2001
5
+ }
6
+ export declare enum WarningCode {
7
+ NONE_START_NODE_IN_DATA = 2000,
8
+ START_NODE_INCOMING = 2001,
9
+ EXPRESSION_EXEC_ERROR = 3000
10
+ }
11
+ export declare const getErrorMsg: (code: ErrorCode) => string;
12
+ export declare const getWarningMsg: (code: WarningCode) => string;
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- var _a, _b;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.getWarningMsg = exports.getErrorMsg = exports.WarningCode = exports.ErrorCode = void 0;
5
4
  var ErrorCode;
@@ -17,15 +16,19 @@ var WarningCode;
17
16
  // 表达式判断异常
18
17
  WarningCode[WarningCode["EXPRESSION_EXEC_ERROR"] = 3000] = "EXPRESSION_EXEC_ERROR";
19
18
  })(WarningCode = exports.WarningCode || (exports.WarningCode = {}));
20
- var errorMsgMapCn = (_a = {},
21
- _a[ErrorCode.NONE_START_NODE] = '未找到入度为0的节点',
22
- _a[ErrorCode.NONE_NODE_ID] = '流程数据中存在没有此节点',
23
- _a[ErrorCode.NO_DOCUMENT_BODY] = '找不到document.body, 请在DOM加载完成后再执行',
24
- _a);
25
- var warningMsgMapCn = (_b = {},
26
- _b[WarningCode.NONE_START_NODE_IN_DATA] = '初始化数据中未找到入度为0的节点',
27
- _b[WarningCode.START_NODE_INCOMING] = '开始节点不允许被连入',
28
- _b[WarningCode.EXPRESSION_EXEC_ERROR] = '表达式执行异常',
29
- _b);
30
- exports.getErrorMsg = function (code) { return "error[" + code + "]: " + errorMsgMapCn[code]; };
31
- exports.getWarningMsg = function (code) { return "warning[" + code + "]: " + warningMsgMapCn[code]; };
19
+ // TODO: 感觉这块可以用个国际化插件,这样配置不同语言加文件就可以了。
20
+ const errorMsgMapCn = {
21
+ [ErrorCode.NONE_START_NODE]: '未找到入度为0的节点',
22
+ [ErrorCode.NONE_NODE_ID]: '流程数据中存在没有此节点',
23
+ [ErrorCode.NO_DOCUMENT_BODY]: '找不到document.body, 请在DOM加载完成后再执行',
24
+ };
25
+ const warningMsgMapCn = {
26
+ [WarningCode.NONE_START_NODE_IN_DATA]: '初始化数据中未找到入度为0的节点',
27
+ [WarningCode.START_NODE_INCOMING]: '开始节点不允许被连入',
28
+ [WarningCode.EXPRESSION_EXEC_ERROR]: '表达式执行异常',
29
+ };
30
+ const getErrorMsg = (code) => `error[${code}]: ${errorMsgMapCn[code]}`;
31
+ exports.getErrorMsg = getErrorMsg;
32
+ const getWarningMsg = (code) => `warning[${code}]: ${warningMsgMapCn[code]}`;
33
+ exports.getWarningMsg = getWarningMsg;
34
+ //# sourceMappingURL=logCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logCode.js","sourceRoot":"","sources":["../../src/constant/logCode.ts"],"names":[],"mappings":";;;AAAA,IAAY,SAOX;AAPD,WAAY,SAAS;IACnB,SAAS;IACT,kEAAsB,CAAA;IACtB,4DAAmB,CAAA;IAEnB,QAAQ;IACR,oEAAuB,CAAA;AACzB,CAAC,EAPW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAOpB;AAED,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,sFAA8B,CAAA;IAC9B,8EAA0B,CAAA;IAE1B,UAAU;IACV,kFAA4B,CAAA;AAC9B,CAAC,EANW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAMtB;AAED,uCAAuC;AACvC,MAAM,aAAa,GAAG;IACpB,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,YAAY;IACzC,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,cAAc;IACxC,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,iCAAiC;CAChE,CAAA;AAED,MAAM,eAAe,GAAG;IACtB,CAAC,WAAW,CAAC,uBAAuB,CAAC,EAAE,kBAAkB;IACzD,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAAE,YAAY;IAC/C,CAAC,WAAW,CAAC,qBAAqB,CAAC,EAAE,SAAS;CAC/C,CAAA;AAEM,MAAM,WAAW,GAAG,CAAC,IAAe,EAAE,EAAE,CAC7C,SAAS,IAAI,MAAM,aAAa,CAAC,IAAI,CAAC,EAAE,CAAA;AAD7B,QAAA,WAAW,eACkB;AACnC,MAAM,aAAa,GAAG,CAAC,IAAiB,EAAE,EAAE,CACjD,WAAW,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,CAAA;AADjC,QAAA,aAAa,iBACoB"}
@@ -0,0 +1,2 @@
1
+ declare const runInBrowserContext: (code: string, globalData?: {}) => Promise<null>;
2
+ export { runInBrowserContext };
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runInBrowserContext = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const logCode_1 = require("../constant/logCode");
6
+ const runInBrowserContext = (code, globalData = {}) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
7
+ const iframe = document.createElement('iframe');
8
+ iframe.style.display = 'none';
9
+ if (!document || !document.body) {
10
+ console.error((0, logCode_1.getErrorMsg)(logCode_1.ErrorCode.NO_DOCUMENT_BODY));
11
+ }
12
+ document.body.appendChild(iframe);
13
+ const iframeWindow = iframe.contentWindow;
14
+ const iframeEval = iframeWindow.eval;
15
+ Object.keys(globalData).forEach((key) => {
16
+ iframeWindow[key] = globalData[key];
17
+ });
18
+ let res = null;
19
+ try {
20
+ res = iframeEval.call(iframeWindow, code);
21
+ }
22
+ catch (e) {
23
+ console.warn((0, logCode_1.getWarningMsg)(logCode_1.WarningCode.EXPRESSION_EXEC_ERROR), {
24
+ code,
25
+ globalData,
26
+ e,
27
+ });
28
+ }
29
+ document.body.removeChild(iframe);
30
+ return res;
31
+ });
32
+ exports.runInBrowserContext = runInBrowserContext;
33
+ //# sourceMappingURL=brewserVm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brewserVm.js","sourceRoot":"","sources":["../../src/expression/brewserVm.ts"],"names":[],"mappings":";;;;AAAA,iDAK4B;AAE5B,MAAM,mBAAmB,GAAG,CAAO,IAAY,EAAE,UAAU,GAAG,EAAE,EAAE,EAAE;IAClE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;IAC7B,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC/B,OAAO,CAAC,KAAK,CAAC,IAAA,qBAAW,EAAC,mBAAS,CAAC,gBAAgB,CAAC,CAAC,CAAA;KACvD;IACD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IAEjC,MAAM,YAAY,GAAG,MAAM,CAAC,aAAoB,CAAA;IAChD,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAA;IACpC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,GAAW,EAAE,EAAE;QAC9C,YAAY,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,IAAI,GAAG,GAAG,IAAI,CAAA;IACd,IAAI;QACF,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;KAC1C;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,IAAI,CAAC,IAAA,uBAAa,EAAC,qBAAW,CAAC,qBAAqB,CAAC,EAAE;YAC7D,IAAI;YACJ,UAAU;YACV,CAAC;SACF,CAAC,CAAA;KACH;IACD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA,CAAA;AAEQ,kDAAmB"}
@@ -0,0 +1,2 @@
1
+ declare const getExpressionResult: (code: string, context: any) => Promise<any>;
2
+ export { getExpressionResult };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getExpressionResult = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const nodeVm_1 = require("./nodeVm");
6
+ const brewserVm_1 = require("./brewserVm");
7
+ const utils_1 = require("../utils");
8
+ const getExpressionResult = (code, context) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
9
+ if (utils_1.isInNodeJS) {
10
+ const r = yield (0, nodeVm_1.runInNodeContext)(code, context);
11
+ return r;
12
+ }
13
+ if (utils_1.isInBrowser) {
14
+ const r = yield (0, brewserVm_1.runInBrowserContext)(code, context);
15
+ return r;
16
+ }
17
+ return utils_1.globalScope.eval(code);
18
+ });
19
+ exports.getExpressionResult = getExpressionResult;
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/expression/index.ts"],"names":[],"mappings":";;;;AAAA,qCAA2C;AAC3C,2CAAiD;AACjD,oCAA+D;AAE/D,MAAM,mBAAmB,GAAG,CAAO,IAAY,EAAE,OAAY,EAAE,EAAE;IAC/D,IAAI,kBAAU,EAAE;QACd,MAAM,CAAC,GAAG,MAAM,IAAA,yBAAgB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC/C,OAAO,CAAC,CAAA;KACT;IACD,IAAI,mBAAW,EAAE;QACf,MAAM,CAAC,GAAG,MAAM,IAAA,+BAAmB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAClD,OAAO,CAAC,CAAA;KACT;IACD,OAAO,mBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC/B,CAAC,CAAA,CAAA;AAEQ,kDAAmB"}
@@ -0,0 +1,4 @@
1
+ /// <reference types="node" />
2
+ import vm from 'node:vm';
3
+ declare const runInNodeContext: (code: string, globalData?: Record<string, unknown>) => Promise<vm.Context>;
4
+ export { runInNodeContext };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runInNodeContext = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const node_vm_1 = tslib_1.__importDefault(require("node:vm"));
6
+ // const vm = require('node:vm');
7
+ const runInNodeContext = (code, globalData = {}) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
8
+ const context = node_vm_1.default.createContext(globalData);
9
+ node_vm_1.default.runInContext(code, context);
10
+ return context;
11
+ });
12
+ exports.runInNodeContext = runInNodeContext;
13
+ //# sourceMappingURL=nodeVm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeVm.js","sourceRoot":"","sources":["../../src/expression/nodeVm.ts"],"names":[],"mappings":";;;;AAAA,8DAAwB;AACxB,iCAAiC;AAEjC,MAAM,gBAAgB,GAAG,CACvB,IAAY,EACZ,aAAsC,EAAE,EACxC,EAAE;IACF,MAAM,OAAO,GAAG,iBAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;IAC5C,iBAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAE9B,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA,CAAA;AAEQ,4CAAgB"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,157 @@
1
+ import { BaseNode, StartNode, TaskNode } from './nodes';
2
+ import { FlowModel } from './FlowModel';
3
+ import { Recorder } from './recorder';
4
+ export declare class Engine {
5
+ readonly instanceId: string;
6
+ graphData?: Engine.GraphConfigData;
7
+ flowModel?: FlowModel;
8
+ recorder?: Recorder;
9
+ context?: Record<string, unknown>;
10
+ nodeModelMap: Map<string, BaseNode.NodeConstructor>;
11
+ constructor(options?: Engine.Options);
12
+ /**
13
+ * 注册节点
14
+ * @param nodeConfig { type: 'custom-node', model: NodeClass }
15
+ */
16
+ register(nodeConfig: Engine.NodeConfig): void;
17
+ /**
18
+ * 自定义执行记录的存储,默认浏览器使用 sessionStorage, nodejs 使用内存存储
19
+ * 注意:由于执行记录不全会主动删除,所以需要自行清理。
20
+ * nodejs 环境建议自定义为持久化存储。
21
+ * engine.setCustomRecorder({{
22
+ * async addActionRecord(task) {}
23
+ * async getTask(actionId) {}
24
+ * async getExecutionTasks(executionId) {}
25
+ * clear(instanceId) {}
26
+ * }}
27
+ * @param recorder
28
+ */
29
+ setCustomRecorder(recorder: Recorder): void;
30
+ /**
31
+ * 加载流程图数据
32
+ */
33
+ load({ graphData, startNodeType, globalData, }: Engine.LoadGraphParam): FlowModel;
34
+ /**
35
+ * 执行流程,允许多次调用
36
+ */
37
+ execute(param?: Partial<Engine.ActionParam>): Promise<Engine.NextActionParam>;
38
+ /**
39
+ * 中断流程恢复
40
+ * @param resumeParam
41
+ * @returns
42
+ */
43
+ resume(resumeParam: Engine.ResumeParam): Promise<Engine.NextActionParam | undefined>;
44
+ getExecutionList(): Promise<any>;
45
+ /**
46
+ * 获取执行任务记录
47
+ * @param executionId
48
+ * @returns
49
+ */
50
+ getExecutionRecord(executionId: Engine.Key): Promise<Recorder.Info[] | null>;
51
+ destroy(): void;
52
+ getGlobalData(): Record<string, unknown> | undefined;
53
+ setGlobalData(data: Record<string, unknown>): void;
54
+ updateGlobalData(data: Record<string, unknown>): void;
55
+ }
56
+ export declare namespace Engine {
57
+ type Point = {
58
+ id?: string;
59
+ x: number;
60
+ y: number;
61
+ [key: string]: unknown;
62
+ };
63
+ type TextConfig = {
64
+ value: string;
65
+ } & Point;
66
+ type NodeData = {
67
+ id: string;
68
+ type: string;
69
+ x?: number;
70
+ y?: number;
71
+ text?: TextConfig | string;
72
+ zIndex?: number;
73
+ properties?: Record<string, unknown>;
74
+ };
75
+ type EdgeData = {
76
+ id: string;
77
+ /**
78
+ * 边的类型,不传默认为lf.setDefaultEdgeType(type)传入的类型。
79
+ * LogicFlow内部默认为polyline
80
+ */
81
+ type?: string;
82
+ sourceNodeId: string;
83
+ sourceAnchorId?: string;
84
+ targetNodeId: string;
85
+ targetAnchorId?: string;
86
+ startPoint?: {
87
+ x: number;
88
+ y: number;
89
+ };
90
+ endPoint?: {
91
+ x: number;
92
+ y: number;
93
+ };
94
+ text?: {
95
+ x: number;
96
+ y: number;
97
+ value: string;
98
+ } | string;
99
+ pointsList?: Point[];
100
+ zIndex?: number;
101
+ properties?: Record<string, unknown>;
102
+ };
103
+ type GraphConfigData = {
104
+ nodes: NodeData[];
105
+ edges: EdgeData[];
106
+ };
107
+ type LoadGraphParam = {
108
+ graphData: GraphConfigData;
109
+ startNodeType?: string;
110
+ globalData?: Record<string, unknown>;
111
+ };
112
+ type Options = {
113
+ context?: Record<string, unknown>;
114
+ debug?: boolean;
115
+ };
116
+ type Key = string | number;
117
+ type NodeConfig = {
118
+ type: string;
119
+ model: any;
120
+ };
121
+ type NodeParam = {
122
+ executionId: Key;
123
+ nodeId: Key;
124
+ };
125
+ type CommonActionInfo = {
126
+ actionId: Key;
127
+ } & NodeParam;
128
+ type ActionParam = CommonActionInfo;
129
+ type ResumeParam = {
130
+ data?: Record<string, unknown>;
131
+ } & CommonActionInfo;
132
+ type ExecParam = {
133
+ next: (data: NextActionParam) => void;
134
+ } & ActionParam;
135
+ type ExecResumeParam = {
136
+ next: (data: NextActionParam) => void;
137
+ } & ResumeParam;
138
+ type ActionStatus = 'success' | 'error' | 'interrupted' | '';
139
+ type NextActionParam = {
140
+ executionId: Key;
141
+ nodeId: Key;
142
+ actionId: Key;
143
+ nodeType: string;
144
+ outgoing: BaseNode.OutgoingConfig[];
145
+ properties?: Record<string, unknown>;
146
+ detail?: Record<string, unknown>;
147
+ status?: ActionStatus;
148
+ };
149
+ type ActionResult = NextActionParam;
150
+ type NodeExecResult = {
151
+ nodeType: string;
152
+ properties?: Record<string, unknown>;
153
+ } & CommonActionInfo & ActionResult;
154
+ }
155
+ export * from './constant';
156
+ export { BaseNode, StartNode, TaskNode, Recorder };
157
+ export default Engine;
package/lib/index.js ADDED
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Recorder = exports.TaskNode = exports.StartNode = exports.BaseNode = exports.Engine = void 0;
4
+ const tslib_1 = require("tslib");
5
+ // import { LogicFlow } from '@logicflow/core';
6
+ const nodes_1 = require("./nodes");
7
+ Object.defineProperty(exports, "BaseNode", { enumerable: true, get: function () { return nodes_1.BaseNode; } });
8
+ Object.defineProperty(exports, "StartNode", { enumerable: true, get: function () { return nodes_1.StartNode; } });
9
+ Object.defineProperty(exports, "TaskNode", { enumerable: true, get: function () { return nodes_1.TaskNode; } });
10
+ const FlowModel_1 = require("./FlowModel");
11
+ const recorder_1 = require("./recorder");
12
+ Object.defineProperty(exports, "Recorder", { enumerable: true, get: function () { return recorder_1.Recorder; } });
13
+ const utils_1 = require("./utils");
14
+ class Engine {
15
+ constructor(options) {
16
+ this.nodeModelMap = new Map();
17
+ this.instanceId = (0, utils_1.createEngineId)();
18
+ if (options === null || options === void 0 ? void 0 : options.debug) {
19
+ this.recorder = new recorder_1.Recorder({
20
+ instanceId: this.instanceId,
21
+ });
22
+ }
23
+ // 默认注册节点 register default nodes
24
+ this.register({
25
+ type: nodes_1.StartNode.nodeTypeName,
26
+ model: nodes_1.StartNode,
27
+ });
28
+ this.register({
29
+ type: nodes_1.TaskNode.nodeTypeName,
30
+ model: nodes_1.TaskNode,
31
+ });
32
+ this.context = (options === null || options === void 0 ? void 0 : options.context) || {};
33
+ }
34
+ /**
35
+ * 注册节点
36
+ * @param nodeConfig { type: 'custom-node', model: NodeClass }
37
+ */
38
+ register(nodeConfig) {
39
+ this.nodeModelMap.set(nodeConfig.type, nodeConfig.model);
40
+ }
41
+ /**
42
+ * 自定义执行记录的存储,默认浏览器使用 sessionStorage, nodejs 使用内存存储
43
+ * 注意:由于执行记录不全会主动删除,所以需要自行清理。
44
+ * nodejs 环境建议自定义为持久化存储。
45
+ * engine.setCustomRecorder({{
46
+ * async addActionRecord(task) {}
47
+ * async getTask(actionId) {}
48
+ * async getExecutionTasks(executionId) {}
49
+ * clear(instanceId) {}
50
+ * }}
51
+ * @param recorder
52
+ */
53
+ setCustomRecorder(recorder) {
54
+ this.recorder = recorder;
55
+ }
56
+ /**
57
+ * 加载流程图数据
58
+ */
59
+ load({ graphData, startNodeType = 'StartNode', globalData = {}, }) {
60
+ this.graphData = graphData;
61
+ const flowModel = new FlowModel_1.FlowModel({
62
+ nodeModelMap: this.nodeModelMap,
63
+ recorder: this.recorder,
64
+ context: this.context,
65
+ globalData,
66
+ startNodeType,
67
+ });
68
+ flowModel.load(graphData);
69
+ this.flowModel = flowModel;
70
+ return flowModel;
71
+ }
72
+ /**
73
+ * 执行流程,允许多次调用
74
+ */
75
+ execute(param) {
76
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
77
+ return new Promise((resolve, reject) => {
78
+ var _a;
79
+ let execParam = param;
80
+ if (!param) {
81
+ execParam = {};
82
+ }
83
+ (_a = this.flowModel) === null || _a === void 0 ? void 0 : _a.execute(Object.assign(Object.assign({}, execParam), { callback: (result) => {
84
+ resolve(result);
85
+ }, onError: (error) => {
86
+ reject(error);
87
+ } }));
88
+ });
89
+ });
90
+ }
91
+ /**
92
+ * 中断流程恢复
93
+ * @param resumeParam
94
+ * @returns
95
+ */
96
+ resume(resumeParam) {
97
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
98
+ return new Promise((resolve, reject) => {
99
+ var _a;
100
+ (_a = this.flowModel) === null || _a === void 0 ? void 0 : _a.resume(Object.assign(Object.assign({}, resumeParam), { callback: (result) => {
101
+ resolve(result);
102
+ }, onError: (error) => {
103
+ reject(error);
104
+ } }));
105
+ });
106
+ });
107
+ }
108
+ getExecutionList() {
109
+ var _a;
110
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
111
+ return yield ((_a = this.recorder) === null || _a === void 0 ? void 0 : _a.getExecutionList());
112
+ });
113
+ }
114
+ /**
115
+ * 获取执行任务记录
116
+ * @param executionId
117
+ * @returns
118
+ */
119
+ getExecutionRecord(executionId) {
120
+ var _a, _b;
121
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
122
+ const actions = yield ((_a = this.recorder) === null || _a === void 0 ? void 0 : _a.getExecutionActions(executionId));
123
+ if (!actions) {
124
+ return null;
125
+ }
126
+ // DONE: 确认 records 的类型
127
+ const records = [];
128
+ for (let i = 0; i < (actions === null || actions === void 0 ? void 0 : actions.length); i++) {
129
+ const action = actions[i];
130
+ if (this.recorder) {
131
+ records.push((_b = this.recorder) === null || _b === void 0 ? void 0 : _b.getActionRecord(action));
132
+ }
133
+ }
134
+ return Promise.all(records);
135
+ });
136
+ }
137
+ destroy() {
138
+ var _a;
139
+ (_a = this.recorder) === null || _a === void 0 ? void 0 : _a.clear();
140
+ }
141
+ getGlobalData() {
142
+ var _a;
143
+ return (_a = this.flowModel) === null || _a === void 0 ? void 0 : _a.globalData;
144
+ }
145
+ setGlobalData(data) {
146
+ if (this.flowModel) {
147
+ this.flowModel.globalData = data;
148
+ }
149
+ }
150
+ updateGlobalData(data) {
151
+ if (this.flowModel) {
152
+ Object.assign(this.flowModel.globalData, data);
153
+ }
154
+ }
155
+ }
156
+ exports.Engine = Engine;
157
+ tslib_1.__exportStar(require("./constant"), exports);
158
+ exports.default = Engine;
159
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { Engine } from '..';
2
+ import { ActionStatus } from '../constant';
3
+ export interface IBaseNodeProps {
4
+ nodeConfig: BaseNode.NodeConfig;
5
+ context: Record<string, any>;
6
+ globalData: Record<string, unknown>;
7
+ }
8
+ export declare class BaseNode implements BaseNode.Base {
9
+ readonly baseType: string;
10
+ static nodeTypeName: string;
11
+ /**
12
+ * 节点的入边
13
+ */
14
+ incoming: BaseNode.IncomingConfig[];
15
+ /**
16
+ * 节点的出边
17
+ */
18
+ outgoing: BaseNode.OutgoingConfig[];
19
+ /**
20
+ * 节点的属性
21
+ */
22
+ properties?: Record<string, unknown>;
23
+ nodeId: Engine.Key;
24
+ type: string;
25
+ /**
26
+ * 节点的上下文,是调用流程时传入的上下文
27
+ */
28
+ context: Record<string, any>;
29
+ /**
30
+ * 节点的全局数据,是调用流程时传入的全局数据
31
+ * 在计算表达式时,即基于全局数据进行计算
32
+ */
33
+ globalData: Record<string, unknown>;
34
+ constructor({ nodeConfig, context, globalData }: IBaseNodeProps);
35
+ /**
36
+ * 节点的执行逻辑
37
+ * @overridable 可以自定义节点重写此方法
38
+ * @param param.executionId 流程执行记录 ID
39
+ * @param param.actionId 此节点执行记录 ID
40
+ * @param param.nodeId 节点 ID
41
+ * @return 返回下一步的执行参数
42
+ * 当不返回时,表示此节点执行成功,流程会继续执行下一步。
43
+ * 当返回时,返回格式为
44
+ */
45
+ action(param?: Engine.ActionParam): Promise<BaseNode.ActionResult | undefined>;
46
+ /**
47
+ * 节点重新恢复执行的逻辑
48
+ * @overridable 可以自定义节点重写此方法
49
+ * @param params.executionId 流程执行记录 ID
50
+ * @param params.actionId 此节点执行记录 ID
51
+ * @param params.nodeId 节点 ID
52
+ */
53
+ onResume(params: Engine.ResumeParam): Promise<void>;
54
+ /**
55
+ * 判断该节点是否满足条件
56
+ */
57
+ private isPass;
58
+ /**
59
+ * 获取当前节点执行的下一个节点
60
+ */
61
+ private getOutgoing;
62
+ /**
63
+ * 节点的每一次执行都会生成一个唯一的 actionId
64
+ */
65
+ execute(params: Engine.ExecParam): Promise<Engine.NextActionParam>;
66
+ resume(params: Engine.ExecResumeParam): Promise<undefined>;
67
+ }
68
+ export declare namespace BaseNode {
69
+ interface Base {
70
+ incoming: IncomingConfig[];
71
+ outgoing: OutgoingConfig[];
72
+ properties?: Record<string, unknown>;
73
+ nodeId: Engine.Key;
74
+ type: string;
75
+ readonly baseType: string;
76
+ execute(actionParam: Engine.ActionParam): Promise<Engine.NextActionParam>;
77
+ }
78
+ type IncomingConfig = {
79
+ id: Engine.Key;
80
+ source: string;
81
+ properties?: Record<string, unknown>;
82
+ };
83
+ type OutgoingConfig = {
84
+ id: Engine.Key;
85
+ target: string;
86
+ properties?: Record<string, unknown>;
87
+ result?: string | boolean;
88
+ };
89
+ type NodeConfig = {
90
+ id: Engine.Key;
91
+ type: string;
92
+ properties?: Record<string, unknown>;
93
+ incoming: IncomingConfig[];
94
+ outgoing: OutgoingConfig[];
95
+ };
96
+ type NodeConstructor = {
97
+ new (config: {
98
+ nodeConfig: NodeConfig;
99
+ context: Record<string, any>;
100
+ globalData: Record<string, unknown>;
101
+ }): BaseNode;
102
+ };
103
+ type ActionResult = {
104
+ status: ActionStatus;
105
+ detail?: Record<string, unknown>;
106
+ };
107
+ }
108
+ export default BaseNode;