saf
safeobj
npm i safeobj
saf

safeobj

Safe object property access using Proxies as described in my article: https://medium.com/@chekofif/using-es6-s-proxy-for-safe-object-property-access-f42fa4380b2c

by Gidi Meir Morris

1.0.3 (see all)License:MITTypeScript:Built-In
npm i safeobj
Readme

safeobj

Safely access proprties on an object without the danger of Uncaught TypeError: Cannot read property '🚀' of undefined.

As described in my article Using ES6's Proxy for safe Object property access, we can avoid errors by using proxies. This allows us to achieve a cleaner and safer style of coding.

I'd recommend reading the article to fully understand the incentive.

Usage in TypeScript

This package contains embedded TypeScript type definitions. TypeScript 2.2.0 or higher is required.

API

The API is very simple. We have a default export from the module, which is a function you apply to any object you wish to make safe.

For example:

import safe from 'safeobj'

const safeDarthVader = safe({
  name : 'Anakin',
  mother : {
    name : 'Shmi'
  }
})

The constant safeDarthVader will now be safe and you can access any property on it without the fear of an error being throws.

When you access a property on a safe object you will get back either the object's property or a constant called Undefined which we can identify using the isUndefined function.

For example:

import safe, { Undefined, isUndefined } from 'safeobj'

const safeDarthVader = safe({
  name : 'Anakin',
  mother : {
    name : 'Shmi'
  }
})

expect(safeDarthVader.name).toBe('Anakin');
expect(safeDarthVader.mother.name).toBe('Shmi');
expect(safeDarthVader.father.name).toBe(Undefined);
expect(isUndefined(safeDarthVader.father.name).toBe(true);

This mean we no longer need to fear accessing properties on the object safeDarthVader, as apposed to dangerousDarthVader

const dangerousDarthVader = {
  name : 'Anakin',
  mother : {
    name : 'Shmi'
  }
}

expect(dangerousDarthVader.name).toBe('Anakin');
expect(dangerousDarthVader.mother.name).toBe('Shmi');
// The next line throws an "Uncaught TypeError: Cannot read property 'name' of undefined" Error
expect(dangerousDarthVader.father.name).toBe(undefined);

To make using the safe object a little easier we also provide an either function which takes as a first argument a property on the safe object and as a second argument a default value to use if the property is undefined.

import safe, { either } from 'safeobj'

const safeDarthVader = safe({
  name : 'Anakin',
  mother : {
    name : 'Shmi'
  }
})

expect(
  either(safeDarthVader.mother.name, new Error('TypeError: Darth Vader must have a mother'))
).toBe(
  'Shmi'
);

expect(
  either(safeDarthVader.father.name, 'Darth Vader has no father'))
.toBe(
  'Darth Vader has no father'
);

Good luck, and may the force be with you!

Downloads/wk

53

GitHub Stars

10

LAST COMMIT

3yrs ago

MAINTAINERS

1

CONTRIBUTORS

2

OPEN ISSUES

0

OPEN PRs

1
VersionTagPublished
1.0.3
latest
3yrs ago
No alternatives found
No tutorials found
Add a tutorial