mezzanine
Version:
Fantasy land union types with pattern matching
188 lines (16 loc) • 3.74 kB
JavaScript
;Object.defineProperty(exports, "__esModule", { value: true });exports.
copyObject = copyObject;exports.
copyOwnPropertiesFrom = copyOwnPropertiesFrom;exports.
addLazyProperty = addLazyProperty;exports.
addProperty = addProperty;exports.
addGetSetter = addGetSetter;exports.
addProperties = addProperties;exports.
injector = injector;var _ramda = require('ramda');var _list = require('./list');function copyObject(orig) {// 1. copy has same prototype as orig
var copy = Object.create(Object.getPrototypeOf(orig)); // 2. copy has all of orig’s properties
copyOwnPropertiesFrom(copy, orig);return copy;}function copyOwnPropertiesFrom(target, source) {var ownProps = Object.getOwnPropertyNames(source);var ln = ownProps.length;var descBuffer = void 0,propKey = '';for (var i = 0; i < ln; i++) {propKey = ownProps[i];descBuffer = Object.getOwnPropertyDescriptor(source, propKey);Object.defineProperty(target, propKey, descBuffer);}return target;}function addLazyProperty(name, initializer, enumerable) {return function (object, klass) {Object.defineProperty(object, name, { get() {var v = initializer(this, klass);Object.defineProperty(this, name, { value: v, enumerable: !!enumerable, writable: true });return v;}, set(v) {Object.defineProperty(this, name, { value: v, enumerable: !!enumerable, writable: true });return v;}, enumerable: !!enumerable, configurable: true });};}function addProperty(name, value, enumerable = true, writable = true, injected = false) {return function property(target, klass) {var val = injected ? value(target, klass) : value; // console.log(val)
Object.defineProperty(target, name, { value: val, enumerable, configurable: writable, writable });};}function addGetSetter(name, //$FlowIssue
get, set, enumerable = false, writable = false) {var desc = { enumerable, configurable: writable };if (get != null) desc.get = get;if (set != null) desc.set = set;return function getSetter(target) {Object.defineProperty(target, name, desc);};}var funcToProperty = property => typeof property === 'function' ? { value: property, enumerable: false, writable: true, inject: true } : property;function ownKeys(desc) {//$FlowIssue
var keys = Object.getOwnPropertyNames(desc).concat(Object.getOwnPropertySymbols(desc));return keys;}function toKeyVal(desc) {if (Array.isArray(desc)) return desc;var keys = ownKeys(desc);var ln = keys.length;var keyVal = Array(ln);for (var i = 0; i < ln; i++) {keyVal[i] = [keys[i], desc[keys[i]]];}return keyVal;}var internalAdd = ([key, val]) => {var get = val.get;var getter = get;if (val.lazy) //$FlowIssue
return addLazyProperty(key, val.value, true);var isGet = get !== undefined;var isGetSet = isGet || val.set != null;if (isGetSet) {if (isGet && typeof get !== 'function') get = () => getter;return addGetSetter(key, get, val.set, val.enumerable, val.writable);} else return addProperty(key, val.value, val.enumerable, val.writable, val.inject);};var addPipe = [([key, val]) => [key, funcToProperty(val)], internalAdd];function addProperties(desc) {var pairs = toKeyVal(desc);var funcs = (0, _list.transducer)(addPipe, pairs);var funcsCount = funcs.length;return function addProps(target, klass) {//$FlowIssue
(0, _list.forEach)(funcsCount, fn => fn(target, klass), funcs);};}var filterNames = (0, _ramda.dropRepeatsWith)((a, b) => a[0] === b[0]);function injector(list) {var pairsLists = (0, _list.reverse)(filterNames((0, _list.reverse)((0, _list.concat)((0, _list.map)(toKeyVal, list)))));var propMap = addProperties(pairsLists);return propMap;}
//# sourceMappingURL=props.js.map