GithubHelp home page GithubHelp logo

kevronosx / rosmaro Goto Github PK

View Code? Open in Web Editor NEW

This project forked from lukaszmakuch/rosmaro

0.0 0.0 0.0 4.5 MB

Visual automata-based programming in functional JavaScript

Home Page: https://rosmaro.js.org

License: MIT License

JavaScript 100.00%

rosmaro's Introduction

Rosmaro logo

Rosmaro

Reacting to the same action in different ways due to what happened in the past may be a challenge.

Rosmaro is a framework for writing functions like this:

({state, action}) => ({state, result})

Rosmaro dispatch

Check out the Rosmaro documentation at rosmaro.js.org!

Get Rosmaro using npm: npm i rosmaro.

Rosmaro places great emphasis on two programming paradigms:

  • Visual programming - changes of behavior are drawn using the Rosmaro visual editor.
  • Functional programming - the whole model is a pure function built out of pure functions and pure data.

First, you draw a graph. Then, you assign functional code to its nodes.

It gives you:

  • Automata-based dispatch - actions are dispatched to handlers based on the current node of the state machine. There's no need to check the current state.
  • The right model for the job - the behavior-related state is expressed by a state machine, while the data-related state lives in a dictionary.
  • Existing tooling - it's easy to use with redux and redux-saga.

Rosmaro models support:

  • Node multiplication - a node may be multiplied using a function of the context.
  • Reuse and composition - models may be included within other models.
  • Lenses - thanks to Ramda lenses the shape and size of your data-related state may be easily adjusted.
  • Orthogonal regions - multiple regions may be active at the same time. One of the ways to avoid state explosion.
  • Subgraphs - nodes of state machines may contain other state machines.

News

An example

  1. Use the Rosmaro visual editor to draw a state machine. The graph of The Cursed Prince

  2. Write some functional code.

This example makes use of the rosmaro-binding-utils package.

const Frog = handler({
  INTRODUCE_YOURSELF: () => "Ribbit! Ribbit!",
});

const Prince = handler({
  INTRODUCE_YOURSELF: () => "I am The Prince of Rosmaro!",
  EAT: ({action}) => action.dish === 'pizza' ? {arrow: 'ate a pizza'} : undefined
});
  1. Enjoy your ({state, action}) => ({state, result}) function!
[
  {type: 'INTRODUCE_YOURSELF'}, // 'I am The Prince of Rosmaro!'
  {type: 'EAT', dish: 'yakisoba'}, // undefined
  {type: 'INTRODUCE_YOURSELF'}, // 'I am The Prince of Rosmaro!'
  {type: 'EAT', dish: 'pizza'}, // undefined
  {type: 'INTRODUCE_YOURSELF'} // 'Ribbit! Ribbit!'
].forEach(action => console.log(
  ({state} = model({state, action})).result.data
));

The complete code of this example can be found on GitHub.

Documentation

Blog posts

Examples

  • Bunny App a wizard implemented in Rosmaro, React, Redux and Redux-Saga.
  • TodoMVC the famous TodoMVC demo app
  • bool-less-todo a todo app implemented without boolean values and without variables

Utilities

License

Rosmaro is licensed under the MIT license.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.