simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

BasicMatcherRulePlugin.js (1273B)


      1 /*
      2 	MIT License http://www.opensource.org/licenses/mit-license.php
      3 	Author Tobias Koppers @sokra
      4 */
      5 
      6 "use strict";
      7 
      8 /** @typedef {import("./RuleSetCompiler")} RuleSetCompiler */
      9 /** @typedef {import("./RuleSetCompiler").RuleCondition} RuleCondition */
     10 
     11 class BasicMatcherRulePlugin {
     12 	constructor(ruleProperty, dataProperty, invert) {
     13 		this.ruleProperty = ruleProperty;
     14 		this.dataProperty = dataProperty || ruleProperty;
     15 		this.invert = invert || false;
     16 	}
     17 
     18 	/**
     19 	 * @param {RuleSetCompiler} ruleSetCompiler the rule set compiler
     20 	 * @returns {void}
     21 	 */
     22 	apply(ruleSetCompiler) {
     23 		ruleSetCompiler.hooks.rule.tap(
     24 			"BasicMatcherRulePlugin",
     25 			(path, rule, unhandledProperties, result) => {
     26 				if (unhandledProperties.has(this.ruleProperty)) {
     27 					unhandledProperties.delete(this.ruleProperty);
     28 					const value = rule[this.ruleProperty];
     29 					const condition = ruleSetCompiler.compileCondition(
     30 						`${path}.${this.ruleProperty}`,
     31 						value
     32 					);
     33 					const fn = condition.fn;
     34 					result.conditions.push({
     35 						property: this.dataProperty,
     36 						matchWhenEmpty: this.invert
     37 							? !condition.matchWhenEmpty
     38 							: condition.matchWhenEmpty,
     39 						fn: this.invert ? v => !fn(v) : fn
     40 					});
     41 				}
     42 			}
     43 		);
     44 	}
     45 }
     46 
     47 module.exports = BasicMatcherRulePlugin;