Skip to content

A Proxy-based lightweight library to add Continuation-Local Storage aka (CLS) to class contructor, method calls, getters and setters.

License

Notifications You must be signed in to change notification settings

aigoncharov/cls-class-proxy

Repository files navigation

cls-class-proxy Build Status

A Proxy-based lightweight library to add Continuation-Local Storage aka (CLS) to class contructor, method calls, getters and setters.

Installation

  1. Install libraries

    npm i cls-class-proxy cls-hooked
    
  2. Install typings if you use typescript

    npm i -D @types/cls-hooked
    

Quick start

Decorator-based

  1. Set in your tsconfig.json

    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  2. In your code

    import { getNamespace } from 'cls-hooked'
    import { proxify, CLS_CLASS_PROXY_NAMESPACE_NAME } from 'cls-class-proxy'
    
    @proxify()
    class Example {
      constructor() {
        const namespace = getNamespace(CLS_CLASS_PROXY_NAMESPACE_NAME)
        // At this point the namespace has an active contex (namspace.active returns the context)
        // You can set and get data for the context
      }
      method1() {
        const namespace = getNamespace(CLS_CLASS_PROXY_NAMESPACE_NAME)
        // At this point the namespace has an active contex (namspace.active returns the context)
        // You can set and get data for the context
      }
      get prop1() {
        const namespace = getNamespace(CLS_CLASS_PROXY_NAMESPACE_NAME)
        // At this point the namespace has an active contex (namspace.active returns the context)
        // You can set and get data for the context
      }
      set prop2() {
        const namespace = getNamespace(CLS_CLASS_PROXY_NAMESPACE_NAME)
        // At this point the namespace has an active contex (namspace.active returns the context)
        // You can set and get data for the context
      }
    }

Non-decorator based

import { getNamespace } from 'cls-hooked'
import { proxify, CLS_CLASS_PROXY_NAMESPACE_NAME } from 'cls-class-proxy'

class Example {}
const ExampleProxified = proxify()(Example)

Options

proxify accepts an optional object with options:

  • namespace: string - custom namespace name to use instead of default CLS_CLASS_PROXY_NAMESPACE_NAME
  • cache: boolean - to wrap method, getter and setter calls in a CLS context cls-class-proxy recursively looks up property descriptors on a target object and its prototype chain. To avoid doing that for every call cls-class-proxy caches property descriptors in a Map. It's enabled by default.

About

A Proxy-based lightweight library to add Continuation-Local Storage aka (CLS) to class contructor, method calls, getters and setters.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published