Reactor is a dynamic, concurrent, dependency resolving saga orchestrator.
Find a file
James Harton e8ac9a1d90
feat(map): Add the ability to map over elements of a collection inside a reactor. (#123)
* feat(map): Add the ability to map over elements of a collection inside a reactor.

* improvement: throw a more helpful error when a step returns an invalid result.

* fix: automatically pass extra arguments from the map step to nested steps.

They can't be referred to directly because they may be added to the graph
at runtime, and may depend on steps which have been completed and their
results discarded because they have no dependents at that time.

* fix: spurious test failures seemingly caused by `Mimic`.
2024-07-18 21:56:46 +12:00
.github chore: add dependabot configuration. 2023-06-08 13:26:28 +12:00
.vscode feat(map): Add the ability to map over elements of a collection inside a reactor. (#123) 2024-07-18 21:56:46 +12:00
config feat: implement basic reactor behaviour. (#1) 2023-05-10 16:27:18 +12:00
documentation feat(map): Add the ability to map over elements of a collection inside a reactor. (#123) 2024-07-18 21:56:46 +12:00
lib feat(map): Add the ability to map over elements of a collection inside a reactor. (#123) 2024-07-18 21:56:46 +12:00
logos docs: Add reactor logos. 2024-06-14 17:58:03 +12:00
test feat(map): Add the ability to map over elements of a collection inside a reactor. (#123) 2024-07-18 21:56:46 +12:00
.check.exs chore: add mix spark.cheat_sheets to mix check. 2023-09-28 09:07:53 +13:00
.doctor.exs chore: Add doctor. 2023-06-23 15:19:46 +12:00
.formatter.exs feat(map): Add the ability to map over elements of a collection inside a reactor. (#123) 2024-07-18 21:56:46 +12:00
.gitignore init 2023-04-18 18:23:04 -04:00
.tool-versions chore: Update erlang and elixir. 2024-02-26 08:35:19 +13:00
CHANGELOG.md chore: release version v0.8.5 2024-07-10 20:17:13 +12:00
FUNDING.yml chore: Add FUNDING.yml. 2024-03-21 15:17:12 +13:00
LICENSE chore: Add Alembic to copyright and readme. 2023-06-15 14:57:32 +12:00
mix.exs feat(map): Add the ability to map over elements of a collection inside a reactor. (#123) 2024-07-18 21:56:46 +12:00
mix.lock feat(map): Add the ability to map over elements of a collection inside a reactor. (#123) 2024-07-18 21:56:46 +12:00
README.md chore: release version v0.8.5 2024-07-10 20:17:13 +12:00

Logo Light Logo Dark

Reactor

Elixir CI License: MIT Hex version badge

Reactor is a dynamic, concurrent, dependency resolving saga orchestrator.

Woah. That's a lot. Let's break it down:

  • Saga orchestrator A saga is a way of providing transaction-like semantics across multiple distinct resources.
  • Dependency resolving reactor allows you to describe the dependencies between your saga steps using arguments which are converted into a DAG and used to compute execution order.
  • Concurrent unless otherwise specified reactor will run as many steps as possible concurrently whilst taking into account the results of the dependency resolution.
  • Dynamic whilst you can define a reactor statically using our awesome DSL, you can also build workflows dynamically - and even add steps while the reactor is running.

saga pattern

Sponsors

Thanks to Alembic Pty Ltd for sponsoring a portion of this project's development.

Installation

The package can be installed by adding reactor to your list of dependencies in mix.exs:

def deps do
  [
    {:reactor, "~> 0.8.5"}
  ]
end

Documentation

Documentation for the latest release will be available on hexdocs and for the main branch.

Contributing

  • To contribute updates, fixes or new features please fork and open a pull-request against main.
  • Please use conventional commits - this allows us to dynamically generate the changelog.
  • Feel free to ask any questions on the #reactor channel on the Ash Discord.

Licence

reactor is licensed under the terms of the MIT license. See the LICENSE file in this repository for details.