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 🙏

© 2024 – Pkg Stats / Ryan Hefner

reaxo

v1.0.0

Published

A comprehensive React package with CLI, memory management, state simulation, and task management features.

Downloads

9

Readme

ReaXo

ReaXo is a comprehensive toolkit designed to empower React applications with advanced functionality, allowing developers to manage state, memory, tasks, simulations, and debugging all from a single, powerful framework. By extending the capabilities of traditional React, ReaXo introduces features that solve common issues in complex applications, making it easier to build, optimize, and maintain scalable and performant UIs.

Why ReaXo?

In modern web development, applications often grow in complexity as they scale. With increasing demands for high-performance UIs, efficient memory management, and flexible state handling, developers face numerous challenges:

  1. State Management Complexity: As applications expand, so does the complexity of managing global and component-level state, leading to increased chances of bugs, unpredictable behavior, and performance bottlenecks.
  2. Memory Leaks and Inefficient Resource Usage: React components often require memory-intensive resources that can lead to memory leaks if not managed properly. Resources like large data sets or media assets need systematic allocation, sharing, and cleanup.
  3. Task Scheduling and Event Handling: Applications need background tasks, such as data polling, animations, or timed operations, and chaining these tasks or triggering them based on specific events can be cumbersome and error-prone.
  4. Debugging and Profiling: React developers commonly require insights into how their application is running—whether it’s identifying slow components, profiling memory usage, or tracking state changes over time.
  5. Testing and Simulation: Predicting how an application will respond to certain states and behaviors without manual testing can be challenging. Simulations and scenario testing are essential for building reliable and robust applications.

ReaXo addresses these issues directly by providing a set of specialized tools that augment React's core functionality, offering a comprehensive solution for developers working on advanced, feature-rich applications.

Key Features of ReaXo

1. Enhanced State Management

  • Global and Scoped State: ReaXo provides a robust state management solution with a global state object accessible across components and the ability to scope states to specific components.
  • Reactive Streams: Components can subscribe to state changes and react in real-time, enabling efficient data flow and reducing the need for prop drilling.
  • Middleware Support: ReaXo supports middleware for state changes, allowing for easy logging, validation, or transformation before state is updated.
  • Undo Functionality: Built-in support for undo functionality, keeping a history of state changes and providing a simple way to revert to previous states.

2. Advanced Task Management

  • Background Jobs: ReaXo can handle periodic tasks (like polling or regular data fetching) as background jobs, ensuring they run at defined intervals.
  • Event-Based Tasks: Tasks can be triggered automatically in response to specific state changes or custom events, making it easy to set up complex workflows.
  • Task Chaining: The ability to chain tasks together allows one task to trigger another, enabling efficient handling of dependent tasks without complex nesting or manual scheduling.
  • Delayed and One-Time Tasks: Developers can register delayed tasks to execute after a specified duration, making it simple to create time-based events.

3. Memory Safety and Resource Management

  • Resource Pooling: ReaXo introduces a memory management system that allocates, shares, and reuses resources across components to prevent redundancy and optimize performance.
  • Automatic Cleanup: Resources are tracked and automatically released when they are no longer in use by any component, significantly reducing the chances of memory leaks.
  • Scoped Resource Allocation: Resources can be scoped to specific components or component trees, enabling fine-grained control over memory allocation and usage.

4. Scenario Simulation and Predictive Modeling

  • State Simulation: Developers can simulate specific application states, allowing for comprehensive testing of components under various conditions without manual manipulation.
  • Scenario Recording and Playback: ReaXo enables the recording of state changes over time, allowing for easy playback of specific scenarios to see how the application responds.
  • Predictive Modeling: Built-in tools for predicting the impact of state changes based on historical data or predefined rules, helping developers anticipate and mitigate issues before they arise.

5. Interactive CLI for Debugging and Profiling

  • Real-Time State Inspection: The CLI provides commands to inspect and monitor application state, including tracking specific variables and observing changes over time.
  • Component Profiling: Developers can use the CLI to profile specific components or the entire application, gaining insights into memory usage and potential performance bottlenecks.
  • Linting and Code Quality: Integrated linting commands help ensure code quality and prevent common errors, keeping the codebase clean and maintainable.
  • Cache Management and Cleanup: The CLI includes commands for clearing caches, freeing up memory, and managing resources, all from the command line.
  • Task and Simulation Control: Task scheduling, state simulations, and resource management can all be handled directly from the CLI, making it easier to debug and test applications during development.

How ReaXo Solves Real-World Problems

ReaXo was designed with the challenges of large-scale applications in mind. Here’s how it addresses some common issues:

  • Efficiency: By managing resources systematically and offering reusable memory pools, ReaXo minimizes memory waste and reduces the likelihood of leaks. The TaskManager ensures tasks are efficiently handled in the background, allowing for smooth, responsive applications.
  • Scalability: As applications grow, so does the complexity of managing state and component dependencies. ReaXo’s StateManager provides reactive streams and global state access, allowing applications to scale without additional complexity in data management.
  • Reliability: Through scenario simulation, developers can test and fine-tune application behavior before deploying. Predictive modeling adds another layer of reliability, allowing developers to foresee issues and optimize for different states and scenarios.
  • Productivity: The CLI accelerates debugging, profiling, and code quality management by providing immediate feedback. Task automation, simulation capabilities, and memory management allow developers to focus more on building features and less on handling the underlying technical complexities.

Who Should Use ReaXo?

ReaXo is ideal for:

  • Developers working on large-scale React applications that need enhanced state management, optimized resource handling, and task automation.
  • Teams building applications that require predictive modeling, scenario simulation, and robust debugging tools.
  • Projects where performance optimization and memory efficiency are critical, such as data-intensive applications, real-time applications, and interactive UIs.

