nest-cluster-ipc
Version:
A Nest module wrapper for node-cluster-ipc
67 lines • 3.47 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ClusterIpcExplorer = void 0;
const common_1 = require("@nestjs/common");
const core_1 = require("@nestjs/core");
const node_cluster_ipc_1 = require("node-cluster-ipc");
const cluster_ipc_metadata_accessor_1 = require("./cluster-ipc-metadata.accessor");
const cluster_ipc_constants_1 = require("./cluster-ipc.constants");
let ClusterIpcExplorer = class ClusterIpcExplorer {
constructor(clusterIpc, discoveryService, metadataAccessor, metadataScanner) {
this.clusterIpc = clusterIpc;
this.discoveryService = discoveryService;
this.metadataAccessor = metadataAccessor;
this.metadataScanner = metadataScanner;
}
onApplicationBootstrap() {
this.loadClusterIpcListeners();
}
onApplicationShutdown() {
this.clusterIpc.removeAllListeners();
}
loadClusterIpcListeners() {
const providers = this.discoveryService.getProviders();
const controllers = this.discoveryService.getControllers();
[...providers, ...controllers]
.filter(wrapper => wrapper.isDependencyTreeStatic())
.filter(wrapper => wrapper.instance)
.forEach((wrapper) => {
const { instance } = wrapper;
const prototype = Object.getPrototypeOf(instance) || {};
this.metadataScanner.scanFromPrototype(instance, prototype, (methodKey) => this.subscribeToClusterIpcIfListener(instance, methodKey));
});
}
subscribeToClusterIpcIfListener(instance, methodKey) {
const clusterIpcListenerMetadata = this.metadataAccessor.getClusterIpcListenerMetadata(instance[methodKey]);
if (!clusterIpcListenerMetadata)
return;
const { event, channel } = clusterIpcListenerMetadata;
const listenerMethod = this.clusterIpc.on.bind(this.clusterIpc);
listenerMethod(event, (channe, ...args) => {
if (channe === channel)
instance[methodKey].call(instance, ...args);
});
}
};
exports.ClusterIpcExplorer = ClusterIpcExplorer;
exports.ClusterIpcExplorer = ClusterIpcExplorer = __decorate([
(0, common_1.Injectable)(),
__param(0, (0, common_1.Inject)(cluster_ipc_constants_1.CLUSTER_IPC_INSTANCE)),
__metadata("design:paramtypes", [node_cluster_ipc_1.ClusterIpc,
core_1.DiscoveryService,
cluster_ipc_metadata_accessor_1.ClusterIpcMetadataAccessor,
core_1.MetadataScanner])
], ClusterIpcExplorer);
//# sourceMappingURL=cluster-ipc.explorer.js.map