npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

nestjs-collector

v1.0.0

Published

A Nestjs Collector Pattern for modular data collection and processing.

Downloads

1

Readme

nestjs-collector

nestjs-collector is a NestJS package designed to dynamically collect and manage services marked as collectables within your application. This package facilitates the organization and validation of different services or components, allowing you to efficiently group and utilize them based on shared characteristics or tags.

Features

  • Dynamic Collection: Automatically collects services marked as collectables at runtime.
  • Tag-Based Organization: Groups services based on specified tags, enabling modular and scalable architecture.
  • Runtime Efficiency: Streamlines the process of managing similar services, reducing the need for manual aggregation.

Installation

Install nestjs-collector into your NestJS project using npm or yarn:

npm install nestjs-collector

Basic Usage

Below is a basic usage example demonstrating how to use nestjs-collector in a NestJS project.

Implementing a Collectable Service

Create a service that you wish to be collected:

// specific-rule.service.ts
import { Injectable } from '@nestjs/common';
import { Collectable } from 'nestjs-collector';

@Collectable('MyTag')
@Injectable()
export class SpecificRuleService {
  validate(): boolean {
    // Your validation logic here
    return true;
  }
}

Creating a Collector Service

Define a collector service that will aggregate all collectables with the same tag:

// rule-collector.service.ts
import { Injectable } from '@nestjs/common';
import { Collector, AbstractCollector } from 'nestjs-collector';
import { SpecificRuleService } from './specific-rule.service';

@Collector('MyTag')
@Injectable()
export class RuleCollectorService extends AbstractCollector<SpecificRuleService> {
  collect() {
    // Iterates over all collected services and applies their logic
    return this.collectables.every(rule => rule.validate());
  }
}

Importing Collector Module

Ensure to import the CollectorModule in your main application module:

// app.module.ts
import { Module } from '@nestjs/common';
import { CollectorModule } from 'nestjs-collector';
import { SpecificRuleService, RuleCollectorService } from './your-service-path';

@Module({
  imports: [CollectorModule],
  providers: [SpecificRuleService, RuleCollectorService],
})
export class AppModule {}

How It Works

  • @Collectable Decorator: Marks a service as collectable with a specified tag.
  • @Collector Decorator: In a service extending AbstractCollector, aggregates all services marked as collectable with the matching tag.
  • Runtime Aggregation: On application startup, nestjs-collector dynamically collects all instances of services tagged with the same identifier and makes them available in the collector service.

Comprehensive Examples

For more in-depth examples, please refer to the tests/example folder in this repository. It contains extensive guides and practical use cases, demonstrating the versatile applications of nestjs-collector.

Contributing

Contributions to nestjs-collector are highly appreciated. Please read our contributing guidelines for details on how to contribute.

License

This project is licensed under the MIT License.