UNPKG

dts-element-fp

Version:

typescript definition generator for functional programming

82 lines (81 loc) 4.85 kB
"use strict"; exports.__esModule = true; var dts = require("dts-element"); var R = require("ramda"); var constants_1 = require("./utils/constants"); var create_selectable_signatures_1 = require("./utils/create-selectable-signatures"); var push_signatures_1 = require("./utils/push-signatures"); var sort_signatures_1 = require("./utils/sort-signatures"); function create_curried_interfaces(max_curry_level, // istanbul ignore next options) { if (options === void 0) { // istanbul ignore next options = {}; } // istanbul ignore next var _a = options.selectable, selectable = _a === void 0 ? constants_1.selectable_default : _a, _b = options.placeholder, placeholder = _b === void 0 ? constants_1.placeholder_default : _b, _c = options.get_placeholder_type, get_placeholder_type = _c === void 0 ? constants_1.get_placeholder_type_default : _c, _d = options.get_interface_name, get_interface_name = _d === void 0 ? constants_1.get_interface_name_default : _d, _e = options.get_generic_name, get_generic_name = _e === void 0 ? constants_1.get_interface_generic_name_default : _e, _f = options.get_generic_return_name, get_generic_return_name = _f === void 0 ? constants_1.get_interface_generic_return_name_default : _f, _g = options.get_parameter_name, get_parameter_name = _g === void 0 ? constants_1.get_interface_parameter_name_default : _g, _h = options.get_parameter_placeholder_name, get_parameter_placeholder_name = _h === void 0 ? constants_1.get_interface_parameter_placeholder_name_default : _h, get_selectable_kind_name = options.get_selectable_kind_name, get_selectable_selector_name = options.get_selectable_selector_name; var is_placeholder = function (value) { return dts.is_general_type(value) && value.name === get_placeholder_type(); }; var generics = R.range(0, max_curry_level).map(function (_, index) { return dts.create_generic_declaration({ name: get_generic_name(index) }); }); var generic_return = dts.create_generic_declaration({ name: get_generic_return_name() }); var parameters = generics.map(function (generic, index) { return dts.create_parameter_declaration({ name: get_parameter_name(index), type: dts.create_general_type({ name: generic.name }) }); }); var placeholders = parameters.map(function (_, index) { return dts.create_parameter_declaration({ name: get_parameter_placeholder_name(index), type: dts.create_general_type({ name: get_placeholder_type() }) }); }); var interfaces = generics.map(function (_, index) { return dts.create_interface_declaration({ name: get_interface_name(index), generics: generics.slice(0, index + 1).concat([generic_return]), type: dts.create_object_type({ members: [] }) }); }); interfaces.forEach(function (the_interface, index) { push_signatures_1.push_signatures(is_placeholder, parameters.slice(0, index + 1), placeholder ? placeholders.slice(0, index + 1) : [], function (used_parameters, return_parameters) { the_interface.type.members.push(dts.create_object_member({ owned: dts.create_function_declaration({ name: undefined, type: dts.create_function_type({ parameters: used_parameters, "return": return_parameters.length === 0 ? dts.create_general_type({ name: generic_return.name }) : dts.create_general_type({ name: interfaces[return_parameters.length - 1].name, generics: return_parameters.map(function (parameter) { return parameter.type; }).concat([ dts.create_general_type({ name: generic_return.name }), ]) }) }) }) })); }); var object_type = interfaces[index].type; object_type.members = sort_signatures_1.sort_signatures(object_type.members, { is_placeholder: is_placeholder }); if (!selectable || object_type.members.length <= 1) { return; } (_a = object_type.members).splice.apply(_a, [-1, 0].concat(create_selectable_signatures_1.create_selectable_signatures(object_type.members, { get_selectable_kind_name: get_selectable_kind_name, get_selectable_selector_name: get_selectable_selector_name, is_placeholder: is_placeholder }).reverse())); var _a; }); return interfaces; } exports.create_curried_interfaces = create_curried_interfaces;