@lde/pipeline 0.6.29 → 0.6.31

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.
@@ -31,7 +31,9 @@ export declare class SparqlProbeResult extends ProbeResult {
31
31
  */
32
32
  export declare class DataDumpProbeResult extends ProbeResult {
33
33
  readonly contentSize: number | null;
34
- constructor(url: string, response: Response);
34
+ readonly failureReason: string | null;
35
+ constructor(url: string, response: Response, failureReason?: string | null);
36
+ isSuccess(): boolean;
35
37
  }
36
38
  export type ProbeResultType = SparqlProbeResult | DataDumpProbeResult | NetworkError;
37
39
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../src/distribution/probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C;;GAEG;AACH,qBAAa,YAAY;aACK,GAAG,EAAE,MAAM;aAAkB,OAAO,EAAE,MAAM;gBAA5C,GAAG,EAAE,MAAM,EAAkB,OAAO,EAAE,MAAM;CACzE;AAED;;GAEG;AACH,uBAAe,WAAW;aAMI,GAAG,EAAE,MAAM;IALvC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,YAAY,EAAE,IAAI,GAAG,IAAI,CAAQ;IACjD,SAAgB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEf,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAUpD,SAAS,IAAI,OAAO;CAG5B;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,SAAgB,mBAAmB,qCAAqC;IAE/D,SAAS,IAAI,OAAO;CAM9B;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,SAAgB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAEtC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;CAO5C;AAED,MAAM,MAAM,eAAe,GACvB,iBAAiB,GACjB,mBAAmB,GACnB,YAAY,CAAC;AAEjB;;;;;;;GAOG;AACH,wBAAsB,KAAK,CACzB,YAAY,EAAE,YAAY,EAC1B,OAAO,SAAO,GACb,OAAO,CAAC,eAAe,CAAC,CAY1B"}
1
+ {"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../src/distribution/probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C;;GAEG;AACH,qBAAa,YAAY;aAEL,GAAG,EAAE,MAAM;aACX,OAAO,EAAE,MAAM;gBADf,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM;CAElC;AAED;;GAEG;AACH,uBAAe,WAAW;aAON,GAAG,EAAE,MAAM;IAN7B,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,YAAY,EAAE,IAAI,GAAG,IAAI,CAAQ;IACjD,SAAgB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;gBAGzB,GAAG,EAAE,MAAM,EAC3B,QAAQ,EAAE,QAAQ;IAWb,SAAS,IAAI,OAAO;CAG5B;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,SAAgB,mBAAmB,qCAAqC;IAE/D,SAAS,IAAI,OAAO;CAM9B;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,WAAW;IAClD,SAAgB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClD,SAAgB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;gBAG3C,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,aAAa,GAAE,MAAM,GAAG,IAAW;IAU5B,SAAS,IAAI,OAAO;CAG9B;AAED,MAAM,MAAM,eAAe,GACvB,iBAAiB,GACjB,mBAAmB,GACnB,YAAY,CAAC;AAEjB;;;;;;;GAOG;AACH,wBAAsB,KAAK,CACzB,YAAY,EAAE,YAAY,EAC1B,OAAO,SAAO,GACb,OAAO,CAAC,eAAe,CAAC,CAY1B"}
@@ -1,3 +1,4 @@
1
+ import { Parser } from 'n3';
1
2
  /**
2
3
  * Result of a network error during probing.
3
4
  */
@@ -47,13 +48,18 @@ export class SparqlProbeResult extends ProbeResult {
47
48
  */
48
49
  export class DataDumpProbeResult extends ProbeResult {
49
50
  contentSize = null;
50
- constructor(url, response) {
51
+ failureReason;
52
+ constructor(url, response, failureReason = null) {
51
53
  super(url, response);
54
+ this.failureReason = failureReason;
52
55
  const contentLengthHeader = response.headers.get('Content-Length');
53
56
  if (contentLengthHeader) {
54
57
  this.contentSize = parseInt(contentLengthHeader);
55
58
  }
56
59
  }
60
+ isSuccess() {
61
+ return super.isSuccess() && this.failureReason === null;
62
+ }
57
63
  }
58
64
  /**
59
65
  * Probe a distribution to check availability and gather metadata.
@@ -96,19 +102,48 @@ async function probeDataDump(distribution, timeout) {
96
102
  'Accept-Encoding': 'identity', // Return uncompressed responses.
97
103
  },
98
104
  };
99
- let response = await fetch(url, {
105
+ const headResponse = await fetch(url, {
100
106
  method: 'HEAD',
101
107
  ...requestOptions,
102
108
  });
103
- const contentLength = response.headers.get('Content-Length');
104
- if (contentLength === null || contentLength === '0') {
105
- // Retry as GET request for servers incorrectly returning HEAD request Content-Length,
106
- // which *should* be the size of the response body when issuing a GET, not that of
107
- // the response to a HEAD request, which is intentionally 0.
108
- response = await fetch(url, {
109
+ const contentLength = headResponse.headers.get('Content-Length');
110
+ const contentLengthBytes = contentLength ? parseInt(contentLength) : 0;
111
+ // For small or unknown-size files, do a GET to validate body content.
112
+ // This also handles servers that incorrectly return 0 Content-Length for HEAD.
113
+ if (contentLengthBytes <= 10_240) {
114
+ const getResponse = await fetch(url, {
109
115
  method: 'GET',
110
116
  ...requestOptions,
111
117
  });
118
+ const body = await getResponse.text();
119
+ const isHttpSuccess = getResponse.status >= 200 && getResponse.status < 400;
120
+ const failureReason = isHttpSuccess
121
+ ? validateBody(body, getResponse.headers.get('Content-Type'))
122
+ : null;
123
+ return new DataDumpProbeResult(url, getResponse, failureReason);
124
+ }
125
+ return new DataDumpProbeResult(url, headResponse);
126
+ }
127
+ const rdfContentTypes = [
128
+ 'text/turtle',
129
+ 'application/n-triples',
130
+ 'application/n-quads',
131
+ ];
132
+ function validateBody(body, contentType) {
133
+ if (body.length === 0) {
134
+ return 'Distribution is empty';
135
+ }
136
+ if (contentType && rdfContentTypes.some((t) => contentType.startsWith(t))) {
137
+ try {
138
+ const parser = new Parser();
139
+ const quads = parser.parse(body);
140
+ if (quads.length === 0) {
141
+ return 'Distribution contains no RDF triples';
142
+ }
143
+ }
144
+ catch (e) {
145
+ return e instanceof Error ? e.message : String(e);
146
+ }
112
147
  }
113
- return new DataDumpProbeResult(url, response);
148
+ return null;
114
149
  }
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/distribution/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAe,KAAK,IAAI,EAAE,MAAM,IAAI,CAAC;AAC5C,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAUpB;;;;;;;;;GASG;AACH,wBAAuB,mBAAmB,CACxC,YAAY,EAAE,eAAe,EAAE,EAC/B,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,YAAY,GAC1B,aAAa,CAAC,IAAI,CAAC,CAkCrB"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/distribution/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAe,KAAK,IAAI,EAAE,MAAM,IAAI,CAAC;AAC5C,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAUpB;;;;;;;;;GASG;AACH,wBAAuB,mBAAmB,CACxC,YAAY,EAAE,eAAe,EAAE,EAC/B,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,YAAY,GAC1B,aAAa,CAAC,IAAI,CAAC,CAwCrB"}
@@ -1,5 +1,5 @@
1
1
  import { DataFactory } from 'n3';
2
- import { NetworkError, SparqlProbeResult, } from './probe.js';
2
+ import { NetworkError, SparqlProbeResult, DataDumpProbeResult, } from './probe.js';
3
3
  const { quad, namedNode, blankNode, literal } = DataFactory;
4
4
  const RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
5
5
  const SCHEMA = 'https://schema.org/';
@@ -30,6 +30,9 @@ export async function* probeResultsToQuads(probeResults, datasetIri, importResul
30
30
  else if (result.isSuccess()) {
31
31
  yield* successQuads(action, result, datasetIri);
32
32
  }
33
+ else if (result instanceof DataDumpProbeResult && result.failureReason) {
34
+ yield quad(action, namedNode(`${SCHEMA}error`), literal(result.failureReason));
35
+ }
33
36
  else {
34
37
  // HTTP error
35
38
  const statusUri = `${HTTP_STATUS}${result.statusText.replace(/ /g, '')}`;
@@ -1,6 +1,7 @@
1
1
  import { Dataset, Distribution } from '@lde/dataset';
2
2
  import type { Importer } from '@lde/sparql-importer';
3
3
  import { ImportFailed } from '@lde/sparql-importer';
4
+ import type { SparqlServer } from '@lde/sparql-server';
4
5
  import { type ProbeResultType } from './probe.js';
5
6
  export declare class ResolvedDistribution {
6
7
  readonly distribution: Distribution;
@@ -16,9 +17,11 @@ export declare class NoDistributionAvailable {
16
17
  }
17
18
  export interface DistributionResolver {
18
19
  resolve(dataset: Dataset): Promise<ResolvedDistribution | NoDistributionAvailable>;
20
+ cleanup?(): Promise<void>;
19
21
  }
20
22
  export interface SparqlDistributionResolverOptions {
21
23
  importer?: Importer;
24
+ server?: SparqlServer;
22
25
  timeout?: number;
23
26
  }
24
27
  /**
@@ -33,8 +36,10 @@ export interface SparqlDistributionResolverOptions {
33
36
  */
34
37
  export declare class SparqlDistributionResolver implements DistributionResolver {
35
38
  private readonly importer?;
39
+ private readonly server?;
36
40
  private readonly timeout;
37
41
  constructor(options?: SparqlDistributionResolverOptions);
38
42
  resolve(dataset: Dataset): Promise<ResolvedDistribution | NoDistributionAvailable>;
43
+ cleanup(): Promise<void>;
39
44
  }
40
45
  //# sourceMappingURL=resolver.d.ts.map
@@ -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,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAoB,MAAM,sBAAsB,CAAC;AACtE,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;CAC5D;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,qBAAa,0BAA2B,YAAW,oBAAoB;IACrE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,CAAC,EAAE,iCAAiC;IAKjD,OAAO,CACX,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,oBAAoB,GAAG,uBAAuB,CAAC;CA+C3D"}
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,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAoB,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,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,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,qBAAa,0BAA2B,YAAW,oBAAoB;IACrE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,CAAC,EAAE,iCAAiC;IAMjD,OAAO,CACX,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,oBAAoB,GAAG,uBAAuB,CAAC;IA0DpD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
@@ -33,9 +33,11 @@ export class NoDistributionAvailable {
33
33
  */
34
34
  export class SparqlDistributionResolver {
35
35
  importer;
36
+ server;
36
37
  timeout;
37
38
  constructor(options) {
38
39
  this.importer = options?.importer;
40
+ this.server = options?.server;
39
41
  this.timeout = options?.timeout ?? 5000;
40
42
  }
41
43
  async resolve(dataset) {
@@ -54,6 +56,12 @@ export class SparqlDistributionResolver {
54
56
  if (this.importer) {
55
57
  const importResult = await this.importer.import(dataset);
56
58
  if (importResult instanceof ImportSuccessful) {
59
+ // Start server if provided, using its query endpoint.
60
+ if (this.server) {
61
+ await this.server.start();
62
+ const distribution = Distribution.sparql(this.server.queryEndpoint, importResult.identifier);
63
+ return new ResolvedDistribution(distribution, results);
64
+ }
57
65
  const distribution = Distribution.sparql(importResult.distribution.accessUrl, importResult.identifier);
58
66
  return new ResolvedDistribution(distribution, results);
59
67
  }
@@ -63,4 +71,7 @@ export class SparqlDistributionResolver {
63
71
  }
64
72
  return new NoDistributionAvailable(dataset, 'No SPARQL endpoint or importable data dump available', results);
65
73
  }
74
+ async cleanup() {
75
+ await this.server?.stop();
76
+ }
66
77
  }
@@ -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,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,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,eAAe,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,MAAM,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;QAClB,YAAY,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;KACnD,CAAC;IACF,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAmBD,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;IAoB9B,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAaZ,cAAc;YA0Bd,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,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,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,eAAe,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,MAAM,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;QAClB,YAAY,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;KACnD,CAAC;IACF,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAmBD,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;IAoB9B,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAaZ,cAAc;YA4Bd,QAAQ;YA8BR,QAAQ;YAmDR,eAAe;YAkCd,SAAS;CAUzB"}
package/dist/pipeline.js CHANGED
@@ -74,6 +74,9 @@ export class Pipeline {
74
74
  catch {
75
75
  // Stage error for this dataset; continue to next dataset.
76
76
  }
77
+ finally {
78
+ await this.distributionResolver.cleanup?.();
79
+ }
77
80
  this.reporter?.datasetComplete(datasetIri);
78
81
  }
79
82
  async runStage(dataset, distribution, stage) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lde/pipeline",
3
- "version": "0.6.29",
3
+ "version": "0.6.31",
4
4
  "repository": {
5
5
  "url": "https://github.com/ldengine/lde",
6
6
  "directory": "packages/pipeline"
@@ -26,6 +26,7 @@
26
26
  "@lde/dataset": "0.6.9",
27
27
  "@lde/dataset-registry-client": "0.6.16",
28
28
  "@lde/sparql-importer": "0.2.9",
29
+ "@lde/sparql-server": "0.4.9",
29
30
  "@rdfjs/types": "^2.0.1",
30
31
  "fetch-sparql-endpoint": "^7.1.0",
31
32
  "filenamify-url": "^3.0.0",