@lde/pipeline 0.18.0 → 0.20.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/README.md +28 -0
- package/dist/distribution/importResolver.d.ts.map +1 -1
- package/dist/distribution/importResolver.js +1 -1
- package/dist/distribution/resolver.d.ts +2 -1
- package/dist/distribution/resolver.d.ts.map +1 -1
- package/dist/distribution/resolver.js +3 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/pipeline.d.ts +6 -1
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +24 -31
- package/dist/progressReporter.d.ts +4 -1
- package/dist/progressReporter.d.ts.map +1 -1
- package/dist/stage.d.ts +15 -0
- package/dist/stage.d.ts.map +1 -1
- package/dist/stage.js +59 -15
- package/dist/validator.d.ts +21 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -128,6 +128,34 @@ new Stage({
|
|
|
128
128
|
|
|
129
129
|
This keeps SPARQL doing the heavy lifting while TypeScript handles the edge cases. See [@lde/pipeline-void](../pipeline-void)'s `VocabularyExecutor` for a real-world example of this pattern.
|
|
130
130
|
|
|
131
|
+
### Validation
|
|
132
|
+
|
|
133
|
+
Stages can optionally validate their output quads against a `Validator`. Validation operates on the combined output of all executors per batch, so shapes that span multiple executors' output are validated correctly. Quads are buffered, validated, and then written or discarded based on the `onInvalid` policy. When no validator is configured, quads stream directly with zero overhead.
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
import { ShaclValidator } from '@lde/pipeline-shacl-validator';
|
|
137
|
+
|
|
138
|
+
new Stage({
|
|
139
|
+
name: 'transform',
|
|
140
|
+
executors: await SparqlConstructExecutor.fromFile('transform.rq'),
|
|
141
|
+
validation: {
|
|
142
|
+
validator: new ShaclValidator({
|
|
143
|
+
shapesFile: './shapes.ttl',
|
|
144
|
+
reportDir: './validation',
|
|
145
|
+
}),
|
|
146
|
+
onInvalid: 'write', // 'write' (default) | 'skip' | 'halt'
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
| `onInvalid` | Behaviour |
|
|
152
|
+
| ----------- | -------------------------------------------------- |
|
|
153
|
+
| `'write'` | Write quads even if validation fails **(default)** |
|
|
154
|
+
| `'skip'` | Discard the batch silently |
|
|
155
|
+
| `'halt'` | Throw an error, stopping the pipeline |
|
|
156
|
+
|
|
157
|
+
`Validator` is an interface, so you can implement your own validation strategy. See [@lde/pipeline-shacl-validator](../pipeline-shacl-validator) for the SHACL implementation.
|
|
158
|
+
|
|
131
159
|
### Writer
|
|
132
160
|
|
|
133
161
|
Writes generated quads to a destination:
|
|
@@ -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,EAEzB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAChC;AAED;;;;;;;GAOG;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;YAgB5C,aAAa;
|
|
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,EAEzB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAChC;AAED;;;;;;;GAOG;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;YAgB5C,aAAa;IAyCrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
|
@@ -34,7 +34,7 @@ export class ImportResolver {
|
|
|
34
34
|
await this.options.server.start();
|
|
35
35
|
const distribution = Distribution.sparql(this.options.server.queryEndpoint, importResult.identifier);
|
|
36
36
|
distribution.subjectFilter = importResult.distribution.subjectFilter;
|
|
37
|
-
return new ResolvedDistribution(distribution, probeResults, importResult.distribution, Date.now() - importStart);
|
|
37
|
+
return new ResolvedDistribution(distribution, probeResults, importResult.distribution, Date.now() - importStart, importResult.tripleCount);
|
|
38
38
|
}
|
|
39
39
|
if (importResult instanceof ImportFailed) {
|
|
40
40
|
callbacks?.onImportFailed?.(importResult.distribution, importResult.error);
|
|
@@ -6,7 +6,8 @@ export declare class ResolvedDistribution {
|
|
|
6
6
|
readonly probeResults: ProbeResultType[];
|
|
7
7
|
readonly importedFrom?: Distribution | undefined;
|
|
8
8
|
readonly importDuration?: number | undefined;
|
|
9
|
-
|
|
9
|
+
readonly tripleCount?: number | undefined;
|
|
10
|
+
constructor(distribution: Distribution, probeResults: ProbeResultType[], importedFrom?: Distribution | undefined, importDuration?: number | undefined, tripleCount?: number | undefined);
|
|
10
11
|
}
|
|
11
12
|
export declare class NoDistributionAvailable {
|
|
12
13
|
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;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY;IACpC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM;
|
|
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;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM;gBAJpB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,eAAe,EAAE,EAC/B,YAAY,CAAC,EAAE,YAAY,YAAA,EAC3B,cAAc,CAAC,EAAE,MAAM,YAAA,EACvB,WAAW,CAAC,EAAE,MAAM,YAAA;CAEhC;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,sDAAsD;AACtD,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IACxE,kDAAkD;IAClD,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtE;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CACL,OAAO,EAAE,OAAO,EAChB,SAAS,CAAC,EAAE,gBAAgB,GAC3B,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,EAChB,SAAS,CAAC,EAAE,gBAAgB,GAC3B,OAAO,CAAC,oBAAoB,GAAG,uBAAuB,CAAC;CA6B3D"}
|
|
@@ -4,11 +4,13 @@ export class ResolvedDistribution {
|
|
|
4
4
|
probeResults;
|
|
5
5
|
importedFrom;
|
|
6
6
|
importDuration;
|
|
7
|
-
|
|
7
|
+
tripleCount;
|
|
8
|
+
constructor(distribution, probeResults, importedFrom, importDuration, tripleCount) {
|
|
8
9
|
this.distribution = distribution;
|
|
9
10
|
this.probeResults = probeResults;
|
|
10
11
|
this.importedFrom = importedFrom;
|
|
11
12
|
this.importDuration = importDuration;
|
|
13
|
+
this.tripleCount = tripleCount;
|
|
12
14
|
}
|
|
13
15
|
}
|
|
14
16
|
export class NoDistributionAvailable {
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/pipeline.d.ts
CHANGED
|
@@ -35,9 +35,14 @@ export declare class Pipeline {
|
|
|
35
35
|
constructor(options: PipelineOptions);
|
|
36
36
|
run(): Promise<void>;
|
|
37
37
|
private processDataset;
|
|
38
|
+
/**
|
|
39
|
+
* Run a stage with reporting and return whether it was supported.
|
|
40
|
+
* Returns `true` if the stage produced results, `false` if NotSupported.
|
|
41
|
+
*/
|
|
38
42
|
private runStage;
|
|
39
|
-
|
|
43
|
+
/** Run a stage in chained mode, throwing if the stage is not supported. */
|
|
40
44
|
private runChainedStage;
|
|
45
|
+
private runChain;
|
|
41
46
|
private readFiles;
|
|
42
47
|
}
|
|
43
48
|
//# sourceMappingURL=pipeline.d.ts.map
|
package/dist/pipeline.d.ts.map
CHANGED
|
@@ -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;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;AAsCD,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;YAeZ,cAAc;
|
|
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;AAsCD,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;YAeZ,cAAc;IAkD5B;;;OAGG;YACW,QAAQ;IAuCtB,2EAA2E;YAC7D,eAAe;YAcf,QAAQ;YAmDP,SAAS;CAUzB"}
|
package/dist/pipeline.js
CHANGED
|
@@ -96,7 +96,7 @@ export class Pipeline {
|
|
|
96
96
|
this.reporter?.datasetSkipped?.(dataset, resolved.message);
|
|
97
97
|
return;
|
|
98
98
|
}
|
|
99
|
-
this.reporter?.distributionSelected?.(dataset, resolved.distribution, resolved.importedFrom, resolved.importDuration);
|
|
99
|
+
this.reporter?.distributionSelected?.(dataset, resolved.distribution, resolved.importedFrom, resolved.importDuration, resolved.tripleCount);
|
|
100
100
|
try {
|
|
101
101
|
for (const stage of this.stages) {
|
|
102
102
|
try {
|
|
@@ -118,12 +118,16 @@ export class Pipeline {
|
|
|
118
118
|
await this.writer.flush?.(dataset);
|
|
119
119
|
this.reporter?.datasetComplete?.(dataset);
|
|
120
120
|
}
|
|
121
|
-
|
|
121
|
+
/**
|
|
122
|
+
* Run a stage with reporting and return whether it was supported.
|
|
123
|
+
* Returns `true` if the stage produced results, `false` if NotSupported.
|
|
124
|
+
*/
|
|
125
|
+
async runStage(dataset, distribution, stage, writer = this.writer) {
|
|
122
126
|
this.reporter?.stageStart?.(stage.name);
|
|
123
127
|
const stageStart = Date.now();
|
|
124
128
|
let itemsProcessed = 0;
|
|
125
129
|
let quadsGenerated = 0;
|
|
126
|
-
const result = await stage.run(dataset, distribution,
|
|
130
|
+
const result = await stage.run(dataset, distribution, writer, {
|
|
127
131
|
onProgress: (items, quads) => {
|
|
128
132
|
itemsProcessed = items;
|
|
129
133
|
quadsGenerated = quads;
|
|
@@ -132,13 +136,24 @@ export class Pipeline {
|
|
|
132
136
|
});
|
|
133
137
|
if (result instanceof NotSupported) {
|
|
134
138
|
this.reporter?.stageSkipped?.(stage.name, result.message);
|
|
139
|
+
return false;
|
|
135
140
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
141
|
+
this.reporter?.stageComplete?.(stage.name, {
|
|
142
|
+
itemsProcessed,
|
|
143
|
+
quadsGenerated,
|
|
144
|
+
duration: Date.now() - stageStart,
|
|
145
|
+
});
|
|
146
|
+
if (stage.validator) {
|
|
147
|
+
const report = await stage.validator.report(dataset);
|
|
148
|
+
this.reporter?.stageValidated?.(stage.name, report);
|
|
149
|
+
}
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
/** Run a stage in chained mode, throwing if the stage is not supported. */
|
|
153
|
+
async runChainedStage(dataset, distribution, stage, writer) {
|
|
154
|
+
const supported = await this.runStage(dataset, distribution, stage, writer);
|
|
155
|
+
if (!supported) {
|
|
156
|
+
throw new Error(`Stage '${stage.name}' returned NotSupported in chained mode`);
|
|
142
157
|
}
|
|
143
158
|
}
|
|
144
159
|
async runChain(dataset, distribution, stage) {
|
|
@@ -173,28 +188,6 @@ export class Pipeline {
|
|
|
173
188
|
await stageOutputResolver.cleanup();
|
|
174
189
|
}
|
|
175
190
|
}
|
|
176
|
-
async runChainedStage(dataset, distribution, stage, stageWriter) {
|
|
177
|
-
this.reporter?.stageStart?.(stage.name);
|
|
178
|
-
const stageStart = Date.now();
|
|
179
|
-
let itemsProcessed = 0;
|
|
180
|
-
let quadsGenerated = 0;
|
|
181
|
-
const result = await stage.run(dataset, distribution, stageWriter, {
|
|
182
|
-
onProgress: (items, quads) => {
|
|
183
|
-
itemsProcessed = items;
|
|
184
|
-
quadsGenerated = quads;
|
|
185
|
-
this.reporter?.stageProgress?.({ itemsProcessed, quadsGenerated });
|
|
186
|
-
},
|
|
187
|
-
});
|
|
188
|
-
if (result instanceof NotSupported) {
|
|
189
|
-
this.reporter?.stageSkipped?.(stage.name, result.message);
|
|
190
|
-
throw new Error(`Stage '${stage.name}' returned NotSupported in chained mode`);
|
|
191
|
-
}
|
|
192
|
-
this.reporter?.stageComplete?.(stage.name, {
|
|
193
|
-
itemsProcessed,
|
|
194
|
-
quadsGenerated,
|
|
195
|
-
duration: Date.now() - stageStart,
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
191
|
async *readFiles(paths) {
|
|
199
192
|
for (const path of paths) {
|
|
200
193
|
const stream = createReadStream(path);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Dataset, Distribution } from '@lde/dataset';
|
|
2
|
+
import type { ValidationReport } from './validator.js';
|
|
2
3
|
export interface DistributionAnalysisResult {
|
|
3
4
|
distribution: Distribution;
|
|
4
5
|
type: 'sparql' | 'data-dump' | 'network-error';
|
|
@@ -14,7 +15,7 @@ export interface ProgressReporter {
|
|
|
14
15
|
distributionProbed?(result: DistributionAnalysisResult): void;
|
|
15
16
|
/** Called when importing a distribution fails. */
|
|
16
17
|
importFailed?(distribution: Distribution, error: string): void;
|
|
17
|
-
distributionSelected?(dataset: Dataset, distribution: Distribution, importedFrom?: Distribution, importDuration?: number): void;
|
|
18
|
+
distributionSelected?(dataset: Dataset, distribution: Distribution, importedFrom?: Distribution, importDuration?: number, tripleCount?: number): void;
|
|
18
19
|
stageStart?(stage: string): void;
|
|
19
20
|
stageProgress?(update: {
|
|
20
21
|
itemsProcessed: number;
|
|
@@ -26,6 +27,8 @@ export interface ProgressReporter {
|
|
|
26
27
|
duration: number;
|
|
27
28
|
}): void;
|
|
28
29
|
stageFailed?(stage: string, error: Error): void;
|
|
30
|
+
/** Called after a stage completes if it has a validator. */
|
|
31
|
+
stageValidated?(stage: string, report: ValidationReport): void;
|
|
29
32
|
stageSkipped?(stage: string, reason: string): void;
|
|
30
33
|
datasetComplete?(dataset: Dataset): void;
|
|
31
34
|
datasetSkipped?(dataset: Dataset, reason: string): void;
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,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,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACzD,YAAY,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACtC,8DAA8D;IAC9D,kBAAkB,CAAC,CAAC,MAAM,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAC9D,kDAAkD;IAClD,YAAY,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/D,oBAAoB,CAAC,CACnB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,YAAY,CAAC,EAAE,YAAY,EAC3B,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI,CAAC;IACR,UAAU,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,CAAC,CAAC,MAAM,EAAE;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,aAAa,CAAC,CACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE;QACN,cAAc,EAAE,MAAM,CAAC;QACvB,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,4DAA4D;IAC5D,cAAc,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC/D,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"}
|
package/dist/stage.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { Dataset, Distribution } from '@lde/dataset';
|
|
|
2
2
|
import type { Quad } from '@rdfjs/types';
|
|
3
3
|
import type { Executor, VariableBindings } from './sparql/executor.js';
|
|
4
4
|
import { NotSupported } from './sparql/executor.js';
|
|
5
|
+
import type { Validator } from './validator.js';
|
|
5
6
|
import type { Writer } from './writer/writer.js';
|
|
6
7
|
/** Transforms a quad stream, optionally using dataset metadata. */
|
|
7
8
|
export type QuadTransform = (quads: AsyncIterable<Quad>, dataset: Dataset) => AsyncIterable<Quad>;
|
|
@@ -15,6 +16,12 @@ export interface StageOptions {
|
|
|
15
16
|
maxConcurrency?: number;
|
|
16
17
|
/** Child stages that chain off this stage's output. */
|
|
17
18
|
stages?: Stage[];
|
|
19
|
+
/** Optional validation of the combined quads produced by all executors per batch. */
|
|
20
|
+
validation?: {
|
|
21
|
+
validator: Validator;
|
|
22
|
+
/** What to do when a batch fails validation. @default 'write' */
|
|
23
|
+
onInvalid?: 'write' | 'skip' | 'halt';
|
|
24
|
+
};
|
|
18
25
|
}
|
|
19
26
|
export interface RunOptions {
|
|
20
27
|
onProgress?: (itemsProcessed: number, quadsGenerated: number) => void;
|
|
@@ -26,9 +33,17 @@ export declare class Stage {
|
|
|
26
33
|
private readonly itemSelector?;
|
|
27
34
|
private readonly batchSize;
|
|
28
35
|
private readonly maxConcurrency;
|
|
36
|
+
private readonly validation?;
|
|
29
37
|
constructor(options: StageOptions);
|
|
38
|
+
/** The validator for this stage, if configured. */
|
|
39
|
+
get validator(): Validator | undefined;
|
|
30
40
|
run(dataset: Dataset, distribution: Distribution, writer: Writer, options?: RunOptions): Promise<NotSupported | void>;
|
|
31
41
|
private runWithSelector;
|
|
42
|
+
/**
|
|
43
|
+
* Validate a buffer of quads. Throws on halt, returns the quads to write
|
|
44
|
+
* (empty array when skipping invalid batches).
|
|
45
|
+
*/
|
|
46
|
+
private validateBuffer;
|
|
32
47
|
private executeAll;
|
|
33
48
|
}
|
|
34
49
|
/** Selects items (as variable bindings) for executors to process. Pagination is an implementation detail. */
|
package/dist/stage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stage.d.ts","sourceRoot":"","sources":["../src/stage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGjD,mEAAmE;AACnE,MAAM,MAAM,aAAa,GAAG,CAC1B,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,EAC1B,OAAO,EAAE,OAAO,KACb,aAAa,CAAC,IAAI,CAAC,CAAC;AAEzB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"stage.d.ts","sourceRoot":"","sources":["../src/stage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGjD,mEAAmE;AACnE,MAAM,MAAM,aAAa,GAAG,CAC1B,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,EAC1B,OAAO,EAAE,OAAO,KACb,aAAa,CAAC,IAAI,CAAC,CAAC;AAEzB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,qFAAqF;IACrF,UAAU,CAAC,EAAE;QACX,SAAS,EAAE,SAAS,CAAC;QACrB,iEAAiE;QACjE,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;KACvC,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CACvE;AAED,qBAAa,KAAK;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAa;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAA6B;gBAE7C,OAAO,EAAE,YAAY;IAYjC,mDAAmD;IACnD,IAAI,SAAS,IAAI,SAAS,GAAG,SAAS,CAErC;IAEK,GAAG,CACP,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;YAqCjB,eAAe;IAuH7B;;;OAGG;YACW,cAAc;YAqBd,UAAU;CAqBzB;AAUD,6GAA6G;AAC7G,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,YAAY,EAAE,YAAY,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;CACrE"}
|
package/dist/stage.js
CHANGED
|
@@ -8,6 +8,7 @@ export class Stage {
|
|
|
8
8
|
itemSelector;
|
|
9
9
|
batchSize;
|
|
10
10
|
maxConcurrency;
|
|
11
|
+
validation;
|
|
11
12
|
constructor(options) {
|
|
12
13
|
this.name = options.name;
|
|
13
14
|
this.stages = options.stages ?? [];
|
|
@@ -17,6 +18,11 @@ export class Stage {
|
|
|
17
18
|
this.itemSelector = options.itemSelector;
|
|
18
19
|
this.batchSize = options.batchSize ?? 10;
|
|
19
20
|
this.maxConcurrency = options.maxConcurrency ?? 10;
|
|
21
|
+
this.validation = options.validation;
|
|
22
|
+
}
|
|
23
|
+
/** The validator for this stage, if configured. */
|
|
24
|
+
get validator() {
|
|
25
|
+
return this.validation?.validator;
|
|
20
26
|
}
|
|
21
27
|
async run(dataset, distribution, writer, options) {
|
|
22
28
|
if (this.itemSelector) {
|
|
@@ -26,7 +32,23 @@ export class Stage {
|
|
|
26
32
|
if (streams instanceof NotSupported) {
|
|
27
33
|
return streams;
|
|
28
34
|
}
|
|
29
|
-
|
|
35
|
+
if (this.validation) {
|
|
36
|
+
const buffer = [];
|
|
37
|
+
for (const stream of streams) {
|
|
38
|
+
for await (const quad of stream) {
|
|
39
|
+
buffer.push(quad);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const accepted = await this.validateBuffer(buffer, dataset);
|
|
43
|
+
if (accepted.length > 0) {
|
|
44
|
+
await writer.write(dataset, (async function* () {
|
|
45
|
+
yield* accepted;
|
|
46
|
+
})());
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
await writer.write(dataset, mergeStreams(streams));
|
|
51
|
+
}
|
|
30
52
|
}
|
|
31
53
|
async runWithSelector(selector, dataset, distribution, writer, options) {
|
|
32
54
|
// Peek the first batch to detect an empty selector before starting the
|
|
@@ -68,30 +90,36 @@ export class Stage {
|
|
|
68
90
|
for await (const bindings of allBatches) {
|
|
69
91
|
if (firstError)
|
|
70
92
|
break;
|
|
71
|
-
for
|
|
93
|
+
// Respect maxConcurrency: wait for a slot to open.
|
|
94
|
+
if (inFlight.size >= this.maxConcurrency) {
|
|
95
|
+
await Promise.race(inFlight);
|
|
72
96
|
if (firstError)
|
|
73
97
|
break;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
track((async () => {
|
|
98
|
+
}
|
|
99
|
+
track((async () => {
|
|
100
|
+
const batchQuads = [];
|
|
101
|
+
for (const executor of this.executors) {
|
|
81
102
|
const result = await executor.execute(dataset, distribution, {
|
|
82
103
|
bindings,
|
|
83
104
|
});
|
|
84
105
|
if (!(result instanceof NotSupported)) {
|
|
85
106
|
hasResults = true;
|
|
86
107
|
for await (const quad of result) {
|
|
87
|
-
|
|
88
|
-
quadsGenerated++;
|
|
108
|
+
batchQuads.push(quad);
|
|
89
109
|
}
|
|
90
110
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
111
|
+
}
|
|
112
|
+
let accepted = batchQuads;
|
|
113
|
+
if (this.validation && batchQuads.length > 0) {
|
|
114
|
+
accepted = await this.validateBuffer(batchQuads, dataset);
|
|
115
|
+
}
|
|
116
|
+
for (const quad of accepted) {
|
|
117
|
+
await queue.push(quad);
|
|
118
|
+
quadsGenerated++;
|
|
119
|
+
}
|
|
120
|
+
itemsProcessed += bindings.length;
|
|
121
|
+
options?.onProgress?.(itemsProcessed, quadsGenerated);
|
|
122
|
+
})());
|
|
95
123
|
}
|
|
96
124
|
}
|
|
97
125
|
catch (err) {
|
|
@@ -121,6 +149,22 @@ export class Stage {
|
|
|
121
149
|
return new NotSupported('All executors returned NotSupported');
|
|
122
150
|
}
|
|
123
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Validate a buffer of quads. Throws on halt, returns the quads to write
|
|
154
|
+
* (empty array when skipping invalid batches).
|
|
155
|
+
*/
|
|
156
|
+
async validateBuffer(buffer, dataset) {
|
|
157
|
+
const validationResult = await this.validation.validator.validate(buffer, dataset);
|
|
158
|
+
const onInvalid = this.validation.onInvalid ?? 'write';
|
|
159
|
+
if (!validationResult.conforms && onInvalid === 'halt') {
|
|
160
|
+
throw new Error(`Validation failed: ${validationResult.violations} violation(s)${validationResult.message ? `. ${validationResult.message}` : ''}`);
|
|
161
|
+
}
|
|
162
|
+
if (validationResult.conforms || onInvalid === 'write') {
|
|
163
|
+
return buffer;
|
|
164
|
+
}
|
|
165
|
+
// 'skip': discard
|
|
166
|
+
return [];
|
|
167
|
+
}
|
|
124
168
|
async executeAll(dataset, distribution) {
|
|
125
169
|
const results = await Promise.all(this.executors.map((executor) => executor.execute(dataset, distribution)));
|
|
126
170
|
const streams = [];
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Quad } from '@rdfjs/types';
|
|
2
|
+
import type { Dataset } from '@lde/dataset';
|
|
3
|
+
/** Validates RDF quads against a set of constraints. */
|
|
4
|
+
export interface Validator {
|
|
5
|
+
/** Validate a batch of quads. Accumulates results internally. */
|
|
6
|
+
validate(quads: Quad[], dataset: Dataset): Promise<ValidationResult>;
|
|
7
|
+
/** Return accumulated validation results for a dataset. */
|
|
8
|
+
report(dataset: Dataset): Promise<ValidationReport>;
|
|
9
|
+
}
|
|
10
|
+
/** Result of validating a single batch. */
|
|
11
|
+
export interface ValidationResult {
|
|
12
|
+
violations: number;
|
|
13
|
+
conforms: boolean;
|
|
14
|
+
/** Human-readable detail, e.g. path to the report file. Included in error messages on halt. */
|
|
15
|
+
message?: string;
|
|
16
|
+
}
|
|
17
|
+
/** Accumulated validation results for a dataset. */
|
|
18
|
+
export interface ValidationReport extends ValidationResult {
|
|
19
|
+
quadsValidated: number;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,wDAAwD;AACxD,MAAM,WAAW,SAAS;IACxB,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAErE,2DAA2D;IAC3D,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACrD;AAED,2CAA2C;AAC3C,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,+FAA+F;IAC/F,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,oDAAoD;AACpD,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,cAAc,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lde/pipeline",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"url": "git+https://github.com/ldelements/lde.git",
|
|
6
6
|
"directory": "packages/pipeline"
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@lde/dataset": "0.7.1",
|
|
27
27
|
"@lde/dataset-registry-client": "0.7.3",
|
|
28
|
-
"@lde/sparql-importer": "0.
|
|
28
|
+
"@lde/sparql-importer": "0.4.0",
|
|
29
29
|
"@lde/sparql-server": "0.4.10",
|
|
30
30
|
"@rdfjs/types": "^2.0.1",
|
|
31
31
|
"@traqula/generator-sparql-1-1": "^1.0.3",
|