JSPM

  • Created
  • Published
  • Downloads 11
  • Score
    100M100P100Q49579F
  • License ISC

Secured and reliable Proxy based utilities for more or less common tasks

Package Exports

  • proxy-pants
  • proxy-pants/accessor
  • proxy-pants/bound
  • proxy-pants/breadcrumbs
  • proxy-pants/function
  • proxy-pants/package.json

Readme

proxy-pants

build status Coverage Status CSP strict

Secured and reliable Proxy based utilities for more or less common tasks:

  • accessor to trap one or more accessors for any object
  • applier & caller to trap any borrowed callback/utility without needing to use .call or .apply to pass the context
  • bound to bind one or more methods all at once
  • bread & crumbs to track operations through paths (i.e. a.b.c.d) and namespaces

accessor

// import {accessor} from 'proxy-pants/accessor';
import {accessor} from 'proxy-pants';

const {textContent} = accessor(document.body);

// get the current body text
textContent();

// set the new one
textContent('proxy pants!');

applier & caller

// import {applier, caller} from 'proxy-pants/function';
import {applier, caller} from 'proxy-pants';

const {hasOwnProperty, toString} = caller(Object.prototype);

// true
hasOwnProperty({any: 'object'}, 'any');

// [object Null]
toString(null);

const {fromCharCode} = applier(String);

const charCodes = (...args) => fromCharCode(String, args);
// <=>
charCodes(60, 61, 62);

bound

// import {bound} from 'proxy-pants/bound';
import {bound} from 'proxy-pants';

const map = new Map;
const {get, set, has} = bound(map);

// false
has('some');

// the map
set('some', 'value');

// true
has('some');

// 'value'
get('some');

bread & crumbs

// import {bread, crumbs} from 'proxy-pants/breadcrumbs';
import {bread, crumbs} from 'proxy-pants';

const namespace = {
  some: 'value',
  method(...args) {
    return this.some + args.length;
  },
  Class: class {}
};

const facade = crumbs({
  apply(path, args) {
    return bread(namespace, path)(...args);
  },
  construct(path, args) {
    const Class = bread(namespace, path);
    return new Class;
  },
  get(path, key) {
    return bread(namespace, path)[key];
  },
  has(path, key) {
    return key in bread(namespace, path);
  },
  set(path, key, value) {
    bread(namespace, path)[key] = value;
    return true;
  },
  // alias for deleteProperty(path, key) {}
  delete(path, key) {
    return delete bread(namespace, path)[key];
  }
});

facade.some;            // value
facade.method(1, 2, 3); // some3
new facade.Class;       // [object Namespace]
'some' in facade;       // true
facade.test = 'ok';
facade.test;            // ok
delete facade.test;     // true