@rsdk/grpc.server 4.2.0 → 4.2.1-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,15 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.2.1-next.0](https://github.com/R-Vision/rsdk/compare/v4.2.0...v4.2.1-next.0) (2024-02-05)
7
+
8
+ ### Bug Fixes
9
+
10
+ * fixed loading descriptors ([34adc07](https://github.com/R-Vision/rsdk/commit/34adc07e5a9b12f4de34909d0adc16dddbcb7078))
11
+ * implementation changed to map ([9e44b77](https://github.com/R-Vision/rsdk/commit/9e44b77979b26468df1ae4fabb5f6854b28b5aff))
12
+ * implementation changed to non iterable object ([0485981](https://github.com/R-Vision/rsdk/commit/04859816d97e9ae538caed1af6c0b112531e1cde))
13
+ * implementations changed to set ([27b7f65](https://github.com/R-Vision/rsdk/commit/27b7f65c9c322a710552827e02fab6b459cdc61e))
14
+
6
15
  ## [4.2.0](https://github.com/R-Vision/rsdk/compare/v4.2.0-next.2...v4.2.0) (2024-02-05)
7
16
 
8
17
  **Note:** Version bump only for package @rsdk/grpc.server
@@ -9,6 +9,7 @@ var ReflectionModule_1;
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.ReflectionModule = void 0;
11
11
  const common_1 = require("@nestjs/common");
12
+ const constants_1 = require("./constants");
12
13
  const controllers_1 = require("./controllers");
13
14
  const reflection_service_1 = require("./reflection.service");
14
15
  let ReflectionModule = ReflectionModule_1 = class ReflectionModule {
@@ -20,7 +21,20 @@ let ReflectionModule = ReflectionModule_1 = class ReflectionModule {
20
21
  reflection_service_1.ReflectionService,
21
22
  {
22
23
  provide: 'GRPC_PACKAGES',
23
- useValue: packages,
24
+ /**
25
+ * Если передавать простым объектом, то NestJS под капотом динамические модули
26
+ * прогоняет через stringify https://github.com/nestjs/nest/blob/master/packages/core/injector/module-token-factory.ts#L62
27
+ * из-за чего на вложенных объектах вызывается метод toJSON().
28
+ *
29
+ * GRPC контракты сгенерированные с использованием ts-proto имеют метод toJSON.
30
+ * Если контракт использует ENUM, то внутри метода toJSON вызывается функция,
31
+ * которая пытается сопоставить входящие данные чтобы вернуть строковый ENUM.
32
+ * В этой функции, если передали несуществующий ключ ENUM'a, то выкидывается исключение.
33
+ *
34
+ * Поэтому, чтобы избежать этого, будем передаем объект,
35
+ * который "скрыт" для stringify, а значит методы toJSON вызываться не будут.
36
+ */
37
+ useValue: new Map([...packages, ...constants_1.systemPackages].map((pkg) => [pkg.name, pkg])),
24
38
  },
25
39
  ],
26
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"reflection.module.js","sourceRoot":"","sources":["../src/reflection.module.ts"],"names":[],"mappings":";;;;;;;;;;AACA,2CAAwC;AAGxC,+CAGuB;AACvB,6DAAyD;AAGlD,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IAC3B,MAAM,CAAC,OAAO,CAAC,QAAmB;QAChC,OAAO;YACL,MAAM,EAAE,kBAAgB;YACxB,WAAW,EAAE,CAAC,yCAA2B,EAAE,oCAAsB,CAAC;YAClE,SAAS,EAAE;gBACT,sCAAiB;gBACjB;oBACE,OAAO,EAAE,eAAe;oBACxB,QAAQ,EAAE,QAAQ;iBACnB;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAdY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,gBAAgB,CAc5B"}
1
+ {"version":3,"file":"reflection.module.js","sourceRoot":"","sources":["../src/reflection.module.ts"],"names":[],"mappings":";;;;;;;;;;AACA,2CAAwC;AAGxC,2CAA6C;AAC7C,+CAGuB;AACvB,6DAAyD;AAGlD,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IAC3B,MAAM,CAAC,OAAO,CAAC,QAAmB;QAChC,OAAO;YACL,MAAM,EAAE,kBAAgB;YACxB,WAAW,EAAE,CAAC,yCAA2B,EAAE,oCAAsB,CAAC;YAClE,SAAS,EAAE;gBACT,sCAAiB;gBACjB;oBACE,OAAO,EAAE,eAAe;oBACxB;;;;;;;;;;;;uBAYG;oBACH,QAAQ,EAAE,IAAI,GAAG,CACf,CAAC,GAAG,QAAQ,EAAE,GAAG,0BAAc,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAC/D;iBACF;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AA7BY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,gBAAgB,CA6B5B"}
@@ -3,7 +3,10 @@ import type { OnModuleInit } from '@nestjs/common';
3
3
  import type { Package } from '@rsdk/grpc.loader';
4
4
  export declare class ReflectionService implements OnModuleInit {
5
5
  private readonly packages;
6
- constructor(packages: Package[]);
6
+ private readonly services;
7
+ private readonly files;
8
+ private readonly logger;
9
+ constructor(packages: Map<string, Package>);
7
10
  onModuleInit(): void;
8
11
  /**
9
12
  * List the full names of registered gRPC services
@@ -37,7 +40,4 @@ export declare class ReflectionService implements OnModuleInit {
37
40
  fileContainingExtension(containingType: string, extensionNumber: number): Buffer;
38
41
  allExtensionNumbersOfType(symbol: string): number[];
39
42
  private findSymbol;
40
- private readonly services;
41
- private readonly files;
42
- private readonly logger;
43
43
  }
@@ -17,29 +17,35 @@ exports.ReflectionService = void 0;
17
17
  const protobuf_1 = require("@bufbuild/protobuf");
18
18
  const common_1 = require("@nestjs/common");
19
19
  const logging_1 = require("@rsdk/logging");
20
- const constants_1 = require("./constants");
21
20
  let ReflectionService = ReflectionService_1 = class ReflectionService {
22
21
  packages;
22
+ services = new Set();
23
+ files = [];
24
+ logger = logging_1.LoggerFactory.create(ReflectionService_1);
23
25
  constructor(packages) {
24
26
  this.packages = packages;
25
27
  }
26
28
  onModuleInit() {
27
- const allPackages = [...this.packages, ...constants_1.systemPackages];
28
- const allPackagesNames = new Set(allPackages.map((pkg) => pkg.name));
29
- for (const pkg of allPackages) {
29
+ for (const [pkgName, pkg] of this.packages) {
30
30
  if (pkg.descriptor) {
31
- for (const service of Object.keys(pkg.definitions['grpc-js'])) {
32
- this.logger.info(`GRPC descriptor loaded for service: ${pkg.name}.${service}`);
33
- }
31
+ this.logger.info(`GRPC descriptor loaded for package: ${pkgName}`);
34
32
  for (const file of protobuf_1.FileDescriptorSet.fromBinary(pkg.descriptor).file) {
35
33
  this.files.push(file);
36
- if (allPackagesNames.has(`${file.package}`)) {
34
+ // В зависимостях пользовательских контрактов могут быть определены сервисы.
35
+ // Так как пользователь заимствует только типы,
36
+ // то загружать дефинишены сервисов нет необходимости.
37
+ if (this.packages.has(`${file.package}`)) {
37
38
  for (const service of file.service) {
38
39
  this.services.add(`${file.package}.${service.name}`);
39
40
  }
40
41
  }
41
42
  }
42
43
  }
44
+ else {
45
+ this.logger.warn(`GRPC descriptor not found for package: ${pkgName}. ` +
46
+ 'Perhaps it was built with an old version of the protogen. ' +
47
+ 'Reflection is only supported in the protogen@2.1+');
48
+ }
43
49
  }
44
50
  }
45
51
  /**
@@ -126,14 +132,11 @@ let ReflectionService = ReflectionService_1 = class ReflectionService {
126
132
  }
127
133
  return undefined;
128
134
  }
129
- services = new Set();
130
- files = [];
131
- logger = logging_1.LoggerFactory.create(ReflectionService_1);
132
135
  };
133
136
  exports.ReflectionService = ReflectionService;
134
137
  exports.ReflectionService = ReflectionService = ReflectionService_1 = __decorate([
135
138
  (0, common_1.Injectable)(),
136
139
  __param(0, (0, common_1.Inject)('GRPC_PACKAGES')),
137
- __metadata("design:paramtypes", [Array])
140
+ __metadata("design:paramtypes", [Map])
138
141
  ], ReflectionService);
139
142
  //# sourceMappingURL=reflection.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reflection.service.js","sourceRoot":"","sources":["../src/reflection.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reflection.service.js","sourceRoot":"","sources":["../src/reflection.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsdk/grpc.server",
3
- "version": "4.2.0",
3
+ "version": "4.2.1-next.0",
4
4
  "description": "Grpc transport for platform, clients and common grpc stuff",
5
5
  "license": "Apache License 2.0",
6
6
  "publishConfig": {
@@ -15,12 +15,12 @@
15
15
  "@nestjs/common": "^10.0.0",
16
16
  "@nestjs/core": "^10.0.0",
17
17
  "@nestjs/microservices": "^10.0.0",
18
- "@rsdk/builtin-contract": "^4.2.0",
19
- "@rsdk/common": "^4.2.0",
20
- "@rsdk/core": "^4.2.0",
21
- "@rsdk/grpc.common": "^4.2.0",
22
- "@rsdk/grpc.loader": "^4.2.0",
23
- "@rsdk/logging": "^4.2.0",
18
+ "@rsdk/builtin-contract": "^4.2.1-next.0",
19
+ "@rsdk/common": "^4.2.1-next.0",
20
+ "@rsdk/core": "^4.2.1-next.0",
21
+ "@rsdk/grpc.common": "^4.2.1-next.0",
22
+ "@rsdk/grpc.loader": "^4.2.1-next.0",
23
+ "@rsdk/logging": "^4.2.1-next.0",
24
24
  "nice-grpc": "^2.1.4",
25
25
  "reflect-metadata": "^0.1.13",
26
26
  "rxjs": "^7.8.1"
@@ -28,5 +28,5 @@
28
28
  "dependencies": {
29
29
  "@bufbuild/protobuf": "^1.4.2"
30
30
  },
31
- "gitHead": "55f7ea892f76606a745ef1154371f1fa0aa5f2cb"
31
+ "gitHead": "4129f9c9fde844427b32ab80c5abdb35b79b61b5"
32
32
  }
@@ -2,6 +2,7 @@ import type { DynamicModule } from '@nestjs/common';
2
2
  import { Module } from '@nestjs/common';
3
3
  import type { Package } from '@rsdk/grpc.loader';
4
4
 
5
+ import { systemPackages } from './constants';
5
6
  import {
6
7
  ReflectionV1alphaController,
7
8
  ReflectionV1Controller,
@@ -18,7 +19,22 @@ export class ReflectionModule {
18
19
  ReflectionService,
19
20
  {
20
21
  provide: 'GRPC_PACKAGES',
21
- useValue: packages,
22
+ /**
23
+ * Если передавать простым объектом, то NestJS под капотом динамические модули
24
+ * прогоняет через stringify https://github.com/nestjs/nest/blob/master/packages/core/injector/module-token-factory.ts#L62
25
+ * из-за чего на вложенных объектах вызывается метод toJSON().
26
+ *
27
+ * GRPC контракты сгенерированные с использованием ts-proto имеют метод toJSON.
28
+ * Если контракт использует ENUM, то внутри метода toJSON вызывается функция,
29
+ * которая пытается сопоставить входящие данные чтобы вернуть строковый ENUM.
30
+ * В этой функции, если передали несуществующий ключ ENUM'a, то выкидывается исключение.
31
+ *
32
+ * Поэтому, чтобы избежать этого, будем передаем объект,
33
+ * который "скрыт" для stringify, а значит методы toJSON вызываться не будут.
34
+ */
35
+ useValue: new Map<string, Package>(
36
+ [...packages, ...systemPackages].map((pkg) => [pkg.name, pkg]),
37
+ ),
22
38
  },
23
39
  ],
24
40
  };
@@ -2,6 +2,7 @@ import { FileDescriptorProto } from '@bufbuild/protobuf';
2
2
  import type { PlatformTestingModule } from '@rsdk/testing';
3
3
  import { PlatformTest } from '@rsdk/testing';
4
4
 
5
+ import { systemPackages } from './constants';
5
6
  import { ReflectionService } from './reflection.service';
6
7
 
7
8
  describe('ReflectionService', () => {
@@ -17,7 +18,7 @@ describe('ReflectionService', () => {
17
18
  ReflectionService,
18
19
  {
19
20
  provide: 'GRPC_PACKAGES',
20
- useValue: [],
21
+ useValue: new Map(systemPackages.map((pkg) => [pkg.name, pkg])),
21
22
  },
22
23
  ],
23
24
  })
@@ -13,34 +13,40 @@ import { Inject, Injectable } from '@nestjs/common';
13
13
  import type { Package } from '@rsdk/grpc.loader';
14
14
  import { LoggerFactory } from '@rsdk/logging';
15
15
 
16
- import { systemPackages } from './constants';
17
-
18
16
  @Injectable()
19
17
  export class ReflectionService implements OnModuleInit {
20
- constructor(@Inject('GRPC_PACKAGES') private readonly packages: Package[]) {}
21
-
22
- onModuleInit(): void {
23
- const allPackages = [...this.packages, ...systemPackages];
18
+ private readonly services: Set<string> = new Set();
19
+ private readonly files: FileDescriptorProto[] = [];
20
+ private readonly logger = LoggerFactory.create(ReflectionService);
24
21
 
25
- const allPackagesNames = new Set(allPackages.map((pkg) => pkg.name));
22
+ constructor(
23
+ @Inject('GRPC_PACKAGES')
24
+ private readonly packages: Map<string, Package>,
25
+ ) {}
26
26
 
27
- for (const pkg of allPackages) {
27
+ onModuleInit(): void {
28
+ for (const [pkgName, pkg] of this.packages) {
28
29
  if (pkg.descriptor) {
29
- for (const service of Object.keys(pkg.definitions['grpc-js'])) {
30
- this.logger.info(
31
- `GRPC descriptor loaded for service: ${pkg.name}.${service}`,
32
- );
33
- }
30
+ this.logger.info(`GRPC descriptor loaded for package: ${pkgName}`);
34
31
 
35
32
  for (const file of FileDescriptorSet.fromBinary(pkg.descriptor).file) {
36
33
  this.files.push(file);
37
34
 
38
- if (allPackagesNames.has(`${file.package}`)) {
35
+ // В зависимостях пользовательских контрактов могут быть определены сервисы.
36
+ // Так как пользователь заимствует только типы,
37
+ // то загружать дефинишены сервисов нет необходимости.
38
+ if (this.packages.has(`${file.package}`)) {
39
39
  for (const service of file.service) {
40
40
  this.services.add(`${file.package}.${service.name}`);
41
41
  }
42
42
  }
43
43
  }
44
+ } else {
45
+ this.logger.warn(
46
+ `GRPC descriptor not found for package: ${pkgName}. ` +
47
+ 'Perhaps it was built with an old version of the protogen. ' +
48
+ 'Reflection is only supported in the protogen@2.1+',
49
+ );
44
50
  }
45
51
  }
46
52
  }
@@ -195,8 +201,4 @@ export class ReflectionService implements OnModuleInit {
195
201
 
196
202
  return undefined;
197
203
  }
198
-
199
- private readonly services: Set<string> = new Set();
200
- private readonly files: FileDescriptorProto[] = [];
201
- private readonly logger = LoggerFactory.create(ReflectionService);
202
204
  }