Improved error handling #8
3 changed files with 52 additions and 60 deletions
|
|
@ -1,7 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "shacl-tulip",
|
"name": "shacl-tulip",
|
||||||
"private": true,
|
"version": "0.0.2",
|
||||||
"version": "0.0.1",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./src/index.js",
|
"main": "./src/index.js",
|
||||||
"module": "./src/index.js",
|
"module": "./src/index.js",
|
||||||
|
|
|
||||||
|
|
@ -49,8 +49,14 @@ export class RdfDataset {
|
||||||
*/
|
*/
|
||||||
async loadRDF(url, headers = {}) {
|
async loadRDF(url, headers = {}) {
|
||||||
this.beforeLoadFn()
|
this.beforeLoadFn()
|
||||||
readRDF(url, headers)
|
const result = await readRDF(url, headers)
|
||||||
.then(quadStream => {
|
|
||||||
|
// Bubble up error
|
||||||
|
if (!result.success) {
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
const quadStream = result.quadStream
|
||||||
// Load prefixes
|
// Load prefixes
|
||||||
quadStream.on('prefix', (prefix, ns) => {
|
quadStream.on('prefix', (prefix, ns) => {
|
||||||
this.onPrefixFn(prefix, ns)
|
this.onPrefixFn(prefix, ns)
|
||||||
|
|
@ -63,11 +69,8 @@ export class RdfDataset {
|
||||||
}).on('end', async () => {
|
}).on('end', async () => {
|
||||||
await this.onDataEndFn()
|
await this.onDataEndFn()
|
||||||
});
|
});
|
||||||
})
|
|
||||||
.catch(error => {
|
return result
|
||||||
console.error('Error reading RDF data:', error);
|
|
||||||
throw error
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -13,9 +13,11 @@ import formatsPretty from '@rdfjs/formats/pretty.js'
|
||||||
import rdf from 'rdf-ext'
|
import rdf from 'rdf-ext'
|
||||||
|
|
||||||
export async function readRDF(file_url, headers = { "Content-Type": "text/turtle" }) {
|
export async function readRDF(file_url, headers = { "Content-Type": "text/turtle" }) {
|
||||||
|
const url = file_url;
|
||||||
try {
|
try {
|
||||||
|
console.log(url)
|
||||||
var res = null
|
var res = null
|
||||||
res = await fetch(file_url,
|
res = await fetch(url,
|
||||||
{
|
{
|
||||||
formats,
|
formats,
|
||||||
headers: headers
|
headers: headers
|
||||||
|
|
@ -25,48 +27,36 @@ export async function readRDF(file_url, headers = { "Content-Type": "text/turtle
|
||||||
if (['text/plain', 'text/html'].indexOf(res.headers.get('content-type')) >= 0) {
|
if (['text/plain', 'text/html'].indexOf(res.headers.get('content-type')) >= 0) {
|
||||||
// default to turtle
|
// default to turtle
|
||||||
headers['Content-Type'] = 'text/turtle';
|
headers['Content-Type'] = 'text/turtle';
|
||||||
res = await fetch(file_url, { formats, headers });
|
res = await fetch(url, { formats, headers });
|
||||||
}
|
}
|
||||||
if (res.ok) {
|
|
||||||
|
if (!res.ok) {
|
||||||
|
// throw new Error(`readRDF error: ${res.statusText}`)
|
||||||
|
const code = res.status || 'Unknown';
|
||||||
|
const error = new Error(`readRDF error: HTTP ${code} from ${url}`);
|
||||||
|
error.status = code;
|
||||||
|
error.url = url;
|
||||||
|
error.response = res;
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
|
||||||
if (res.headers.get('content-type').indexOf('application/json') >= 0) {
|
if (res.headers.get('content-type').indexOf('application/json') >= 0) {
|
||||||
console.log(res.json())
|
throw new Error(`readRDF error: reading json data is not supported`);
|
||||||
throw new Error(`readRDF error: cannot read json data`);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const quadStream = await res.quadStream()
|
const quadStream = await res.quadStream()
|
||||||
// quadStream.on('error', err => console.error(err))
|
return {
|
||||||
return quadStream
|
success: true,
|
||||||
} else {
|
quadStream,
|
||||||
throw new Error(`readRDF error:: ${res.statusText}`);
|
url: url,
|
||||||
}
|
message: 'RDF data loaded successfully',
|
||||||
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('readRDF error:', error);
|
return {
|
||||||
throw error;
|
success: false,
|
||||||
}
|
error,
|
||||||
}
|
url: url,
|
||||||
|
message: error.message,
|
||||||
|
};
|
||||||
export async function postRDF(endpoint, dataset, format = 'text/turtle', headers = {}, prefixes) {
|
|
||||||
|
|
||||||
try {
|
|
||||||
const rdfPretty = rdf.clone() // clone the default environment
|
|
||||||
rdfPretty.formats.import(formatsPretty) // import pretty print serializers
|
|
||||||
// Ensure we have the correct content-type
|
|
||||||
headers['Content-Type'] = format;
|
|
||||||
// Serialize the dataset to the desired format
|
|
||||||
const body = await rdfPretty.io.dataset.toText('text/turtle', dataset)
|
|
||||||
const response = await fetch(endpoint, {
|
|
||||||
method: 'POST',
|
|
||||||
formats,
|
|
||||||
headers,
|
|
||||||
body,
|
|
||||||
prefixes,
|
|
||||||
});
|
|
||||||
if (!response.ok) {
|
|
||||||
throw new Error(`postRDF error: ${response.statusText}`);
|
|
||||||
}
|
|
||||||
return response;
|
|
||||||
} catch (error) {
|
|
||||||
console.error('postRDF error:', error);
|
|
||||||
throw error;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue