0.8.0 • Published 12 months ago
@rxstack/memory-service v0.8.0
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 --saveSetup
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 },
]
};
MyCustomMatcherwill 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 },
]
};
MyCustomSorterwill replace the original sorter
License
Licensed under the MIT license.