diff --git a/CHANGELOG.md b/CHANGELOG.md index fa3c95f..51ac1bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # bedrock-jsonld-document-loader ChangeLog +## 5.2.0 - 2024-12-xx + +### Changed +- Handle parsing of JSON internally when `content-type` does not include `json`. + ## 5.1.0 - 2024-07-31 ### Changed diff --git a/lib/index.js b/lib/index.js index 917cac4..d3ae753 100644 --- a/lib/index.js +++ b/lib/index.js @@ -5,6 +5,7 @@ import {agent} from '@bedrock/https-agent'; import {config} from '@bedrock/core'; import {httpClient} from '@digitalbazaar/http-client'; import {JsonLdDocumentLoader} from 'jsonld-document-loader'; +import {logger} from './logger.js'; import './config.js'; @@ -31,10 +32,24 @@ export const httpClientHandler = { throw new Error('NotFoundError'); } - return result.data; + return _getJsonData(result); } }; +async function _getJsonData(result) { + if(result.data) { + return result.data; + } + + try { + return await result.json(); + } catch(e) { + const {url} = result; + logger.error(`DataError: could not parse JSON from: "${url}"`); + throw new Error('DataError'); + } +} + export const jsonLdDocumentLoader = jdl; export const documentLoader = jdl.documentLoader.bind(jdl); export {JsonLdDocumentLoader}; diff --git a/lib/logger.js b/lib/logger.js new file mode 100644 index 0000000..0e11c25 --- /dev/null +++ b/lib/logger.js @@ -0,0 +1,7 @@ +/*! + * Copyright (c) 2024 Digital Bazaar, Inc. All rights reserved. + */ +import {loggers} from '@bedrock/core'; + +const pkgName = 'bedrock-jsonld-document-loader'; +export const logger = loggers.get('app').child(pkgName);