arrow-left

All pages
gitbookPowered by GitBook
1 of 1

Loading...

YAML

YAML operators

hashtag
Introduction

Custom operators for converting YAML

hashtag
Usage

hashtag
Configuration options

Option
Default
Description

hashtag
Nabu

When using the Nabu storage engine, the YAML plugin is included by default. If you want to pass configuration options you can do it like this

hashtag
Memory storage engine

If you are using the memory storage engine the YAML plugin must be configured

hashtag
Operators

hashtag
$yamlToObject

{ $yamlToObject: <expression> }

Convert a YAML string to an object

To convert YAML as front matter we need to specify some extra parameters


hashtag
$objectToYaml

{ $objectToYaml: <expression> }

Convert an object to a YAML string

sortKeys?: boolean | ((a: any, b: any) => number);

false

If true, sort keys when dumping YAML. If a function, use the function to sort the keys.

lineWidth?: number

80

Set max line width for serialized output.

noRefs?: boolean

false

If true, don't convert duplicate objects into references.

noCompatMode?: boolean

false

If true don't try to be compatible with older yaml versions. Currently: don't quote "yes", "no" and so on, as required for YAML 1.1

condenseFlow?: boolean;

false

If true flow sequences will be condensed, omitting the space between a, b. Eg. '[a,b]', and omitting the space between key: value and quoting the key. Eg. '{"a":b}'. Can be useful when using yaml for pretty URL query params as spaces are %-encoded.

indent?: number

2

Indentation width to use (in spaces) when serializing.

skipInvalid?: boolean

true

Do not throw on invalid types (like function in the safe schema) and skip pairs and single values with such types.

flowLevel?: number

-1

Specifies level of nesting, when to switch from block to flow style for collections. -1 means block style everwhere.

styles?: {[tag: string]: string}

"tag" => "style" map. Each tag may have own set of styles.

const store = Nabu
  .configure({
    yaml: { indent: 4 }
  })
  .bootstrap();
import Memory from '@tashmet/memory';
import mingo from '@tashmet/mingo';
import yaml from '@tashmet/yaml';

const store = Memory
  .configure({})
  .use(mingo())
  .use(yaml({ /* configuration options */}))
  .bootstrap();
const data = dedent`
  title: foo
  list:
    - item1
    - item2
`;
const pipeline: Document[] = [
  { $documents: [{ data }] },
  { $set: { data: { $yamlToObject: '$data' } } }
];

const doc = await tashmet.db('test').aggregate(pipeline).next();
{ data: { title: 'foo', list: ['item1', 'item2'] } }
const data = dedent`
  ---
  title: foo
  ---
  Content goes here
`;
const pipeline: Document[] = [
  { $documents: [{ data }] },
  {
    $set: {
      data: {
        $yamlToObject: {
          data: '$data',
          frontMatter: true,
          contentKey: 'body'
        }
      } 
    }
  }
];
const doc = await tashmet.db('test').aggregate(pipeline).next();
{ data: { title: 'foo', body: 'Content goes here' } }
const input = [
  { data: { foo: 'bar' } }
];
const pipeline: Document[] = [
  { $documents: input },
  { $set: { data: { $objectToYaml: '$data' } } }
];

const doc = await tashmet.db('test').aggregate(pipeline).next();