object-formatter

20
object-formatter @airtoxin

Upload: airtoxin-ishii

Post on 13-Apr-2017

166 views

Category:

Software


1 download

TRANSCRIPT

Page 1: object-formatter

object-formatter

@airtoxin

Page 2: object-formatter

object-formatterオブジェクトの整形がスキーマに基づいて行えるライブラリ。

この中のこれのここの値を取ってきてこっちのあそこのオブジェクトの値として保持して…みたいなのをネストしたオブジェクトとかに対してもundefined

accessを気にせず簡単に出来るようにしたかった。

バベルしたかった。

Page 3: object-formatter

インストール

npm i --save object-formatter

Page 4: object-formatter

使い方var ObjectFormat = require('object-formatter'); var of = new ObjectFormat();

of.format(schema, object);

Page 5: object-formatter

スキーマ定義変換後のオブジェクトの形式を指定する。

keyはそのまま変換後のオブジェクトのフィールドキーとなる。

valueは変換後の値をaccessorで定義。

Page 6: object-formatter

var schema = { raw: 'raw value', foo: '@a', bar: '@b.c.d="ipsum"', baz: { raw: 111, a: '@c.cb', b: '@c.c.c', c: [ '@d', { hoge: '@aa', fuga: '@bb="b default"' } ], d: [ '@d', '@cc="c default"' ] } };

Page 7: object-formatter

accessorそのフィールドに入るべき値を指定する為の文字列/配列

Simple accessorとCollection accessorの2種類が存在。Simple accessorは単純なパス指定をしているだけ。Collection accessorはコレクションに対して簡易map処理を行う。

Page 8: object-formatter

raw value

accessor以外の値がvalueに存在した場合、その値は処理されずにそのまま変換後のオブジェクトに代入される。

Page 9: object-formatter

var object = { a: 1 }; var schema = { hoge: 'a', fuga: 100 };

of.format(schema, object); // -> // { // hoge: 'a', // fuga: 100 // }

Page 10: object-formatter

Simple accessor

@から始まる文字列はSimple accessor

として認識され、@以降の文字列がvalueに入るべき値へのパスを示している。

Page 11: object-formatter

var object = { a: 1, b: { c: 111 } }; var schema = { hoge: '@a', fuga: '@b.c' };

of.format(schema, object); // -> // { // hoge: 1, // fuga: 111 // }

Page 12: object-formatter

Defaultaccessorが示すパスの値が存在しなかった場合のデフォ値を指定することができる。

accessorのパス指定の後に=を続け、その後デフォ値としたい物を指定する。

内部的にevalしているので何とかしたい。

Page 13: object-formatter

var object = {}; var schema = { hoge: '@a=1', fuga: '@a.b.c="not found"' };

of.format(schema, object); // -> // { // hoge: 1, // fuga: 'not found' // }

Page 14: object-formatter

Collection accessor変換前のオブジェクトがコレクションを持っている時に、その中の値を処理したい場合に使用する。簡易map処理。

配列の0番目にコレクションまでのパス、1番目にスキーマを書くと、コレクション内全てのオブジェクトに対してそのスキーマでフォーマットしたオブジェクトの配列が得られる。

Page 15: object-formatter

var object = { c: [{a:1}, {a:2}, {b:3}] }; var schema = { hoge: ['@c', {fuga: '@a'}] };

of.format(schema, object); // -> // { // hoge: [ // { fuga: 1 }, // { fuga: 2 }, // { fuga: undefined } // ] // }

Page 16: object-formatter

使用感自前のBandit APIで、APIの返却するJSONの型を保証したかった。

型の保証だけだとJSON Schemaはでか過ぎて大分つらい→簡単に指定出来るようになった。

オブジェクトのインターフェース保証が安全に行える所がだいぶ気に入っている。

Page 17: object-formatter

DSLドメイン固有言語。特定の操作に特化した言語。特化した操作は行い易いが、DSL自体の学習コストがかかったり、DSLでの操作を見てもやっていることが自明でなくなる。

あまり好きではなかったが、今回object-formatterのスキーマ定義はDSLになっている。→他のスキーマ定義言語があまりいい感じに使えなかったので用意した。もっといい感じのが有るならそれに乗っかりたい。

Page 18: object-formatter

DL数

Page 19: object-formatter

みんなつかってくれ!

Page 20: object-formatter

おわり