An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

          

# The RxStack Memory Service Module

[![Node.js CI](https://github.com/rxstack/memory-service/actions/workflows/node.js.yml/badge.svg)](https://github.com/rxstack/memory-service/actions/workflows/node.js.yml)
[![Maintainability](https://api.codeclimate.com/v1/badges/9e8e95e4e45995eb5ddf/maintainability)](https://codeclimate.com/github/rxstack/memory-service/maintainability)
[![Test Coverage](https://api.codeclimate.com/v1/badges/9e8e95e4e45995eb5ddf/test_coverage)](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)

## Installation

```
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();
```

## Usage

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).