UNPKG

foop

Version:

interfaces that describe their intentions.

67 lines (49 loc) 5.94 kB
// eslint-disable-next-line 'use strict' // @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==