UNPKG

dts-jest

Version:

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

79 lines (78 loc) 4.91 kB
"use strict"; exports.__esModule = true; 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"); exports.transform = function (source_text, source_filename, jest_config) { var normalized_config = 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 = create_source_file_1.create_source_file(source_filename, source_text, ts); var triggers = find_triggers_1.find_triggers(source_file, ts); var groups = get_trigger_groups_1.get_trigger_groups(triggers.map(function (trigger) { return trigger.header; })); var docblock_options = find_docblock_options_1.find_docblock_options(source_file, ts); var _a = docblock_options.test_type, test_type = _a === void 0 ? normalized_config.test_type : _a; var _b = docblock_options.test_value, test_value = _b === void 0 ? normalized_config.test_value : _b; if (triggers.every(function (trigger) { return trigger.footer === undefined; })) { test_value = false; } var is_fake_environment = !test_value; var setup_expression = create_setup_expression_1.create_setup_expression(triggers); return setup_expression + ";" + (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 = get_trigger_line_1.get_trigger_body_line(trigger.header.line); transformed_line_contents[body_line] += test_expression; }); return 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 = 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(create_message_1.create_message("Unexpected error while transpiling '" + source_filename + "':", transpile_output.diagnostics.map(get_diagnostic_message_1.get_diagnostic_message))); } return transpile_output.outputText; } }; function get_test_expression(trigger, test_type, test_value) { var body_line = get_trigger_line_1.get_trigger_body_line(trigger.header.line); var text = trigger.body.text; return create_test_expression_1.create_test_expression(trigger, { test_type: test_type, test_value: test_value, get_type_inference_or_diagnostic_expression: definitions_1.runtime_namespace + ".get_type_inference_or_diagnostic(" + body_line + ")", get_type_inference_or_throw_diagnostic_expression: definitions_1.runtime_namespace + ".get_type_inference_or_throw_diagnostic(" + body_line + ")", get_type_report_expression: definitions_1.runtime_namespace + ".get_type_report(" + body_line + ")", get_value_report_expression: definitions_1.runtime_namespace + ".get_value_report(" + body_line + ", function () { return " + text + " })" }); }