@zdavison/nestjs-rpc-toolkit 0.0.11 → 0.0.13

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 (67) hide show
  1. package/dist/bin/bootstrap.d.ts +19 -0
  2. package/dist/bin/bootstrap.d.ts.map +1 -0
  3. package/dist/bin/bootstrap.js +275 -0
  4. package/dist/bin/bootstrap.js.map +1 -0
  5. package/dist/bin/init.js +15 -2
  6. package/dist/bin/init.js.map +1 -1
  7. package/dist/decorators/rpc-controller.decorator.d.ts +32 -0
  8. package/dist/decorators/rpc-controller.decorator.d.ts.map +1 -1
  9. package/dist/decorators/rpc-controller.decorator.js +56 -0
  10. package/dist/decorators/rpc-controller.decorator.js.map +1 -1
  11. package/dist/decorators/rpc-method.decorator.d.ts +22 -2
  12. package/dist/decorators/rpc-method.decorator.d.ts.map +1 -1
  13. package/dist/decorators/rpc-method.decorator.js +70 -20
  14. package/dist/decorators/rpc-method.decorator.js.map +1 -1
  15. package/dist/generators/rpc-types-generator.d.ts +3 -1
  16. package/dist/generators/rpc-types-generator.d.ts.map +1 -1
  17. package/dist/generators/rpc-types-generator.js +259 -25
  18. package/dist/generators/rpc-types-generator.js.map +1 -1
  19. package/dist/index.d.ts +1 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +1 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/rpc/rpc-client.d.ts +3 -0
  24. package/dist/rpc/rpc-client.d.ts.map +1 -1
  25. package/dist/rpc/rpc-client.js +7 -2
  26. package/dist/rpc/rpc-client.js.map +1 -1
  27. package/dist/rpc/rpc-registry.d.ts.map +1 -1
  28. package/dist/rpc/rpc-registry.js +11 -1
  29. package/dist/rpc/rpc-registry.js.map +1 -1
  30. package/dist/rpc/typed-message-bus.d.ts +11 -0
  31. package/dist/rpc/typed-message-bus.d.ts.map +1 -1
  32. package/dist/rpc/typed-message-bus.js +2 -1
  33. package/dist/rpc/typed-message-bus.js.map +1 -1
  34. package/dist/transport/{in-memory.client.d.ts → in-process.client.d.ts} +4 -2
  35. package/dist/transport/in-process.client.d.ts.map +1 -0
  36. package/dist/transport/{in-memory.client.js → in-process.client.js} +13 -7
  37. package/dist/transport/in-process.client.js.map +1 -0
  38. package/dist/transport/{in-memory.transport.d.ts → in-process.transport.d.ts} +3 -3
  39. package/dist/transport/in-process.transport.d.ts.map +1 -0
  40. package/dist/transport/{in-memory.transport.js → in-process.transport.js} +18 -8
  41. package/dist/transport/in-process.transport.js.map +1 -0
  42. package/dist/transport/index.d.ts +2 -2
  43. package/dist/transport/index.d.ts.map +1 -1
  44. package/dist/transport/index.js +2 -2
  45. package/dist/transport/index.js.map +1 -1
  46. package/dist/types/serializable.d.ts +55 -4
  47. package/dist/types/serializable.d.ts.map +1 -1
  48. package/dist/types/serializable.js +4 -0
  49. package/dist/types/serializable.js.map +1 -1
  50. package/package.json +8 -6
  51. package/dist/module-base/index.d.ts +0 -15
  52. package/dist/module-base/index.d.ts.map +0 -1
  53. package/dist/module-base/index.js +0 -38
  54. package/dist/module-base/index.js.map +0 -1
  55. package/dist/test-date-serialization.d.ts +0 -2
  56. package/dist/test-date-serialization.d.ts.map +0 -1
  57. package/dist/test-date-serialization.js +0 -12
  58. package/dist/test-date-serialization.js.map +0 -1
  59. package/dist/test-type-validation.d.ts +0 -2
  60. package/dist/test-type-validation.d.ts.map +0 -1
  61. package/dist/test-type-validation.js +0 -87
  62. package/dist/test-type-validation.js.map +0 -1
  63. package/dist/transport/in-memory.client.d.ts.map +0 -1
  64. package/dist/transport/in-memory.client.js.map +0 -1
  65. package/dist/transport/in-memory.transport.d.ts.map +0 -1
  66. package/dist/transport/in-memory.transport.js.map +0 -1
  67. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ declare class RpcPackageInitializer {
3
+ private cwd;
4
+ private rl;
5
+ constructor();
6
+ bootstrap(): 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=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/bin/bootstrap.ts"],"names":[],"mappings":";AAYA,cAAM,qBAAqB;IACzB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,EAAE,CAAqB;;IAUzB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;YAelB,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"}
@@ -0,0 +1,275 @@
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 bootstrap() {
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.13",
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.json',
135
+ 'tsconfig.base.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.bootstrap().catch((error) => {
271
+ console.error('❌ Error initializing RPC package:', error);
272
+ process.exit(1);
273
+ });
274
+ }
275
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/bin/bootstrap.ts"],"names":[],"mappings":"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"}
package/dist/bin/init.js CHANGED
@@ -58,7 +58,7 @@ class RpcPackageInitializer {
58
58
  console.log('3. Build the package with "npm run build"');
59
59
  }
