@lde/pipeline 0.11.0 → 0.13.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.
@@ -1 +1 @@
1
- {"version":3,"file":"importResolver.d.ts","sourceRoot":"","sources":["../../src/distribution/importResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;;;;;GAMG;AACH,qBAAa,cAAe,YAAW,oBAAoB;IAEvD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,KAAK,EAAE,oBAAoB,EAC3B,OAAO,EAAE,qBAAqB;IAG3C,OAAO,CACX,GAAG,IAAI,EAAE,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,GACnD,OAAO,CAAC,oBAAoB,GAAG,uBAAuB,CAAC;IA2BpD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
1
+ {"version":3,"file":"importResolver.d.ts","sourceRoot":"","sources":["../../src/distribution/importResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED;;;;;;GAMG;AACH,qBAAa,cAAe,YAAW,oBAAoB;IAEvD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,KAAK,EAAE,oBAAoB,EAC3B,OAAO,EAAE,qBAAqB;IAG3C,OAAO,CACX,GAAG,IAAI,EAAE,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,GACnD,OAAO,CAAC,oBAAoB,GAAG,uBAAuB,CAAC;IAiCpD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
@@ -20,12 +20,13 @@ export class ImportResolver {
20
20
  if (result instanceof ResolvedDistribution)
21
21
  return result;
22
22
  const [dataset] = args;
23
+ const importStart = Date.now();
23
24
  const importResult = await this.options.importer.import(dataset);
24
25
  if (importResult instanceof ImportSuccessful) {
25
26
  await this.options.server.start();
26
27
  const distribution = Distribution.sparql(this.options.server.queryEndpoint, importResult.identifier);
27
28
  distribution.subjectFilter = importResult.distribution.subjectFilter;
28
- return new ResolvedDistribution(distribution, result.probeResults);
29
+ return new ResolvedDistribution(distribution, result.probeResults, importResult.distribution, Date.now() - importStart);
29
30
  }
30
31
  return new NoDistributionAvailable(dataset, 'No SPARQL endpoint or importable data dump available', result.probeResults, importResult instanceof ImportFailed ? importResult : undefined);
31
32
  }
@@ -4,7 +4,9 @@ import { type ProbeResultType } from './probe.js';
4
4
  export declare class ResolvedDistribution {
5
5
  readonly distribution: Distribution;
6
6
  readonly probeResults: ProbeResultType[];
7
- constructor(distribution: Distribution, probeResults: ProbeResultType[]);
7
+ readonly importedFrom?: Distribution | undefined;
8
+ readonly importDuration?: number | undefined;
9
+ constructor(distribution: Distribution, probeResults: ProbeResultType[], importedFrom?: Distribution | undefined, importDuration?: number | undefined);
8
10
  }
9
11
  export declare class NoDistributionAvailable {
10
12
  readonly dataset: Dataset;
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/distribution/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5E,qBAAa,oBAAoB;IAE7B,QAAQ,CAAC,YAAY,EAAE,YAAY;IACnC,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE;gBAD/B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,eAAe,EAAE;CAE3C;AAED,qBAAa,uBAAuB;IAEhC,QAAQ,CAAC,OAAO,EAAE,OAAO;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY;gBAH3B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,eAAe,EAAE,EAC/B,YAAY,CAAC,EAAE,YAAY,YAAA;CAEvC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CACL,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,oBAAoB,GAAG,uBAAuB,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,iCAAiC;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,qBAAa,0BAA2B,YAAW,oBAAoB;IACrE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,CAAC,EAAE,iCAAiC;IAIjD,OAAO,CACX,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,oBAAoB,GAAG,uBAAuB,CAAC;CA2B3D"}
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/distribution/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5E,qBAAa,oBAAoB;IAE7B,QAAQ,CAAC,YAAY,EAAE,YAAY;IACnC,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY;IACpC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM;gBAHvB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,eAAe,EAAE,EAC/B,YAAY,CAAC,EAAE,YAAY,YAAA,EAC3B,cAAc,CAAC,EAAE,MAAM,YAAA;CAEnC;AAED,qBAAa,uBAAuB;IAEhC,QAAQ,CAAC,OAAO,EAAE,OAAO;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY;gBAH3B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,eAAe,EAAE,EAC/B,YAAY,CAAC,EAAE,YAAY,YAAA;CAEvC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CACL,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,oBAAoB,GAAG,uBAAuB,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,iCAAiC;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,qBAAa,0BAA2B,YAAW,oBAAoB;IACrE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,CAAC,EAAE,iCAAiC;IAIjD,OAAO,CACX,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,oBAAoB,GAAG,uBAAuB,CAAC;CA2B3D"}
@@ -2,9 +2,13 @@ import { probe, SparqlProbeResult } from './probe.js';
2
2
  export class ResolvedDistribution {
3
3
  distribution;
4
4
  probeResults;
5
- constructor(distribution, probeResults) {
5
+ importedFrom;
6
+ importDuration;
7
+ constructor(distribution, probeResults, importedFrom, importDuration) {
6
8
  this.distribution = distribution;
7
9
  this.probeResults = probeResults;
10
+ this.importedFrom = importedFrom;
11
+ this.importDuration = importDuration;
8
12
  }
9
13
  }
10
14
  export class NoDistributionAvailable {
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,aAAa,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,eAAe,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,QAAQ,CAAC,EAAE;QACT,mBAAmB,EAAE,mBAAmB,CAAC;QACzC,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AA8BD,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAuB;IAC5D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAA8B;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAmB;gBAEjC,OAAO,EAAE,eAAe;IAgC9B,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAaZ,cAAc;YAiCd,QAAQ;YA8BR,QAAQ;YAmDR,eAAe;YAkCd,SAAS;CAUzB"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,4BAA4B,CAAC;AAQpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAE/B,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,aAAa,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,eAAe,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,QAAQ,CAAC,EAAE;QACT,mBAAmB,EAAE,mBAAmB,CAAC;QACzC,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AA8BD,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAuB;IAC5D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAA8B;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAmB;gBAEjC,OAAO,EAAE,eAAe;IAgC9B,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAaZ,cAAc;YA4Cd,QAAQ;YA8BR,QAAQ;YAmDR,eAAe;YAkCd,SAAS;CAUzB"}
package/dist/pipeline.js CHANGED
@@ -3,6 +3,7 @@ import { StreamParser } from 'n3';
3
3
  import { FileWriter } from './writer/fileWriter.js';
4
4
  import { NoDistributionAvailable, } from './distribution/resolver.js';
5
5
  import { SparqlDistributionResolver } from './distribution/index.js';
6
+ import { NetworkError, SparqlProbeResult, } from './distribution/probe.js';
6
7
  import { NotSupported } from './sparql/executor.js';
7
8
  class FanOutWriter {
8
9
  writers;
@@ -65,21 +66,22 @@ export class Pipeline {
65
66
  }
66
67
  async run() {
67
68
  const start = Date.now();
68
- this.reporter?.pipelineStart(this.name);
69
+ this.reporter?.pipelineStart?.(this.name);
69
70
  const datasets = await this.datasetSelector.select();
70
71
  for await (const dataset of datasets) {
71
72
  await this.processDataset(dataset);
72
73
  }
73
- this.reporter?.pipelineComplete({ duration: Date.now() - start });
74
+ this.reporter?.pipelineComplete?.({ duration: Date.now() - start });
74
75
  }
75
76
  async processDataset(dataset) {
76
- const datasetIri = dataset.iri.toString();
77
- this.reporter?.datasetStart(datasetIri);
77
+ this.reporter?.datasetStart?.(dataset);
78
78
  const resolved = await this.distributionResolver.resolve(dataset);
79
+ this.reporter?.distributionsAnalyzed?.(dataset, mapProbeResults(dataset, resolved.probeResults));
79
80
  if (resolved instanceof NoDistributionAvailable) {
80
- this.reporter?.datasetSkipped(datasetIri, resolved.message);
81
+ this.reporter?.datasetSkipped?.(dataset, resolved.message);
81
82
  return;
82
83
  }
84
+ this.reporter?.distributionSelected?.(dataset, resolved.distribution, resolved.importedFrom, resolved.importDuration);
83
85
  try {
84
86
  for (const stage of this.stages) {
85
87
  try {
@@ -91,17 +93,17 @@ export class Pipeline {
91
93
  }
92
94
  }
93
95
  catch (error) {
94
- this.reporter?.stageFailed(stage.name, error instanceof Error ? error : new Error(String(error)));
96
+ this.reporter?.stageFailed?.(stage.name, error instanceof Error ? error : new Error(String(error)));
95
97
  }
96
98
  }
97
99
  }
98
100
  finally {
99
101
  await this.distributionResolver.cleanup?.();
100
102
  }
101
- this.reporter?.datasetComplete(datasetIri);
103
+ this.reporter?.datasetComplete?.(dataset);
102
104
  }
103
105
  async runStage(dataset, distribution, stage) {
104
- this.reporter?.stageStart(stage.name);
106
+ this.reporter?.stageStart?.(stage.name);
105
107
  const stageStart = Date.now();
106
108
  let elementsProcessed = 0;
107
109
  let quadsGenerated = 0;
@@ -109,14 +111,14 @@ export class Pipeline {
109
111
  onProgress: (elements, quads) => {
110
112
  elementsProcessed = elements;
111
113
  quadsGenerated = quads;
112
- this.reporter?.stageProgress({ elementsProcessed, quadsGenerated });
114
+ this.reporter?.stageProgress?.({ elementsProcessed, quadsGenerated });
113
115
  },
114
116
  });
115
117
  if (result instanceof NotSupported) {
116
- this.reporter?.stageSkipped(stage.name, result.message);
118
+ this.reporter?.stageSkipped?.(stage.name, result.message);
117
119
  }
118
120
  else {
119
- this.reporter?.stageComplete(stage.name, {
121
+ this.reporter?.stageComplete?.(stage.name, {
120
122
  elementsProcessed,
121
123
  quadsGenerated,
122
124
  duration: Date.now() - stageStart,
@@ -156,7 +158,7 @@ export class Pipeline {
156
158
  }
157
159
  }
158
160
  async runChainedStage(dataset, distribution, stage, stageWriter) {
159
- this.reporter?.stageStart(stage.name);
161
+ this.reporter?.stageStart?.(stage.name);
160
162
  const stageStart = Date.now();
161
163
  let elementsProcessed = 0;
162
164
  let quadsGenerated = 0;
@@ -164,14 +166,14 @@ export class Pipeline {
164
166
  onProgress: (elements, quads) => {
165
167
  elementsProcessed = elements;
166
168
  quadsGenerated = quads;
167
- this.reporter?.stageProgress({ elementsProcessed, quadsGenerated });
169
+ this.reporter?.stageProgress?.({ elementsProcessed, quadsGenerated });
168
170
  },
169
171
  });
170
172
  if (result instanceof NotSupported) {
171
- this.reporter?.stageSkipped(stage.name, result.message);
173
+ this.reporter?.stageSkipped?.(stage.name, result.message);
172
174
  throw new Error(`Stage '${stage.name}' returned NotSupported in chained mode`);
173
175
  }
174
- this.reporter?.stageComplete(stage.name, {
176
+ this.reporter?.stageComplete?.(stage.name, {
175
177
  elementsProcessed,
176
178
  quadsGenerated,
177
179
  duration: Date.now() - stageStart,
@@ -188,3 +190,23 @@ export class Pipeline {
188
190
  }
189
191
  }
190
192
  }
193
+ function mapProbeResults(dataset, probeResults) {
194
+ return probeResults.map((result, index) => {
195
+ if (result instanceof NetworkError) {
196
+ return {
197
+ distribution: dataset.distributions[index],
198
+ type: 'network-error',
199
+ available: false,
200
+ error: result.message,
201
+ };
202
+ }
203
+ return {
204
+ distribution: dataset.distributions[index],
205
+ type: result instanceof SparqlProbeResult
206
+ ? 'sparql'
207
+ : 'data-dump',
208
+ available: result.isSuccess(),
209
+ statusCode: result.statusCode,
210
+ };
211
+ });
212
+ }
@@ -1,21 +1,32 @@
1
+ import type { Dataset, Distribution } from '@lde/dataset';
2
+ export interface DistributionAnalysisResult {
3
+ distribution: Distribution;
4
+ type: 'sparql' | 'data-dump' | 'network-error';
5
+ available: boolean;
6
+ statusCode?: number;
7
+ error?: string;
8
+ }
1
9
  export interface ProgressReporter {
2
- pipelineStart(name: string): void;
3
- datasetStart(dataset: string): void;
4
- stageStart(stage: string): void;
5
- stageProgress(update: {
10
+ pipelineStart?(name: string): void;
11
+ datasetsSelected?(count: number): void;
12
+ datasetStart?(dataset: Dataset): void;
13
+ distributionsAnalyzed?(dataset: Dataset, results: DistributionAnalysisResult[]): void;
14
+ distributionSelected?(dataset: Dataset, distribution: Distribution, importedFrom?: Distribution, importDuration?: number): void;
15
+ stageStart?(stage: string): void;
16
+ stageProgress?(update: {
6
17
  elementsProcessed: number;
7
18
  quadsGenerated: number;
8
19
  }): void;
9
- stageComplete(stage: string, result: {
20
+ stageComplete?(stage: string, result: {
10
21
  elementsProcessed: number;
11
22
  quadsGenerated: number;
12
23
  duration: number;
13
24
  }): void;
14
- stageFailed(stage: string, error: Error): void;
15
- stageSkipped(stage: string, reason: string): void;
16
- datasetComplete(dataset: string): void;
17
- datasetSkipped(dataset: string, reason: string): void;
18
- pipelineComplete(result: {
25
+ stageFailed?(stage: string, error: Error): void;
26
+ stageSkipped?(stage: string, reason: string): void;
27
+ datasetComplete?(dataset: Dataset): void;
28
+ datasetSkipped?(dataset: Dataset, reason: string): void;
29
+ pipelineComplete?(result: {
19
30
  duration: number;
20
31
  }): void;
21
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"progressReporter.d.ts","sourceRoot":"","sources":["../src/progressReporter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,MAAM,EAAE;QACpB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,aAAa,CACX,KAAK,EAAE,MAAM,EACb,MAAM,EAAE;QACN,iBAAiB,EAAE,MAAM,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;KAClB,GACA,IAAI,CAAC;IACR,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC/C,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,gBAAgB,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACtD"}
1
+ {"version":3,"file":"progressReporter.d.ts","sourceRoot":"","sources":["../src/progressReporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE1D,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,eAAe,CAAC;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,gBAAgB,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,YAAY,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACtC,qBAAqB,CAAC,CACpB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,0BAA0B,EAAE,GACpC,IAAI,CAAC;IACR,oBAAoB,CAAC,CACnB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,YAAY,CAAC,EAAE,YAAY,EAC3B,cAAc,CAAC,EAAE,MAAM,GACtB,IAAI,CAAC;IACR,UAAU,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,CAAC,CAAC,MAAM,EAAE;QACrB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,aAAa,CAAC,CACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE;QACN,iBAAiB,EAAE,MAAM,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;KAClB,GACA,IAAI,CAAC;IACR,WAAW,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAChD,YAAY,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACnD,eAAe,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,cAAc,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACxD,gBAAgB,CAAC,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACvD"}
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/sparql/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAOpD;;GAEG;AACH,qBAAa,YAAY;aACK,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;CAC5C;AAED,qEAAqE;AACrE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,CACL,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,uBAAwB,YAAW,QAAQ;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;gBAEjC,OAAO,EAAE,8BAA8B;IAkBnD;;;;;;;OAOG;IACG,OAAO,CACX,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAiC/B;;;;;OAKG;WACiB,QAAQ,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,IAAI,CAAC,8BAA8B,EAAE,OAAO,CAAC,GACtD,OAAO,CAAC,uBAAuB,CAAC;CAIpC;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/sparql/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AASpD;;GAEG;AACH,qBAAa,YAAY;aACK,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;CAC5C;AAED,qEAAqE;AACrE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,CACL,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,uBAAwB,YAAW,QAAQ;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;gBAEjC,OAAO,EAAE,8BAA8B;IAkBnD;;;;;;;OAOG;IACG,OAAO,CACX,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAiC/B;;;;;OAKG;WACiB,QAAQ,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,IAAI,CAAC,8BAA8B,EAAE,OAAO,CAAC,GACtD,OAAO,CAAC,uBAAuB,CAAC;CAIpC;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE"}
@@ -1,7 +1,8 @@
1
1
  import { SparqlEndpointFetcher } from 'fetch-sparql-endpoint';
2
2
  import { readFile } from 'node:fs/promises';
3
3
  import { resolve } from 'node:path';
4
- import { Generator, Parser } from 'sparqljs';
4
+ import { Parser } from '@traqula/parser-sparql-1-1';
5
+ import { Generator } from '@traqula/generator-sparql-1-1';
5
6
  import { withDefaultGraph } from './graph.js';
6
7
  import { injectValues } from './values.js';
7
8
  /**
@@ -49,7 +50,7 @@ export class SparqlConstructExecutor {
49
50
  this.rawQuery = options.query;
50
51
  if (!options.query.includes('#subjectFilter#')) {
51
52
  const parsed = new Parser().parse(options.query);
52
- if (parsed.type !== 'query' || parsed.queryType !== 'CONSTRUCT') {
53
+ if (parsed.type !== 'query' || parsed.subType !== 'construct') {
53
54
  throw new Error('Query must be a CONSTRUCT query');
54
55
  }
55
56
  this.preParsed = parsed;
@@ -77,7 +78,7 @@ export class SparqlConstructExecutor {
77
78
  else {
78
79
  const substituted = this.rawQuery.replace('#subjectFilter#', distribution.subjectFilter ?? '');
79
80
  const parsed = new Parser().parse(substituted);
80
- if (parsed.type !== 'query' || parsed.queryType !== 'CONSTRUCT') {
81
+ if (parsed.type !== 'query' || parsed.subType !== 'construct') {
81
82
  throw new Error('Query must be a CONSTRUCT query');
82
83
  }
83
84
  ast = parsed;
@@ -89,7 +90,7 @@ export class SparqlConstructExecutor {
89
90
  if (bindings !== undefined && bindings.length > 0) {
90
91
  ast = injectValues(ast, bindings);
91
92
  }
92
- let query = this.generator.stringify(ast);
93
+ let query = this.generator.generate(ast);
93
94
  query = query.replaceAll('?dataset', `<${dataset.iri}>`);
94
95
  return await this.fetcher.fetchTriples(endpoint.toString(), query);
95
96
  }
@@ -1,8 +1,8 @@
1
- import type { ConstructQuery } from 'sparqljs';
1
+ import { type QueryConstruct } from '@traqula/rules-sparql-1-1';
2
2
  /**
3
3
  * Set the default graph (FROM clause) on a parsed CONSTRUCT query.
4
4
  *
5
5
  * Mutates the query in place, replacing any existing FROM clause.
6
6
  */
7
- export declare function withDefaultGraph(query: ConstructQuery, graphIri: string): void;
7
+ export declare function withDefaultGraph(query: QueryConstruct, graphIri: string): void;
8
8
  //# sourceMappingURL=graph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/sparql/graph.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,MAAM,GACf,IAAI,CAEN"}
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/sparql/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAI5E;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,MAAM,GACf,IAAI,CAKN"}
@@ -1,9 +1,10 @@
1
- import { DataFactory } from 'n3';
1
+ import { AstFactory } from '@traqula/rules-sparql-1-1';
2
+ const F = new AstFactory();
2
3
  /**
3
4
  * Set the default graph (FROM clause) on a parsed CONSTRUCT query.
4
5
  *
5
6
  * Mutates the query in place, replacing any existing FROM clause.
6
7
  */
7
8
  export function withDefaultGraph(query, graphIri) {
8
- query.from = { default: [DataFactory.namedNode(graphIri)], named: [] };
9
+ query.datasets = F.datasetClauses([{ clauseType: 'default', value: F.termNamed(F.gen(), graphIri) }], F.gen());
9
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../../src/sparql/selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAQ9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAKtD,MAAM,WAAW,yBAAyB;IACxC,4GAA4G;IAC5G,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;gBAEpC,OAAO,EAAE,yBAAyB;IAkBvC,MAAM,CACX,YAAY,EAAE,YAAY,GACzB,qBAAqB,CAAC,gBAAgB,CAAC;CAmC3C"}
1
+ {"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../../src/sparql/selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAQ9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMtD,MAAM,WAAW,yBAAyB;IACxC,4GAA4G;IAC5G,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;gBAEpC,OAAO,EAAE,yBAAyB;IAqBvC,MAAM,CACX,YAAY,EAAE,YAAY,GACzB,qBAAqB,CAAC,gBAAgB,CAAC;CAsC3C"}
@@ -1,7 +1,10 @@
1
1
  import { SparqlEndpointFetcher } from 'fetch-sparql-endpoint';
2
- import { Generator, Parser, } from 'sparqljs';
2
+ import { Parser } from '@traqula/parser-sparql-1-1';
3
+ import { Generator } from '@traqula/generator-sparql-1-1';
4
+ import { AstFactory, } from '@traqula/rules-sparql-1-1';
3
5
  const parser = new Parser();
4
6
  const generator = new Generator();
7
+ const F = new AstFactory();
5
8
  /**
6
9
  * {@link ItemSelector} that pages through SPARQL SELECT results,
7
10
  * yielding all projected variable bindings (NamedNode values only) per row.
@@ -18,7 +21,7 @@ export class SparqlItemSelector {
18
21
  fetcher;
19
22
  constructor(options) {
20
23
  const parsed = parser.parse(options.query);
21
- if (parsed.type !== 'query' || parsed.queryType !== 'SELECT') {
24
+ if (parsed.type !== 'query' || parsed.subType !== 'select') {
22
25
  throw new Error('Query must be a SELECT query');
23
26
  }
24
27
  const variables = parsed.variables.filter(isVariableTerm);
@@ -26,16 +29,18 @@ export class SparqlItemSelector {
26
29
  throw new Error('Query must project at least one named variable (SELECT * is not supported)');
27
30
  }
28
31
  this.parsed = parsed;
29
- this.pageSize = options.pageSize ?? parsed.limit ?? 10;
32
+ this.pageSize =
33
+ options.pageSize ??
34
+ this.parsed.solutionModifiers.limitOffset?.limit ??
35
+ 10;
30
36
  this.fetcher = options.fetcher ?? new SparqlEndpointFetcher();
31
37
  }
32
38
  async *select(distribution) {
33
39
  const endpoint = distribution.accessUrl;
34
40
  let offset = 0;
35
41
  while (true) {
36
- this.parsed.limit = this.pageSize;
37
- this.parsed.offset = offset;
38
- const paginatedQuery = generator.stringify(this.parsed);
42
+ this.parsed.solutionModifiers.limitOffset = F.solutionModifierLimitOffset(this.pageSize, offset, F.gen());
43
+ const paginatedQuery = generator.generate(this.parsed);
39
44
  const stream = (await this.fetcher.fetchBindings(endpoint.toString(), paginatedQuery));
40
45
  let pageSize = 0;
41
46
  for await (const record of stream) {
@@ -53,5 +58,8 @@ export class SparqlItemSelector {
53
58
  }
54
59
  }
55
60
  function isVariableTerm(v) {
56
- return 'termType' in v && v.termType === 'Variable';
61
+ return ('type' in v &&
62
+ v.type === 'term' &&
63
+ 'subType' in v &&
64
+ v.subType === 'variable');
57
65
  }
@@ -1,13 +1,12 @@
1
- import type { ConstructQuery } from 'sparqljs';
1
+ import { type QueryConstruct } from '@traqula/rules-sparql-1-1';
2
2
  import type { VariableBindings } from './executor.js';
3
3
  /**
4
4
  * Inject a VALUES clause into a parsed CONSTRUCT query for the given binding rows.
5
5
  *
6
- * Each row's keys become `?`-prefixed SPARQL variables; NamedNode values
7
- * become IRIs in the VALUES block. The VALUES clause is prepended to the
8
- * query's WHERE patterns.
6
+ * Each row's keys become SPARQL variables; NamedNode values become IRIs in the
7
+ * VALUES block. The VALUES clause is prepended to the query's WHERE patterns.
9
8
  *
10
9
  * The caller owns parsing and stringifying; this function operates on the AST.
11
10
  */
12
- export declare function injectValues(query: ConstructQuery, bindings: VariableBindings[]): ConstructQuery;
11
+ export declare function injectValues(query: QueryConstruct, bindings: VariableBindings[]): QueryConstruct;
13
12
  //# sourceMappingURL=values.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/sparql/values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,UAAU,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,gBAAgB,EAAE,GAC3B,cAAc,CAchB"}
1
+ {"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../../src/sparql/values.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAItD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,gBAAgB,EAAE,GAC3B,cAAc,CAoBhB"}
@@ -1,19 +1,23 @@
1
+ import { AstFactory, } from '@traqula/rules-sparql-1-1';
2
+ const F = new AstFactory();
1
3
  /**
2
4
  * Inject a VALUES clause into a parsed CONSTRUCT query for the given binding rows.
3
5
  *
4
- * Each row's keys become `?`-prefixed SPARQL variables; NamedNode values
5
- * become IRIs in the VALUES block. The VALUES clause is prepended to the
6
- * query's WHERE patterns.
6
+ * Each row's keys become SPARQL variables; NamedNode values become IRIs in the
7
+ * VALUES block. The VALUES clause is prepended to the query's WHERE patterns.
7
8
  *
8
9
  * The caller owns parsing and stringifying; this function operates on the AST.
9
10
  */
10
11
  export function injectValues(query, bindings) {
11
- const valuesPattern = {
12
- type: 'values',
13
- values: bindings.map((row) => Object.fromEntries(Object.entries(row).map(([name, node]) => [`?${name}`, node]))),
14
- };
12
+ const variableNames = bindings.length > 0 ? Object.keys(bindings[0]) : [];
13
+ const variables = variableNames.map((name) => F.termVariable(name, F.gen()));
14
+ const values = bindings.map((row) => Object.fromEntries(Object.entries(row).map(([name, node]) => [
15
+ name,
16
+ F.termNamed(F.gen(), node.value),
17
+ ])));
18
+ const valuesPattern = F.patternValues(variables, values, F.gen());
15
19
  return {
16
20
  ...query,
17
- where: [valuesPattern, ...(query.where ?? [])],
21
+ where: F.patternGroup([valuesPattern, ...query.where.patterns], F.gen()),
18
22
  };
19
23
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lde/pipeline",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "repository": {
5
5
  "url": "https://github.com/ldengine/lde",
6
6
  "directory": "packages/pipeline"
@@ -28,13 +28,12 @@
28
28
  "@lde/sparql-importer": "0.3.0",
29
29
  "@lde/sparql-server": "0.4.10",
30
30
  "@rdfjs/types": "^2.0.1",
31
+ "@traqula/generator-sparql-1-1": "^1.0.3",
32
+ "@traqula/parser-sparql-1-1": "^1.0.3",
33
+ "@traqula/rules-sparql-1-1": "^1.0.3",
31
34
  "fetch-sparql-endpoint": "^7.1.0",
32
35
  "filenamify-url": "^4.0.0",
33
36
  "n3": "^2.0.1",
34
- "sparqljs": "^3.7.4",
35
37
  "tslib": "^2.3.0"
36
- },
37
- "devDependencies": {
38
- "@types/sparqljs": "^3.1.12"
39
38
  }
40
39
  }