sparkql 0.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/README.md +198 -0
- package/dist/database/ask.d.ts +6 -0
- package/dist/database/ask.js +15 -0
- package/dist/database/ask.js.map +1 -0
- package/dist/database/base.d.ts +42 -0
- package/dist/database/base.js +87 -0
- package/dist/database/base.js.map +1 -0
- package/dist/database/construct.d.ts +7 -0
- package/dist/database/construct.js +21 -0
- package/dist/database/construct.js.map +1 -0
- package/dist/database/describe.d.ts +7 -0
- package/dist/database/describe.js +22 -0
- package/dist/database/describe.js.map +1 -0
- package/dist/database/index.d.ts +1 -0
- package/dist/database/index.js +2 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/query.d.ts +8 -0
- package/dist/database/query.js +58 -0
- package/dist/database/query.js.map +1 -0
- package/dist/database/select.d.ts +32 -0
- package/dist/database/select.js +128 -0
- package/dist/database/select.js.map +1 -0
- package/dist/database/sparql-query.d.ts +34 -0
- package/dist/database/sparql-query.js +338 -0
- package/dist/database/sparql-query.js.map +1 -0
- package/dist/database/update.d.ts +29 -0
- package/dist/database/update.js +137 -0
- package/dist/database/update.js.map +1 -0
- package/dist/database/with.d.ts +19 -0
- package/dist/database/with.js +97 -0
- package/dist/database/with.js.map +1 -0
- package/dist/functions/aggregate.d.ts +14 -0
- package/dist/functions/aggregate.js +37 -0
- package/dist/functions/aggregate.js.map +1 -0
- package/dist/functions/function.d.ts +57 -0
- package/dist/functions/function.js +177 -0
- package/dist/functions/function.js.map +1 -0
- package/dist/functions/index.d.ts +4 -0
- package/dist/functions/index.js +5 -0
- package/dist/functions/index.js.map +1 -0
- package/dist/functions/operation.d.ts +16 -0
- package/dist/functions/operation.js +52 -0
- package/dist/functions/operation.js.map +1 -0
- package/dist/functions/utils.d.ts +5 -0
- package/dist/functions/utils.js +29 -0
- package/dist/functions/utils.js.map +1 -0
- package/dist/generic.d.ts +262 -0
- package/dist/generic.js +11 -0
- package/dist/generic.js.map +1 -0
- package/dist/index.cjs +18 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/dist/structures/blank.d.ts +11 -0
- package/dist/structures/blank.js +18 -0
- package/dist/structures/blank.js.map +1 -0
- package/dist/structures/expression.d.ts +33 -0
- package/dist/structures/expression.js +169 -0
- package/dist/structures/expression.js.map +1 -0
- package/dist/structures/index.d.ts +7 -0
- package/dist/structures/index.js +8 -0
- package/dist/structures/index.js.map +1 -0
- package/dist/structures/iri.d.ts +18 -0
- package/dist/structures/iri.js +35 -0
- package/dist/structures/iri.js.map +1 -0
- package/dist/structures/ordering.d.ts +3 -0
- package/dist/structures/ordering.js +7 -0
- package/dist/structures/ordering.js.map +1 -0
- package/dist/structures/path.d.ts +25 -0
- package/dist/structures/path.js +29 -0
- package/dist/structures/path.js.map +1 -0
- package/dist/structures/pattern.d.ts +13 -0
- package/dist/structures/pattern.js +78 -0
- package/dist/structures/pattern.js.map +1 -0
- package/dist/structures/variable.d.ts +13 -0
- package/dist/structures/variable.js +28 -0
- package/dist/structures/variable.js.map +1 -0
- package/package.json +77 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Burak Mehmet Ekmekçi
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# sparkql
|
|
2
|
+
|
|
3
|
+
A TypeScript query builder for SPARQL with type-safe operations and intuitive API.
|
|
4
|
+
|
|
5
|
+
**This library is currently in alpha and should not be used in production.** The API is subject to change and may
|
|
6
|
+
contain bugs or incomplete features.
|
|
7
|
+
|
|
8
|
+
## Installation
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install sparkql@alpha
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Features
|
|
15
|
+
|
|
16
|
+
- **Type-safe** - Full TypeScript support with type inference
|
|
17
|
+
- **Fluent API** - Chainable query builder interface
|
|
18
|
+
- **Query Types** - Support for SELECT, ASK, CONSTRUCT, DESCRIBE, and UPDATE queries
|
|
19
|
+
- **Prefix Management** - Easy prefix definition and IRI handling
|
|
20
|
+
- **Aggregates** - Built-in aggregate functions (COUNT, SUM, AVG, etc.)
|
|
21
|
+
- **Transformations** - Type-safe data transformations
|
|
22
|
+
- **SPARQL Client** - Built-in HTTP client for executing queries
|
|
23
|
+
- **Path Expressions** - Property path support
|
|
24
|
+
- **Functions** - Comprehensive SPARQL function support
|
|
25
|
+
|
|
26
|
+
## Quick Start
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
import { SparqlDatabase, triple } from 'sparkql';
|
|
30
|
+
|
|
31
|
+
const prefixes = {
|
|
32
|
+
foaf: {
|
|
33
|
+
uri: 'http://xmlns.com/foaf/0.1/',
|
|
34
|
+
fields: []
|
|
35
|
+
},
|
|
36
|
+
rdf: {
|
|
37
|
+
uri: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
|
|
38
|
+
fields: []
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Create a database instance with prefixes
|
|
43
|
+
const db = SparqlDatabase.create({
|
|
44
|
+
prefixes: prefixes,
|
|
45
|
+
endpointUrl: 'https://your-sparql-endpoint.com/sparql'
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// Create variable and IRI managers
|
|
49
|
+
const [v, n] = db.create([], prefixes);
|
|
50
|
+
|
|
51
|
+
// Build and execute a SELECT query
|
|
52
|
+
const results = await db
|
|
53
|
+
.select({
|
|
54
|
+
name: v.name,
|
|
55
|
+
age: v.age
|
|
56
|
+
})
|
|
57
|
+
.where(
|
|
58
|
+
triple(v.person, n.foaf.name, v.name),
|
|
59
|
+
triple(v.person, n.foaf.age, v.age)
|
|
60
|
+
)
|
|
61
|
+
.limit(10);
|
|
62
|
+
|
|
63
|
+
console.log(results); // Type-safe results
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Building Queries
|
|
67
|
+
|
|
68
|
+
### SELECT Queries
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
import { triple, asc } from 'sparkql';
|
|
72
|
+
|
|
73
|
+
const query = db
|
|
74
|
+
.select({
|
|
75
|
+
name: v.name,
|
|
76
|
+
email: v.email
|
|
77
|
+
})
|
|
78
|
+
.where(
|
|
79
|
+
triple(v.person, n.foaf.name, v.name),
|
|
80
|
+
triple(v.person, n.foaf.mbox, v.email)
|
|
81
|
+
)
|
|
82
|
+
.orderBy(asc(v.name))
|
|
83
|
+
.limit(100);
|
|
84
|
+
|
|
85
|
+
// Get SPARQL string
|
|
86
|
+
const sparql = query.toSPARQL();
|
|
87
|
+
|
|
88
|
+
// Execute query
|
|
89
|
+
const results = await query;
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### ASK Queries
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
import { triple } from 'sparkql';
|
|
96
|
+
|
|
97
|
+
const exists = await db
|
|
98
|
+
.ask()
|
|
99
|
+
.where(
|
|
100
|
+
triple(v.s, n.rdf.type, n.foaf.Person)
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
console.log(exists); // boolean
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### CONSTRUCT Queries
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
import { triple } from 'sparkql';
|
|
110
|
+
|
|
111
|
+
const triples = await db
|
|
112
|
+
.construct(
|
|
113
|
+
triple(v.person, n.rdf.type, n.foaf.Person)
|
|
114
|
+
)
|
|
115
|
+
.where(
|
|
116
|
+
triple(v.person, n.foaf.name, v.name)
|
|
117
|
+
);
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### UPDATE Queries
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
import { triple } from 'sparkql';
|
|
124
|
+
|
|
125
|
+
await db
|
|
126
|
+
.update()
|
|
127
|
+
.insert(
|
|
128
|
+
triple(db.iri('ex:person1'), n.foaf.name, db.literal('John Doe'))
|
|
129
|
+
);
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Advanced Features
|
|
133
|
+
|
|
134
|
+
### Aggregates
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
import { triple, as, count, avg } from 'sparkql';
|
|
138
|
+
|
|
139
|
+
const stats = await db
|
|
140
|
+
.select({
|
|
141
|
+
count: v.count,
|
|
142
|
+
avgAge: v.avgAge
|
|
143
|
+
})
|
|
144
|
+
.where(
|
|
145
|
+
...triples(v.person, predicates(
|
|
146
|
+
[n.rdf.type, n.foaf.Person],
|
|
147
|
+
[n.foaf.age, v.age]
|
|
148
|
+
))
|
|
149
|
+
)
|
|
150
|
+
.groupBy()
|
|
151
|
+
.having(
|
|
152
|
+
as(count(v.person), v.count),
|
|
153
|
+
as(avg(v.age), v.avgAge)
|
|
154
|
+
);
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Optional Patterns
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
import { triple, optional } from 'sparkql';
|
|
161
|
+
|
|
162
|
+
const results = await db
|
|
163
|
+
.select({
|
|
164
|
+
name: v.name,
|
|
165
|
+
email: v.email
|
|
166
|
+
})
|
|
167
|
+
.where(
|
|
168
|
+
triple(v.person, n.foaf.name, v.name),
|
|
169
|
+
optional(
|
|
170
|
+
triple(v.person, n.foaf.mbox, v.email)
|
|
171
|
+
)
|
|
172
|
+
);
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Filters
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
import { triple, filter, gt } from 'sparkql';
|
|
179
|
+
|
|
180
|
+
const filtered = await db
|
|
181
|
+
.select({
|
|
182
|
+
name: v.name,
|
|
183
|
+
age: v.age
|
|
184
|
+
})
|
|
185
|
+
.where(
|
|
186
|
+
triple(v.person, n.foaf.name, v.name),
|
|
187
|
+
triple(v.person, n.foaf.age, v.age),
|
|
188
|
+
filter(gt(v.age, 18))
|
|
189
|
+
);
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Roadmap
|
|
193
|
+
|
|
194
|
+
_Will be updated as the library matures..._
|
|
195
|
+
|
|
196
|
+
## Contributing
|
|
197
|
+
|
|
198
|
+
Contributions are welcome! Please feel free to submit a pull request.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { QueryBuilderBase } from './query.js';
|
|
2
|
+
import { AskQuery, FactoryFunctions, SparqlClient } from '../generic.js';
|
|
3
|
+
export declare class AskQueryBuilderBase extends QueryBuilderBase<AskQuery, boolean> implements PromiseLike<boolean> {
|
|
4
|
+
constructor(prefixes: AskQuery['prefixes'], base: string | undefined, factoryFunctions: FactoryFunctions, endpointUrl?: string);
|
|
5
|
+
protected makeQuery(client: SparqlClient): Promise<boolean>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { QueryBuilderBase } from './query.js';
|
|
2
|
+
export class AskQueryBuilderBase extends QueryBuilderBase {
|
|
3
|
+
constructor(prefixes, base, factoryFunctions, endpointUrl) {
|
|
4
|
+
super({
|
|
5
|
+
type: 'query',
|
|
6
|
+
queryType: 'ASK',
|
|
7
|
+
base: base,
|
|
8
|
+
prefixes: prefixes,
|
|
9
|
+
}, factoryFunctions, endpointUrl);
|
|
10
|
+
}
|
|
11
|
+
async makeQuery(client) {
|
|
12
|
+
return client.query.ask(this.toSPARQL());
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=ask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/database/ask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,MAAM,OAAO,mBACX,SAAQ,gBAAmC;IAG3C,YACE,QAA8B,EAC9B,IAAwB,EACxB,gBAAkC,EAClC,WAAoB;QAEpB,KAAK,CACH;YACE,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,QAAQ;SACnB,EACD,gBAAgB,EAChB,WAAW,CACZ,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,MAAoB;QAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { IriManagerConfig, VariableManagerConfig } from '../structures/index.js';
|
|
2
|
+
import * as SparqlJs from 'sparqljs';
|
|
3
|
+
import * as RdfJs from 'rdf-data-factory';
|
|
4
|
+
import { AskQueryBuilderBase } from './ask.js';
|
|
5
|
+
import { UpdateQueryBuilderBase } from './update.js';
|
|
6
|
+
import { SelectedVariables, InferredSelectResult, SelectQueryBuilderBase, TypedSelectedVariables } from './select.js';
|
|
7
|
+
import { DescribeQueryBuilderBase, DescribeVariables } from './describe.js';
|
|
8
|
+
import { ConstructQueryBuilderBase, ConstructTemplates } from './construct.js';
|
|
9
|
+
import { ExcludePrefix, FactoryFunctions, IriTerm, Strictness, Variable } from '../generic.js';
|
|
10
|
+
export interface SparqlDatabaseOptions<T extends IriManagerConfig, K extends string = 'g_'> {
|
|
11
|
+
prefixes?: T;
|
|
12
|
+
blankNodePrefix?: K;
|
|
13
|
+
endpointUrl?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class SparqlDatabase<T extends IriManagerConfig, K extends string = 'g_'> {
|
|
16
|
+
private readonly nodes;
|
|
17
|
+
private readonly queryBase?;
|
|
18
|
+
private readonly endpointUrl?;
|
|
19
|
+
private readonly queryPrefixes;
|
|
20
|
+
private readonly blankNodePrefix;
|
|
21
|
+
protected readonly factory: RdfJs.DataFactory;
|
|
22
|
+
protected readonly factoryFunctions: FactoryFunctions<K>;
|
|
23
|
+
private constructor();
|
|
24
|
+
static create<T extends IriManagerConfig, K extends string = 'g_'>(options?: SparqlDatabaseOptions<T, K>): SparqlDatabase<T, K>;
|
|
25
|
+
base(value: string): SparqlDatabase<T, K>;
|
|
26
|
+
select<U extends SelectedVariables>(variables?: U): SelectQueryBuilderBase<InferredSelectResult<U>>;
|
|
27
|
+
select<U extends Record<string, any>>(variables?: TypedSelectedVariables<U>): SelectQueryBuilderBase<U>;
|
|
28
|
+
selectDistinct<U extends Record<string, Variable<any, any>>>(variables?: U): SelectQueryBuilderBase<InferredSelectResult<U>>;
|
|
29
|
+
selectDistinct<U extends Record<string, any>>(variables?: TypedSelectedVariables<U>): SelectQueryBuilderBase<U>;
|
|
30
|
+
selectReduced<U extends Record<string, Variable<any, any>>>(variables?: U): SelectQueryBuilderBase<InferredSelectResult<U>>;
|
|
31
|
+
selectReduced<U extends Record<string, any>>(variables?: TypedSelectedVariables<U>): SelectQueryBuilderBase<U>;
|
|
32
|
+
ask(): AskQueryBuilderBase;
|
|
33
|
+
describe(...variables: DescribeVariables): DescribeQueryBuilderBase;
|
|
34
|
+
construct(...templates: ConstructTemplates): ConstructQueryBuilderBase;
|
|
35
|
+
update(): UpdateQueryBuilderBase;
|
|
36
|
+
variable: (value: string) => SparqlJs.VariableTerm;
|
|
37
|
+
iri: <T_1 extends string>(value: T_1) => SparqlJs.IriTerm;
|
|
38
|
+
blank: <T_1 extends string>(value?: ExcludePrefix<T_1, K>) => SparqlJs.BlankTerm;
|
|
39
|
+
literal: (value: string, lang?: string | IriTerm) => SparqlJs.LiteralTerm;
|
|
40
|
+
resetBlankCounter(): void;
|
|
41
|
+
create<T extends string, K extends IriManagerConfig, P extends Strictness = Strictness.loose>(variableKeys: readonly VariableManagerConfig<T>[], nodeConfig: K, mode?: P): readonly [import("../structures/variable.js").VariableManager<T, Strictness.loose | P>, import("../structures/iri.js").IriManager<K, Strictness.loose | P>, import("../structures/blank.js").BlankManager<K_1>];
|
|
42
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { createBlankManager, createIriManager, createVariableManager, transformIntoPrefixObject, } from '../structures/index.js';
|
|
2
|
+
import * as RdfJs from 'rdf-data-factory';
|
|
3
|
+
import { AskQueryBuilderBase } from './ask.js';
|
|
4
|
+
import { UpdateQueryBuilderBase } from './update.js';
|
|
5
|
+
import { SelectQueryBuilderBase, } from './select.js';
|
|
6
|
+
import { DescribeQueryBuilderBase } from './describe.js';
|
|
7
|
+
import { ConstructQueryBuilderBase } from './construct.js';
|
|
8
|
+
import { Strictness } from '../generic.js';
|
|
9
|
+
export class SparqlDatabase {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.variable = (value) => {
|
|
12
|
+
return Object.freeze(this.factory.variable(value));
|
|
13
|
+
};
|
|
14
|
+
this.iri = (value) => {
|
|
15
|
+
return Object.freeze(this.factory.namedNode(value));
|
|
16
|
+
};
|
|
17
|
+
this.blank = (value) => {
|
|
18
|
+
if (value && value.startsWith(this.blankNodePrefix)) {
|
|
19
|
+
throw Error(`For blank terms, the prefix "${this.blankNodePrefix}" is reserved for internal use.`);
|
|
20
|
+
}
|
|
21
|
+
return Object.freeze(this.factory.blankNode(value));
|
|
22
|
+
};
|
|
23
|
+
this.literal = (value, lang) => {
|
|
24
|
+
return Object.freeze(this.factory.literal(value, lang));
|
|
25
|
+
};
|
|
26
|
+
this.nodes = options?.prefixes;
|
|
27
|
+
this.queryBase = options?.base;
|
|
28
|
+
this.endpointUrl = options?.endpointUrl;
|
|
29
|
+
this.blankNodePrefix = options?.blankNodePrefix ?? 'g_';
|
|
30
|
+
this.queryPrefixes = transformIntoPrefixObject(options?.prefixes ?? {});
|
|
31
|
+
this.factory =
|
|
32
|
+
options?.factory ?? new RdfJs.DataFactory({ blankNodePrefix: this.blankNodePrefix });
|
|
33
|
+
this.factoryFunctions = {
|
|
34
|
+
variable: this.variable,
|
|
35
|
+
iri: this.iri,
|
|
36
|
+
blank: this.blank,
|
|
37
|
+
literal: this.literal,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
static create(options) {
|
|
41
|
+
const blankNodePrefix = options?.blankNodePrefix ?? 'g_';
|
|
42
|
+
const factory = new RdfJs.DataFactory({ blankNodePrefix });
|
|
43
|
+
return new SparqlDatabase({
|
|
44
|
+
...options,
|
|
45
|
+
factory: factory,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
base(value) {
|
|
49
|
+
return new SparqlDatabase({
|
|
50
|
+
blankNodePrefix: this.blankNodePrefix,
|
|
51
|
+
prefixes: this.nodes,
|
|
52
|
+
factory: this.factory,
|
|
53
|
+
base: value,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
select(variables) {
|
|
57
|
+
return new SelectQueryBuilderBase(variables, this.queryPrefixes, this.queryBase, this.factoryFunctions, undefined, undefined, this.endpointUrl);
|
|
58
|
+
}
|
|
59
|
+
selectDistinct(variables) {
|
|
60
|
+
return new SelectQueryBuilderBase(variables, this.queryPrefixes, this.queryBase, this.factoryFunctions, true, undefined, this.endpointUrl);
|
|
61
|
+
}
|
|
62
|
+
selectReduced(variables) {
|
|
63
|
+
return new SelectQueryBuilderBase(variables, this.queryPrefixes, this.queryBase, this.factoryFunctions, undefined, true, this.endpointUrl);
|
|
64
|
+
}
|
|
65
|
+
ask() {
|
|
66
|
+
return new AskQueryBuilderBase(this.queryPrefixes, this.queryBase, this.factoryFunctions, this.endpointUrl);
|
|
67
|
+
}
|
|
68
|
+
describe(...variables) {
|
|
69
|
+
return new DescribeQueryBuilderBase(variables, this.queryPrefixes, this.queryBase, this.factoryFunctions, this.endpointUrl);
|
|
70
|
+
}
|
|
71
|
+
construct(...templates) {
|
|
72
|
+
return new ConstructQueryBuilderBase(templates, this.queryPrefixes, this.queryBase, this.factoryFunctions, this.endpointUrl);
|
|
73
|
+
}
|
|
74
|
+
update() {
|
|
75
|
+
return new UpdateQueryBuilderBase([], this.queryPrefixes, this.queryBase, this.factoryFunctions, this.endpointUrl);
|
|
76
|
+
}
|
|
77
|
+
resetBlankCounter() {
|
|
78
|
+
this.factory.resetBlankNodeCounter();
|
|
79
|
+
}
|
|
80
|
+
create(variableKeys, nodeConfig, mode) {
|
|
81
|
+
const blanks = createBlankManager(this.factoryFunctions);
|
|
82
|
+
const nodes = createIriManager(nodeConfig, mode ?? Strictness.loose, this.factoryFunctions);
|
|
83
|
+
const variables = createVariableManager(variableKeys, mode ?? Strictness.loose, this.factoryFunctions);
|
|
84
|
+
return [variables, nodes, blanks];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/database/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { QueryBuilderBase } from './query.js';
|
|
2
|
+
import { Triple, QuadTerm, SparqlClient, ConstructQuery, FactoryFunctions } from '../generic.js';
|
|
3
|
+
export type ConstructTemplates = Triple[];
|
|
4
|
+
export declare class ConstructQueryBuilderBase extends QueryBuilderBase<ConstructQuery, QuadTerm[]> implements PromiseLike<QuadTerm[]> {
|
|
5
|
+
constructor(variables: ConstructTemplates, prefixes: ConstructQuery['prefixes'], base: string | undefined, factoryFunctions: FactoryFunctions, endpointUrl?: string);
|
|
6
|
+
protected makeQuery(client: SparqlClient): Promise<QuadTerm[]>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { QueryBuilderBase } from './query.js';
|
|
2
|
+
export class ConstructQueryBuilderBase extends QueryBuilderBase {
|
|
3
|
+
constructor(variables, prefixes, base, factoryFunctions, endpointUrl) {
|
|
4
|
+
super({
|
|
5
|
+
type: 'query',
|
|
6
|
+
queryType: 'CONSTRUCT',
|
|
7
|
+
template: variables.length !== 0 ? variables : undefined,
|
|
8
|
+
base: base,
|
|
9
|
+
prefixes: prefixes,
|
|
10
|
+
}, factoryFunctions, endpointUrl);
|
|
11
|
+
}
|
|
12
|
+
async makeQuery(client) {
|
|
13
|
+
const stream = client.query.construct(this.toSPARQL());
|
|
14
|
+
const items = [];
|
|
15
|
+
for await (const binding of stream) {
|
|
16
|
+
items.push(binding);
|
|
17
|
+
}
|
|
18
|
+
return items;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=construct.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"construct.js","sourceRoot":"","sources":["../../src/database/construct.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAK9C,MAAM,OAAO,yBACX,SAAQ,gBAA4C;IAGpD,YACE,SAA6B,EAC7B,QAAoC,EACpC,IAAwB,EACxB,gBAAkC,EAClC,WAAoB;QAEpB,KAAK,CACH;YACE,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,WAAW;YACtB,QAAQ,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACxD,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,QAAQ;SACnB,EACD,gBAAgB,EAChB,WAAW,CACZ,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,MAAoB;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEvD,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { IriTerm, QuadTerm, VariableTerm, DescribeQuery, SparqlClient, FactoryFunctions } from '../generic.js';
|
|
2
|
+
import { QueryBuilderBase } from './query.js';
|
|
3
|
+
export type DescribeVariables = (VariableTerm | IriTerm)[];
|
|
4
|
+
export declare class DescribeQueryBuilderBase extends QueryBuilderBase<DescribeQuery, QuadTerm[]> implements PromiseLike<QuadTerm[]> {
|
|
5
|
+
constructor(variables: DescribeVariables, prefixes: DescribeQuery['prefixes'], base: string | undefined, factoryFunctions: FactoryFunctions, endpointUrl?: string);
|
|
6
|
+
protected makeQuery(client: SparqlClient): Promise<QuadTerm[]>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as SparqlJs from 'sparqljs';
|
|
2
|
+
import { QueryBuilderBase } from './query.js';
|
|
3
|
+
export class DescribeQueryBuilderBase extends QueryBuilderBase {
|
|
4
|
+
constructor(variables, prefixes, base, factoryFunctions, endpointUrl) {
|
|
5
|
+
super({
|
|
6
|
+
type: 'query',
|
|
7
|
+
queryType: 'DESCRIBE',
|
|
8
|
+
variables: variables.length !== 0 ? variables : [new SparqlJs.Wildcard()],
|
|
9
|
+
base: base,
|
|
10
|
+
prefixes: prefixes,
|
|
11
|
+
}, factoryFunctions, endpointUrl);
|
|
12
|
+
}
|
|
13
|
+
async makeQuery(client) {
|
|
14
|
+
const stream = client.query.construct(this.toSPARQL());
|
|
15
|
+
const items = [];
|
|
16
|
+
for await (const binding of stream) {
|
|
17
|
+
items.push(binding);
|
|
18
|
+
}
|
|
19
|
+
return items;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=describe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe.js","sourceRoot":"","sources":["../../src/database/describe.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAI9C,MAAM,OAAO,wBACX,SAAQ,gBAA2C;IAGnD,YACE,SAA4B,EAC5B,QAAmC,EACnC,IAAwB,EACxB,gBAAkC,EAClC,WAAoB;QAEpB,KAAK,CACH;YACE,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,UAAU;YACrB,SAAS,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACzE,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,QAAQ;SACnB,EACD,gBAAgB,EAChB,WAAW,CACZ,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,MAAoB;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEvD,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './base.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { SparqlQueryBuilderBase } from './sparql-query.js';
|
|
2
|
+
import { Query, Pattern, IriTerm, ValuePatternColumns } from '../generic.js';
|
|
3
|
+
export declare abstract class QueryBuilderBase<TConfig extends Query, KReturn> extends SparqlQueryBuilderBase<TConfig, KReturn> {
|
|
4
|
+
from(...iris: IriTerm[]): this;
|
|
5
|
+
fromNamed(...iris: IriTerm[]): this;
|
|
6
|
+
values(columns: ValuePatternColumns): this;
|
|
7
|
+
where(...patterns: Pattern[]): this;
|
|
8
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { SparqlQueryBuilderBase } from './sparql-query.js';
|
|
2
|
+
export class QueryBuilderBase extends SparqlQueryBuilderBase {
|
|
3
|
+
from(...iris) {
|
|
4
|
+
if (iris.length === 0) {
|
|
5
|
+
return this;
|
|
6
|
+
}
|
|
7
|
+
if (this.config.from) {
|
|
8
|
+
this.config.from.default = [...this.config.from.default, ...iris];
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
this.config.from = {
|
|
12
|
+
default: iris,
|
|
13
|
+
named: [],
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
fromNamed(...iris) {
|
|
19
|
+
if (iris.length === 0) {
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
if (this.config.from) {
|
|
23
|
+
this.config.from.named = [...this.config.from.named, ...iris];
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this.config.from = {
|
|
27
|
+
default: [],
|
|
28
|
+
named: iris,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
values(columns) {
|
|
34
|
+
if (Object.keys(columns).length === 0) {
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
if (this.config.values) {
|
|
38
|
+
this.config.values = { ...this.config.values, ...columns };
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.config.values = columns;
|
|
42
|
+
}
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
where(...patterns) {
|
|
46
|
+
if (patterns.length === 0) {
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
if (this.config.where) {
|
|
50
|
+
this.config.where = [...this.config.where, ...patterns];
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
this.config.where = patterns;
|
|
54
|
+
}
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/database/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,MAAM,OAAgB,gBAGpB,SAAQ,sBAAwC;IAChD,IAAI,CAAC,GAAG,IAAe;QACrB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG;gBACjB,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,EAAE;aACV,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,GAAG,IAAe;QAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG;gBACjB,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,IAAI;aACZ,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,OAA4B;QACjC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,EAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,OAAO,EAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,GAAG,QAAmB;QAC1B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Variable, Grouping, Ordering, Presence, Expression, SelectQuery, SparqlClient, FactoryFunctions } from '../generic.js';
|
|
2
|
+
import { QueryBuilderBase } from './query.js';
|
|
3
|
+
export type SelectedVariables = Record<string, Variable<any, Presence>>;
|
|
4
|
+
type RequiredKeys<T> = {
|
|
5
|
+
[K in keyof T]-?: {} extends Pick<T, K> ? never : K;
|
|
6
|
+
}[keyof T];
|
|
7
|
+
type OptionalKeys<T> = keyof {
|
|
8
|
+
[Key in keyof T as Omit<T, Key> extends T ? Key : never]: T[Key];
|
|
9
|
+
};
|
|
10
|
+
export type TypedSelectedVariables<T extends Record<string, any>> = {
|
|
11
|
+
[K in RequiredKeys<T>]-?: undefined extends T[K] ? Variable<Exclude<T[K], undefined>, Presence.optional> | Variable<T[K], Presence> : Variable<T[K]>;
|
|
12
|
+
} & {
|
|
13
|
+
[K in OptionalKeys<T>]?: Variable<Exclude<T[K], undefined>, Presence> | Variable<T[K], Presence>;
|
|
14
|
+
};
|
|
15
|
+
export type ExtractDataType<V> = V extends Variable<infer T, any> ? T : never;
|
|
16
|
+
export type ExtractPresenceType<V> = V extends Variable<any, infer P> ? P : never;
|
|
17
|
+
export type InferredSelectResult<T extends SelectedVariables> = {
|
|
18
|
+
[K in keyof T]: ExtractPresenceType<T[K]> extends Presence.optional ? ExtractDataType<T[K]> | undefined : ExtractDataType<T[K]>;
|
|
19
|
+
};
|
|
20
|
+
export declare class SelectQueryBuilderBase<T extends Record<string, any>> extends QueryBuilderBase<SelectQuery, T[]> implements PromiseLike<T[]> {
|
|
21
|
+
private lookup;
|
|
22
|
+
private lookupTransform;
|
|
23
|
+
constructor(variables: TypedSelectedVariables<T> | undefined, prefixes: SelectQuery['prefixes'], base: string | undefined, factoryFunctions: FactoryFunctions, distict?: SelectQuery['distinct'], reduced?: SelectQuery['reduced'], endpointUrl?: string);
|
|
24
|
+
having(...expressions: Expression[]): this;
|
|
25
|
+
groupBy(...groupings: Grouping[]): this;
|
|
26
|
+
orderBy(...orderings: Ordering[]): this;
|
|
27
|
+
limit(limit: number): this;
|
|
28
|
+
offset(offset: number): this;
|
|
29
|
+
$asSubQuery(): import("../generic.js").GroupPattern;
|
|
30
|
+
protected makeQuery(client: SparqlClient): Promise<T[]>;
|
|
31
|
+
}
|
|
32
|
+
export {};
|