dts-jest
Version:
A preprocessor for Jest to snapshot test TypeScript declaration (.d.ts) files
84 lines (83 loc) • 5.21 kB
JavaScript
;
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, " })"),
});
}