Uncouple constructors and classes methods into functions.
npm install uncouple




Uncouple constructors and classes methods into functions.
This library is published in the NPM registry and can be installed using any compatible package manager.
``sh
npm install uncouple --save
$3
This module has an UMD bundle available through JSDelivr and Unpkg CDNs.
`html
`Usage
Module default exports uncouple function.
uncouple receives a constructor or a class as argument and returns an object with its uncoupled methods.`js
import uncouple from 'uncouple';const O = uncouple(Object);
// => {
// hasOwnProperty: ƒ ()
// isPrototypeOf: ƒ ()
// propertyIsEnumerable: ƒ ()
// toLocaleString: ƒ ()
// toString: ƒ ()
// valueOf: ƒ ()
// }
const hasFetch = O.hasOwnProperty(window, 'fetch');
// => true
`All uncoupled methods receives an instance as first argument followed by method arguments.
`js
const { trim, substr } = uncouple(String);trim(' Okay ');
//=> 'Okay'
substr('ABCDEF', -3);
//=> 'CDF'
`It also works for Function constructors and classes.
`js
function User(name) {
this.name = name;
}User.prototype.getName = function() {
console.log(this.name);
};
const { getName } = uncouple(User);
getName(new User('João'));
//=> 'João'
class Car {
speed = 0;
acelerate(speed) {
this.speed += speed;
}
}
const { acelerate } = uncouple(Car);
const uno = new Car();
acelerate(uno, 120);
acelerate(uno, 60);
uno.speed;
//=> 180
`Use cases
You can reuse methods with duck types, like Array.prototype.filter in a NodeList.
`js
const { filter } = uncouple(Array);const anchors = document.getElementsByTagName('a');
//=> NodeListOf
const isLink = anchor => /^https?:\/\//.test(anchor.href);
const links = filter(anchors, isLink);
//=> Array
`Compositions and smart pipelines became pretty and readable with uncoupled methods.
`js
const {
trim,
replace,
normalize,
toLocaleLowerCase
} = uncouple(String);" Olá, como vai vocÊ?"
|> normalize(#, 'NFKD')
|> replace(#, /[\u0080-\uF8FF]/g, '')
|> trim
|> replace(#, /\s+/g, ' ')
|> toLocaleLowerCase
//=> 'ola, como vai voce?'
const normalize = compose(
toLocaleLowerCase,
(value) => replace(value, /\s+/g, ' '),
trim,
(value) => replace(value, /[\u0080-\uF8FF]/g, '')
(value) => normalize(value, 'NFKD'),
);
normalize(' Meu nome é Vitor , meus bons')
//=> 'meu nome e vitor, meus bons'
`With
uncouple you can call Object methods with Object.create(null), which returns an empty object without prototype.`js
const user = Object.create(null);user.name = '@VitorLuizC';
user.hasOwnProperty('name');
//=> throws TypeError: user.hasOwnProperty is not a function
const { hasOwnProperty: has } = uncouple(Object);
has(user, 'name');
//=> true
``Released under MIT License.