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

@bhs-dev/typescript-common-types

v1.0.0

Published

Contratos puros do ecossistema `@bhs-dev/*` — interfaces, types, error classes e symbols de DI. Este é o pacote raiz do grafo de dependências: **zero implementação, zero dependência runtime**.

Readme

@bhs-dev/typescript-common-types

Contratos puros do ecossistema @bhs-dev/* — interfaces, types, error classes e symbols de DI. Este é o pacote raiz do grafo de dependências: zero implementação, zero dependência runtime.

Instalação

npm install @bhs-dev/typescript-common-types

Peer Dependencies

| Pacote | Motivo | |--------|--------| | express >= 5.0.0 | Tipos de Request, Router, RequestHandler, ErrorRequestHandler usados nas interfaces |

Conteúdo

Interfaces

Contratos genéricos para serviços e componentes do backend:

| Interface | Descrição | |-----------|-----------| | ILogger | Logger estruturado com suporte a child loggers | | IEnvService | Acesso tipado a variáveis de ambiente | | IHttpRequestOptions<TBody> | Configuração completa de request HTTP (method, url, headers, retry, timeout) | | HttpResponse<T> | Wrapper de resposta HTTP com status, headers e data tipado | | IHttpService | Cliente HTTP com CRUD completo e correlation ID | | IBaseRoute / IRouteModule | Contrato de módulo de rotas Express | | MiddlewareConfig | Entrada de configuração do pipeline de middlewares (order, factory, enableIf) |

Types

| Type/Enum | Descrição | |-----------|-----------| | ClassCtor<T> | Construtor genérico de classe | | ScopeTypes | Enum de escopos DI (TRANSIENT, SINGLETON) | | CustomErrorOptions | Opções para construção de erros customizados | | EnvVariable / EnvList | Definição de variável de ambiente (key, required, default) | | HttpMethod | Métodos HTTP suportados (GET, POST, PUT, DELETE, PATCH) | | HttpResponseType | Tipo de resposta (json, text, buffer) | | RouteDef | Definição declarativa de rota (method, path, handler, middlewares) | | RequestParts | Partes validáveis de uma request (body, params, query, headers) | | TypedRequest<P,Q,B> | Express Request com params, query e body tipados | | TypedRequestBody<B> | Express Request com body tipado | | MiddlewareFactory | Factory que produz middleware Express |

Error Classes

| Classe | Herança | Descrição | |--------|---------|-----------| | EnvironmentError | Error | Erro base para falhas de ambiente | | EnvVarsNotFoundError | EnvironmentError | Variáveis obrigatórias ausentes | | HttpError<T> | Error | Resposta HTTP não-sucesso (status, data, url, method) | | HttpTimeoutError | HttpError | Timeout de request HTTP (status 408) |

Symbols (DI)

Tokens para injeção de dependência com tsyringe:

| Symbol | Uso | |--------|-----| | EnvServiceSymbol | Serviço de variáveis de ambiente | | ProcessEnvSymbol | process.env injetável | | EnvListSymbol | Lista de variáveis de ambiente da aplicação | | LoggerServiceSymbol | Serviço de logging | | HttpResponsesSymbol | Helper de respostas HTTP | | RequestContextSymbol | Contexto request-scoped (AsyncLocalStorage) | | ValidationMiddlewareSymbol | Middleware de validação | | HttpServiceSymbol | Cliente HTTP |

Exemplos de Uso

Implementar um Logger

import { ILogger } from '@bhs-dev/typescript-common-types';

class ConsoleLogger implements ILogger {
    child(meta?: Record<string, unknown>): ILogger {
        return this; // simplificado
    }
    debug(msg: string, meta?: Record<string, unknown>): void { console.debug(msg, meta); }
    info(msg: string, meta?: Record<string, unknown>): void { console.info(msg, meta); }
    warn(msg: string, meta?: Record<string, unknown>): void { console.warn(msg, meta); }
    error(msg: string, meta?: Record<string, unknown> | Error): void { console.error(msg, meta); }
}

Registrar um serviço com Symbol DI

import { container } from 'tsyringe';
import { LoggerServiceSymbol, ILogger } from '@bhs-dev/typescript-common-types';
import { WinstonLogger } from './winston-logger';

container.registerSingleton<ILogger>(LoggerServiceSymbol, WinstonLogger);

Definir variáveis de ambiente

import { EnvList } from '@bhs-dev/typescript-common-types';

const envList: EnvList = [
    { key: 'APPLICATION_NAME', required: true, description: 'Nome da aplicação' },
    { key: 'SERVER_PORT', required: true, default: '3000' },
    { key: 'LOG_LEVEL', required: false, default: 'info' },
];

Tipar uma rota Express

import { RouteDef, TypedRequestBody } from '@bhs-dev/typescript-common-types';
import { Request, Response } from 'express';

interface CreateUserBody {
    name: string;
    email: string;
}

const createUser = (req: TypedRequestBody<CreateUserBody>, res: Response) => {
    const { name, email } = req.body;
    res.status(201).json({ name, email });
};

Tratar erros HTTP

import { HttpError, HttpTimeoutError } from '@bhs-dev/typescript-common-types';

try {
    const response = await httpService.get('/api/users', correlationId);
} catch (error) {
    if (error instanceof HttpTimeoutError) {
        console.error(`Timeout após ${error.timeoutMs}ms em ${error.url}`);
    } else if (error instanceof HttpError) {
        console.error(`HTTP ${error.status} em ${error.method} ${error.url}`);
    }
}

Configurar pipeline de middlewares

import { MiddlewareConfig } from '@bhs-dev/typescript-common-types';

const middlewares: MiddlewareConfig[] = [
    {
        id: 'correlation-id',
        description: 'Injeta correlation ID no request',
        order: 1,
        handler: correlationIdMiddleware,
    },
    {
        id: 'error-handler',
        description: 'Handler global de erros',
        order: 100,
        factory: () => createErrorHandler({ logger }),
        isErrorHandler: true,
    },
];

Desenvolvimento

# Build
nx build typescript-common-types

# Testes
nx test typescript-common-types

# Lint
nx lint typescript-common-types

Licença

ISC