60
60
  async promptForConfig() {
61
- const packagePath = await this.question('Where would you like to create the RPC package? ', 'packages/rpc');
61
+ const packagePath = await this.question('Where would you like to create the RPC package? ', 'packages/lib-rpc');
62
62
  const projectName = path.basename(this.cwd);
63
63
  const defaultPackageName = `@${projectName}/rpc`;
64
64
  const packageName = await this.question('What should the package name be? ', defaultPackageName);
@@ -83,9 +83,11 @@ class RpcPackageInitializer {
83
83
  }
84
84
  async createRpcPackage(config) {
85
85
  const fullPackagePath = path.resolve(this.cwd, config.packagePath);
86
+ // Create directory structure
86
87
  await this.ensureDirectory(fullPackagePath);
87
88
  await this.ensureDirectory(path.join(fullPackagePath, 'src'));
88
89
  await this.ensureDirectory(path.join(fullPackagePath, 'scripts'));
90
+ // Create files
89
91
  await this.createPackageJson(fullPackagePath, config);
90
92
  await this.createTsConfig(fullPackagePath);
91
93
  await this.createRpcConfig(fullPackagePath, config);
@@ -112,7 +114,7 @@ class RpcPackageInitializer {
112
114
  "generate:types": "ts-node scripts/generate-all-rpc-types.ts"
113
115
  },
114
116
  dependencies: {
115
- "@zdavison/nestjs-rpc-toolkit": "^0.0.11",
117
+ "@zdavison/nestjs-rpc-toolkit": "^0.0.12",
116
118
  "@nestjs/common": "^10.0.0",
117
119
  "@nestjs/microservices": "^10.0.0"
118
120
  },
@@ -127,12 +129,15 @@ class RpcPackageInitializer {
127
129
  fs.writeFileSync(filePath, JSON.stringify(packageJson, null, 2));
128
130
  }
129
131
  findRootTsConfig() {
132
+ // Search for root tsconfig files starting from repo root
130
133
  const possiblePaths = [
131
134
  'tsconfig.base.json',
132
135
  'tsconfig.json'
133
136
  ];
137
+ // Find git root or use current working directory
134
138
  let searchDir = this.cwd;
135
139
  try {
140
+ // Try to find git root by looking for .git directory
136
141
  let current = this.cwd;
137
142
  while (current !== path.dirname(current)) {
138
143
  if (fs.existsSync(path.join(current, '.git'))) {
@@ -143,6 +148,7 @@ class RpcPackageInitializer {
143
148
  }
144
149
  }
145
150
  catch {
151
+ // If git root search fails, use current directory
146
152
  }
147
153
  for (const tsConfigPath of possiblePaths) {
148
154
  const fullPath = path.join(searchDir, tsConfigPath);
@@ -153,9 +159,11 @@ class RpcPackageInitializer {
153
159
  return null;
154
160
  }
155
161
  async createTsConfig(packagePath) {
162
+ // Try to find a root tsconfig to extend from
156
163
  const rootTsConfig = this.findRootTsConfig();
157
164
  let tsConfig;
158
165
  if (rootTsConfig) {
166
+ // Calculate relative path from package to root tsconfig
159
167
  const relativePath = path.relative(packagePath, rootTsConfig);
160
168
  tsConfig = {
161
169
  extends: relativePath,
@@ -170,6 +178,7 @@ class RpcPackageInitializer {
170
178
  };
171
179
  }
172
180
  else {
181
+ // Create a standalone valid tsconfig
173
182
  tsConfig = {
174
183
  compilerOptions: {
175
184
  target: "ES2020",
@@ -221,10 +230,12 @@ generator.generate();
221
230
  fs.writeFileSync(filePath, script);
222
231
  }
223
232
  async createSourceFiles(packagePath) {
233
+ // Create index.ts
224
234
  const indexContent = `export * from './all.rpc.gen';
225
235
  export * from './typed-message-bus';
226
236
  `;
227
237
  fs.writeFileSync(path.join(packagePath, 'src', 'index.ts'), indexContent);
238
+ // Create typed-message-bus.ts
228
239
  const messageBusContent = `import { MessageBus as BaseMessageBus, IMessageBus } from '@zdavison/nestjs-rpc-toolkit';
229
240
  import { AllRpcMethods } from './all.rpc.gen';
230
241
  import { Injectable } from '@nestjs/common';
@@ -241,6 +252,7 @@ export class MessageBus extends BaseMessageBus<AllRpcMethods> implements ITypedM
241
252
  }
242
253
  `;
243
254
  fs.writeFileSync(path.join(packagePath, 'src', 'typed-message-bus.ts'), messageBusContent);
255
+ // Create placeholder all.rpc.gen.ts
244
256
  const placeholderContent = `// This file will be generated by the RPC types generator
245
257
  // Run 'npm run generate:types' to generate the actual types
246
258
 
@@ -252,6 +264,7 @@ export interface AllRpcMethods {
252
264
  }
253
265
  }
254
266
  exports.RpcPackageInitializer = RpcPackageInitializer;
267
+ // Main execution
255
268
  if (require.main === module) {
256
269
  const initializer = new RpcPackageInitializer();
257
270
  initializer.init().catch((error) => {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/bin/init.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,35 @@
1
1
  import 'reflect-metadata';
2
+ /**
3
+ * RPC Controller decorator for classes that contain RPC methods.
4
+ * This decorator applies the NestJS @Controller decorator internally
5
+ * and sets metadata for RPC method discovery and pattern generation.
6
+ *
7
+ * @param prefix - Optional module prefix for RPC patterns (e.g., 'user', 'product').
8
+ * If not provided, infers from class name by removing common suffixes:
9
+ * Service, Application, Handler, Repository
10
+ * @example
11
+ * ```typescript
12
+ * @RpcController('user')
13
+ * export class UserService {
14
+ * @RpcMethod()
15
+ * async findAll(): Promise<User[]> {
16
+ * // Pattern: auto-generated as 'user.findAll'
17
+ * return this.users;
18
+ * }
19
+ * }
20
+ *
21
+ * @RpcController() // Infers 'user' from UserService
22
+ * export class UserService { ... }
23
+ *
24
+ * @RpcController() // Infers 'product' from ProductApplication
25
+ * export class ProductApplication { ... }
26
+ *
27
+ * @RpcController() // Infers 'order' from OrderHandler
28
+ * export class OrderHandler { ... }
29
+ *
30
+ * @RpcController() // Infers 'customer' from CustomerRepository
31
+ * export class CustomerRepository { ... }
32
+ * ```
33
+ */
2
34
  export declare function RpcController(prefix?: string): ClassDecorator;
3
35
  //# sourceMappingURL=rpc-controller.decorator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-controller.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/rpc-controller.decorator.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC;AAkC1B,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAkB7D"}
1
+ {"version":3,"file":"rpc-controller.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/rpc-controller.decorator.ts"],"names":[],"mappings":"AAGA,OAAO,kBAAkB,CAAC;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAyC7D"}
@@ -2,17 +2,73 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RpcController = RpcController;
4
4
  const common_1 = require("@nestjs/common");
5
+ const microservices_1 = require("@nestjs/microservices");
6
+ const rpc_registry_1 = require("../rpc/rpc-registry");
5
7
  require("reflect-metadata");
8
+ /**
9
+ * RPC Controller decorator for classes that contain RPC methods.
10
+ * This decorator applies the NestJS @Controller decorator internally
11
+ * and sets metadata for RPC method discovery and pattern generation.
12
+ *
13
+ * @param prefix - Optional module prefix for RPC patterns (e.g., 'user', 'product').
14
+ * If not provided, infers from class name by removing common suffixes:
15
+ * Service, Application, Handler, Repository
16
+ * @example
17
+ * ```typescript
18
+ * @RpcController('user')
19
+ * export class UserService {
20
+ * @RpcMethod()
21
+ * async findAll(): Promise<User[]> {
22
+ * // Pattern: auto-generated as 'user.findAll'
23
+ * return this.users;
24
+ * }
25
+ * }
26
+ *
27
+ * @RpcController() // Infers 'user' from UserService
28
+ * export class UserService { ... }
29
+ *
30
+ * @RpcController() // Infers 'product' from ProductApplication
31
+ * export class ProductApplication { ... }
32
+ *
33
+ * @RpcController() // Infers 'order' from OrderHandler
34
+ * export class OrderHandler { ... }
35
+ *
36
+ * @RpcController() // Infers 'customer' from CustomerRepository
37
+ * export class CustomerRepository { ... }
38
+ * ```
39
+ */
6
40
  function RpcController(prefix) {
7
41
  return function (target) {
42
+ // Apply the NestJS Controller decorator
8
43
  (0, common_1.Controller)()(target);
44
+ // Set RPC-specific metadata for pattern generation
9
45
  let modulePrefix = prefix;
10
46
  if (!modulePrefix) {
47
+ // Infer from class name: UserService -> 'user', ProductApplication -> 'product', OrderHandler -> 'order'
11
48
  modulePrefix = target.name
12
49
  .replace(/(Service|Application|Handler|Repository)$/, '')
13
50
  .toLowerCase();
14
51
  }
15
52
  Reflect.defineMetadata('rpc:module', modulePrefix, target);
53
+ // Process any pending @RpcMethod decorators that were applied before @RpcController
54
+ const pendingMethods = Reflect.getMetadata('rpc:pending-methods', target) || [];
55
+ for (const { propertyKey, descriptor } of pendingMethods) {
56
+ const methodName = propertyKey;
57
+ const actualPattern = `${modulePrefix}.${methodName}`;
58
+ // Register in RPC registry
59
+ const metadata = {
60
+ pattern: actualPattern,
61
+ module: modulePrefix,
62
+ methodName,
63
+ target,
64
+ propertyKey,
65
+ };
66
+ rpc_registry_1.rpcRegistry.registerMethod(metadata);
67
+ // Apply the NestJS MessagePattern decorator
68
+ (0, microservices_1.MessagePattern)(actualPattern)(target.prototype, propertyKey, descriptor);
69
+ }
70
+ // Clear the pending methods
71
+ Reflect.deleteMetadata('rpc:pending-methods', target);
16
72
  return target;
17
73
  };
18
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-controller.decorator.js","sourceRoot":"","sources":["../../src/decorators/rpc-controller.decorator.ts"],"names":[],"mappings":";;AAmCA,sCAkBC;AArDD,2CAA4C;AAC5C,4BAA0B;AAkC1B,SAAgB,aAAa,CAAC,MAAe;IAC3C,OAAO,UAAU,MAAW;QAE1B,IAAA,mBAAU,GAAE,CAAC,MAAM,CAAC,CAAC;QAGrB,IAAI,YAAY,GAAG,MAAM,CAAC;QAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;YAElB,YAAY,GAAG,MAAM,CAAC,IAAI;iBACvB,OAAO,CAAC,2CAA2C,EAAE,EAAE,CAAC;iBACxD,WAAW,EAAE,CAAC;QACnB,CAAC;QAED,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAE3D,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"rpc-controller.decorator.js","sourceRoot":"","sources":["../../src/decorators/rpc-controller.decorator.ts"],"names":[],"mappings":";;AAqCA,sCAyCC;AA9ED,2CAA4C;AAC5C,yDAA6E;AAC7E,sDAAqE;AACrE,4BAA0B;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,SAAgB,aAAa,CAAC,MAAe;IAC3C,OAAO,UAAU,MAAW;QAC1B,wCAAwC;QACxC,IAAA,mBAAU,GAAE,CAAC,MAAM,CAAC,CAAC;QAErB,mDAAmD;QACnD,IAAI,YAAY,GAAG,MAAM,CAAC;QAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,yGAAyG;YACzG,YAAY,GAAG,MAAM,CAAC,IAAI;iBACvB,OAAO,CAAC,2CAA2C,EAAE,EAAE,CAAC;iBACxD,WAAW,EAAE,CAAC;QACnB,CAAC;QAED,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAE3D,oFAAoF;QACpF,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAChF,KAAK,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,cAAc,EAAE,CAAC;YACzD,MAAM,UAAU,GAAG,WAAW,CAAC;YAC/B,MAAM,aAAa,GAAG,GAAG,YAAY,IAAI,UAAU,EAAE,CAAC;YAEtD,2BAA2B;YAC3B,MAAM,QAAQ,GAAsB;gBAClC,OAAO,EAAE,aAAa;gBACtB,MAAM,EAAE,YAAsB;gBAC9B,UAAU;gBACV,MAAM;gBACN,WAAW;aACZ,CAAC;YACF,0BAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAErC,4CAA4C;YAC5C,IAAA,8BAAkB,EAAC,aAAa,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAC/E,CAAC;QAED,4BAA4B;QAC5B,OAAO,CAAC,cAAc,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QAEtD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
@@ -1,4 +1,24 @@
1
- import { SerializableRpcMethod } from '../types/serializable';
1
+ import { ValidateRpcMethod } from '../types/serializable';
2
2
  import 'reflect-metadata';
3
- export declare function RpcMethod<T extends (...args: any[]) => any>(): (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<SerializableRpcMethod<T>> | void;
3
+ /**
4
+ * RPC Method decorator with compile-time serialization validation.
5
+ * Ensures all parameters and return types are JSON-serializable for TCP transport.
6
+ * Pattern is automatically generated from the class name or @Controller decorator.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * @RpcMethod()
11
+ * async findUser(id: string): Promise<User> {
12
+ * // ✅ Valid: string param, User return type are serializable
13
+ * // Pattern: auto-generated as 'user.findUser' or 'controllerName.findUser'
14
+ * return this.userRepo.findById(id);
15
+ * }
16
+ *
17
+ * @RpcMethod()
18
+ * async invalidMethod(callback: (data: string) => void): Promise<HTMLElement> {
19
+ * // ❌ Error: callback and HTMLElement are not serializable
20
+ * }
21
+ * ```
22
+ */
23
+ export declare function RpcMethod(): <TMethod extends (...args: any[]) => any>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<ValidateRpcMethod<TMethod>>) => void;
4
24
  //# sourceMappingURL=rpc-method.decorator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-method.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/rpc-method.decorator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,kBAAkB,CAAC;AAsB1B,wBAAgB,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,KAAK,CAC9D,MAAM,EAAE,GAAG,EACX,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,uBAAuB,CAAC,CAAC,CAAC,KACnC,uBAAuB,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAyC5D"}
1
+ {"version":3,"file":"rpc-method.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/rpc-method.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,kBAAkB,CAAC;AAE1B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,KACN,OAAO,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACtD,QAAQ,GAAG,EACX,aAAa,MAAM,EACnB,YAAY,uBAAuB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAC9D,IAAI,CAgER"}