@steedos/service-package-loader 2.5.0-beta.8 → 2.5.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 (33) hide show
  1. package/index.js +13 -2
  2. package/lib/index.d.ts +1 -0
  3. package/lib/index.js +2 -1
  4. package/lib/index.js.map +1 -1
  5. package/lib/loader/triggerYmlLoader.d.ts +1 -0
  6. package/lib/loader/triggerYmlLoader.js +61 -0
  7. package/lib/loader/triggerYmlLoader.js.map +1 -0
  8. package/lib/triggerLoader/index.js +71 -69
  9. package/lib/triggerLoader/index.js.map +1 -1
  10. package/package.json +7 -7
  11. package/src/index.ts +4 -3
  12. package/src/loader/triggerYmlLoader.ts +57 -0
  13. package/src/triggerLoader/index.ts +104 -74
  14. package/lib/triggerLoader/types/action.d.ts +0 -9
  15. package/lib/triggerLoader/types/action.js +0 -3
  16. package/lib/triggerLoader/types/action.js.map +0 -1
  17. package/lib/triggerLoader/types/index.d.ts +0 -4
  18. package/lib/triggerLoader/types/index.js +0 -8
  19. package/lib/triggerLoader/types/index.js.map +0 -1
  20. package/lib/triggerLoader/types/meta.d.ts +0 -8
  21. package/lib/triggerLoader/types/meta.js +0 -3
  22. package/lib/triggerLoader/types/meta.js.map +0 -1
  23. package/lib/triggerLoader/types/trigger.d.ts +0 -6
  24. package/lib/triggerLoader/types/trigger.js +0 -3
  25. package/lib/triggerLoader/types/trigger.js.map +0 -1
  26. package/lib/triggerLoader/types/triggerData.d.ts +0 -6
  27. package/lib/triggerLoader/types/triggerData.js +0 -3
  28. package/lib/triggerLoader/types/triggerData.js.map +0 -1
  29. package/src/triggerLoader/types/action.ts +0 -9
  30. package/src/triggerLoader/types/index.ts +0 -4
  31. package/src/triggerLoader/types/meta.ts +0 -8
  32. package/src/triggerLoader/types/trigger.ts +0 -6
  33. package/src/triggerLoader/types/triggerData.ts +0 -6
package/index.js CHANGED
@@ -6,6 +6,7 @@ const core = require('@steedos/core');
6
6
  const triggerLoader = require('./lib').triggerLoader;
7
7
  const processLoader = require('./lib').processLoader;
8
8
  const processTriggerLoader = require('./lib').processTriggerLoader;
9
+ const triggerYmlLoader = require('./lib').triggerYmlLoader;
9
10
  const path = require('path');
10
11
  const _ = require('lodash');
11
12
  const express = require('express');
@@ -19,6 +20,8 @@ const loadFlowFile = new metaDataCore.LoadFlowFile();
19
20
 
