You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-08-07 23:02:56 +03:00
Remove spec non-compliant extended glob format (#3423)
* Remove spec non-compliant extended glob format * Simplify * Remove tests for non spec compliant behaviour * Remove stale rules
This commit is contained in:
committed by
GitHub
parent
b29e1e9d21
commit
56c5375bbd
@@ -97,51 +97,6 @@ describe("NotificationService", function () {
|
|||||||
pattern: "foo*bar",
|
pattern: "foo*bar",
|
||||||
rule_id: "foobar",
|
rule_id: "foobar",
|
||||||
},
|
},
|
||||||
{
|
|
||||||
actions: [
|
|
||||||
"notify",
|
|
||||||
{
|
|
||||||
set_tweak: "sound",
|
|
||||||
value: "default",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
set_tweak: "highlight",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
enabled: true,
|
|
||||||
pattern: "p[io]ng",
|
|
||||||
rule_id: "pingpong",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
actions: [
|
|
||||||
"notify",
|
|
||||||
{
|
|
||||||
set_tweak: "sound",
|
|
||||||
value: "default",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
set_tweak: "highlight",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
enabled: true,
|
|
||||||
pattern: "I ate [0-9] pies",
|
|
||||||
rule_id: "pies",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
actions: [
|
|
||||||
"notify",
|
|
||||||
{
|
|
||||||
set_tweak: "sound",
|
|
||||||
value: "default",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
set_tweak: "highlight",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
enabled: true,
|
|
||||||
pattern: "b[!ai]ke",
|
|
||||||
rule_id: "bakebike",
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
override: [
|
override: [
|
||||||
{
|
{
|
||||||
@@ -289,39 +244,6 @@ describe("NotificationService", function () {
|
|||||||
expect(actions.tweaks.highlight).toEqual(true);
|
expect(actions.tweaks.highlight).toEqual(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: This is not spec compliant behaviour.
|
|
||||||
//
|
|
||||||
// See https://spec.matrix.org/v1.5/client-server-api/#conditions-1 which
|
|
||||||
// describes pattern should glob:
|
|
||||||
//
|
|
||||||
// 1. * matches 0 or more characters;
|
|
||||||
// 2. ? matches exactly one character
|
|
||||||
it("should bing on character group ([abc]) bing words.", function () {
|
|
||||||
testEvent.event.content!.body = "Ping!";
|
|
||||||
let actions = pushProcessor.actionsForEvent(testEvent);
|
|
||||||
expect(actions.tweaks.highlight).toEqual(true);
|
|
||||||
testEvent.event.content!.body = "Pong!";
|
|
||||||
actions = pushProcessor.actionsForEvent(testEvent);
|
|
||||||
expect(actions.tweaks.highlight).toEqual(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
// TODO: This is not spec compliant behaviour. (See above.)
|
|
||||||
it("should bing on character range ([a-z]) bing words.", function () {
|
|
||||||
testEvent.event.content!.body = "I ate 6 pies";
|
|
||||||
const actions = pushProcessor.actionsForEvent(testEvent);
|
|
||||||
expect(actions.tweaks.highlight).toEqual(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
// TODO: This is not spec compliant behaviour. (See above.)
|
|
||||||
it("should bing on character negation ([!a]) bing words.", function () {
|
|
||||||
testEvent.event.content!.body = "boke";
|
|
||||||
let actions = pushProcessor.actionsForEvent(testEvent);
|
|
||||||
expect(actions.tweaks.highlight).toEqual(true);
|
|
||||||
testEvent.event.content!.body = "bake";
|
|
||||||
actions = pushProcessor.actionsForEvent(testEvent);
|
|
||||||
expect(actions.tweaks.highlight).toEqual(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("should not bing on room server ACL changes", function () {
|
it("should not bing on room server ACL changes", function () {
|
||||||
testEvent = utils.mkEvent({
|
testEvent = utils.mkEvent({
|
||||||
type: EventType.RoomServerAcl,
|
type: EventType.RoomServerAcl,
|
||||||
|
@@ -30,6 +30,8 @@ import {
|
|||||||
sortEventsByLatestContentTimestamp,
|
sortEventsByLatestContentTimestamp,
|
||||||
safeSet,
|
safeSet,
|
||||||
MapWithDefault,
|
MapWithDefault,
|
||||||
|
globToRegexp,
|
||||||
|
escapeRegExp,
|
||||||
} from "../../src/utils";
|
} from "../../src/utils";
|
||||||
import { logger } from "../../src/logger";
|
import { logger } from "../../src/logger";
|
||||||
import { mkMessage } from "../test-utils/test-utils";
|
import { mkMessage } from "../test-utils/test-utils";
|
||||||
@@ -725,4 +727,19 @@ describe("utils", function () {
|
|||||||
await utils.immediate();
|
await utils.immediate();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("escapeRegExp", () => {
|
||||||
|
it("should escape XYZ", () => {
|
||||||
|
expect(escapeRegExp("[FIT-Connect Zustelldienst \\(Testumgebung\\)]")).toMatchInlineSnapshot(
|
||||||
|
`"\\[FIT-Connect Zustelldienst \\\\\\(Testumgebung\\\\\\)\\]"`,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("globToRegexp", () => {
|
||||||
|
it("should not explode when given regexes as globs", () => {
|
||||||
|
const result = globToRegexp("[FIT-Connect Zustelldienst \\(Testumgebung\\)]");
|
||||||
|
expect(result).toMatchInlineSnapshot(`"\\[FIT-Connect Zustelldienst \\\\\\(Testumgebung\\\\\\)\\]"`);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@@ -186,7 +186,7 @@ export class IgnoredInvites {
|
|||||||
}
|
}
|
||||||
let regexp: RegExp;
|
let regexp: RegExp;
|
||||||
try {
|
try {
|
||||||
regexp = new RegExp(globToRegexp(glob, false));
|
regexp = new RegExp(globToRegexp(glob));
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
// Assume invalid event.
|
// Assume invalid event.
|
||||||
continue;
|
continue;
|
||||||
|
29
src/utils.ts
29
src/utils.ts
@@ -357,27 +357,14 @@ export function escapeRegExp(string: string): string {
|
|||||||
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
||||||
}
|
}
|
||||||
|
|
||||||
export function globToRegexp(glob: string, extended = false): string {
|
/**
|
||||||
// From
|
* Converts Matrix glob-style string to a regular expression
|
||||||
// https://github.com/matrix-org/synapse/blob/abbee6b29be80a77e05730707602f3bbfc3f38cb/synapse/push/__init__.py#L132
|
* https://spec.matrix.org/v1.7/appendices/#glob-style-matching
|
||||||
// Because micromatch is about 130KB with dependencies,
|
* @param glob - Matrix glob-style string
|
||||||
// and minimatch is not much better.
|
* @returns regular expression
|
||||||
const replacements: [RegExp, string | ((substring: string, ...args: any[]) => string)][] = [
|
*/
|
||||||
[/\\\*/g, ".*"],
|
export function globToRegexp(glob: string): string {
|
||||||
[/\?/g, "."],
|
return escapeRegExp(glob).replace(/\\\*/g, ".*").replace(/\?/g, ".");
|
||||||
];
|
|
||||||
if (!extended) {
|
|
||||||
replacements.push([
|
|
||||||
/\\\[(!|)(.*)\\]/g,
|
|
||||||
(_match: string, neg: string, pat: string): string =>
|
|
||||||
["[", neg ? "^" : "", pat.replace(/\\-/, "-"), "]"].join(""),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
return replacements.reduce(
|
|
||||||
// https://github.com/microsoft/TypeScript/issues/30134
|
|
||||||
(pat, args) => (args ? pat.replace(args[0], args[1] as any) : pat),
|
|
||||||
escapeRegExp(glob),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function ensureNoTrailingSlash(url: string): string;
|
export function ensureNoTrailingSlash(url: string): string;
|
||||||
|
Reference in New Issue
Block a user