UNPKG

ifc-expressions

Version:

Parsing and evaluation of IFC expressions

49 lines (48 loc) 2.3 kB
"use strict"; 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