fhir-kit-client
Version:
52 lines • 1.79 kB
JavaScript
import { fhirReferenceRegEx } from './fhir-regular-expressions.js';
/**
* Split a FHIR reference into its baseUrl (if present), resourceType, and id.
*/
export function splitReference(reference) {
if (!fhirReferenceRegEx.test(reference)) {
throw new Error(`${reference} is not a recognized FHIR reference`);
}
let baseUrl;
let relativeReference = reference;
if (reference.startsWith('http')) {
const match = fhirReferenceRegEx.exec(reference);
if (match?.[1]) {
baseUrl = match[1];
relativeReference = reference.slice(baseUrl.length);
if (baseUrl.endsWith('/')) {
baseUrl = baseUrl.slice(0, -1);
}
}
}
const [resourceType, id] = relativeReference.split('/');
return { baseUrl, resourceType, id };
}
/**
* Return true if the string is a valid FHIR resource type (no leading slash, no colon, non-blank).
*/
export function validResourceType(resourceType) {
if (!resourceType)
return false;
return !resourceType.startsWith('/') && !resourceType.includes(':') && /\S/.test(resourceType);
}
/**
* Serialize search parameters to a query string using native URLSearchParams.
* Returns undefined when params is empty.
*/
export function createQueryString(queryParams) {
if (!queryParams || Object.keys(queryParams).length === 0)
return undefined;
const params = new URLSearchParams();
for (const [key, value] of Object.entries(queryParams)) {
if (Array.isArray(value)) {
for (const v of value) {
params.append(key, String(v));
}
}
else {
params.append(key, String(value));
}
}
return params.toString();
}
//# sourceMappingURL=utils.js.map