/
sparql_update_builders.ts
88 lines (75 loc) · 2.46 KB
/
sparql_update_builders.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
import { braces, SparqlBuilder } from "./sparql_shared_builders.ts";
import { type RDF } from "../rdf.ts";
import { type SparqlValue } from "./sparql_tag.ts";
type Builders<T extends keyof SparqlUpdateBuilder> = Pick<
SparqlUpdateBuilder,
T
>;
class SparqlUpdateBuilder extends SparqlBuilder {
public WHERE(
strings: TemplateStringsArray,
...values: SparqlValue[]
): Builders<"build"> {
return this.template(strings, values, "WHERE", braces);
}
public USING_NAMED(
stringOrNamedNode: string | RDF.NamedNode<string>,
): Builders<"USING_NAMED" | "WHERE"> {
return this.namedNode(stringOrNamedNode, "USING NAMED");
}
public USING(
stringOrNamedNode: string | RDF.NamedNode<string>,
): Builders<"USING" | "USING_NAMED" | "WHERE"> {
return this.namedNode(stringOrNamedNode, "USING");
}
public INSERT(
strings: TemplateStringsArray,
...values: SparqlValue[]
): Builders<"USING" | "USING_NAMED" | "WHERE"> {
return this.template(strings, values, "INSERT", braces);
}
public INSERT_DATA(
strings: TemplateStringsArray,
...values: SparqlValue[]
): Builders<"build"> {
return this.template(strings, values, "INSERT DATA", braces);
}
public DELETE(
strings: TemplateStringsArray,
...values: SparqlValue[]
): Builders<"INSERT" | "USING" | "USING_NAMED" | "WHERE"> {
return this.template(strings, values, "DELETE", braces);
}
public DELETE_DATA(
strings: TemplateStringsArray,
...values: SparqlValue[]
): Builders<"build"> {
return this.template(strings, values, "DELETE DATA", braces);
}
public WITH(
stringOrNamedNode: string | RDF.NamedNode<string>,
): Builders<"INSERT" | "DELETE"> {
return this.namedNode(stringOrNamedNode, "WITH");
}
}
export const INSERT = Object.assign((
strings: TemplateStringsArray,
...values: SparqlValue[]
) => new SparqlUpdateBuilder().INSERT(strings, ...values), {
DATA: (
strings: TemplateStringsArray,
...values: SparqlValue[]
) => new SparqlUpdateBuilder().INSERT_DATA(strings, ...values),
});
export const DELETE = Object.assign((
strings: TemplateStringsArray,
...values: SparqlValue[]
) => new SparqlUpdateBuilder().DELETE(strings, ...values), {
DATA: (
strings: TemplateStringsArray,
...values: SparqlValue[]
) => new SparqlUpdateBuilder().DELETE_DATA(strings, ...values),
});
export const WITH = (
stringOrNamedNode: string | RDF.NamedNode<string>,
) => new SparqlUpdateBuilder().WITH(stringOrNamedNode);