UNPKG

cloki

Version:

LogQL API with Clickhouse Backend

38 lines (37 loc) 1.19 kB
const { PluginTypeLoaderBase } = require('plugnplay') const ruleNames = new Set() module.exports = class extends PluginTypeLoaderBase { exportSync (opts) { return { props: ['bnf', 'stringify', '_main_rule_name'], validate: (exports) => { for (const f of ['bnf', 'stringify']) { if (!exports[f]) { throw new Error(`missing field ${f}`) } } const rules = exports.bnf.split('\n') if (rules[0] === '') { throw new Error('First line should be the main rule') } for (const rule of rules) { if (rule === '') { continue } const name = rule.match(/^(\w+)\s*::=/) if (!name) { throw new Error(`invalid bnf rule: ${rule}`) } if (name[1].substr(0, 6) !== 'MACRO_') { throw new Error(`${name[1]} token name should start with "MACRO_"`) } if (ruleNames.has(name[1])) { throw new Error(`${name[1]} token already registered`) } ruleNames.add(name[1]) } exports._main_rule_name = rules[0].match(/^(\w+)\s*::=/)[1] } } } }