foop
Version:
interfaces that describe their intentions.
67 lines (49 loc) • 5.94 kB
JavaScript
// eslint-disable-next-line
// @see compose note on looping, this solves that
var isUndefined = require('../deps/is/undefined')
var isFunction = require('../deps/is/function')
var setToArray = require('../deps/cast/setToArray')
var reduceArray = require('../deps/loop/reduce/reduceArray')
var ENV_DEBUG = false
// .codePointAt(0).toString()
// '🎼'
var COMPOSER_KEY = '127932'
// '🎩'
var TOP_BASE_CLASS_KEY = '127913'
var callCurrent = function (accumulated, current) {
return current(accumulated)
}
// @NOTE 'top' is a global property o.o
module.exports = function addCompose(fn, defaultTop) {
if (ENV_DEBUG) {
console.log('composer_args', {fn: fn, defaultTop: defaultTop})
}
var composed = fn(defaultTop)
if (ENV_DEBUG) {
console.log('composer_add_compose_composed', {composed: composed})
}
if (isUndefined(composed.composer)) {
// only one compose fn
composed.composer = function(SuperClass, options) {
if (ENV_DEBUG) {
console.log('composer_composer', {composed: composed, SuperClass: SuperClass})
}
// @NOTE scoping issues if this is only set once
// if (!composed[TOP_BASE_CLASS_KEY]) {
composed[TOP_BASE_CLASS_KEY] = SuperClass
var arr = setToArray(composed[COMPOSER_KEY])
var composition = reduceArray(arr, callCurrent, composed[TOP_BASE_CLASS_KEY])
if (ENV_DEBUG) {
console.log('composer_composed', {arr: arr, composition: composition})
}
return composition
}
composed[COMPOSER_KEY] = new Set()
}
if (isFunction(fn)) {
composed[COMPOSER_KEY].add(fn)
}
return composed
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zZXIuanMiLCJzb3VyY2VzIjpbImNvbXBvc2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuJ3VzZSBzdHJpY3QnXG5cbi8vIEBzZWUgY29tcG9zZSBub3RlIG9uIGxvb3BpbmcsIHRoaXMgc29sdmVzIHRoYXRcbmNvbnN0IGlzVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vZGVwcy9pcy91bmRlZmluZWQnKVxuY29uc3QgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2RlcHMvaXMvZnVuY3Rpb24nKVxuY29uc3Qgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4uL2RlcHMvY2FzdC9zZXRUb0FycmF5JylcbmNvbnN0IHJlZHVjZUFycmF5ID0gcmVxdWlyZSgnLi4vZGVwcy9sb29wL3JlZHVjZS9yZWR1Y2VBcnJheScpXG5cbmNvbnN0IEVOVl9ERUJVRyA9IGZhbHNlXG5cbi8vIC5jb2RlUG9pbnRBdCgwKS50b1N0cmluZygpXG5cbi8vICfwn468J1xuY29uc3QgQ09NUE9TRVJfS0VZID0gJzEyNzkzMidcblxuLy8gJ/CfjqknXG5jb25zdCBUT1BfQkFTRV9DTEFTU19LRVkgPSAnMTI3OTEzJ1xuXG5jb25zdCBjYWxsQ3VycmVudCA9IChhY2N1bXVsYXRlZCwgY3VycmVudCkgPT4ge1xuICByZXR1cm4gY3VycmVudChhY2N1bXVsYXRlZClcbn1cblxuLy8gQE5PVEUgJ3RvcCcgaXMgYSBnbG9iYWwgcHJvcGVydHkgby5vXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFkZENvbXBvc2UoZm4sIGRlZmF1bHRUb3ApIHtcbiAgaWYgKEVOVl9ERUJVRykge1xuICAgIGNvbnNvbGUubG9nKCdjb21wb3Nlcl9hcmdzJywge2ZuLCBkZWZhdWx0VG9wfSlcbiAgfVxuXG4gIGxldCBjb21wb3NlZCA9IGZuKGRlZmF1bHRUb3ApXG5cbiAgaWYgKEVOVl9ERUJVRykge1xuICAgIGNvbnNvbGUubG9nKCdjb21wb3Nlcl9hZGRfY29tcG9zZV9jb21wb3NlZCcsIHtjb21wb3NlZH0pXG4gIH1cblxuICBpZiAoaXNVbmRlZmluZWQoY29tcG9zZWQuY29tcG9zZXIpKSB7XG4gICAgLy8gb25seSBvbmUgY29tcG9zZSBmblxuICAgIGNvbXBvc2VkLmNvbXBvc2VyID0gZnVuY3Rpb24oU3VwZXJDbGFzcywgb3B0aW9ucykge1xuICAgICAgaWYgKEVOVl9ERUJVRykge1xuICAgICAgICBjb25zb2xlLmxvZygnY29tcG9zZXJfY29tcG9zZXInLCB7Y29tcG9zZWQsIFN1cGVyQ2xhc3N9KVxuICAgICAgfVxuXG4gICAgICAvLyBATk9URSBzY29waW5nIGlzc3VlcyBpZiB0aGlzIGlzIG9ubHkgc2V0IG9uY2VcbiAgICAgIC8vIGlmICghY29tcG9zZWRbVE9QX0JBU0VfQ0xBU1NfS0VZXSkge1xuICAgICAgY29tcG9zZWRbVE9QX0JBU0VfQ0xBU1NfS0VZXSA9IFN1cGVyQ2xhc3NcblxuICAgICAgbGV0IGFyciA9IHNldFRvQXJyYXkoY29tcG9zZWRbQ09NUE9TRVJfS0VZXSlcbiAgICAgIGNvbnN0IGNvbXBvc2l0aW9uID0gcmVkdWNlQXJyYXkoYXJyLCBjYWxsQ3VycmVudCwgY29tcG9zZWRbVE9QX0JBU0VfQ0xBU1NfS0VZXSlcblxuICAgICAgaWYgKEVOVl9ERUJVRykge1xuICAgICAgICBjb25zb2xlLmxvZygnY29tcG9zZXJfY29tcG9zZWQnLCB7YXJyLCBjb21wb3NpdGlvbn0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21wb3NpdGlvblxuICAgIH1cblxuICAgIGNvbXBvc2VkW0NPTVBPU0VSX0tFWV0gPSBuZXcgU2V0KClcbiAgfVxuXG4gIGlmIChpc0Z1bmN0aW9uKGZuKSkge1xuICAgIGNvbXBvc2VkW0NPTVBPU0VSX0tFWV0uYWRkKGZuKVxuICB9XG5cbiAgcmV0dXJuIGNvbXBvc2VkXG59XG4iXSwibmFtZXMiOlsiY29uc3QiLCJsZXQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsWUFBWTs7O0FBR1pBLEdBQUssQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDO0FBQ25EQSxHQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztBQUNqREEsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMseUJBQXlCLENBQUM7QUFDckRBLEdBQUssQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLGlDQUFpQyxDQUFDOztBQUU5REEsR0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLOzs7OztBQUt2QkEsR0FBSyxDQUFDLFlBQVksR0FBRyxRQUFROzs7QUFHN0JBLEdBQUssQ0FBQyxrQkFBa0IsR0FBRyxRQUFROztBQUVuQ0EsR0FBSyxDQUFDLFdBQVcsR0FBRyxTQUFBLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxBQUFHO0VBQzVDLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQztDQUM1Qjs7O0FBR0QsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLFVBQVUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFO0VBQ25ELElBQUksU0FBUyxFQUFFO0lBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFBLEVBQUUsRUFBRSxZQUFBLFVBQVUsQ0FBQyxDQUFDO0dBQy9DOztFQUVEQyxHQUFHLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7O0VBRTdCLElBQUksU0FBUyxFQUFFO0lBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxDQUFDLFVBQUEsUUFBUSxDQUFDLENBQUM7R0FDekQ7O0VBRUQsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFOztJQUVsQyxRQUFRLENBQUMsUUFBUSxHQUFHLFNBQVMsVUFBVSxFQUFFLE9BQU8sRUFBRTtNQUNoRCxJQUFJLFNBQVMsRUFBRTtRQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxVQUFBLFFBQVEsRUFBRSxZQUFBLFVBQVUsQ0FBQyxDQUFDO09BQ3pEOzs7O01BSUQsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsVUFBVTs7TUFFekNBLEdBQUcsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztNQUM1Q0QsR0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQzs7TUFFL0UsSUFBSSxTQUFTLEVBQUU7UUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBQSxHQUFHLEVBQUUsYUFBQSxXQUFXLENBQUMsQ0FBQztPQUNyRDs7TUFFRCxPQUFPLFdBQVc7S0FDbkI7O0lBRUQsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFO0dBQ25DOztFQUVELElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQ2xCLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0dBQy9COztFQUVELE9BQU8sUUFBUTtDQUNoQjsifQ==