@mpxjs/webpack-plugin
Version:
mpx compile core
40 lines (37 loc) • 1.15 kB
JavaScript
const type = require('../utils/type')
function defaultNormalizeTest (rawTest, context) {
const testType = type(rawTest)
switch (testType) {
case 'Function':
return rawTest.bind(context)
case 'RegExp':
return input => rawTest.test(input)
case 'String':
return input => rawTest === input
default:
return () => true
}
}
module.exports = function runRules (rules = [], input, options = {}) {
const { mode, testKey, normalizeTest, data = {}, meta = {}, waterfall } = options
rules = rules.rules || rules
for (let i = 0; i < rules.length; i++) {
const rule = rules[i]
const tester = (normalizeTest || defaultNormalizeTest)(rule.test, rule)
const testInput = testKey ? input[testKey] : input
const processor = rule[mode]
// mode传入data中供processor使用
Object.assign(data, {
mode
})
if (tester(testInput, meta) && processor) {
const result = processor.call(rule, input, data, meta)
meta.processed = true
if (result !== undefined) {
input = result
}
if (!(rule.waterfall || waterfall)) break
}
}
return input
}