open-index/open-npm huggingface dataset:
npm package: @frauschert/yas
Description: Yet Another State - A lightweight and type-safe state management solution for React
Author: Fabian Rauschert
Latest version: 0.1.1

# YAS (Yet Another State)

A lightweight and type-safe state management solution for vanilla and React applications.

## Features

- 🎯 Type-safe state management
- 🔄 Undo/Redo functionality
- ⚡️ Lightweight and fast
- 🧩 Middleware support
- 🎣 React hooks integration
- 📦 Zero dependencies

## Installation

```bash
npm install @frauschert/yas
```

## Basic Usage

```typescript
import { create } from '@frauschert/yas';

const store = create({
  initialState: { count: 0 },
  actions: {
    increment: (state) => ({ ...state, count: state.count + 1 }),
    decrement: (state) => ({ ...state, count: state.count - 1 }),
    incrementBy: (state, amount: number) => ({
      ...state,
      count: state.count + amount,
    }),
  },
});

// Use in components
function Counter() {
  const count = store.useStore((state) => state.count);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={store.actions.increment}>Increment</button>
      <button onClick={store.actions.decrement}>Decrement</button>
      <button onClick={() => store.actions.incrementBy(5)}>Add 5</button>
    </div>
  );
}
```

## Advanced Usage

### Using Middleware

```typescript
const loggerMiddleware = (store) => (next) => (state) => {
  console.log('Previous:', store.getPreviousState());
  console.log('Next:', state);
  next(state);
};

const store = create({
  initialState: { count: 0 },
  actions: {
    increment: (state) => ({ ...state, count: state.count + 1 }),
  },
  middleware: [loggerMiddleware],
});
```

### Undo/Redo

```typescript
import { makeUndoable, createStore } from '@frauschert/yas';

const store = makeUndoable(createStore({ count: 0 }));

store.setState((state) => ({ count: state.count + 1 }));
store.setState((state) => ({ count: state.count + 1 }));

store.undo(); // Goes back one step
store.redo(); // Goes forward one step
store.clearHistory(); // Clears undo/redo history
```

### Custom Equality Function

```typescript
const store = create({
  initialState: { user: { name: 'John' } },
  actions: {
    updateUser: (state, name: string) => ({
      ...state,
      user: { ...state.user, name },
    }),
  },
  equalityFn: (state, previousState) =>
    state.user.name === previousState.user.name,
});
```

## API Reference

### create(options)

Creates a new store with React integration.

- `options.initialState`: The initial state object
- `options.actions`: Object containing state update functions
- `options.equalityFn?`: Custom equality function for state comparison
- `options.middleware?`: Array of middleware functions

### makeUndoable(store, maxHistorySize?)

Adds undo/redo capabilities to a store.

- `store`: The store to enhance
- `maxHistorySize`: Maximum number of history entries (default: 50)

## License

MIT
npm package: @fraym/auth
Description: JS client implementation of the auth service of Fr[ae]ym
Latest version: 1.0.20

# auth

Client implementation in JavaScript for the Fr[ae]ym service [auth](https://github.com/fraeym/fraeym).

## Docs

Please have a look at our [documentation](https://docs.freym.becklyn.app/docs/services/auth/introduction).

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
npm package: @fraym/deployments
Description: JS client implementation of the deployments service of Fr[ae]ym
Latest version: 1.0.20

# deployments

Client implementation in JavaScript for the Fr[ae]ym service [deployments](https://github.com/fraeym/fraeym).

## Docs

Please have a look at our [documentation](https://docs.freym.becklyn.app/docs/services/deployments/introduction).

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
npm package: @fraym/graphql
Description: Easily integrate Fr[ae]ym GraphQl endpoints into your JS app
Latest version: 1.0.20

# react

Easily integrate the Freym graphql api in yout project.
Use this package with the [urql](https://nearform.com/open-source/urql/docs/basics/react-preact/) GraphQl client.

## Docs

Please have a look at our [documentation](https://docs.freym.becklyn.app/docs/sdk/react).

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
npm package: @fraym/migrations
Description: JS client implementation of the migrations service of Freym
Latest version: 0.30.0

# migrations

Client implementation in JavaScript for the Freym service [migrations](https://github.com/fraym/migrations).

## Docs

Please have a look at our [documentation](https://docs.freym.becklyn.app/docs/services/migrations/introduction).

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
npm package: @fraym/projections
Description: JS client implementation of the projections service of Fr[ae]ym
Latest version: 1.0.20

# projections

Client implementation in JavaScript for the Fr[ae]ym service [projections](https://github.com/fraeym/fraeym).

## Docs

Please have a look at our [documentation](https://docs.freym.becklyn.app/docs/services/projections/introduction).

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
npm package: @fraym/react
Description: Easily integrate Fr[ae]ym into your react app
Latest version: 1.0.20

# react

Easily integrate the Freym graphql api in yout project.
Use this package with the [urql](https://nearform.com/open-source/urql/docs/basics/react-preact/) GraphQl client.

## Docs

Please have a look at our [documentation](https://docs.freym.becklyn.app/docs/sdk/react).

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
npm package: @fraym/streams
Description: JS client implementation of the streams service of Fr[ae]ym
Latest version: 1.0.20

# streams

Client implementation in JavaScript for the Fr[ae]ym service [streams](https://github.com/fraeym/fraeym).

## Docs

Please have a look at our [documentation](https://docs.freym.becklyn.app/docs/services/streams/grpc).

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
npm package: @fraym/sync
Description: JS client implementation of the sync service of Fr[ae]ym
Latest version: 1.0.20

# sync

Client implementation in JavaScript for the Fr[ae]ym service [sync](https://github.com/fraeym/fraeym).

## Docs

Please have a look at our [documentation](https://docs.freym.becklyn.app/docs/services/sync/sdk).

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.