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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@cbm-common/provider-repository

v0.0.1

Published

This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 20.1.0.

Readme

ProviderRepository

This project was generated using Angular CLI version 20.1.0.

Code scaffolding

Angular CLI includes powerful code scaffolding tools. To generate a new component, run:

ng generate component component-name

For a complete list of available schematics (such as components, directives, or pipes), run:

ng generate --help

Building

To build the library, run:

Provider Repository (mf-cbm-common — provider-repository)

Documento de la librería provider-repository.

Descripción

provider-repository es una librería Angular que expone un módulo y servicios para gestionar proveedores a través de un API REST.

Estado del API público

  • Módulo: CbmProviderModule — exporta forRoot(config) que produce un Provider con { baseUrl }.
  • Token: PROVIDER_MODULE_CONFIG — inyectable con la configuración { baseUrl: string }.
  • Servicio: CbmProviderService — implementa las llamadas HTTP necesarias y está registrado con providedIn: 'root'.
  • Repositorio: CbmProviderRepository — wrapper que delega en el servicio y expone la API pública.

Instalación (desarrollo)

La librería forma parte del monorepo mf-cbm-common. Para trabajar localmente use los comandos habituales del workspace.

Construir la librería

Para compilar la librería use el CLI de Angular desde la raíz del workspace:

ng build provider-repository

Uso — configurar e importar

  1. Registrar la configuración en el módulo raíz de la aplicación consumidora:
import { CbmProviderModule } from 'mf-cbm-common/provider-repository';

@NgModule({
   imports: [
      CbmProviderModule.forRoot({
         baseUrl: 'https://api.example.com/providers'
      }),
   ],
})
export class AppModule {}
  1. Inyectar el repositorio en un componente/servicio consumidor:
import { Component } from '@angular/core';
import { CbmProviderRepository } from 'provider-repository';

@Component({ /* ... */ })
export class DemoComponent {
   constructor(private repo: CbmProviderRepository) {
      this.repo.list({ page: 1, per_page: 20 }).subscribe(res => console.log(res));
   }
}

API pública resumida

  • CbmProviderModule.forRoot(config: { baseUrl: string }) -> Provider
  • PROVIDER_MODULE_CONFIG: InjectionToken<{ baseUrl: string }>
  • CbmProviderService
    • list(params: CbmProviderModel.ListParams): Observable<CbmProviderModel.ListResponse>
    • getOne(id: string): Observable<CbmProviderModel.GetOneResponse>
    • getOneByDocumentNumber(documentNumber: string)
    • save/update/changeStatus/delete/restore
    • downloadTemplate(): Observable<HttpResponse>
    • uploadProvidersByExcel(formData: FormData): Observable<HttpResponse>
  • CbmProviderRepository: adapter que expone los mismos métodos que el servicio.

Modelos

Los tipos están en src/lib/provider.model.ts. Revisar las interfaces ListParams, ListResponse, GetOneResponse, etc.

Notas de migración y patrón aplicado

Se ha aplicado el patrón de user-repository:

  • Módulo con InjectionToken y forRoot que devuelve un Provider con baseUrl.
  • Servicio usa HttpClient e inyecta el token para construir URLs.
  • Repositorio disponible mediante providedIn: 'root'.

Pruebas

Ejecute los tests desde la raíz del workspace:

ng test

Publicación

  1. Compilar la librería: ng build provider-repository
  2. Publicar la carpeta dist/provider-repository según el flujo del proyecto.

Contacto y mantenimiento

Si necesitas ampliar la API o añadir nuevos endpoints, abre un issue o PR en el repositorio principal con cambios y tests asociados.

Licencia

Revisa la licencia en el repositorio raíz.


Detalle técnico (contrato corto)

  • Propósito: proporcionar una API cliente reutilizable para gestionar proveedores (CRUD, import/export, restauración).
  • Entrada principal: configuración del módulo { baseUrl: string }.
  • Salidas: Observables que emiten los modelos tipados definidos en src/lib/provider.model.ts.
  • Modo de errores: las llamadas HTTP devuelven errores estándar de HttpClient (4xx/5xx); la librería no transforma errores automáticamente.

API — resumen de métodos (firma y comportamiento)

