@labostack/typebridge 0.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.
Files changed (158) hide show
  1. package/README.md +62 -0
  2. package/dist/adapters/decorators.d.ts +11 -0
  3. package/dist/adapters/decorators.d.ts.map +1 -0
  4. package/dist/adapters/decorators.js +20 -0
  5. package/dist/adapters/decorators.js.map +1 -0
  6. package/dist/adapters/deepkit-adapter.d.ts +11 -0
  7. package/dist/adapters/deepkit-adapter.d.ts.map +1 -0
  8. package/dist/adapters/deepkit-adapter.js +39 -0
  9. package/dist/adapters/deepkit-adapter.js.map +1 -0
  10. package/dist/adapters/generic-adapter.d.ts +12 -0
  11. package/dist/adapters/generic-adapter.d.ts.map +1 -0
  12. package/dist/adapters/generic-adapter.js +28 -0
  13. package/dist/adapters/generic-adapter.js.map +1 -0
  14. package/dist/adapters/index.d.ts +5 -0
  15. package/dist/adapters/index.d.ts.map +1 -0
  16. package/dist/adapters/index.js +5 -0
  17. package/dist/adapters/index.js.map +1 -0
  18. package/dist/adapters/nest-adapter.d.ts +14 -0
  19. package/dist/adapters/nest-adapter.d.ts.map +1 -0
  20. package/dist/adapters/nest-adapter.js +33 -0
  21. package/dist/adapters/nest-adapter.js.map +1 -0
  22. package/dist/adapters/tsed-adapter.d.ts +10 -0
  23. package/dist/adapters/tsed-adapter.d.ts.map +1 -0
  24. package/dist/adapters/tsed-adapter.js +31 -0
  25. package/dist/adapters/tsed-adapter.js.map +1 -0
  26. package/dist/autobarrel/index.d.ts +2 -0
  27. package/dist/autobarrel/index.d.ts.map +1 -0
  28. package/dist/autobarrel/index.js +2 -0
  29. package/dist/autobarrel/index.js.map +1 -0
  30. package/dist/autobarrel/scanner.d.ts +14 -0
  31. package/dist/autobarrel/scanner.d.ts.map +1 -0
  32. package/dist/autobarrel/scanner.js +93 -0
  33. package/dist/autobarrel/scanner.js.map +1 -0
  34. package/dist/bridge.d.ts +54 -0
  35. package/dist/bridge.d.ts.map +1 -0
  36. package/dist/bridge.js +151 -0
  37. package/dist/bridge.js.map +1 -0
  38. package/dist/discovery/dns.d.ts +10 -0
  39. package/dist/discovery/dns.d.ts.map +1 -0
  40. package/dist/discovery/dns.js +19 -0
  41. package/dist/discovery/dns.js.map +1 -0
  42. package/dist/discovery/index.d.ts +4 -0
  43. package/dist/discovery/index.d.ts.map +1 -0
  44. package/dist/discovery/index.js +4 -0
  45. package/dist/discovery/index.js.map +1 -0
  46. package/dist/discovery/mdns.d.ts +18 -0
  47. package/dist/discovery/mdns.d.ts.map +1 -0
  48. package/dist/discovery/mdns.js +49 -0
  49. package/dist/discovery/mdns.js.map +1 -0
  50. package/dist/discovery/resolver.d.ts +16 -0
  51. package/dist/discovery/resolver.d.ts.map +1 -0
  52. package/dist/discovery/resolver.js +36 -0
  53. package/dist/discovery/resolver.js.map +1 -0
  54. package/dist/index.d.ts +21 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +19 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/mesh/index.d.ts +2 -0
  59. package/dist/mesh/index.d.ts.map +1 -0
  60. package/dist/mesh/index.js +2 -0
  61. package/dist/mesh/index.js.map +1 -0
  62. package/dist/mesh/mesh-manager.d.ts +55 -0
  63. package/dist/mesh/mesh-manager.d.ts.map +1 -0
  64. package/dist/mesh/mesh-manager.js +179 -0
  65. package/dist/mesh/mesh-manager.js.map +1 -0
  66. package/dist/proxy/client-proxy.d.ts +20 -0
  67. package/dist/proxy/client-proxy.d.ts.map +1 -0
  68. package/dist/proxy/client-proxy.js +69 -0
  69. package/dist/proxy/client-proxy.js.map +1 -0
  70. package/dist/proxy/index.d.ts +2 -0
  71. package/dist/proxy/index.d.ts.map +1 -0
  72. package/dist/proxy/index.js +2 -0
  73. package/dist/proxy/index.js.map +1 -0
  74. package/dist/reflection/extractor.d.ts +13 -0
  75. package/dist/reflection/extractor.d.ts.map +1 -0
  76. package/dist/reflection/extractor.js +62 -0
  77. package/dist/reflection/extractor.js.map +1 -0
  78. package/dist/reflection/index.d.ts +2 -0
  79. package/dist/reflection/index.d.ts.map +1 -0
  80. package/dist/reflection/index.js +2 -0
  81. package/dist/reflection/index.js.map +1 -0
  82. package/dist/registry/index.d.ts +3 -0
  83. package/dist/registry/index.d.ts.map +1 -0
  84. package/dist/registry/index.js +2 -0
  85. package/dist/registry/index.js.map +1 -0
  86. package/dist/registry/method-registry.d.ts +56 -0
  87. package/dist/registry/method-registry.d.ts.map +1 -0
  88. package/dist/registry/method-registry.js +84 -0
  89. package/dist/registry/method-registry.js.map +1 -0
  90. package/dist/serialization/error-ext.d.ts +38 -0
  91. package/dist/serialization/error-ext.d.ts.map +1 -0
  92. package/dist/serialization/error-ext.js +76 -0
  93. package/dist/serialization/error-ext.js.map +1 -0
  94. package/dist/serialization/index.d.ts +4 -0
  95. package/dist/serialization/index.d.ts.map +1 -0
  96. package/dist/serialization/index.js +3 -0
  97. package/dist/serialization/index.js.map +1 -0
  98. package/dist/serialization/msgpack.d.ts +30 -0
  99. package/dist/serialization/msgpack.d.ts.map +1 -0
  100. package/dist/serialization/msgpack.js +76 -0
  101. package/dist/serialization/msgpack.js.map +1 -0
  102. package/dist/serialization/serializer.d.ts +15 -0
  103. package/dist/serialization/serializer.d.ts.map +1 -0
  104. package/dist/serialization/serializer.js +2 -0
  105. package/dist/serialization/serializer.js.map +1 -0
  106. package/dist/transport/client.d.ts +38 -0
  107. package/dist/transport/client.d.ts.map +1 -0
  108. package/dist/transport/client.js +57 -0
  109. package/dist/transport/client.js.map +1 -0
  110. package/dist/transport/connection.d.ts +57 -0
  111. package/dist/transport/connection.d.ts.map +1 -0
  112. package/dist/transport/connection.js +212 -0
  113. package/dist/transport/connection.js.map +1 -0
  114. package/dist/transport/constants.d.ts +2 -0
  115. package/dist/transport/constants.d.ts.map +1 -0
  116. package/dist/transport/constants.js +2 -0
  117. package/dist/transport/constants.js.map +1 -0
  118. package/dist/transport/framing.d.ts +54 -0
  119. package/dist/transport/framing.d.ts.map +1 -0
  120. package/dist/transport/framing.js +107 -0
  121. package/dist/transport/framing.js.map +1 -0
  122. package/dist/transport/index.d.ts +7 -0
  123. package/dist/transport/index.d.ts.map +1 -0
  124. package/dist/transport/index.js +7 -0
  125. package/dist/transport/index.js.map +1 -0
  126. package/dist/transport/peer-manager.d.ts +67 -0
  127. package/dist/transport/peer-manager.d.ts.map +1 -0
  128. package/dist/transport/peer-manager.js +172 -0
  129. package/dist/transport/peer-manager.js.map +1 -0
  130. package/dist/transport/server.d.ts +37 -0
  131. package/dist/transport/server.d.ts.map +1 -0
  132. package/dist/transport/server.js +88 -0
  133. package/dist/transport/server.js.map +1 -0
  134. package/dist/types/adapter.d.ts +33 -0
  135. package/dist/types/adapter.d.ts.map +1 -0
  136. package/dist/types/adapter.js +2 -0
  137. package/dist/types/adapter.js.map +1 -0
  138. package/dist/types/descriptor.d.ts +35 -0
  139. package/dist/types/descriptor.d.ts.map +1 -0
  140. package/dist/types/descriptor.js +2 -0
  141. package/dist/types/descriptor.js.map +1 -0
  142. package/dist/types/index.d.ts +8 -0
  143. package/dist/types/index.d.ts.map +1 -0
  144. package/dist/types/index.js +3 -0
  145. package/dist/types/index.js.map +1 -0
  146. package/dist/types/options.d.ts +55 -0
  147. package/dist/types/options.d.ts.map +1 -0
  148. package/dist/types/options.js +6 -0
  149. package/dist/types/options.js.map +1 -0
  150. package/dist/types/protocol.d.ts +94 -0
  151. package/dist/types/protocol.d.ts.map +1 -0
  152. package/dist/types/protocol.js +43 -0
  153. package/dist/types/protocol.js.map +1 -0
  154. package/dist/types/type-descriptor.d.ts +64 -0
  155. package/dist/types/type-descriptor.d.ts.map +1 -0
  156. package/dist/types/type-descriptor.js +2 -0
  157. package/dist/types/type-descriptor.js.map +1 -0
  158. package/package.json +41 -0
