wecui
Version:
一款基于Vue2.x版本的移动端web组件
58 lines (43 loc) • 1.76 kB
JavaScript
var assert = require('./assert');
var isTypeName = require('./isTypeName');
var isFunction = require('./isFunction');
var isArray = require('./isArray');
var forbidNewOperator = require('./isIdentity');
var is = require('./is');
var getTypeName = require('./getTypeName');
function getDefaultName(types) {
return types.map(getTypeName).join(' & ');
}
function intersection(types, name) {
if (process.env.NODE_ENV !== 'production') {
assert(isArray(types) && types.every(isFunction) && types.length >= 2, function () { return 'Invalid argument types ' + assert.stringify(types) + ' supplied to intersection(types, [name]) combinator (expected an array of at least 2 types)'; });
assert(isTypeName(name), function () { return 'Invalid argument name ' + assert.stringify(name) + ' supplied to intersection(types, [name]) combinator (expected a string)'; });
}
var displayName = name || getDefaultName(types);
function Intersection(value, path) {
if (process.env.NODE_ENV !== 'production') {
forbidNewOperator(this, Intersection);
path = path || [displayName];
assert(Intersection.is(value), function () { return 'Invalid value ' + assert.stringify(value) + ' supplied to ' + path.join('/'); });
}
return value;
}
Intersection.meta = {
kind: 'intersection',
types: types,
name: name,
identity: true
};
Intersection.displayName = displayName;
Intersection.is = function (x) {
return types.every(function (type) {
return is(x, type);
});
};
Intersection.update = function (instance, patch) {
return Intersection(assert.update(instance, patch));
};
return Intersection;
}
intersection.getDefaultName = getDefaultName;
module.exports = intersection;