Skip to content

rxstack/memory-service

Repository files navigation

The RxStack Memory Service Module

Node.js CI Maintainability Test Coverage

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.

About

In-memory @rxstack/platform service

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published