https://github.com/rxstack/memory-service
In-memory @rxstack/platform service
https://github.com/rxstack/memory-service
memory nodejs platform rxstack typescript
Last synced: 28 days ago
JSON representation
In-memory @rxstack/platform service
- Host: GitHub
- URL: https://github.com/rxstack/memory-service
- Owner: rxstack
- License: mit
- Created: 2018-10-30T16:21:26.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-10-28T07:58:18.000Z (over 1 year ago)
- Last Synced: 2025-03-25T09:21:34.583Z (about 1 year ago)
- Topics: memory, nodejs, platform, rxstack, typescript
- Language: TypeScript
- Homepage:
- Size: 457 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# The RxStack Memory Service Module
[](https://github.com/rxstack/memory-service/actions/workflows/node.js.yml)
[](https://codeclimate.com/github/rxstack/memory-service/maintainability)
[](https://codeclimate.com/github/rxstack/memory-service/test_coverage)
> In-memory data storage that implements [@rxstack/platform adapter API and querying syntax](https://github.com/rxstack/rxstack/tree/master/packages/platform#services).
## Table of content
- [Instalation](#instalation)
- [Setup](#setup)
- [Usage](#usage)
- [Matcher](#matcher)
- [Sorter](#sorter)
```
npm install @rxstack/memory-service --save
```
## Setup
`MemoryServiceModule` needs to be registered in the `application`. Let's create the application:
```typescript
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();
```
First we need to create `model interface` and `InjectionToken`:
```typescript
import {InjectionToken} from 'injection-js';
import {MemoryService} from '@rxstack/memory-service';
export interface Product {
id: string;
name: string;
}
export const PRODUCT_SERVICE = new InjectionToken>('PRODUCT_SERVICE');
```
then register it in the application provides:
```typescript
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](https://github.com/rxstack/rxstack/tree/master/packages/platform#services)
## Matcher
`Matcher` is used to filter the entries. If you need a custom matcher then implement `MatherInterface`:
```typescript
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:
```typescript
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`:
```typescript
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:
```typescript
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](LICENSE).