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

teraprox-core

v0.1.4

Published

Host application for TeraproX modules

Readme

TeraproX Core

Shell/host da arquitetura Micro-Frontend (MFE) do TeraproX. Orquestra os módulos federados (SGP, SGM, Solicitações) via Webpack Module Federation e fornece SDKs e pacotes compartilhados.

Estrutura do Monorepo

teraprox-core/
├── src/                      # Aplicação host (shell)
├── packages/
│   ├── core-sdk/             # SDK principal para módulos federados
│   └── ui-kit/               # Componentes visuais compartilhados
├── documentation/            # Documentação técnica da arquitetura
└── webpack.config.js         # Configuração do host com Module Federation

Módulos Federados

| Módulo | Federation Name | Porta Dev | Produção | |--------|----------------|-----------|----------| | Core (host) | teraprox_core | 3000 | teraprox-core.web.app | | SGP (Processo) | teraprox_app_sgp | 3002 | teraprox-sgp.web.app | | SGM (Manutenção) | teraprox_app_sgm | 3003 | teraprox-sgm.web.app | | Solicitações | teraprox_app_solicitacao | 3004 | teraprox-solicitacoes.web.app |


Pacotes (packages/)

teraprox-core-sdk (v0.3.0)

Contrato tipado entre o Core host e os módulos federados. Fornece interfaces, contextos, hooks, componentes e utilitários compartilhados.

Entry Points

O SDK expõe 3 entry points para diferentes cenários:

// Entry point principal — tudo
import { useCoreService, useHttpController, useToast } from 'teraprox-core-sdk';

// Apenas Federation runtime
import { FederatedBridge, createReducersBundle } from 'teraprox-core-sdk/federation';

// Ferramentas de desenvolvimento
import { DevShell, extractDevRoutes } from 'teraprox-core-sdk/dev';

teraprox-core-sdk (principal)

Tipos/Interfaces:

  • CoreService — contrato principal host ↔ remoto (controller factory, toast, matching objects, logout)
  • HttpController — CRUD completo (get, post, put, patch, delete, save, read, readAll, etc.)
  • ToastService / ToastOptions — notificações toast
  • MatchingObjectSubscription — assinatura real-time via Firebase RTDB
  • Notification / NotificationState — estado de notificações
  • NavigateFn / NavigationConfig — navegação entre módulos

Contexto:

  • CoreServiceContextReact.createContext<CoreService | null> fornecido pelo host via FederatedBridge

Hooks: | Hook | Descrição | |------|-----------| | useCoreService() | Acessa o CoreService do contexto | | useHttpController(context, baseEndPoint?) | Cria um HttpController para CRUD | | useToast() | Atalho para toast.success/warning/error/info | | useMatchingObject(subscription) | Assinatura real-time de Matching Objects | | useNotifications() | Estado de notificações | | useNavigator() | Navegação programática | | useFetchData(config) | GET genérico com loading/error state | | usePostData(config) | POST genérico com loading/error state | | useAnexoUpload(config) | Upload de arquivos/anexos | | useFormStorage(key) | Persistência de estado de formulário | | useSmartSearch(config) | Busca com debounce | | useValidation(rules) | Validação de campos |

Reducers:

  • branchLevelReducer — estado de branch/level em formulários
  • pickerReducer — estado genérico de pickers/seletores

Utilitários:

  • colorUtils — cálculo de contraste de cor (pickTextColorBasedOnBgColorAdvanced)
  • dateUtils — wrappers dayjs (formatDate, daysBetween, etc.)
  • stringUtils — manipulação de strings (capitalize, truncate, slugify, etc.)

Componentes:

  • RecursoDisplayer — exibição de recursos compartilhada

teraprox-core-sdk/federation

Runtime de federação — usado pelos remotes para integrar com o host:

| Export | Descrição | |--------|-----------| | FederatedBridge | Provider que injeta o CoreService do host e seta window.__TERAPROX_HOSTED_BY_CORE__ | | createReducersBundle(config) | Factory para lazy-loading de reducers com seleção de contexto | | StandaloneProvider | Provider para modo standalone (npm start isolado do host) | | DevAutoLogin | Auto-dispatch de login com usuário mock em modo dev |

Tipos:

  • RemoteManifest — manifesto declarando rotas, menus e módulos do remote
  • RemoteMenuSection / RemoteMenuItem — estrutura de menu
  • ReducersBundle / ReducersBundleConfig — configuração de reducers federados

teraprox-core-sdk/dev

Ferramentas para desenvolvimento local dos remotes:

| Export | Descrição | |--------|-----------| | DevShell | Painel flutuante com sidebar de navegação (só renderiza fora do host) | | extractDevRoutes(routesConfig) | Converte routesConfig[] em DevRoute[] para o DevShell |


