diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs
index 01ba815a0..c19b420f4 100644
--- a/docs/astro.config.mjs
+++ b/docs/astro.config.mjs
@@ -212,6 +212,8 @@ export default defineConfig({
// same aliases the web app's components import through
alias: {
$lib: webLib,
+ // the web app's own imports (sveltekit 3 subpath imports)
+ "#lib": webLib,
"$icon/": "~icons/lucide/",
// routing is sveltekit-only; components that build hrefs import it
"$app/paths": fileURLToPath(new URL("./src/stubs/app-paths.ts", import.meta.url)),
diff --git a/docs/src/content/docs/components/other-services.md b/docs/src/content/docs/components/other-services.md
index 37c4f2df1..95877c954 100644
--- a/docs/src/content/docs/components/other-services.md
+++ b/docs/src/content/docs/components/other-services.md
@@ -61,7 +61,7 @@ If the knot advertises `knot-social-writes`, the record goes to the
repo's account on the knot; otherwise the app falls back to legacy
`sh.tangled.*` records in your PDS.
-**Adapters.** `web/svelte.config.js` picks one at build time: Node
+**Adapters.** `web/vite.config.ts` picks one at build time: Node
(default; `web/Containerfile` runs `node build` on port 3000, the one to
self-host) or Cloudflare (`SVELTE_ADAPTER=cloudflare`,
`WRANGLER_CONFIG`; `/xrpc/*` and sitemaps use `BOBBIN` and `SITEMAP`
@@ -74,7 +74,8 @@ docker build -f web/Containerfile \
web
```
-Runtime settings (`web/src/lib/server/config.ts`):
+Runtime settings (`web/src/lib/server/config.ts`). SvelteKit only hands the server
+variables declared in `web/src/env.ts`, so a new one is added there too:
| Variable | Purpose |
| ---------------------------------------------------------------------------------- | ----------------------------------------------- |
diff --git a/web/.storybook/MockAuth.svelte b/web/.storybook/MockAuth.svelte
index 4db736ed4..2c5aa823c 100644
--- a/web/.storybook/MockAuth.svelte
+++ b/web/.storybook/MockAuth.svelte
@@ -27,8 +27,8 @@
// fake agent's fetch handler rejects unless the story passes `respond`, so putIssue/putComment
// land in the form's catch block by default.
import { setContext, type Snippet } from "svelte";
- import { AUTH_KEY, type Auth } from "$lib/auth.svelte";
- import oauthMetadata from "$lib/oauth-client-metadata";
+ import { AUTH_KEY, type Auth } from "#lib/auth.svelte.ts";
+ import oauthMetadata from "#lib/oauth-client-metadata.ts";
interface Props {
auth?: MockAuthParam;
diff --git a/web/.storybook/MockNotifications.svelte b/web/.storybook/MockNotifications.svelte
index 4b0bf7afb..637a04625 100644
--- a/web/.storybook/MockNotifications.svelte
+++ b/web/.storybook/MockNotifications.svelte
@@ -1,5 +1,5 @@
@@ -19,9 +20,19 @@
stickers: Snippet;
class?: string;
stickersClass?: string;
+ headingClass?: string;
+ subtitleClass?: string;
}
- let { title, subtitle, stickers, class: className = "", stickersClass = "" }: Props = $props();
+ let {
+ title,
+ subtitle,
+ stickers,
+ class: className = "",
+ stickersClass = "",
+ headingClass = "",
+ subtitleClass = ""
+ }: Props = $props();
const slots = sectionHeader();
@@ -30,8 +41,8 @@
{@render stickers()}
-
- {title}
- {subtitle}
+
+ {title}
+ {subtitle}
diff --git a/web/src/lib/components/home/SelfHostSection.stories.svelte b/web/src/lib/components/home/SelfHostSection.stories.svelte
index 591255480..c4d23bee5 100644
--- a/web/src/lib/components/home/SelfHostSection.stories.svelte
+++ b/web/src/lib/components/home/SelfHostSection.stories.svelte
@@ -1,6 +1,6 @@
diff --git a/web/src/lib/components/organization/welcome/OrganizationProfileStep.svelte b/web/src/lib/components/organization/welcome/OrganizationProfileStep.svelte
index c19ac8e9c..36a87c3f7 100644
--- a/web/src/lib/components/organization/welcome/OrganizationProfileStep.svelte
+++ b/web/src/lib/components/organization/welcome/OrganizationProfileStep.svelte
@@ -22,9 +22,9 @@
diff --git a/web/src/lib/components/profile/NetworkVouches.stories.svelte b/web/src/lib/components/profile/NetworkVouches.stories.svelte
index cfbd8f8a6..f3e73c896 100644
--- a/web/src/lib/components/profile/NetworkVouches.stories.svelte
+++ b/web/src/lib/components/profile/NetworkVouches.stories.svelte
@@ -1,7 +1,7 @@
diff --git a/web/src/lib/components/profile/UserProfileChrome.svelte b/web/src/lib/components/profile/UserProfileChrome.svelte
index e460ecb9d..a2fa2ae7e 100644
--- a/web/src/lib/components/profile/UserProfileChrome.svelte
+++ b/web/src/lib/components/profile/UserProfileChrome.svelte
@@ -1,27 +1,31 @@
diff --git a/web/src/lib/components/repo/RepoIndexView.stories.svelte b/web/src/lib/components/repo/RepoIndexView.stories.svelte
index 3d8d7fe8d..7fba5899c 100644
--- a/web/src/lib/components/repo/RepoIndexView.stories.svelte
+++ b/web/src/lib/components/repo/RepoIndexView.stories.svelte
@@ -1,12 +1,12 @@
diff --git a/web/src/lib/components/repo/RepoTabs.stories.svelte b/web/src/lib/components/repo/RepoTabs.stories.svelte
index e2e78ab4a..6873597b1 100644
--- a/web/src/lib/components/repo/RepoTabs.stories.svelte
+++ b/web/src/lib/components/repo/RepoTabs.stories.svelte
@@ -1,8 +1,8 @@
diff --git a/web/src/lib/components/repo/pipelines/WorkflowSidebar.svelte b/web/src/lib/components/repo/pipelines/WorkflowSidebar.svelte
index b00b513a5..c2697e8e2 100644
--- a/web/src/lib/components/repo/pipelines/WorkflowSidebar.svelte
+++ b/web/src/lib/components/repo/pipelines/WorkflowSidebar.svelte
@@ -38,12 +38,12 @@
diff --git a/web/src/lib/components/repo/tickets/TicketStatePill.stories.svelte b/web/src/lib/components/repo/tickets/TicketStatePill.stories.svelte
index 4699527a9..7449a2079 100644
--- a/web/src/lib/components/repo/tickets/TicketStatePill.stories.svelte
+++ b/web/src/lib/components/repo/tickets/TicketStatePill.stories.svelte
@@ -1,6 +1,6 @@
diff --git a/web/src/lib/components/settings/SettingsBlock.svelte b/web/src/lib/components/settings/SettingsBlock.svelte
index 64adeead4..7d5754011 100644
--- a/web/src/lib/components/settings/SettingsBlock.svelte
+++ b/web/src/lib/components/settings/SettingsBlock.svelte
@@ -1,7 +1,7 @@
@@ -7,9 +7,9 @@
diff --git a/web/src/lib/components/timeline/NotificationsPreview.stories.svelte b/web/src/lib/components/timeline/NotificationsPreview.stories.svelte
index 2fa470486..25a7a09bf 100644
--- a/web/src/lib/components/timeline/NotificationsPreview.stories.svelte
+++ b/web/src/lib/components/timeline/NotificationsPreview.stories.svelte
@@ -1,9 +1,9 @@
diff --git a/web/src/lib/components/timeline/Timeline.stories.svelte b/web/src/lib/components/timeline/Timeline.stories.svelte
index fb7e9f3a8..6529c849d 100644
--- a/web/src/lib/components/timeline/Timeline.stories.svelte
+++ b/web/src/lib/components/timeline/Timeline.stories.svelte
@@ -1,8 +1,8 @@
diff --git a/web/src/lib/components/timeline/TimelineStarEvent.stories.svelte b/web/src/lib/components/timeline/TimelineStarEvent.stories.svelte
index 265bce747..1bd5c0e66 100644
--- a/web/src/lib/components/timeline/TimelineStarEvent.stories.svelte
+++ b/web/src/lib/components/timeline/TimelineStarEvent.stories.svelte
@@ -1,9 +1,9 @@
diff --git a/web/src/lib/components/timeline/TrendingSkeleton.svelte b/web/src/lib/components/timeline/TrendingSkeleton.svelte
index b62fe20e5..3a0a7e8c6 100644
--- a/web/src/lib/components/timeline/TrendingSkeleton.svelte
+++ b/web/src/lib/components/timeline/TrendingSkeleton.svelte
@@ -1,8 +1,8 @@
diff --git a/web/src/lib/components/timeline/group.test.ts b/web/src/lib/components/timeline/group.test.ts
index 23e936d12..b0eb2df57 100644
--- a/web/src/lib/components/timeline/group.test.ts
+++ b/web/src/lib/components/timeline/group.test.ts
@@ -1,6 +1,6 @@
import { describe, expect, it } from "vitest";
-import { groupTimeline } from "$lib/components/timeline/group";
-import type * as OrgTangledFeedGetTimeline from "$lib/api/lexicons/types/org/tangled/feed/getTimeline";
+import { groupTimeline } from "#lib/components/timeline/group.ts";
+import type * as OrgTangledFeedGetTimeline from "#lib/api/lexicons/types/org/tangled/feed/getTimeline.ts";
type TimelineItem = OrgTangledFeedGetTimeline.$output["feed"][number];
diff --git a/web/src/lib/components/timeline/group.ts b/web/src/lib/components/timeline/group.ts
index 238dad271..756972277 100644
--- a/web/src/lib/components/timeline/group.ts
+++ b/web/src/lib/components/timeline/group.ts
@@ -1,5 +1,5 @@
-import type * as OrgTangledActorDefs from "$lib/api/lexicons/types/org/tangled/actor/defs";
-import type * as OrgTangledFeedGetTimeline from "$lib/api/lexicons/types/org/tangled/feed/getTimeline";
+import type * as OrgTangledActorDefs from "#lib/api/lexicons/types/org/tangled/actor/defs.ts";
+import type * as OrgTangledFeedGetTimeline from "#lib/api/lexicons/types/org/tangled/feed/getTimeline.ts";
type TimelineItem = OrgTangledFeedGetTimeline.$output["feed"][number];
diff --git a/web/src/lib/components/timeline/load.ts b/web/src/lib/components/timeline/load.ts
index cf3007355..f41349649 100644
--- a/web/src/lib/components/timeline/load.ts
+++ b/web/src/lib/components/timeline/load.ts
@@ -1,8 +1,8 @@
-import { jsonGet } from "$lib/api/_request";
-import { getTrending } from "$lib/api/profile";
-import { toRepoCard } from "$lib/components/timeline/mappers";
-import type { BobbinContext } from "$lib/api/client";
-import type * as OrgTangledFeedGetTimeline from "$lib/api/lexicons/types/org/tangled/feed/getTimeline";
+import { jsonGet } from "#lib/api/_request.ts";
+import { getTrending } from "#lib/api/profile.ts";
+import { toRepoCard } from "#lib/components/timeline/mappers.ts";
+import type { BobbinContext } from "#lib/api/client.ts";
+import type * as OrgTangledFeedGetTimeline from "#lib/api/lexicons/types/org/tangled/feed/getTimeline.ts";
const PAGE_LIMIT = 50;
diff --git a/web/src/lib/components/timeline/mappers.ts b/web/src/lib/components/timeline/mappers.ts
index 7e4216dbe..2c5e978eb 100644
--- a/web/src/lib/components/timeline/mappers.ts
+++ b/web/src/lib/components/timeline/mappers.ts
@@ -1,8 +1,8 @@
import { resolve } from "$app/paths";
-import { rkeyFromUri } from "$lib/api/uri";
-import type { RepoCardData, PersonData } from "$lib/components/profile/types";
-import type * as OrgTangledRepoDefs from "$lib/api/lexicons/types/org/tangled/repo/defs";
-import type * as OrgTangledActorDefs from "$lib/api/lexicons/types/org/tangled/actor/defs";
+import { rkeyFromUri } from "#lib/api/uri.ts";
+import type { RepoCardData, PersonData } from "#lib/components/profile/types.ts";
+import type * as OrgTangledRepoDefs from "#lib/api/lexicons/types/org/tangled/repo/defs.ts";
+import type * as OrgTangledActorDefs from "#lib/api/lexicons/types/org/tangled/actor/defs.ts";
export const toRepoCard = (repo: OrgTangledRepoDefs.RepoViewBasic): RepoCardData => ({
name: repo.slug,
diff --git a/web/src/lib/components/timeline/types.ts b/web/src/lib/components/timeline/types.ts
index a53b18feb..11e66031f 100644
--- a/web/src/lib/components/timeline/types.ts
+++ b/web/src/lib/components/timeline/types.ts
@@ -1,6 +1,6 @@
// view models for the timeline rail, mirroring the appview's recents rows.
-import type { PullState } from "$lib/components/repo/types";
+import type { PullState } from "#lib/components/repo/types.ts";
interface RecentBase {
/** when the viewer last opened the page */
diff --git a/web/src/lib/components/ui/ActorInput.svelte b/web/src/lib/components/ui/ActorInput.svelte
index fd564feb4..217eab53a 100644
--- a/web/src/lib/components/ui/ActorInput.svelte
+++ b/web/src/lib/components/ui/ActorInput.svelte
@@ -1,10 +1,10 @@
diff --git a/web/src/routes/[handle]/+page.ts b/web/src/routes/[handle]/+page.ts
index 59288b7d5..75e3d4fc3 100644
--- a/web/src/routes/[handle]/+page.ts
+++ b/web/src/routes/[handle]/+page.ts
@@ -1,7 +1,7 @@
import type { Did } from "@atcute/lexicons/syntax";
-import { cached } from "$lib/api/cache";
-import { createBobbinClient } from "$lib/api/client";
-import { settle, stream } from "$lib/api/load";
+import { cached } from "#lib/api/cache.ts";
+import { createBobbinClient } from "#lib/api/client.ts";
+import { settle, stream } from "#lib/api/load.ts";
import {
fetchReposPage,
fetchStringsPage,
@@ -9,7 +9,7 @@ import {
fetchPeoplePage,
fetchPinned,
fetchProfileActivity
-} from "$lib/components/profile/pages";
+} from "#lib/components/profile/pages.ts";
import type { PageLoad } from "./$types";
const TABS = [
diff --git a/web/src/routes/[handle]/[repo]/+layout.server.ts b/web/src/routes/[handle]/[repo]/+layout.server.ts
index 6c20bf05b..60e055c74 100644
--- a/web/src/routes/[handle]/[repo]/+layout.server.ts
+++ b/web/src/routes/[handle]/[repo]/+layout.server.ts
@@ -1,19 +1,19 @@
import { isDid, isHandle } from "@atcute/lexicons/syntax";
import { error, redirect } from "@sveltejs/kit";
-import { tryHostForKnot } from "$lib/api/_request";
-import { NO_ACCESS, resolveRepoAccess } from "$lib/api/access";
-import { createBobbinClient } from "$lib/api/client";
-import { count } from "$lib/api/count";
-import { getStarRkey, getSubscriptionRkey } from "$lib/api/graph";
-import { resolveMiniDoc } from "$lib/api/identity";
-import { early, hold, orNull, parallel, settle, stream, toHttpError } from "$lib/api/load";
-import type { RepoRecord } from "$lib/api/records";
-import { resolveRepoByName, resolveRepoByRepoDid } from "$lib/api/repo";
-import { didFromUri } from "$lib/api/uri";
-import { sameOrigin } from "$lib/migration/status";
-import { getConfig } from "$lib/server/config";
-import type { BobbinContext } from "$lib/api/client";
-import type { KnotInfo, RepoCounts, RepoInfo, RepoSource } from "$lib/components/repo/types";
+import { tryHostForKnot } from "#lib/api/_request.ts";
+import { NO_ACCESS, resolveRepoAccess } from "#lib/api/access.ts";
+import { createBobbinClient } from "#lib/api/client.ts";
+import { count } from "#lib/api/count.ts";
+import { getStarRkey, getSubscriptionRkey } from "#lib/api/graph.ts";
+import { resolveMiniDoc } from "#lib/api/identity.ts";
+import { early, hold, orNull, parallel, settle, stream, toHttpError } from "#lib/api/load.ts";
+import type { RepoRecord } from "#lib/api/records.ts";
+import { resolveRepoByName, resolveRepoByRepoDid } from "#lib/api/repo.ts";
+import { didFromUri } from "#lib/api/uri.ts";
+import { sameOrigin } from "#lib/migration/status.ts";
+import { getConfig } from "#lib/server/config.ts";
+import type { BobbinContext } from "#lib/api/client.ts";
+import type { KnotInfo, RepoCounts, RepoInfo, RepoSource } from "#lib/components/repo/types.ts";
import type { LayoutServerLoad } from "./$types";
const resolveSource = async (
diff --git a/web/src/routes/[handle]/[repo]/+layout@.svelte b/web/src/routes/[handle]/[repo]/+layout@.svelte
index f76ce9817..aa5003506 100644
--- a/web/src/routes/[handle]/[repo]/+layout@.svelte
+++ b/web/src/routes/[handle]/[repo]/+layout@.svelte
@@ -2,20 +2,23 @@
// the @ resets out of the profile shell, repo pages want their own header and
// tabs instead of the profile card
import { goto } from "$app/navigation";
- import { LANGUAGE_COLORS, LANGUAGE_COLOR_FALLBACK } from "$lib/components/repo/languageColors";
- import type { LanguageSlice } from "$lib/components/repo/types";
+ import {
+ LANGUAGE_COLORS,
+ LANGUAGE_COLOR_FALLBACK
+ } from "#lib/components/repo/languageColors.ts";
+ import type { LanguageSlice } from "#lib/components/repo/types.ts";
import { resolve } from "$app/paths";
import { page } from "$app/state";
- import KnotUpgradeBanner from "$lib/components/repo/KnotUpgradeBanner.svelte";
- import RepoChrome from "$lib/components/repo/RepoChrome.svelte";
- import Bones from "$lib/components/ui/Bones.svelte";
- import repoRepoheaderFullMetadata from "$lib/bones/repo-repoheader--full-metadata.bones.json";
- import repoRepochromeSkeletonFixture from "$lib/bones/repo-repochrome--skeleton-fixture.bones.json";
- import Error from "$lib/components/ui/Error.svelte";
- import Pending from "$lib/components/ui/Pending.svelte";
- import Meta from "$lib/components/seo/Meta.svelte";
- import { repoCard } from "$lib/seo/og";
- import type { RepoInfo } from "$lib/components/repo/types";
+ import KnotUpgradeBanner from "#lib/components/repo/KnotUpgradeBanner.svelte";
+ import RepoChrome from "#lib/components/repo/RepoChrome.svelte";
+ import Bones from "#lib/components/ui/Bones.svelte";
+ import repoRepoheaderFullMetadata from "#lib/bones/repo-repoheader--full-metadata.bones.json";
+ import repoRepochromeSkeletonFixture from "#lib/bones/repo-repochrome--skeleton-fixture.bones.json";
+ import Error from "#lib/components/ui/Error.svelte";
+ import Pending from "#lib/components/ui/Pending.svelte";
+ import Meta from "#lib/components/seo/Meta.svelte";
+ import { repoCard } from "#lib/seo/og.ts";
+ import type { RepoInfo } from "#lib/components/repo/types.ts";
const CUSTOM_OG_ROUTES = [
"/issues/[rkey]",
diff --git a/web/src/routes/[handle]/[repo]/+page.server.ts b/web/src/routes/[handle]/[repo]/+page.server.ts
index 30bfcfa7e..afbd3ee71 100644
--- a/web/src/routes/[handle]/[repo]/+page.server.ts
+++ b/web/src/routes/[handle]/[repo]/+page.server.ts
@@ -1,5 +1,5 @@
-import { orNull, settle } from "$lib/api/load";
-import { loadRepoIndex } from "$lib/server/repoIndex";
+import { orNull, settle } from "#lib/api/load.ts";
+import { loadRepoIndex } from "#lib/server/repoIndex.ts";
import type { PageServerLoad } from "./$types";
export const load: PageServerLoad = async (event) => {
diff --git a/web/src/routes/[handle]/[repo]/+page.svelte b/web/src/routes/[handle]/[repo]/+page.svelte
index b847a62cf..b3d27f5a9 100644
--- a/web/src/routes/[handle]/[repo]/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/+page.svelte
@@ -1,14 +1,14 @@
diff --git a/web/src/routes/[handle]/[repo]/branches/+page.svelte b/web/src/routes/[handle]/[repo]/branches/+page.svelte
index fb11b806c..5c9bf0f90 100644
--- a/web/src/routes/[handle]/[repo]/branches/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/branches/+page.svelte
@@ -1,10 +1,10 @@
diff --git a/web/src/routes/[handle]/[repo]/branches/+page.ts b/web/src/routes/[handle]/[repo]/branches/+page.ts
index 1d67bee1d..577e64458 100644
--- a/web/src/routes/[handle]/[repo]/branches/+page.ts
+++ b/web/src/routes/[handle]/[repo]/branches/+page.ts
@@ -1,8 +1,8 @@
-import { branches, gitTarget, requireGit } from "$lib/api/gitclient";
-import { REF_LIMIT } from "$lib/api/repoIndex";
-import { branchSummaries } from "$lib/api/repo";
-import { settle, stream } from "$lib/api/load";
-import { discoveredPageCount, offsetFor, pageCount, pageParam } from "$lib/pagination";
+import { branches, gitTarget, requireGit } from "#lib/api/gitclient.ts";
+import { REF_LIMIT } from "#lib/api/repoIndex.ts";
+import { branchSummaries } from "#lib/api/repo.ts";
+import { settle, stream } from "#lib/api/load.ts";
+import { discoveredPageCount, offsetFor, pageCount, pageParam } from "#lib/pagination.ts";
import type { PageLoad } from "./$types";
export const load: PageLoad = async (event) => {
diff --git a/web/src/routes/[handle]/[repo]/commit-statuses/+server.ts b/web/src/routes/[handle]/[repo]/commit-statuses/+server.ts
index c0b97dbe8..1f0886c50 100644
--- a/web/src/routes/[handle]/[repo]/commit-statuses/+server.ts
+++ b/web/src/routes/[handle]/[repo]/commit-statuses/+server.ts
@@ -1,11 +1,11 @@
import { json } from "@sveltejs/kit";
-import { createSpindleClient, queryPipelines, toPipelineSummary } from "$lib/api/spindle";
-import { tryHostForKnot } from "$lib/api/_request";
-import { didOf } from "$lib/api/syntax";
-import { resolveRepoFromParams } from "$lib/server/repo";
-import type { CommitStatuses } from "$lib/api/commitStatuses";
+import { createSpindleClient, queryPipelines, toPipelineSummary } from "#lib/api/spindle.ts";
+import { tryHostForKnot } from "#lib/api/_request.ts";
+import { didOf } from "#lib/api/syntax.ts";
+import { resolveRepoFromParams } from "#lib/server/repo.ts";
+import type { CommitStatuses } from "#lib/api/commitStatuses.ts";
import type { RequestHandler } from "./$types";
-import { didFromUri } from "$lib/api";
+import { didFromUri } from "#lib/api/index.ts";
export const GET: RequestHandler = async (event) => {
const { view } = await resolveRepoFromParams(event);
diff --git a/web/src/routes/[handle]/[repo]/commit/[ref]/+page.svelte b/web/src/routes/[handle]/[repo]/commit/[ref]/+page.svelte
index f80f22ecc..8f7f2edd8 100644
--- a/web/src/routes/[handle]/[repo]/commit/[ref]/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/commit/[ref]/+page.svelte
@@ -1,17 +1,17 @@
diff --git a/web/src/routes/[handle]/[repo]/history/[ref]/[...path]/+page.svelte b/web/src/routes/[handle]/[repo]/history/[ref]/[...path]/+page.svelte
index ad853fcd0..26ced5abc 100644
--- a/web/src/routes/[handle]/[repo]/history/[ref]/[...path]/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/history/[ref]/[...path]/+page.svelte
@@ -1,9 +1,9 @@
diff --git a/web/src/routes/[handle]/[repo]/history/[ref]/[...path]/+page.ts b/web/src/routes/[handle]/[repo]/history/[ref]/[...path]/+page.ts
index fc8b49ce7..3f31338e6 100644
--- a/web/src/routes/[handle]/[repo]/history/[ref]/[...path]/+page.ts
+++ b/web/src/routes/[handle]/[repo]/history/[ref]/[...path]/+page.ts
@@ -1,10 +1,10 @@
import { error } from "@sveltejs/kit";
-import { gitTarget, log, requireGit } from "$lib/api/gitclient";
-import { authorsOf, mockFileHistory } from "$lib/api/fileHistory";
-import { settle, stream } from "$lib/api/load";
-import { withAuthorHandles } from "$lib/api/repoIndex";
-import { toMirrorCommitSummary } from "$lib/api/gitmirror";
-import { pageCount, pageParam } from "$lib/pagination";
+import { gitTarget, log, requireGit } from "#lib/api/gitclient.ts";
+import { authorsOf, mockFileHistory } from "#lib/api/fileHistory.ts";
+import { settle, stream } from "#lib/api/load.ts";
+import { withAuthorHandles } from "#lib/api/repoIndex.ts";
+import { toMirrorCommitSummary } from "#lib/api/gitmirror.ts";
+import { pageCount, pageParam } from "#lib/pagination.ts";
import type { PageLoad } from "./$types";
const COMMIT_LIMIT = 50;
diff --git a/web/src/routes/[handle]/[repo]/issues/+page.server.ts b/web/src/routes/[handle]/[repo]/issues/+page.server.ts
index 66b65c9ff..68904677e 100644
--- a/web/src/routes/[handle]/[repo]/issues/+page.server.ts
+++ b/web/src/routes/[handle]/[repo]/issues/+page.server.ts
@@ -1,15 +1,15 @@
-import { createBobbinClient } from "$lib/api/client";
-import { TICKET_AUTHOR_DOCS } from "$lib/api/descriptors";
-import { authorOf, target } from "$lib/api/enrich";
-import { moderationTargets, subjectModeration } from "$lib/api/moderationLabels";
-import { TICKET_COLLECTION } from "$lib/api/ticket";
-import { EMPTY_COUNTS, trySearchTickets, type TicketSearchOutcome } from "$lib/api/ticketSearch";
-import { settle, stream } from "$lib/api/load";
-import { rkeyFromUri } from "$lib/api/uri";
-import { labelsOfTokens, listLabelDefinitions } from "$lib/api/labels";
-import type { IssueSummary } from "$lib/components/repo/types";
-import { offsetFor, pageCount, pageParam } from "$lib/pagination";
-import { queryFromUrl } from "$lib/ticketQuery";
+import { createBobbinClient } from "#lib/api/client.ts";
+import { TICKET_AUTHOR_DOCS } from "#lib/api/descriptors.ts";
+import { authorOf, target } from "#lib/api/enrich.ts";
+import { moderationTargets, subjectModeration } from "#lib/api/moderationLabels.ts";
+import { TICKET_COLLECTION } from "#lib/api/ticket.ts";
+import { EMPTY_COUNTS, trySearchTickets, type TicketSearchOutcome } from "#lib/api/ticketSearch.ts";
+import { settle, stream } from "#lib/api/load.ts";
+import { rkeyFromUri } from "#lib/api/uri.ts";
+import { labelsOfTokens, listLabelDefinitions } from "#lib/api/labels.ts";
+import type { IssueSummary } from "#lib/components/repo/types.ts";
+import { offsetFor, pageCount, pageParam } from "#lib/pagination.ts";
+import { queryFromUrl } from "#lib/ticketQuery.ts";
import type { PageServerLoad } from "./$types";
const ISSUE_LIMIT = 30;
diff --git a/web/src/routes/[handle]/[repo]/issues/+page.svelte b/web/src/routes/[handle]/[repo]/issues/+page.svelte
index 8833d6dfb..3ff2a193e 100644
--- a/web/src/routes/[handle]/[repo]/issues/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/issues/+page.svelte
@@ -1,14 +1,14 @@
diff --git a/web/src/routes/[handle]/[repo]/issues/[rkey]/+page.server.ts b/web/src/routes/[handle]/[repo]/issues/[rkey]/+page.server.ts
index e70f7b819..664911aed 100644
--- a/web/src/routes/[handle]/[repo]/issues/[rkey]/+page.server.ts
+++ b/web/src/routes/[handle]/[repo]/issues/[rkey]/+page.server.ts
@@ -1,27 +1,27 @@
import { isRecordKey } from "@atcute/lexicons/syntax";
import { error, isHttpError } from "@sveltejs/kit";
-import { createBobbinClient, ClientResponseError, type BobbinContext } from "$lib/api/client";
-import { REACTION_AUTHOR_DOCS } from "$lib/api/descriptors";
-import { enrich, miniDocOf, target, type Enriched } from "$lib/api/enrich";
-import { INVALID_HANDLE, type MiniDoc } from "$lib/api/identity";
-import { loadSubjectLabels, NO_SUBJECT_LABELS } from "$lib/api/labels";
-import type { ReactionListPage, ReactionRecord } from "$lib/api/reaction";
-import { moderationTargets, subjectModeration } from "$lib/api/moderationLabels";
-import { TICKET_COLLECTION } from "$lib/api/ticket";
-import type { RecordView, TicketViewDetailed } from "$lib/api/records";
-import { authorDidOf, rkeyFromUri } from "$lib/api/uri";
-import { httpStatusFor, settle, stream } from "$lib/api/load";
-import { renderMarkup } from "$lib/markup/render";
-import type { MarkupContext } from "$lib/markup/paths";
+import { createBobbinClient, ClientResponseError, type BobbinContext } from "#lib/api/client.ts";
+import { REACTION_AUTHOR_DOCS } from "#lib/api/descriptors.ts";
+import { enrich, miniDocOf, target, type Enriched } from "#lib/api/enrich.ts";
+import { INVALID_HANDLE, type MiniDoc } from "#lib/api/identity.ts";
+import { loadSubjectLabels, NO_SUBJECT_LABELS } from "#lib/api/labels.ts";
+import type { ReactionListPage, ReactionRecord } from "#lib/api/reaction.ts";
+import { moderationTargets, subjectModeration } from "#lib/api/moderationLabels.ts";
+import { TICKET_COLLECTION } from "#lib/api/ticket.ts";
+import type { RecordView, TicketViewDetailed } from "#lib/api/records.ts";
+import { authorDidOf, rkeyFromUri } from "#lib/api/uri.ts";
+import { httpStatusFor, settle, stream } from "#lib/api/load.ts";
+import { renderMarkup } from "#lib/markup/render.ts";
+import type { MarkupContext } from "#lib/markup/paths.ts";
import {
buildCommentThreads,
listCommentItems,
type CommentThread
-} from "$lib/components/comment/comments";
-import { toThreadInputs } from "$lib/server/comments";
-import { buildReactions, type ReactionGroup } from "$lib/components/reaction/reactions";
-import type { IssueData } from "$lib/components/repo/issues/IssueThreadView.svelte";
-import type { RepoInfo } from "$lib/components/repo/types";
+} from "#lib/components/comment/comments.ts";
+import { toThreadInputs } from "#lib/server/comments.ts";
+import { buildReactions, type ReactionGroup } from "#lib/components/reaction/reactions.ts";
+import type { IssueData } from "#lib/components/repo/issues/IssueThreadView.svelte";
+import type { RepoInfo } from "#lib/components/repo/types.ts";
import type { PageServerLoad } from "./$types";
export type { IssueData };
diff --git a/web/src/routes/[handle]/[repo]/issues/[rkey]/+page.svelte b/web/src/routes/[handle]/[repo]/issues/[rkey]/+page.svelte
index 50b200199..2da5837a6 100644
--- a/web/src/routes/[handle]/[repo]/issues/[rkey]/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/issues/[rkey]/+page.svelte
@@ -1,16 +1,16 @@
diff --git a/web/src/routes/[handle]/[repo]/pipelines/+page.ts b/web/src/routes/[handle]/[repo]/pipelines/+page.ts
index 91aa6a22b..6afbf4451 100644
--- a/web/src/routes/[handle]/[repo]/pipelines/+page.ts
+++ b/web/src/routes/[handle]/[repo]/pipelines/+page.ts
@@ -3,13 +3,13 @@ import {
queryPipelines,
toPipelineSummary,
triggersOf
-} from "$lib/api/spindle";
-import { createBobbinClient } from "$lib/api/client";
-import { resolveForkRepoLabels } from "$lib/api/repo";
-import { settle, stream } from "$lib/api/load";
-import { matchesQuery, type PipelineFilter } from "$lib/components/repo/pipelines/pipeline";
-import type { PipelineSummary } from "$lib/components/repo/types";
-import { pageCount, pageParam } from "$lib/pagination";
+} from "#lib/api/spindle.ts";
+import { createBobbinClient } from "#lib/api/client.ts";
+import { resolveForkRepoLabels } from "#lib/api/repo.ts";
+import { settle, stream } from "#lib/api/load.ts";
+import { matchesQuery, type PipelineFilter } from "#lib/components/repo/pipelines/pipeline.ts";
+import type { PipelineSummary } from "#lib/components/repo/types.ts";
+import { pageCount, pageParam } from "#lib/pagination.ts";
import type { Did } from "@atcute/lexicons";
import type { PageLoad } from "./$types";
diff --git a/web/src/routes/[handle]/[repo]/pipelines/[pipeline]/workflow/[workflow]/+page.svelte b/web/src/routes/[handle]/[repo]/pipelines/[pipeline]/workflow/[workflow]/+page.svelte
index 786034113..2717c7f61 100644
--- a/web/src/routes/[handle]/[repo]/pipelines/[pipeline]/workflow/[workflow]/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/pipelines/[pipeline]/workflow/[workflow]/+page.svelte
@@ -1,10 +1,10 @@
diff --git a/web/src/routes/[handle]/[repo]/pipelines/[pipeline]/workflow/[workflow]/+page.ts b/web/src/routes/[handle]/[repo]/pipelines/[pipeline]/workflow/[workflow]/+page.ts
index 474b3a280..86fbeedb7 100644
--- a/web/src/routes/[handle]/[repo]/pipelines/[pipeline]/workflow/[workflow]/+page.ts
+++ b/web/src/routes/[handle]/[repo]/pipelines/[pipeline]/workflow/[workflow]/+page.ts
@@ -1,6 +1,6 @@
import { error } from "@sveltejs/kit";
-import { settle, stream } from "$lib/api/load";
-import { createSpindleClient, getPipeline, toPipelineSummary } from "$lib/api/spindle";
+import { settle, stream } from "#lib/api/load.ts";
+import { createSpindleClient, getPipeline, toPipelineSummary } from "#lib/api/spindle.ts";
import type { PageLoad } from "./$types";
import type { Did } from "@atcute/lexicons";
diff --git a/web/src/routes/[handle]/[repo]/pipelines/pipelines.test.ts b/web/src/routes/[handle]/[repo]/pipelines/pipelines.test.ts
index c1d745fae..df992291a 100644
--- a/web/src/routes/[handle]/[repo]/pipelines/pipelines.test.ts
+++ b/web/src/routes/[handle]/[repo]/pipelines/pipelines.test.ts
@@ -1,7 +1,7 @@
import { describe, expect, it, vi } from "vitest";
import { load } from "./+page";
-import type * as Pipeline from "$lib/api/lexicons/types/org/tangled/ci/pipeline";
-import type { PipelineSummary } from "$lib/components/repo/types";
+import type * as Pipeline from "#lib/api/lexicons/types/org/tangled/ci/pipeline.ts";
+import type { PipelineSummary } from "#lib/components/repo/types.ts";
const REPO_DID = "did:plc:j5hmlfdrwkvtxm7cjmu7j2is";
diff --git a/web/src/routes/[handle]/[repo]/pulls/+page.server.ts b/web/src/routes/[handle]/[repo]/pulls/+page.server.ts
index cdac24175..68bbfd0d9 100644
--- a/web/src/routes/[handle]/[repo]/pulls/+page.server.ts
+++ b/web/src/routes/[handle]/[repo]/pulls/+page.server.ts
@@ -1,13 +1,13 @@
-import { createBobbinClient } from "$lib/api/client";
-import { TICKET_AUTHOR_DOCS } from "$lib/api/descriptors";
-import { authorOf, target } from "$lib/api/enrich";
-import { EMPTY_COUNTS, trySearchTickets, type TicketSearchOutcome } from "$lib/api/ticketSearch";
-import { settle, stream } from "$lib/api/load";
-import { rkeyFromUri } from "$lib/api/uri";
-import { labelsOfTokens, listLabelDefinitions } from "$lib/api/labels";
-import type { PullSummary } from "$lib/components/repo/types";
-import { offsetFor, pageCount, pageParam } from "$lib/pagination";
-import { queryFromUrl } from "$lib/ticketQuery";
+import { createBobbinClient } from "#lib/api/client.ts";
+import { TICKET_AUTHOR_DOCS } from "#lib/api/descriptors.ts";
+import { authorOf, target } from "#lib/api/enrich.ts";
+import { EMPTY_COUNTS, trySearchTickets, type TicketSearchOutcome } from "#lib/api/ticketSearch.ts";
+import { settle, stream } from "#lib/api/load.ts";
+import { rkeyFromUri } from "#lib/api/uri.ts";
+import { labelsOfTokens, listLabelDefinitions } from "#lib/api/labels.ts";
+import type { PullSummary } from "#lib/components/repo/types.ts";
+import { offsetFor, pageCount, pageParam } from "#lib/pagination.ts";
+import { queryFromUrl } from "#lib/ticketQuery.ts";
import type { PageServerLoad } from "./$types";
const PULL_LIMIT = 30;
diff --git a/web/src/routes/[handle]/[repo]/pulls/+page.svelte b/web/src/routes/[handle]/[repo]/pulls/+page.svelte
index 491c0d648..7717fafaf 100644
--- a/web/src/routes/[handle]/[repo]/pulls/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/pulls/+page.svelte
@@ -1,14 +1,14 @@
diff --git a/web/src/routes/[handle]/[repo]/pulls/[rkey]/+layout.server.ts b/web/src/routes/[handle]/[repo]/pulls/[rkey]/+layout.server.ts
index b5cdbe103..945cf3a4e 100644
--- a/web/src/routes/[handle]/[repo]/pulls/[rkey]/+layout.server.ts
+++ b/web/src/routes/[handle]/[repo]/pulls/[rkey]/+layout.server.ts
@@ -1,24 +1,24 @@
import { isRecordKey } from "@atcute/lexicons/syntax";
import { error } from "@sveltejs/kit";
-import { createBobbinClient } from "$lib/api/client";
-import { REACTION_AUTHOR_DOCS } from "$lib/api/descriptors";
-import { enrich, miniDocOf, target } from "$lib/api/enrich";
-import { INVALID_HANDLE } from "$lib/api/identity";
-import { loadSubjectLabels, NO_SUBJECT_LABELS } from "$lib/api/labels";
-import { getTicketView, listPatches } from "$lib/api/records";
-import { rkeyFromUri } from "$lib/api/uri";
-import { early, httpStatusFor, settle, stream, toHttpError } from "$lib/api/load";
-import type { MarkupContext } from "$lib/markup";
-import { renderMarkup } from "$lib/markup/render";
-import type { CommentListPage } from "$lib/api/comment";
-import type { ReactionListPage } from "$lib/api/reaction";
-import { buildReactions, type ReactionGroup } from "$lib/components/reaction/reactions";
+import { createBobbinClient } from "#lib/api/client.ts";
+import { REACTION_AUTHOR_DOCS } from "#lib/api/descriptors.ts";
+import { enrich, miniDocOf, target } from "#lib/api/enrich.ts";
+import { INVALID_HANDLE } from "#lib/api/identity.ts";
+import { loadSubjectLabels, NO_SUBJECT_LABELS } from "#lib/api/labels.ts";
+import { getTicketView, listPatches } from "#lib/api/records.ts";
+import { rkeyFromUri } from "#lib/api/uri.ts";
+import { early, httpStatusFor, settle, stream, toHttpError } from "#lib/api/load.ts";
+import type { MarkupContext } from "#lib/markup/index.ts";
+import { renderMarkup } from "#lib/markup/render.ts";
+import type { CommentListPage } from "#lib/api/comment.ts";
+import type { ReactionListPage } from "#lib/api/reaction.ts";
+import { buildReactions, type ReactionGroup } from "#lib/components/reaction/reactions.ts";
import {
COMMENT_ENRICH,
commentModerationOf,
commentAuthorOf,
type CommentView
-} from "$lib/components/comment/comments";
+} from "#lib/components/comment/comments.ts";
import type { LayoutServerLoad } from "./$types";
export const load: LayoutServerLoad = async (event) => {
@@ -57,7 +57,8 @@ export const load: LayoutServerLoad = async (event) => {
page.output.items,
parent.auth?.did,
(did) =>
- miniDocOf(page.data, did, REACTION_AUTHOR_DOCS)?.handle ?? INVALID_HANDLE
+ miniDocOf(page.data, did, REACTION_AUTHOR_DOCS)?.handle ??
+ INVALID_HANDLE
)
)
.catch(() => []);
diff --git a/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/+layout.server.ts b/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/+layout.server.ts
index 651a38c06..ebc039790 100644
--- a/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/+layout.server.ts
+++ b/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/+layout.server.ts
@@ -1,11 +1,11 @@
import { redirect } from "@sveltejs/kit";
-import { createBobbinClient } from "$lib/api/client";
-import { listLog } from "$lib/api/gitmirror";
-import { early, orNull, settle, stream } from "$lib/api/load";
-import { isRedirect, parseDiffRoute, parseInterdiffRoute } from "$lib/api/pullRoute";
-import { withAuthorHandles } from "$lib/api/repoIndex";
-import { countCommentsByCommit } from "$lib/components/comment/comments";
-import { didFromUri } from "$lib/api/uri";
+import { createBobbinClient } from "#lib/api/client.ts";
+import { listLog } from "#lib/api/gitmirror.ts";
+import { early, orNull, settle, stream } from "#lib/api/load.ts";
+import { isRedirect, parseDiffRoute, parseInterdiffRoute } from "#lib/api/pullRoute.ts";
+import { withAuthorHandles } from "#lib/api/repoIndex.ts";
+import { countCommentsByCommit } from "#lib/components/comment/comments.ts";
+import { didFromUri } from "#lib/api/uri.ts";
import type { Did } from "@atcute/lexicons/syntax";
import type { LayoutServerLoad } from "./$types";
diff --git a/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/+page.svelte b/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/+page.svelte
index d590c2e77..f2f6012ae 100644
--- a/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/+page.svelte
@@ -3,10 +3,10 @@
import { goto } from "$app/navigation";
import { resolve } from "$app/paths";
import type { ComponentProps } from "svelte";
- import Bones from "$lib/components/ui/Bones.svelte";
- import Pending from "$lib/components/ui/Pending.svelte";
- import repoPullsPullviewpageSkeletonFixture from "$lib/bones/repo-pulls-pullviewpage--skeleton-fixture.bones.json";
- import PullViewPage from "$routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/PullViewPage.svelte";
+ import Bones from "#lib/components/ui/Bones.svelte";
+ import Pending from "#lib/components/ui/Pending.svelte";
+ import repoPullsPullviewpageSkeletonFixture from "#lib/bones/repo-pulls-pullviewpage--skeleton-fixture.bones.json";
+ import PullViewPage from "#routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/PullViewPage.svelte";
type LoadedPullViewData = Awaited["data"]>;
diff --git a/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/+page.ts b/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/+page.ts
index 56e137ef7..98a14513f 100644
--- a/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/+page.ts
+++ b/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/+page.ts
@@ -1,9 +1,9 @@
-import { browser } from "$app/environment";
+import { browser } from "$app/env";
import { redirect } from "@sveltejs/kit";
-import { formatPatchUrl } from "$lib/api/knotmirror";
-import { getPatchStream } from "$lib/api/patchStream";
-import { isRedirect, parseDiffRoute, parseInterdiffRoute } from "$lib/api/pullRoute";
-import { settle, stream } from "$lib/api/load";
+import { formatPatchUrl } from "#lib/api/knotmirror.ts";
+import { getPatchStream } from "#lib/api/patchStream.ts";
+import { isRedirect, parseDiffRoute, parseInterdiffRoute } from "#lib/api/pullRoute.ts";
+import { settle, stream } from "#lib/api/load.ts";
import type { Did } from "@atcute/lexicons/syntax";
import type { PageLoad } from "./$types";
diff --git a/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/PullViewPage.stories.svelte b/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/PullViewPage.stories.svelte
index d4c3c84e7..98a4c363f 100644
--- a/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/PullViewPage.stories.svelte
+++ b/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/PullViewPage.stories.svelte
@@ -2,7 +2,7 @@
import { defineMeta, type StoryContext } from "@storybook/addon-svelte-csf";
import { expect, userEvent, waitFor, within } from "storybook/test";
import type { ComponentProps } from "svelte";
- import { holdErrorReset } from "$storybook/holdErrorReset";
+ import { holdErrorReset } from "#storybook/holdErrorReset.ts";
import {
base,
bobbinUrl,
@@ -20,15 +20,15 @@
sourceRepoDid,
targetBranch,
type PullFetchOptions
- } from "$fixtures/pull";
+ } from "#fixtures/pull.ts";
import PullViewRoute from "./+page.svelte";
- import { accessFor } from "$lib/api/access";
- import { NO_SUBJECT_LABELS } from "$lib/api/labels";
- import type { TicketState } from "$lib/api/records";
- import type { Did } from "$lib/api/syntax";
- import type { PullView } from "$lib/api/pullRoute";
- import type { CommentView } from "$lib/components/comment/comments";
- import type { PullCiApproval } from "$lib/components/repo/pulls/PullApproveCi.svelte";
+ import { accessFor } from "#lib/api/access.ts";
+ import { NO_SUBJECT_LABELS } from "#lib/api/labels.ts";
+ import type { TicketState } from "#lib/api/records.ts";
+ import type { Did } from "#lib/api/syntax.ts";
+ import type { PullView } from "#lib/api/pullRoute.ts";
+ import type { CommentView } from "#lib/components/comment/comments.ts";
+ import type { PullCiApproval } from "#lib/components/repo/pulls/PullApproveCi.svelte";
type PullViewRouteData = ComponentProps["data"];
diff --git a/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/PullViewPage.svelte b/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/PullViewPage.svelte
index bede5d272..6cbed3320 100644
--- a/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/PullViewPage.svelte
+++ b/web/src/routes/[handle]/[repo]/pulls/[rkey]/[version]/[[range]]/PullViewPage.svelte
@@ -1,11 +1,11 @@
diff --git a/web/src/routes/[handle]/[repo]/pulls/new/+page.ts b/web/src/routes/[handle]/[repo]/pulls/new/+page.ts
index c7f837605..0bd7e0ab2 100644
--- a/web/src/routes/[handle]/[repo]/pulls/new/+page.ts
+++ b/web/src/routes/[handle]/[repo]/pulls/new/+page.ts
@@ -1,6 +1,6 @@
-import { settle, stream } from "$lib/api/load";
-import { requireGit } from "$lib/api/gitclient";
-import { loadCompose } from "$lib/api/pullCompose";
+import { settle, stream } from "#lib/api/load.ts";
+import { requireGit } from "#lib/api/gitclient.ts";
+import { loadCompose } from "#lib/api/pullCompose.ts";
import type { PageLoad } from "./$types";
export const load: PageLoad = async (event) => {
diff --git a/web/src/routes/[handle]/[repo]/pulls/pulls.test.ts b/web/src/routes/[handle]/[repo]/pulls/pulls.test.ts
index ae834dc8c..08d613958 100644
--- a/web/src/routes/[handle]/[repo]/pulls/pulls.test.ts
+++ b/web/src/routes/[handle]/[repo]/pulls/pulls.test.ts
@@ -1,7 +1,7 @@
import { describe, expect, it, vi } from "vitest";
import { load } from "./+page.server";
-import { TICKET_AUTHOR_DOCS } from "$lib/api/descriptors";
-import { TYPE_MINIDOC } from "$lib/api/enrich";
+import { TICKET_AUTHOR_DOCS } from "#lib/api/descriptors.ts";
+import { TYPE_MINIDOC } from "#lib/api/enrich.ts";
const REPO_DID = "did:plc:j5hmlfdrwkvtxm7cjmu7j2is";
const AUTHOR_DID = "did:plc:2zcfjzyocp6kapg6jc4eacok";
diff --git a/web/src/routes/[handle]/[repo]/raw/[ref]/[...path]/+server.ts b/web/src/routes/[handle]/[repo]/raw/[ref]/[...path]/+server.ts
index 68206fdb0..23fbd4a63 100644
--- a/web/src/routes/[handle]/[repo]/raw/[ref]/[...path]/+server.ts
+++ b/web/src/routes/[handle]/[repo]/raw/[ref]/[...path]/+server.ts
@@ -1,6 +1,6 @@
import { error } from "@sveltejs/kit";
-import { blobRawUrl } from "$lib/api/gitclient";
-import { resolveRepoFromParams } from "$lib/server/repo";
+import { blobRawUrl } from "#lib/api/gitclient.ts";
+import { resolveRepoFromParams } from "#lib/server/repo.ts";
import type { RequestHandler } from "./$types";
// redirecting instead of proxying keeps repo content off our own origin, same
diff --git a/web/src/routes/[handle]/[repo]/search/+page.svelte b/web/src/routes/[handle]/[repo]/search/+page.svelte
index d4de1a422..0ef4728b7 100644
--- a/web/src/routes/[handle]/[repo]/search/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/search/+page.svelte
@@ -1,6 +1,6 @@
diff --git a/web/src/routes/[handle]/[repo]/search/+page.ts b/web/src/routes/[handle]/[repo]/search/+page.ts
index 3e7e31364..e245f6774 100644
--- a/web/src/routes/[handle]/[repo]/search/+page.ts
+++ b/web/src/routes/[handle]/[repo]/search/+page.ts
@@ -1,4 +1,4 @@
-import { requireGit } from "$lib/api/gitclient";
+import { requireGit } from "#lib/api/gitclient.ts";
import type { PageLoad } from "./$types";
// the search itself is client-side
diff --git a/web/src/routes/[handle]/[repo]/settings/+layout.svelte b/web/src/routes/[handle]/[repo]/settings/+layout.svelte
index ee8d423f5..acc68b0b9 100644
--- a/web/src/routes/[handle]/[repo]/settings/+layout.svelte
+++ b/web/src/routes/[handle]/[repo]/settings/+layout.svelte
@@ -1,10 +1,10 @@
diff --git a/web/src/routes/[handle]/[repo]/settings/+page.ts b/web/src/routes/[handle]/[repo]/settings/+page.ts
index 9f4276a38..0a5dfbf98 100644
--- a/web/src/routes/[handle]/[repo]/settings/+page.ts
+++ b/web/src/routes/[handle]/[repo]/settings/+page.ts
@@ -1,9 +1,9 @@
-import { createBobbinClient } from "$lib/api/client";
-import { branches, gitTarget, hasGit } from "$lib/api/gitclient";
-import { listLabelDefinitions } from "$lib/api/labels";
-import { settle, stream } from "$lib/api/load";
-import { branchSummaries } from "$lib/api/repo";
-import { REF_LIMIT } from "$lib/api/repoIndex";
+import { createBobbinClient } from "#lib/api/client.ts";
+import { branches, gitTarget, hasGit } from "#lib/api/gitclient.ts";
+import { listLabelDefinitions } from "#lib/api/labels.ts";
+import { settle, stream } from "#lib/api/load.ts";
+import { branchSummaries } from "#lib/api/repo.ts";
+import { REF_LIMIT } from "#lib/api/repoIndex.ts";
import type { PageLoad } from "./$types";
export const load: PageLoad = async (event) => {
diff --git a/web/src/routes/[handle]/[repo]/settings/access/+page.svelte b/web/src/routes/[handle]/[repo]/settings/access/+page.svelte
index b03f954f1..b76c56949 100644
--- a/web/src/routes/[handle]/[repo]/settings/access/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/settings/access/+page.svelte
@@ -1,21 +1,21 @@
diff --git a/web/src/routes/[handle]/[repo]/settings/access/+page.ts b/web/src/routes/[handle]/[repo]/settings/access/+page.ts
index c7205c3d5..f1eb9b17d 100644
--- a/web/src/routes/[handle]/[repo]/settings/access/+page.ts
+++ b/web/src/routes/[handle]/[repo]/settings/access/+page.ts
@@ -1,7 +1,7 @@
-import { requireRepoAdmin } from "$lib/api/access";
-import { createBobbinClient } from "$lib/api/client";
-import { listCollaborators } from "$lib/api/collaborators";
-import { settle, stream } from "$lib/api/load";
+import { requireRepoAdmin } from "#lib/api/access.ts";
+import { createBobbinClient } from "#lib/api/client.ts";
+import { listCollaborators } from "#lib/api/collaborators.ts";
+import { settle, stream } from "#lib/api/load.ts";
import type { PageLoad } from "./$types";
export const load: PageLoad = async (event) => {
diff --git a/web/src/routes/[handle]/[repo]/settings/access/new/+page.svelte b/web/src/routes/[handle]/[repo]/settings/access/new/+page.svelte
index 5ecf09db4..c25ebfe99 100644
--- a/web/src/routes/[handle]/[repo]/settings/access/new/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/settings/access/new/+page.svelte
@@ -1,17 +1,17 @@
diff --git a/web/src/routes/[handle]/[repo]/settings/access/new/+page.ts b/web/src/routes/[handle]/[repo]/settings/access/new/+page.ts
index a308e5542..4bbff18aa 100644
--- a/web/src/routes/[handle]/[repo]/settings/access/new/+page.ts
+++ b/web/src/routes/[handle]/[repo]/settings/access/new/+page.ts
@@ -1,4 +1,4 @@
-import { requireRepoAdmin } from "$lib/api/access";
+import { requireRepoAdmin } from "#lib/api/access.ts";
import type { PageLoad } from "./$types";
export const load: PageLoad = async (event) => {
diff --git a/web/src/routes/[handle]/[repo]/settings/hooks/+layout.svelte b/web/src/routes/[handle]/[repo]/settings/hooks/+layout.svelte
index 66eedebf1..e68389130 100644
--- a/web/src/routes/[handle]/[repo]/settings/hooks/+layout.svelte
+++ b/web/src/routes/[handle]/[repo]/settings/hooks/+layout.svelte
@@ -1,14 +1,14 @@
diff --git a/web/src/routes/[handle]/[repo]/settings/hooks/[id]/deliveries/+page.svelte b/web/src/routes/[handle]/[repo]/settings/hooks/[id]/deliveries/+page.svelte
index 8b5ab6e09..7613ab93a 100644
--- a/web/src/routes/[handle]/[repo]/settings/hooks/[id]/deliveries/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/settings/hooks/[id]/deliveries/+page.svelte
@@ -1,18 +1,22 @@
diff --git a/web/src/routes/[handle]/[repo]/settings/labels/new/+page.svelte b/web/src/routes/[handle]/[repo]/settings/labels/new/+page.svelte
index cc556886f..649966758 100644
--- a/web/src/routes/[handle]/[repo]/settings/labels/new/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/settings/labels/new/+page.svelte
@@ -1,20 +1,20 @@
diff --git a/web/src/routes/[handle]/[repo]/settings/labels/new/+page.ts b/web/src/routes/[handle]/[repo]/settings/labels/new/+page.ts
index a308e5542..4bbff18aa 100644
--- a/web/src/routes/[handle]/[repo]/settings/labels/new/+page.ts
+++ b/web/src/routes/[handle]/[repo]/settings/labels/new/+page.ts
@@ -1,4 +1,4 @@
-import { requireRepoAdmin } from "$lib/api/access";
+import { requireRepoAdmin } from "#lib/api/access.ts";
import type { PageLoad } from "./$types";
export const load: PageLoad = async (event) => {
diff --git a/web/src/routes/[handle]/[repo]/settings/pipelines/+page.svelte b/web/src/routes/[handle]/[repo]/settings/pipelines/+page.svelte
index e7e4bc07e..8a77db1b9 100644
--- a/web/src/routes/[handle]/[repo]/settings/pipelines/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/settings/pipelines/+page.svelte
@@ -1,34 +1,34 @@
diff --git a/web/src/routes/[handle]/[repo]/settings/rename/+page.svelte b/web/src/routes/[handle]/[repo]/settings/rename/+page.svelte
index f54b3e766..0921a1e58 100644
--- a/web/src/routes/[handle]/[repo]/settings/rename/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/settings/rename/+page.svelte
@@ -1,18 +1,18 @@
diff --git a/web/src/routes/[handle]/[repo]/settings/rename/+page.ts b/web/src/routes/[handle]/[repo]/settings/rename/+page.ts
index a308e5542..4bbff18aa 100644
--- a/web/src/routes/[handle]/[repo]/settings/rename/+page.ts
+++ b/web/src/routes/[handle]/[repo]/settings/rename/+page.ts
@@ -1,4 +1,4 @@
-import { requireRepoAdmin } from "$lib/api/access";
+import { requireRepoAdmin } from "#lib/api/access.ts";
import type { PageLoad } from "./$types";
export const load: PageLoad = async (event) => {
diff --git a/web/src/routes/[handle]/[repo]/settings/sites/+page.svelte b/web/src/routes/[handle]/[repo]/settings/sites/+page.svelte
index 762b65edd..f2645fcb2 100644
--- a/web/src/routes/[handle]/[repo]/settings/sites/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/settings/sites/+page.svelte
@@ -1,10 +1,10 @@
diff --git a/web/src/routes/[handle]/[repo]/stars/+page.ts b/web/src/routes/[handle]/[repo]/stars/+page.ts
index 799380028..a53789726 100644
--- a/web/src/routes/[handle]/[repo]/stars/+page.ts
+++ b/web/src/routes/[handle]/[repo]/stars/+page.ts
@@ -1,9 +1,9 @@
-import { createBobbinClient } from "$lib/api/client";
-import { IdentityCache } from "$lib/api/identity";
-import { settle, stream } from "$lib/api/load";
-import { listStars } from "$lib/api/records";
-import { didFromUri } from "$lib/api/uri";
-import { offsetFor, pageCount, pageParam } from "$lib/pagination";
+import { createBobbinClient } from "#lib/api/client.ts";
+import { IdentityCache } from "#lib/api/identity.ts";
+import { settle, stream } from "#lib/api/load.ts";
+import { listStars } from "#lib/api/records.ts";
+import { didFromUri } from "#lib/api/uri.ts";
+import { offsetFor, pageCount, pageParam } from "#lib/pagination.ts";
import type { PageLoad } from "./$types";
const LIMIT = 50;
diff --git a/web/src/routes/[handle]/[repo]/tags/+page.svelte b/web/src/routes/[handle]/[repo]/tags/+page.svelte
index 4e9c167c1..4b517d690 100644
--- a/web/src/routes/[handle]/[repo]/tags/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/tags/+page.svelte
@@ -1,11 +1,11 @@
diff --git a/web/src/routes/[handle]/[repo]/tags/+page.ts b/web/src/routes/[handle]/[repo]/tags/+page.ts
index f3ee40e94..eccb98a8f 100644
--- a/web/src/routes/[handle]/[repo]/tags/+page.ts
+++ b/web/src/routes/[handle]/[repo]/tags/+page.ts
@@ -1,8 +1,8 @@
-import { gitTarget, requireGit, tags } from "$lib/api/gitclient";
-import { REF_LIMIT } from "$lib/api/repoIndex";
-import { toTagSummary } from "$lib/api/repo";
-import { settle, stream } from "$lib/api/load";
-import { discoveredPageCount, offsetFor, pageCount, pageParam } from "$lib/pagination";
+import { gitTarget, requireGit, tags } from "#lib/api/gitclient.ts";
+import { REF_LIMIT } from "#lib/api/repoIndex.ts";
+import { toTagSummary } from "#lib/api/repo.ts";
+import { settle, stream } from "#lib/api/load.ts";
+import { discoveredPageCount, offsetFor, pageCount, pageParam } from "#lib/pagination.ts";
import type { PageLoad } from "./$types";
export const load: PageLoad = async (event) => {
diff --git a/web/src/routes/[handle]/[repo]/tags/[tag]/+page.svelte b/web/src/routes/[handle]/[repo]/tags/[tag]/+page.svelte
index eadea42ea..6cf62d874 100644
--- a/web/src/routes/[handle]/[repo]/tags/[tag]/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/tags/[tag]/+page.svelte
@@ -1,10 +1,10 @@
diff --git a/web/src/routes/[handle]/[repo]/tags/[tag]/+page.ts b/web/src/routes/[handle]/[repo]/tags/[tag]/+page.ts
index 69205875a..3a3549e6a 100644
--- a/web/src/routes/[handle]/[repo]/tags/[tag]/+page.ts
+++ b/web/src/routes/[handle]/[repo]/tags/[tag]/+page.ts
@@ -1,8 +1,8 @@
import { error } from "@sveltejs/kit";
-import { gitTarget, requireGit, tag, tags } from "$lib/api/gitclient";
-import { settle, stream } from "$lib/api/load";
-import { toTagSummary } from "$lib/api/repo";
-import type * as ListTags from "$lib/api/lexicons/types/org/tangled/temp/git/listTags";
+import { gitTarget, requireGit, tag, tags } from "#lib/api/gitclient.ts";
+import { settle, stream } from "#lib/api/load.ts";
+import { toTagSummary } from "#lib/api/repo.ts";
+import type * as ListTags from "#lib/api/lexicons/types/org/tangled/temp/git/listTags.ts";
import type { PageLoad } from "./$types";
export const load: PageLoad = async (event) => {
diff --git a/web/src/routes/[handle]/[repo]/tree/[ref]/+page.server.ts b/web/src/routes/[handle]/[repo]/tree/[ref]/+page.server.ts
index bfd9f66d3..d6e9bf124 100644
--- a/web/src/routes/[handle]/[repo]/tree/[ref]/+page.server.ts
+++ b/web/src/routes/[handle]/[repo]/tree/[ref]/+page.server.ts
@@ -1,5 +1,5 @@
-import { early, settle } from "$lib/api/load";
-import { loadRepoIndex } from "$lib/server/repoIndex";
+import { early, settle } from "#lib/api/load.ts";
+import { loadRepoIndex } from "#lib/server/repoIndex.ts";
import type { PageServerLoad } from "./$types";
// the ref is a single encoded segment, so `feature/x` arrives here intact
diff --git a/web/src/routes/[handle]/[repo]/tree/[ref]/+page.svelte b/web/src/routes/[handle]/[repo]/tree/[ref]/+page.svelte
index 324516319..6d6663654 100644
--- a/web/src/routes/[handle]/[repo]/tree/[ref]/+page.svelte
+++ b/web/src/routes/[handle]/[repo]/tree/[ref]/+page.svelte
@@ -1,9 +1,9 @@
diff --git a/web/src/routes/[handle]/handle.test.ts b/web/src/routes/[handle]/handle.test.ts
index d2d029c48..1684c2ec3 100644
--- a/web/src/routes/[handle]/handle.test.ts
+++ b/web/src/routes/[handle]/handle.test.ts
@@ -1,9 +1,9 @@
import { describe, expect, it, vi } from "vitest";
-import { load as handleLayoutLoad } from "$routes/[handle]/+layout";
-import { load as repoLayoutLoad } from "$routes/[handle]/[repo]/+layout.server";
-import { REPO_OWNER_DOCS } from "$lib/api/descriptors";
-import { ACCOUNT_MODERATION, PROFILE_MODERATION } from "$lib/api/moderationLabels";
-import { TYPE_MINIDOC, type LabelsDescriptor, type Sidecar } from "$lib/api/enrich";
+import { load as handleLayoutLoad } from "#routes/[handle]/+layout.ts";
+import { load as repoLayoutLoad } from "#routes/[handle]/[repo]/+layout.server.ts";
+import { REPO_OWNER_DOCS } from "#lib/api/descriptors.ts";
+import { ACCOUNT_MODERATION, PROFILE_MODERATION } from "#lib/api/moderationLabels.ts";
+import { TYPE_MINIDOC, type LabelsDescriptor, type Sidecar } from "#lib/api/enrich.ts";
const labeled = (ref: string, of: LabelsDescriptor, val: string): Sidecar => ({
[ref]: {
diff --git a/web/src/routes/[handle]/settings/OrganizationAvatar.svelte b/web/src/routes/[handle]/settings/OrganizationAvatar.svelte
index 53929b69a..ab450c752 100644
--- a/web/src/routes/[handle]/settings/OrganizationAvatar.svelte
+++ b/web/src/routes/[handle]/settings/OrganizationAvatar.svelte
@@ -1,11 +1,11 @@
diff --git a/web/src/routes/[handle]/settings/OrganizationProfileTab.stories.svelte b/web/src/routes/[handle]/settings/OrganizationProfileTab.stories.svelte
index 1d669836d..ced87dd96 100644
--- a/web/src/routes/[handle]/settings/OrganizationProfileTab.stories.svelte
+++ b/web/src/routes/[handle]/settings/OrganizationProfileTab.stories.svelte
@@ -1,8 +1,8 @@
diff --git a/web/src/routes/avatar/[did]/+server.ts b/web/src/routes/avatar/[did]/+server.ts
index e7a8f09dd..6dce9223c 100644
--- a/web/src/routes/avatar/[did]/+server.ts
+++ b/web/src/routes/avatar/[did]/+server.ts
@@ -1,6 +1,6 @@
import { createHmac } from "node:crypto";
import { error } from "@sveltejs/kit";
-import { getConfig } from "$lib/server/config";
+import { getConfig } from "#lib/server/config.ts";
import type { RequestHandler } from "./$types";
// half a day, the same as what the service puts on the image
diff --git a/web/src/routes/blob/[did]/[cid]/+server.ts b/web/src/routes/blob/[did]/[cid]/+server.ts
index 4ea3e2aec..a9add4abb 100644
--- a/web/src/routes/blob/[did]/[cid]/+server.ts
+++ b/web/src/routes/blob/[did]/[cid]/+server.ts
@@ -1,9 +1,9 @@
import { error } from "@sveltejs/kit";
import { isCid, isDid } from "@atcute/lexicons/syntax";
-import { createBobbinClient } from "$lib/api/client";
-import { resolveMiniDoc } from "$lib/api/identity";
-import { camoUrl } from "$lib/server/camo";
-import { getConfig } from "$lib/server/config";
+import { createBobbinClient } from "#lib/api/client.ts";
+import { resolveMiniDoc } from "#lib/api/identity.ts";
+import { camoUrl } from "#lib/server/camo.ts";
+import { getConfig } from "#lib/server/config.ts";
import type { RequestHandler } from "./$types";
// markup renders blob+at:/// against this route because resolving the
diff --git a/web/src/routes/camo/[hex]/+server.ts b/web/src/routes/camo/[hex]/+server.ts
index 79d16fbd8..a2e530fb0 100644
--- a/web/src/routes/camo/[hex]/+server.ts
+++ b/web/src/routes/camo/[hex]/+server.ts
@@ -1,6 +1,6 @@
import { error } from "@sveltejs/kit";
-import { camoUrl } from "$lib/server/camo";
-import { signableTarget } from "$lib/server/camotarget";
+import { camoUrl } from "#lib/server/camo.ts";
+import { signableTarget } from "#lib/server/camotarget.ts";
import type { RequestHandler } from "./$types";
// the signed url only changes when the secret does, so it can cache for a day
diff --git a/web/src/routes/dev/components/+page.svelte b/web/src/routes/dev/components/+page.svelte
index d480174c5..974bc9209 100644
--- a/web/src/routes/dev/components/+page.svelte
+++ b/web/src/routes/dev/components/+page.svelte
@@ -19,69 +19,69 @@
import Star from "$icon/star";
import Trash2 from "$icon/trash-2";
import TriangleAlert from "$icon/triangle-alert";
- import bonesRadioLoadingRow from "$lib/bones/bones-radio--loading-row.bones.json";
- import ActorInput from "$lib/components/ui/ActorInput.svelte";
- import Avatar from "$lib/components/ui/Avatar.svelte";
- import Bones from "$lib/components/ui/Bones.svelte";
- import Button from "$lib/components/ui/Button.svelte";
- import ButtonCard from "$lib/components/ui/ButtonCard.svelte";
- import ButtonGroup from "$lib/components/ui/ButtonGroup.svelte";
- import Segment from "$lib/components/ui/Segment.svelte";
- import SegmentedControl from "$lib/components/ui/SegmentedControl.svelte";
- import Card from "$lib/components/ui/Card.svelte";
- import Checkbox from "$lib/components/ui/Checkbox.svelte";
- import ColorBall from "$lib/components/ui/ColorBall.svelte";
- import Combobox from "$lib/components/ui/Combobox.svelte";
- import ConfirmModal from "$lib/components/ui/ConfirmModal.svelte";
- import CopyButton from "$lib/components/ui/CopyButton.svelte";
- import Dropdown from "$lib/components/ui/Dropdown.svelte";
- import DropdownItem from "$lib/components/ui/DropdownItem.svelte";
- import EmptyState from "$lib/components/ui/EmptyState.svelte";
- import ErrorMessage from "$lib/components/ui/Error.svelte";
- import Field from "$lib/components/ui/Field.svelte";
- import FormStep from "$lib/components/ui/FormStep.svelte";
- import FormStepDisclosure from "$lib/components/ui/FormStepDisclosure.svelte";
- import GraphCell, { type Band } from "$lib/components/ui/GraphCell.svelte";
- import Hovercard from "$lib/components/ui/Hovercard.svelte";
- import Input from "$lib/components/ui/Input.svelte";
- import Kbd from "$lib/components/ui/Kbd.svelte";
- import Lightbox from "$lib/components/ui/Lightbox.svelte";
- import Link from "$lib/components/ui/Link.svelte";
- import ListPanel, { listRows } from "$lib/components/ui/ListPanel.svelte";
- import ListToolbar from "$lib/components/ui/ListToolbar.svelte";
- import Logo from "$lib/components/ui/Logo.svelte";
- import MarkdownEditor from "$lib/components/ui/MarkdownEditor.svelte";
- import Modal from "$lib/components/ui/Modal.svelte";
- import MoreMenu from "$lib/components/ui/MoreMenu.svelte";
- import Pagination from "$lib/components/ui/Pagination.svelte";
- import Radio from "$lib/components/ui/Radio.svelte";
+ import bonesRadioLoadingRow from "#lib/bones/bones-radio--loading-row.bones.json";
+ import ActorInput from "#lib/components/ui/ActorInput.svelte";
+ import Avatar from "#lib/components/ui/Avatar.svelte";
+ import Bones from "#lib/components/ui/Bones.svelte";
+ import Button from "#lib/components/ui/Button.svelte";
+ import ButtonCard from "#lib/components/ui/ButtonCard.svelte";
+ import ButtonGroup from "#lib/components/ui/ButtonGroup.svelte";
+ import Segment from "#lib/components/ui/Segment.svelte";
+ import SegmentedControl from "#lib/components/ui/SegmentedControl.svelte";
+ import Card from "#lib/components/ui/Card.svelte";
+ import Checkbox from "#lib/components/ui/Checkbox.svelte";
+ import ColorBall from "#lib/components/ui/ColorBall.svelte";
+ import Combobox from "#lib/components/ui/Combobox.svelte";
+ import ConfirmModal from "#lib/components/ui/ConfirmModal.svelte";
+ import CopyButton from "#lib/components/ui/CopyButton.svelte";
+ import Dropdown from "#lib/components/ui/Dropdown.svelte";
+ import DropdownItem from "#lib/components/ui/DropdownItem.svelte";
+ import EmptyState from "#lib/components/ui/EmptyState.svelte";
+ import ErrorMessage from "#lib/components/ui/Error.svelte";
+ import Field from "#lib/components/ui/Field.svelte";
+ import FormStep from "#lib/components/ui/FormStep.svelte";
+ import FormStepDisclosure from "#lib/components/ui/FormStepDisclosure.svelte";
+ import GraphCell, { type Band } from "#lib/components/ui/GraphCell.svelte";
+ import Hovercard from "#lib/components/ui/Hovercard.svelte";
+ import Input from "#lib/components/ui/Input.svelte";
+ import Kbd from "#lib/components/ui/Kbd.svelte";
+ import Lightbox from "#lib/components/ui/Lightbox.svelte";
+ import Link from "#lib/components/ui/Link.svelte";
+ import ListPanel, { listRows } from "#lib/components/ui/ListPanel.svelte";
+ import ListToolbar from "#lib/components/ui/ListToolbar.svelte";
+ import Logo from "#lib/components/ui/Logo.svelte";
+ import MarkdownEditor from "#lib/components/ui/MarkdownEditor.svelte";
+ import Modal from "#lib/components/ui/Modal.svelte";
+ import MoreMenu from "#lib/components/ui/MoreMenu.svelte";
+ import Pagination from "#lib/components/ui/Pagination.svelte";
+ import Radio from "#lib/components/ui/Radio.svelte";
import RangeSelector, {
type Range,
type RowActions
- } from "$lib/components/ui/RangeSelector.svelte";
- import ResizeHandle from "$lib/components/ui/ResizeHandle.svelte";
- import Section from "$lib/components/ui/Section.svelte";
- import Select from "$lib/components/ui/Select.svelte";
- import Separator from "$lib/components/ui/Separator.svelte";
- import ShimmerText from "$lib/components/ui/ShimmerText.svelte";
- import SignupPrompt from "$lib/components/ui/SignupPrompt.svelte";
- import Spinner from "$lib/components/ui/Spinner.svelte";
- import SplitButton from "$lib/components/ui/SplitButton.svelte";
- import StepMarker from "$lib/components/ui/StepMarker.svelte";
- import Tabs from "$lib/components/ui/Tabs.svelte";
- import Tag from "$lib/components/ui/Tag.svelte";
- import Textarea from "$lib/components/ui/Textarea.svelte";
- import TextSwap from "$lib/components/ui/TextSwap.svelte";
- import TimeAgo from "$lib/components/ui/TimeAgo.svelte";
- import Toggle from "$lib/components/ui/Toggle.svelte";
- import ToggleFaces from "$lib/components/ui/ToggleFaces.svelte";
- import Tooltip from "$lib/components/ui/Tooltip.svelte";
- import User from "$lib/components/ui/User.svelte";
- import type { InputTag } from "$lib/components/ui/inputField";
- import type { SelectOption } from "$lib/components/ui/selectField";
- import type { LightboxImage } from "$lib/lightbox.svelte";
- import Shell from "$routes/dev/components/Shell.svelte";
- import Tile from "$routes/dev/components/Tile.svelte";
+ } from "#lib/components/ui/RangeSelector.svelte";
+ import ResizeHandle from "#lib/components/ui/ResizeHandle.svelte";
+ import Section from "#lib/components/ui/Section.svelte";
+ import Select from "#lib/components/ui/Select.svelte";
+ import Separator from "#lib/components/ui/Separator.svelte";
+ import ShimmerText from "#lib/components/ui/ShimmerText.svelte";
+ import SignupPrompt from "#lib/components/ui/SignupPrompt.svelte";
+ import Spinner from "#lib/components/ui/Spinner.svelte";
+ import SplitButton from "#lib/components/ui/SplitButton.svelte";
+ import StepMarker from "#lib/components/ui/StepMarker.svelte";
+ import Tabs from "#lib/components/ui/Tabs.svelte";
+ import Tag from "#lib/components/ui/Tag.svelte";
+ import Textarea from "#lib/components/ui/Textarea.svelte";
+ import TextSwap from "#lib/components/ui/TextSwap.svelte";
+ import TimeAgo from "#lib/components/ui/TimeAgo.svelte";
+ import Toggle from "#lib/components/ui/Toggle.svelte";
+ import ToggleFaces from "#lib/components/ui/ToggleFaces.svelte";
+ import Tooltip from "#lib/components/ui/Tooltip.svelte";
+ import User from "#lib/components/ui/User.svelte";
+ import type { InputTag } from "#lib/components/ui/inputField.ts";
+ import type { SelectOption } from "#lib/components/ui/selectField.ts";
+ import type { LightboxImage } from "#lib/lightbox.svelte.ts";
+ import Shell from "#routes/dev/components/Shell.svelte";
+ import Tile from "#routes/dev/components/Tile.svelte";
const versions: SelectOption[] = [
{ value: "v1.2.0", hint: "latest" },
diff --git a/web/src/routes/dev/components/+page.ts b/web/src/routes/dev/components/+page.ts
index 7591adb85..9d036cf81 100644
--- a/web/src/routes/dev/components/+page.ts
+++ b/web/src/routes/dev/components/+page.ts
@@ -1,4 +1,4 @@
-import { dev } from "$app/environment";
+import { dev } from "$app/env";
import { error } from "@sveltejs/kit";
export const ssr = false;
diff --git a/web/src/routes/dev/components/Shell.svelte b/web/src/routes/dev/components/Shell.svelte
index 35091883a..8480551b9 100644
--- a/web/src/routes/dev/components/Shell.svelte
+++ b/web/src/routes/dev/components/Shell.svelte
@@ -7,10 +7,10 @@
import Search from "$icon/search";
import Sun from "$icon/sun";
import X from "$icon/x";
- import Button from "$lib/components/ui/Button.svelte";
- import Input from "$lib/components/ui/Input.svelte";
- import Logo from "$lib/components/ui/Logo.svelte";
- import { plural } from "$lib/format";
+ import Button from "#lib/components/ui/Button.svelte";
+ import Input from "#lib/components/ui/Input.svelte";
+ import Logo from "#lib/components/ui/Logo.svelte";
+ import { plural } from "#lib/format.ts";
interface Entry {
name: string;
diff --git a/web/src/routes/favicon.svg/+server.ts b/web/src/routes/favicon.svg/+server.ts
index 7a3f9d868..29effcf18 100644
--- a/web/src/routes/favicon.svg/+server.ts
+++ b/web/src/routes/favicon.svg/+server.ts
@@ -1,5 +1,5 @@
-import { dev } from "$app/environment";
-import dolly from "$static/logos/dolly.svg?raw";
+import { dev } from "$app/env";
+import dolly from "#static/logos/dolly.svg?raw";
import type { RequestHandler } from "./$types";
const devTint = "#d97706"; // --color-foreground-warning
diff --git a/web/src/routes/invite/+page.server.ts b/web/src/routes/invite/+page.server.ts
index a68ccc6c9..28a0fea4b 100644
--- a/web/src/routes/invite/+page.server.ts
+++ b/web/src/routes/invite/+page.server.ts
@@ -1,4 +1,4 @@
-import { requireAuth } from "$lib/auth/guards";
+import { requireAuth } from "#lib/auth/guards.ts";
import type { PageServerLoad } from "./$types";
export const load: PageServerLoad = (event) => {
diff --git a/web/src/routes/invite/+page.svelte b/web/src/routes/invite/+page.svelte
index c1e95d0ac..344b7e47c 100644
--- a/web/src/routes/invite/+page.svelte
+++ b/web/src/routes/invite/+page.svelte
@@ -1,21 +1,21 @@
diff --git a/web/src/routes/repo/migrate/+page.server.ts b/web/src/routes/repo/migrate/+page.server.ts
index a68ccc6c9..28a0fea4b 100644
--- a/web/src/routes/repo/migrate/+page.server.ts
+++ b/web/src/routes/repo/migrate/+page.server.ts
@@ -1,4 +1,4 @@
-import { requireAuth } from "$lib/auth/guards";
+import { requireAuth } from "#lib/auth/guards.ts";
import type { PageServerLoad } from "./$types";
export const load: PageServerLoad = (event) => {
diff --git a/web/src/routes/repo/migrate/+page.svelte b/web/src/routes/repo/migrate/+page.svelte
index 110106e8b..8f7ac5559 100644
--- a/web/src/routes/repo/migrate/+page.svelte
+++ b/web/src/routes/repo/migrate/+page.svelte
@@ -1,18 +1,18 @@
diff --git a/web/src/routes/settings/emails/+page.svelte b/web/src/routes/settings/emails/+page.svelte
index b67576858..d6b525ca3 100644
--- a/web/src/routes/settings/emails/+page.svelte
+++ b/web/src/routes/settings/emails/+page.svelte
@@ -1,5 +1,5 @@
diff --git a/web/src/routes/settings/emails/new/+page.svelte b/web/src/routes/settings/emails/new/+page.svelte
index 8f7a9abf5..c126dd09e 100644
--- a/web/src/routes/settings/emails/new/+page.svelte
+++ b/web/src/routes/settings/emails/new/+page.svelte
@@ -1,16 +1,16 @@
diff --git a/web/src/routes/settings/keys/new/+page.svelte b/web/src/routes/settings/keys/new/+page.svelte
index a44818d10..a7e594810 100644
--- a/web/src/routes/settings/keys/new/+page.svelte
+++ b/web/src/routes/settings/keys/new/+page.svelte
@@ -1,18 +1,18 @@
diff --git a/web/src/routes/settings/knots/new/+page.svelte b/web/src/routes/settings/knots/new/+page.svelte
index cdb2a3fd1..546ff52bf 100644
--- a/web/src/routes/settings/knots/new/+page.svelte
+++ b/web/src/routes/settings/knots/new/+page.svelte
@@ -1,17 +1,17 @@
diff --git a/web/src/routes/settings/organizations/+page.svelte b/web/src/routes/settings/organizations/+page.svelte
index 97408dfc2..35490b406 100644
--- a/web/src/routes/settings/organizations/+page.svelte
+++ b/web/src/routes/settings/organizations/+page.svelte
@@ -1,5 +1,5 @@
diff --git a/web/src/routes/settings/organizations/new/+page.svelte b/web/src/routes/settings/organizations/new/+page.svelte
index 1e64aee78..409d06852 100644
--- a/web/src/routes/settings/organizations/new/+page.svelte
+++ b/web/src/routes/settings/organizations/new/+page.svelte
@@ -1,6 +1,6 @@
- import { getAuth } from "$lib/auth.svelte";
- import { createLoad } from "$lib/action.svelte";
- import { createBobbinClient } from "$lib/api/client";
- import { loadProfile, saveAvatar } from "$lib/api/profileSettings";
- import AvatarForm from "$lib/components/settings/AvatarForm.svelte";
+ import { getAuth } from "#lib/auth.svelte.ts";
+ import { createLoad } from "#lib/action.svelte.ts";
+ import { createBobbinClient } from "#lib/api/client.ts";
+ import { loadProfile, saveAvatar } from "#lib/api/profileSettings.ts";
+ import AvatarForm from "#lib/components/settings/AvatarForm.svelte";
const auth = getAuth();
const user = $derived(auth.currentUser);
diff --git a/web/src/routes/settings/profile/deactivate/+page.svelte b/web/src/routes/settings/profile/deactivate/+page.svelte
index a69f52b30..8599a2133 100644
--- a/web/src/routes/settings/profile/deactivate/+page.svelte
+++ b/web/src/routes/settings/profile/deactivate/+page.svelte
@@ -1,10 +1,10 @@
diff --git a/web/src/routes/settings/spindles/+page.svelte b/web/src/routes/settings/spindles/+page.svelte
index e0beff6a4..2b3484494 100644
--- a/web/src/routes/settings/spindles/+page.svelte
+++ b/web/src/routes/settings/spindles/+page.svelte
@@ -1,5 +1,5 @@
diff --git a/web/src/routes/settings/spindles/new/+page.svelte b/web/src/routes/settings/spindles/new/+page.svelte
index 48e8ba398..4ac372631 100644
--- a/web/src/routes/settings/spindles/new/+page.svelte
+++ b/web/src/routes/settings/spindles/new/+page.svelte
@@ -1,17 +1,17 @@
diff --git a/web/src/routes/strings/[handle]/[rkey]/StringPageContent.svelte b/web/src/routes/strings/[handle]/[rkey]/StringPageContent.svelte
index f418289aa..dd7585b87 100644
--- a/web/src/routes/strings/[handle]/[rkey]/StringPageContent.svelte
+++ b/web/src/routes/strings/[handle]/[rkey]/StringPageContent.svelte
@@ -1,21 +1,21 @@
@@ -349,7 +353,7 @@
You have an unfinished repository migration from GitHub.
View migration
diff --git a/web/src/routes/welcome/+page.ts b/web/src/routes/welcome/+page.ts
index 8134ac0f2..8ae7e4e64 100644
--- a/web/src/routes/welcome/+page.ts
+++ b/web/src/routes/welcome/+page.ts
@@ -1,12 +1,12 @@
import { redirect } from "@sveltejs/kit";
-import { createBobbinClient } from "$lib/api/client";
-import { FOLLOW_VIEWER, STAR_VIEWER } from "$lib/api/descriptors";
-import { viewerRkeyOf } from "$lib/api/enrich";
-import { getTrendingWithViewerState } from "$lib/api/profile";
-import { httpStatusFor, toHttpError } from "$lib/api/load";
-import { getProfile } from "$lib/api/records";
-import { listPubKeys, sshFingerprint } from "$lib/api/settings";
-import { toPerson, toRepoCard } from "$lib/components/timeline/mappers";
+import { createBobbinClient } from "#lib/api/client.ts";
+import { FOLLOW_VIEWER, STAR_VIEWER } from "#lib/api/descriptors.ts";
+import { viewerRkeyOf } from "#lib/api/enrich.ts";
+import { getTrendingWithViewerState } from "#lib/api/profile.ts";
+import { httpStatusFor, toHttpError } from "#lib/api/load.ts";
+import { getProfile } from "#lib/api/records.ts";
+import { listPubKeys, sshFingerprint } from "#lib/api/settings.ts";
+import { toPerson, toRepoCard } from "#lib/components/timeline/mappers.ts";
import type { PageLoad } from "./$types";
export const load: PageLoad = async (event) => {
diff --git a/web/svelte.config.js b/web/svelte.config.js
deleted file mode 100644
index 4acdaa0f0..000000000
--- a/web/svelte.config.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import cloudflareAdapter from "@sveltejs/adapter-cloudflare";
-import adapter from "@sveltejs/adapter-node";
-import { vitePreprocess } from "@sveltejs/vite-plugin-svelte";
-import { testids } from "./scripts/testids.ts";
-
-const useCloudflareAdapter = process.env.SVELTE_ADAPTER === "cloudflare";
-const injectTestIds = process.env.E2E_TESTIDS === "true";
-const wranglerConfig = process.env.WRANGLER_CONFIG ?? "wrangler.dev.jsonc";
-
-const config = {
- preprocess: [vitePreprocess(), ...(injectTestIds ? [testids()] : [])],
- compilerOptions: {
- runes: ({ filename }) => (filename.split(/[/\\]/).includes("node_modules") ? undefined : true),
- // `await` in templates, so a page can hand a streamed promise straight to
- // instead of threading {#await} through every view
- experimental: { async: true }
- },
- kit: {
- adapter: useCloudflareAdapter
- ? cloudflareAdapter({
- config: wranglerConfig,
- // dev-only: serve the worker bindings locally; remoteBindings would need tokens
- platformProxy: { configPath: wranglerConfig, persist: true, remoteBindings: false }
- })
- : adapter(),
- // storybook input, not app code. eslint keeps the app from importing it
- alias: {
- $fixtures: "src/fixtures",
- $routes: "src/routes",
- $static: "static",
- $storybook: ".storybook",
- "$storybook/*": ".storybook/*"
- },
- // defaults to the build's clock, which makes every build of the same source
- // differ. the deploys pass the web tree's git hash, so it only changes with the app
- version: { name: process.env.APP_VERSION || undefined },
- paths: {
- // GFE is evil and rewrites // to /
- // so we do this to have /_app/ be at root always which means it doesnt break
- // bcz // -> / removes a depth level which makes browser try to fetch app
- // bundle that doesnt exist at that path
- relative: false
- }
- }
-};
-
-export default config;
diff --git a/web/tsconfig.json b/web/tsconfig.json
index fc4aefb63..d9a249e18 100644
--- a/web/tsconfig.json
+++ b/web/tsconfig.json
@@ -1,22 +1,9 @@
{
- "extends": "./.svelte-kit/tsconfig.json",
+ "extends": "$app/tsconfig",
"compilerOptions": {
- "rewriteRelativeImportExtensions": true,
- "allowJs": true,
- "checkJs": true,
- "esModuleInterop": true,
- "forceConsistentCasingInFileNames": true,
- "resolveJsonModule": true,
- "skipLibCheck": true,
"sourceMap": true,
"strict": true,
- "moduleResolution": "bundler",
- "allowImportingTsExtensions": true,
"allowArbitraryExtensions": true
- }
- // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
- // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
- //
- // To make changes to top-level options such as include and exclude, we recommend extending
- // the generated config; see https://svelte.dev/docs/kit/configuration#typescript
+ },
+ "include": ["src", "vite.config.ts"]
}
diff --git a/web/vite.config.ts b/web/vite.config.ts
index 7588341f7..02fae107f 100644
--- a/web/vite.config.ts
+++ b/web/vite.config.ts
@@ -1,14 +1,17 @@
-import tailwindcss from "@tailwindcss/vite";
+import cloudflareAdapter from "@sveltejs/adapter-cloudflare";
+import adapter from "@sveltejs/adapter-node";
import { sveltekit } from "@sveltejs/kit/vite";
+import { vitePreprocess } from "@sveltejs/vite-plugin-svelte";
+import tailwindcss from "@tailwindcss/vite";
import Icons from "unplugin-icons/vite";
import { defineConfig } from "vitest/config";
-import oauthMetadata, { loopbackClientId, loopbackScope } from "./src/lib/oauth-client-metadata";
+import oauthMetadata, { loopbackClientId, loopbackScope } from "./src/lib/oauth-client-metadata.ts";
+import { testids } from "./scripts/testids.ts";
import path from "node:path";
-import { fileURLToPath } from "node:url";
import { storybookTest } from "@storybook/addon-vitest/vitest-plugin";
import { playwright } from "@vitest/browser-playwright";
-const dirname =
- typeof __dirname !== "undefined" ? __dirname : path.dirname(fileURLToPath(import.meta.url));
+
+const dirname = import.meta.dirname;
// More info at: https://storybook.js.org/docs/next/writing-tests/integrations/vitest-addon
const devHost = process.env.VITE_DEV_HOST ?? "127.0.0.1";
@@ -30,6 +33,10 @@ const devScope =
process.env.VITE_OAUTH_SCOPE ??
(process.env.VITE_OAUTH_CLIENT_ID ? oauthMetadata.scope : loopbackScope);
const devClientId = loopbackClientId(devRedirectUri, devScope);
+const useCloudflareAdapter = process.env.SVELTE_ADAPTER === "cloudflare";
+const injectTestIds = process.env.E2E_TESTIDS === "true";
+const wranglerConfig = process.env.WRANGLER_CONFIG ?? "wrangler.dev.jsonc";
+
export default defineConfig({
plugins: [
{
@@ -54,10 +61,38 @@ export default defineConfig({
}
},
tailwindcss(),
- Icons({
- compiler: "svelte"
- }),
- sveltekit()
+ Icons({ compiler: "svelte" }),
+ sveltekit({
+ preprocess: [vitePreprocess(), ...(injectTestIds ? [testids()] : [])],
+ compilerOptions: {
+ runes: ({ filename }) =>
+ filename.split(/[/\\]/).includes("node_modules") ? undefined : true,
+ // `await` in templates, so a page can hand a streamed promise straight to
+ // instead of threading {#await} through every view
+ experimental: { async: true }
+ },
+ adapter: useCloudflareAdapter
+ ? cloudflareAdapter({
+ config: wranglerConfig,
+ // dev-only: serve the worker bindings locally; remoteBindings would need tokens
+ platformProxy: {
+ configPath: wranglerConfig,
+ persist: true,
+ remoteBindings: false
+ }
+ })
+ : adapter(),
+ // defaults to the build's clock, which makes every build of the same source
+ // differ. the deploys pass the web tree's git hash, so it only changes with the app
+ version: { name: process.env.APP_VERSION || undefined },
+ paths: {
+ // GFE is evil and rewrites // to /
+ // so we do this to have /_app/ be at root always which means it doesnt break
+ // bcz // -> / removes a depth level which makes browser try to fetch app
+ // bundle that doesnt exist at that path
+ relative: false
+ }
+ })
],
resolve: {
alias: {