gauge-ts
Version:
Typescript runner for Gauge
55 lines (54 loc) • 2.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const typescript_1 = require("typescript");
const CodeHelper_1 = require("../helpers/CodeHelper");
const Position_1 = require("../models/Position");
const Range_1 = require("../models/Range");
const StepRegistry_1 = require("../models/StepRegistry");
const StepRegistryEntry_1 = require("../models/StepRegistryEntry");
const Util_1 = require("../utils/Util");
class StaticLoader extends CodeHelper_1.CodeHelper {
loadImplementations() {
this.loadFiles();
}
loadStepsFromText(file, text) {
const source = (0, typescript_1.createSourceFile)(file, text, typescript_1.ScriptTarget.Latest);
(0, typescript_1.forEachChild)(source, (childNode) => {
if ((0, typescript_1.isClassDeclaration)(childNode)) {
(0, typescript_1.forEachChild)(childNode, (node) => {
if ((0, typescript_1.isMethodDeclaration)(node) && this.hasStepDecorator(node)) {
this.processNode(node, file, source);
}
});
}
});
}
reloadSteps(content, filePath) {
StepRegistry_1.default.removeSteps(filePath);
this.loadStepsFromText(filePath, content);
}
removeSteps(filePath) {
StepRegistry_1.default.removeSteps(filePath);
}
loadFiles() {
for (const file of Util_1.Util.getListOfFiles()) {
const text = Util_1.Util.readFile(file);
this.loadStepsFromText(file, text);
}
}
processNode(node, file, source) {
const stepTexts = this.getStepTexts(node);
for (const stepText of stepTexts) {
const stepValue = stepText.replace(/(<.*?>)/g, "{}");
StepRegistry_1.default.add(stepValue, new StepRegistryEntry_1.StepRegistryEntry(stepText, stepValue, file, undefined, StaticLoader.getRange(node, source), stepTexts.length > 1));
}
}
static getRange(node, source) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
const dec = (0, typescript_1.getDecorators)(node);
const start = source.getLineAndCharacterOfPosition(dec[0].expression.pos);
const end = source.getLineAndCharacterOfPosition(node.end);
return new Range_1.Range(new Position_1.Position(start.line + 1, start.character), new Position_1.Position(end.line + 1, end.character));
}
}
exports.default = StaticLoader;