From 22f08e4e5b025d297c68f2e1251e7f8616585882 Mon Sep 17 00:00:00 2001 From: David Baker Date: Mon, 29 Jun 2015 18:16:49 +0100 Subject: [PATCH] Get rid of micromatch & reinstate our hacky version because micromatch, ironically, is huge. --- lib/pushprocessor.js | 28 ++++++++++++++++++++-------- package.json | 1 - 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/lib/pushprocessor.js b/lib/pushprocessor.js index 75217e72a..1a9b2aaab 100644 --- a/lib/pushprocessor.js +++ b/lib/pushprocessor.js @@ -1,5 +1,3 @@ -var micromatch = require("micromatch"); - /** * Construct a Push Processor. * @constructor @@ -152,15 +150,29 @@ module.exports = function(client) { var val = valueForDottedKey(cond.key, ev); if (!val || typeof val != 'string') { return false; } - // Supportting ! in globs would mean figuring out when we - // don't want to use things as a regex, like room IDs - var pat = cond.pattern.replace("!", "\\!"); - if (cond.key == 'content.body') { - return micromatch.contains(val, pat); + pat = '\\b'+globToRegexp(cond.pattern)+'\\b'; } else { - return micromatch.isMatch(val, pat); + pat = '^'+globToRegexp(cond.pattern)+'$'; } + var val = valueForDottedKey(cond['key'], ev); + if (!val || typeof val != 'string') return false; + var regex = new RegExp(pat, 'i'); + return !!val.match(regex); + }; + + var globToRegexp = function(glob) { + // From https://github.com/matrix-org/synapse/blob/abbee6b29be80a77e05730707602f3bbfc3f38cb/synapse/push/__init__.py#L132 + // Because micromatch is about 130KB with dependencies, and minimatch is not much better. + var pat = escapeRegExp(glob); + pat = pat.replace(/\\\*/, '.*'); + pat = pat.replace(/\?/, '.'); + pat = pat.replace(/\\\[(!|)(.*)\\]/, function(match, p1, p2, offset, string) { + var first = p1 && '^' || ''; + var second = p2.replace(/\\\-/, '-'); + return '['+first+second+']'; + }); + return pat; }; var valueForDottedKey = function(key, ev) { diff --git a/package.json b/package.json index bedfe0ece..a1b239391 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,6 @@ "dependencies": { "browser-request": "^0.3.3", "browserify": "^10.2.3", - "micromatch": "^2.1.6", "q": "^1.4.1", "request": "^2.53.0" },