-
Notifications
You must be signed in to change notification settings - Fork 143
/
terms.ts
142 lines (126 loc) · 4.25 KB
/
terms.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import {
ObjectType, CollectionTermType, NamedNodeTermType, VariableTermType, BlankNodeTermType, LiteralTermType, GraphTermType, DefaultGraphTermType,
} from '../types'
import Collection from '../collection'
import IndexedFormula from '../store'
import Statement from '../statement'
import {
BlankNode,
Quad_Graph,
Literal,
NamedNode,
Quad_Object,
Quad_Predicate,
Quad,
Quad_Subject,
Term,
Variable,
} from '../tf-types'
/** TypeGuard for RDFLib Statements */
export function isStatement(obj): obj is Statement {
return typeof obj === 'object' && obj !== null && 'subject' in obj
}
/** TypeGuard for RDFlib Stores */
export function isStore(obj): obj is IndexedFormula {
return typeof obj === 'object' && obj !== null && 'statements' in obj
}
/** TypeGuard for RDFLib Collections */
export function isCollection(obj: any): obj is Collection<any> {
return isTerm(obj)
&& (obj as Term).termType === CollectionTermType
}
/** TypeGuard for valid RDFlib Object types, also allows Collections, Graphs */
export function isRDFlibObject(obj: any): obj is ObjectType {
return obj && Object.prototype.hasOwnProperty.call(obj, 'termType') && (
obj.termType === NamedNodeTermType ||
obj.termType === VariableTermType ||
obj.termType === BlankNodeTermType ||
obj.termType === CollectionTermType ||
obj.termType === LiteralTermType ||
obj.termType === GraphTermType
)
}
/** TypeGuard for valid RDFlib Subject types, same as Object as RDFLib symmetrical.
*/
export function isRDFlibSubject(obj: any): obj is ObjectType {
return obj && Object.prototype.hasOwnProperty.call(obj, 'termType') && (
obj.termType === NamedNodeTermType ||
obj.termType === VariableTermType ||
obj.termType === BlankNodeTermType ||
obj.termType === CollectionTermType ||
obj.termType === LiteralTermType ||
obj.termType === GraphTermType
)
}
/** TypeGuard for valid RDF/JS spec Predicate types */
export function isRDFlibPredicate(obj: any): obj is Quad_Predicate {
return isTerm(obj) && (
obj.termType === NamedNodeTermType ||
obj.termType === BlankNodeTermType ||
obj.termType === VariableTermType
)
}
/** TypeGuard for RDFLib Variables */
export function isVariable(obj: any): obj is Variable {
return isTerm(obj)
&& (obj as Term).termType === VariableTermType
}
/** TypeGuard for RDF/JS spec Terms */
export function isTerm(obj: any): obj is Term {
return typeof obj === 'object'
&& obj !== null
&& 'termType' in obj
}
/** TypeGuard for RDF/JS spec Literals */
export function isLiteral(value: any): value is Literal {
return (value as Term).termType === LiteralTermType
}
/** TypeGuard for RDF/JS spec Quads */
export function isQuad(obj: any): obj is Quad<any, any, any, any> {
return typeof obj === "object" && obj !== null && (
'subject' in obj
&& 'predicate' in obj
&& 'object' in obj
)
}
/** TypeGuard for RDF/JS spec NamedNodes */
export function isNamedNode(obj: any): obj is NamedNode {
return isTerm(obj) && obj.termType === 'NamedNode'
}
/** TypeGuard for RDF/JS spec BlankNodes */
export function isBlankNode(obj: any): obj is BlankNode {
return isTerm(obj) && 'termType' in obj && obj.termType === 'BlankNode'
}
/** TypeGuard for valid RDF/JS spec Subject types */
export function isSubject(obj: any): obj is Quad_Subject {
return isTerm(obj) && (
obj.termType === NamedNodeTermType ||
obj.termType === VariableTermType ||
obj.termType === BlankNodeTermType
)
}
/** TypeGuard for valid RDF/JS spec Predicate types */
export function isPredicate(obj: any): obj is Quad_Predicate {
return isTerm(obj) && (
obj.termType === NamedNodeTermType ||
obj.termType === VariableTermType
)
}
/** TypeGuard for valid RDF/JS spec Object types */
export function isRDFObject(obj: any): obj is Quad_Object {
return isTerm(obj) && (
obj.termType === NamedNodeTermType ||
obj.termType === VariableTermType ||
obj.termType === BlankNodeTermType ||
obj.termType === LiteralTermType
)
}
/** TypeGuard for valid RDF/JS Graph types */
export function isGraph(obj: any): obj is Quad_Graph {
return isTerm(obj) && (
obj.termType === NamedNodeTermType ||
obj.termType === VariableTermType ||
obj.termType === BlankNodeTermType ||
obj.termType === DefaultGraphTermType
)
}