ifc-expressions
Version:
Parsing and evaluation of IFC expressions
49 lines (48 loc) • 2.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReplacePattern = void 0;
const ApplyRegex_js_1 = require("./ApplyRegex.js");
const ExprEvalResult_js_1 = require("../../ExprEvalResult.js");
const StringValue_js_1 = require("../../../value/StringValue.js");
const Types_js_1 = require("../../../type/Types.js");
const FuncArgString_js_1 = require("../arg/FuncArgString.js");
const FuncArgRegex_js_1 = require("../arg/FuncArgRegex.js");
const MatchesPattern_js_1 = require("./MatchesPattern.js");
class ReplacePattern extends ApplyRegex_js_1.ApplyRegex {
constructor(name, simplePattern) {
super(name, simplePattern, false);
this.formalArguments.splice(2, 0, simplePattern
? new FuncArgString_js_1.FuncArgString(true, ReplacePattern.KEY_REPLACE)
: new FuncArgRegex_js_1.FuncArgRegex(true, ReplacePattern.KEY_REPLACE));
}
getReturnType(argumentTypes) {
return Types_js_1.Type.STRING;
}
calculateResult(callingExpr, evaluatedArguments) {
const inputValue = evaluatedArguments.get(MatchesPattern_js_1.MatchesPattern.KEY_INPUT);
const patternValue = evaluatedArguments.get(MatchesPattern_js_1.MatchesPattern.KEY_PATTERN);
const replaceValue = evaluatedArguments.get(ReplacePattern.KEY_REPLACE);
const pattern = patternValue.getValue();
if (pattern.length === 0) {
return new ExprEvalResult_js_1.ExprEvalSuccessObj(inputValue);
}
let flags = "mg";
if (this.simplePattern) {
const caseSensitive = evaluatedArguments.get(MatchesPattern_js_1.MatchesPattern.KEY_CASE_INSENSITIVE);
if (caseSensitive.getValue()) {
flags = "img";
}
}
else {
flags = evaluatedArguments.get(ReplacePattern.KEY_FLAGS).getValue();
}
const regex = new RegExp(pattern, flags);
const input = inputValue.getValue();
const replace = replaceValue.getValue();
const result = input.replace(regex, replace);
return new ExprEvalResult_js_1.ExprEvalSuccessObj(StringValue_js_1.StringValue.of(result));
}
}
exports.ReplacePattern = ReplacePattern;
ReplacePattern.KEY_REPLACE = "replaceValue";
//# sourceMappingURL=ReplacePattern.js.map