@rxstack/memory-service
v0.8.0
Published
RxStack Memory Service
Downloads
29
Readme
The RxStack Memory Service Module
In-memory data storage that implements @rxstack/platform adapter API and querying syntax.
Table of content
Installation
npm install @rxstack/memory-service --save
Setup
MemoryServiceModule
needs to be registered in the application
. Let's create the application:
import {Application, ApplicationOptions} from '@rxstack/core';
import {MemoryServiceModule} from '@rxstack/memory-service';
export const APP_OPTIONS: ApplicationOptions = {
imports: [
MemoryServiceModule
],
providers: [
// ...
]
};
new Application(APP_OPTIONS).start();
Usage
First we need to create model interface
and InjectionToken
:
import {InjectionToken} from 'injection-js';
import {MemoryService} from '@rxstack/memory-service';
export interface Product {
id: string;
name: string;
}
export const PRODUCT_SERVICE = new InjectionToken<MemoryService<Product>>('PRODUCT_SERVICE');
then register it in the application provides:
import {ApplicationOptions} from '@rxstack/core';
import {MemoryService} from '@rxstack/memory-service';
export const APP_OPTIONS: ApplicationOptions = {
// ...
providers: [
{
provide: PRODUCT_SERVICE,
useFactory: () => {
return new MemoryService({ idField: 'id', collection: 'products', defaultLimit: 25 });
},
deps: [],
},
]
};
Read more about platform services
Matcher
Matcher
is used to filter the entries. If you need a custom matcher then implement MatherInterface
:
import {FilterCallback, MatcherInterface} from '@rxstack/memory-service';
import {Injectable} from 'injection-js';
@Injectable()
export class MyCustomMatcher implements MatcherInterface {
match(query: {[key: string]: any}): FilterCallback {
// your custom logic
}
}
and register it in the application providers:
import {ApplicationOptions} from '@rxstack/core';
import {MATCHER_TOKEN} from '@rxstack/memory-service';
export const APP_OPTIONS: ApplicationOptions = {
// ...
providers: [
// ...
{ provide: MATCHER_TOKEN, useClass: MyCustomMatcher },
]
};
MyCustomMatcher
will replace the original matcher
Sorter
Sorter
is used to sort the entries. If you need a custom sorter then implement SorterInterface
:
import {SorterInterface} from '@rxstack/memory-service';
import {SortInterface} from '@rxstack/query-filter';
import {Injectable} from 'injection-js';
@Injectable()
export class MyCustomSorter implements SorterInterface {
sort(sort: SortInterface): ComparisonCallback {
// your custom logic
}
}
and register it in the application providers:
import {ApplicationOptions} from '@rxstack/core';
import {SORTER_TOKEN} from '@rxstack/memory-service';
export const APP_OPTIONS: ApplicationOptions = {
// ...
providers: [
// ...
{ provide: SORTER_TOKEN, useClass: MyCustomSorter },
]
};
MyCustomSorter
will replace the original sorter
License
Licensed under the MIT license.