| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- import _ from 'lodash';
- import { assignModelProperties } from 'app/core/utils/model_utils';
- /*
- * This regex matches 3 types of variable reference with an optional format specifier
- * \$(\w+) $var1
- * \[\[([\s\S]+?)(?::(\w+))?\]\] [[var2]] or [[var2:fmt2]]
- * \${(\w+)(?::(\w+))?} ${var3} or ${var3:fmt3}
- */
- export const variableRegex = /\$(\w+)|\[\[([\s\S]+?)(?::(\w+))?\]\]|\${(\w+)(?:\.([^:^\}]+))?(?::(\w+))?}/g;
- // Helper function since lastIndex is not reset
- export const variableRegexExec = (variableString: string) => {
- variableRegex.lastIndex = 0;
- return variableRegex.exec(variableString);
- };
- export interface Variable {
- setValue(option: any): any;
- updateOptions(): any;
- dependsOn(variable: any): any;
- setValueFromUrl(urlValue: any): any;
- getValueForUrl(): any;
- getSaveModel(): any;
- }
- export type CtorType = new (...args: any[]) => {};
- export interface VariableTypes {
- [key: string]: {
- name: string;
- ctor: CtorType;
- description: string;
- supportsMulti?: boolean;
- };
- }
- export let variableTypes: VariableTypes = {};
- export { assignModelProperties };
- export function containsVariable(...args: any[]) {
- const variableName = args[args.length - 1];
- args[0] = _.isString(args[0]) ? args[0] : Object['values'](args[0]).join(' ');
- const variableString = args.slice(0, -1).join(' ');
- const matches = variableString.match(variableRegex);
- const isMatchingVariable =
- matches !== null
- ? matches.find(match => {
- const varMatch = variableRegexExec(match);
- return varMatch !== null && varMatch.indexOf(variableName) > -1;
- })
- : false;
- return !!isMatchingVariable;
- }
|