nact ⇒ node.js + actors ⇒ your services have never been so µ

Overview

nact Logo

nact ⇒ node.js + actors
your services have never been so µ

.github/workflows/npm-publish.yml  Coveralls DeepScan Grade

npm FOSSA Status js-semistandard-style we are reactive

Any and all feedback, comments and suggestions are welcome. Please open an issue if you find anything unclear or misleading in the documentation.

This is the repository for the javascript implementation. To view/contribute to the ReasonML code, go to http://github.com/ncthbrt/reason-nact. To contribute to the documentation, https://github.com/ncthbrt/nact.io is the place to make PRs.

Nact is redux but for the server

Servers today are very different from those even 10 years ago. So why are we still programming like it's the 90s?

Inspired by the approaches taken by Akka and Erlang, Nact is an open source Node.js framework which enables you to take control of your state to:

  • more effectively use memory
  • improve application resiliance
  • increase performance
  • reduce coupling

With out of the box support for event sourcing, and a considered implementation of the actor model, nact can work across a wide variety of domains.

Nact is no silver bullet, but it is evolving to tackle ever more demanding use cases. Perhaps one of them is yours?

To get started, head to https://nact.io

Note: Nact is currently only able to work on Node 8 and above.

The Next Branch

You might have noticed that the default branch has been changed to next. That is because Nact is undergoing a signficant rearchitecture.

The aim is to make modularity and extensibility a first class citizen of Nact, while still going to great pains as always to ensure a seamless upgrade path. This work will enable Nact to run in more contexts, such as the browser, deno and of course nact's original platform node. It will also allow for some exciting work in enabling location transparency and being able to more easily design and operate distributed architectures, especially in k8s and cloud contexts.

Of course due to the churn, and because the Nact API surface is expanding, it also seemed prudent to port the codebase over to typescript.

The changes will also require a rewrite of the documentation.

A note on regularity of commits

Nact sees daily usage by the project maintainer. The project is extremely stable and has been around for a few years. As the project made the deliberate choice to minimise dependencies, particularly runtime dependencies, there is not a huge need for updates to the project, besides for the occasional introduction of new features. This means that it can be a few months since the last commit. This does not mean the project is dead, but rather that it is working as designed.

How are you using Nact?

We would love to hear how you're using Nact. If you'd like to send feedback (bad or good) please email Natalie Cuthbert at [email protected] or join the Discord.

License

FOSSA Status

