allserver 2.0.1 → 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
@@ -588,6 +588,29 @@ const data = await job.waitUntilFinished(queueEvents, 30_000);
588
588
  const { success, code, message, user } = data;
589
589
  ```
590
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
+
591
614
  ## `AllserverClient` options
592
615
 
593
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.1",
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
  };
@@ -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
+ });