@toyz/loom-rpc 0.1.0 → 0.2.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 +11 -8
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mutate.d.ts.map +1 -1
- package/dist/mutate.js +2 -1
- package/dist/mutate.js.map +1 -1
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +2 -1
- package/dist/rpc.js.map +1 -1
- package/dist/service.d.ts +31 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +38 -0
- package/dist/service.js.map +1 -0
- package/dist/testing.d.ts +8 -5
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +14 -8
- package/dist/testing.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,6 +16,9 @@ npm install @toyz/loom-rpc
|
|
|
16
16
|
|
|
17
17
|
```ts
|
|
18
18
|
// contracts/user.ts — shared between client and server
|
|
19
|
+
import { service } from "@toyz/loom-rpc";
|
|
20
|
+
|
|
21
|
+
@service("UserService")
|
|
19
22
|
export class UserRouter {
|
|
20
23
|
getUser(id: string): User {
|
|
21
24
|
return null!;
|
|
@@ -29,7 +32,7 @@ export class UserRouter {
|
|
|
29
32
|
}
|
|
30
33
|
```
|
|
31
34
|
|
|
32
|
-
The class is the type contract. Methods have dummy bodies — they exist for TypeScript to extract parameter and return types.
|
|
35
|
+
The class is the type contract. Methods have dummy bodies — they exist for TypeScript to extract parameter and return types. The `@service` decorator assigns a stable name that survives minification; without it, `class.name` is used as a fallback.
|
|
33
36
|
|
|
34
37
|
### 2. Register a Transport
|
|
35
38
|
|
|
@@ -196,27 +199,27 @@ import { MockTransport } from "@toyz/loom-rpc/testing";
|
|
|
196
199
|
|
|
197
200
|
const transport = new MockTransport();
|
|
198
201
|
|
|
199
|
-
// Static mocks
|
|
200
|
-
transport.mock(
|
|
202
|
+
// Static mocks — pass the class, not a string
|
|
203
|
+
transport.mock(UserRouter, "getUser", { id: "1", name: "Alice" });
|
|
201
204
|
|
|
202
205
|
// Dynamic mocks
|
|
203
|
-
transport.mock(
|
|
206
|
+
transport.mock(UserRouter, "getUser", (id: string) => ({
|
|
204
207
|
id,
|
|
205
208
|
name: `User ${id}`,
|
|
206
209
|
}));
|
|
207
210
|
|
|
208
211
|
// Error mocks
|
|
209
|
-
transport.mockError(
|
|
212
|
+
transport.mockError(UserRouter, "deleteUser", new Error("Forbidden"));
|
|
210
213
|
|
|
211
214
|
// Delay simulation
|
|
212
|
-
transport.delay(
|
|
215
|
+
transport.delay(UserRouter, "getUser", 500);
|
|
213
216
|
|
|
214
217
|
// Register and go
|
|
215
218
|
app.use(RpcTransport, transport);
|
|
216
219
|
|
|
217
220
|
// Assertions
|
|
218
|
-
transport.assertCalled(
|
|
219
|
-
transport.assertNotCalled(
|
|
221
|
+
transport.assertCalled(UserRouter, "getUser", ["1"]);
|
|
222
|
+
transport.assertNotCalled(UserRouter, "deleteUser");
|
|
220
223
|
console.log(transport.history); // [{ router, method, args }]
|
|
221
224
|
```
|
|
222
225
|
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export { rpc } from "./rpc";
|
|
8
8
|
export { mutate } from "./mutate";
|
|
9
|
+
export { service, SERVICE_NAME } from "./service";
|
|
9
10
|
export { RpcTransport, HttpTransport, RpcError } from "./transport";
|
|
10
11
|
export type { RpcMethods, InferArgs, InferReturn, RpcQueryOptions, RpcMutator, RpcRequest, RpcResponse, } from "./types";
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGlD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGpE,YAAY,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,eAAe,EACf,UAAU,EACV,UAAU,EACV,WAAW,GACZ,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,aAAa;AACb,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,aAAa;AACb,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAElD,YAAY;AACZ,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/mutate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../src/mutate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../src/mutate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAK9E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,CACpB,OAAO,SAAS,MAAM,EACtB,OAAO,SAAS,UAAU,CAAC,OAAO,CAAC,EAEnC,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,EACvC,MAAM,EAAE,OAAO,IAMP,IAAI,SAAS,MAAM,EACzB,SAAS,4BAA4B,CAAC,IAAI,EAAE,UAAU,CAAC,oCAAc,GAAG,EAAE,iCAAW,6BAAO,gCAAU,CAAC,EACvG,SAAS,6BAA6B,CAAC,IAAI,EAAE,UAAU,CAAC,oCAAc,GAAG,EAAE,iCAAW,6BAAO,gCAAU,CAAC,KACvG,4BAA4B,CAAC,IAAI,EAAE,UAAU,CAAC,oCAAc,GAAG,EAAE,iCAAW,6BAAO,gCAAU,CAAC,CA2BlG"}
|
package/dist/mutate.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
import { app } from "@toyz/loom";
|
|
14
14
|
import { Reactive } from "@toyz/loom/store";
|
|
15
15
|
import { RpcTransport } from "./transport";
|
|
16
|
+
import { resolveServiceName } from "./service";
|
|
16
17
|
/**
|
|
17
18
|
* @mutate(Router, method) — Mutation decorator
|
|
18
19
|
*
|
|
@@ -30,7 +31,7 @@ import { RpcTransport } from "./transport";
|
|
|
30
31
|
* @param method - The method name on the contract to call
|
|
31
32
|
*/
|
|
32
33
|
export function mutate(router, method) {
|
|
33
|
-
const routerName = router
|
|
34
|
+
const routerName = resolveServiceName(router);
|
|
34
35
|
return (_target, context) => {
|
|
35
36
|
const stateKey = Symbol(`mutate:${String(context.name)}`);
|
|
36
37
|
const traceKey = Symbol(`mutate:trace:${String(context.name)}`);
|
package/dist/mutate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutate.js","sourceRoot":"","sources":["../src/mutate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,MAAM,CAIpB,MAAuC,EACvC,MAAe;IAIf,MAAM,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"mutate.js","sourceRoot":"","sources":["../src/mutate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,MAAM,CAIpB,MAAuC,EACvC,MAAe;IAIf,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE9C,OAAO,CACL,OAAuG,EACvG,OAAwG,EACR,EAAE;QAClG,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEhE,OAAO;YACL,GAAG;gBACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACpB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;oBAC1B,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;oBAClD,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAE7D,IAAI,CAAC,QAAQ,CAAC,GAAG,aAAa,CAC5B,UAAU,EACV,MAAgB,EAChB,MAAM,CACP,CAAC;gBACJ,CAAC;gBACD,uDAAuD;gBACtD,IAAI,CAAC,QAAQ,CAAsB,CAAC,KAAK,CAAC;gBAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;YACD,GAAG,CAAY,IAAgE;gBAC7E,8BAA8B;YAChC,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CACpB,UAAkB,EAClB,MAAc,EACd,cAA0B;IAE1B,IAAI,IAAyB,CAAC;IAC9B,IAAI,KAAK,GAAiB,IAAI,CAAC;IAC/B,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,GAAG,IAAW;YACvB,IAAI,SAAuB,CAAC;YAC5B,IAAI,CAAC;gBACH,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CACb,wCAAwC;oBACxC,qEAAqE,CACtE,CAAC;YACJ,CAAC;YAED,OAAO,GAAG,IAAI,CAAC;YACf,KAAK,GAAG,IAAI,CAAC;YACb,cAAc,EAAE,CAAC;YAEjB,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAU,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC/D,OAAO,GAAG,KAAK,CAAC;gBAChB,KAAK,GAAG,IAAI,CAAC;gBACb,cAAc,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,GAAG,KAAK,CAAC;gBAChB,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtD,cAAc,EAAE,CAAC;gBACjB,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,OAAO;YACT,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,IAAI,KAAK;YACP,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,IAAI;YACN,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK;YACH,IAAI,GAAG,SAAS,CAAC;YACjB,KAAK,GAAG,IAAI,CAAC;YACb,OAAO,GAAG,KAAK,CAAC;YAChB,cAAc,EAAE,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/rpc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAKxE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,GAAG,CACjB,OAAO,SAAS,MAAM,EACtB,OAAO,SAAS,UAAU,CAAC,OAAO,CAAC,EAEnC,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,EACvC,MAAM,EAAE,OAAO,EACf,IAAI,CAAC,EAAE,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,IAKhC,IAAI,SAAS,MAAM,EACzB,SAAS,4BAA4B,CAAC,IAAI,EAAE,QAAQ,+BAAS,CAAC,EAC9D,SAAS,6BAA6B,CAAC,IAAI,EAAE,QAAQ,+BAAS,CAAC,KAC9D,4BAA4B,CAAC,IAAI,EAAE,QAAQ,+BAAS,CAAC,CA6BzD"}
|
package/dist/rpc.js
CHANGED
|
@@ -19,6 +19,7 @@ import { app } from "@toyz/loom";
|
|
|
19
19
|
import { Reactive } from "@toyz/loom/store";
|
|
20
20
|
import { LoomResult } from "@toyz/loom";
|
|
21
21
|
import { RpcTransport } from "./transport";
|
|
22
|
+
import { resolveServiceName } from "./service";
|
|
22
23
|
/**
|
|
23
24
|
* @rpc(Router, method, opts?) — Query decorator
|
|
24
25
|
*
|
|
@@ -35,7 +36,7 @@ import { RpcTransport } from "./transport";
|
|
|
35
36
|
* @param opts - Optional configuration (fn, staleTime, retry, eager)
|
|
36
37
|
*/
|
|
37
38
|
export function rpc(router, method, opts) {
|
|
38
|
-
const routerName = router
|
|
39
|
+
const routerName = resolveServiceName(router);
|
|
39
40
|
return (_target, context) => {
|
|
40
41
|
const stateKey = Symbol(`rpc:${String(context.name)}`);
|
|
41
42
|
const traceKey = Symbol(`rpc:trace:${String(context.name)}`);
|
package/dist/rpc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,GAAG,CAIjB,MAAuC,EACvC,MAAe,EACf,IAAwC;IAGxC,MAAM,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LoomRPC — @service class decorator
|
|
3
|
+
*
|
|
4
|
+
* Stamps a minification-safe name on a router contract class.
|
|
5
|
+
* `@rpc` and `@mutate` read this name first, falling back to `class.name`.
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { service } from "@toyz/loom-rpc";
|
|
9
|
+
*
|
|
10
|
+
* @service("UserService")
|
|
11
|
+
* class UserService {
|
|
12
|
+
* getUser(id: string): User { return null!; }
|
|
13
|
+
* }
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
/** Symbol used to store the service name on the class */
|
|
17
|
+
export declare const SERVICE_NAME: unique symbol;
|
|
18
|
+
/**
|
|
19
|
+
* @service(name) — Class decorator
|
|
20
|
+
*
|
|
21
|
+
* Assigns a stable, minification-proof name to a router contract.
|
|
22
|
+
* When present, `@rpc` and `@mutate` use this name instead of `class.name`.
|
|
23
|
+
*
|
|
24
|
+
* @param name - The stable service name (survives minification)
|
|
25
|
+
*/
|
|
26
|
+
export declare function service(name: string): <T extends new (...args: any[]) => any>(target: T, _context?: ClassDecoratorContext) => T;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the router name for a class: @service name first, then class.name.
|
|
29
|
+
*/
|
|
30
|
+
export declare function resolveServiceName(router: new (...args: any[]) => any): string;
|
|
31
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,yDAAyD;AACzD,eAAO,MAAM,YAAY,eAAiC,CAAC;AAE3D;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,IAC1B,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,QAAQ,CAAC,EAAE,WAAW,qBAAqB,OAI3F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,MAAM,CAE9E"}
|
package/dist/service.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LoomRPC — @service class decorator
|
|
3
|
+
*
|
|
4
|
+
* Stamps a minification-safe name on a router contract class.
|
|
5
|
+
* `@rpc` and `@mutate` read this name first, falling back to `class.name`.
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { service } from "@toyz/loom-rpc";
|
|
9
|
+
*
|
|
10
|
+
* @service("UserService")
|
|
11
|
+
* class UserService {
|
|
12
|
+
* getUser(id: string): User { return null!; }
|
|
13
|
+
* }
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
/** Symbol used to store the service name on the class */
|
|
17
|
+
export const SERVICE_NAME = Symbol.for("loom-rpc:service");
|
|
18
|
+
/**
|
|
19
|
+
* @service(name) — Class decorator
|
|
20
|
+
*
|
|
21
|
+
* Assigns a stable, minification-proof name to a router contract.
|
|
22
|
+
* When present, `@rpc` and `@mutate` use this name instead of `class.name`.
|
|
23
|
+
*
|
|
24
|
+
* @param name - The stable service name (survives minification)
|
|
25
|
+
*/
|
|
26
|
+
export function service(name) {
|
|
27
|
+
return (target, _context) => {
|
|
28
|
+
target[SERVICE_NAME] = name;
|
|
29
|
+
return target;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Resolve the router name for a class: @service name first, then class.name.
|
|
34
|
+
*/
|
|
35
|
+
export function resolveServiceName(router) {
|
|
36
|
+
return router[SERVICE_NAME] ?? router.name;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,yDAAyD;AACzD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,CAAwC,MAAS,EAAE,QAAgC,EAAE,EAAE;QAC3F,MAAc,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;QACrC,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAmC;IACpE,OAAQ,MAAc,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC;AACtD,CAAC"}
|
package/dist/testing.d.ts
CHANGED
|
@@ -15,17 +15,19 @@
|
|
|
15
15
|
* ```
|
|
16
16
|
*/
|
|
17
17
|
import { RpcTransport } from "./transport";
|
|
18
|
+
type RouterIdent = string | (new (...args: any[]) => any);
|
|
18
19
|
export declare class MockTransport extends RpcTransport {
|
|
19
20
|
private mocks;
|
|
20
21
|
private errors;
|
|
21
22
|
private calls;
|
|
22
23
|
private delays;
|
|
24
|
+
private getRouterName;
|
|
23
25
|
/** Register a mock response for a specific router.method */
|
|
24
|
-
mock<T>(router:
|
|
26
|
+
mock<T>(router: RouterIdent, method: string, response: T): this;
|
|
25
27
|
/** Register a mock error for a specific router.method */
|
|
26
|
-
mockError(router:
|
|
28
|
+
mockError(router: RouterIdent, method: string, error: Error): this;
|
|
27
29
|
/** Add an artificial delay (ms) for a specific router.method */
|
|
28
|
-
delay(router:
|
|
30
|
+
delay(router: RouterIdent, method: string, ms: number): this;
|
|
29
31
|
/** All calls that have been made through this transport */
|
|
30
32
|
get history(): {
|
|
31
33
|
router: string;
|
|
@@ -35,9 +37,10 @@ export declare class MockTransport extends RpcTransport {
|
|
|
35
37
|
/** Clear all mocks and call history */
|
|
36
38
|
reset(): void;
|
|
37
39
|
/** Assert a specific call was made */
|
|
38
|
-
assertCalled(router:
|
|
40
|
+
assertCalled(router: RouterIdent, method: string, args?: any[]): void;
|
|
39
41
|
/** Assert a specific call was NOT made */
|
|
40
|
-
assertNotCalled(router:
|
|
42
|
+
assertNotCalled(router: RouterIdent, method: string): void;
|
|
41
43
|
call<T>(router: string, method: string, args: any[]): Promise<T>;
|
|
42
44
|
}
|
|
45
|
+
export {};
|
|
43
46
|
//# sourceMappingURL=testing.d.ts.map
|
package/dist/testing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,KAAK,WAAW,GAAG,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC;AAE1D,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,KAAK,CAA8D;IAC3E,OAAO,CAAC,MAAM,CAA6B;IAE3C,OAAO,CAAC,aAAa;IAIrB,4DAA4D;IAC5D,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI;IAK/D,yDAAyD;IACzD,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAKlE,gEAAgE;IAChE,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAK5D,2DAA2D;IAC3D,IAAI,OAAO;gBA1BoB,MAAM;gBAAU,MAAM;cAAQ,GAAG,EAAE;QA4BjE;IAED,uCAAuC;IACvC,KAAK,IAAI,IAAI;IAOb,sCAAsC;IACtC,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI;IAcrE,0CAA0C;IAC1C,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAYpD,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;CA0BvE"}
|
package/dist/testing.js
CHANGED
|
@@ -15,24 +15,28 @@
|
|
|
15
15
|
* ```
|
|
16
16
|
*/
|
|
17
17
|
import { RpcTransport } from "./transport";
|
|
18
|
+
import { resolveServiceName } from "./service";
|
|
18
19
|
export class MockTransport extends RpcTransport {
|
|
19
20
|
mocks = new Map();
|
|
20
21
|
errors = new Map();
|
|
21
22
|
calls = [];
|
|
22
23
|
delays = new Map();
|
|
24
|
+
getRouterName(router) {
|
|
25
|
+
return typeof router === "string" ? router : resolveServiceName(router);
|
|
26
|
+
}
|
|
23
27
|
/** Register a mock response for a specific router.method */
|
|
24
28
|
mock(router, method, response) {
|
|
25
|
-
this.mocks.set(`${router}.${method}`, response);
|
|
29
|
+
this.mocks.set(`${this.getRouterName(router)}.${method}`, response);
|
|
26
30
|
return this;
|
|
27
31
|
}
|
|
28
32
|
/** Register a mock error for a specific router.method */
|
|
29
33
|
mockError(router, method, error) {
|
|
30
|
-
this.errors.set(`${router}.${method}`, error);
|
|
34
|
+
this.errors.set(`${this.getRouterName(router)}.${method}`, error);
|
|
31
35
|
return this;
|
|
32
36
|
}
|
|
33
37
|
/** Add an artificial delay (ms) for a specific router.method */
|
|
34
38
|
delay(router, method, ms) {
|
|
35
|
-
this.delays.set(`${router}.${method}`, ms);
|
|
39
|
+
this.delays.set(`${this.getRouterName(router)}.${method}`, ms);
|
|
36
40
|
return this;
|
|
37
41
|
}
|
|
38
42
|
/** All calls that have been made through this transport */
|
|
@@ -48,18 +52,20 @@ export class MockTransport extends RpcTransport {
|
|
|
48
52
|
}
|
|
49
53
|
/** Assert a specific call was made */
|
|
50
54
|
assertCalled(router, method, args) {
|
|
51
|
-
const
|
|
55
|
+
const rName = this.getRouterName(router);
|
|
56
|
+
const match = this.calls.find((c) => c.router === rName && c.method === method &&
|
|
52
57
|
(args === undefined || JSON.stringify(c.args) === JSON.stringify(args)));
|
|
53
58
|
if (!match) {
|
|
54
|
-
throw new Error(`Expected ${
|
|
59
|
+
throw new Error(`Expected ${rName}.${method}(${args ? JSON.stringify(args) : "..."}) to have been called. ` +
|
|
55
60
|
`Calls: ${JSON.stringify(this.calls)}`);
|
|
56
61
|
}
|
|
57
62
|
}
|
|
58
63
|
/** Assert a specific call was NOT made */
|
|
59
64
|
assertNotCalled(router, method) {
|
|
60
|
-
const
|
|
65
|
+
const rName = this.getRouterName(router);
|
|
66
|
+
const match = this.calls.find((c) => c.router === rName && c.method === method);
|
|
61
67
|
if (match) {
|
|
62
|
-
throw new Error(`Expected ${
|
|
68
|
+
throw new Error(`Expected ${rName}.${method} to NOT have been called, but it was.`);
|
|
63
69
|
}
|
|
64
70
|
}
|
|
65
71
|
async call(router, method, args) {
|
|
@@ -81,7 +87,7 @@ export class MockTransport extends RpcTransport {
|
|
|
81
87
|
return typeof value === "function" ? value(...args) : value;
|
|
82
88
|
}
|
|
83
89
|
throw new Error(`[MockTransport] No mock registered for ${key}. ` +
|
|
84
|
-
`Register one with: transport.mock(
|
|
90
|
+
`Register one with: transport.mock(RouterClass, "${method}", responseData)`);
|
|
85
91
|
}
|
|
86
92
|
}
|
|
87
93
|
//# sourceMappingURL=testing.js.map
|
package/dist/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
|