https://github.com/blackflux/yaml-boost
Yaml Parser with various additions.
https://github.com/blackflux/yaml-boost
Last synced: 3 months ago
JSON representation
Yaml Parser with various additions.
- Host: GitHub
- URL: https://github.com/blackflux/yaml-boost
- Owner: blackflux
- License: mit
- Created: 2018-03-16T22:35:50.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2025-01-29T19:00:17.000Z (6 months ago)
- Last Synced: 2025-03-31T10:11:15.380Z (4 months ago)
- Language: JavaScript
- Size: 3.74 MB
- Stars: 25
- Watchers: 1
- Forks: 4
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Yaml-Boost
[](https://circleci.com/gh/blackflux/yaml-boost)
[](https://coveralls.io/github/blackflux/yaml-boost?branch=master)
[](https://dependabot.com)
[](https://david-dm.org/blackflux/yaml-boost)
[](https://www.npmjs.com/package/yaml-boost)
[](https://www.npmjs.com/package/yaml-boost)
[](https://github.com/semantic-release/semantic-release)
[](https://github.com/blackflux/js-gardener)Basic Yaml Loading with additional functionality, i.e. resolve file depedencies, resolve variables, deep merge hierachies.
Useful for loading improved [serverless](https://serverless.com/) configuration. For yaml loading this package uses [js-yaml](https://github.com/nodeca/js-yaml).
## Getting Started
$ npm install --save yaml-boost
## Api
### resolve(refPath, content, vars)
Resolve content with variables at given refPath.
### async load(filePath, vars = {})
Load filePath with given variables.
Note that this function is asynchronous.
### dump
As provided by `js-yaml` through `safeDump`
## Usage
```js
import { load } from 'yaml-boost';load('config.yaml');
```Matching `yaml.dump()` function is also available.
### Variable and File Resolution
Works identical to how this is defined for serverless [here](https://serverless.com/framework/docs/providers/aws/guide/variables/).
Both `yml` and `yaml` file endings are supported.
#### Extensions
##### Bake variables when loading files
```
${file(./path/to/file.yml), key1=value1&key2=value2}
```##### Reference Packages
You can reference packages by using
```
${require(PACKAGE):path.to.key.in.module}
```##### Reference Js files
Reference js instead of yaml files.
```
${file(./path/to/file.js)}
```The reference file needs to export simple object containing configuration
```js
export default {};
```##### Reference Function inside Js file
Reference function inside js file.
```
${fileFn(./path/to/file.js)}
```The reference file needs to export simple function returning an object. Available variables are passed in.
```js
export default (args) => ({ args });
```##### Relative File References
Once can reference files relative to the current file by using `^` as a prefix like so
```
${file(^/subfolder/of/current/file.yml)}
```##### Deep Merge
Analogue to the `<<` yaml syntax we can use `<<<` to deep merge into the current nesting level.
This is helpful when merging files into already existing hierarchies.Example:
```
data:
- list entry one<<<:
- data:
- list entry two
- other: things
```results in
```
data:
- list entry one
- list entry two
other: things
```## Serverless Example
Define `serverless.js` as
```js
import path from 'path';
import minimist from 'minimist';
import { load } from 'yaml-boost';const cfg = await load(path.join(__dirname, 'serverless.core.yml'), minimist(process.argv.slice(2)));
export default cfg;
```Then instead of defining `serverless.yml`, define your config in `serverless.core.yml`.