@zdavison/nestjs-rpc-toolkit 0.0.15 → 0.0.18

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.
@@ -114,9 +114,9 @@ class RpcPackageInitializer {
114
114
  "generate:types": "ts-node scripts/generate-all-rpc-types.ts"
115
115
  },
116
116
  dependencies: {
117
- "@zdavison/nestjs-rpc-toolkit": "^0.0.14",
118
- "@nestjs/common": "^10.0.0",
119
- "@nestjs/microservices": "^10.0.0"
117
+ "@zdavison/nestjs-rpc-toolkit": "^0.0.18",
118
+ "@nestjs/common": "^11.0.0",
119
+ "@nestjs/microservices": "^11.0.0"
120
120
  },
121
121
  devDependencies: {
122
122
  "@types/node": "^24.5.1",
@@ -246,7 +246,7 @@ export interface ITypedMessageBus extends IMessageBus<AllRpcMethods> {}
246
246
 
247
247
  @Injectable()
248
248
  export class MessageBus extends BaseMessageBus<AllRpcMethods> implements ITypedMessageBus {
249
- constructor(client: ClientProxy) {
249
+ constructor(client: ClientProxy<any, any>) {
250
250
  super(client);
251
251
  }
252
252
  }
package/dist/index.d.ts CHANGED
@@ -4,6 +4,8 @@ export * from './decorators/rpc-controller.decorator';
4
4
  export * from './rpc/typed-message-bus';
5
5
  export * from './rpc/rpc-registry';
6
6
  export * from './rpc/rpc-client';
7
+ export * from './rpc/rpc.module';
7
8
  export * from './transport';
8
9
  export * from './generators/rpc-types-generator';
10
+ export { Transport } from '@nestjs/microservices';
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,kCAAkC,CAAC;AAGjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -14,12 +14,17 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.Transport = void 0;
17
18
  __exportStar(require("./interfaces"), exports);
18
19
  __exportStar(require("./decorators/rpc-method.decorator"), exports);
19
20
  __exportStar(require("./decorators/rpc-controller.decorator"), exports);
20
21
  __exportStar(require("./rpc/typed-message-bus"), exports);
21
22
  __exportStar(require("./rpc/rpc-registry"), exports);
22
23
  __exportStar(require("./rpc/rpc-client"), exports);
24
+ __exportStar(require("./rpc/rpc.module"), exports);
23
25
  __exportStar(require("./transport"), exports);
24
26
  __exportStar(require("./generators/rpc-types-generator"), exports);
27
+ // Re-export Transport enum from @nestjs/microservices for convenience
28
+ var microservices_1 = require("@nestjs/microservices");
29
+ Object.defineProperty(exports, "Transport", { enumerable: true, get: function () { return microservices_1.Transport; } });
25
30
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,oEAAkD;AAClD,wEAAsD;AACtD,0DAAwC;AACxC,qDAAmC;AACnC,mDAAiC;AACjC,8CAA4B;AAC5B,mEAAiD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,oEAAkD;AAClD,wEAAsD;AACtD,0DAAwC;AACxC,qDAAmC;AACnC,mDAAiC;AACjC,mDAAiC;AACjC,8CAA4B;AAC5B,mEAAiD;AAEjD,sEAAsE;AACtE,uDAAkD;AAAzC,0GAAA,SAAS,OAAA"}
@@ -0,0 +1,84 @@
1
+ import { DynamicModule, Type } from '@nestjs/common';
2
+ import { ClientProxy, Transport } from '@nestjs/microservices';
3
+ export type RpcModuleOptions = {
4
+ /**
5
+ * The name of the client proxy provider
6
+ * @default 'MICROSERVICE_CLIENT'
7
+ */
8
+ clientName?: string;
9
+ /**
10
+ * The name of the RPC provider
11
+ * @default 'RPC'
12
+ */
13
+ rpcProviderName?: string;
14
+ } & ({
15
+ /**
16
+ * Custom ClientProxy class for in-process or custom transport
17
+ * @example InProcessClientProxy
18
+ */
19
+ clientProxyClass: Type<ClientProxy>;
20
+ } | {
21
+ /**
22
+ * Standard NestJS transport configuration
23
+ * @example { transport: Transport.TCP, options: { host: 'localhost', port: 3000 } }
24
+ */
25
+ transport: Transport;
26
+ options?: any;
27
+ });
28
+ /**
29
+ * Global RPC module that provides the RPC client to all modules.
30
+ *
31
+ * Architecture:
32
+ * - Import this module ONCE in your top-level application module using forRoot()
33
+ * - The top-level app provides ALL wiring (ClientProxy, RPC client)
34
+ * - Individual service modules just @Inject('RPC') and use it - NO additional wiring needed
35
+ * - Service modules remain clean and decoupled from transport concerns
36
+ *
37
+ * Usage with in-process transport:
38
+ * ```typescript
39
+ * @Module({
40
+ * imports: [
41
+ * RpcModule.forRoot({
42
+ * clientProxyClass: InProcessClientProxy,
43
+ * }),
44
+ * UserModule,
45
+ * AuthModule,
46
+ * ],
47
+ * })
48
+ * export class AppModule {}
49
+ * ```
50
+ *
51
+ * Usage with TCP transport:
52
+ * ```typescript
53
+ * @Module({
54
+ * imports: [
55
+ * RpcModule.forRoot({
56
+ * transport: Transport.TCP,
57
+ * options: {
58
+ * host: 'localhost',
59
+ * port: 3000,
60
+ * },
61
+ * }),
62
+ * UserModule,
63
+ * AuthModule,
64
+ * ],
65
+ * })
66
+ * export class AppModule {}
67
+ * ```
68
+ *
69
+ * Usage in service modules (same for all transports):
70
+ * ```typescript
71
+ * @Injectable()
72
+ * export class UserService {
73
+ * constructor(@Inject('RPC') private rpc: IRpcClient) {}
74
+ *
75
+ * async findAll() {
76
+ * return this.rpc.user.findAll();
77
+ * }
78
+ * }
79
+ * ```
80
+ */
81
+ export declare class RpcModule {
82
+ static forRoot(options: RpcModuleOptions): DynamicModule;
83
+ }
84
+ //# sourceMappingURL=rpc.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.module.d.ts","sourceRoot":"","sources":["../../src/rpc/rpc.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,aAAa,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAiB,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAG9E,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,CACA;IACE;;;OAGG;IACH,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;CACrC,GACD;IACE;;;OAGG;IACH,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf,CACJ,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,qBAEa,SAAS;IACpB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,aAAa;CA0CzD"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var RpcModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.RpcModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const microservices_1 = require("@nestjs/microservices");
13
+ const rpc_client_1 = require("./rpc-client");
14
+ /**
15
+ * Global RPC module that provides the RPC client to all modules.
16
+ *
17
+ * Architecture:
18
+ * - Import this module ONCE in your top-level application module using forRoot()
19
+ * - The top-level app provides ALL wiring (ClientProxy, RPC client)
20
+ * - Individual service modules just @Inject('RPC') and use it - NO additional wiring needed
21
+ * - Service modules remain clean and decoupled from transport concerns
22
+ *
23
+ * Usage with in-process transport:
24
+ * ```typescript
25
+ * @Module({
26
+ * imports: [
27
+ * RpcModule.forRoot({
28
+ * clientProxyClass: InProcessClientProxy,
29
+ * }),
30
+ * UserModule,
31
+ * AuthModule,
32
+ * ],
33
+ * })
34
+ * export class AppModule {}
35
+ * ```
36
+ *
37
+ * Usage with TCP transport:
38
+ * ```typescript
39
+ * @Module({
40
+ * imports: [
41
+ * RpcModule.forRoot({
42
+ * transport: Transport.TCP,
43
+ * options: {
44
+ * host: 'localhost',
45
+ * port: 3000,
46
+ * },
47
+ * }),
48
+ * UserModule,
49
+ * AuthModule,
50
+ * ],
51
+ * })
52
+ * export class AppModule {}
53
+ * ```
54
+ *
55
+ * Usage in service modules (same for all transports):
56
+ * ```typescript
57
+ * @Injectable()
58
+ * export class UserService {
59
+ * constructor(@Inject('RPC') private rpc: IRpcClient) {}
60
+ *
61
+ * async findAll() {
62
+ * return this.rpc.user.findAll();
63
+ * }
64
+ * }
65
+ * ```
66
+ */
67
+ let RpcModule = RpcModule_1 = class RpcModule {
68
+ static forRoot(options) {
69
+ const clientName = options.clientName || 'MICROSERVICE_CLIENT';
70
+ const rpcProviderName = options.rpcProviderName || 'RPC';
71
+ // Build client configuration based on whether it's a custom class or standard transport
72
+ const clientConfig = {
73
+ name: clientName,
74
+ };
75
+ if ('clientProxyClass' in options) {
76
+ // Custom client proxy class (e.g., InProcessClientProxy)
77
+ clientConfig.customClass = options.clientProxyClass;
78
+ }
79
+ else {
80
+ // Standard transport configuration (e.g., TCP, Redis, etc.)
81
+ clientConfig.transport = options.transport;
82
+ if (options.options) {
83
+ clientConfig.options = options.options;
84
+ }
85
+ }
86
+ return {
87
+ module: RpcModule_1,
88
+ imports: [
89
+ microservices_1.ClientsModule.register([clientConfig]),
90
+ ],
91
+ providers: [
92
+ {
93
+ provide: rpcProviderName,
94
+ useFactory: (client) => {
95
+ const rpcClient = new rpc_client_1.RpcClient(client);
96
+ return new Proxy({}, {
97
+ get: (_target, domain) => {
98
+ return rpcClient.createDomainProxy(domain);
99
+ }
100
+ });
101
+ },
102
+ inject: [clientName],
103
+ },
104
+ ],
105
+ exports: [rpcProviderName],
106
+ };
107
+ }
108
+ };
109
+ exports.RpcModule = RpcModule;
110
+ exports.RpcModule = RpcModule = RpcModule_1 = __decorate([
111
+ (0, common_1.Global)(),
112
+ (0, common_1.Module)({})
113
+ ], RpcModule);
114
+ //# sourceMappingURL=rpc.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.module.js","sourceRoot":"","sources":["../../src/rpc/rpc.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAqE;AACrE,yDAA8E;AAC9E,6CAAyC;AAgCzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAGI,IAAM,SAAS,iBAAf,MAAM,SAAS;IACpB,MAAM,CAAC,OAAO,CAAC,OAAyB;QACtC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,qBAAqB,CAAC;QAC/D,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,KAAK,CAAC;QAEzD,wFAAwF;QACxF,MAAM,YAAY,GAAQ;YACxB,IAAI,EAAE,UAAU;SACjB,CAAC;QAEF,IAAI,kBAAkB,IAAI,OAAO,EAAE,CAAC;YAClC,yDAAyD;YACzD,YAAY,CAAC,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,4DAA4D;YAC5D,YAAY,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YAC3C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YACzC,CAAC;QACH,CAAC;QAED,OAAO;YACL,MAAM,EAAE,WAAS;YACjB,OAAO,EAAE;gBACP,6BAAa,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC;aACvC;YACD,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,eAAe;oBACxB,UAAU,EAAE,CAAC,MAAmB,EAAE,EAAE;wBAClC,MAAM,SAAS,GAAG,IAAI,sBAAS,CAAC,MAAM,CAAC,CAAC;wBACxC,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE;4BACnB,GAAG,EAAE,CAAC,OAAO,EAAE,MAAc,EAAE,EAAE;gCAC/B,OAAO,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;4BAC7C,CAAC;yBACF,CAAC,CAAC;oBACL,CAAC;oBACD,MAAM,EAAE,CAAC,UAAU,CAAC;iBACrB;aACF;YACD,OAAO,EAAE,CAAC,eAAe,CAAC;SAC3B,CAAC;IACJ,CAAC;CACF,CAAA;AA3CY,8BAAS;oBAAT,SAAS;IAFrB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,SAAS,CA2CrB"}
@@ -1,7 +1,16 @@
1
1
  import { ClientProxy, ReadPacket, WritePacket } from '@nestjs/microservices';
2
- import { Observable } from 'rxjs';
2
+ import { Observable, ReplaySubject } from 'rxjs';
3
+ /**
4
+ * InProcessClientProxy for NestJS v11
5
+ * Includes status tracking, event handling, and unwrap functionality
6
+ */
3
7
  export declare class InProcessClientProxy extends ClientProxy {
4
8
  private transport;
9
+ protected _status$: ReplaySubject<string>;
10
+ constructor();
11
+ get status(): Observable<string>;
12
+ on<EventKey extends string = string>(_event: EventKey, _callback: (...args: any[]) => void): void;
13
+ unwrap<T>(): T;
5
14
  connect(): Promise<void>;
6
15
  close(): void;
7
16
  protected dispatchEvent(packet: ReadPacket): Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"in-process.client.d.ts","sourceRoot":"","sources":["../../src/transport/in-process.client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAE7E,OAAO,EAAE,UAAU,EAAe,MAAM,MAAM,CAAC;AAE/C,qBAAa,oBAAqB,SAAQ,WAAW;IACnD,OAAO,CAAC,SAAS,CAA4C;IAEvD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,KAAK,IAAI,IAAI;cAIG,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IAM/D,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI;IAe1F,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;CAGnF"}
1
+ {"version":3,"file":"in-process.client.d.ts","sourceRoot":"","sources":["../../src/transport/in-process.client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAE7E,OAAO,EAAE,UAAU,EAAe,aAAa,EAAwB,MAAM,MAAM,CAAC;AAEpF;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;IACnD,OAAO,CAAC,SAAS,CAA4C;IAG7D,SAAS,CAAC,QAAQ,wBAAgC;;IASlD,IAAI,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,CAE/B;IAGD,EAAE,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EACjC,MAAM,EAAE,QAAQ,EAChB,SAAS,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAClC,IAAI;IAMP,MAAM,CAAC,CAAC,KAAK,CAAC;IAKR,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B,KAAK,IAAI,IAAI;cAKG,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IAM/D,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI;IAe1F,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;CAGnF"}
@@ -4,15 +4,39 @@ exports.InProcessClientProxy = void 0;
4
4
  const microservices_1 = require("@nestjs/microservices");
5
5
  const in_process_transport_1 = require("./in-process.transport");
6
6
  const rxjs_1 = require("rxjs");
7
+ /**
8
+ * InProcessClientProxy for NestJS v11
9
+ * Includes status tracking, event handling, and unwrap functionality
10
+ */
7
11
  class InProcessClientProxy extends microservices_1.ClientProxy {
8
12
  constructor() {
9
- super(...arguments);
13
+ super();
10
14
  this.transport = in_process_transport_1.InProcessTransportStrategy.getInstance();
15
+ // Required for NestJS v11 compatibility
16
+ this._status$ = new rxjs_1.ReplaySubject(1);
17
+ // Initialize with 'connected' status for in-memory transport
18
+ this._status$.next('connected');
19
+ }
20
+ // Required for NestJS v11 compatibility
21
+ get status() {
22
+ return this._status$.asObservable().pipe((0, rxjs_1.distinctUntilChanged)());
23
+ }
24
+ // Required for NestJS v11 compatibility
25
+ on(_event, _callback) {
26
+ // In-process transport doesn't emit events, but we implement this for compatibility
27
+ // Subclasses can override if they need event handling
28
+ }
29
+ // Required for NestJS v11 compatibility
30
+ unwrap() {
31
+ // Return the transport strategy as the underlying "client"
32
+ return this.transport;
11
33
  }
12
34
  async connect() {
35
+ this._status$.next('connected');
13
36
  return Promise.resolve();
14
37
  }
15
38
  close() {
39
+ this._status$.next('disconnected');
16
40
  // Nothing to close for in-memory transport
17
41
  }
18
42
  async dispatchEvent(packet) {
@@ -1 +1 @@
1
- {"version":3,"file":"in-process.client.js","sourceRoot":"","sources":["../../src/transport/in-process.client.ts"],"names":[],"mappings":";;;AAAA,yDAA6E;AAC7E,iEAAoE;AACpE,+BAA+C;AAE/C,MAAa,oBAAqB,SAAQ,2BAAW;IAArD;;QACU,cAAS,GAAG,iDAA0B,CAAC,WAAW,EAAE,CAAC;IAkC/D,CAAC;IAhCC,KAAK,CAAC,OAAO;QACX,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,2CAA2C;IAC7C,CAAC;IAES,KAAK,CAAC,aAAa,CAAC,MAAkB;QAC9C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAiB,EAAE,IAAI,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAES,OAAO,CAAC,MAAkB,EAAE,QAAuC;QAC3E,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;QAEjC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAiB,EAAE,IAAI,CAAC;aAChD,IAAI,CAAC,MAAM,CAAC,EAAE;YACb,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACjC,CAAC,CAAC;aACD,KAAK,CAAC,KAAK,CAAC,EAAE;YACb,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEL,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,gDAAgD;IACnE,CAAC;IAED,gDAAgD;IAChD,IAAI,CAA8B,OAAY,EAAE,IAAY;QAC1D,OAAO,IAAA,YAAK,EAAC,GAAG,EAAE,CAAC,IAAA,WAAI,EAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAiB,EAAE,IAAI,CAAC,CAAC,CAAwB,CAAC;IACvG,CAAC;CACF;AAnCD,oDAmCC"}
1
+ {"version":3,"file":"in-process.client.js","sourceRoot":"","sources":["../../src/transport/in-process.client.ts"],"names":[],"mappings":";;;AAAA,yDAA6E;AAC7E,iEAAoE;AACpE,+BAAoF;AAEpF;;;GAGG;AACH,MAAa,oBAAqB,SAAQ,2BAAW;IAMnD;QACE,KAAK,EAAE,CAAC;QANF,cAAS,GAAG,iDAA0B,CAAC,WAAW,EAAE,CAAC;QAE7D,wCAAwC;QAC9B,aAAQ,GAAG,IAAI,oBAAa,CAAS,CAAC,CAAC,CAAC;QAIhD,6DAA6D;QAC7D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IAED,wCAAwC;IACxC,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAA,2BAAoB,GAAE,CAAC,CAAC;IACnE,CAAC;IAED,wCAAwC;IACxC,EAAE,CACA,MAAgB,EAChB,SAAmC;QAEnC,oFAAoF;QACpF,sDAAsD;IACxD,CAAC;IAED,wCAAwC;IACxC,MAAM;QACJ,2DAA2D;QAC3D,OAAO,IAAI,CAAC,SAAyB,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnC,2CAA2C;IAC7C,CAAC;IAES,KAAK,CAAC,aAAa,CAAC,MAAkB;QAC9C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAiB,EAAE,IAAI,CAAC,CAAC;QAClD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAES,OAAO,CAAC,MAAkB,EAAE,QAAuC;QAC3E,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;QAEjC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAiB,EAAE,IAAI,CAAC;aAChD,IAAI,CAAC,MAAM,CAAC,EAAE;YACb,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACjC,CAAC,CAAC;aACD,KAAK,CAAC,KAAK,CAAC,EAAE;YACb,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEL,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,gDAAgD;IACnE,CAAC;IAED,gDAAgD;IAChD,IAAI,CAA8B,OAAY,EAAE,IAAY;QAC1D,OAAO,IAAA,YAAK,EAAC,GAAG,EAAE,CAAC,IAAA,WAAI,EAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAiB,EAAE,IAAI,CAAC,CAAC,CAAwB,CAAC;IACvG,CAAC;CACF;AAlED,oDAkEC"}
@@ -2,6 +2,8 @@ import { CustomTransportStrategy, Server, ReadPacket, BaseRpcContext } from '@ne
2
2
  export declare class InProcessTransportStrategy extends Server implements CustomTransportStrategy {
3
3
  private static instance;
4
4
  static getInstance(): InProcessTransportStrategy;
5
+ on<EventKey extends string = string, EventCallback extends Function = Function>(_event: EventKey, _callback: EventCallback): any;
6
+ unwrap<T>(): T;
5
7
  listen(callback: () => void): void;
6
8
  close(): void;
7
9
  handleMessage(pattern: string, packet: ReadPacket, context: BaseRpcContext): Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"in-process.transport.d.ts","sourceRoot":"","sources":["../../src/transport/in-process.transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEpG,qBAAa,0BAA2B,SAAQ,MAAO,YAAW,uBAAuB;IACvF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA6B;IAEpD,MAAM,CAAC,WAAW,IAAI,0BAA0B;IAOhD,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIlC,KAAK,IAAI,IAAI;IAIP,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,GAAG,CAAC;IAkBT,WAAW,CACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,GAAG,CAAC;IAYT,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAO3D,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI;CAK5C"}
1
+ {"version":3,"file":"in-process.transport.d.ts","sourceRoot":"","sources":["../../src/transport/in-process.transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEpG,qBAAa,0BAA2B,SAAQ,MAAO,YAAW,uBAAuB;IACvF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA6B;IAEpD,MAAM,CAAC,WAAW,IAAI,0BAA0B;IAQhD,EAAE,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM,EAAE,aAAa,SAAS,QAAQ,GAAG,QAAQ,EAC5E,MAAM,EAAE,QAAQ,EAChB,SAAS,EAAE,aAAa,GACvB,GAAG;IAKN,MAAM,CAAC,CAAC,KAAK,CAAC;IAKd,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIlC,KAAK,IAAI,IAAI;IAIP,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,GAAG,CAAC;IAkBT,WAAW,CACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,GAAG,CAAC;IAYT,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAO3D,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI;CAK5C"}
@@ -9,6 +9,15 @@ class InProcessTransportStrategy extends microservices_1.Server {
9
9
  }
10
10
  return InProcessTransportStrategy.instance;
11
11
  }
12
+ // Required for NestJS v11 compatibility
13
+ on(_event, _callback) {
14
+ // In-process transport doesn't emit events, but we implement this for compatibility
15
+ }
16
+ // Required for NestJS v11 compatibility
17
+ unwrap() {
18
+ // Return this instance as the underlying "server"
19
+ return this;
20
+ }
12
21
  listen(callback) {
13
22
  callback();
14
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"in-process.transport.js","sourceRoot":"","sources":["../../src/transport/in-process.transport.ts"],"names":[],"mappings":";;;AAAA,yDAAoG;AAEpG,MAAa,0BAA2B,SAAQ,sBAAM;IAGpD,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,CAAC;YACzC,0BAA0B,CAAC,QAAQ,GAAG,IAAI,0BAA0B,EAAE,CAAC;QACzE,CAAC;QACD,OAAO,0BAA0B,CAAC,QAAQ,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,QAAoB;QACzB,QAAQ,EAAE,CAAC;IACb,CAAC;IAED,KAAK;QACH,qBAAqB;IACvB,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,OAAe,EACf,MAAkB,EAClB,OAAuB;QAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEnD,0FAA0F;QAC1F,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;YACnE,0DAA0D;YAC1D,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,WAAW,CACf,OAAe,EACf,MAAkB,EAClB,OAAuB;QAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,IAAS;QAC1C,MAAM,MAAM,GAAe,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,EAAE,CAAC,CAAC;QACvC,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,iCAAiC;IACjC,SAAS,CAAC,OAAe,EAAE,IAAS;QAClC,MAAM,MAAM,GAAe,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;CACF;AApED,gEAoEC"}
1
+ {"version":3,"file":"in-process.transport.js","sourceRoot":"","sources":["../../src/transport/in-process.transport.ts"],"names":[],"mappings":";;;AAAA,yDAAoG;AAEpG,MAAa,0BAA2B,SAAQ,sBAAM;IAGpD,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,CAAC;YACzC,0BAA0B,CAAC,QAAQ,GAAG,IAAI,0BAA0B,EAAE,CAAC;QACzE,CAAC;QACD,OAAO,0BAA0B,CAAC,QAAQ,CAAC;IAC7C,CAAC;IAED,wCAAwC;IACxC,EAAE,CACA,MAAgB,EAChB,SAAwB;QAExB,oFAAoF;IACtF,CAAC;IAED,wCAAwC;IACxC,MAAM;QACJ,kDAAkD;QAClD,OAAO,IAAoB,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,QAAoB;QACzB,QAAQ,EAAE,CAAC;IACb,CAAC;IAED,KAAK;QACH,qBAAqB;IACvB,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,OAAe,EACf,MAAkB,EAClB,OAAuB;QAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEnD,0FAA0F;QAC1F,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;YACnE,0DAA0D;YAC1D,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,WAAW,CACf,OAAe,EACf,MAAkB,EAClB,OAAuB;QAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,IAAS;QAC1C,MAAM,MAAM,GAAe,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,EAAE,CAAC,CAAC;QACvC,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,iCAAiC;IACjC,SAAS,CAAC,OAAe,EAAE,IAAS;QAClC,MAAM,MAAM,GAAe,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;CACF;AAlFD,gEAkFC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zdavison/nestjs-rpc-toolkit",
3
- "version": "0.0.15",
3
+ "version": "0.0.18",
4
4
  "description": "Toolkit for type-safe RPC calls in NestJS monorepos.",
5
5
  "private": false,
6
6
  "main": "dist/index.js",
@@ -12,14 +12,14 @@
12
12
  "bootstrap": "dist/bin/bootstrap.js"
13
13
  },
14
14
  "dependencies": {
15
- "@nestjs/common": "^10.0.0",
16
- "@nestjs/microservices": "^10.0.0",
17
15
  "glob": "^10.0.0",
18
16
  "rxjs": "^7.8.0",
19
17
  "ts-morph": "^20.0.0",
20
18
  "type-fest": "^5.0.1"
21
19
  },
22
20
  "devDependencies": {
21
+ "@nestjs/common": "^10.0.0",
22
+ "@nestjs/microservices": "^10.0.0",
23
23
  "@types/node": "^20.0.0",
24
24
  "typescript": "^5.0.0"
25
25
  },
@@ -1,19 +0,0 @@
1
- #!/usr/bin/env node
2
- declare class RpcPackageInitializer {
3
- private cwd;
4
- private rl;
5
- constructor();
6
- init(): Promise<void>;
7
- private promptForConfig;
8
- private question;
9
- private createRpcPackage;
10
- private ensureDirectory;
11
- private createPackageJson;
12
- private findRootTsConfig;
13
- private createTsConfig;
14
- private createRpcConfig;
15
- private createGenerateScript;
16
- private createSourceFiles;
17
- }
18
- export { RpcPackageInitializer };
19
- //# sourceMappingURL=init.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":";AAYA,cAAM,qBAAqB;IACzB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,EAAE,CAAqB;;IAUzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAeb,eAAe;YA8Bf,QAAQ;YAUR,gBAAgB;YAkBhB,eAAe;YAMf,iBAAiB;IA8B/B,OAAO,CAAC,gBAAgB;YAiCV,cAAc;YAiDd,eAAe;YAUf,oBAAoB;YAoBpB,iBAAiB;CAmChC;AAWD,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
package/dist/bin/init.js DELETED
@@ -1,275 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
- Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.RpcPackageInitializer = void 0;
38
- const path = __importStar(require("path"));
39
- const fs = __importStar(require("fs"));
40
- const readline = __importStar(require("readline"));
41
- class RpcPackageInitializer {
42
- constructor() {
43
- this.cwd = process.cwd();
44
- this.rl = readline.createInterface({
45
- input: process.stdin,
46
- output: process.stdout
47
- });
48
- }
49
- async init() {
50
- console.log('🚀 NestJS RPC Package Initializer\n');
51
- const config = await this.promptForConfig();
52
- await this.createRpcPackage(config);
53
- this.rl.close();
54
- console.log('\n✅ RPC package initialized successfully!');
55
- console.log('\nNext steps:');
56
- console.log('1. Update module packages in nestjs-rpc-toolkit.config.json (supports wildcards like "packages/modules/*")');
57
- console.log('2. Run "npm run generate:types" to generate RPC types');
58
- console.log('3. Build the package with "npm run build"');
59
- }
60
- async promptForConfig() {
61
- const packagePath = await this.question('Where would you like to create the RPC package? ', 'packages/lib-rpc');
62
- const projectName = path.basename(this.cwd);
63
- const defaultPackageName = `@${projectName}/rpc`;
64
- const packageName = await this.question('What should the package name be? ', defaultPackageName);
65
- const modulePackagesInput = await this.question('Enter module packages to scan for RPC methods (comma-separated, supports wildcards): ', 'packages/modules/*');
66
- const modulePackages = modulePackagesInput
67
- .split(',')
68
- .map(p => p.trim())
69
- .filter(p => p.length > 0);
70
- return {
71
- packagePath: packagePath.trim(),
72
- packageName: packageName.trim(),
73
- modulePackages
74
- };
75
- }
76
- async question(prompt, defaultValue) {
77
- const displayPrompt = defaultValue ? `${prompt}(${defaultValue}) ` : prompt;
78
- return new Promise((resolve) => {
79
- this.rl.question(displayPrompt, (answer) => {
80
- resolve(answer.trim() || defaultValue || '');
81
- });
82
- });
83
- }
84
- async createRpcPackage(config) {
85
- const fullPackagePath = path.resolve(this.cwd, config.packagePath);
86
- // Create directory structure
87
- await this.ensureDirectory(fullPackagePath);
88
- await this.ensureDirectory(path.join(fullPackagePath, 'src'));
89
- await this.ensureDirectory(path.join(fullPackagePath, 'scripts'));
90
- // Create files
91
- await this.createPackageJson(fullPackagePath, config);
92
- await this.createTsConfig(fullPackagePath);
93
- await this.createRpcConfig(fullPackagePath, config);
94
- await this.createGenerateScript(fullPackagePath);
95
- await this.createSourceFiles(fullPackagePath);
96
- console.log(`📦 Created RPC package at: ${config.packagePath}`);
97
- }
98
- async ensureDirectory(dirPath) {
99
- if (!fs.existsSync(dirPath)) {
100
- fs.mkdirSync(dirPath, { recursive: true });
101
- }
102
- }
103
- async createPackageJson(packagePath, config) {
104
- const packageJson = {
105
- name: config.packageName,
106
- version: "1.0.0",
107
- description: "Package containing shared types for RPC calls in this monorepo (generated by @zdavison/nestjs-rpc-toolkit)",
108
- main: "dist/index.js",
109
- types: "dist/index.d.ts",
110
- scripts: {
111
- build: "npm run generate:types && tsc",
112
- clean: "rm -rf dist",
113
- dev: "tsc --watch",
114
- "generate:types": "ts-node scripts/generate-all-rpc-types.ts"
115
- },
116
- dependencies: {
117
- "@zdavison/nestjs-rpc-toolkit": "^0.0.12",
118
- "@nestjs/common": "^10.0.0",
119
- "@nestjs/microservices": "^10.0.0"
120
- },
121
- devDependencies: {
122
- "@types/node": "^24.5.1",
123
- typescript: "^5.0.0",
124
- "ts-node": "^10.9.0",
125
- "ts-morph": "^20.0.0"
126
- }
127
- };
128
- const filePath = path.join(packagePath, 'package.json');
129
- fs.writeFileSync(filePath, JSON.stringify(packageJson, null, 2));
130
- }
131
- findRootTsConfig() {
132
- // Search for root tsconfig files starting from repo root
133
- const possiblePaths = [
134
- 'tsconfig.base.json',
135
- 'tsconfig.json'
136
- ];
137
- // Find git root or use current working directory
138
- let searchDir = this.cwd;
139
- try {
140
- // Try to find git root by looking for .git directory
141
- let current = this.cwd;
142
- while (current !== path.dirname(current)) {
143
- if (fs.existsSync(path.join(current, '.git'))) {
144
- searchDir = current;
145
- break;
146
- }
147
- current = path.dirname(current);
148
- }
149
- }
150
- catch {
151
- // If git root search fails, use current directory
152
- }
153
- for (const tsConfigPath of possiblePaths) {
154
- const fullPath = path.join(searchDir, tsConfigPath);
155
- if (fs.existsSync(fullPath)) {
156
- return fullPath;
157
- }
158
- }
159
- return null;
160
- }
161
- async createTsConfig(packagePath) {
162
- // Try to find a root tsconfig to extend from
163
- const rootTsConfig = this.findRootTsConfig();
164
- let tsConfig;
165
- if (rootTsConfig) {
166
- // Calculate relative path from package to root tsconfig
167
- const relativePath = path.relative(packagePath, rootTsConfig);
168
- tsConfig = {
169
- extends: relativePath,
170
- compilerOptions: {
171
- outDir: "./dist",
172
- declaration: true,
173
- declarationMap: true,
174
- sourceMap: true
175
- },
176
- include: ["src/**/*"],
177
- exclude: ["node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"]
178
- };
179
- }
180
- else {
181
- // Create a standalone valid tsconfig
182
- tsConfig = {
183
- compilerOptions: {
184
- target: "ES2020",
185
- module: "commonjs",
186
- lib: ["ES2020"],
187
- outDir: "./dist",
188
- rootDir: "./src",
189
- strict: true,
190
- esModuleInterop: true,
191
- skipLibCheck: true,
192
- forceConsistentCasingInFileNames: true,
193
- declaration: true,
194
- declarationMap: true,
195
- sourceMap: true,
196
- experimentalDecorators: true,
197
- emitDecoratorMetadata: true
198
- },
199
- include: ["src/**/*"],
200
- exclude: ["node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"]
201
- };
202
- }
203
- const filePath = path.join(packagePath, 'tsconfig.json');
204
- fs.writeFileSync(filePath, JSON.stringify(tsConfig, null, 2));
205
- }
206
- async createRpcConfig(packagePath, config) {
207
- const rpcConfig = {
208
- packages: config.modulePackages,
209
- outputDir: path.join(config.packagePath, 'src')
210
- };
211
- const filePath = path.join(packagePath, 'nestjs-rpc-toolkit.config.json');
212
- fs.writeFileSync(filePath, JSON.stringify(rpcConfig, null, 2));
213
- }
214
- async createGenerateScript(packagePath) {
215
- const script = `import { RpcTypesGenerator } from '@zdavison/nestjs-rpc-toolkit';
216
- import * as path from 'path';
217
-
218
- // Run the generator - we're in ${path.basename(packagePath)}/scripts
219
- const rootDir = path.join(__dirname, '../../../');
220
- const configPath = path.join(__dirname, '../nestjs-rpc-toolkit.config.json');
221
-
222
- const generator = new RpcTypesGenerator({
223
- rootDir,
224
- configPath,
225
- });
226
-
227
- generator.generate();
228
- `;
229
- const filePath = path.join(packagePath, 'scripts', 'generate-all-rpc-types.ts');
230
- fs.writeFileSync(filePath, script);
231
- }
232
- async createSourceFiles(packagePath) {
233
- // Create index.ts
234
- const indexContent = `export * from './all.rpc.gen';
235
- export * from './typed-message-bus';
236
- `;
237
- fs.writeFileSync(path.join(packagePath, 'src', 'index.ts'), indexContent);
238
- // Create typed-message-bus.ts
239
- const messageBusContent = `import { MessageBus as BaseMessageBus, IMessageBus } from '@zdavison/nestjs-rpc-toolkit';
240
- import { AllRpcMethods } from './all.rpc.gen';
241
- import { Injectable } from '@nestjs/common';
242
- import { ClientProxy } from '@nestjs/microservices';
243
-
244
- // Typed version of MessageBus with generated types
245
- export interface ITypedMessageBus extends IMessageBus<AllRpcMethods> {}
246
-
247
- @Injectable()
248
- export class MessageBus extends BaseMessageBus<AllRpcMethods> implements ITypedMessageBus {
249
- constructor(client: ClientProxy) {
250
- super(client);
251
- }
252
- }
253
- `;
254
- fs.writeFileSync(path.join(packagePath, 'src', 'typed-message-bus.ts'), messageBusContent);
255
- // Create placeholder all.rpc.gen.ts
256
- const placeholderContent = `// This file will be generated by the RPC types generator
257
- // Run 'npm run generate:types' to generate the actual types
258
-
259
- export interface AllRpcMethods {
260
- // Generated RPC method types will appear here
261
- }
262
- `;
263
- fs.writeFileSync(path.join(packagePath, 'src', 'all.rpc.gen.ts'), placeholderContent);
264
- }
265
- }
266
- exports.RpcPackageInitializer = RpcPackageInitializer;
267
- // Main execution
268
- if (require.main === module) {
269
- const initializer = new RpcPackageInitializer();
270
- initializer.init().catch((error) => {
271
- console.error('❌ Error initializing RPC package:', error);
272
- process.exit(1);
273
- });
274
- }
275
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":"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"}