@teraprox/ui-kit (v0.1.0)

Componentes visuais compartilhados entre módulos.

import { AddButton } from '@teraprox/ui-kit';
import { UuidPill } from '@teraprox/ui-kit';
import '@teraprox/ui-kit/styles'; // CSS

Instalação do SDK nos Módulos Federados

O SDK deve ser instalado via npm nos módulos federados. Enquanto a versão v0.3.0 não estiver publicada no registry, usar npm pack + tarball:

# 1. No diretório do SDK, gerar o tarball
cd teraprox-core/packages/core-sdk
npm run build
npm pack
# Gera: teraprox-core-sdk-0.3.0.tgz

# 2. No módulo federado, instalar a partir do tarball
cd teraprox-app-sgp
npm install /caminho/para/teraprox-core-sdk-0.3.0.tgz --legacy-peer-deps

# 3. Ajustar o package.json para a versão semver (para quando publicar no npm)
# "teraprox-core-sdk": "^0.3.0"

Não usar file: ou npm link — essas abordagens criam symlinks que causam conflitos de resolução de módulos (React duplicado, ModuleScopePlugin, etc.).


Configuração do Module Federation

No Host (webpack.config.js)

O host declara os remotes e compartilha as dependências como eager: true:

new ModuleFederationPlugin({
  name: 'teraprox_core',
  remotes: { /* SGP, SGM, Solicitações */ },
  shared: {
    'teraprox-core-sdk': { singleton: true, eager: true },
    react: { singleton: true, eager: true },
    // ... demais deps
  },
})

Nos Remotes (config-overrides.js)

Cada remote expõe suas telas, reducers, bridge e manifesto, e compartilha deps como eager: false:

new ModuleFederationPlugin({
  name: 'teraprox_app_sgp', // ou teraprox_app_sgm
  filename: 'remoteEntry.js',
  exposes: {
    './ProcessoDashboard': './src/Screens/screens-processo/ProcessoDashboard',
    './ReducersBundle': './src/federation/reducersBundle',
    './FederatedBridge': './src/federation/FederatedBridge',
    './Manifest': './src/federation/manifest',
    // ...
  },
  shared: {
    'teraprox-core-sdk': { singleton: true, eager: false },
    react: { singleton: true, eager: false },
    // ... demais deps
  },
})

Dependências Compartilhadas (Shared)

Todas declaradas como singleton: true para evitar duplicatas:

react, react-dom, react-redux, react-router-dom, @reduxjs/toolkit, react-icons, react-bootstrap, react-toast-notifications, react-dnd, react-dnd-html5-backend, redux-persist, axios, dayjs, teraprox-core-sdk


Arquitetura de Integração

┌─────────────────────────────────────────────────┐
│                 teraprox-core (host)             │
│  ┌────────────┐  ┌──────────┐  ┌─────────────┐  │
│  │ CoreService│  │  Router  │  │ Redux Store │  │
│  │  (toast,   │  │  (rotas  │  │  (reducers  │  │
│  │  http,     │  │   dos    │  │   do host + │  │
│  │  matching  │  │  remotes)│  │   federados)│  │
│  │  objects)  │  │          │  │             │  │
│  └─────┬──────┘  └────┬─────┘  └──────┬──────┘  │
│        │              │               │          │
│        └──────┬───────┴───────┬───────┘          │
│               │               │                  │
│     ┌─────────▼──┐    ┌──────▼───────┐           │
│     │FederatedBridge   │FederatedBridge           │
│     └─────────┬──┘    └──────┬───────┘           │
└───────────────┼──────────────┼───────────────────┘
                │              │
    ┌───────────▼──┐   ┌──────▼───────────┐
    │  SGP Remote  │   │   SGM Remote     │
    │  (Processo)  │   │  (Manutenção)    │
    │              │   │                  │
    │ useCoreService() │ useCoreService() │
    │ useHttpController│ useHttpController│
    └──────────────┘   └──────────────────┘

Fluxo:

  1. O host carrega o remoteEntry.js de cada remote
  2. Importa o Manifest para registrar rotas e menus
  3. Importa o ReducersBundle para injetar reducers no store
  4. Envolve cada tela remote com FederatedBridge, injetando o CoreService
  5. O remote acessa tudo via hooks do SDK (useCoreService, useHttpController, etc.)

Desenvolvimento

# Instalar dependências
npm install

# Rodar o host
npm start

# Build do SDK (após alterações)
cd packages/core-sdk
npm run build

# Watch mode do SDK
npm run dev

Publicação do SDK

cd packages/core-sdk
npm run build
npm version patch  # ou minor/major
npm publish

Após publicar, atualizar os módulos federados:

npm install teraprox-core-sdk@latest