Deno (ディーノ) Advent Calendar 25日目の記事です.
今日は Deno で YAML を扱う話です.
YAML モジュール
Deno は標準ライブラリで YAML モジュールを持っています. parse
, stringify
などの API を使って YAML のパースやシリアライズを行うことが出来ます.
import { parse, stringify } from "https://deno.land/std/encoding/yaml.ts";
const data = parse(`
foo: bar
baz:
- qux
- quux
`);
console.log(data);
// => { foo: "bar", baz: [ "qux", "quux" ] }
const yaml = stringify({ foo: "bar", baz: ["qux", "quux"] });
console.log(yaml);
// =>
// foo: bar
// baz:
// - qux
// - quux
parse
は引数に YAML 文字列を受け取って, パースしたオブジェクトを返します.
stringify
は逆にオブジェクトを受け取って, YAML 文字列を返します.
YAML は JSON とは違って, 1ファイルに複数のドキュメントを持つことが出来ます. 1ファイルに複数の YAML ドキュメントを記述するには各ドキュメントを ---
という行で区切ります.
id: 1
name: Alice
---
id: 2
name: Bob
---
id: 3
name: Eve
上の例は3つのドキュメントを持った YAML の例です.
parse
関数はこのような複数ドキュメントを持った YAML 文字列をパースすることはできません. 複数ドキュメントの YAML をパースしたい場合は parseAll
というメソッドを使うことが出来ます.
import { parseAll } from "https://deno.land/std/encoding/yaml.ts";
const data = parseAll(`
---
id: 1
name: Alice
---
id: 2
name: Bob
---
id: 3
name: Eve
`);
console.log(data);
// => [ { id: 1, name: "Alice" }, { id: 2, name: "Bob" }, { id: 3, name: "Eve" } ]
3つのドキュメントを持った YAML が 3つのオブジェクトを持った配列にパースされたことが分かります.
YAML モジュールの歴史
YAML モジュールは js-yaml という npm で一番よく使われている YAML ライブラリがベースになっています. YAML モジュールの最初の移植作業はフランスの Deno meetup である Paris Deno のオーガナイザの Lilian Saget-Lethias ( @bios21 ) さんによって行われました.
まとめ
今日は Deno で YAML を扱う方法を紹介しました.