@@ -60,12 +60,20 @@ export function getModulesDir(): string {
6060async function resolveBookmarkedPath ( rawPath : string , bookmarkName ?: string ) : Promise < string > {
6161 const fm = fmOrThrow ( )
6262 const raw = String ( rawPath ?? "" ) . trim ( )
63- if ( ! raw ) return ""
63+ const name = String ( bookmarkName ?? "" ) . trim ( )
64+ if ( ! raw && ! name ) return ""
6465 if ( ! fm ?. bookmarkedPath ) return raw
6566
66- if ( bookmarkName ) {
67- const byName = await callMaybeAsync ( fm . bookmarkedPath , fm , [ bookmarkName ] )
68- if ( byName ) return String ( byName )
67+ if ( name ) {
68+ let nameExists = true
69+ if ( fm ?. bookmarkExists ) {
70+ const existed = await callMaybeAsync ( fm . bookmarkExists , fm , [ name ] )
71+ nameExists = ! ! existed
72+ }
73+ if ( nameExists ) {
74+ const byName = await callMaybeAsync ( fm . bookmarkedPath , fm , [ name ] )
75+ if ( byName ) return String ( byName )
76+ }
6977 }
7078 if ( ! fm ?. getAllFileBookmarks ) return raw
7179
@@ -75,25 +83,36 @@ async function resolveBookmarkedPath(rawPath: string, bookmarkName?: string): Pr
7583 const match = arr . find ( ( b : any ) => {
7684 const p = normalizePath ( String ( b ?. path ?? "" ) )
7785 const n = String ( b ?. name ?? "" )
78- return ( p && p === target ) || ( bookmarkName ? n === bookmarkName : false )
86+ return ( p && p === target ) || ( name ? n === name : false )
7987 } )
80- if ( ! match ?. name ) return raw
81- const resolved = await callMaybeAsync ( fm . bookmarkedPath , fm , [ match . name ] )
82- return resolved ? String ( resolved ) : raw
88+ if ( match ?. name ) {
89+ const resolved = await callMaybeAsync ( fm . bookmarkedPath , fm , [ match . name ] )
90+ if ( resolved ) return String ( resolved )
91+ }
92+
93+ // If bookmark name is configured but cannot be resolved, do not trust stale raw path.
94+ if ( name ) return ""
95+ return raw
8396}
8497
8598export async function getModulesDirResolved ( baseDir ?: string ) : Promise < string > {
8699 const cfg = loadConfig ( )
87100 const configured = String ( cfg . baseDir ?? "" ) . trim ( )
101+ const bookmarkName = String ( cfg . baseBookmarkName ?? "" ) . trim ( )
88102 const target = String ( baseDir ?? "" ) . trim ( )
89103 if ( ! configured && ! target ) return getModulesDir ( )
90104
91105 if ( ! target ) {
92- return configured ? await resolveBookmarkedPath ( configured , cfg . baseBookmarkName ) : getModulesDir ( )
106+ if ( ! configured ) return getModulesDir ( )
107+ const resolved = await resolveBookmarkedPath ( configured , bookmarkName )
108+ if ( resolved ) return resolved
109+ return bookmarkName ? "" : configured
93110 }
94111
95112 if ( configured && normalizePath ( target ) === normalizePath ( configured ) ) {
96- return await resolveBookmarkedPath ( target , cfg . baseBookmarkName )
113+ const resolved = await resolveBookmarkedPath ( target , bookmarkName )
114+ if ( resolved ) return resolved
115+ return bookmarkName ? "" : target
97116 }
98117 return target
99118}
@@ -123,6 +142,9 @@ export async function ensureStorage(): Promise<void> {
123142 const cfg = loadConfig ( )
124143 if ( cfg . baseDir ) {
125144 const resolved = await getModulesDirResolved ( cfg . baseDir )
145+ if ( ! resolved ) {
146+ throw new Error ( "书签路径不可用,请在设置页重新选择书签文件夹" )
147+ }
126148 await ensureDir ( resolved )
127149 return
128150 }
0 commit comments