By combining these features, ReaXo not only enhances the development process but also makes it feasible to build complex, interactive, and data-driven applications with confidence and ease.

Installation

To install the package, use npm:

npm install reaxo

Usage

Importing the Modules

The main modules available in reaxo are:

  • StateManager: For managing global and scoped state.
  • TaskManager: For managing tasks, including background jobs, delayed tasks, and event-driven tasks.
  • MemoryManager: For resource pooling, tracking usage, and automatic cleanup based on component lifecycles.
  • Simulation: For creating and running simulation scenarios, recording state changes, and predictive modeling.
  • CLI: A command-line interface for various actions such as profiling, linting, debugging, and task management.

To import the modules, use the following syntax:

import { StateManager, TaskManager, MemoryManager, Simulation, CLI } from 'reaxo';

Modules

StateManager

The StateManager module allows you to manage state with reactive streams, subscribe to state changes, and supports undo functionality.

// Setting state
StateManager.setState('count', 1);

// Getting state
const count = StateManager.getState('count');

// Subscribing to state changes
StateManager.subscribe('count', (newCount) => {
  console.log('New Count:', newCount);
});

// Undo last state change
StateManager.undo();

TaskManager

The TaskManager is designed to handle various types of tasks, including background jobs, event-based tasks, and chained tasks.

// Register a background job
TaskManager.registerBackgroundJob('fetchData', async () => {
  const data = await fetch('/api/data');
  console.log('Fetched Data:', data);
}, 60000);

// Register an event-driven task
TaskManager.registerEventTask('onLogin', 'login', () => {
  console.log('User logged in!');
});

// Chain tasks
TaskManager.chainTask('task1', 'task2', async () => {
  console.log('Task 2 started after Task 1');
});

// Manually run a task
TaskManager.runTask('fetchData');

MemoryManager

The MemoryManager helps manage resources, ensuring they are released when no longer needed.

// Allocate a resource
const imageCache = MemoryManager.allocateResource('ComponentA', 'imageCache', () => ({
  data: new Map(),
  cleanup() { console.log('Cleaning up cache'); }
}));

// Release a resource
MemoryManager.releaseResource('ComponentA', 'imageCache');

// Clear all resources
MemoryManager.clearAll();

Simulation

The Simulation module allows you to define and run simulation scenarios, capture state snapshots, and replay state changes.

// Define a simulation scenario
Simulation.defineScenario('testScenario', { count: 0 }, [
  { stateChange: { count: 1 }, delay: 1000 },
  { stateChange: { count: 2 }, delay: 2000 }
]);

// Run a scenario
Simulation.runScenario('testScenario', StateManager.setState.bind(StateManager));

// Capture and restore state snapshots
Simulation.captureSnapshot('snapshot1', StateManager.getState.bind(StateManager));
Simulation.restoreSnapshot('snapshot1', StateManager.setState.bind(StateManager));

// Replay state change history
Simulation.replayHistory(StateManager.setState.bind(StateManager));

CLI Usage

The CLI.js module provides a powerful command-line interface with multiple commands for profiling, linting, debugging, and managing tasks, simulations, and memory. Run the CLI with:

npx reaxo <command> [options]

Available Commands

  1. profile [componentName] - Profiles a specific component or the entire application.

    npx reaxo profile MyComponent
  2. lint [filePath] - Lints specified files or the entire project.

    npx reaxo lint src/
  3. debug [option] - Attaches a debugger to the application.

    npx reaxo debug logs
  4. state [key] - Views the current global state or a specific key.

    npx reaxo state count
  5. cache - Clears application caches.

    npx reaxo cache
  6. simulation - Manages simulation scenarios.

    • define <id> <initialState> <steps> - Defines a simulation with an initial state and steps.
    • run <id> - Runs a defined simulation scenario.
    • capture <snapshotId> - Captures the current state as a snapshot.
    • restore <snapshotId> - Restores a state snapshot.
    • replay - Replays the scenario history.
    npx reaxo simulation define testSim '{"count": 0}' '[{"stateChange": {"count": 1}, "delay": 1000}]'
  7. task - Manages tasks.

    • register <id> <fn> <interval> - Registers a recurring background task.
    • stop <id> - Stops a background task.
    • chain <parentId> <childId> <fn> - Chains a child task to run after a parent task.
    • run <id> - Runs a task immediately.
    npx reaxo task register fetchData "() => fetch('/api/data')" 60000
  8. memory - Manages resources.

    • add <id> <resource> - Adds a resource to the memory manager.
    • remove <id> - Removes a resource from the memory manager.
    • view <id> - Views a specific resource.
    npx reaxo memory add cache1 '{"items": []}'
  9. help - Displays help information for all commands.

    npx reaxo help

Examples

Task Management Example

TaskManager.registerBackgroundJob('logTime', () => {
  console.log(`Current time: ${new Date().toLocaleTimeString()}`);
}, 3000);

TaskManager.chainTask('logTime', 'displayMessage', () => {
  console.log("Logging time and displaying a message.");
});

State Simulation Example

Simulation.defineScenario('counterScenario', { count: 0 }, [
  { stateChange: { count: 1 }, delay: 1000 },
  { stateChange: { count: 2 }, delay: 2000 },
  { stateChange: { count: 3 }, delay: 3000 }
]);
Simulation.runScenario('counterScenario', StateManager.setState.bind(StateManager));

Memory Management Example

const dataCache = MemoryManager.allocateResource('DataComponent', 'dataCache', () => ({
  data: [],
  cleanup() { console.log("Cleaning up data cache"); }
}));

MemoryManager.releaseResource('DataComponent', 'dataCache');

License

This project is licensed under the MIT License.