@tempots/std
Version:
Std library for TypeScript. Natural complement to the Tempo libraries.
80 lines (79 loc) • 2.01 kB
JavaScript
const a = (t) => {
try {
return new URL(t);
} catch {
return null;
}
}, u = (t, e) => {
if (!e || Object.keys(e).length === 0)
return t;
const n = new URL(t);
for (const [r, s] of Object.entries(e))
n.searchParams.set(r, s);
return n.toString();
}, h = (t) => {
try {
const e = new URL(t), n = {};
for (const [r, s] of e.searchParams)
n[r] = s;
return n;
} catch {
return {};
}
}, f = (t, e, n) => {
try {
const r = new URL(t);
return r.searchParams.set(e, n), r.toString();
} catch {
return t;
}
}, g = (t, e) => {
try {
const n = new URL(t);
return n.searchParams.delete(e), n.toString();
} catch {
return t;
}
}, m = (t) => {
try {
return new URL(t), !0;
} catch {
return !1;
}
}, y = (...t) => {
if (t.length === 0) return "";
const e = t.filter((c) => c.length > 0);
if (e.length === 0) return "";
const n = e[0].startsWith("/"), r = e[e.length - 1].endsWith("/"), o = e.map((c) => c.replace(/^\/+|\/+$/g, "")).filter((c) => c.length > 0).join("/");
return (n ? "/" : "") + o + (r ? "/" : "");
}, P = (t) => {
if (!t) return "";
const e = t.startsWith("/"), n = t.split("/").filter((o) => o.length > 0), r = [];
for (const o of n)
o !== "." && (o === ".." ? r.length > 0 && r[r.length - 1] !== ".." ? r.pop() : e || r.push("..") : r.push(o));
const s = r.join("/");
return e ? "/" + s : s;
}, i = (t) => {
const e = l(t), n = e.lastIndexOf(".");
return n === -1 || n === 0 ? "" : e.substring(n);
}, l = (t) => {
if (!t || t.match(/\/+$/)) return "";
const e = t.lastIndexOf("/");
return e === -1 ? t : t.substring(e + 1);
}, d = (t) => {
const e = l(t), n = i(t);
return n ? e.substring(0, e.length - n.length) : e;
};
export {
u as buildUrl,
d as getBaseName,
i as getFileExtension,
l as getFileName,
h as getQueryParams,
m as isValidUrl,
y as joinPaths,
P as normalizePath,
a as parseUrl,
g as removeQueryParam,
f as setQueryParam
};