@rsdk/metadata 3.6.0 → 4.0.0-next.10

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.
@@ -1 +1,4 @@
1
+ import type { NestModuleDefinition } from '@rsdk/common.nestjs';
1
2
  export declare const RSDK_METADATA_KEY: unique symbol;
3
+ export declare const PLATFORM_RAW_GLOBAL_METADATA_SCOPE = "PLATFORM_RAW_GLOBAL_RSDK_METADATA_SCOPE";
4
+ export type PlatformRawGlobalMetadata = NestModuleDefinition;
package/dist/constants.js CHANGED
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RSDK_METADATA_KEY = void 0;
3
+ exports.PLATFORM_RAW_GLOBAL_METADATA_SCOPE = exports.RSDK_METADATA_KEY = void 0;
4
4
  exports.RSDK_METADATA_KEY = Symbol('RSDK_METADATA_KEY');
5
+ exports.PLATFORM_RAW_GLOBAL_METADATA_SCOPE = 'PLATFORM_RAW_GLOBAL_RSDK_METADATA_SCOPE';
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import 'reflect-metadata';
2
+ export { PlatformRawGlobalMetadata, PLATFORM_RAW_GLOBAL_METADATA_SCOPE, RSDK_METADATA_KEY, } from './constants';
2
3
  export { NestAssert } from './utils/nest-assert';
3
4
  export { ResourceExtractor } from './resource-extractor';
4
5
  export { RsdkMetadataProvider } from './rsdk-metadata-provider';
package/dist/index.js CHANGED
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RsdkMetadata = exports.RsdkMetadataProvider = exports.NestAssert = void 0;
3
+ exports.RsdkMetadata = exports.RsdkMetadataProvider = exports.NestAssert = exports.RSDK_METADATA_KEY = exports.PLATFORM_RAW_GLOBAL_METADATA_SCOPE = void 0;
4
4
  require("reflect-metadata");
5
+ var constants_1 = require("./constants");
6
+ Object.defineProperty(exports, "PLATFORM_RAW_GLOBAL_METADATA_SCOPE", { enumerable: true, get: function () { return constants_1.PLATFORM_RAW_GLOBAL_METADATA_SCOPE; } });
7
+ Object.defineProperty(exports, "RSDK_METADATA_KEY", { enumerable: true, get: function () { return constants_1.RSDK_METADATA_KEY; } });
5
8
  var nest_assert_1 = require("./utils/nest-assert");
6
9
  Object.defineProperty(exports, "NestAssert", { enumerable: true, get: function () { return nest_assert_1.NestAssert; } });
7
10
  var rsdk_metadata_provider_1 = require("./rsdk-metadata-provider");
@@ -3,3 +3,6 @@ import type { Resource } from './metadata';
3
3
  export interface ResourceExtractor {
4
4
  extract(value: DynamicModule | ClassProvider<any> | ValueProvider<any> | FactoryProvider<any> | ExistingProvider<any> | InjectionToken): Resource<unknown>[];
5
5
  }
