summary refs log tree commit diff
path: root/src/util
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-10-19 11:00:05 +0200
committerRory& <root@rory.gay>2025-10-19 11:00:05 +0200
commit57dc2074858ec00af632c65267e5a077c4824876 (patch)
treed580e8f6ff1c2a2dbeebd75af289a10a13297f6d /src/util
parentUse message.create (diff)
downloadserver-ts-57dc2074858ec00af632c65267e5a077c4824876.tar.xz
Synchronously save automod message
Diffstat (limited to 'src/util')
-rw-r--r--src/util/util/extensions/String.test.ts15
-rw-r--r--src/util/util/extensions/String.ts37
-rw-r--r--src/util/util/extensions/index.ts3
3 files changed, 54 insertions, 1 deletions
diff --git a/src/util/util/extensions/String.test.ts b/src/util/util/extensions/String.test.ts
new file mode 100644

index 000000000..d5cc9292e --- /dev/null +++ b/src/util/util/extensions/String.test.ts
@@ -0,0 +1,15 @@ +import moduleAlias from "module-alias"; +moduleAlias(); +import './String'; +import { describe, it } from 'node:test'; +import assert from 'node:assert/strict'; + +describe("String extensions", () => { + + it("globToRegexp", () => { + const pattern = "file-*.txt"; + const regex = pattern.globToRegexp(); + assert.ok(regex.test("file-123.txt")); + }); + +}); \ No newline at end of file diff --git a/src/util/util/extensions/String.ts b/src/util/util/extensions/String.ts new file mode 100644
index 000000000..ce9b1a513 --- /dev/null +++ b/src/util/util/extensions/String.ts
@@ -0,0 +1,37 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. +*/ + +declare global { + interface String { + globToRegexp(flags?: string): RegExp; + } +} + +export function stringGlobToRegexp(str: string, flags?: string): RegExp { + // Convert simple wildcard patterns to regex + const escaped = str.replace(".", "\\.") + .replace("?", ".") + .replace("*", ".*") + return new RegExp(escaped, flags); +} + +// Register extensions +if (!String.prototype.globToRegexp) + String.prototype.globToRegexp = function (str: string, flags?: string) { + return stringGlobToRegexp.call(null, str, flags); + }; \ No newline at end of file diff --git a/src/util/util/extensions/index.ts b/src/util/util/extensions/index.ts
index 3bde4f7f0..e006591f8 100644 --- a/src/util/util/extensions/index.ts +++ b/src/util/util/extensions/index.ts
@@ -1,4 +1,5 @@ export * from "./Array"; export * from "./Math"; export * from "./Url"; -export * from "./Object"; \ No newline at end of file +export * from "./Object"; +export * from "./String"; \ No newline at end of file