@zlink-systems/nestjs 0.10.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/LICENSE +105 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/auto-discovery-marker.d.ts +3 -0
- package/dist/auto-discovery-marker.js +12 -0
- package/dist/contracts.d.ts +229 -0
- package/dist/contracts.js +4 -0
- package/dist/decorators.d.ts +16 -0
- package/dist/decorators.js +174 -0
- package/dist/dispatch-scope.d.ts +5 -0
- package/dist/dispatch-scope.js +19 -0
- package/dist/drain-health-indicator.d.ts +9 -0
- package/dist/drain-health-indicator.js +32 -0
- package/dist/framework-integration-contracts.d.ts +368 -0
- package/dist/framework-integration-contracts.js +2 -0
- package/dist/framework-loader.d.ts +50 -0
- package/dist/framework-loader.js +16 -0
- package/dist/handler-adapters.d.ts +13 -0
- package/dist/handler-adapters.js +155 -0
- package/dist/handler-metadata.d.ts +55 -0
- package/dist/handler-metadata.js +84 -0
- package/dist/http-client-module.d.ts +28 -0
- package/dist/http-client-module.js +96 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +27 -0
- package/dist/internal-tokens.d.ts +2 -0
- package/dist/internal-tokens.js +5 -0
- package/dist/module.d.ts +11 -0
- package/dist/module.js +203 -0
- package/dist/options-builder.d.ts +2 -0
- package/dist/options-builder.js +973 -0
- package/dist/provider-discovery.d.ts +36 -0
- package/dist/provider-discovery.js +186 -0
- package/dist/providers.d.ts +16 -0
- package/dist/providers.js +426 -0
- package/dist/registration-composer.d.ts +7 -0
- package/dist/registration-composer.js +310 -0
- package/dist/spot-node-handler-registry.d.ts +24 -0
- package/dist/spot-node-handler-registry.js +105 -0
- package/dist/tokens.d.ts +19 -0
- package/dist/tokens.js +22 -0
- package/package.json +26 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.appendNestHandlerMetadata = appendNestHandlerMetadata;
|
|
4
|
+
exports.readNestHandlerMetadata = readNestHandlerMetadata;
|
|
5
|
+
exports.appendNestSpotActorHandlerMetadata = appendNestSpotActorHandlerMetadata;
|
|
6
|
+
exports.readNestSpotActorHandlerMetadata = readNestSpotActorHandlerMetadata;
|
|
7
|
+
exports.appendNestSpotHandlerMetadata = appendNestSpotHandlerMetadata;
|
|
8
|
+
exports.readNestSpotHandlerMetadata = readNestSpotHandlerMetadata;
|
|
9
|
+
exports.markNestSpotTimerHandler = markNestSpotTimerHandler;
|
|
10
|
+
exports.appendNestSpotTimerHandlerMetadata = appendNestSpotTimerHandlerMetadata;
|
|
11
|
+
exports.readNestSpotTimerHandlerMetadata = readNestSpotTimerHandlerMetadata;
|
|
12
|
+
exports.hasNestSpotTimerHandlerMetadata = hasNestSpotTimerHandlerMetadata;
|
|
13
|
+
exports.nestHandlerMetadataEntries = nestHandlerMetadataEntries;
|
|
14
|
+
exports.nestSpotActorHandlerMetadataEntries = nestSpotActorHandlerMetadataEntries;
|
|
15
|
+
exports.nestSpotHandlerMetadataEntries = nestSpotHandlerMetadataEntries;
|
|
16
|
+
exports.nestSpotTimerHandlerMetadataEntries = nestSpotTimerHandlerMetadataEntries;
|
|
17
|
+
const tokens_1 = require("./tokens");
|
|
18
|
+
const handlerMetadata = new Map();
|
|
19
|
+
const spotActorHandlerMetadata = new Map();
|
|
20
|
+
const spotHandlerMetadata = new Map();
|
|
21
|
+
const spotTimerHandlerMetadata = new Map();
|
|
22
|
+
const spotTimerHandlerTokens = new Set();
|
|
23
|
+
function appendNestHandlerMetadata(handlerToken, metadata) {
|
|
24
|
+
const current = readNestHandlerMetadata(handlerToken);
|
|
25
|
+
handlerMetadata.set(handlerToken, [...current, metadata]);
|
|
26
|
+
if (typeof handlerToken === 'function') {
|
|
27
|
+
Object.defineProperty(handlerToken, tokens_1.ZLINK_NEST_HANDLER_GROUP, {
|
|
28
|
+
configurable: true,
|
|
29
|
+
enumerable: false,
|
|
30
|
+
value: [...current, metadata],
|
|
31
|
+
writable: false
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function readNestHandlerMetadata(handlerToken) {
|
|
36
|
+
if (handlerToken === undefined) {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
let reflected;
|
|
40
|
+
if (typeof handlerToken === 'function') {
|
|
41
|
+
const metadataBySymbol = handlerToken;
|
|
42
|
+
reflected = metadataBySymbol[tokens_1.ZLINK_NEST_HANDLER_GROUP];
|
|
43
|
+
}
|
|
44
|
+
return handlerMetadata.get(handlerToken) ?? reflected ?? [];
|
|
45
|
+
}
|
|
46
|
+
function appendNestSpotActorHandlerMetadata(handlerToken, metadata) {
|
|
47
|
+
const current = readNestSpotActorHandlerMetadata(handlerToken);
|
|
48
|
+
spotActorHandlerMetadata.set(handlerToken, [...current, metadata]);
|
|
49
|
+
}
|
|
50
|
+
function readNestSpotActorHandlerMetadata(handlerToken) {
|
|
51
|
+
return handlerToken === undefined ? [] : spotActorHandlerMetadata.get(handlerToken) ?? [];
|
|
52
|
+
}
|
|
53
|
+
function appendNestSpotHandlerMetadata(handlerToken, metadata) {
|
|
54
|
+
const current = readNestSpotHandlerMetadata(handlerToken);
|
|
55
|
+
spotHandlerMetadata.set(handlerToken, [...current, metadata]);
|
|
56
|
+
}
|
|
57
|
+
function readNestSpotHandlerMetadata(handlerToken) {
|
|
58
|
+
return handlerToken === undefined ? [] : spotHandlerMetadata.get(handlerToken) ?? [];
|
|
59
|
+
}
|
|
60
|
+
function markNestSpotTimerHandler(handlerToken) {
|
|
61
|
+
spotTimerHandlerTokens.add(handlerToken);
|
|
62
|
+
}
|
|
63
|
+
function appendNestSpotTimerHandlerMetadata(handlerToken, metadata) {
|
|
64
|
+
const current = readNestSpotTimerHandlerMetadata(handlerToken);
|
|
65
|
+
spotTimerHandlerMetadata.set(handlerToken, [...current, metadata]);
|
|
66
|
+
}
|
|
67
|
+
function readNestSpotTimerHandlerMetadata(handlerToken) {
|
|
68
|
+
return handlerToken === undefined ? [] : spotTimerHandlerMetadata.get(handlerToken) ?? [];
|
|
69
|
+
}
|
|
70
|
+
function hasNestSpotTimerHandlerMetadata(handlerToken) {
|
|
71
|
+
return handlerToken !== undefined && spotTimerHandlerTokens.has(handlerToken);
|
|
72
|
+
}
|
|
73
|
+
function nestHandlerMetadataEntries() {
|
|
74
|
+
return [...handlerMetadata.entries()];
|
|
75
|
+
}
|
|
76
|
+
function nestSpotActorHandlerMetadataEntries() {
|
|
77
|
+
return [...spotActorHandlerMetadata.entries()];
|
|
78
|
+
}
|
|
79
|
+
function nestSpotHandlerMetadataEntries() {
|
|
80
|
+
return [...spotHandlerMetadata.entries()];
|
|
81
|
+
}
|
|
82
|
+
function nestSpotTimerHandlerMetadataEntries() {
|
|
83
|
+
return [...spotTimerHandlerMetadata.entries()];
|
|
84
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { DynamicModule, InjectionToken, ModuleMetadata } from '@nestjs/common';
|
|
2
|
+
import { ZLinkHttpClient, type HttpResponse, type ZLinkHttpClientBuilder, type ZLinkHttpRequestBuilder } from '@zlink-systems/http-client';
|
|
3
|
+
export interface ZLinkNamedHttpClientOptions {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly baseUrl: string;
|
|
6
|
+
readonly configure?: (builder: ZLinkHttpClientBuilder) => void;
|
|
7
|
+
}
|
|
8
|
+
export interface ZLinkHttpClientModuleOptions {
|
|
9
|
+
readonly imports: ModuleMetadata['imports'];
|
|
10
|
+
readonly clients: readonly ZLinkNamedHttpClientOptions[];
|
|
11
|
+
}
|
|
12
|
+
export interface ZLinkServerHttpRequestBuilder extends ZLinkHttpRequestBuilder {
|
|
13
|
+
submit(): Promise<void>;
|
|
14
|
+
yield<T>(): Promise<HttpResponse<T>>;
|
|
15
|
+
}
|
|
16
|
+
export interface ZLinkServerHttpClient extends Omit<ZLinkHttpClient, 'get' | 'post' | 'put' | 'delete' | 'patch' | 'head' | 'options'> {
|
|
17
|
+
get(path: string): ZLinkServerHttpRequestBuilder;
|
|
18
|
+
post(path: string): ZLinkServerHttpRequestBuilder;
|
|
19
|
+
put(path: string): ZLinkServerHttpRequestBuilder;
|
|
20
|
+
delete(path: string): ZLinkServerHttpRequestBuilder;
|
|
21
|
+
patch(path: string): ZLinkServerHttpRequestBuilder;
|
|
22
|
+
head(path: string): ZLinkServerHttpRequestBuilder;
|
|
23
|
+
options(path: string): ZLinkServerHttpRequestBuilder;
|
|
24
|
+
}
|
|
25
|
+
export declare function zlinkHttpClientToken(name: string): InjectionToken;
|
|
26
|
+
export declare class ZLinkHttpClientModule {
|
|
27
|
+
static forRoot(options: ZLinkHttpClientModuleOptions): DynamicModule;
|
|
28
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
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 ZLinkHttpClientModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.ZLinkHttpClientModule = void 0;
|
|
11
|
+
exports.zlinkHttpClientToken = zlinkHttpClientToken;
|
|
12
|
+
const common_1 = require("@nestjs/common");
|
|
13
|
+
const core_1 = require("@nestjs/core");
|
|
14
|
+
const http_client_1 = require("@zlink-systems/http-client");
|
|
15
|
+
const framework_loader_1 = require("./framework-loader");
|
|
16
|
+
const tokens_1 = require("./tokens");
|
|
17
|
+
const ZLINK_HTTP_CLIENT_REGISTRY = Symbol.for('@zlink-systems/nestjs:http-client-registry');
|
|
18
|
+
function zlinkHttpClientToken(name) {
|
|
19
|
+
const normalized = name.trim();
|
|
20
|
+
if (normalized.length === 0) {
|
|
21
|
+
throw new framework_loader_1.framework.ZLinkConfigurationException('HTTP client registration name is required.');
|
|
22
|
+
}
|
|
23
|
+
return Symbol.for(`@zlink-systems/nestjs:http-client:${normalized}`);
|
|
24
|
+
}
|
|
25
|
+
class ZLinkHttpClientRegistry {
|
|
26
|
+
clients = new Map();
|
|
27
|
+
constructor(registrations, moduleRef) {
|
|
28
|
+
const runtime = new Proxy({}, {
|
|
29
|
+
get: (_target, property) => {
|
|
30
|
+
const current = moduleRef.get(tokens_1.ZLINK_FRAMEWORK_RUNTIME, { strict: false });
|
|
31
|
+
return Reflect.get(current, property);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
const scheduler = framework_loader_1.framework.createIntegrationHttpExecutionScheduler(runtime);
|
|
35
|
+
for (const registration of registrations) {
|
|
36
|
+
const name = registration.name.trim();
|
|
37
|
+
zlinkHttpClientToken(name);
|
|
38
|
+
if (this.clients.has(name)) {
|
|
39
|
+
throw new framework_loader_1.framework.ZLinkConfigurationException(`HTTP client '${name}' is already registered.`);
|
|
40
|
+
}
|
|
41
|
+
const builder = http_client_1.ZLinkHttpClient.create(registration.baseUrl).executionScheduler(scheduler);
|
|
42
|
+
registration.configure?.(builder);
|
|
43
|
+
this.clients.set(name, builder.build());
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
get(name) {
|
|
47
|
+
const client = this.clients.get(name);
|
|
48
|
+
if (client === undefined) {
|
|
49
|
+
throw new framework_loader_1.framework.ZLinkConfigurationException(`HTTP client '${name}' is not registered.`);
|
|
50
|
+
}
|
|
51
|
+
return client;
|
|
52
|
+
}
|
|
53
|
+
async onModuleDestroy() {
|
|
54
|
+
await Promise.all([...this.clients.values()].map((client) => client.close()));
|
|
55
|
+
this.clients.clear();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
let ZLinkHttpClientModule = ZLinkHttpClientModule_1 = class ZLinkHttpClientModule {
|
|
59
|
+
static forRoot(options) {
|
|
60
|
+
validateRegistrations(options.clients);
|
|
61
|
+
const registry = {
|
|
62
|
+
provide: ZLINK_HTTP_CLIENT_REGISTRY,
|
|
63
|
+
inject: [core_1.ModuleRef],
|
|
64
|
+
useFactory: (moduleRef) => new ZLinkHttpClientRegistry(options.clients, moduleRef)
|
|
65
|
+
};
|
|
66
|
+
const clients = options.clients.map((registration) => ({
|
|
67
|
+
provide: zlinkHttpClientToken(registration.name),
|
|
68
|
+
inject: [ZLINK_HTTP_CLIENT_REGISTRY],
|
|
69
|
+
useFactory: (owner) => owner.get(registration.name.trim())
|
|
70
|
+
}));
|
|
71
|
+
return {
|
|
72
|
+
module: ZLinkHttpClientModule_1,
|
|
73
|
+
imports: options.imports,
|
|
74
|
+
providers: [registry, ...clients],
|
|
75
|
+
exports: clients.map((provider) => providerToken(provider))
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
exports.ZLinkHttpClientModule = ZLinkHttpClientModule;
|
|
80
|
+
exports.ZLinkHttpClientModule = ZLinkHttpClientModule = ZLinkHttpClientModule_1 = __decorate([
|
|
81
|
+
(0, common_1.Module)({})
|
|
82
|
+
], ZLinkHttpClientModule);
|
|
83
|
+
function validateRegistrations(registrations) {
|
|
84
|
+
const names = new Set();
|
|
85
|
+
for (const registration of registrations) {
|
|
86
|
+
const name = registration.name.trim();
|
|
87
|
+
zlinkHttpClientToken(name);
|
|
88
|
+
if (names.has(name)) {
|
|
89
|
+
throw new framework_loader_1.framework.ZLinkConfigurationException(`HTTP client '${name}' is already registered.`);
|
|
90
|
+
}
|
|
91
|
+
names.add(name);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function providerToken(provider) {
|
|
95
|
+
return typeof provider === 'function' ? provider : provider.provide;
|
|
96
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import type { ZLinkNestFrameworkOptionsBuilder } from './contracts';
|
|
3
|
+
export type { ZLinkModuleFactoryOptions, ZLinkModuleOptions, ZLinkNestCodecRegistryBuilder, ZLinkNestClientServerChannelClientBuilder, ZLinkNestClientServerChannelRoleBuilder, ZLinkNestClientServerChannelServerBuilder, ZLinkNestEntrySpotActorRequestHandlerOptions, ZLinkNestEntrySpotActorSendHandlerOptions, ZLinkNestEntrySpotPacketHandlerOptions, ZLinkNestEntrySpotSubscriptionHandlerOptions, ZLinkNestFanoutChannelBuilder, ZLinkNestFrameworkAdditionalOptions, ZLinkNestFrameworkOptionsBuilder, ZLinkNestHandlerOptions, ZLinkNestModuleMetadata, ZLinkNestModuleRoleRoot, ZLinkNestProviderDiscoveryOptions, ZLinkNestProviderDiscoveryRoot, ZLinkNestMeshChannelBuilder, ZLinkNestMeshObjectClientBuilder, ZLinkNestMeshObjectRoleBuilder, ZLinkNestMeshObjectServerBuilder, ZLinkNestMeshNodeBuilder, ZLinkNestSpotActorRequestHandlerOptions, ZLinkNestSpotActorSendHandlerOptions, ZLinkNestSpotPacketHandlerOptions, ZLinkNestSpotSubscriptionHandlerOptions, ZLinkNestSpotTimerHandlerOptions, ZLinkNestStreamNodeBuilder, ZLinkNestTypeResolver } from './contracts';
|
|
4
|
+
export * from './decorators';
|
|
5
|
+
export * from './module';
|
|
6
|
+
export * from './tokens';
|
|
7
|
+
export * from './drain-health-indicator';
|
|
8
|
+
export * from './http-client-module';
|
|
9
|
+
export type { ZLinkNestHandlerKind } from './handler-metadata';
|
|
10
|
+
export declare function zlinkFramework(): ZLinkNestFrameworkOptionsBuilder;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.zlinkFramework = zlinkFramework;
|
|
18
|
+
require("reflect-metadata");
|
|
19
|
+
const options_builder_1 = require("./options-builder");
|
|
20
|
+
__exportStar(require("./decorators"), exports);
|
|
21
|
+
__exportStar(require("./module"), exports);
|
|
22
|
+
__exportStar(require("./tokens"), exports);
|
|
23
|
+
__exportStar(require("./drain-health-indicator"), exports);
|
|
24
|
+
__exportStar(require("./http-client-module"), exports);
|
|
25
|
+
function zlinkFramework() {
|
|
26
|
+
return (0, options_builder_1.createZLinkNestFrameworkOptionsBuilder)();
|
|
27
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ZLINK_ACTOR_SPOT_HANDLE_RESOLVER = exports.ZLINK_SPOT_HANDLE_RESOLVER = void 0;
|
|
4
|
+
exports.ZLINK_SPOT_HANDLE_RESOLVER = Symbol.for('@zlink-systems/framework:spot-ref-resolver');
|
|
5
|
+
exports.ZLINK_ACTOR_SPOT_HANDLE_RESOLVER = Symbol.for('@zlink-systems/framework:actor-spot-ref-resolver');
|
package/dist/module.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DynamicModule, ModuleMetadata, Provider } from '@nestjs/common';
|
|
2
|
+
import type { ZLinkFrameworkRegistration } from './framework-integration-contracts';
|
|
3
|
+
import type { ZLinkModuleFactoryOptions, ZLinkModuleOptions, ZLinkNestModuleMetadata, ZLinkNestModuleRoleRoot, ZLinkNestProviderDiscoveryOptions } from './contracts';
|
|
4
|
+
export declare function zlinkDiscoverProviders(rootDir: string, options?: ZLinkNestProviderDiscoveryOptions): Provider[];
|
|
5
|
+
export declare function zlinkModule(metadata: ZLinkNestModuleMetadata): ClassDecorator;
|
|
6
|
+
export declare function zlinkModule(roleRoot: ZLinkNestModuleRoleRoot, metadata: ModuleMetadata): ClassDecorator;
|
|
7
|
+
export declare class ZLinkModule {
|
|
8
|
+
static forRoot(options?: ZLinkModuleOptions): DynamicModule;
|
|
9
|
+
static forRootFactory<TArgs extends unknown[]>(options: ZLinkModuleFactoryOptions<TArgs>): DynamicModule;
|
|
10
|
+
}
|
|
11
|
+
export declare function createZLinkDynamicModule(registration: ZLinkFrameworkRegistration): DynamicModule;
|
package/dist/module.js
ADDED
|
@@ -0,0 +1,203 @@
|
|
|
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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
var ZLinkModule_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.ZLinkModule = void 0;
|
|
14
|
+
exports.zlinkDiscoverProviders = zlinkDiscoverProviders;
|
|
15
|
+
exports.zlinkModule = zlinkModule;
|
|
16
|
+
exports.createZLinkDynamicModule = createZLinkDynamicModule;
|
|
17
|
+
const node_module_1 = require("node:module");
|
|
18
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
19
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
20
|
+
const common_1 = require("@nestjs/common");
|
|
21
|
+
const core_1 = require("@nestjs/core");
|
|
22
|
+
const tokens_1 = require("./tokens");
|
|
23
|
+
const handler_metadata_1 = require("./handler-metadata");
|
|
24
|
+
const framework_loader_1 = require("./framework-loader");
|
|
25
|
+
const options_builder_1 = require("./options-builder");
|
|
26
|
+
const registration_composer_1 = require("./registration-composer");
|
|
27
|
+
const providers_1 = require("./providers");
|
|
28
|
+
const auto_discovery_marker_1 = require("./auto-discovery-marker");
|
|
29
|
+
function zlinkDiscoverProviders(rootDir, options = {}) {
|
|
30
|
+
return [...loadDecoratedProviderModules(rootDir, options)];
|
|
31
|
+
}
|
|
32
|
+
function zlinkModule(metadataOrRoleRoot, metadata) {
|
|
33
|
+
const moduleMetadata = typeof metadataOrRoleRoot === 'string' ? metadata : metadataOrRoleRoot;
|
|
34
|
+
if (moduleMetadata === undefined) {
|
|
35
|
+
throw new framework_loader_1.framework.ZLinkConfigurationException('zlinkModule metadata is required.');
|
|
36
|
+
}
|
|
37
|
+
const { providerDiscovery, providers, ...rest } = moduleMetadata;
|
|
38
|
+
const discoveredProviders = typeof metadataOrRoleRoot === 'string'
|
|
39
|
+
? createDefaultProviderDiscoveryProviders(metadataOrRoleRoot)
|
|
40
|
+
: createProviderDiscoveryProviders(providerDiscovery);
|
|
41
|
+
return (0, common_1.Module)({
|
|
42
|
+
...rest,
|
|
43
|
+
providers: [
|
|
44
|
+
...(providers ?? []),
|
|
45
|
+
...discoveredProviders
|
|
46
|
+
]
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function loadDecoratedProviderModules(rootDir, options) {
|
|
50
|
+
if (!node_fs_1.default.existsSync(rootDir)) {
|
|
51
|
+
throw new framework_loader_1.framework.ZLinkConfigurationException(`ZLink provider discovery root does not exist: ${rootDir}`);
|
|
52
|
+
}
|
|
53
|
+
const providers = new Set();
|
|
54
|
+
const stat = node_fs_1.default.statSync(rootDir);
|
|
55
|
+
if (stat.isFile()) {
|
|
56
|
+
addDecoratedProviderModuleExports(providers, rootDir);
|
|
57
|
+
return providers;
|
|
58
|
+
}
|
|
59
|
+
for (const entry of node_fs_1.default.readdirSync(rootDir, { withFileTypes: true })) {
|
|
60
|
+
const fullPath = node_path_1.default.join(rootDir, entry.name);
|
|
61
|
+
if (entry.isDirectory()) {
|
|
62
|
+
if (options.recursive === true) {
|
|
63
|
+
for (const provider of loadDecoratedProviderModules(fullPath, options)) {
|
|
64
|
+
providers.add(provider);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (entry.isFile()) {
|
|
70
|
+
addDecoratedProviderModuleExports(providers, fullPath);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return providers;
|
|
74
|
+
}
|
|
75
|
+
function addDecoratedProviderModuleExports(providers, filePath) {
|
|
76
|
+
if (!/\.(?:cjs|mjs|js)$/.test(filePath) || /\.d\.js$/.test(filePath)) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const source = node_fs_1.default.readFileSync(filePath, 'utf8');
|
|
80
|
+
if (!/(?:zlink(?:Request|Send|Publish|Spot|EntrySpot)[A-Za-z]*Handler|ZLinkPacket)/.test(source)) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const loaded = (0, node_module_1.createRequire)(__filename)(filePath);
|
|
84
|
+
for (const value of Object.values(loaded)) {
|
|
85
|
+
const frameworkMetadata = typeof value === 'function'
|
|
86
|
+
? (value[Symbol.for('@zlink-systems/framework:decorator')] ?? [])
|
|
87
|
+
: [];
|
|
88
|
+
if (typeof value === 'function'
|
|
89
|
+
&& ((0, handler_metadata_1.readNestHandlerMetadata)(value).length > 0
|
|
90
|
+
|| (0, handler_metadata_1.readNestSpotActorHandlerMetadata)(value).length > 0
|
|
91
|
+
|| (0, handler_metadata_1.readNestSpotHandlerMetadata)(value).length > 0
|
|
92
|
+
|| (0, handler_metadata_1.hasNestSpotTimerHandlerMetadata)(value)
|
|
93
|
+
|| (frameworkMetadata.some((entry) => entry.kind === 'packet')
|
|
94
|
+
&& typeof value.prototype?.handle === 'function'))) {
|
|
95
|
+
providers.add((0, auto_discovery_marker_1.markAutoDiscoveredProvider)(value));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
let ZLinkModule = ZLinkModule_1 = class ZLinkModule {
|
|
100
|
+
static forRoot(options = (0, options_builder_1.createZLinkNestFrameworkOptionsBuilder)().build()) {
|
|
101
|
+
const resolvedOptions = (0, registration_composer_1.assertBuiltModuleOptions)(options);
|
|
102
|
+
if ((0, registration_composer_1.hasNestHandlerDiscovery)(resolvedOptions)) {
|
|
103
|
+
return createDiscoveringZLinkDynamicModule(resolvedOptions);
|
|
104
|
+
}
|
|
105
|
+
return createZLinkDynamicModule(framework_loader_1.framework.createFrameworkRegistration((0, registration_composer_1.createRegistrationOptions)(resolvedOptions)));
|
|
106
|
+
}
|
|
107
|
+
static forRootFactory(options) {
|
|
108
|
+
const registrationProvider = {
|
|
109
|
+
provide: tokens_1.ZLINK_FRAMEWORK_REGISTRATION,
|
|
110
|
+
inject: [...(options.inject ?? []), core_1.DiscoveryService, core_1.ModuleRef],
|
|
111
|
+
useFactory: async (...args) => {
|
|
112
|
+
const discovery = args[args.length - 2];
|
|
113
|
+
const moduleRef = args[args.length - 1];
|
|
114
|
+
const factoryArgs = args.slice(0, -2);
|
|
115
|
+
const resolvedOptions = (0, registration_composer_1.assertBuiltModuleOptions)(await options.useFactory(...factoryArgs));
|
|
116
|
+
return framework_loader_1.framework.createFrameworkRegistration((0, registration_composer_1.createDiscoveredOptions)(resolvedOptions, discovery, moduleRef));
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
return {
|
|
120
|
+
module: ZLinkModule_1,
|
|
121
|
+
imports: [...(options.imports ?? []), core_1.DiscoveryModule],
|
|
122
|
+
providers: [
|
|
123
|
+
registrationProvider,
|
|
124
|
+
{
|
|
125
|
+
provide: tokens_1.ZLINK_FRAMEWORK_RUNTIME,
|
|
126
|
+
inject: [tokens_1.ZLINK_FRAMEWORK_REGISTRATION, core_1.ModuleRef, core_1.DiscoveryService],
|
|
127
|
+
useFactory: (registration, moduleRef, discovery) => (0, providers_1.createRuntimeHost)(registration, moduleRef, discovery)
|
|
128
|
+
},
|
|
129
|
+
...(0, providers_1.alwaysAvailableClientProviders)(),
|
|
130
|
+
...(0, providers_1.conditionalClientProvidersForFactory)()
|
|
131
|
+
],
|
|
132
|
+
exports: [
|
|
133
|
+
tokens_1.ZLINK_FRAMEWORK_RUNTIME,
|
|
134
|
+
...(0, providers_1.alwaysAvailableClientTokens)(),
|
|
135
|
+
...(0, providers_1.conditionalClientTokens)()
|
|
136
|
+
]
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
exports.ZLinkModule = ZLinkModule;
|
|
141
|
+
exports.ZLinkModule = ZLinkModule = ZLinkModule_1 = __decorate([
|
|
142
|
+
(0, common_1.Module)({})
|
|
143
|
+
], ZLinkModule);
|
|
144
|
+
function createZLinkDynamicModule(registration) {
|
|
145
|
+
const providers = [
|
|
146
|
+
{ provide: tokens_1.ZLINK_FRAMEWORK_REGISTRATION, useValue: registration },
|
|
147
|
+
{
|
|
148
|
+
provide: tokens_1.ZLINK_FRAMEWORK_RUNTIME,
|
|
149
|
+
inject: [core_1.ModuleRef, core_1.DiscoveryService],
|
|
150
|
+
useFactory: (moduleRef, discovery) => (0, providers_1.createRuntimeHost)(registration, moduleRef, discovery)
|
|
151
|
+
},
|
|
152
|
+
...(0, providers_1.alwaysAvailableClientProviders)(registration),
|
|
153
|
+
...(0, providers_1.conditionalClientProviders)(registration)
|
|
154
|
+
];
|
|
155
|
+
return {
|
|
156
|
+
module: ZLinkModule,
|
|
157
|
+
imports: [core_1.DiscoveryModule],
|
|
158
|
+
providers,
|
|
159
|
+
exports: providers.map(providers_1.providerToken)
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
function createDiscoveringZLinkDynamicModule(options) {
|
|
163
|
+
const registrationProvider = {
|
|
164
|
+
provide: tokens_1.ZLINK_FRAMEWORK_REGISTRATION,
|
|
165
|
+
inject: [core_1.DiscoveryService, core_1.ModuleRef],
|
|
166
|
+
useFactory: (discovery, moduleRef) => framework_loader_1.framework.createFrameworkRegistration((0, registration_composer_1.createDiscoveredOptions)(options, discovery, moduleRef))
|
|
167
|
+
};
|
|
168
|
+
return {
|
|
169
|
+
module: ZLinkModule,
|
|
170
|
+
imports: [core_1.DiscoveryModule],
|
|
171
|
+
providers: [
|
|
172
|
+
registrationProvider,
|
|
173
|
+
{
|
|
174
|
+
provide: tokens_1.ZLINK_FRAMEWORK_RUNTIME,
|
|
175
|
+
inject: [tokens_1.ZLINK_FRAMEWORK_REGISTRATION, core_1.ModuleRef, core_1.DiscoveryService],
|
|
176
|
+
useFactory: (registration, moduleRef, discovery) => (0, providers_1.createRuntimeHost)(registration, moduleRef, discovery)
|
|
177
|
+
},
|
|
178
|
+
...(0, providers_1.alwaysAvailableClientProviders)(),
|
|
179
|
+
...(0, providers_1.conditionalClientProvidersForFactory)()
|
|
180
|
+
],
|
|
181
|
+
exports: [
|
|
182
|
+
tokens_1.ZLINK_FRAMEWORK_RUNTIME,
|
|
183
|
+
...(0, providers_1.alwaysAvailableClientTokens)(),
|
|
184
|
+
...(0, providers_1.conditionalClientTokens)()
|
|
185
|
+
]
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function createProviderDiscoveryProviders(roots) {
|
|
189
|
+
return (roots ?? []).flatMap((root) => {
|
|
190
|
+
if (typeof root === 'string') {
|
|
191
|
+
return zlinkDiscoverProviders(root);
|
|
192
|
+
}
|
|
193
|
+
return zlinkDiscoverProviders(root.rootDir, root.options);
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
function createDefaultProviderDiscoveryProviders(roleRoot) {
|
|
197
|
+
return createProviderDiscoveryProviders(defaultProviderDiscoveryRoots(roleRoot));
|
|
198
|
+
}
|
|
199
|
+
function defaultProviderDiscoveryRoots(roleRoot) {
|
|
200
|
+
return node_fs_1.default.existsSync(roleRoot)
|
|
201
|
+
? [{ rootDir: roleRoot, options: { recursive: true } }]
|
|
202
|
+
: [];
|
|
203
|
+
}
|