dts-element-fp
Version:
typescript definition generator for functional programming
82 lines (81 loc) • 4.85 kB
JavaScript
;
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;