js-scarecrow
TypeScript icon, indicating that this package has built-in type declarations

1.1.1 • Public • Published

js-scarecrow

JS fail safe apis access proxy wrapper

Proxy wrapper for properties invocation that may not exist
somewhere in the invocation(a.b.c().d = 1) chain i.e is undefined.

Use case

Best example would be hosted iframe, injected with services from the hosting application.
In case the iframe gets updated with wrong version, you might have calls to none existing services apis,
you get application crash.

Provides error free, logged access to invalid services or general apis,
From high level injected services down to bare native js bones.
Have async promise? response is fail safe as well ;)

Scarecrow wont fix the logical bug,
but it would allow the application to skip the null pointer exceptions.
logs any invalid function calls, property gets/sets.

Getting started

npm install js-scarecrow
 
yarn add js-scarecrow

Usage

import { InjectionProxy } from "js-scarecrow";
 
const services = InjectionProxy({
          injector: (serviceName) => AwesomeInjector.get(serviceName),
        });
 
services.NonExistingService.NonExistingApi().NonExistingProp;
services.ExistingService.AsyncApi().then(response => response.NonExistingPropA.NonExistingPropB);

Custom Logger

import { InjectionProxy } from "js-scarecrow";
 
const logWarn = (...args) => console.warn(...args);
const logFatal = (...args) => console.error(...args);
 
const services = InjectionProxy({
          injector: (serviceName) => AwesomeInjector.get(serviceName),
          onGetMissingService: logFatal,
          GetMissingPropertyMsg: logWarn,
          SetMissingPropertyMsg: logWarn,
          CallMissingMethodMsg: logFatal,
        });
 
services.NonExistingService.NonExistingApi("Parzeval").NonExistingProp = "Ender";
Console:
Getting non-existing service "NonExistingService"
Getting non-existing property "NonExistingApi"
Executing non-existing method: "NonExistingApi" on this: {...} with arguments: ["Parzeval"]
Setting non-existing property "NonExistingProp", value: "Ender"

Object Proxy

import { ObjectProxy } from "js-scarecrow";
 
const logWarn = (...args) => console.warn(...args);
const logFatal = (...args) => console.error(...args);
 
const proxiedObject = new Proxy(myService, new ObjectProxy({
          GetMissingPropertyMsg: logWarn,
          SetMissingPropertyMsg: logWarn,
          CallMissingMethodMsg: logFatal
        }));
 
proxiedObject.NonExistingApi("Parzeval").NonExistingProp = "Ender";
Console:
Getting non-existing property "NonExistingApi"
Executing non-existing method: "NonExistingApi" on this: {...} with arguments: ["Parzeval"]
Setting non-existing property "NonExistingProp", value: "Ender"

Package Sidebar

Install

npm i js-scarecrow

Weekly Downloads

1

Version

1.1.1

License

MIT

Unpacked Size

46.4 kB

Total Files

15

Last publish

Collaborators

  • michael.yakubov