JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 34
  • Score
    100M100P100Q49166F
  • License MIT

Minimal library for safe property access

Package Exports

  • safe-access-check

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (safe-access-check) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

safe-access-check

Build Status NPM version Dependency Status npm

⚠️ Experimental. Intended to be used by compilers and code checkers ⚠️

Todos

  • Existential check of enumerable properties
  • Optional logging of values recieved
  • Clearer, more consistent error messages

Installation

npm install --save-dev safe-access-check

Usage

import { safeCoerce, safePropertyAccess } from 'safe-access-check';

// ------------------------------------------------
// 1. Usage as an expression
// ------------------------------------------------
let some = moo + '10' // 'moo10'
some = safeCoerce('moo', '+', 10) // 'moo10'

// ------------------------------------------------
// 2. Usage for coercion safeguard
// ------------------------------------------------
[] + {} // "[object Object]"

safeCoerce([], '+', {})
// TypeError: 'Unexpected coercion of type "Object" and
// type "Array" using "+" operator'

NaN + undefined // NaN

safeCoerce(NaN, '+', undefined);
// TypeError: Unexpected coercion of type "NaN" and type
// "undefined" using "+" operator

safeCoerce(new String('12'), '>', 12);
// TypeError: Unexpected comparison of type "String" and type
// "number" using ">" operator

// ------------------------------------------------
// 3. Usage for better undefined propagation errors
// ------------------------------------------------
const obj = {
  foo: {
    bar: {
      baz: false
    }
  }
}

obj.foo.bar._MOO_.baz;
// TypeError: 'Cannot read property 'baz' of undefined'

safePropertyAccess(['foo', 'bar', '_MOO_', 'baz'], obj);
// TypeError: Property "_MOO_" does not exist in "Object.foo._MOO_"

// ------------------------------------------------
// 4. Usage as out of bounds check
// ------------------------------------------------
const obj = {
  woo: ['']
}

obj.woo[1] // undefined

safePropertyAccess(['woo', 1], obj)
// TypeError: '"woo[1]" is out of bounds'