aboutsummaryrefslogtreecommitdiff
path: root/src/lib/url.ts
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-01-24 13:09:50 +0000
committerFuwn <[email protected]>2026-01-24 13:09:50 +0000
commit396acf3bbbe00a192cb0ea0a9ccf91b1d8d2850b (patch)
treeb9df4ca6a70db45cfffbae6fdd7252e20fb8e93c /src/lib/url.ts
downloadumami-main.tar.xz
umami-main.zip
Initial commitHEADmain
Created from https://vercel.com/new
Diffstat (limited to 'src/lib/url.ts')
-rw-r--r--src/lib/url.ts49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/lib/url.ts b/src/lib/url.ts
new file mode 100644
index 0000000..f6772fe
--- /dev/null
+++ b/src/lib/url.ts
@@ -0,0 +1,49 @@
+export function getQueryString(params: object = {}): string {
+ const searchParams = new URLSearchParams();
+
+ Object.entries(params).forEach(([key, value]) => {
+ if (value !== undefined) {
+ searchParams.append(key, value);
+ }
+ });
+
+ return searchParams.toString();
+}
+
+export function buildPath(path: string, params: object = {}): string {
+ const queryString = getQueryString(params);
+ return queryString ? `${path}?${queryString}` : path;
+}
+
+export function safeDecodeURI(s: string | undefined | null): string | undefined | null {
+ if (s === undefined || s === null) {
+ return s;
+ }
+
+ try {
+ return decodeURI(s);
+ } catch {
+ return s;
+ }
+}
+
+export function safeDecodeURIComponent(s: string | undefined | null): string | undefined | null {
+ if (s === undefined || s === null) {
+ return s;
+ }
+
+ try {
+ return decodeURIComponent(s);
+ } catch {
+ return s;
+ }
+}
+
+export function isValidUrl(url: string) {
+ try {
+ new URL(url);
+ return true;
+ } catch {
+ return false;
+ }
+}