Los siguientes métodos están expuestos por CbmProviderService y CbmProviderRepository (el repositorio delega en el servicio):

  • list(params: CbmProviderModel.ListParams): Observable<CbmProviderModel.ListResponse>
    • Lista proveedores con filtros paginados.
  • getOne(id: string): Observable<CbmProviderModel.GetOneResponse>
    • Recupera un proveedor por su id.
  • getOneByDocumentNumber(documentNumber: string): Observable<CbmProviderModel.GetOneByDocumentNumberResponse>
    • Recupera un proveedor por número de documento.
  • save(data: CbmProviderModel.SaveBody): Observable<CbmProviderModel.ConfirmResponse>
    • Crea un nuevo proveedor.
  • update(id: string, data: CbmProviderModel.UpdateBody): Observable<CbmProviderModel.ConfirmResponse>
    • Actualiza un proveedor existente.
  • changeStatus(id: string, data: CbmProviderModel.ChangeStatusBody): Observable<CbmProviderModel.ConfirmResponse>
    • Cambia el estado (enable/disable) de un proveedor.
  • updateManagement(id: string, data: CbmProviderModel.UpdateManagementBody): Observable<CbmProviderModel.ConfirmResponse>
    • Actualiza datos de gestión/administración del proveedor.
  • delete(id: string): Observable<CbmProviderModel.ConfirmResponse>
    • Elimina un proveedor (dependiente del backend: soft/hard delete según implementación del server).
  • restore(id: string): Observable<CbmProviderModel.ConfirmResponse>
    • Restaura un proveedor eliminado (si el backend soporta restauración).
  • downloadTemplate(): Observable<HttpResponse>
    • Descarga la plantilla Excel para carga masiva.
  • uploadProvidersByExcel(data: FormData): Observable<HttpResponse>
    • Sube un Excel con proveedores para carga masiva; devuelve un blob con el resultado/report.

Dónde están los tipos

Todos los tipos y shapes se encuentran en projects/provider-repository/src/lib/provider.model.ts y son las fuentes de verdad para firmas y propiedades. Evita usar any en el código consumidor; importa y usa esos tipos.

Cómo integrar la librería (ejemplos)

  1. Registrar la configuración del módulo en la aplicación consumidora (sin prefijo @cbm-common/):
import { CbmProviderModule } from 'provider-repository';

@NgModule({
   imports: [
      CbmProviderModule.forRoot({ baseUrl: 'https://api.miapp.com/providers' }),
   ],
})
export class AppModule {}
  1. Inyectar el repositorio en un componente/servicio:
import { Component } from '@angular/core';
import { CbmProviderRepository } from 'provider-repository';

@Component({ /* ... */ })
export class DemoComponent {
   constructor(private repo: CbmProviderRepository) {
      this.repo.list({ page: 1, per_page: 20 }).subscribe(r => console.log(r));
   }
}

Consideraciones y casos límite

  • Timeouts / reintentos: la librería no implementa reintentos ni timeouts por defecto; deja ese comportamiento al consumidor mediante operadores RxJS o interceptores HTTP globales.
  • Autenticación: si tu API requiere tokens, registra un interceptor a nivel de aplicación o usa la infraestructura de interceptores del workspace. El módulo no inyecta autenticación automáticamente.
  • Respuesta parcial/estructura cambiante: verifica success y data del ListResponse antes de consumir.
  • Grandes ficheros Excel: el upload/download usa Blob; maneja streams y memoria en el cliente según el tamaño.

Notas de migración (qué cambió con respecto al patrón antiguo)

  • El módulo ahora expone un InjectionToken (PROVIDER_MODULE_CONFIG) y forRoot(config) que devuelve un Provider con la configuración (no registra interceptores o servicios automáticamente desde forRoot).
  • El servicio principal usa HttpClient e inyecta el token para construir las URLs base.
  • El repositorio está registrado con providedIn: 'root' y actúa como adaptador del servicio.

Comandos útiles

Desde la raíz del workspace:

# Compilar solo la librería
npx ng build provider-repository --configuration development

# Compilar todo el workspace
npx ng build

# Ejecutar tests (si están configurados)
npx ng test --watch=false

Publicación

  1. Compilar la librería: npx ng build provider-repository
  2. Publicar la carpeta dist/provider-repository según el flujo del proyecto (npm publish/private registry).

Soporte y mantenimiento

Para cambios en la API (nuevos endpoints o cambios en modelos):

  1. Añade/actualiza tipos en provider.model.ts.
  2. Añade métodos en provider.service.ts y exponlos en provider.repository.ts.
  3. Añade tests unitarios que verifiquen la construcción de requests y el mapping de respuestas.

Contacto

Abrir un issue o un pull-request en el repositorio principal con la descripción del cambio y ejemplos de uso.