UNPKG

expression-expander

Version:
64 lines (63 loc) 2.48 kB
/** * @callback Evaluator * @param {string} expression * @param {Object} context * @param {[PathEntry]} path * @return {Object} expression evaluation result */ /** * @typedef {Object} PathEntry * @property {Object} value */ /** * @callback Quoter * @param {string} value to be quoted * @return {string} quoted value */ /** * @callback Expander * @param {string|boolean|number|bigint|Object|Map|Set} value * @param {PathEntry[]} [path] * @return {string|boolean|number|bigint|Object|Map|Set} expression evaluation result */ /** * @typedef {Object} ExpressionExpander * @property {Object} properties * @property {Expander} expand */ /** * Creates a new expansion context * @param {Object} [options] object with the following keys * @param {string} [options.leftMarker] lead in of expression * @param {string} [options.rightMarker] lead out of expression * @param {RegExp|string} [options.markerRegexp] expression with lead in / out * @param {Quoter} [options.valueQuoter] to quote expanded values * by default no special quoting is done and the evaluated result will be direcly * inserted into the output string * @param {Evaluator} [options.evaluate] evaluate(expression,context,path) function to evaluate expressions * the default evaluation function does a lookup into the properties * @param {boolean} [options.keepUndefinedValues] true: is expression resolves to undefind the original string will be used (with surrounding ${}) * @param {number} [options.maxNestingLevel] max number of recursive calls to expand defaults to 20 * @param {Object} [options.properties] default properties to evaluate expression against * @return {ExpressionExpander} newly created expansion context */ export function createContext(options?: { leftMarker?: string; rightMarker?: string; markerRegexp?: RegExp | string; valueQuoter?: Quoter; evaluate?: Evaluator; keepUndefinedValues?: boolean; maxNestingLevel?: number; properties?: any; }): ExpressionExpander; export type Evaluator = (expression: string, context: any, path: [PathEntry]) => any; export type PathEntry = { value: any; }; export type Quoter = (value: string) => string; export type Expander = (value: string | boolean | number | bigint | any | Map<any, any> | Set<any>, path?: PathEntry[]) => string | boolean | number | bigint | any | Map<any, any> | Set<any>; export type ExpressionExpander = { properties: any; expand: Expander; };