6
+ export interface ModuleExtractor {
7
+ extract(value: DynamicModule | ClassProvider<any> | ValueProvider<any> | FactoryProvider<any> | ExistingProvider<any> | InjectionToken): DynamicModule[];
8
+ }
@@ -2,16 +2,22 @@ import type { ClassProvider, DynamicModule, ExistingProvider, FactoryProvider, I
2
2
  import type { NestModuleDefinition } from '@rsdk/common.nestjs';
3
3
  import type { Promisable } from 'type-fest';
4
4
  import type { Resource } from './metadata';
5
- import type { ResourceExtractor } from './resource-extractor';
5
+ import { ResourceAggregator } from './resource-aggregator';
6
+ import type { ModuleExtractor, ResourceExtractor } from './resource-extractor';
7
+ type Extractors = {
8
+ resource?: ResourceExtractor[];
9
+ moduleExtractor?: ModuleExtractor[];
10
+ };
6
11
  /**
7
12
  * Провайдер агрегирующий в себе ресурсы из метаданных
8
13
  * По задумке должен выступать лишь в роли фасада/агрегатора который знает о структуре ресурсов и её значении
9
14
  * Также он знает о том где могут быть записаны rsdk метаданные
10
15
  */
11
16
  export declare class RsdkMetadataProvider {
12
- private readonly resources;
13
- protected constructor(resources: Resource<any>[]);
14
- static create(modules: Promisable<NestModuleDefinition>[], extractors?: ResourceExtractor[]): Promise<RsdkMetadataProvider>;
17
+ private resourceAggregator;
18
+ private extractors;
19
+ protected constructor(resourceAggregator: ResourceAggregator, extractors: Extractors | undefined);
20
+ static create(modules: Promisable<NestModuleDefinition>[], extractors?: Extractors): Promise<RsdkMetadataProvider>;
15
21
  static getMetadataSource(nestDefinition: DynamicModule | Type | ClassProvider | ValueProvider | FactoryProvider | ExistingProvider | Function): IterableIterator<InjectionToken | DynamicModule | Type | ClassProvider | ValueProvider | FactoryProvider | ExistingProvider>;
16
22
  /**
17
23
  * Есть ли уже этот ресурс в массиве
@@ -24,3 +30,4 @@ export declare class RsdkMetadataProvider {
24
30
  get<T>(scope?: string): Resource<T>[];
25
31
  add(...moduleDef: Promisable<NestModuleDefinition>[]): Promise<void>;
26
32
  }
33
+ export {};
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RsdkMetadataProvider = void 0;
4
4
  const nest_tools_1 = require("@rsdk/nest-tools");
5
5
  const nest_assert_1 = require("./utils/nest-assert");
6
+ const constants_1 = require("./constants");
6
7
  const exception_1 = require("./exception");
7
8
  const metadata_1 = require("./metadata");
8
9
  const resource_aggregator_1 = require("./resource-aggregator");
@@ -12,14 +13,16 @@ const resource_aggregator_1 = require("./resource-aggregator");
12
13
  * Также он знает о том где могут быть записаны rsdk метаданные
13
14
  */
14
15
  class RsdkMetadataProvider {
15
- resources;
16
- constructor(resources) {
17
- this.resources = resources;
16
+ resourceAggregator;
17
+ extractors;
18
+ constructor(resourceAggregator, extractors) {
19
+ this.resourceAggregator = resourceAggregator;
20
+ this.extractors = extractors;
18
21
  }
19
22
  static async create(modules, extractors) {
20
- const resources = [];
21
- await this.extractResources(modules, resources, extractors);
22
- return new RsdkMetadataProvider(resources);
23
+ const resourceAggregator = new resource_aggregator_1.ResourceAggregator();
24
+ await this.extractResources(modules, resourceAggregator, extractors);
25
+ return new RsdkMetadataProvider(resourceAggregator, extractors);
23
26
  }
24
27
  static *getMetadataSource(nestDefinition) {
25
28
  // TODO: throw exception
@@ -47,8 +50,7 @@ class RsdkMetadataProvider {
47
50
  static isDuplicate(resources, definitionResource) {
48
51
  return resources.some((resource) => metadata_1.RsdkMetadata.isEqual(resource, definitionResource));
49
52
  }
50
- static async extractResources(rootModule, resources, extractors) {
51
- const resourceAggregator = new resource_aggregator_1.ResourceAggregator();
53
+ static async extractResources(rootModule, resourceAggregator, extractors) {
52
54
  for await (const rootModuleElement of rootModule) {
53
55
  const nestDefinitionIterator = new nest_tools_1.NestDefinitionIterator(rootModuleElement);
54
56
  for await (const nestDefinition of nestDefinitionIterator.iterate()) {
@@ -60,7 +62,7 @@ class RsdkMetadataProvider {
60
62
  continue;
61
63
  }
62
64
  const definitionResources = metadata_1.RsdkMetadata.get(metadataSource);
63
- const extractedResources = extractors?.reduce((acc, extractor) => {
65
+ const extractedResources = extractors?.resource?.reduce((acc, extractor) => {
64
66
  try {
65
67
  const resources = extractor.extract(metadataSource);
66
68
  acc.push(...resources);
@@ -77,20 +79,23 @@ class RsdkMetadataProvider {
77
79
  if (!foundedResources?.length) {
78
80
  continue;
79
81
  }
82
+ const extractedModules = foundedResources
83
+ .filter(({ scope }) => scope === constants_1.PLATFORM_RAW_GLOBAL_METADATA_SCOPE)
84
+ .map(({ value }) => value);
85
+ await RsdkMetadataProvider.extractResources(extractedModules, resourceAggregator, extractors);
80
86
  resourceAggregator.add(...foundedResources);
81
87
  }
82
88
  }
83
89
  }
84
- resources.push(...resourceAggregator.resources);
85
90
  }
86
91
  get(scope) {
87
92
  if (scope === undefined) {
88
- return this.resources;
93
+ return this.resourceAggregator.resources;
89
94
  }
90
- return this.resources.filter((resource) => resource.scope === scope);
95
+ return this.resourceAggregator.resources.filter((resource) => resource.scope === scope);
91
96
  }
92
97
  async add(...moduleDef) {
93
- await RsdkMetadataProvider.extractResources(moduleDef, this.resources);
98
+ await RsdkMetadataProvider.extractResources(moduleDef, this.resourceAggregator, this.extractors);
94
99
  }
95
100
  }
96
101
  exports.RsdkMetadataProvider = RsdkMetadataProvider;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsdk/metadata",
3
- "version": "3.6.0",
3
+ "version": "4.0.0-next.10",
4
4
  "license": "Apache License 2.0",
5
5
  "description": "Rsdk stack metadata management",
6
6
  "main": "dist/index.js",
@@ -11,12 +11,12 @@
11
11
  "dist"
12
12
  ],
13
13
  "peerDependencies": {
14
- "@nestjs/common": "^10.1.3",
15
- "@nestjs/core": "^10.1.3",
16
- "@rsdk/common": "^3.5.0",
17
- "@rsdk/logging": "^3.6.0",
18
- "@rsdk/nest-tools": "^3.6.0",
14
+ "@nestjs/common": "^10.0.0",
15
+ "@nestjs/core": "^10.0.0",
16
+ "@rsdk/common": "^4.0.0-next.10",
17
+ "@rsdk/logging": "^4.0.0-next.10",
18
+ "@rsdk/nest-tools": "^4.0.0-next.10",
19
19
  "reflect-metadata": "^0.1.13"
20
20
  },
21
- "gitHead": "cc75fb4595bd49e877974f6eeeef66f30743011c"
21
+ "gitHead": "c41d4da9aa0318d5e6417514c763618ce924f9b7"
22
22
  }