jest-allure2-reporter
Version:
Idiomatic Jest reporter for Allure Framework
80 lines • 3.86 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.typescript = void 0;
const jest_docblock_1 = require("jest-docblock");
const utils_1 = require("../../utils");
const common_1 = require("../common");
const ASTHelper_1 = require("./ASTHelper");
function resolveOptions(value) {
if (typeof value === 'boolean') {
return { enabled: value, extractDocblock: value };
}
return {
enabled: true,
extractDocblock: false,
...value,
};
}
const typescript = async ({ globalConfig, $, value }) => {
const options = resolveOptions(value);
const ts = options.enabled
? await (0, utils_1.importFrom)('typescript', globalConfig.rootDir).then((resolution) => resolution.exports, () => null)
: null;
function canProcess(location) {
const { fileName, lineNumber, columnNumber } = location;
return Boolean(fileName && lineNumber && columnNumber && (0, common_1.detectJS)(fileName));
}
const helper = new ASTHelper_1.ASTHelper(ts);
return {
name: 'typescript',
extractSourceCode(location, includeComments) {
return ts && canProcess(location)
? $.getFileNavigator(location.fileName).then((navigator) => {
if (!navigator)
return;
if (!navigator.jump(location.lineNumber))
return;
const lineNumber = location.lineNumber;
const columnNumber = Math.min(location.columnNumber, navigator.readLine().length);
const ast = helper.getAST(location.fileName) ||
helper.parseAST(location.fileName, navigator.getContent());
const expression = helper.findNodeInAST(ast, lineNumber, columnNumber);
const codeStart = includeComments ? expression.getFullStart() : expression.getStart();
const code = (0, utils_1.autoIndent)(ast.text.slice(codeStart, expression.getEnd()).trim());
navigator.jumpToPosition(codeStart);
const [startLine] = navigator.getPosition();
navigator.jumpToPosition(expression.getEnd());
const [endLine] = navigator.getPosition();
return {
code,
language: (0, common_1.detectJS)(location.fileName),
fileName: location.fileName,
startLine,
endLine,
};
})
: undefined;
},
extractDocblock(context) {
return ts && options.extractDocblock && canProcess(context)
? $.getFileNavigator(context.fileName).then((navigator) => {
if (!navigator)
return;
if (!navigator.jump(context.lineNumber))
return;
const lineNumber = context.lineNumber;
const columnNumber = Math.min(context.columnNumber, navigator.readLine().length);
const ast = helper.getAST(context.fileName) ||
helper.parseAST(context.fileName, navigator.getContent());
const expression = helper.findNodeInAST(ast, lineNumber, columnNumber);
const fullStart = expression.getFullStart();
const start = expression.getStart();
const docblock = (0, jest_docblock_1.extract)(ast.text.slice(fullStart, start).trim());
return docblock ? (0, jest_docblock_1.parseWithComments)(docblock) : undefined;
})
: undefined;
},
};
};
exports.typescript = typescript;
//# sourceMappingURL=index.js.map