@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.
- package/index.js +13 -2
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/loader/triggerYmlLoader.d.ts +1 -0
- package/lib/loader/triggerYmlLoader.js +61 -0
- package/lib/loader/triggerYmlLoader.js.map +1 -0
- package/lib/triggerLoader/index.js +71 -69
- package/lib/triggerLoader/index.js.map +1 -1
- package/package.json +7 -7
- package/src/index.ts +4 -3
- package/src/loader/triggerYmlLoader.ts +57 -0
- package/src/triggerLoader/index.ts +104 -74
- package/lib/triggerLoader/types/action.d.ts +0 -9
- package/lib/triggerLoader/types/action.js +0 -3
- package/lib/triggerLoader/types/action.js.map +0 -1
- package/lib/triggerLoader/types/index.d.ts +0 -4
- package/lib/triggerLoader/types/index.js +0 -8
- package/lib/triggerLoader/types/index.js.map +0 -1
- package/lib/triggerLoader/types/meta.d.ts +0 -8
- package/lib/triggerLoader/types/meta.js +0 -3
- package/lib/triggerLoader/types/meta.js.map +0 -1
- package/lib/triggerLoader/types/trigger.d.ts +0 -6
- package/lib/triggerLoader/types/trigger.js +0 -3
- package/lib/triggerLoader/types/trigger.js.map +0 -1
- package/lib/triggerLoader/types/triggerData.d.ts +0 -6
- package/lib/triggerLoader/types/triggerData.js +0 -3
- package/lib/triggerLoader/types/triggerData.js.map +0 -1
- package/src/triggerLoader/types/action.ts +0 -9
- package/src/triggerLoader/types/index.ts +0 -4
- package/src/triggerLoader/types/meta.ts +0 -8
- package/src/triggerLoader/types/trigger.ts +0 -6
- 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.
|
|
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
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 =
|
|
14
|
+
let objTriggers = (0, objectql_1.loadObjectTriggers)(filePath, packageServiceName);
|
|
15
15
|
if (_.isEmpty(objTriggers)) {
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
|
-
for (const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
55
|
-
let action = {
|
|
45
|
+
const actionTrigger = {
|
|
56
46
|
trigger: {
|
|
57
|
-
when: trigger.when,
|
|
58
47
|
listenTo: trigger.listenTo,
|
|
59
|
-
|
|
48
|
+
when: when
|
|
60
49
|
},
|
|
61
|
-
|
|
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
|
-
|
|
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
|
|
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":";;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/triggerLoader/index.ts"],"names":[],"mappings":";;;;AAOA,gCAAgC;AAChC,6BAA6B;AAC7B,gDAA2I;AAE3I,MAAM,WAAW,GAAG,CAAC,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,CAAC,CAAA;AAE1K,SAAsB,IAAI,CAAC,MAAW,EAAE,WAAmB,EAAE,kBAA0B;;QACnF,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,WAAW,GAAG,aAAa,kBAAkB,EAAE,CAAC;QACpD,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,WAAW,GAAG,IAAA,6BAAkB,EAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QACnE,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YACxB,OAAO;SACV;QAeD,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE;YAa/B,MAAM,iBAAiB,GAAG,IAAA,iBAAM,EAAC,IAAA,wBAAa,EAAC,OAAO,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,iBAAiB,CAAC,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA;YAE3D,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC1B,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC;aAClC,CAAC,CAAA;SACL;QAED,IAAI,aAAa,GAAG;YAChB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO;SACnB,CAAC;QACF,IAAI,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACjB,MAAM,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;SACxC;IAEL,CAAC;CAAA;AApDD,oBAoDC;AAGD,SAAS,qBAAqB,CAAC,OAAO;IAClC,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;QACvB,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;YAC1C,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE;gBAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAClB;SACJ;KACJ;IACD,MAAM,aAAa,GAAG;QAClB,OAAO,EAAE;YACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,IAAI;SACb;QACK,OAAO,CAAC,GAAG;;gBAEb,MAAM,EACF,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAC3E,EAAE,EAAE,GAAG,EAAE,WAAW,EAEpB,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,GAAwB,GAAG,CAAC,MAAM,CAAC;gBAEjF,MAAM,OAAO,GAAgC;oBACzC,EAAE;oBACF,MAAM;oBACN,OAAO;oBACP,GAAG;oBACH,WAAW;oBACX,KAAK;oBACL,IAAI;oBACJ,UAAU;iBACb,CAAA;gBAED,IAAI,IAAI,GAAG,EAAE,CAAA;gBACb,IAAI,QAAQ,EAAE;oBACV,IAAI,MAAM,EAAE;wBACR,IAAI,GAAG,YAAY,CAAA;qBACtB;yBAAM,IAAI,QAAQ,EAAE;wBACjB,IAAI,GAAG,cAAc,CAAA;qBACxB;yBAAM,IAAI,QAAQ,EAAE;wBACjB,IAAI,GAAG,cAAc,CAAA;qBACxB;yBAAM,IAAI,QAAQ,EAAE;wBACjB,IAAI,GAAG,cAAc,CAAA;qBACxB;iBACJ;qBACI,IAAI,OAAO,EAAE;oBACd,IAAI,MAAM,EAAE;wBACR,IAAI,GAAG,WAAW,CAAA;qBACrB;yBAAM,IAAI,QAAQ,EAAE;wBACjB,IAAI,GAAG,aAAa,CAAA;qBACvB;yBAAM,IAAI,QAAQ,EAAE;wBACjB,IAAI,GAAG,aAAa,CAAA;qBACvB;yBAAM,IAAI,QAAQ,EAAE;wBACjB,IAAI,GAAG,aAAa,CAAA;qBACvB;yBAAM,IAAI,SAAS,EAAE;wBAClB,IAAI,GAAG,cAAc,CAAA;qBACxB;yBAAM,IAAI,OAAO,EAAE;wBAChB,IAAI,GAAG,YAAY,CAAA;qBACtB;iBACJ;gBAED,IAAI,IAAI,EAAE;oBACN,MAAM,MAAM,GAAG,IAAA,oBAAS,EAAC,UAAU,CAAC,CAAC;oBACrC,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBACxC,OAAO,OAAO,CAAC;iBAClB;YACL,CAAC;SAAA;KACJ,CAAC;IACF,OAAO,aAAa,CAAC;AACzB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steedos/service-package-loader",
|
|
3
|
-
"version": "2.5.0
|
|
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
|
|
14
|
-
"@steedos/metadata-core": "2.5.0
|
|
15
|
-
"@steedos/objectql": "2.5.0
|
|
16
|
-
"@steedos/router": "2.5.0
|
|
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": "
|
|
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:
|
|
5
|
-
* @LastEditTime:
|
|
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
|
|
4
|
-
|
|
5
|
-
|
|
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 =
|
|
18
|
+
let objTriggers = loadObjectTriggers(filePath, packageServiceName);
|
|
13
19
|
if (_.isEmpty(objTriggers)) {
|
|
14
20
|
return;
|
|
15
21
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
81
|
+
when: when
|
|
60
82
|
},
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
|
108
|
-
}
|
|
137
|
+
return actionTrigger;
|
|
138
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/triggerLoader/types/action.ts"],"names":[],"mappings":""}
|
|
@@ -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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../src/triggerLoader/types/meta.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trigger.js","sourceRoot":"","sources":["../../../src/triggerLoader/types/trigger.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"triggerData.js","sourceRoot":"","sources":["../../../src/triggerLoader/types/triggerData.ts"],"names":[],"mappings":""}
|