Skip to content

Commit 7949409

Browse files
committed
catch undefined absolut URI
1 parent bbbd4a0 commit 7949409

1 file changed

Lines changed: 17 additions & 5 deletions

File tree

src/typeIndex/typeIndexLogic.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ import { newThing } from '../util/utils'
77
export 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

Comments
 (0)