UNPKG

dts-element-fp

Version:

typescript definition generator for functional programming

55 lines (54 loc) 2.68 kB
"use strict"; exports.__esModule = true; var dts = require("dts-element"); var R = require("ramda"); var ensure_1 = require("./ensure"); function sort_signatures(signatures, options) { var is_placeholder = options.is_placeholder; var _a = R.partition(function (x) { return get_parameters(x.signature).length === 0; }, signatures.map(function (signature, index) { return ({ signature: signature, index: index }); })), selectables = _a[0], normals = _a[1]; var sorted_normals = R.sort(function (data1, data2) { return R.when(R.equals(0), R.always(data1.index - data2.index))(get_signatures_order(data1.signature, data2.signature)); }, normals); var sorted_selectables = R.sort(function (data1, data2) { return R.when(R.equals(0), R.always(data1.index - data2.index))(get_parameters_order(ensure_1.ensure(get_type(data1.signature)["return"], dts.is_function_type) .parameters, ensure_1.ensure(get_type(data2.signature)["return"], dts.is_function_type) .parameters)); }, selectables).reverse(); return sorted_normals.slice(0, -1).concat(sorted_selectables, sorted_normals.slice(-1)).map(function (x) { return x.signature; }); function get_signatures_order(signature1, signature2) { var _a = [signature1, signature2].map(get_parameters), parameters1 = _a[0], parameters2 = _a[1]; return get_parameters_order(parameters1, parameters2); } function get_parameters_order(parameters1, parameters2) { return parameters1.length !== parameters2.length ? get_length_point(parameters2) - get_length_point(parameters1) : get_placeholder_point(parameters2) - get_placeholder_point(parameters1); } function get_type(signature) { var function_declaration = ensure_1.ensure(signature.owned, dts.is_function_declaration); return function_declaration.type; } function get_parameters(signature) { return get_type(signature).parameters; } /** * ascending order */ function get_length_point(parameters) { return -parameters.length; } /** * placeholder should be as front as possible */ function get_placeholder_point(parameters) { var get_inverse_index = R.subtract(parameters.length); var point = parameters.reduce(function (current_point, parameter, index) { return is_placeholder(parameter.type) ? current_point : (current_point + 1) << get_inverse_index(index); }, // tslint:disable-line:no-bitwise restrict-plus-operands 0); return R.negate(point); } } exports.sort_signatures = sort_signatures;