New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

ssignal

Package Overview
Dependencies
Maintainers
1
Versions
20
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ssignal

Signal Pattern

latest
Source
npmnpm
Version
1.2.1
Version published
Maintainers
1
Created
Source

SSignal

npm version License: MIT

SSignal es una clase reactiva que extiende EventTarget para la gestión de estados. Proporciona una API simple para suscribirse a cambios de valor en cualquier tipo de dato, incluyendo ahora la capacidad de observar mutaciones en objetos Map.

PropiedadTipoDescripción
constructor(value: T)MétodoCrea una nueva instancia de SSignal. Puede ser inicializada con cualquier valor, incluyendo objetos Map, los cuales serán observados de forma reactiva.
valuePropiedad (getter/setter)Propiedad (getter/setter) Lee o escribe el valor actual del Signal. Si el valor es diferente al actual, dispara el evento change. El setter también acepta una función de actualización (prev: T) => T.
subscribe(callback: (value: T) => void)MétodoRegistra una función callback que será llamada cada vez que el valor del Signal cambie. Retorna: Una función de desuscripción que, al ser llamada, elimina el listener.
dispatchEvent('change', ...)MétodoEmite el evento 'change' a todos los suscriptores. Es invocado automáticamente por el setter y por las mutaciones en un Map observado.
addEventListener('change', ...)MétodoExtiende el método nativo de EventTarget para agregar un listener al evento 'change'.
removeEventListener('change', ...)MétodoExtiende el método nativo de EventTarget para eliminar un listener.

La clase SSignal emite los siguientes eventos:

EventoTipoDescripción
changeCustomEvent<T>Disparado cuando el valor de Signal cambia. El detalle del evento (event.detail) contiene el nuevo valor.

Instalación

Web (from CDN)

<!DOCTYPE html>
  <head>
    <head>
      <script src="https://unpkg.com/ssignal@latest/lib/ssignal.umd.js" />
   ...

Backend and Frontend apps

npm install ssignal
import SSignal from 'ssignal';

const signal = new SSignal(0);
const SSignal = require('ssignal');

const signal = new SSignal(0);

Características destacadas

  • API simple: Con métodos intuitivos como value, subscribe y unsubscribe.
  • Reactividad: Emite un evento 'change' cuando el valor cambia, permitiendo una gestión de estado eficiente.
  • Soporte nativo para Map: Observa de forma automática las mutaciones en objetos Map, disparando eventos sin necesidad de intervención manual.
  • Seguridad de tipos: Construido en TypeScript para garantizar la seguridad en todo el proceso.

Nueva funcionalidad: soporte reactivo para Map

Ahora SSignal puede manejar de forma reactiva instancias de Map. Cuando inicializas SSignal con un objeto Map, cualquier modificación realizada a través de los métodos nativos set(), delete() o clear() disparará un evento de change, notificando a todos los suscriptores.

Cómo funciona

Al inicializar SSignal con una instancia de Map, la clase envuelve el objeto en un Proxy. Este Proxy intercepta las llamadas a los métodos que modifican el Map y emite un evento de change de forma automática. También se asegura de que los métodos de lectura (get(), has(), entries(), etc.) funcionen correctamente.

Ejemplo de uso con Map

// SSignal.ts
import SSignal from './SSignal';

// 1. Crear una instancia de SSignal con un Map
const signalMap = new SSignal(new Map<string, number>());

// 2. Suscribirse a los cambios
const unsubscribe = signalMap.subscribe((value) => {
  console.log('El Map ha cambiado:', value);
  console.log('El tamaño del Map es:', value.size); // Acceder a propiedades como 'size' funciona
});

// 3. Modificar el Map y observar los eventos
signalMap.value.set('a', 1);
// Salida:
// El Map ha cambiado: Map(1) { 'a' => 1 }
// El tamaño del Map es: 1

signalMap.value.set('b', 2);
// Salida:
// El Map ha cambiado: Map(2) { 'a' => 1, 'b' => 2 }
// El tamaño del Map es: 2

signalMap.value.delete('a');
// Salida:
// El Map ha cambiado: Map(1) { 'b' => 2 }
// El tamaño del Map es: 1

// 4. Desuscribirse para dejar de recibir notificaciones
unsubscribe();

Ejemplo de uso con valores primitivos

import SSignal from './SSignal';

const signalNumber = new SSignal<number>(0);

signalNumber.subscribe((value) => {
  console.log('El número ha cambiado a:', value);
});

signalNumber.value = 10;
// Salida: El número ha cambiado a: 10

// También soporta la actualización con una función
signalNumber.value = (prev) => prev + 5;
// Salida: El número ha cambiado a: 15

Scripts

  • npm run build: Compila TypeScript a la carpeta lib.
  • npm test: Ejecuta los tests.
  • npm run test:coverage: Ejecuta los tests con cobertura.

Estado de las pruebas de rendimiento

Reporte visual de pruebas de rendimiento

Licencia

MIT

Repositorio: https://github.com/ElJijuna/ssignal

Keywords

signal

FAQs

Package last updated on 01 Oct 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts