finish phase 3: type-only codemod and zero non-bridge @atproto/api imports

Task 8: codemod repointed 150 namespace-type files to #/lexicons
(AppBskyFeedDefs.PostView -> app.bsky.feed.defs.PostView, .Record -> .Main)
plus ~105 hand-fixed consumers (composer/video state, DebugMod, Profile,
onboarding, dialogs). DM_SERVICE_HEADERS deleted; last chat call sites on
the chat client. RichText.tsx flipped to SDK-only. Remaining @atproto/api
importers: the three session bridge files, the deliberate dual-world
matcher in lib/xrpc-error.ts, and test fixtures. toLex boundary casts are
TODO(phase4)-tagged for bridge removal.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Samuel Newman
2026-07-17 02:08:48 +03:00
parent 300a50b69a
commit e7d349bc30
283 changed files with 2029 additions and 1806 deletions
+2 -2
View File
@@ -1,6 +1,5 @@
import {useCallback, useImperativeHandle, useState} from 'react'
import {View} from 'react-native'
import {type AppBskyGraphDefs} from '@atproto/api'
import {msg} from '@lingui/core/macro'
import {useLingui} from '@lingui/react'
import {Trans} from '@lingui/react/macro'
@@ -15,6 +14,7 @@ import {Button, ButtonIcon, ButtonText} from '#/components/Button'
import {BulletList_Stroke1_Corner0_Rounded as ListIcon} from '#/components/icons/BulletList'
import {PersonPlus_Stroke2_Corner0_Rounded as PersonPlusIcon} from '#/components/icons/Person'
import {IS_NATIVE} from '#/env'
import {type app} from '#/lexicons'
interface SectionRef {
scrollToTop: () => void
@@ -22,7 +22,7 @@ interface SectionRef {
interface AboutSectionProps {
ref?: React.Ref<SectionRef>
list: AppBskyGraphDefs.ListView
list: app.bsky.graph.defs.ListView
onPressAddUser: () => void
headerHeight: number
scrollElRef: ListRef
@@ -1,6 +1,5 @@
import {useMemo} from 'react'
import {View} from 'react-native'
import {AppBskyGraphDefs} from '@atproto/api'
import {RichText as RichTextAPI} from '@bsky.app/sdk/richtext'
import {msg} from '@lingui/core/macro'
import {useLingui} from '@lingui/react'
@@ -24,6 +23,7 @@ import {Loader} from '#/components/Loader'
import {RichText} from '#/components/RichText'
import * as Toast from '#/components/Toast'
import {useAnalytics} from '#/analytics'
import {type app} from '#/lexicons'
import {toLex} from '#/types/bsky'
import {MoreOptionsMenu} from './MoreOptionsMenu'
import {SubscribeMenu} from './SubscribeMenu'
@@ -34,14 +34,14 @@ export function Header({
preferences,
}: {
rkey: string
list: AppBskyGraphDefs.ListView
list: app.bsky.graph.defs.ListView
preferences: UsePreferencesQueryResponse
}) {
const {_} = useLingui()
const ax = useAnalytics()
const {currentAccount} = useSession()
const isCurateList = list.purpose === AppBskyGraphDefs.CURATELIST
const isModList = list.purpose === AppBskyGraphDefs.MODLIST
const isCurateList = list.purpose === 'app.bsky.graph.defs#curatelist'
const isModList = list.purpose === 'app.bsky.graph.defs#modlist'
const isBlocking = !!list.viewer?.blocked
const isMuting = !!list.viewer?.muted
const playHaptic = useHaptics()
@@ -1,4 +1,3 @@
import {type AppBskyActorDefs, AppBskyGraphDefs} from '@atproto/api'
import {AtUri} from '@atproto/syntax'
import {msg} from '@lingui/core/macro'
import {useLingui} from '@lingui/react'
@@ -37,13 +36,14 @@ import * as Prompt from '#/components/Prompt'
import * as Toast from '#/components/Toast'
import {useAnalytics} from '#/analytics'
import {IS_WEB} from '#/env'
import {type app} from '#/lexicons'
export function MoreOptionsMenu({
list,
savedFeedConfig,
}: {
list: AppBskyGraphDefs.ListView
savedFeedConfig?: AppBskyActorDefs.SavedFeed
list: app.bsky.graph.defs.ListView
savedFeedConfig?: app.bsky.actor.defs.SavedFeed
}) {
const {_} = useLingui()
const ax = useAnalytics()
@@ -58,8 +58,8 @@ export function MoreOptionsMenu({
const {mutateAsync: muteList} = useListMuteMutation()
const {mutateAsync: blockList} = useListBlockMutation()
const isCurateList = list.purpose === AppBskyGraphDefs.CURATELIST
const isModList = list.purpose === AppBskyGraphDefs.MODLIST
const isCurateList = list.purpose === 'app.bsky.graph.defs#curatelist'
const isModList = list.purpose === 'app.bsky.graph.defs#modlist'
const isBlocking = !!list.viewer?.blocked
const isMuting = !!list.viewer?.muted
const isPinned = Boolean(savedFeedConfig?.pinned)
@@ -1,4 +1,3 @@
import {type AppBskyGraphDefs} from '@atproto/api'
import {msg} from '@lingui/core/macro'
import {useLingui} from '@lingui/react'
import {Trans} from '@lingui/react/macro'
@@ -13,8 +12,9 @@ import * as Menu from '#/components/Menu'
import * as Prompt from '#/components/Prompt'
import * as Toast from '#/components/Toast'
import {useAnalytics} from '#/analytics'
import {type app} from '#/lexicons'
export function SubscribeMenu({list}: {list: AppBskyGraphDefs.ListView}) {
export function SubscribeMenu({list}: {list: app.bsky.graph.defs.ListView}) {
const {_} = useLingui()
const ax = useAnalytics()
const subscribeMutePromptControl = Prompt.usePromptControl()
+3 -3
View File
@@ -1,7 +1,6 @@
import {useCallback, useMemo, useRef, useState} from 'react'
import {View} from 'react-native'
import {useAnimatedRef} from 'react-native-reanimated'
import {AppBskyGraphDefs} from '@atproto/api'
import {AtUri} from '@atproto/syntax'
import {moderateUserList, type ModerationOpts} from '@bsky.app/sdk/moderation'
import {msg} from '@lingui/core/macro'
@@ -39,6 +38,7 @@ import * as Layout from '#/components/Layout'
import {Loader} from '#/components/Loader'
import * as Hider from '#/components/moderation/Hider'
import {IS_WEB} from '#/env'
import {type app} from '#/lexicons'
import {toLex} from '#/types/bsky'
import {AboutSection} from './AboutSection'
import {ErrorScreen} from './components/ErrorScreen'
@@ -144,7 +144,7 @@ function ProfileListScreenLoaded({
preferences,
}: Props & {
uri: string
list: AppBskyGraphDefs.ListView
list: app.bsky.graph.defs.ListView
moderationOpts: ModerationOpts
preferences: UsePreferencesQueryResponse
}) {
@@ -156,7 +156,7 @@ function ProfileListScreenLoaded({
const {rkey} = route.params
const feedSectionRef = useRef<SectionRef>(null)
const aboutSectionRef = useRef<SectionRef>(null)
const isCurateList = list.purpose === AppBskyGraphDefs.CURATELIST
const isCurateList = list.purpose === 'app.bsky.graph.defs#curatelist'
const isScreenFocused = useIsFocused()
const isHidden = list.labels?.findIndex(l => l.val === '!hide') !== -1
const isOwner = currentAccount?.did === list.creator.did