dts-element-fp
Version:
typescript definition generator for functional programming
48 lines (47 loc) • 2.31 kB
JavaScript
;
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
exports.__esModule = true;
var dts = require("dts-element");
var R = require("ramda");
var get_generics_dependencies_1 = require("./get-generics-dependencies");
var has_1 = require("./has");
exports.has_same_parameter = function (function_type_1, function_type_2, parameter_index) {
var _a = [function_type_1, function_type_2].map(function (function_type) {
var _a = function_type.parameters, parameters = _a === void 0 ? [] : _a, _b = function_type.generics, generics = _b === void 0 ? [] : _b;
var parameter_type = parameters[parameter_index].type;
return { generics: generics, parameter_type: parameter_type };
}), first = _a[0], second = _a[1];
if (!R.equals(first.parameter_type, second.parameter_type)) {
// suppose type that looks different should have different meaning
return false;
}
// check if the same generic name has the same meaning
var _b = [first, second].map(function (data) {
var generics = data.generics, parameter_type = data.parameter_type;
var parameter_generics_and_indexes = generics
.map(function (generic, index) { return ({ generic: generic, index: index }); })
.filter(function (_a) {
var generic = _a.generic;
return has_1.has(parameter_type, {
kind: dts.ElementKind.GeneralType,
name: generic.name
});
});
var generics_dependencies = get_generics_dependencies_1.get_generics_dependencies(generics);
return parameter_generics_and_indexes.reduce(function (current, _a) {
var generic = _a.generic, index = _a.index;
return (__assign({}, current, (_b = {}, _b[generic.name] = generics_dependencies[index]
.slice()
.sort(function (a, b) { return a.name.localeCompare(b.name); }), _b)));
var _b;
}, {});
}), generic_tree_1 = _b[0], generic_tree_2 = _b[1];
return R.equals(generic_tree_1, generic_tree_2);
};