@purecore/asyncify
v0.1.1
Published
@purecore/asyncify é uma biblioteca agnóstica para comunicação assíncrona unificada. Une WebSocket, SSE, Streams e Eventos locais em uma única interface Pub/Sub.
Maintainers
Readme
@purecore/asyncify
@purecore/asyncify é uma biblioteca agnóstica para comunicação assíncrona unificada. Ela une WebSocket, SSE, Streams e Eventos locais em uma única interface Pub/Sub poderosa e tipada.
🚀 Como foi feito
Esta biblioteca foi refatorada para seguir os padrões da @purecore, utilizando:
- TypeScript com Tipagem Semântica Nominal: Garantindo que tópicos e URLs não sejam apenas strings, mas tipos distintos.
- Decoradores: Implementação de
@Subscribepara facilitar a integração com sistemas orientados a objetos. - Agnosticismo de Ambiente: Funciona perfeitamente no Browser (nativo) e Node.js/Bun (com fallback).
- Zero Dependências Pesadas: Utiliza o que há de mais moderno nas APIs nativas (como
ReadableStreameAbortController).
🛠️ Como funciona
O Asyncify atua como um roteador de eventos inteligente. Se você publica em um tópico que começa com ws:, ele automaticamente tenta enviar via WebSocket. Se você se inscreve em um tópico sse:, ele gerencia a conexão EventSource para você.
Tipagem Nominal
import { Topic, Asyncify } from '@purecore/asyncify';
const myTopic = 'app:notify' as Topic;
const asyncify = new Asyncify();
asyncify.sub(myTopic, (data) => console.log(data));Usando Decoradores
import { Subscribe, Asyncify } from '@purecore/asyncify';
class NotificationHandler {
@Subscribe('app:notify')
onNotify(data: any) {
console.log('Notificação recebida:', data);
}
}
const handler = new NotificationHandler();
const asyncify = new Asyncify();
asyncify.register(handler);Streams Nativos
const stream = new ReadableStream({ ... });
asyncify.sub(stream, (chunk) => {
console.log('Chunk recebido do stream:', chunk);
});🧪 Como testar
Para rodas os testes (utilizando Bun):
bi
bun testPara rodar a demo no browser:
- Compile o projeto:
bb - Abra
test/index.htmlem seu navegador.
📝 Documentação da API
Asyncify
| Método | Descrição |
| --- | --- |
| connect(type, url) | Conecta ao transporte (ws ou sse). |
| disconnect(type) | Desconecta o transporte. |
| pub(topic, payload) | Publica dados (suporta prefixo ws:). |
| sub(source, callback) | Inscreve-se em um tópico ou Stream. |
| unsub(source, callback) | Remove uma inscrição. |
| register(instance) | Registra assinaturas via decoradores em uma instância. |
