Repository URL to install this package:
|
Version:
1.2.9 ▾
|
"use strict";
/**
* @file allows using classes as blank objects
*
* @example
* const ThisLessed = () => @thisless class ThisLessEd {
* get aboot() {
* return 100
* }
* moose() {
* // moose
* }
* }
*
* @example
* const Selflessed = self => class {
* get aboot() {
* return 100
* }
* moose() {
* // moose
* }
* }
*
* @example
* const getInitializedObj = () => self => ({
* get aboot() {
* return 100
* },
* moose() {
* // moose
* },
* })
*
* @example
* const getReturnedInitializedObj = () => self => {
* return {
* get aboot() {
* return 100
* },
* moose() {
* // moose
* },
* }
* }
*/
const _require = require("./toBlankObj"),
toBlankObj = _require.toBlankObj,
setDescriptorMiddleware = _require.setDescriptorMiddleware;
const _require2 = require("./isPlainObj"),
isUndefined = _require2.isUndefined,
isPlainObject = _require2.isPlainObject;
/**
* @see toBlankObj
* @param {Class} _class
* @return {BlankObject}
*/
function thisless(_class) {
if (!isPlainObject(_class)) {
return toBlankObj(_class.prototype);
}
return _class;
}
/**
* @param {Function} fn scoped reference that receives $this
* @param {Object} self $this
* @return {ClassPlainObj}
*
* @curried 2
*
* @example
*
* self => class {
* eh = () => self
* }
*
* //=> const blank = Object.create(null)
* //=> blank.eh = () => self
*
* const isBlank = blank.prototype ===
* blank.constructor ===
* blank.__proto__ ===
* undefined
* //=> true
*
* Object.keys(blank)
* //=> ['eh']
*
*/
function selfless(fn, $self) {
// $self = {}
// inline curry
if (arguments.length === 1) {
// fn = self => class
return function selflessCurry($$self) {
// _class = fn($self)
const _class = fn($$self);
return thisless(_class);
};
} else {
// _class = fn($self)
const _class = fn($self);
return thisless(_class);
}
}
/**
* @inheritdoc
* @variation flipped arguments
* @see selfless
* @alias lessself
*/
function selfthis($self, fn) {
if (arguments.length === 1) {
return function selflessCurry(_class) {
return selfless(_class, fn);
};
} else {
const _class = fn($self);
return thisless(_class);
}
}
module.exports = {
selfless,
thisless,
selfthis,
toBlankObj,
isUndefined,
setDescriptorMiddleware
};
module.exports.default = module.exports;