![Oracle Drags Its Feet in the JavaScript Trademark Dispute](https://cdn.sanity.io/images/cgdhsj6q/production/919c3b22c24f93884c548d60cbb338e819ff2435-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
A lightweight **CQRS** module for [Angular](https://angular.io) framework. Action handler and query handler module are loaded with lazy-load at the moment of action or query call. Action handler and query handler are Angular modules and can use Angular li
A lightweight CQRS module for Angular framework. Action handler and query handler module are loaded with lazy-load at the moment of action or query call. Action handler and query handler are Angular modules and can use Angular libraries in dependencies. Just 1.6kb
minified and gzipped.
$ npm install --save ng-cqrs
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { environment } from '../environments/environment';
import { AppComponent } from './app.component';
import { CqrsModule } from 'ng-cqrs';
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
CqrsModule.forRoot({
sagas : [HeroesGameSagas],
registry: [
{
impl : KillDragonAction,
handler: () => import('./actions/kill-dragon/kill-dragon.handler').then(mod => mod.KillDragonHandler)
}
]
})
],
providers: [],
bootstrap: [AppComponent],
})
export class AppModule {}
In this model, each action is called a Action. When a action is sent, the application responds to it.
Let's create for example a ShowNotificationAction
action to display notifications. Let's see how the action looks:
export class ShowNotificationAction
{
static readonly type = 'ShowNotificationAction';
constructor(
public readonly type: string,
public readonly text: string,
)
{
}
}
The ActionBus
is a stream of actions. It delegates actions to the equivalent handlers. Each action must have an appropriate action handler:
@NgModule()
export class ShowNotificationHandler implements IActionHandler<ShowNotificationAction>
{
constructor(private readonly actionBus: ActionBus)
{
}
async execute(action: ShowNotificationAction)
{
// Load PNotify script
await this.actionBus.execute(new LoadScriptsAction('pnotify'));
// Show notice
new PNotify({
text : action.text,
icon : false,
buttons : {
closer : true,
sticker: false
});
}
}
All actions and queries work like Angular modules and are loaded with lazy-load at the time of a command or request. With this method of work, each change in the application is determined by the appearance of the action. The logic is encapsulated in handlers.
constructor(private readonly actionBus: ActionBus)
{
this.actionBus.execute(new ShowNotificationAction('success', 'Ok'))
}
Sagas are an extremely powerful feature. A single saga may listen for 1..* actions. Using the RxJS library, it can combine, merge, filter or apply other RxJS operators on the event stream. Each saga returns an Observable which contains a action. This action is dispatched asynchronously.
@Injectable()
export class HeroesGameSagas {
@Saga()
dragonKilled = (events$: Observable<any>): Observable<INgEvent> => {
return events$.pipe(
ofType(HeroKilledDragonEvent),
map((event) => new DropAncientItemAction(event.heroId, fakeItemID)),
);
}
}
The QueryBus
follows the same pattern as the ActionsBus
. Example Query Handler:
@NgModule()
export class GetEmptyBlockHandler implements IQueryHandler<GetEmptyBlockQuery>
{
async execute(query: GetEmptyBlockQuery): Promise<Element>
{
const block = document.querySelector('#empty_block');
// logic
return block;
}
}
A working example is available in src/app
.
FAQs
A lightweight **CQRS** module for [Angular](https://angular.io) framework. Action handler and
The npm package ng-cqrs receives a total of 1 weekly downloads. As such, ng-cqrs popularity was classified as not popular.
We found that ng-cqrs demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.