js-scarecrow

JS access apis fail safe proxy wrapper, for object properties that does not exists i.e is undefined

Usage no npm install needed!

<script type="module">
  import jsScarecrow from 'https://cdn.skypack.dev/js-scarecrow';
</script>

README

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"