allserver 2.0.0 → 2.1.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/README.md CHANGED
@@ -343,8 +343,6 @@ More info can be found in the [`micro`](http://npmjs.com/package/micro) NPM modu
343
343
 
344
344
  Doesn't require a dedicated client transport. Use the HTTP client below.
345
345
 
346
- NB: not yet tested in production.
347
-
348
346
  ```js
349
347
  const { Allserver, ExpressTransport } = require("allserver");
350
348
 
@@ -590,6 +588,29 @@ const data = await job.waitUntilFinished(queueEvents, 30_000);
590
588
  const { success, code, message, user } = data;
591
589
  ```
592
590
 
591
+ ### In memory
592
+
593
+ Sometimes you need to unit test your procedures via the `AllserverClient`. For that we have `MemoryTransport`.
594
+
595
+ ```js
596
+ const { Allserver, MemoryTransport } = require("allserver");
597
+
598
+ const memoryServer = Allserver({
599
+ procedures,
600
+ transport: MemoryTransport(),
601
+ });
602
+
603
+ const client = memoryServer.start();
604
+
605
+ const { success, code, message, user } = await client.updateUser({
606
+ id: "123412341234123412341234",
607
+ firstName: "Fred",
608
+ lastName: "Flinstone",
609
+ });
610
+
611
+ assert(success === true);
612
+ ```
613
+
593
614
  ## `AllserverClient` options
594
615
 
595
616
  **All the arguments are optional.** But either `uri` or `transport` must be provided. We are trying to keep the highest possible DX here.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "allserver",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "Multi-protocol simple RPC server and [optional] client. Boilerplate-less. Opinionated. Minimalistic. DX-first.",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -0,0 +1,29 @@
1
+ module.exports = require("./ClientTransport").compose({
2
+ name: "MemoryClientTransport",
3
+
4
+ props: {
5
+ _allserverContext: null,
6
+ uri: "memory",
7
+ },
8
+
9
+ init({ allserverContext }) {
10
+ this._allserverContext = allserverContext || this._allserverContext;
11
+ },
12
+
13
+ methods: {
14
+ async introspect(ctx) {
15
+ ctx.procedureName = "";
16
+ const result = await this.call(ctx);
17
+ if (!result) throw Error(); // The ClientTransport expects us to throw if call fails
18
+ return result;
19
+ },
20
+
21
+ async call(ctx) {
22
+ return this._allserverContext.allserver.handleCall(ctx);
23
+ },
24
+
25
+ createCallContext(defaultCtx) {
26
+ return { ...defaultCtx, ...this._allserverContext, memory: {} };
27
+ },
28
+ },
29
+ });
package/src/index.js CHANGED
@@ -23,6 +23,9 @@ module.exports = {
23
23
  get BullmqTransport() {
24
24
  return require("./server/BullmqTransport");
25
25
  },
26
+ get MemoryTransport() {
27
+ return require("./server/MemoryTransport");
28
+ },
26
29
 
27
30
  // client
28
31
 
@@ -41,4 +44,7 @@ module.exports = {
41
44
  get BullmqClientTransport() {
42
45
  return require("./client/BullmqClientTransport");
43
46
  },
47
+ get MemoryClientTransport() {
48
+ return require("./client/MemoryClientTransport");
49
+ },
44
50
  };
@@ -66,7 +66,7 @@ module.exports = require("stampit")({
66
66
  result = await ctx.procedure(ctx.arg, ctx);
67
67
  } catch (err) {
68
68
  const code = err.code || "ALLSERVER_PROCEDURE_ERROR";
69
- this.logger.error(code, err);
69
+ this.logger.error(err, code);
70
70
  ctx.error = err;
71
71
  ctx.result = {
72
72
  success: false,
@@ -104,7 +104,7 @@ module.exports = require("stampit")({
104
104
  }
105
105
  } catch (err) {
106
106
  const code = err.code || "ALLSERVER_MIDDLEWARE_ERROR";
107
- this.logger.error(code, err);
107
+ this.logger.error(err, code);
108
108
  ctx.error = err;
109
109
  ctx.result = {
110
110
  success: false,
@@ -0,0 +1,28 @@
1
+ module.exports = require("./Transport").compose({
2
+ name: "MemoryTransport",
3
+
4
+ props: {
5
+ AllserverClient: require("../client/AllserverClient"),
6
+ MemoryClientTransport: require("../client/MemoryClientTransport"),
7
+ },
8
+
9
+ methods: {
10
+ startServer(defaultCtx) {
11
+ return this.AllserverClient({
12
+ transport: this.MemoryClientTransport({ allserverContext: { ...defaultCtx, memory: {} } }),
13
+ });
14
+ },
15
+
16
+ reply(ctx) {
17
+ return ctx.result;
18
+ },
19
+
20
+ getProcedureName(ctx) {
21
+ return ctx.procedureName;
22
+ },
23
+
24
+ isIntrospection(ctx) {
25
+ return this.getProcedureName(ctx) === "";
26
+ },
27
+ },
28
+ });