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.
Files changed (84) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +198 -0
  3. package/dist/database/ask.d.ts +6 -0
  4. package/dist/database/ask.js +15 -0
  5. package/dist/database/ask.js.map +1 -0
  6. package/dist/database/base.d.ts +42 -0
  7. package/dist/database/base.js +87 -0
  8. package/dist/database/base.js.map +1 -0
  9. package/dist/database/construct.d.ts +7 -0
  10. package/dist/database/construct.js +21 -0
  11. package/dist/database/construct.js.map +1 -0
  12. package/dist/database/describe.d.ts +7 -0
  13. package/dist/database/describe.js +22 -0
  14. package/dist/database/describe.js.map +1 -0
  15. package/dist/database/index.d.ts +1 -0
  16. package/dist/database/index.js +2 -0
  17. package/dist/database/index.js.map +1 -0
  18. package/dist/database/query.d.ts +8 -0
  19. package/dist/database/query.js +58 -0
  20. package/dist/database/query.js.map +1 -0
  21. package/dist/database/select.d.ts +32 -0
  22. package/dist/database/select.js +128 -0
  23. package/dist/database/select.js.map +1 -0
  24. package/dist/database/sparql-query.d.ts +34 -0
  25. package/dist/database/sparql-query.js +338 -0
  26. package/dist/database/sparql-query.js.map +1 -0
  27. package/dist/database/update.d.ts +29 -0
  28. package/dist/database/update.js +137 -0
  29. package/dist/database/update.js.map +1 -0
  30. package/dist/database/with.d.ts +19 -0
  31. package/dist/database/with.js +97 -0
  32. package/dist/database/with.js.map +1 -0
  33. package/dist/functions/aggregate.d.ts +14 -0
  34. package/dist/functions/aggregate.js +37 -0
  35. package/dist/functions/aggregate.js.map +1 -0
  36. package/dist/functions/function.d.ts +57 -0
  37. package/dist/functions/function.js +177 -0
  38. package/dist/functions/function.js.map +1 -0
  39. package/dist/functions/index.d.ts +4 -0
  40. package/dist/functions/index.js +5 -0
  41. package/dist/functions/index.js.map +1 -0
  42. package/dist/functions/operation.d.ts +16 -0
  43. package/dist/functions/operation.js +52 -0
  44. package/dist/functions/operation.js.map +1 -0
  45. package/dist/functions/utils.d.ts +5 -0
  46. package/dist/functions/utils.js +29 -0
  47. package/dist/functions/utils.js.map +1 -0
  48. package/dist/generic.d.ts +262 -0
  49. package/dist/generic.js +11 -0
  50. package/dist/generic.js.map +1 -0
  51. package/dist/index.cjs +18 -0
  52. package/dist/index.cjs.map +1 -0
  53. package/dist/index.d.cts +1 -0
  54. package/dist/index.d.mts +1 -0
  55. package/dist/index.d.ts +3 -0
  56. package/dist/index.js +4 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/index.mjs +2 -0
  59. package/dist/index.mjs.map +1 -0
  60. package/dist/structures/blank.d.ts +11 -0
  61. package/dist/structures/blank.js +18 -0
  62. package/dist/structures/blank.js.map +1 -0
  63. package/dist/structures/expression.d.ts +33 -0
  64. package/dist/structures/expression.js +169 -0
  65. package/dist/structures/expression.js.map +1 -0
  66. package/dist/structures/index.d.ts +7 -0
  67. package/dist/structures/index.js +8 -0
  68. package/dist/structures/index.js.map +1 -0
  69. package/dist/structures/iri.d.ts +18 -0
  70. package/dist/structures/iri.js +35 -0
  71. package/dist/structures/iri.js.map +1 -0
  72. package/dist/structures/ordering.d.ts +3 -0
  73. package/dist/structures/ordering.js +7 -0
  74. package/dist/structures/ordering.js.map +1 -0
  75. package/dist/structures/path.d.ts +25 -0
  76. package/dist/structures/path.js +29 -0
  77. package/dist/structures/path.js.map +1 -0
  78. package/dist/structures/pattern.d.ts +13 -0
  79. package/dist/structures/pattern.js +78 -0
  80. package/dist/structures/pattern.js.map +1 -0
  81. package/dist/structures/variable.d.ts +13 -0
  82. package/dist/structures/variable.js +28 -0
  83. package/dist/structures/variable.js.map +1 -0
  84. 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,2 @@
1
+ export * from './base.js';
2
+ //# sourceMappingURL=index.js.map
@@ -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 {};