npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@ngx-cache/core

v9.0.0

Published

Cache utility for Angular

Downloads

3,379

Readme

@ngx-cache/core npm version npm downloads

Cache utility for Angular

CircleCI coverage tested with jest Conventional Commits Angular Style Guide

Please support this project by simply putting a Github star. Share this library with friends on Twitter and everywhere else you can.

Table of contents:

Getting started

Installation

You can install @ngx-cache/core using npm

npm install @ngx-cache/core --save

Examples

  • ng-seed/universal is an officially maintained seed project, showcasing common patterns and best practices for @ngx-cache/core.

Related packages

The following packages may be used in conjunction with @ngx-cache/core:

Recommended packages

The following package(s) have no dependency for @ngx-cache/core, however may provide supplementary/shorthand functionality:

  • @ngx-config/core: provides cache settings from the application settings loaded during application initialization

Adding @ngx-cache/core to your project (SystemJS)

Add map for @ngx-cache/core in your systemjs.config

'@ngx-cache/core': 'node_modules/@ngx-cache/core/bundles/core.umd.min.js'

app.module configuration

Import CacheModule using the mapping '@ngx-cache/core' and append CacheModule.forRoot({...}) within the imports property of app.module (considering the app.module is the core module in Angular application).

app.module.ts

...
import { CacheModule } from '@ngx-cache/core';
...

@NgModule({
  declarations: [
    AppComponent,
    ...
  ],
  ...
  imports: [
    ...
    CacheModule.forRoot()
  ],
  ...
  bootstrap: [AppComponent]
})

Settings

You can call the forRoot static method using CacheStaticLoader. By default, it is configured to have the cacheKey as 'NGX_CACHE', and both expiry and TTL are set to Number.MAX_VALUE.

You can customize this behavior (and ofc other settings) by supplying cache key and life span to CacheStaticLoader.

The following examples show the use of an exported function (instead of an inline function) for AoT compilation.

Setting up CacheModule to use CacheStaticLoader

...
import { CacheModule, CacheLoader, CacheStaticLoader } from '@ngx-cache/core';
...

export function cacheFactory(): CacheLoader {
  return new CacheStaticLoader({
    key: 'NGX_CACHE',
    lifeSpan: {
      "expiry": Number.MAX_VALUE,
      "TTL":  Number.MAX_VALUE
    }
  });
}

@NgModule({
  declarations: [
    AppComponent,
    ...
  ],
  ...
  imports: [
    CacheModule.forRoot({
      provide: CacheLoader,
      useFactory: (cacheFactory)
    }),
    ...
  ],
  ...
  bootstrap: [AppComponent]
})

CacheStaticLoader has one parameter:

  • providedSettings: CacheSettings : cache settings
    • key: string : cache key, used as object identifier while transferring between server and browser platforms (by default, 'NGX_CACHE')
    • lifeSpan: LifeSpan : cache life span (by default, both expiry and TTL are set to Number.MAX_VALUE)

:+1: Good! @ngx-cache/core is now ready to provide caching features.

Note: You need to perform browser (@ngx-cache/platform-browser), and (for Angular Universal) server (@ngx-cache/platform-server) platform implementations to begin using caching features.

SPA/Browser platform implementation

@ngx-cache/platform-browser provides the SPA/Browser platform implementation (ex: MemoryCacheService, LocalStorageCacheService).

You can find detailed information about the usage guidelines for the SPA/Browser platform here.

Server platform implementation

@ngx-cache/platform-server provides the server platform implementation (ex: FsCacheService).

You can find detailed information about the usage guidelines for the server platform here.

Usage

CacheService has the following properties:

  • key: gets the KEY of CacheService, provided by CacheLoader, used as a key during state transferring

CacheService has the following methods:

  • getInstance(loader?: CacheLoader, platformId?: any, injector?: Injector): gets the current instance of CacheService
  • normalizeKey(key: string | number): normalizes the given key
  • has(key: string | number): checks if an object is stored in CACHE, by key
  • get(key: string | number): gets some object from CACHE, with ReturnType (Scalar, Observable or Promise) and LifeSpan, by key
  • getWithMetadata(key: string | number): gets some object from CACHE, by key
  • set(key: string | number, value: any, returnType: ReturnType = ReturnType.Scalar, lifeSpan?: LifeSpan): puts some object to CACHE
  • remove(key: string | number, wild = false): removes some object from CACHE, by key
  • clear(): removes all objects from CACHE
  • dehydrate(): converts the data from CACHE to JSON (*ex: transferring CACHE data from the server platform to the client platform*)
  • 'rehydrate(json: any)': converts the given JSON value to CACHE data

The following example shows simple usage of the CacheService.

anyclass.ts

...
import { CacheService } from '@ngx-cache/core';

@Injectable()
export class AnyClass {
  constructor(private readonly cache: CacheService) {
    // note that CacheService is injected into a private property of AnyClass
  }

  // will retrieve 'some string value'
  getSomeStringValue(): string {
    if (this.cache.has('some-string'))
      return this.cache.get('some-string');

    this.cache.set('some-string', 'some string value');
    return 'some string value';
  }
}

Decorators

To enable experimental support for decorators, you must enable the experimentalDecorators compiler option in your tsconfig.json:

tsconfig.json

{
  "compilerOptions": {
    "target": "ES5",
    "experimentalDecorators": true
  }
}

Cached method decorator

Cached method decorator allows you to cache the an entire method (with less amount of code, as well as without injecting the CacheService), by putting the return value to CACHE on the first execution, and retrieve it from CACHE on the further executions.

Cached method has one parameter:

  • key: string : obviously used as a key when putting/getting the method's value

CacheKey parameter decorator

You can place CacheKey parameter decorator just before the parameter, and its value will be appended to the cache key.

The following example shows simple usage of the Cached and CacheKey decorators.

anyclass.ts

...
import { Cached, CacheKey } from '@ngx-cache/core';

export class AnyClass {
  // will retrieve 'some string value'
  @Cached('some-string')
  getSomeStringValue(): string {
    return 'some string value';
  }

  @Cached('some-string')
  getSomeStringValue2(@CacheKey param1: string): string {
    return 'some string value: ' + param1;
  }
}

...
// these are the first executions
console.log(anyClass.getSomeStringValue2('p1'));
console.log(anyClass.getSomeStringValue2('p2'));
...
// will retrieve 'some string value: p1' from `CACHE`
console.log(anyClass.getSomeStringValue2('p1'));

// will retrieve 'some string value: p1' from `CACHE`
console.log(anyClass.getSomeStringValue2('p2'));

Credits

License

The MIT License (MIT)

Copyright (c) 2019 Burak Tasci