Version 1.5
Version 1.5 of PURISTA is available, with a lot of features, enhancements, and a bunch of improvements and bug fixes. The documentation has been completely overwritten and more code examples are now available. This typescript backend framework is focusing on building backend applications simply and cleanly.
The application can:
- deploy to IoT/edge
- deploy as monolithic instances
- deploy in microservice style on Kubernetes
- deploy as serverless functions (FaaS) at different cloud vendors.
Awesome!
All this is possible From one code base, with no or low overhead and without touching the business logic! See: Deployment in handbook
You can also follow news on twitter @purista_js and get direct in touch at the Discord Chat.
PURISTA has now a CLI tool, which will help to set up a project and speed up the creation of new services, commands, and subscriptions. The biggest addition in version 1.5 is the integration of OpenTelemetry into the core functionality of PURISTA.
Subscriptions have been overhauled and are now aligned to commands. You have now the same functionality for in- and output transformations and hooks. Starting with version 1.5, subscriptions can return results, which will be published as custom event messages.
PURISTA version 1.5, introduces stores for configurations, states, and secrets. They are interfaces in the context of commands and subscriptions. This allows drop-in replacements for specific vendor solutions, without touching your business logic.
The first infrastructure-focused SDK @purista/k8s-sdk
is available now, which will help developers, to deploy their applications in microservice style on Kubernetes.
In addition to bug fixes, type, and documentation improvements, a set of breaking changes and name changes are coming with version 1.5. This was necessary to unify and improve naming and simplify constructors and method calls.
CLI tool
The CLI tool is a great helper for your daily business! It does not only allow you to set up and initialize new repositories. You can now quickly add new services or add commands and subscriptions to an existing service.
All needed files, like builders, and unit tests will be created for you.
If you add a new command or a new subscription, they will automatically be added to the corresponding service builder. Event names will be automatically added to a global enum in the repository.
You can start using PURISTA CLI with:
::: code-tabs#shell
@tab:active npm
npx @purista/cli init
@tab bun
bunx @purista/cli init
:::
Overhauled Subscriptions
Subscriptions are now much more powerful. The biggest change here is on the concept level. Previously, subscriptions were not able to return values. This has been changed!
Now, subscriptions can return values. If they return values, they need a corresponding output schema and an event name. The result is validated and then published to the event bridge as a custom message with the given even name.
This allows much more complex scenarios in the real world.
Also, subscriptions have now optional in- and output transformers and hooks, like commands. This reduces a lot of duplicate bloat code in many scenarios.
Opentelemetry support
OpenTelemetry support is now built into the core of the framework. This allows tracing and monitoring of your application by using an open standard protocol.
You can now use great third-party solutions like Grafana, Jaeger, ZipKin, Uptrace or solutions from your preferred cloud vendor, to get insights of your application.
Introducing stores
By providing stores for commands and subscriptions, it is possible to generalize a daily challenge. Most applications need to get some kind of configuration or secrets and they need to handle business states. For each of these specific requirements, there are hundreds of different ways and solutions.
With stores in PURISTA, they become a unified interface against your business logic. The actual implementation of the stores can be replaced with drop-in packages and modules. This will allow support of different solutions and cloud provider products:
Planned stores for integration of:
- AWS Systems Manager Parameter Store
- Azure App Configuration
- AWS Secrets Manager
- Azure Key Vault
- Google Cloud Secret Manager
- HashiCorp Vault ...and much more
You can also provide a custom solution, which can be implemented in a very simple way.
Kubernetes SDK
Using Kubernetes as the basement for an application and deploying a software solution as a bunch of microservices, has become a de facto standard for scalable applications, running on servers and in the cloud.
The SDK provides a simple helper, to get single services, based on PURISTA, quickly deployed in Kubernetes.
More SDKs will come later, to provide helpers for different vendors and deployment ways.
Improved and simplified interfaces
Some breaking changes were necessary to improve the naming and usage of methods and constructors. The constructors have been simplified. Also, some previously required parameters, like the logger, have become optional, to follow the pattern: "Default everywhere and allow overwriting in case it is needed".
Breaking changes
The constructor and method signatures have been changed for:
getInstance
in service buildersconstructor
of HttpServerService from@purista/httpserver
constructor
of DefaultEventBridge in@purista/core
constructor
of AmqpBridge in@purista/amqpbridge
Some names have been changed to get a more consistent naming:
The FunctionDefinitionBuilder is renamed to CommandDefinitionBuilder.
setFunction
is nowsetCommandFunction
in CommandDefinitionBuildergetFunction
is nowgetCommandFunction
in CommandDefinitionBuildersetFunction
is nowsetSubscriptionFunction
in SubscriptionDefinitionBuildergetFunction
is nowgetSubscriptionFunction
in SubscriptionDefinitionBuilderaddMessageType
is nowfilterForMessageType
in SubscriptionDefinitionBuilderonlyInstanceId
is nowfilterInstanceId
in SubscriptionDefinitionBuilderonlyPrincipalId
is nowfilterPrincipalId
in SubscriptionDefinitionBuildersentFrom
is nowfilterSentFrom
in SubscriptionDefinitionBuilderreceivedBy
is nowfilterReceivedBy
in SubscriptionDefinitionBuilderaddFunctionDefinition
is nowaddCommandDefinition
in ServiceBuildergetFunctionBuilder
is nowgetCommandBuilder
in ServiceBuildergetFunctionContextMock
is nowgetCommandContextMock
Additions
Mocks have now an optional parameter for a sinon.js sandbox.
getEventBridgeMock
has now optionalparameter sandboxgetLoggerMock
has now optionalparameter sandboxgetCommandContextMock
has now optional parameter sandboxgetSubscriptionContextMock
has now optionalparameter sandbox- new test helper
getCommandTransformContextMock
- new test helper
getSubscriptionTransformContextMock
- new test helper
getCommandErrorMessageMock
- new test helper
getCommandMessageMock
- new test helper
getCommandSuccessMessageMock
- new test helper
getCustomMessageMessageMock
What's next?
There is already a basic roadmap, which is available on GitHub. The next releases are focusing on:
- stabilizing and bug fixing
- support more event bridge solutions
- support of more vendor dependent store modules
- extending documentation
Also, last, but not least, building a community around PURISTA.