0.7.0 • Published 3 years ago

@rxstack/memory-service v0.7.0

Weekly downloads
1
License
MIT
Repository
github
Last release
3 years ago

The RxStack Memory Service Module

Maintainability Test Coverage Build Status

In-memory data storage that implements @rxstack/platform adapter API and querying syntax.

Table of content

Installation

npm install @rxstack/memory-service --save

// peer dependencies
npm install --no-save @rxstack/core@^0.7 @rxstack/exceptions@^0.6 @rxstack/platform@^0.7 @rxstack/query-filter@^0.6 @rxstack/security@^0.7 @rxstack/async-event-dispatcher@^0.6 @rxstack/service-registry@^0.6 winston@^3.3.3

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.

0.7.0

3 years ago

0.6.0

4 years ago

0.5.0

4 years ago

0.3.0

5 years ago

0.2.0

5 years ago

0.1.8

5 years ago

0.1.7

5 years ago

0.1.6

5 years ago

0.1.5

5 years ago

0.1.4

5 years ago

0.1.3

5 years ago

0.1.2

5 years ago

0.1.1

5 years ago

0.1.0

6 years ago