https://github.com/redotjs/redot/blob/main/packages/redot-parse/redot-parse.js
"use strict"; // generated by dot.pegjs var parser = require("./dot.js"); function parse(doc, file) { try { return parser.parse(file.contents || doc); } catch (err) { file.fail(err.message, err.location, "redot-parse"); } } function parserFactory() { this.Parser = parse; } parserFactory.Parser = parse; module.exports = parserFactory;
ファイル dot.js でデフォルトエクスポートされているオブジェクトが parser 。parser.parse() 関数は、string → dotast::Root だろう。
This::parse = redot-parse::parse は、文字列またはvfileをもらう。parse(null, file) とすると file から入力。
エクスポートは parserFactory 、この名前は分かりやすい。パフォーマーのファクトリ。ファクトリの使い方は二通り。
- (new parserFactory()).Parser(doc);
- parserFactory.Parser(doc)
ここでは使ってないが、関数の戻り値としてパフォーマー関数を得ることもある。結局3種類使っている。
- プラグイン関数の戻り値がパフォーマー関数
- プラグイン関数〈コンストラクタ〉で new したオブジェクトがパフォーマーオブジェクト
- プラグイン関数〈オブジェクト〉自体がパフォーマーオブジェクト
プラグイン関数=パフォーマー関数 は使ってないから、パフォーマー関数をラップする必要がある。
もう少し統一的なアタッチ〈プラグ〉方法にして欲しかった。