UNPKG

dts-jest

Version:

A preprocessor for Jest to snapshot test TypeScript declaration (.d.ts) files

76 lines (75 loc) 3.4 kB
"use strict"; 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)); })); }