20
21
  module.exports = {
21
22
  name: "service-package-loader",
23
+
24
+ triggerLoader,
22
25
 
23
26
  /**
24
27
  * Settings
@@ -166,6 +169,7 @@ module.exports = {
166
169
  await objectql.addAllConfigFiles(packagePath, datasourceName, name);
167
170
  await triggerLoader.load(this.broker, packagePath, name);
168
171
  await processTriggerLoader.load(this.broker, packagePath, name);
172
+ await triggerYmlLoader.load(this.broker, packagePath, name);
169
173
  core.loadClientScripts();
170
174
  let routersData = objectql.loadRouters(packagePath);
171
175
  let oldRoutersInfo = await this.broker.call(`@steedos/service-packages.getPackageRoutersInfo`, {packageName: name})
@@ -306,7 +310,14 @@ module.exports = {
306
310
 
307
311
  merged(schema) {
308
312
  schema.packageName = schema.name;
309
- schema.name = `~packages-${schema.name}`;
313
+ if(!schema.metadata || !schema.metadata.$package){
314
+ schema.name = `~packages-${schema.name}`;
315
+ }
316
+
317
+ schema.settings.packageInfo = {
318
+ ...schema.settings.packageInfo,
319
+ ...(schema.metadata && schema.metadata.$package ? schema.metadata.$package : {})
320
+ }
310
321
  },
311
322
 
312
323
  /**
@@ -348,7 +359,7 @@ module.exports = {
348
359
  nodeID: this.broker.nodeID,
349
360
  instanceID: this.broker.instanceID
350
361
  }] }); //${this.broker.nodeID}.${this.name}
351
-
362
+ this.broker.broadcast('metadata.object_triggers.change', {})
352
363
  this.broker.broadcastLocal("@steedos/service-packages.offline", {serviceInfo: {name: this.name, nodeID: this.broker.nodeID, instanceID: this.broker.instanceID}})
353
364
 
354
365
  console.log(`service ${this.name} stopped`);
package/lib/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * as triggerLoader from "./triggerLoader";
2
2
  export * as processLoader from "./processLoader";
3
3
  export * as processTriggerLoader from "./processTriggerLoader";
4
+ export * as triggerYmlLoader from './loader/triggerYmlLoader';
package/lib/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.processTriggerLoader = exports.processLoader = exports.triggerLoader = void 0;
3
+ exports.triggerYmlLoader = exports.processTriggerLoader = exports.processLoader = exports.triggerLoader = void 0;
4
4
  exports.triggerLoader = require("./triggerLoader");
5
5
  exports.processLoader = require("./processLoader");
6
6
  exports.processTriggerLoader = require("./processTriggerLoader");
7
+ exports.triggerYmlLoader = require("./loader/triggerYmlLoader");
7
8
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAOA,mDAAgD;AAChD,mDAAgD;AAChD,iEAA8D"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAOA,mDAAgD;AAChD,mDAAgD;AAChD,iEAA8D;AAC9D,gEAA8D"}
@@ -0,0 +1 @@
1
+ export declare function load(broker: any, packagePath: string, packageServiceName: string): Promise<void>;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.load = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const metadata_core_1 = require("@steedos/metadata-core");
6
+ const path = require("path");
7
+ const _ = require("lodash");
8
+ const loadTriggerFile = new metadata_core_1.LoadTriggerFile();
9
+ function isPatternTrigger(data) {
10
+ const { listenTo } = data;
11
+ if (listenTo === '*') {
12
+ return true;
13
+ }
14
+ else if (_.isArray(listenTo)) {
15
+ return true;
16
+ }
17
+ else if (_.isRegExp(listenTo)) {
18
+ return true;
19
+ }
20
+ else if (_.isString(listenTo) && listenTo.startsWith("/")) {
21
+ try {
22
+ if (_.isRegExp(eval(listenTo))) {
23
+ return true;
24
+ }
25
+ }
26
+ catch (error) {
27
+ return false;
28
+ }
29
+ return false;
30
+ }
31
+ return false;
32
+ }
33
+ function load(broker, packagePath, packageServiceName) {
34
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
35
+ let filePath = path.join(packagePath, "**");
36
+ let triggers = loadTriggerFile.load(filePath);
37
+ if (_.isEmpty(triggers)) {
38
+ return;
39
+ }
40
+ for (const apiName in triggers) {
41
+ const trigger = triggers[apiName];
42
+ if (isPatternTrigger(trigger)) {
43
+ trigger.isPattern = true;
44
+ }
45
+ yield broker.call(`object_triggers.add`, { apiName: `${trigger.listenTo}.${trigger.name}`, data: trigger }, {
46
+ meta: {
47
+ metadataServiceName: packageServiceName,
48
+ caller: {
49
+ nodeID: broker.nodeID,
50
+ service: {
51
+ name: packageServiceName,
52
+ }
53
+ }
54
+ }
55
+ });
56
+ broker.broadcast('metadata.object_triggers.change', { apiName: `${trigger.listenTo}.${trigger.name}`, listenTo: trigger.listenTo });
57
+ }
58
+ });
59
+ }
60
+ exports.load = load;
61
+ //# sourceMappingURL=triggerYmlLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triggerYmlLoader.js","sourceRoot":"","sources":["../../src/loader/triggerYmlLoader.ts"],"names":[],"mappings":";;;;AAQA,0DAAwD;AACxD,6BAA8B;AAC9B,4BAA6B;AAE7B,MAAM,eAAe,GAAG,IAAI,+BAAe,EAAE,CAAC;AAC9C,SAAS,gBAAgB,CAAC,IAAI;IAC1B,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC;IACxB,IAAG,QAAQ,KAAK,GAAG,EAAC;QAChB,OAAO,IAAI,CAAC;KACf;SAAK,IAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAC;QACzB,OAAO,IAAI,CAAC;KACf;SAAK,IAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAC;QAC1B,OAAO,IAAI,CAAC;KACf;SAAK,IAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAC;QACtD,IAAI;YACA,IAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAC;gBAC1B,OAAO,IAAI,CAAC;aACf;SACJ;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,KAAK,CAAA;SACf;QACD,OAAO,KAAK,CAAC;KAChB;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AACD,SAAsB,IAAI,CAAC,MAAW,EAAE,WAAmB,EAAE,kBAA0B;;QACnF,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,QAAQ,GAAQ,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACrB,OAAO;SACV;QACD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClC,IAAG,gBAAgB,CAAC,OAAO,CAAC,EAAC;gBACzB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAA;aAC3B;YACD,MAAM,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;gBACxG,IAAI,EAAE;oBACN,mBAAmB,EAAE,kBAAkB;oBACvC,MAAM,EAAE;wBACJ,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,OAAO,EAAE;4BACL,IAAI,EAAE,kBAAkB;yBAC3B;qBACJ;iBACJ;aAAC,CAAC,CAAC;YACJ,MAAM,CAAC,SAAS,CAAC,iCAAiC,EAAE,EAAC,OAAO,EAAE,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAC,CAAC,CAAA;SACpI;IACL,CAAC;CAAA;AAvBD,oBAuBC"}
@@ -4,35 +4,23 @@ exports.load = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const _ = require("underscore");
6
6
  const path = require("path");
7
- const objectql = require("@steedos/objectql");
8
7
  const objectql_1 = require("@steedos/objectql");
8
+ const TRIGGERKEYS = ['beforeFind', 'beforeInsert', 'beforeUpdate', 'beforeDelete', 'afterFind', 'afterInsert', 'afterUpdate', 'afterDelete', 'afterFindOne', 'afterCount'];
9
9
  function load(broker, packagePath, packageServiceName) {
10
10
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
11
11
  let actions = {};
12
12
  let serviceName = `~triggers-${packageServiceName}`;
13
13
  let filePath = path.join(packagePath, "**");
14
- let objTriggers = objectql.loadObjectTriggers(filePath, packageServiceName);
14
+ let objTriggers = (0, objectql_1.loadObjectTriggers)(filePath, packageServiceName);
15
15
  if (_.isEmpty(objTriggers)) {
16
16
  return;
17
17
  }
18
- for (const ot of objTriggers) {
19
- if (_.has(ot, 'handler')) {
20
- if (_.isString(ot.when)) {
21
- let action = generateAction(ot);
22
- if (action) {
23
- actions[action.name] = action;
24
- }
25
- }
26
- else if (_.isArray(ot.when)) {
27
- for (const w of ot.when) {
28
- let trigger = _.extend({}, ot, { when: w, name: undefined });
29
- let action = generateAction(trigger);
30
- if (action) {
31
- actions[action.name] = action;
32
- }
33
- }
34
- }
35
- }
18
+ for (const trigger of objTriggers) {
19
+ const actionTriggerName = (0, objectql_1.getMD5)((0, objectql_1.JSONStringify)(trigger));
20
+ actions[actionTriggerName] = generateActionTrigger(trigger);
21
+ broker.emit('trigger.loaded', {
22
+ objectName: trigger['listenTo']
23
+ });
36
24
  }
37
25
  let serviceConfig = {
38
26
  name: serviceName,
@@ -42,65 +30,79 @@ function load(broker, packagePath, packageServiceName) {
42
30
  if (!broker.started) {
43
31
  yield broker._restartService(service);
44
32
  }
45
- yield register(broker, actions, serviceName, packageServiceName);
46
33
  });
47
34
  }
48
35
  exports.load = load;
49
- function generateAction(trigger) {
50
- if (!_.contains(objectql_1._TRIGGERKEYS, trigger.when)) {
51
- console.warn(`invalid value ${trigger.when}, please check your trigger.`);
52
- return;
36
+ function generateActionTrigger(trigger) {
37
+ const when = [];
38
+ for (const key in trigger) {
39
+ if (Object.hasOwnProperty.call(trigger, key)) {
40
+ if (_.contains(TRIGGERKEYS, key)) {
41
+ when.push(key);
42
+ }
43
+ }
53
44
  }
54
- let name = trigger.name || (0, objectql_1.getMD5)((0, objectql_1.JSONStringify)(trigger));
55
- let action = {
45
+ const actionTrigger = {
56
46
  trigger: {
57
- when: trigger.when,
58
47
  listenTo: trigger.listenTo,
59
- name: name
48
+ when: when
60
49
  },
61
- name: `${trigger.listenTo}.${name}`,
62
- handler: function () { }
63
- };
64
- if (_.has(trigger, 'handler')) {
65
- action.handler = function (ctx) {
50
+ handler(ctx) {
66
51
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
67
- return yield trigger.handler.call(ctx.params, ctx);
52
+ const { isInsert, isUpdate, isDelete, isFind, isBefore, isAfter, isFindOne, isCount, id, doc, previousDoc, userId, spaceId, objectName, query, data } = ctx.params;
53
+ const context = {
54
+ id,
55
+ userId,
56
+ spaceId,
57
+ doc,
58
+ previousDoc,
59
+ query,
60
+ data,
61
+ objectName
62
+ };
63
+ let when = '';
64
+ if (isBefore) {
65
+ if (isFind) {
66
+ when = 'beforeFind';
67
+ }
68
+ else if (isInsert) {
69
+ when = 'beforeInsert';
70
+ }
71
+ else if (isUpdate) {
72
+ when = 'beforeUpdate';
73
+ }
74
+ else if (isDelete) {
75
+ when = 'beforeDelete';
76
+ }
77
+ }
78
+ else if (isAfter) {
79
+ if (isFind) {
80
+ when = 'afterFind';
81
+ }
82
+ else if (isInsert) {
83
+ when = 'afterInsert';
84
+ }
85
+ else if (isUpdate) {
86
+ when = 'afterUpdate';
87
+ }
88
+ else if (isDelete) {
89
+ when = 'afterDelete';
90
+ }
91
+ else if (isFindOne) {
92
+ when = 'afterFindOne';
93
+ }
94
+ else if (isCount) {
95
+ when = 'afterCount';
96
+ }
97
+ }
98
+ if (when) {
99
+ const object = (0, objectql_1.getObject)(objectName);
100
+ yield object.runTriggers(when, context);
101
+ return context;
102
+ }
68
103
  });
69
- };
70
- }
71
- return action;
72
- }
73
- function register(broker, actions, serviceName, packageServiceName) {
74
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
75
- for (const key in actions) {
76
- if (Object.hasOwnProperty.call(actions, key)) {
77
- let action = actions[key];
78
- let data = generateAddData(action);
79
- let meta = generateAddMeta(broker, serviceName, packageServiceName);
80
- yield broker.call('triggers.add', { data: data }, { meta: meta });
81
- }
82
- }
83
- });
84
- }
85
- function generateAddData(action) {
86
- let data = {
87
- name: action.trigger.name,
88
- listenTo: action.trigger.listenTo,
89
- when: action.trigger.when,
90
- action: action.name
91
- };
92
- return data;
93
- }
94
- function generateAddMeta(broker, serviceName, packageServiceName) {
95
- let meta = {
96
- metadataServiceName: packageServiceName,
97
- caller: {
98
- nodeID: broker.nodeID + '',
99
- service: {
100
- name: serviceName
101
- }
102
104
  }
103
105
  };
104
- return meta;
106
+ return actionTrigger;
105
107
  }
106
108
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/triggerLoader/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/triggerLoader/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@steedos/service-package-loader",
3
- "version": "2.5.0-beta.8",
3
+ "version": "2.5.0",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
7
- "build": "tsc",
7
+ "build": "rm -rf ./lib && tsc",
8
8
  "test": "echo \"Error: no test specified\" && exit 1"
9
9
  },
10
10
  "author": "",
11
11
  "license": "MIT",
12
12
  "dependencies": {
13
- "@steedos/core": "2.5.0-beta.8",
14
- "@steedos/metadata-core": "2.5.0-beta.8",
15
- "@steedos/objectql": "2.5.0-beta.8",
16
- "@steedos/router": "2.5.0-beta.8",
13
+ "@steedos/core": "2.5.0",
14
+ "@steedos/metadata-core": "2.5.0",
15
+ "@steedos/objectql": "2.5.0",
16
+ "@steedos/router": "2.5.0",
17
17
  "clone": "^2.1.2",
18
18
  "moleculer": "^0.14.25",
19
19
  "underscore": "^1.12.0"
@@ -25,5 +25,5 @@
25
25
  "publishConfig": {
26
26
  "access": "public"
27
27
  },
28
- "gitHead": "537101194e8c7c61a4eed846d28382126d947775"
28
+ "gitHead": "c4b366d1366ab52eb53da1a3ff4a80b16fd73cc0"
29
29
  }
package/src/index.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  /*
2
2
  * @Author: sunhaolin@hotoa.com
3
3
  * @Date: 2022-05-14 10:16:03
4
- * @LastEditors: sunhaolin@hotoa.com
5
- * @LastEditTime: 2022-05-14 13:51:40
4
+ * @LastEditors: baozhoutao@steedos.com
5
+ * @LastEditTime: 2023-04-25 17:08:47
6
6
  * @Description:
7
7
  */
8
8
  export * as triggerLoader from "./triggerLoader"
9
9
  export * as processLoader from "./processLoader"
10
- export * as processTriggerLoader from "./processTriggerLoader"
10
+ export * as processTriggerLoader from "./processTriggerLoader"
11
+ export * as triggerYmlLoader from './loader/triggerYmlLoader';
@@ -0,0 +1,57 @@
1
+ /*
2
+ * @Author: baozhoutao@steedos.com
3
+ * @Date: 2023-04-25 16:52:28
4
+ * @LastEditors: baozhoutao@steedos.com
5
+ * @LastEditTime: 2023-05-18 09:27:20
6
+ * @Description:
7
+ */
8
+
9
+ import { LoadTriggerFile } from '@steedos/metadata-core'
10
+ import path = require('path');
11
+ import _ = require('lodash');
12
+
13
+ const loadTriggerFile = new LoadTriggerFile();
14
+ function isPatternTrigger(data){
15
+ const {listenTo} = data;
16
+ if(listenTo === '*'){
17
+ return true;
18
+ }else if(_.isArray(listenTo)){
19
+ return true;
20
+ }else if(_.isRegExp(listenTo)){
21
+ return true;
22
+ }else if(_.isString(listenTo) && listenTo.startsWith("/")){
23
+ try {
24
+ if(_.isRegExp(eval(listenTo))){
25
+ return true;
26
+ }
27
+ } catch (error) {
28
+ return false
29
+ }
30
+ return false;
31
+ }
32
+ return false;
33
+ }
34
+ export async function load(broker: any, packagePath: string, packageServiceName: string) {
35
+ let filePath = path.join(packagePath, "**");
36
+ let triggers: any = loadTriggerFile.load(filePath);
37
+ if (_.isEmpty(triggers)) {
38
+ return;
39
+ }
40
+ for (const apiName in triggers) {
41
+ const trigger = triggers[apiName];
42
+ if(isPatternTrigger(trigger)){
43
+ trigger.isPattern = true
44
+ }
45
+ await broker.call(`object_triggers.add`, { apiName: `${trigger.listenTo}.${trigger.name}`, data: trigger }, {
46
+ meta: {
47
+ metadataServiceName: packageServiceName,
48
+ caller: {
49
+ nodeID: broker.nodeID,
50
+ service: {
51
+ name: packageServiceName,
52
+ }
53
+ }
54
+ }});
55
+ broker.broadcast('metadata.object_triggers.change', {apiName: `${trigger.listenTo}.${trigger.name}`, listenTo: trigger.listenTo})
56
+ }
57
+ }
@@ -1,36 +1,57 @@
1
+ /*
2
+ * @Author: sunhaolin@hotoa.com
3
+ * @Date: 2022-06-12 19:08:48
4
+ * @LastEditors: sunhaolin@hotoa.com
5
+ * @LastEditTime: 2023-04-24 13:09:55
6
+ * @Description: 加载*.trigger.js文件注册为新版action trigger
7
+ */
1
8
  import * as _ from "underscore";
2
9
  import * as path from "path";
3
- import * as objectql from "@steedos/objectql";
4
- import { getMD5, JSONStringify, _TRIGGERKEYS } from "@steedos/objectql";
5
- import { Action, Meta, Trigger, TriggerData } from "./types";
6
- import { Context } from 'moleculer';
10
+ import { getMD5, JSONStringify, TriggerActionParams, SteedosTriggerContextConfig, loadObjectTriggers, getObject } from "@steedos/objectql";
11
+
12
+ const TRIGGERKEYS = ['beforeFind', 'beforeInsert', 'beforeUpdate', 'beforeDelete', 'afterFind', 'afterInsert', 'afterUpdate', 'afterDelete', 'afterFindOne', 'afterCount']
7
13
 
8
14
  export async function load(broker: any, packagePath: string, packageServiceName: string) {
9
15
  let actions = {};
10
16
  let serviceName = `~triggers-${packageServiceName}`;
11
17
  let filePath = path.join(packagePath, "**");
12
- let objTriggers = objectql.loadObjectTriggers(filePath, packageServiceName);
18
+ let objTriggers = loadObjectTriggers(filePath, packageServiceName);
13
19
  if (_.isEmpty(objTriggers)) {
14
20
  return;
15
21
  }
16
- for (const ot of objTriggers) {
17
- if (_.has(ot, 'handler')) { // 新trigger格式
18
-
19
- if (_.isString(ot.when)) {
20
- let action = generateAction(ot);
21
- if (action) {
22
- actions[action.name] = action;
23
- }
24
- } else if (_.isArray(ot.when)) {
25
- for (const w of ot.when) {
26
- let trigger = _.extend({}, ot, { when: w, name: undefined });
27
- let action = generateAction(trigger);
28
- if (action) {
29
- actions[action.name] = action;
30
- }
31
- }
32
- }
22
+ /** objTriggers格式
23
+ [
24
+ {
25
+ beforeInsert: [AsyncFunction: beforeInsert],
26
+ beforeUpdate: [AsyncFunction: beforeUpdate],
27
+ beforeDelete: [AsyncFunction: beforeDelete],
28
+ afterInsert: [AsyncFunction: afterInsert],
29
+ afterUpdate: [AsyncFunction: afterUpdate],
30
+ afterDelete: [AsyncFunction: afterDelete],
31
+ metadataServiceName: '~packages-my-steedos-package',
32
+ listenTo: 'company'
33
+ }
34
+ ]
35
+ */
36
+ for (const trigger of objTriggers) {
37
+ // 转换为action trigger
38
+ /** action trigger 格式
39
+ spaceUsersBeforeUpdate: {
40
+ trigger: {
41
+ listenTo: 'space_users',
42
+ when: ['beforeInsert', 'beforeUpdate']
43
+ },
44
+ async handler(ctx) {
45
+ this.broker.logger.debug('spaceUsersBeforeUpdate', ctx)
46
+ }
33
47
  }
48
+ */
49
+ const actionTriggerName = getMD5(JSONStringify(trigger));
50
+ actions[actionTriggerName] = generateActionTrigger(trigger)
51
+
52
+ broker.emit('trigger.loaded', {
53
+ objectName: trigger['listenTo']
54
+ })
34
55
  }
35
56
 
36
57
  let serviceConfig = {
@@ -42,67 +63,76 @@ export async function load(broker: any, packagePath: string, packageServiceName:
42
63
  await broker._restartService(service)
43
64
  }
44
65
 
45
- await register(broker, actions, serviceName, packageServiceName);
46
66
  }
47
67
 
48
- function generateAction(trigger: Trigger): Action {
49
- if (!_.contains(_TRIGGERKEYS, trigger.when)) {
50
- console.warn(`invalid value ${trigger.when}, please check your trigger.`);
51
- return;
68
+ // 生成action trigger
69
+ function generateActionTrigger(trigger) {
70
+ const when = [];
71
+ for (const key in trigger) {
72
+ if (Object.hasOwnProperty.call(trigger, key)) {
73
+ if (_.contains(TRIGGERKEYS, key)) {
74
+ when.push(key);
75
+ }
76
+ }
52
77
  }
53
-
54
- let name = trigger.name || getMD5(JSONStringify(trigger));
55
- let action: Action = {
78
+ const actionTrigger = {
56
79
  trigger: {
57
- when: trigger.when,
58
80
  listenTo: trigger.listenTo,
59
- name: name
81
+ when: when
60
82
  },
61
- name: `${trigger.listenTo}.${name}`,
62
- handler: function () { }
63
- };
64
- if (_.has(trigger, 'handler')) {
65
- action.handler = async function (ctx: Context) {
66
- return await trigger.handler.call(ctx.params, ctx);
67
- }
68
- }
69
-
70
- return action;
71
- }
83
+ async handler(ctx) {
84
+ // 调用trigger.js的处理函数
85
+ const {
86
+ isInsert, isUpdate, isDelete, isFind, isBefore, isAfter, isFindOne, isCount,
87
+ id, doc, previousDoc,
88
+ // size,
89
+ userId, spaceId, objectName, query, data }: TriggerActionParams = ctx.params;
72
90
 
91
+ const context: SteedosTriggerContextConfig = {
92
+ id,
93
+ userId,
94
+ spaceId,
95
+ doc,
96
+ previousDoc,
97
+ query,
98
+ data,
99
+ objectName
100
+ }
73
101
 
74
- async function register(broker: any, actions: object, serviceName: string, packageServiceName: string) {
75
- for (const key in actions) {
76
- if (Object.hasOwnProperty.call(actions, key)) {
77
- let action = actions[key];
78
- let data = generateAddData(action);
79
- let meta = generateAddMeta(broker, serviceName, packageServiceName);
80
- await broker.call('triggers.add', { data: data }, { meta: meta });
81
- }
82
- }
83
- }
84
-
85
-
86
- function generateAddData(action: Action): TriggerData {
87
- let data = {
88
- name: action.trigger.name,
89
- listenTo: action.trigger.listenTo,
90
- when: action.trigger.when,
91
- action: action.name
92
- };
93
- return data;
94
- }
95
-
102
+ let when = ''
103
+ if (isBefore) {
104
+ if (isFind) {
105
+ when = 'beforeFind'
106
+ } else if (isInsert) {
107
+ when = 'beforeInsert'
108
+ } else if (isUpdate) {
109
+ when = 'beforeUpdate'
110
+ } else if (isDelete) {
111
+ when = 'beforeDelete'
112
+ }
113
+ }
114
+ else if (isAfter) {
115
+ if (isFind) {
116
+ when = 'afterFind'
117
+ } else if (isInsert) {
118
+ when = 'afterInsert'
119
+ } else if (isUpdate) {
120
+ when = 'afterUpdate'
121
+ } else if (isDelete) {
122
+ when = 'afterDelete'
123
+ } else if (isFindOne) {
124
+ when = 'afterFindOne'
125
+ } else if (isCount) {
126
+ when = 'afterCount'
127
+ }
128
+ }
96
129
 
97
- function generateAddMeta(broker: any, serviceName: string, packageServiceName: string): Meta {
98
- let meta = {
99
- metadataServiceName: packageServiceName,
100
- caller: {
101
- nodeID: broker.nodeID + '',
102
- service: {
103
- name: serviceName
130
+ if (when) {
131
+ const object = getObject(objectName);
132
+ await object.runTriggers(when, context);
133
+ return context;
104
134
  }
105
135
  }
106
136
  };
107
- return meta;
108
- }
137
+ return actionTrigger;
138
+ }
@@ -1,9 +0,0 @@
1
- export declare type Action = {
2
- trigger: {
3
- when: string | string[];
4
- listenTo: string;
5
- name: string;
6
- };
7
- name: string;
8
- handler: Function;
9
- };
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=action.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/triggerLoader/types/action.ts"],"names":[],"mappings":""}
@@ -1,4 +0,0 @@
1
- export * from './meta';
2
- export * from './triggerData';
3
- export * from './action';
4
- export * from './trigger';
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./meta"), exports);
5
- tslib_1.__exportStar(require("./triggerData"), exports);
6
- tslib_1.__exportStar(require("./action"), exports);
7
- tslib_1.__exportStar(require("./trigger"), exports);
8
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/triggerLoader/types/index.ts"],"names":[],"mappings":";;;AAAA,iDAAuB;AACvB,wDAA8B;AAC9B,mDAAyB;AACzB,oDAA0B"}
@@ -1,8 +0,0 @@
1
- export declare type Meta = {
2
- caller: {
3
- nodeID: string;
4
- service: {
5
- name: string;
6
- };
7
- };
8
- };
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=meta.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../src/triggerLoader/types/meta.ts"],"names":[],"mappings":""}
@@ -1,6 +0,0 @@
1
- export declare type Trigger = {
2
- name: string;
3
- listenTo: string;
4
- when: string | string[];
5
- handler: Function;
6
- };
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=trigger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trigger.js","sourceRoot":"","sources":["../../../src/triggerLoader/types/trigger.ts"],"names":[],"mappings":""}
@@ -1,6 +0,0 @@
1
- export declare type TriggerData = {
2
- name: string;
3
- listenTo: string;
4
- when: string | string[];
5
- action: string;
6
- };
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=triggerData.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"triggerData.js","sourceRoot":"","sources":["../../../src/triggerLoader/types/triggerData.ts"],"names":[],"mappings":""}
@@ -1,9 +0,0 @@
1
- export type Action = {
2
- trigger: {
3
- when: string | string[],
4
- listenTo: string,
5
- name: string
6
- },
7
- name: string,
8
- handler: Function
9
- }
@@ -1,4 +0,0 @@
1
- export * from './meta';
2
- export * from './triggerData';
3
- export * from './action';
4
- export * from './trigger';
@@ -1,8 +0,0 @@
1
- export type Meta = {
2
- caller: {
3
- nodeID: string,
4
- service: {
5
- name: string,
6
- }
7
- }
8
- }
@@ -1,6 +0,0 @@
1
- export type Trigger = {
2
- name: string,
3
- listenTo: string,
4
- when: string | string[],
5
- handler: Function
6
- }
@@ -1,6 +0,0 @@
1
- export type TriggerData = {
2
- name: string,
3
- listenTo: string,
4
- when: string | string[],
5
- action: string
6
- }