@@ -7,6 +7,10 @@ import { newThing } from '../util/utils'
77export function createTypeIndexLogic ( store , authn , profileLogic , utilityLogic ) : TypeIndexLogic {
88 const ns = namespace
99
10+ function isAbsoluteHttpUri ( uri : string | null | undefined ) : boolean {
11+ return ! ! uri && ( uri . startsWith ( 'https://' ) || uri . startsWith ( 'http://' ) )
12+ }
13+
1014 function getRegistrations ( instance , theClass ) {
1115 return store
1216 . each ( undefined , ns . solid ( 'instance' ) , instance )
@@ -96,7 +100,15 @@ export function createTypeIndexLogic(store, authn, profileLogic, utilityLogic):
96100 )
97101 let result = [ ]
98102 for ( const org of communities ) {
99- result = result . concat ( await loadTypeIndexesFor ( org as NamedNode ) as any )
103+ if ( org . termType !== 'NamedNode' || ! isAbsoluteHttpUri ( ( org as NamedNode ) . uri ) ) {
104+ debug . warn ( `Skipping malformed community node for ${ user } : ${ org } ` )
105+ continue
106+ }
107+ try {
108+ result = result . concat ( await loadTypeIndexesFor ( org as NamedNode ) as any )
109+ } catch ( err ) {
110+ debug . warn ( `Skipping community type indexes for ${ ( org as NamedNode ) . uri } : ${ err } ` )
111+ }
100112 }
101113 return result
102114 }
@@ -130,9 +142,9 @@ export function createTypeIndexLogic(store, authn, profileLogic, utilityLogic):
130142 function docDirUri ( node : NamedNode ) : string | null {
131143 const doc = node . doc ( )
132144 const dir = doc . dir ( )
133- if ( dir ?. uri ) return dir . uri
145+ if ( dir ?. uri && isAbsoluteHttpUri ( dir . uri ) ) return dir . uri
134146 const docUri = doc . uri
135- if ( ! docUri ) {
147+ if ( ! docUri || ! isAbsoluteHttpUri ( docUri ) ) {
136148 debug . log ( `docDirUri: missing doc uri for ${ node ?. uri } ` )
137149 return null
138150 }
@@ -147,14 +159,14 @@ export function createTypeIndexLogic(store, authn, profileLogic, utilityLogic):
147159
148160 function suggestPublicTypeIndex ( me : NamedNode ) {
149161 const dirUri = docDirUri ( me )
150- if ( ! dirUri ) throw new Error ( `suggestPublicTypeIndex: Cannot derive directory for ${ me . uri } ` )
162+ if ( ! dirUri || ! isAbsoluteHttpUri ( dirUri ) ) throw new Error ( `suggestPublicTypeIndex: Cannot derive directory for ${ me . uri } ` )
151163 return sym ( dirUri + 'publicTypeIndex.ttl' )
152164 }
153165 // Note this one is based off the pref file not the profile
154166
155167 function suggestPrivateTypeIndex ( preferencesFile : NamedNode ) {
156168 const dirUri = docDirUri ( preferencesFile )
157- if ( ! dirUri ) throw new Error ( `suggestPrivateTypeIndex: Cannot derive directory for ${ preferencesFile . uri } ` )
169+ if ( ! dirUri || ! isAbsoluteHttpUri ( dirUri ) ) throw new Error ( `suggestPrivateTypeIndex: Cannot derive directory for ${ preferencesFile . uri } ` )
158170 return sym ( dirUri + 'privateTypeIndex.ttl' )
159171 }
160172
0 commit comments