UNPKG

dts-jest

Version:

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

84 lines (83 loc) 5.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.transform = void 0; var definitions_1 = require("./definitions"); var apply_grouping_1 = require("./utils/apply-grouping"); var create_message_1 = require("./utils/create-message"); var create_setup_expression_1 = require("./utils/create-setup-expression"); var create_source_file_1 = require("./utils/create-source-file"); var create_test_expression_1 = require("./utils/create-test-expression"); var find_docblock_options_1 = require("./utils/find-docblock-options"); var find_triggers_1 = require("./utils/find-triggers"); var get_diagnostic_message_1 = require("./utils/get-diagnostic-message"); var get_trigger_groups_1 = require("./utils/get-trigger-groups"); var get_trigger_line_1 = require("./utils/get-trigger-line"); var normalize_config_1 = require("./utils/normalize-config"); var transform = function (source_text, source_filename, _a) { var jest_config = _a.config; var normalized_config = (0, normalize_config_1.normalize_config)(jest_config.globals[definitions_1.config_namespace]); var ts = normalized_config.typescript, compiler_options = normalized_config.compiler_options, transpile = normalized_config.transpile; var source_file = (0, create_source_file_1.create_source_file)(source_filename, source_text, ts); var triggers = (0, find_triggers_1.find_triggers)(source_file, ts); var groups = (0, get_trigger_groups_1.get_trigger_groups)(triggers.map(function (trigger) { return trigger.header; })); var docblock_options = (0, find_docblock_options_1.find_docblock_options)(source_file, ts); var _b = docblock_options.test_type, test_type = _b === void 0 ? normalized_config.test_type : _b; var _c = docblock_options.test_value, test_value = _c === void 0 ? normalized_config.test_value : _c; if (triggers.every(function (trigger) { return trigger.footer === undefined; })) { test_value = false; } var is_fake_environment = !test_value; var setup_expression = (0, create_setup_expression_1.create_setup_expression)(triggers); return { code: "".concat(setup_expression, ";").concat(is_fake_environment ? get_fake_environment_transformed_content() : get_real_environment_transformed_content()), }; function get_fake_environment_transformed_content() { var transformed_line_contents = source_text.split('\n').map(function () { return ''; }); triggers.forEach(function (trigger) { var test_expression = get_test_expression(trigger, test_type, test_value); var body_line = (0, get_trigger_line_1.get_trigger_body_line)(trigger.header.line); transformed_line_contents[body_line] += test_expression; }); return (0, apply_grouping_1.apply_grouping)(transformed_line_contents, groups).join('\n'); } function get_real_environment_transformed_content() { var transformed = source_text; for (var i = triggers.length - 1; i >= 0; i--) { var trigger = triggers[i]; var _a = trigger.body, start = _a.start, end = _a.end, text = _a.text; var test_expression = get_test_expression(trigger, test_type, test_value) + text.replace(/[^\n]/g, ''); // add missing line break so as to retain line number transformed = transformed.slice(0, start) + test_expression + transformed.slice(end); } transformed = (0, apply_grouping_1.apply_grouping)(transformed.split('\n'), groups).join('\n'); if (!transpile) { return transformed; } var transpile_output = ts.transpileModule(transformed, { compilerOptions: compiler_options, fileName: source_filename, }); // istanbul ignore next if (transpile_output.diagnostics !== undefined && transpile_output.diagnostics.length !== 0) { throw new Error((0, create_message_1.create_message)("Unexpected error while transpiling '".concat(source_filename, "':"), transpile_output.diagnostics.map(get_diagnostic_message_1.get_diagnostic_message))); } return transpile_output.outputText; } }; exports.transform = transform; function get_test_expression(trigger, test_type, test_value) { var body_line = (0, get_trigger_line_1.get_trigger_body_line)(trigger.header.line); var text = trigger.body.text; return (0, create_test_expression_1.create_test_expression)(trigger, { test_type: test_type, test_value: test_value, get_type_inference_or_diagnostic_expression: "".concat(definitions_1.runtime_namespace, ".get_type_inference_or_diagnostic(").concat(body_line, ")"), get_type_inference_or_throw_diagnostic_expression: "".concat(definitions_1.runtime_namespace, ".get_type_inference_or_throw_diagnostic(").concat(body_line, ")"), get_type_report_expression: "".concat(definitions_1.runtime_namespace, ".get_type_report(").concat(body_line, ")"), get_value_report_expression: "".concat(definitions_1.runtime_namespace, ".get_value_report(").concat(body_line, ", function () { return ").concat(text, " })"), }); }