You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-11-25 05:23:13 +03:00
Move glob regex utilities out of the pushprocessor and into a more generic place
This commit is contained in:
@@ -14,6 +14,9 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import {escapeRegExp, globToRegexp} from "./utils";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @module pushprocessor
|
* @module pushprocessor
|
||||||
*/
|
*/
|
||||||
@@ -26,10 +29,6 @@ const RULEKINDS_IN_ORDER = ['override', 'content', 'room', 'sender', 'underride'
|
|||||||
* @param {Object} client The Matrix client object to use
|
* @param {Object} client The Matrix client object to use
|
||||||
*/
|
*/
|
||||||
function PushProcessor(client) {
|
function PushProcessor(client) {
|
||||||
const escapeRegExp = function(string) {
|
|
||||||
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
||||||
};
|
|
||||||
|
|
||||||
const cachedGlobToRegex = {
|
const cachedGlobToRegex = {
|
||||||
// $glob: RegExp,
|
// $glob: RegExp,
|
||||||
};
|
};
|
||||||
@@ -244,22 +243,6 @@ function PushProcessor(client) {
|
|||||||
return cachedGlobToRegex[glob];
|
return cachedGlobToRegex[glob];
|
||||||
};
|
};
|
||||||
|
|
||||||
const 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.
|
|
||||||
let pat = escapeRegExp(glob);
|
|
||||||
pat = pat.replace(/\\\*/g, '.*');
|
|
||||||
pat = pat.replace(/\?/g, '.');
|
|
||||||
pat = pat.replace(/\\\[(!|)(.*)\\]/g, function(match, p1, p2, offset, string) {
|
|
||||||
const first = p1 && '^' || '';
|
|
||||||
const second = p2.replace(/\\\-/, '-');
|
|
||||||
return '[' + first + second + ']';
|
|
||||||
});
|
|
||||||
return pat;
|
|
||||||
};
|
|
||||||
|
|
||||||
const valueForDottedKey = function(key, ev) {
|
const valueForDottedKey = function(key, ev) {
|
||||||
const parts = key.split('.');
|
const parts = key.split('.');
|
||||||
let val;
|
let val;
|
||||||
|
|||||||
24
src/utils.js
24
src/utils.js
@@ -672,3 +672,27 @@ module.exports.removeHiddenChars = function(str) {
|
|||||||
return str.normalize('NFD').replace(removeHiddenCharsRegex, '');
|
return str.normalize('NFD').replace(removeHiddenCharsRegex, '');
|
||||||
};
|
};
|
||||||
const removeHiddenCharsRegex = /[\u200B-\u200D\u0300-\u036f\uFEFF\s]/g;
|
const removeHiddenCharsRegex = /[\u200B-\u200D\u0300-\u036f\uFEFF\s]/g;
|
||||||
|
|
||||||
|
function escapeRegExp(string) {
|
||||||
|
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
||||||
|
}
|
||||||
|
module.exports.escapeRegExp = escapeRegExp;
|
||||||
|
|
||||||
|
module.exports.globToRegexp = function(glob, extended) {
|
||||||
|
extended = typeof(extended) === 'boolean' ? extended : true;
|
||||||
|
// 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.
|
||||||
|
let pat = escapeRegExp(glob);
|
||||||
|
pat = pat.replace(/\\\*/g, '.*');
|
||||||
|
pat = pat.replace(/\?/g, '.');
|
||||||
|
if (extended) {
|
||||||
|
pat = pat.replace(/\\\[(!|)(.*)\\]/g, function (match, p1, p2, offset, string) {
|
||||||
|
const first = p1 && '^' || '';
|
||||||
|
const second = p2.replace(/\\\-/, '-');
|
||||||
|
return '[' + first + second + ']';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return pat;
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user