Comments
  • Typescript ActorRefs are unsoundly typed.

    Typescript ActorRefs are unsoundly typed.

    I've started a branch /refactor-typescript to address these issues.

    Problems present on current dev branch are as follows:

    1. Sender - The sender property makes sound typing impossible as it either couples the senders and recipients too tightly together or it removes the type information. Sender is to be removed in a soundly typed implemention. c.f. reason-nact
    2. Children - The Children Ref of a given actor are currently typed ActorRef<any> they should be instead changed to ActorRef<unknown> to indicate that by default we do not know what messages a child can handle in advance. In general any any should be removed from the public facing api.
    3. Context, SupervisionContext, Actor all need to include the message type of the parent as well as the current actor. This IS known by a child actor in advance and allows a child actor to freely message a parent without casting.
    4. Serialized messages and decoders/encoders - Messages coming back from the database cannot be soundly typed as this is out of nact's control. Persistent actors should be typed as Json by default unless they include a encoder/decoder tuple which maps Json to an actual type.

    Unrelated to soundness, but still important:

    1. References - Currently references include get methods and extraneous fields. These fields and methods need to be removed as references must be serializable to json without information loss.
    2. Separation of implementation details from public API - Nact is kind of like an iceburg. There is a lot of implementation details that users don't need to directly interact with unless they wish to extend the framework. It would be nice to make it clearer in source which files are part of the public API and which are not. Currently I removed implementation details to a folder called internals (for want of a better name)
    typescript 
    opened by ncthbrt 15
  • Nact in browser

    Nact in browser

    It'd be an interesting development to get nact working in the browser. There is no fundamental reason right now why it wouldn't be possible. This would enable a few things:

    • It could take the place of redux.
    • Allow very clean client-server communication via websockets/http2/etc
    feature 
    opened by ncthbrt 15
  • First draft of Logging feature implementation

    First draft of Logging feature implementation

    Fixes #21

    Description

    Added module 'nact/monitoring' with configureLogging as the most important functionality. It is an extension for ActorSystem that includes a loggingEngine in the system and provides of a property log to the context of each message processing.

    Related Issue

    This PR gives solution to issue #21.

    Motivation and Context

    I would like to participate in the development of this project and took a simple 'up for grabs' issue to start familiarizing with the code.

    How Has This Been Tested?

    This feature was tested with unit testing using mocha, chai and sinon.

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist:

    • [x] My code follows the code style of this project.
    • [ ] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [ ] I have read the CONTRIBUTING document.
    • [x] I have added tests to cover my changes.
    • [x] All new and existing tests passed.
    opened by iskandersierra 13
  • Suggestion - use generator yield for dispatching messages

    Suggestion - use generator yield for dispatching messages

    This framework looks extremely interesting.

    I was wondering, have you considered following a "redux-saga" like model for dispatching messages between actors? e.g.:

    const pingBehavior = async (msg, ctx) =>  {
      console.log(msg);
      await delay(500);
      yield dispatch(ctx.sender, ctx.name, ctx.self); // <--- here's where this differs from the docs example.
    };
    
    const ping = spawnStateless(system, pingBehavior, 'ping');
    

    Where dispatch() would just produce an object which is used by the framework to do the actual sending:

    const dispatch = (actor, msg, sender) => ({ DISPATCH: { actor, msg, sender }});
    

    This would make actor "behaviour" functions potentially side-effect free, which would have testability benefits.

    opened by samfrances 12
  • Snapshotting has one-state lag, leading to

    Snapshotting has one-state lag, leading to "Failed to take snapshot Error: data should not be null or undefined"

    Expected Behavior

    The snapshot is taken on the state after the first message, rather than on the null state.

    Current Behavior

    With snapshotEvery: 1 * messages, I noticed that the snapshot is always one state behind.

    This also leads to the error "Failed to take snapshot Error: data should not be null or undefined" when nact tries to persists the first time.

    Steps to Reproduce (for bugs)

    1. Spawn a persistant actor with the option {snapshotEvery: 1 * messages}
    2. Process a message to create the state object

    Context

    It'd be nice if the snapshot took place after the message is processed rather than before (if that's indeed what's happening). This would ensure that the snapshot is really up-to-date and avoid re-processing the last message every time the actor is restarted.

    Your Environment

    • Version used: 6.1.0 (and nact-persistence-postgres v6.0.2)
    • Environment name and version (e.g. Node v8.8): node 9.6
    • Operating System and version: OS X 10.10.5
    opened by ellis 10
  • Rewrite in TypeScript

    Rewrite in TypeScript

    Expected Behavior

    Type definitions for TypeScript (index.d.ts) should be provided.

    Current Behavior

    There is no type definition provided, either in nact or @types/nact.

    Possible Solution

    https://github.com/civilizeddev/nact/blob/master/lib/index.d.ts I wrote this above, using it in my own project. I just want to share it.

    if you contributors are pleased I think it would be better to rewrite the whole project in TypeScript.

    Context

    I am also Java and Scala developer, but currently working with TypeScript in Node. I was pleased that there is akka-like actor implementation even in JavaScript. Thank you.

    Your Environment

    • nact 7.2.1
    • Node 8.15.0 LTS
    • TypeScript 3.3.3
    opened by civilizeddev 8
  • Add optional 3rd argument sender to dispatch typing

    Add optional 3rd argument sender to dispatch typing

    Dispatch accepts a 3rd optional argument, but typing for dispatch does not reflect this. This PR updates this.

    Description

    Update dispatch typing to reflect its ability to accept a 3rd optional argument, sender.

    Related Issue

    https://github.com/ncthbrt/nact/issues/86

    Motivation and Context

    This allows for importing nact using import statements instead of require with typescript.

    How Has This Been Tested?

    Updated the changes here, and then ran repro steps in ticket and found issue to be resolved.

    Screenshots (if appropriate):

    Types of changes

    • [x ] Bug fix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist:

    • [x ] My code follows the code style of this project.
    • [ ] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [x ] I have read the CONTRIBUTING document.
    • [ ] I have added tests to cover my changes.
    • [ ] All new and existing tests passed.
    opened by Choongkyu 5
  • feat(actor): allow async initialStateFunc

    feat(actor): allow async initialStateFunc

    Add the ability to supply an actor with an async initialStateFunc

    Description

    This change includes:

    • Changing the type of the initialStateFunc for Actor to include functions that return a Promise<State>
    • Add Actor#waitUntilInitialized to wait until the state has been initialized
    • Calling waitUntilInitialized as part of Actor#handleMessage to prevent processing messages until the initialize function is called
    • Add unit tests to test using async initialStateFunc both under normal circumstances and when throwing an error

    Related Issue

    Motivation and Context

    This allows for Actors have state that is initialized asynchronously. This functional example that this was added to solve is having an actor that relies on some feature flag value that can only be retrieved using an asynchronous function.

    How Has This Been Tested?

    I have added unit tests to test that the dispatch works correctly when using an asynchronous initialStateFunc. Similarly, I've added a unit test to make sure that if an error is thrown in an asynchronous initialStateFunc it will call the onCrash handler correctly.

    Screenshots (if appropriate):

    Types of changes

    • [ ] Bug fix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)
    • [ ] Breaking change (fix or feature that would cause existing functionality to change)

    Checklist:

    • [x] My code follows the code style of this project.
    • [ ] My change requires a change to the documentation.
    • [ ] I have updated the documentation accordingly.
    • [x] I have read the CONTRIBUTING document.
    • [x] I have added tests to cover my changes.
    • [x] All new and existing tests passed.
    opened by AceFire6 3
  • setImmediate polyfill

    setImmediate polyfill

    setImmediate is used in Nact to implement non blocking macro task semantics as it is more performant for this use case than setTimeout (which in many implementations has a minimum duration). However this API is not available in most browsers. Polyfilling this API may allow Nact to work in browser

    enhancement 
    opened by ncthbrt 3
  • Could it be that `spawnPersistent` never returns if passed the same name twice?

    Could it be that `spawnPersistent` never returns if passed the same name twice?

    Expected Behavior

    I guess I'd expect spawnPersistent to either throw an error or return the existing child with the same name, rather than just not return.

    Current Behavior

    I was having a problem with not being able to query an actor twice: the first query succeeded, but then further queries timed out. I ended up tracking the problem down to spawnPersistent not returning when the same name was passed to it a second time.

    Steps to Reproduce (for bugs)

    1. Setup the system and actors like in https://nact.io/lesson/javascript/hierarchy
    2. Mistakenly pass a fixed name to the spawn function, e.g. instead of childActor = spawnUserContactService(ctx.self, userId) do something like childActor = spawnUserContactService(ctx.self, "userId")

    The Hierarchy documentation uses spawn, but I used spawnPersistent - I'm guess that's probably not important in this context.

    Your Environment

    • Version used: 7.0.1 (and nact-persistence-postgres v7.0.0)
    • Environment name and version: node 9.6
    • Operating System and version: OS X 10.10.5
    repro-required 
    opened by ellis 3
  • Clustering

    Clustering

    One of the major benefits of actor systems is location transparency; being able to communicate with remote actors in the same way as local actors is an important feature of this

    This feature could be as basic as having some means to allow actors to communicate when IP addresses are explicitly provided, or it could also include scheduling (deciding where actors should be put) and clustering.

    Another important question is how to ensure that this architecture is flexible enough to support different kinds of transports, while selecting some sane, easy to setup defaults.

    feature 
    opened by ncthbrt 3
  • dual package publishing using nanobundle

    dual package publishing using nanobundle

    Description

    Dual package publish config to support both CJS/ESM, dropped UMD format.

    Switch bundler from Rollup to nanobundle, which is esbuild wrapper.

    opened by cometkim 1
  • Bump minimist from 1.2.5 to 1.2.7 in /@nact/core

    Bump minimist from 1.2.5 to 1.2.7 in /@nact/core

    Bumps minimist from 1.2.5 to 1.2.7.

    Changelog

    Sourced from minimist's changelog.

    v1.2.7 - 2022-10-10

    Commits

    • [meta] add auto-changelog 0ebf4eb
    • [actions] add reusable workflows e115b63
    • [eslint] add eslint; rules to enable later are warnings f58745b
    • [Dev Deps] switch from covert to nyc ab03356
    • [readme] rename and add badges 236f4a0
    • [meta] create FUNDING.yml; add funding in package.json 783a49b
    • [meta] use npmignore to autogenerate an npmignore file f81ece6
    • Only apps should have lockfiles 56cad44
    • [Dev Deps] update covert, tape; remove unnecessary tap 49c5f9f
    • [Tests] add aud in posttest 228ae93
    • [meta] add safe-publish-latest 01fc23f
    • [meta] update repo URLs 6b164c7

    v1.2.6 - 2022-03-21

    Commits

    • test from prototype pollution PR bc8ecee
    • isConstructorOrProto adapted from PR c2b9819
    • security notice for additional prototype pollution issue ef88b93
    Commits
    • c590d75 v1.2.7
    • 0ebf4eb [meta] add auto-changelog
    • e115b63 [actions] add reusable workflows
    • 01fc23f [meta] add safe-publish-latest
    • f58745b [eslint] add eslint; rules to enable later are warnings
    • 228ae93 [Tests] add aud in posttest
    • 236f4a0 [readme] rename and add badges
    • ab03356 [Dev Deps] switch from covert to nyc
    • 49c5f9f [Dev Deps] update covert, tape; remove unnecessary tap
    • 783a49b [meta] create FUNDING.yml; add funding in package.json
    • Additional commits viewable in compare view
    Maintainer changes

    This version was pushed to npm by ljharb, a new releaser for minimist since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump minimatch from 3.0.4 to 3.1.2

    Bump minimatch from 3.0.4 to 3.1.2

    Bumps minimatch from 3.0.4 to 3.1.2.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump qs from 6.5.2 to 6.5.3 in /@nact/core

    Bump qs from 6.5.2 to 6.5.3 in /@nact/core

    Bumps qs from 6.5.2 to 6.5.3.

    Changelog

    Sourced from qs's changelog.

    6.5.3

    • [Fix] parse: ignore __proto__ keys (#428)
    • [Fix] utils.merge: avoid a crash with a null target and a truthy non-array source
    • [Fix] correctly parse nested arrays
    • [Fix] stringify: fix a crash with strictNullHandling and a custom filter/serializeDate (#279)
    • [Fix] utils: merge: fix crash when source is a truthy primitive & no options are provided
    • [Fix] when parseArrays is false, properly handle keys ending in []
    • [Fix] fix for an impossible situation: when the formatter is called with a non-string value
    • [Fix] utils.merge: avoid a crash with a null target and an array source
    • [Refactor] utils: reduce observable [[Get]]s
    • [Refactor] use cached Array.isArray
    • [Refactor] stringify: Avoid arr = arr.concat(...), push to the existing instance (#269)
    • [Refactor] parse: only need to reassign the var once
    • [Robustness] stringify: avoid relying on a global undefined (#427)
    • [readme] remove travis badge; add github actions/codecov badges; update URLs
    • [Docs] Clean up license text so it’s properly detected as BSD-3-Clause
    • [Docs] Clarify the need for "arrayLimit" option
    • [meta] fix README.md (#399)
    • [meta] add FUNDING.yml
    • [actions] backport actions from main
    • [Tests] always use String(x) over x.toString()
    • [Tests] remove nonexistent tape option
    • [Dev Deps] backport from main
    Commits
    • 298bfa5 v6.5.3
    • ed0f5dc [Fix] parse: ignore __proto__ keys (#428)
    • 691e739 [Robustness] stringify: avoid relying on a global undefined (#427)
    • 1072d57 [readme] remove travis badge; add github actions/codecov badges; update URLs
    • 12ac1c4 [meta] fix README.md (#399)
    • 0338716 [actions] backport actions from main
    • 5639c20 Clean up license text so it’s properly detected as BSD-3-Clause
    • 51b8a0b add FUNDING.yml
    • 45f6759 [Fix] fix for an impossible situation: when the formatter is called with a no...
    • f814a7f [Dev Deps] backport from main
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump decode-uri-component from 0.2.0 to 0.2.2 in /@nact/core

    Bump decode-uri-component from 0.2.0 to 0.2.2 in /@nact/core

    Bumps decode-uri-component from 0.2.0 to 0.2.2.

    Release notes

    Sourced from decode-uri-component's releases.

    v0.2.2

    • Prevent overwriting previously decoded tokens 980e0bf

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.1...v0.2.2

    v0.2.1

    • Switch to GitHub workflows 76abc93
    • Fix issue where decode throws - fixes #6 746ca5d
    • Update license (#1) 486d7e2
    • Tidelift tasks a650457
    • Meta tweaks 66e1c28

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.1

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump decode-uri-component from 0.2.0 to 0.2.2

    Bump decode-uri-component from 0.2.0 to 0.2.2

    Bumps decode-uri-component from 0.2.0 to 0.2.2.

    Release notes

    Sourced from decode-uri-component's releases.

    v0.2.2

    • Prevent overwriting previously decoded tokens 980e0bf

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.1...v0.2.2

    v0.2.1

    • Switch to GitHub workflows 76abc93
    • Fix issue where decode throws - fixes #6 746ca5d
    • Update license (#1) 486d7e2
    • Tidelift tasks a650457
    • Meta tweaks 66e1c28

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.1

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Releases(v7.3.0)
  • v7.3.0(Jun 12, 2020)

  • v7.1.0(May 18, 2018)

    This new feature is especially for architectures which may require a CQRS approach.

    A persistentQuery is similar to an actor, except it cannot cannot persist messages, does not have context and checks the event store each time it is invoked for messages it has not yet processed (later versions may may use of streaming). Additionally a persistent query supports snapshotting of state, making it ideal as an event model.

    Usage is below, however a more detailed tutorial is to follow on nact.io once the reason version is published:

    let query = persistentQuery(
          system,
          (result, msg) => apply(result,msg),
          'persistenceKey',
          { cacheDuration: 10 *minutes, snapshotKey: 'test', snapshotEvery: 5 * messages }
    );
    let result = await query(); 
    
    Source code(tar.gz)
    Source code(zip)
  • v7.0.0(May 10, 2018)

    Changes

    • Former behaviour was for an stateful/persistent actor to shutdown if it the next state was a falsey value. This has been removed as it isn't hugely useful and is a little bit too implicit for my liking. Think it creates confusion more than anything else.
    • Adjusted snapshotting behavior to discretely snapshot. This means that snapshots only are scheduled after a message has been completely processed.
    • Removed some branching.
    • Removed some allocations
    • Added hooks for encoders and decoders for both persistent messages and snapshots. This will make the reason wrapper of nact a lot more efficient. (It's currently performing a json serialize/deserialize every message, a massive hack that was done as an emergency fix in a production scenario)
    Source code(tar.gz)
    Source code(zip)
  • v6.0.1(Apr 11, 2018)

  • v6.0.0(Apr 4, 2018)

  • v5.0.0(Mar 6, 2018)

    Specifying a supervision policy has now been moved to the child rather than the parent. This is to allow ReasonNact to correctly type the policy and include the message which resulted in the fault. Please see https://nact.io/lesson/javascript/supervision for changes to usage.

    Source code(tar.gz)
    Source code(zip)
  • v4.3.0(Dec 20, 2017)

  • v4.1.0(Dec 5, 2017)

    The query function can now optionally accept a message function. This function takes in the temporary actor reference and returns the message to dispatch to the sender. This is to cater for the use case where actors expect an actor reference in a message.

    Source code(tar.gz)
    Source code(zip)
  • v3.1.5(Nov 20, 2017)

  • v3.1.4(Nov 4, 2017)

  • v3.1.3(Oct 31, 2017)

  • v3.1.1(Oct 30, 2017)

  • v3.1.0(Oct 28, 2017)

    While strictly speaking a breaking change, I'm not bumping the version number as this comes hours after version 3's breaking change which touches code in the same ways.

    I decided to make the query, dispatch and stop methods functions in the public interface. This will make it significantly simpler to later pass remote actor references as JSON.

    Source code(tar.gz)
    Source code(zip)
  • v3.0.0(Oct 28, 2017)

    • Dispatch has been removed from the context object. While handy, it was actually that much less verbose and meant that users need to learn two ways of dispatching messages. Fix for Issue #14
    • Stateless actors are now concurrent. This means they can process more than one message at a time. This allows a performance increase without a resultant increase in complexity. Enhancement #13
    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Oct 23, 2017)

  • v2.0.3(Oct 23, 2017)

Owner
Natalie Cuthbert
CTO and co-founder @Stitch-Money. Enthusiast Game Dev and 3d Artist. Open Source Maintainer. Toolmaker. She/her - 🏳️‍🌈⚧️
Natalie Cuthbert
A simple boilerplate generator for your node express backend project! 🚀

A simple boilerplate generator for your node express backend project! ??

Gunvant Sarpate 35 Sep 26, 2022
The most powerful headless CMS for Node.js — built with GraphQL and React

A scalable platform and CMS to build Node.js applications. schema => ({ GraphQL, AdminUI }) Keystone Next is a preview of the next major release of Ke

KeystoneJS 7.3k Jan 4, 2023
:desktop_computer: Simple and powerful server for Node.js

server.js for Node.js Powerful server for Node.js that just works so you can focus on your awesome project: // Include it and extract some methods for

Francisco Presencia 3.5k Dec 31, 2022
DDD/Clean Architecture inspired boilerplate for Node web APIs

Node API boilerplate An opinionated boilerplate for Node web APIs focused on separation of concerns and scalability. Features Multilayer folder struct

Talysson de Oliveira Cassiano 3k Dec 30, 2022
Elegant and all-inclusive Node.Js web framework based on TypeScript. :rocket:.

https://foalts.org What is Foal? Foal (or FoalTS) is a Node.JS framework for creating web applications. It provides a set of ready-to-use components s

FoalTS 1.7k Jan 4, 2023
🚀 A RESTful API generator for Node.js

A RESTful API generator rest-hapi is a hapi plugin that generates RESTful API endpoints based on mongoose schemas. It provides a powerful combination

Justin Headley 1.2k Dec 31, 2022
wolkenkit is an open-source CQRS and event-sourcing framework based on Node.js, and it supports JavaScript and TypeScript.

wolkenkit wolkenkit is a CQRS and event-sourcing framework based on Node.js. It empowers you to build and run scalable distributed web and cloud servi

the native web 1.1k Dec 26, 2022
A Programming Environment for TypeScript & Node.js built on top of VS Code

Programming Environment for TypeScript & Node.js A battery-included TypeScript framework built on top of Visual Studio Code Website Kretes is a progra

Kretes 677 Dec 11, 2022
Full stack CQRS, DDD, Event Sourcing framework for Node.js

reSolve is a full stack functional JavaScript framework. CQRS - independent Command and Query sides. DDD Aggregate support. Event sourcing - using eve

ReImagined 709 Dec 27, 2022
Clock and task scheduler for node.js applications, providing extensive control of time and callback scheduling in prod and test code

#zeit A node.js clock and scheduler, intended to take place of the global V8 object for manipulation of time and task scheduling which would be handle

David Denton 12 Dec 21, 2021
In-memory filesystem with Node's API

In-memory filesystem with Node's API

Vadim Dalecky 1.4k Jan 4, 2023
Micro type-safe wrapper for Node.js AMQP library and RabbitMQ management.

Micro type-safe wrapper for AMQP library and RabbitMQ management Description Section in progress. Getting Started Qupi can be installed by Yarn or NPM

Grzegorz Lenczuk 2 Oct 5, 2021
💻 Simple and flexible CLI Tool for your daily JIRA activity (supported on all OSes)

jirax ⭐ If you are using this tool or you like it, Star on GitHub — it helps! A CLI tool for JIRA for day to day usage with JIRA.Speed up your JIRA ac

জুনিপ 56 Oct 4, 2022
✍ It has never been so easy to document your things!

Docz makes it easy to write and publish beautiful interactive documentation for your code. Create MDX files showcasing your code and Docz turns them i

Docz 23.1k Jan 9, 2023
➰ It's never been easier to try nodejs modules!

trymodule A simple cli tool for trying out different nodejs modules. Installation npm install -g trymodule Usage trymodule colors Downloads the module

Victor Bjelkholm 1.1k Dec 3, 2022
A daily activity tracking application that helps to organize your daily tasks and keep track of tasks that have been completed, or yet to be completed.

To-Do-List This is my To-Do List project in the Microverse curriculum. Built With HTML CSS Javascript (Webpack) GitHub Live Demo Live Demo Link Gettin

Hammed Adisa 8 May 7, 2022
As my pepper bot's users have been requesting me for its source code

Discord Bot As my pepper bot's users have been requesting me for its source code. Here it is. Enjoy! ! Invite Pepper ( See how it works ) To invite th

Husnul Jahneer 4 Nov 6, 2022
This is personal portfolio website that features the projects I have been working on, all the contact information is provided as well.

Personal-Portfolio This is personal portfolio website. Built With React CSS VS code Live Demo Live Demo Getting Started Prerequisites: Create an accou

Meri Gogichashvili 30 Jan 6, 2023
Demonstration of how to use statecharts as and with actors in Ember.js

statechart-actors This app demonstrate how we can use ember-statecharts and XState's actor feature together. The demo-use case: Show a blog posts over

Michael Klein 3 Jan 9, 2022
Mailbox is the predictable states & transitions container for actors.

Mailbox (turns XState Machine into a REAL Actor) Mailbox is an NPM module built on top of the XState machine, by adding a message queue to the XState

Huan (李卓桓) 40 Aug 24, 2022