https://github.com/arlac77/expression-expander
expands ${to be evaluated} expressions in object graphs
https://github.com/arlac77/expression-expander
Last synced: about 1 year ago
JSON representation
expands ${to be evaluated} expressions in object graphs
- Host: GitHub
- URL: https://github.com/arlac77/expression-expander
- Owner: arlac77
- License: 0bsd
- Created: 2015-08-22T11:13:28.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2025-04-06T00:06:24.000Z (about 1 year ago)
- Last Synced: 2025-04-06T00:24:16.056Z (about 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 2.54 MB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](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
```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
### 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