From 8e09b250cfb327f85ff3b08fdefc753f25e53c72 Mon Sep 17 00:00:00 2001 From: khady Date: Mon, 12 Jan 2026 15:16:33 +0000 Subject: [PATCH 1/2] feat(router): add base path handling and relative path computation --- signal-router/mod.tsx | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/signal-router/mod.tsx b/signal-router/mod.tsx index e2c9eaa..4fcb726 100644 --- a/signal-router/mod.tsx +++ b/signal-router/mod.tsx @@ -54,6 +54,8 @@ const isCurrentURL = (alt: URL) => { return true } +const baseURL = new URL(document.baseURI) + // ensure we never have trailing / const initialUrl = new URL(location.href) if (location.pathname.at(-1) === '/') { @@ -91,7 +93,7 @@ type GetUrlProps = { const getUrl = ({ href, hash, params }: GetUrlProps): URL => { const currentUrl = urlSignal.value - const url = new URL(href || currentUrl, origin) + const url = new URL(href || currentUrl, baseURL.href) hash != null && (url.hash = hash) url.pathname.at(-1) === '/' && (url.pathname = url.pathname.slice(0, -1)) if (!params) { @@ -284,6 +286,15 @@ const params = new Proxy({} as Record>, { // url.params: { id: 454, option: 'open' } const hashSignal = computed(() => urlSignal.value.hash) const pathSignal = computed(() => urlSignal.value.pathname) +const matchPath = (path: string) => + `${baseURL.pathname}${path}` === `${pathSignal.value}` + +const relativePath = computed(() => { + const path = pathSignal.value + const base = baseURL.pathname.replace(/\/$/, '') + if (!path.startsWith(base)) return path + return path.slice(base.length) || '/' +}) /** * Reactive URL helpers. * @@ -308,7 +319,17 @@ export const url: { peek: () => URL params: Record equals: (url: URL) => boolean + base: URL + relativePath: string + matchPath: (...paths: string[]) => boolean } = { + base: baseURL, + get relativePath() { + return relativePath.value + }, + matchPath(...paths: string[]) { + return paths.some(matchPath) + }, get path() { return pathSignal.value }, From eda9ee9f63344452d52942caa4d6767ee7ae69f0 Mon Sep 17 00:00:00 2001 From: khady Date: Mon, 12 Jan 2026 15:21:58 +0000 Subject: [PATCH 2/2] fix: update version to 0.1.7 in deno.json --- signal-router/deno.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/signal-router/deno.json b/signal-router/deno.json index d2da87d..971c3d8 100644 --- a/signal-router/deno.json +++ b/signal-router/deno.json @@ -4,7 +4,7 @@ "preact": "npm:preact@^10.27.2" }, "name": "@01edu/signal-router", - "version": "0.1.6", + "version": "0.1.7", "license": "MIT", "exports": { ".": "./mod.tsx" }, "compilerOptions": {