expression-expander
Version:
expands expressions in object graphs
175 lines (117 loc) • 8.13 kB
Markdown
[](https://www.npmjs.com/package/expression-expander)
[](https://spdx.org/licenses/0BSD.html)
[](https://typescriptlang.org)
[](https://bundlejs.com/?q=expression-expander)
[](https://npmjs.org/package/expression-expander)
[](https://github.com/arlac77/expression-expander/issues)
[](https://actions-badge.atrox.dev/arlac77/expression-expander/goto)
[](https://github.com/prettier/prettier)
[](http://commitizen.github.io/cz-cli/)
[](https://snyk.io/test/github/arlac77/expression-expander)
[](https://coveralls.io/github/arlac77/expression-expander)
## Expression Expander
Expands *\\${to be evaluated}* expressions in object graphs. The actual expression syntax inside of the *\\${evaluated}* is not defined within this module (only simple key lookup)
# example
## file.js
<!-- skip-example -->
```js
import { createContext } from "expression-expander";
const context = createContext();
context.properties = { aKey: "aValue", moreKeys: { a: 1, b: 2 } };
// expanding whole expressions at the key position
console.log(
JSON.stringify(
context.expand({ simple: "${aKey}", complex: { "${moreKeys}": {} } })
)
);
```
Output
```json
{ "simple": "aValue", "complex": { "a": 1, "b": 2 } }
```
## Any Object of the following types may be expanded
* String
* Number
* BigInt
* Buffer
* Object (key and value will be expanded)
* Array
* Map (key and value will be expanded)
* Set
* Boolean
* Promise
# API
<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
### Table of Contents
* [Evaluator](#evaluator)
* [Parameters](#parameters)
* [PathEntry](#pathentry)
* [Properties](#properties)
* [Quoter](#quoter)
* [Parameters](#parameters-1)
* [Expander](#expander)
* [Parameters](#parameters-2)
* [ExpressionExpander](#expressionexpander)
* [Properties](#properties-1)
* [createContext](#createcontext)
* [Parameters](#parameters-3)
* [expand](#expand)
* [Parameters](#parameters-4)
* [properties](#properties-2)
## Evaluator
Type: [Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)
### Parameters
* `expression` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** 
* `context` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
* `path` **\[[PathEntry](#pathentry)]** 
Returns **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** expression evaluation result
## PathEntry
Type: [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)
### Properties
* `value` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
## Quoter
Type: [Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)
### Parameters
* `value` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** to be quoted
Returns **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** quoted value
## Expander
Type: [Function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)
### Parameters
* `value` **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean) | [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number) | bigint | [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object) | [Map](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Map) | [Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set))** 
* `path` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)<[PathEntry](#pathentry)>?** 
Returns **([string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String) | [boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean) | [number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number) | bigint | [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object) | [Map](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Map) | [Set](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set))** expression evaluation result
## ExpressionExpander
Type: [Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)
### Properties
* `properties` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
* `expand` **[Expander](#expander)** 
## createContext
Creates a new expansion context
### Parameters
* `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?** object with the following keys
* `options.leftMarker` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?** lead in of expression
* `options.rightMarker` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?** lead out of expression
* `options.markerRegexp` **([RegExp](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/RegExp) | [string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String))?** expression with lead in / out
* `options.valueQuoter` **[Quoter](#quoter)?** to quote expanded values
by default no special quoting is done and the evaluated result will be direcly
inserted into the output string
* `options.evaluate` **[Evaluator](#evaluator)?** evaluate(expression,context,path) function to evaluate expressions
the default evaluation function does a lookup into the properties
* `options.keepUndefinedValues` **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** true: is expression resolves to undefind the original string will be used (with surrounding ${})
* `options.maxNestingLevel` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?** max number of recursive calls to expand defaults to 20
* `options.properties` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?** default properties to evaluate expression against
Returns **[ExpressionExpander](#expressionexpander)** newly created expansion context
## expand
Type: [Expander](#expander)
### Parameters
* `object`  
* `path` (optional, default `[{value:object}]`)
## properties
Properties used for the default expander implementation
# install
With [npm](http://npmjs.org) do:
```shell
npm install expression-expander
```
# license
BSD-2-Clause