dts-jest
Version:
A preprocessor for Jest to snapshot test TypeScript declaration (.d.ts) files
76 lines (75 loc) • 3.4 kB
JavaScript
;
exports.__esModule = true;
var create_message_1 = require("./create-message");
var get_display_line_1 = require("./get-display-line");
var get_node_one_line_text_1 = require("./get-node-one-line-text");
var get_trigger_groups_1 = require("./get-trigger-groups");
var get_trigger_line_1 = require("./get-trigger-line");
var traverse_node_1 = require("./traverse-node");
exports.find_trigger_bodies = function (source_file, headers, ts) {
var bodies = [];
var header_map = new Map();
headers.forEach(function (header) { return header_map.set(header.line, header); });
var groups = get_trigger_groups_1.get_trigger_groups(headers);
var invalid_groups = [];
traverse_node_1.traverse_node(source_file, function (node) {
var start = node.getStart();
var end = node.getEnd();
var body_line = source_file.getLineAndCharacterOfPosition(start).line;
var body_end_line = source_file.getLineAndCharacterOfPosition(end).line;
// check if group position is valid (top-level comment)
if (groups.length !== 0) {
var first_group = groups[0];
if (first_group.line < body_line) {
// checked
groups.shift();
}
else if (
// group is not at the top-level (surrounded by node)
first_group.line >= body_line &&
first_group.line <= body_end_line) {
invalid_groups.push(groups.shift());
}
}
var header_line = get_trigger_line_1.get_trigger_header_line(body_line);
if (node.kind <= ts.SyntaxKind.LastTriviaToken ||
!header_map.has(header_line)) {
return;
}
header_map["delete"](header_line);
bodies.push({
start: start,
end: end,
experssion: get_node_one_line_text_1.get_node_one_line_text(node, source_file, ts),
text: get_dedented_expression_text(node, source_file)
// remove trailing semicolons and spaces
.replace(/\s*;*\s*$/, '')
});
}, ts);
// unattachable_lines
if (header_map.size !== 0) {
var unattachable_line_infos_1 = [];
header_map.forEach(function (header, line) {
var _a = header.description, description = _a === void 0 ? '' : _a;
unattachable_line_infos_1.push(source_file.fileName + ":" + get_display_line_1.get_display_line(line) + " " + description);
});
throw new Error(create_message_1.create_message('Unattachable trigger(s) detected:', unattachable_line_infos_1));
}
if (invalid_groups.length !== 0) {
throw new Error(create_message_1.create_message('Invalid trigger-group(s) detected:', invalid_groups.map(function (_a) {
var line = _a.line, _b = _a.description, description = _b === void 0 ? '' : _b;
return source_file.fileName + ":" + get_display_line_1.get_display_line(line) + " " + description;
})));
}
return bodies;
};
function get_dedented_expression_text(node, source_file) {
var start = node.getStart();
var character = source_file.getLineAndCharacterOfPosition(start).character;
return (node
.getText(source_file)
// dedent
.replace(/^ */gm, function (spaces) {
return ' '.repeat(Math.max(0, spaces.length - character));
}));
}