sockethub 4.1.0 → 5.0.0-alpha.2
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/bin/sockethub +23 -20
- package/dist/bootstrap/init.js +1 -1
- package/dist/bootstrap/init.js.map +1 -1
- package/dist/bootstrap/platforms.js +14 -18
- package/dist/janitor.js +11 -5
- package/dist/janitor.js.map +1 -1
- package/dist/middleware/create-activity-object.js.map +1 -1
- package/dist/middleware/expand-activity-stream.js +33 -0
- package/dist/middleware/expand-activity-stream.js.map +1 -0
- package/dist/middleware/expand-activity-stream.test.data.js +360 -0
- package/dist/middleware/expand-activity-stream.test.data.js.map +1 -0
- package/dist/middleware/store-credentials.js +1 -1
- package/dist/middleware/store-credentials.js.map +1 -1
- package/dist/middleware/validate.js +30 -104
- package/dist/middleware/validate.js.map +1 -1
- package/dist/middleware/validate.test.data.js +151 -111
- package/dist/middleware/validate.test.data.js.map +1 -1
- package/dist/middleware.js +47 -77
- package/dist/middleware.js.map +1 -1
- package/dist/platform-instance.js +47 -54
- package/dist/platform-instance.js.map +1 -1
- package/dist/platform.js +29 -10
- package/dist/platform.js.map +1 -1
- package/dist/process-manager.js +5 -2
- package/dist/process-manager.js.map +1 -1
- package/dist/routes.js +3 -5
- package/dist/routes.js.map +1 -1
- package/dist/sockethub-client.js +2604 -0
- package/dist/sockethub-client.js.map +1 -0
- package/dist/sockethub-client.min.js +2 -0
- package/dist/sockethub-client.min.js.LICENSE.txt +24 -0
- package/dist/sockethub.js +67 -36
- package/dist/sockethub.js.map +1 -1
- package/package.json +40 -36
- package/src/bootstrap/init.ts +6 -2
- package/src/bootstrap/platforms.js +14 -18
- package/src/crypto.ts +3 -3
- package/src/janitor.ts +18 -10
- package/src/middleware/create-activity-object.ts +1 -2
- package/src/middleware/expand-activity-stream.test.data.ts +365 -0
- package/src/middleware/expand-activity-stream.test.ts +78 -0
- package/src/middleware/expand-activity-stream.ts +27 -0
- package/src/middleware/store-credentials.test.ts +12 -12
- package/src/middleware/store-credentials.ts +4 -4
- package/src/middleware/validate.test.data.ts +154 -120
- package/src/middleware/validate.test.ts +7 -10
- package/src/middleware/validate.ts +30 -123
- package/src/middleware.test.ts +59 -26
- package/src/middleware.ts +44 -76
- package/src/platform-instance.test.ts +8 -10
- package/src/platform-instance.ts +58 -57
- package/src/platform.ts +30 -14
- package/src/process-manager.ts +7 -4
- package/src/routes.ts +3 -6
- package/src/serve.ts +1 -1
- package/src/sockethub-client.test.ts +235 -0
- package/src/sockethub-client.ts +164 -0
- package/src/sockethub.ts +75 -68
- package/views/examples/dummy.ejs +6 -6
- package/views/examples/feeds.ejs +8 -8
- package/views/examples/irc.ejs +64 -58
- package/views/examples/shared.js +31 -29
- package/views/examples/xmpp.ejs +48 -57
- package/webpack.minified.config.js +14 -0
- package/webpack.normal.config.js +14 -0
- package/coverage/tmp/coverage-24546-1630615250805-0.json +0 -1
- package/dist/client/sockethub-client.js +0 -171
- package/dist/client/sockethub-client.js.map +0 -1
- package/src/client/sockethub-client.js +0 -178
- package/test/middleware-suite.js +0 -101
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
(function (global, factory) {
|
|
2
|
-
if (typeof module === 'object' && typeof module.exports === 'object') {
|
|
3
|
-
var ASFactory = require('activity-streams');
|
|
4
|
-
module.exports = (global.document) ? factory(global, ASFactory) : factory({}, ASFactory);
|
|
5
|
-
}
|
|
6
|
-
else {
|
|
7
|
-
// @ts-ignore
|
|
8
|
-
if (!global.ASFactory) {
|
|
9
|
-
throw new Error('sockethub-client.js depends on the activity-streams module.');
|
|
10
|
-
}
|
|
11
|
-
// @ts-ignore
|
|
12
|
-
factory(global, global.ASFactory);
|
|
13
|
-
}
|
|
14
|
-
}((typeof window !== 'undefined') ? window : this, function (scope, ASFactory) {
|
|
15
|
-
function SockethubClient(socket) {
|
|
16
|
-
var _this = this;
|
|
17
|
-
this.socket = socket;
|
|
18
|
-
this.ActivityStreams = ASFactory({ specialObjs: ['credentials'] });
|
|
19
|
-
this.online = false;
|
|
20
|
-
this.debug = false;
|
|
21
|
-
this.__registerSocketIOHandlers();
|
|
22
|
-
this.ActivityStreams.on('activity-object-create', function (obj) {
|
|
23
|
-
socket.emit('activity-object', obj);
|
|
24
|
-
});
|
|
25
|
-
socket.on('activity-object', function (obj) {
|
|
26
|
-
_this.ActivityStreams.Object.create(obj);
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
SockethubClient.prototype.log = function (msg, obj) {
|
|
30
|
-
if (this.debug) {
|
|
31
|
-
console.log(msg, obj);
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
SockethubClient.prototype.__handlers = {
|
|
35
|
-
// wrapping the `on` method in order to automatically unpack Activity Streams objects
|
|
36
|
-
// that come in on the 'messages' channel, so that app developers don't need to.
|
|
37
|
-
message: [],
|
|
38
|
-
completed: [],
|
|
39
|
-
failed: [],
|
|
40
|
-
reconnecting: [],
|
|
41
|
-
reconnect_failed: [],
|
|
42
|
-
connect: [],
|
|
43
|
-
reconnect: [],
|
|
44
|
-
disconnect: []
|
|
45
|
-
};
|
|
46
|
-
SockethubClient.prototype.__registerSocketIOHandlers = function () {
|
|
47
|
-
var _this = this;
|
|
48
|
-
var storedCredentials = new Map(), storedActivityObjects = new Map(), storedConnects = new Map(), storedJoins = new Map();
|
|
49
|
-
// middleware for events which don't deal in AS objects
|
|
50
|
-
var callHandler = function (event) {
|
|
51
|
-
return function (obj) {
|
|
52
|
-
if (event === 'reconnect') {
|
|
53
|
-
_this.online = true;
|
|
54
|
-
_this.__replay('activity-object', storedActivityObjects);
|
|
55
|
-
_this.__replay('credentials', storedCredentials);
|
|
56
|
-
_this.__replay('message', storedConnects);
|
|
57
|
-
_this.__replay('message', storedJoins);
|
|
58
|
-
}
|
|
59
|
-
else if (event === 'connect') {
|
|
60
|
-
_this.online = true;
|
|
61
|
-
}
|
|
62
|
-
else if (event === 'disconnect') {
|
|
63
|
-
_this.online = false;
|
|
64
|
-
}
|
|
65
|
-
for (var _i = 0, _a = _this.__handlers[event]; _i < _a.length; _i++) {
|
|
66
|
-
var cb = _a[_i];
|
|
67
|
-
cb(obj);
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
};
|
|
71
|
-
// register for events that give us information on connection status
|
|
72
|
-
this.socket.on('reconnecting', callHandler('reconnecting'));
|
|
73
|
-
this.socket.on('reconnect_failed', callHandler('reconnect_failed'));
|
|
74
|
-
this.socket.on('connect', callHandler('connect'));
|
|
75
|
-
this.socket.on('reconnect', callHandler('reconnect'));
|
|
76
|
-
this.socket.on('disconnect', callHandler('disconnect'));
|
|
77
|
-
// do our middle-ware stuff then call the stored handler
|
|
78
|
-
this.socket.on('message', this.__unpackAndCallHandler('message'));
|
|
79
|
-
this.socket.on('completed', this.__unpackAndCallHandler('completed'));
|
|
80
|
-
this.socket.on('failed', this.__unpackAndCallHandler('failed'));
|
|
81
|
-
// we over-ride socketIO's emit method in order to catch credentials, activity-objects,
|
|
82
|
-
// and joins, and store them for replay if we connect.
|
|
83
|
-
// joins are only stored until confirmation is received that it was sent, then we remove it
|
|
84
|
-
// from the map.
|
|
85
|
-
this.socket._emit = this.socket.emit;
|
|
86
|
-
this.socket.emit = function (channel, content) {
|
|
87
|
-
if (typeof channel !== 'string') {
|
|
88
|
-
throw new Error('emit function requires a channel name [string] to be specified as the'
|
|
89
|
-
+ ' first parameter.');
|
|
90
|
-
}
|
|
91
|
-
switch (channel) {
|
|
92
|
-
case 'credentials':
|
|
93
|
-
if ((content.object) && (content.object['@type'] === 'credentials')) {
|
|
94
|
-
storedCredentials.set(content.actor['@id'] || content.actor, content);
|
|
95
|
-
}
|
|
96
|
-
break;
|
|
97
|
-
case 'activity-object':
|
|
98
|
-
if (content['@id']) {
|
|
99
|
-
storedActivityObjects.set(content['@id'], content);
|
|
100
|
-
}
|
|
101
|
-
break;
|
|
102
|
-
case 'message':
|
|
103
|
-
if (_this.online) {
|
|
104
|
-
// either store or delete the specified content onto the storedJoins map,
|
|
105
|
-
// for reply once we're back online.
|
|
106
|
-
if (content['@type'] === 'join') {
|
|
107
|
-
storedJoins['set'](_this.__getKey(content), content);
|
|
108
|
-
}
|
|
109
|
-
else if (content['@type'] === 'leave') {
|
|
110
|
-
storedJoins['delete'](_this.__getKey(content), content);
|
|
111
|
-
}
|
|
112
|
-
if (content['@type'] === 'connect') {
|
|
113
|
-
storedConnects['set'](_this.__getKey(content), content);
|
|
114
|
-
}
|
|
115
|
-
else if (content['@type'] === 'disconnect') {
|
|
116
|
-
storedConnects['delete'](_this.__getKey(content), content);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
// reject message if we're not online
|
|
121
|
-
_this.socket._emit('failed', content);
|
|
122
|
-
}
|
|
123
|
-
break;
|
|
124
|
-
}
|
|
125
|
-
_this.socket._emit(channel, content);
|
|
126
|
-
};
|
|
127
|
-
this.socket._on = this.socket.on;
|
|
128
|
-
this.socket.on = function (event, cb) {
|
|
129
|
-
if (Object.keys(_this.__handlers).includes(event)) {
|
|
130
|
-
// store the desired message channel callback, because we use our own first
|
|
131
|
-
_this.__handlers[event].push(cb);
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
// pass on any other handlers
|
|
135
|
-
_this.socket._on(event, cb);
|
|
136
|
-
}
|
|
137
|
-
};
|
|
138
|
-
};
|
|
139
|
-
SockethubClient.prototype.__replay = function (name, asMap) {
|
|
140
|
-
var _this = this;
|
|
141
|
-
asMap.forEach(function (obj) {
|
|
142
|
-
_this.log("replaying " + name, obj);
|
|
143
|
-
_this.socket._emit(name, obj);
|
|
144
|
-
});
|
|
145
|
-
};
|
|
146
|
-
// use as a middleware to receive incoming Sockethub messages and unpack them
|
|
147
|
-
// using the ActivityStreams library before passing them along to the app.
|
|
148
|
-
SockethubClient.prototype.__unpackAndCallHandler = function (event) {
|
|
149
|
-
var _this = this;
|
|
150
|
-
return function (obj) {
|
|
151
|
-
var unpackedObject = _this.ActivityStreams.Stream(obj);
|
|
152
|
-
for (var _i = 0, _a = _this.__handlers[event]; _i < _a.length; _i++) {
|
|
153
|
-
var cb = _a[_i];
|
|
154
|
-
cb(unpackedObject);
|
|
155
|
-
}
|
|
156
|
-
};
|
|
157
|
-
};
|
|
158
|
-
SockethubClient.prototype.__getKey = function (content) {
|
|
159
|
-
var actor = content.actor['@id'] || content.actor;
|
|
160
|
-
var target = content.target ? content.target['@id'] || content.target : '';
|
|
161
|
-
return actor + '-' + target;
|
|
162
|
-
};
|
|
163
|
-
if (typeof define === 'function' && define.amd) {
|
|
164
|
-
define([], function () {
|
|
165
|
-
return SockethubClient;
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
scope.SockethubClient = SockethubClient;
|
|
169
|
-
return SockethubClient;
|
|
170
|
-
}));
|
|
171
|
-
//# sourceMappingURL=sockethub-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sockethub-client.js","sourceRoot":"","sources":["../../src/client/sockethub-client.js"],"names":[],"mappings":"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"}
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
(function (global, factory) {
|
|
2
|
-
|
|
3
|
-
if ( typeof module === 'object' && typeof module.exports === 'object' ) {
|
|
4
|
-
let ASFactory = require('activity-streams');
|
|
5
|
-
module.exports = (global.document) ? factory(global, ASFactory) : factory({}, ASFactory);
|
|
6
|
-
} else {
|
|
7
|
-
// @ts-ignore
|
|
8
|
-
if (! global.ASFactory) {
|
|
9
|
-
throw new Error('sockethub-client.js depends on the activity-streams module.');
|
|
10
|
-
}
|
|
11
|
-
// @ts-ignore
|
|
12
|
-
factory(global, global.ASFactory);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
}((typeof window !== 'undefined') ? window : this, function (scope, ASFactory) {
|
|
16
|
-
|
|
17
|
-
function SockethubClient(socket) {
|
|
18
|
-
this.socket = socket;
|
|
19
|
-
this.ActivityStreams = ASFactory({specialObjs: ['credentials']});
|
|
20
|
-
this.online = false;
|
|
21
|
-
this.debug = false;
|
|
22
|
-
|
|
23
|
-
this.__registerSocketIOHandlers();
|
|
24
|
-
|
|
25
|
-
this.ActivityStreams.on('activity-object-create', (obj) => {
|
|
26
|
-
socket.emit('activity-object', obj);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
socket.on('activity-object', (obj) => {
|
|
30
|
-
this.ActivityStreams.Object.create(obj);
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
SockethubClient.prototype.log = function (msg, obj) {
|
|
35
|
-
if (this.debug) {
|
|
36
|
-
console.log(msg, obj);
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
SockethubClient.prototype.__handlers = {
|
|
41
|
-
// wrapping the `on` method in order to automatically unpack Activity Streams objects
|
|
42
|
-
// that come in on the 'messages' channel, so that app developers don't need to.
|
|
43
|
-
message: [],
|
|
44
|
-
completed: [],
|
|
45
|
-
failed: [],
|
|
46
|
-
reconnecting: [],
|
|
47
|
-
reconnect_failed: [],
|
|
48
|
-
connect: [],
|
|
49
|
-
reconnect: [],
|
|
50
|
-
disconnect: []
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
SockethubClient.prototype.__registerSocketIOHandlers = function () {
|
|
54
|
-
let storedCredentials = new Map(),
|
|
55
|
-
storedActivityObjects = new Map(),
|
|
56
|
-
storedConnects = new Map(),
|
|
57
|
-
storedJoins = new Map();
|
|
58
|
-
|
|
59
|
-
// middleware for events which don't deal in AS objects
|
|
60
|
-
const callHandler = (event) => {
|
|
61
|
-
return (obj) => {
|
|
62
|
-
if (event === 'reconnect') {
|
|
63
|
-
this.online = true;
|
|
64
|
-
this.__replay('activity-object', storedActivityObjects);
|
|
65
|
-
this.__replay('credentials', storedCredentials);
|
|
66
|
-
this.__replay('message', storedConnects);
|
|
67
|
-
this.__replay('message', storedJoins);
|
|
68
|
-
} else if (event === 'connect') {
|
|
69
|
-
this.online = true;
|
|
70
|
-
} else if (event === 'disconnect') {
|
|
71
|
-
this.online = false;
|
|
72
|
-
}
|
|
73
|
-
for (let cb of this.__handlers[event]) {
|
|
74
|
-
cb(obj);
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
// register for events that give us information on connection status
|
|
80
|
-
this.socket.on('reconnecting', callHandler('reconnecting'));
|
|
81
|
-
this.socket.on('reconnect_failed', callHandler('reconnect_failed'));
|
|
82
|
-
this.socket.on('connect', callHandler('connect'));
|
|
83
|
-
this.socket.on('reconnect', callHandler('reconnect'));
|
|
84
|
-
this.socket.on('disconnect', callHandler('disconnect'));
|
|
85
|
-
|
|
86
|
-
// do our middle-ware stuff then call the stored handler
|
|
87
|
-
this.socket.on('message', this.__unpackAndCallHandler('message'));
|
|
88
|
-
this.socket.on('completed', this.__unpackAndCallHandler('completed'));
|
|
89
|
-
this.socket.on('failed', this.__unpackAndCallHandler('failed'));
|
|
90
|
-
|
|
91
|
-
// we over-ride socketIO's emit method in order to catch credentials, activity-objects,
|
|
92
|
-
// and joins, and store them for replay if we connect.
|
|
93
|
-
// joins are only stored until confirmation is received that it was sent, then we remove it
|
|
94
|
-
// from the map.
|
|
95
|
-
this.socket._emit = this.socket.emit;
|
|
96
|
-
this.socket.emit = (channel, content) => {
|
|
97
|
-
if (typeof channel !== 'string') {
|
|
98
|
-
throw new Error('emit function requires a channel name [string] to be specified as the'
|
|
99
|
-
+ ' first parameter.');
|
|
100
|
-
}
|
|
101
|
-
switch (channel) {
|
|
102
|
-
case 'credentials':
|
|
103
|
-
if ((content.object) && (content.object['@type'] === 'credentials')) {
|
|
104
|
-
storedCredentials.set(content.actor['@id'] || content.actor, content);
|
|
105
|
-
}
|
|
106
|
-
break;
|
|
107
|
-
case 'activity-object':
|
|
108
|
-
if (content['@id']) {
|
|
109
|
-
storedActivityObjects.set(content['@id'], content);
|
|
110
|
-
}
|
|
111
|
-
break;
|
|
112
|
-
case 'message':
|
|
113
|
-
if (this.online) {
|
|
114
|
-
// either store or delete the specified content onto the storedJoins map,
|
|
115
|
-
// for reply once we're back online.
|
|
116
|
-
if (content['@type'] === 'join') {
|
|
117
|
-
storedJoins['set'](this.__getKey(content), content);
|
|
118
|
-
} else if (content['@type'] === 'leave') {
|
|
119
|
-
storedJoins['delete'](this.__getKey(content), content);
|
|
120
|
-
} if (content['@type'] === 'connect') {
|
|
121
|
-
storedConnects['set'](this.__getKey(content), content);
|
|
122
|
-
} else if (content['@type'] === 'disconnect') {
|
|
123
|
-
storedConnects['delete'](this.__getKey(content), content);
|
|
124
|
-
}
|
|
125
|
-
} else {
|
|
126
|
-
// reject message if we're not online
|
|
127
|
-
this.socket._emit('failed', content);
|
|
128
|
-
}
|
|
129
|
-
break;
|
|
130
|
-
}
|
|
131
|
-
this.socket._emit(channel, content);
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
this.socket._on = this.socket.on;
|
|
135
|
-
this.socket.on = (event, cb) => {
|
|
136
|
-
if (Object.keys(this.__handlers).includes(event)) {
|
|
137
|
-
// store the desired message channel callback, because we use our own first
|
|
138
|
-
this.__handlers[event].push(cb);
|
|
139
|
-
} else {
|
|
140
|
-
// pass on any other handlers
|
|
141
|
-
this.socket._on(event, cb);
|
|
142
|
-
}
|
|
143
|
-
};
|
|
144
|
-
};
|
|
145
|
-
|
|
146
|
-
SockethubClient.prototype.__replay = function (name, asMap) {
|
|
147
|
-
asMap.forEach((obj) => {
|
|
148
|
-
this.log(`replaying ${name}`, obj);
|
|
149
|
-
this.socket._emit(name, obj);
|
|
150
|
-
});
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
// use as a middleware to receive incoming Sockethub messages and unpack them
|
|
154
|
-
// using the ActivityStreams library before passing them along to the app.
|
|
155
|
-
SockethubClient.prototype.__unpackAndCallHandler = function (event) {
|
|
156
|
-
return (obj) => {
|
|
157
|
-
let unpackedObject = this.ActivityStreams.Stream(obj);
|
|
158
|
-
for (let cb of this.__handlers[event]) {
|
|
159
|
-
cb(unpackedObject);
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
SockethubClient.prototype.__getKey = function (content) {
|
|
165
|
-
let actor = content.actor['@id'] || content.actor;
|
|
166
|
-
let target = content.target ? content.target['@id'] || content.target : '';
|
|
167
|
-
return actor + '-' + target;
|
|
168
|
-
};
|
|
169
|
-
|
|
170
|
-
if ( typeof define === 'function' && define.amd ) {
|
|
171
|
-
define([], function () {
|
|
172
|
-
return SockethubClient;
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
scope.SockethubClient = SockethubClient;
|
|
177
|
-
return SockethubClient;
|
|
178
|
-
}));
|
package/test/middleware-suite.js
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
if (typeof define !== 'function') {
|
|
2
|
-
let define = require('amdefine')(module);
|
|
3
|
-
}
|
|
4
|
-
define(['require', '../dist/middleware'], function (require, Middleware) {
|
|
5
|
-
return [
|
|
6
|
-
{
|
|
7
|
-
desc: 'src/middleware',
|
|
8
|
-
abortOnFail: true,
|
|
9
|
-
beforeEach: function (env, test) {
|
|
10
|
-
env.middleware = new Middleware.default((...params) => {
|
|
11
|
-
this.fail(params);
|
|
12
|
-
});
|
|
13
|
-
test.done();
|
|
14
|
-
},
|
|
15
|
-
tests: [
|
|
16
|
-
{
|
|
17
|
-
desc: 'basic 1 input param',
|
|
18
|
-
run: function (env, test) {
|
|
19
|
-
test.assertType(env.middleware.chain, 'function');
|
|
20
|
-
const m = env.middleware.chain((next, input) => {
|
|
21
|
-
next(true, input);
|
|
22
|
-
}, (input) => {
|
|
23
|
-
test.assert(input, 'alacadabra');
|
|
24
|
-
});
|
|
25
|
-
m('alacadabra');
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
|
|
29
|
-
{
|
|
30
|
-
desc: 'basic 1 input param with error',
|
|
31
|
-
run: function (env, test) {
|
|
32
|
-
const middleware = new Middleware.default((err, input) => {
|
|
33
|
-
test.assertAnd(err, 'incorrect input');
|
|
34
|
-
test.assert(input, 'foobar');
|
|
35
|
-
});
|
|
36
|
-
const m = middleware.chain((next, input) => {
|
|
37
|
-
next(false, 'incorrect input', input);
|
|
38
|
-
}, (input) => {
|
|
39
|
-
test.fail('should not reach final function in chain');
|
|
40
|
-
});
|
|
41
|
-
m('foobar');
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
|
|
45
|
-
{
|
|
46
|
-
desc: 'basic 1 input param, 5 funcs',
|
|
47
|
-
run: function (env, test) {
|
|
48
|
-
|
|
49
|
-
const m = env.middleware.chain((next, input) => {
|
|
50
|
-
next(true, ++input);
|
|
51
|
-
}, (next, input) => {
|
|
52
|
-
next(true, ++input);
|
|
53
|
-
}, (next, input) => {
|
|
54
|
-
next(true, ++input);
|
|
55
|
-
}, (next, input) => {
|
|
56
|
-
next(true, ++input);
|
|
57
|
-
}, (input) => {
|
|
58
|
-
test.assert(input, 4);
|
|
59
|
-
});
|
|
60
|
-
m(0);
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
{
|
|
65
|
-
desc: 'basic 2 inputs param, 2 funcs',
|
|
66
|
-
run: function (env, test) {
|
|
67
|
-
const cb = function () {
|
|
68
|
-
test.done();
|
|
69
|
-
};
|
|
70
|
-
const m = env.middleware.chain((next, input, cb) => {
|
|
71
|
-
next(true, ++input, cb);
|
|
72
|
-
}, (input, cb) => {
|
|
73
|
-
test.assertAnd(input, 1);
|
|
74
|
-
cb();
|
|
75
|
-
});
|
|
76
|
-
m(0, cb);
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
|
|
80
|
-
{
|
|
81
|
-
desc: 'basic 4 input params, 5 funcs',
|
|
82
|
-
run: function (env, test) {
|
|
83
|
-
|
|
84
|
-
const m = env.middleware.chain((next, input1, input2, input3, input4) => {
|
|
85
|
-
next(true, ++input1, input2, input3, input4);
|
|
86
|
-
}, (next, input1, input2, input3, input4) => {
|
|
87
|
-
next(true, input1, ++input2, input3, input4);
|
|
88
|
-
}, (next, input1, input2, input3, input4) => {
|
|
89
|
-
next(true, input1, input2, ++input3, input4);
|
|
90
|
-
}, (next, input1, input2, input3, input4) => {
|
|
91
|
-
next(true, input1, input2, input3, ++input4);
|
|
92
|
-
}, (input1, input2, input3, input4) => {
|
|
93
|
-
test.assert([input1, input2, input3, input4], [1, 1, 4, 6]);
|
|
94
|
-
});
|
|
95
|
-
m(0, 0, 2, 5);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
]
|
|
99
|
-
}
|
|
100
|
-
];
|
|
101
|
-
});
|