diff --git a/index.ts b/index.ts index 76fbdb0..096f472 100644 --- a/index.ts +++ b/index.ts @@ -1,8 +1,24 @@ +import type {StrictlyParseSelector} from 'typed-query-selector/parser.js'; import reservedNames from 'github-reserved-names/reserved-names.json' with {type: 'json'}; import {addTests} from './collector.ts'; -const $ = (selector: string) => document.querySelector(selector); -const exists = (selector: string) => Boolean($(selector)); +function $>( + selector: Selector, +): Selected | undefined; +function $( + selector: string, +): Selected | undefined; +function $(selector: string): Selected | undefined { + return document.querySelector(selector) ?? undefined; +} + +function exists>( + selector: Selector, +): Selected extends never ? never : boolean; +function exists(selector: string): boolean; +function exists(selector: string): boolean { + return Boolean(document.querySelector(selector)); +} const combinedTestOnly = ['combinedTestOnly']; // To be used only to skip tests of combined functions, i.e. isPageA() || isPageB() @@ -859,7 +875,7 @@ TEST: addTests('isNewRepoTemplate', [ ]); /** Get the logged-in user’s username */ -const getLoggedInUser = (): string | undefined => $('meta[name="user-login"]')?.getAttribute('content') ?? undefined; +const getLoggedInUser = (): string | undefined => $('meta[name="user-login"] >')?.getAttribute('content') ?? undefined; /** Drop all redundant slashes */ const getCleanPathname = (url: URL | HTMLAnchorElement | Location = location): string => url.pathname.replaceAll(/\/\/+/g, '/').replace(/\/$/, '').slice(1); diff --git a/package-lock.json b/package-lock.json index 9c3bcf2..619c216 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "svelte-check": "^4.3.5", "ts-morph": "^27.0.2", "tsx": "^4.21.0", + "typed-query-selector": "^2.12.0", "typescript": "5.9.3", "vite": "^7.3.1", "vitest": "^4.0.17", @@ -8201,6 +8202,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typed-query-selector": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", + "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", + "dev": true, + "license": "MIT" + }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", diff --git a/package.json b/package.json index b4a74f7..f618c47 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "svelte-check": "^4.3.5", "ts-morph": "^27.0.2", "tsx": "^4.21.0", + "typed-query-selector": "^2.12.0", "typescript": "5.9.3", "vite": "^7.3.1", "vitest": "^4.0.17",