package/README.md ADDED
@@ -0,0 +1,62 @@
1
+ # @labostack/typebridge
2
+
3
+ Zero-ceremony RPC bridge with full auto-typing for TypeScript microservices.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @labostack/typebridge
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ### Service A — exposes controllers
14
+
15
+ ```typescript
16
+ import { TypeBridge } from "@labostack/typebridge";
17
+ import { NestAdapter } from "@labostack/typebridge/adapters";
18
+ import { UserController } from "./controllers";
19
+
20
+ export const api = await TypeBridge.create(NestAdapter, {
21
+ controllers: { UserController },
22
+ });
23
+ ```
24
+
25
+ ### Service B — calls Service A
26
+
27
+ ```typescript
28
+ import { TypeBridge } from "@labostack/typebridge";
29
+ import { GenericAdapter } from "@labostack/typebridge/adapters";
30
+ import type { api as UsersAPI } from "../service-a/node";
31
+
32
+ const api = await TypeBridge
33
+ .with<typeof UsersAPI>()
34
+ .create(GenericAdapter, {
35
+ controllers: "./controllers",
36
+ });
37
+
38
+ // Fully typed — IDE autocomplete, args, return types
39
+ const user = await api.userController.findById("abc-123");
40
+ ```
41
+
42
+ ### Adapters
43
+
44
+ | Adapter | Framework |
45
+ |---------|-----------|
46
+ | `NestAdapter` | NestJS |
47
+ | `GenericAdapter` | Plain TypeScript |
48
+ | `TsedAdapter` | Ts.ED |
49
+ | `DeepkitAdapter` | Deepkit |
50
+
51
+ All from `@labostack/typebridge/adapters`.
52
+
53
+ ## How it works
54
+
55
+ - **Discovery**: mDNS (local dev) + DNS (Docker/K8s)
56
+ - **Transport**: TCP with binary framing (MessagePack)
57
+ - **Typing**: `import type` + Proxy — zero codegen
58
+ - **Mesh**: Bidirectional — services call each other
59
+
60
+ ## License
61
+
62
+ MIT
@@ -0,0 +1,11 @@
1
+ import "reflect-metadata";
2
+ /**
3
+ * @Bridge() decorator — marks a class as a TypeBridge controller.
4
+ * Use this when your class name doesn't end with "Controller".
5
+ */
6
+ export declare function Bridge(): ClassDecorator;
7
+ /**
8
+ * Check if a class has the @Bridge() decorator.
9
+ */
10
+ export declare function hasBridgeDecorator(target: unknown): boolean;
11
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/adapters/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAI1B;;;GAGG;AACH,wBAAgB,MAAM,IAAI,cAAc,CAIvC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAG3D"}
@@ -0,0 +1,20 @@
1
+ import "reflect-metadata";
2
+ const BRIDGE_METADATA_KEY = "typebridge:bridge";
3
+ /**
4
+ * @Bridge() decorator — marks a class as a TypeBridge controller.
5
+ * Use this when your class name doesn't end with "Controller".
6
+ */
7
+ export function Bridge() {
8
+ return (target) => {
9
+ Reflect.defineMetadata(BRIDGE_METADATA_KEY, true, target);
10
+ };
11
+ }
12
+ /**
13
+ * Check if a class has the @Bridge() decorator.
14
+ */
15
+ export function hasBridgeDecorator(target) {
16
+ if (typeof target !== "function")
17
+ return false;
18
+ return Reflect.hasMetadata(BRIDGE_METADATA_KEY, target) === true;
19
+ }
20
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/adapters/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO,CAAC,MAAgB,EAAE,EAAE;QAC1B,OAAO,CAAC,cAAc,CAAC,mBAAmB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAe;IAChD,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO,OAAO,CAAC,WAAW,CAAC,mBAAmB,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;AACnE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import "reflect-metadata";
2
+ import type { FrameworkAdapter } from "../index.js";
3
+ /**
4
+ * DeepkitAdapter — adapter for Deepkit framework.
5
+ *
6
+ * Detects controllers by checking for Deepkit's http controller metadata.
7
+ * Deepkit uses `@http.controller()` decorator which stores metadata
8
+ * via `__type` reflection or Reflect.metadata.
9
+ */
10
+ export declare const DeepkitAdapter: FrameworkAdapter;
11
+ //# sourceMappingURL=deepkit-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepkit-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/deepkit-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAC;AAGtE;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,gBA8B5B,CAAC"}
@@ -0,0 +1,39 @@
1
+ import "reflect-metadata";
2
+ import { extractMethodsFromPrototype } from "../index.js";
3
+ /**
4
+ * DeepkitAdapter — adapter for Deepkit framework.
5
+ *
6
+ * Detects controllers by checking for Deepkit's http controller metadata.
7
+ * Deepkit uses `@http.controller()` decorator which stores metadata
8
+ * via `__type` reflection or Reflect.metadata.
9
+ */
10
+ export const DeepkitAdapter = {
11
+ name: "Deepkit",
12
+ isController(target) {
13
+ if (typeof target !== "function")
14
+ return false;
15
+ const t = target;
16
+ // Deepkit marks HTTP controllers with _httpController metadata
17
+ if (Reflect.hasMetadata("httpController", target))
18
+ return true;
19
+ // Deepkit's @http.controller() sets a static property
20
+ if (t._httpController !== undefined)
21
+ return true;
22
+ // Check for Deepkit's __type runtime reflection data
23
+ if (t.__type !== undefined) {
24
+ // If it has routes defined, it's a controller
25
+ const meta = Reflect.getMetadata("httpController", target);
26
+ if (meta)
27
+ return true;
28
+ }
29
+ return false;
30
+ },
31
+ extractMethods(controller) {
32
+ if (typeof controller !== "function")
33
+ return [];
34
+ const ctor = controller;
35
+ const name = ctor.name.charAt(0).toLowerCase() + ctor.name.slice(1);
36
+ return extractMethodsFromPrototype(name, ctor);
37
+ },
38
+ };
39
+ //# sourceMappingURL=deepkit-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepkit-adapter.js","sourceRoot":"","sources":["../../src/adapters/deepkit-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,IAAI,EAAE,SAAS;IAEf,YAAY,CAAC,MAAe;QAC1B,IAAI,OAAO,MAAM,KAAK,UAAU;YAAE,OAAO,KAAK,CAAC;QAE/C,MAAM,CAAC,GAAG,MAAa,CAAC;QAExB,+DAA+D;QAC/D,IAAI,OAAO,CAAC,WAAW,CAAC,gBAAgB,EAAE,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QAE/D,sDAAsD;QACtD,IAAI,CAAC,CAAC,eAAe,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAEjD,qDAAqD;QACrD,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC3B,8CAA8C;YAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YAC3D,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAC;QACxB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,cAAc,CAAC,UAAmB;QAChC,IAAI,OAAO,UAAU,KAAK,UAAU;YAAE,OAAO,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,UAAiD,CAAC;QAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;CACF,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { FrameworkAdapter } from "../index.js";
2
+ /**
3
+ * GenericAdapter — framework-agnostic adapter for plain TypeScript classes.
4
+ *
5
+ * Detects controllers by:
6
+ * 1. Class name ending with "Controller" (e.g., UserController)
7
+ * 2. Presence of @Bridge() decorator
8
+ *
9
+ * No framework dependency required.
10
+ */
11
+ export declare const GenericAdapter: FrameworkAdapter;
12
+ //# sourceMappingURL=generic-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/generic-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpD;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,EAAE,gBAe5B,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { extractMethodsFromPrototype } from "../index.js";
2
+ import { hasBridgeDecorator } from "./decorators.js";
3
+ /**
4
+ * GenericAdapter — framework-agnostic adapter for plain TypeScript classes.
5
+ *
6
+ * Detects controllers by:
7
+ * 1. Class name ending with "Controller" (e.g., UserController)
8
+ * 2. Presence of @Bridge() decorator
9
+ *
10
+ * No framework dependency required.
11
+ */
12
+ export const GenericAdapter = {
13
+ name: "Generic",
14
+ isController(target) {
15
+ if (typeof target !== "function")
16
+ return false;
17
+ const name = target.name;
18
+ return name.endsWith("Controller") || hasBridgeDecorator(target);
19
+ },
20
+ extractMethods(controller) {
21
+ if (typeof controller !== "function")
22
+ return [];
23
+ const ctor = controller;
24
+ const name = ctor.name.charAt(0).toLowerCase() + ctor.name.slice(1);
25
+ return extractMethodsFromPrototype(name, ctor);
26
+ },
27
+ };
28
+ //# sourceMappingURL=generic-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-adapter.js","sourceRoot":"","sources":["../../src/adapters/generic-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAqB;IAC9C,IAAI,EAAE,SAAS;IAEf,YAAY,CAAC,MAAe;QAC1B,IAAI,OAAO,MAAM,KAAK,UAAU;YAAE,OAAO,KAAK,CAAC;QAC/C,MAAM,IAAI,GAAI,MAAmB,CAAC,IAAI,CAAC;QACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACnE,CAAC;IAED,cAAc,CAAC,UAAmB;QAChC,IAAI,OAAO,UAAU,KAAK,UAAU;YAAE,OAAO,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,UAAiD,CAAC;QAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;CACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { NestAdapter } from "./nest-adapter.js";
2
+ export { GenericAdapter } from "./generic-adapter.js";
3
+ export { TsedAdapter } from "./tsed-adapter.js";
4
+ export { DeepkitAdapter } from "./deepkit-adapter.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { NestAdapter } from "./nest-adapter.js";
2
+ export { GenericAdapter } from "./generic-adapter.js";
3
+ export { TsedAdapter } from "./tsed-adapter.js";
4
+ export { DeepkitAdapter } from "./deepkit-adapter.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import "reflect-metadata";
2
+ import type { FrameworkAdapter } from "../index.js";
3
+ /**
4
+ * NestAdapter — adapter for NestJS framework.
5
+ *
6
+ * Detects controllers by checking for @Controller() decorator metadata.
7
+ * Extracts methods by inspecting the class prototype.
8
+ *
9
+ * Note: This adapter reads NestJS metadata but doesn't depend on the
10
+ * NestJS DI container. Controllers should be passed as instances
11
+ * (resolved from the container) via ServeOptions.controllers.
12
+ */
13
+ export declare const NestAdapter: FrameworkAdapter;
14
+ //# sourceMappingURL=nest-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nest-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/nest-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAC;AAOtE;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,EAAE,gBAkBzB,CAAC"}
@@ -0,0 +1,33 @@
1
+ import "reflect-metadata";
2
+ import { extractMethodsFromPrototype } from "../index.js";
3
+ // NestJS metadata keys (from @nestjs/common)
4
+ const CONTROLLER_WATERMARK = "__controller__";
5
+ const PATH_METADATA = "path";
6
+ /**
7
+ * NestAdapter — adapter for NestJS framework.
8
+ *
9
+ * Detects controllers by checking for @Controller() decorator metadata.
10
+ * Extracts methods by inspecting the class prototype.
11
+ *
12
+ * Note: This adapter reads NestJS metadata but doesn't depend on the
13
+ * NestJS DI container. Controllers should be passed as instances
14
+ * (resolved from the container) via ServeOptions.controllers.
15
+ */
16
+ export const NestAdapter = {
17
+ name: "NestJS",
18
+ isController(target) {
19
+ if (typeof target !== "function")
20
+ return false;
21
+ // Check for NestJS @Controller() decorator watermark
22
+ return (Reflect.hasMetadata(CONTROLLER_WATERMARK, target) ||
23
+ Reflect.hasMetadata(PATH_METADATA, target));
24
+ },
25
+ extractMethods(controller) {
26
+ if (typeof controller !== "function")
27
+ return [];
28
+ const ctor = controller;
29
+ const name = ctor.name.charAt(0).toLowerCase() + ctor.name.slice(1);
30
+ return extractMethodsFromPrototype(name, ctor);
31
+ },
32
+ };
33
+ //# sourceMappingURL=nest-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nest-adapter.js","sourceRoot":"","sources":["../../src/adapters/nest-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE1D,6CAA6C;AAC7C,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAC9C,MAAM,aAAa,GAAG,MAAM,CAAC;AAE7B;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,WAAW,GAAqB;IAC3C,IAAI,EAAE,QAAQ;IAEd,YAAY,CAAC,MAAe;QAC1B,IAAI,OAAO,MAAM,KAAK,UAAU;YAAE,OAAO,KAAK,CAAC;QAC/C,qDAAqD;QACrD,OAAO,CACL,OAAO,CAAC,WAAW,CAAC,oBAAoB,EAAE,MAAM,CAAC;YACjD,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAC3C,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,UAAmB;QAChC,IAAI,OAAO,UAAU,KAAK,UAAU;YAAE,OAAO,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,UAAiD,CAAC;QAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;CACF,CAAC"}
@@ -0,0 +1,10 @@
1
+ import "reflect-metadata";
2
+ import type { FrameworkAdapter } from "../index.js";
3
+ /**
4
+ * TsedAdapter — adapter for Ts.ED framework.
5
+ *
6
+ * Detects controllers by checking for @Controller() decorator metadata
7
+ * from @tsed/common. Extracts methods from the class prototype.
8
+ */
9
+ export declare const TsedAdapter: FrameworkAdapter;
10
+ //# sourceMappingURL=tsed-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsed-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/tsed-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAC;AAOtE;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,gBAoBzB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import "reflect-metadata";
2
+ import { extractMethodsFromPrototype } from "../index.js";
3
+ // Ts.ED metadata keys (from @tsed/common)
4
+ const TSED_CONTROLLER_KEY = "tsed:controller";
5
+ const TSED_CONTROLLER_URL = "tsed:controller:url";
6
+ /**
7
+ * TsedAdapter — adapter for Ts.ED framework.
8
+ *
9
+ * Detects controllers by checking for @Controller() decorator metadata
10
+ * from @tsed/common. Extracts methods from the class prototype.
11
+ */
12
+ export const TsedAdapter = {
13
+ name: "Ts.ED",
14
+ isController(target) {
15
+ if (typeof target !== "function")
16
+ return false;
17
+ // Check for Ts.ED @Controller() decorator metadata
18
+ return (Reflect.hasMetadata(TSED_CONTROLLER_KEY, target) ||
19
+ Reflect.hasMetadata(TSED_CONTROLLER_URL, target) ||
20
+ // Ts.ED v7+ uses "injectable:type" with value "controller"
21
+ Reflect.getMetadata("injectable:type", target) === "controller");
22
+ },
23
+ extractMethods(controller) {
24
+ if (typeof controller !== "function")
25
+ return [];
26
+ const ctor = controller;
27
+ const name = ctor.name.charAt(0).toLowerCase() + ctor.name.slice(1);
28
+ return extractMethodsFromPrototype(name, ctor);
29
+ },
30
+ };
31
+ //# sourceMappingURL=tsed-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsed-adapter.js","sourceRoot":"","sources":["../../src/adapters/tsed-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE1D,0CAA0C;AAC1C,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAC9C,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAqB;IAC3C,IAAI,EAAE,OAAO;IAEb,YAAY,CAAC,MAAe;QAC1B,IAAI,OAAO,MAAM,KAAK,UAAU;YAAE,OAAO,KAAK,CAAC;QAC/C,mDAAmD;QACnD,OAAO,CACL,OAAO,CAAC,WAAW,CAAC,mBAAmB,EAAE,MAAM,CAAC;YAChD,OAAO,CAAC,WAAW,CAAC,mBAAmB,EAAE,MAAM,CAAC;YAChD,2DAA2D;YAC3D,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,MAAM,CAAC,KAAK,YAAY,CAChE,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,UAAmB;QAChC,IAAI,OAAO,UAAU,KAAK,UAAU;YAAE,OAAO,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,UAAiD,CAAC;QAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { scanControllers } from "./scanner.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/autobarrel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { scanControllers } from "./scanner.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/autobarrel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { FrameworkAdapter } from "../types/adapter.js";
2
+ /**
3
+ * Scan a directory for controller classes.
4
+ *
5
+ * Recursively walks the directory, imports all .ts/.js files,
6
+ * and collects exports that the adapter recognizes as controllers
7
+ * (or whose name ends with "Controller").
8
+ *
9
+ * @param dirPath - Path to the controllers directory (relative or absolute)
10
+ * @param adapter - Framework adapter with isController() predicate
11
+ * @returns Object of discovered controller classes: { UserController, OrderController, ... }
12
+ */
13
+ export declare function scanControllers(dirPath: string, adapter: FrameworkAdapter): Promise<Record<string, unknown>>;
14
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/autobarrel/scanner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiDlC"}
@@ -0,0 +1,93 @@
1
+ import { readdir } from "node:fs/promises";
2
+ import { join, resolve } from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ /**
5
+ * Scan a directory for controller classes.
6
+ *
7
+ * Recursively walks the directory, imports all .ts/.js files,
8
+ * and collects exports that the adapter recognizes as controllers
9
+ * (or whose name ends with "Controller").
10
+ *
11
+ * @param dirPath - Path to the controllers directory (relative or absolute)
12
+ * @param adapter - Framework adapter with isController() predicate
13
+ * @returns Object of discovered controller classes: { UserController, OrderController, ... }
14
+ */
15
+ export async function scanControllers(dirPath, adapter) {
16
+ const absolutePath = resolve(process.cwd(), dirPath);
17
+ const controllers = {};
18
+ let files;
19
+ try {
20
+ files = await readdirRecursive(absolutePath);
21
+ }
22
+ catch (err) {
23
+ throw new Error(`[TypeBridge] Failed to scan controllers directory "${dirPath}": ${err.message}`);
24
+ }
25
+ for (const filePath of files) {
26
+ // Skip non-source files
27
+ if (!isSourceFile(filePath))
28
+ continue;
29
+ try {
30
+ // Dynamic import using file:// URL (required for ESM)
31
+ const fileUrl = pathToFileURL(filePath).href;
32
+ const mod = await import(fileUrl);
33
+ // Check all named exports
34
+ for (const [exportName, exportValue] of Object.entries(mod)) {
35
+ if (exportName === "default")
36
+ continue;
37
+ if (typeof exportValue !== "function")
38
+ continue;
39
+ // Check: adapter says it's a controller, OR name ends with "Controller"
40
+ const isController = adapter.isController(exportValue) ||
41
+ exportName.endsWith("Controller");
42
+ if (isController) {
43
+ controllers[exportName] = exportValue;
44
+ }
45
+ }
46
+ }
47
+ catch {
48
+ // Skip files that fail to import (e.g., non-module files, syntax errors)
49
+ }
50
+ }
51
+ if (Object.keys(controllers).length === 0) {
52
+ console.warn(`[TypeBridge] No controllers found in "${dirPath}". ` +
53
+ `Make sure controller class names end with "Controller" or use the @Bridge() decorator.`);
54
+ }
55
+ return controllers;
56
+ }
57
+ /**
58
+ * Recursively list all files in a directory.
59
+ */
60
+ async function readdirRecursive(dir) {
61
+ const entries = await readdir(dir, { withFileTypes: true });
62
+ const files = [];
63
+ for (const entry of entries) {
64
+ const fullPath = join(dir, entry.name);
65
+ if (entry.isDirectory()) {
66
+ const nested = await readdirRecursive(fullPath);
67
+ files.push(...nested);
68
+ }
69
+ else {
70
+ files.push(fullPath);
71
+ }
72
+ }
73
+ return files;
74
+ }
75
+ /**
76
+ * Check if a file is a TypeScript/JavaScript source file we should import.
77
+ */
78
+ function isSourceFile(filePath) {
79
+ // Include .ts, .js, .mts, .mjs
80
+ if (!filePath.endsWith(".ts") &&
81
+ !filePath.endsWith(".js") &&
82
+ !filePath.endsWith(".mts") &&
83
+ !filePath.endsWith(".mjs")) {
84
+ return false;
85
+ }
86
+ // Exclude declaration files, tests, specs
87
+ if (filePath.endsWith(".d.ts") || filePath.endsWith(".d.mts"))
88
+ return false;
89
+ if (filePath.includes(".test.") || filePath.includes(".spec."))
90
+ return false;
91
+ return true;
92
+ }
93
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/autobarrel/scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type { FrameworkAdapter } from "./types/adapter.js";
2
+ import type { NodeOptions, TypeBridgeAPI } from "./types/options.js";
3
+ /**
4
+ * TypeBridge — zero-ceremony RPC mesh for TypeScript microservices.
5
+ *
6
+ * One method: `TypeBridge.create()`. That's it.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { TypeBridge } from "@labostack/typebridge";
11
+ * import { NestAdapter } from "@labostack/typebridge/adapters";
12
+ * import { UserController } from "./controllers";
13
+ *
14
+ * const api = await TypeBridge.create(NestAdapter, {
15
+ * controllers: { UserController },
16
+ * });
17
+ *
18
+ * // From another service — auto-discovered, auto-routed:
19
+ * // api.userController.findById("abc") — just works.
20
+ * ```
21
+ */
22
+ export declare class TypeBridge {
23
+ /**
24
+ * Declare remote peer types for full type inference.
25
+ *
26
+ * Returns a builder whose `.create()` merges remote controller types
27
+ * into the returned API. Zero runtime cost — pure type narrowing.
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * import type { api as UsersAPI } from "example-service-nest/node";
32
+ *
33
+ * const api = await TypeBridge
34
+ * .with<typeof UsersAPI>()
35
+ * .create(GenericAdapter, { controllers: { OrderController } });
36
+ *
37
+ * api.userController.findById("abc"); // ✅ typed (remote)
38
+ * api.orderController.create({...}); // ✅ typed (local)
39
+ * ```
40
+ */
41
+ static with<P>(): {
42
+ create: {
43
+ /** Object controllers — fully typed local + remote */
44
+ <C extends Record<string, unknown>>(adapter: FrameworkAdapter, options: NodeOptions<C>): Promise<TypeBridgeAPI<C> & Omit<P, "close" | "name" | "port" | "__controllers" | "__mesh">>;
45
+ /** Autobarrel — directory path */
46
+ (adapter: FrameworkAdapter, options: NodeOptions<string>): Promise<TypeBridgeAPI<Record<string, unknown>> & Omit<P, "close" | "name" | "port" | "__controllers" | "__mesh">>;
47
+ };
48
+ };
49
+ /** Object controllers — fully typed */
50
+ static create<C extends Record<string, unknown>>(adapter: FrameworkAdapter, options: NodeOptions<C>): Promise<TypeBridgeAPI<C>>;
51
+ /** Autobarrel — directory path, controllers discovered at runtime */
52
+ static create(adapter: FrameworkAdapter, options: NodeOptions<string>): Promise<TypeBridgeAPI<Record<string, unknown>>>;
53
+ }
54
+ //# sourceMappingURL=bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AASrE;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAU;IACrB;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,IAAI,CAAC,CAAC;gBAGoB;YAC3B,sDAAsD;YACtD,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GACtB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,kEAAkB,CAAC,CAAC;YAC/C,kCAAkC;YAClC,CACE,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAC3B,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kEAAkB,CAAC,CAAC;SACtE;;IAIL,uCAAuC;WAC1B,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnD,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,GACtB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAE5B,qEAAqE;WACxD,MAAM,CACjB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,GAC3B,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAkGnD"}