js-yaml sourcemaps
A library for finding YAML source locations after parsing by js-yaml.
Installation
npm install js-yaml-source-map js-yaml
Usage
---
# file: example.yaml
fruits:
- apple
- banana
- orange
people:
- name: Eric
age: 26
- name: Lily
age: 22
states:
CA: California
NY: New York
capital: Albany
TX: Texas
import fs from "fs";
import yaml from "js-yaml";
import SourceMap from "js-yaml-source-map";
const data = fs.readFileSync("./example.yaml", "utf8");
const map = new SourceMap();
// pass map.listen() to the listener option
const loaded = yaml.load(data, { listener: map.listen() });
console.log(loaded); // { fruits: [ 'apple', 'banana', 'orange' ], ... }
// different syntaxes supported
console.log(map.lookup("fruits")); // { line: 4, column: 10, position: 42 }
console.log(map.lookup("people.0.age")); // { line: 9, column: 8, position: 95 }
console.log(map.lookup(".people[1].name")); // { line: 10, column: 9, position: 108}
console.log(map.lookup(["states", "NY", "capital"])); // { line: 16, column: 12, position: 188 }
If you're using CommonJS, you'll need to access the default
key:
const SourceMap = require("js-yaml-source-map").default;
const map = new SourceMap();
//...
API Reference
SourceMap
Constructor: new SourceMap()
Properties:
-
SourceMap().map
:PathMap
Methods:
SourceMap().listen(): (event: "open" | "close", state: State) => void
SourceMap().lookup(path: string | string[]): SourceLocation | undefined
Types
interface PathMap {
[path: string]: {
line: number;
position: number;
lineStart: number;
};
}
interface SourceLocation {
line: number;
column: number;
position: number;
}
Limitations
- This library does not work with multi-document sources and
yaml.loadAll()
. Using it withyaml.loadAll()
will result in undefined behavior. - Using arrays or objects as keys will not work properly, and will result in undefined behavior.