{"version":3,"file":"fhir-ext.cjs","sources":["../../../../src/resources/classes/fhir-ext.ts"],"sourcesContent":["import { Address as AddressR4B, HumanName as HumanNameR4B } from 'fhir/r4b';\nimport { Address as AddressR5, HumanName as HumanNameR5 } from 'fhir/r5';\nimport {\n  BatchInput,\n  BatchInputRequest,\n  Binary,\n  Bundle,\n  BundleEntry,\n  FhirBundle,\n  FhirCreateParams,\n  FhirDeleteParams,\n  FhirGetParams,\n  FhirHistoryGetParams,\n  FhirHistorySearchParams,\n  FhirPatchParams,\n  FhirResource,\n  FhirSearchParams,\n  FhirUpdateParams,\n} from '../..';\nimport { addParamsToSearch, FhirFetcherResponse, OystehrClientRequest, SDKResource } from '../../client/client';\n\n/**\n * Optional parameter that can be passed to the client methods. It allows\n * overriding the access token or project ID, and setting various headers,\n * such as 'Content-Type'. Also support enabling optimistic locking.\n */\nexport interface OystehrFHIRUpdateClientRequest extends OystehrClientRequest {\n  /**\n   * Enable optimistic locking for the request. If set to a version ID, the request will\n   * include the 'If-Match' header with that value in the FHIR optimistic-locking format.\n   * If the resource has been updated since the version provided, the request\n   * will fail with a 412 Precondition Failed error.\n   */\n  optimisticLockingVersionId?: string;\n}\n\n/**\n * Performs a FHIR search and returns the results as a Bundle resource\n *\n * @param options FHIR resource type and FHIR search parameters\n * @param request optional OystehrClientRequest object\n * @returns FHIR Bundle resource\n */\nexport async function search<T extends FhirResource>(\n  this: SDKResource,\n  params: FhirSearchParams<T>,\n  request?: OystehrClientRequest\n): Promise<FhirFetcherResponse<Bundle<T>>> {\n  const { resourceType, params: searchParams } = params;\n  let paramMap: Record<string, (string | number)[]> | undefined;\n  if (searchParams) {\n    paramMap = Object.entries(searchParams).reduce((acc, [_, param]) => {\n      if (!acc[param.name]) {\n        acc[param.name] = [];\n      }\n      acc[param.name].push(param.value);\n      return acc;\n    }, {} as Record<string, (string | number)[]>);\n  }\n  const requestBundle = await this.fhirRequest<FhirBundle<T>>(`/${resourceType}/_search`, 'POST')(paramMap, {\n    ...request,\n    contentType: 'application/x-www-form-urlencoded',\n  });\n  const bundle: Bundle<T> = {\n    ...requestBundle,\n    entry: requestBundle.entry as Array<BundleEntry<T>> | undefined,\n    unbundle: function (this: { entry?: Array<BundleEntry<T>> | undefined }) {\n      return this.entry?.map((entry) => entry.resource).filter((entry): entry is T => entry !== undefined) ?? [];\n    },\n  };\n  return bundle;\n}\n\nexport async function create<T extends FhirResource>(\n  this: SDKResource,\n  params: FhirCreateParams<T>,\n  request?: OystehrClientRequest\n): Promise<FhirFetcherResponse<T>> {\n  const { resourceType } = params;\n  return this.fhirRequest(`/${resourceType}`, 'POST')(params as unknown as Record<string, unknown>, request);\n}\n\nexport async function get<T extends FhirResource>(\n  this: SDKResource,\n  { resourceType, id }: FhirGetParams<T>,\n  request?: OystehrClientRequest\n): Promise<FhirFetcherResponse<T>> {\n  return this.fhirRequest<T>(`/${resourceType}/${id}`, 'GET')({}, request);\n}\n\nexport async function update<T extends FhirResource>(\n  this: SDKResource,\n  params: FhirUpdateParams<T>,\n  request?: OystehrFHIRUpdateClientRequest\n): Promise<FhirFetcherResponse<T>> {\n  const { id, resourceType } = params;\n  return this.fhirRequest(`/${resourceType}/${id}`, 'PUT')(params as unknown as Record<string, unknown>, {\n    ...request,\n    ifMatch: request?.optimisticLockingVersionId ? `W/\"${request.optimisticLockingVersionId}\"` : undefined,\n  });\n}\n\nexport async function patch<T extends FhirResource>(\n  this: SDKResource,\n  { resourceType, id, operations }: FhirPatchParams<T>,\n  request?: OystehrFHIRUpdateClientRequest\n): Promise<FhirFetcherResponse<T>> {\n  return this.fhirRequest(`/${resourceType}/${id}`, 'PATCH')(operations, {\n    ...request,\n    contentType: 'application/json-patch+json',\n    ifMatch: request?.optimisticLockingVersionId ? `W/\"${request.optimisticLockingVersionId}\"` : undefined,\n  });\n}\n\nasync function del<T extends FhirResource>(\n  this: SDKResource,\n  { resourceType, id }: FhirDeleteParams<T>,\n  request?: OystehrClientRequest\n): Promise<FhirFetcherResponse<T>> {\n  return this.fhirRequest(`/${resourceType}/${id}`, 'DELETE')({}, request);\n}\nexport { del as delete };\n\nexport async function history<T extends FhirResource>(\n  this: SDKResource,\n  { resourceType, id }: FhirHistorySearchParams<T>,\n  request?: OystehrClientRequest\n): Promise<FhirFetcherResponse<Bundle<T>>>;\nexport async function history<T extends FhirResource>(\n  this: SDKResource,\n  { resourceType, id, versionId }: FhirHistoryGetParams<T>,\n  request?: OystehrClientRequest\n): Promise<FhirFetcherResponse<T>>;\nexport async function history<T extends FhirResource>(\n  this: SDKResource,\n  { resourceType, id, versionId }: { resourceType: string; id: string; versionId?: string },\n  request?: OystehrClientRequest\n): Promise<FhirFetcherResponse<Bundle<T>> | FhirFetcherResponse<T>> {\n  return this.fhirRequest(`/${resourceType}/${id}/_history${versionId ? `/${versionId}` : ''}`, 'GET')({}, request);\n}\n\nfunction batchInputRequestToBundleEntryItem<T extends FhirResource>(\n  request: BatchInputRequest<T>\n): BundleEntry<T | Binary<T>> {\n  const { method, url } = request;\n  const baseRequest = {\n    request: {\n      method,\n      url,\n    },\n  };\n\n  // Escape query string parameters in entry.request.url\n  if (url.split('?').length > 1) {\n    const [resource, query] = url.split('?');\n    const params = query\n      .split('&')\n      .map((param) => {\n        const [name, value] = param.split('=');\n        return { name, value };\n      })\n      .reduce((acc, { name, value }) => {\n        if (!name) {\n          return acc;\n        }\n        if (!acc[name]) {\n          acc[name] = [];\n        }\n        acc[name].push(value);\n        return acc;\n      }, {} as Record<string, string[]>);\n    const search = new URLSearchParams();\n    addParamsToSearch(params, search);\n    baseRequest.request.url = `${resource}?${search.toString()}`;\n  }\n\n  // GET, DELETE, and HEAD require no further parameters\n  if (['GET', 'DELETE', 'HEAD'].includes(method)) {\n    return baseRequest as BundleEntry<T>;\n  }\n\n  // PUT updates require a full resource\n  if (method === 'PUT') {\n    const { resource } = request;\n    return {\n      ...baseRequest,\n      resource: resource as T,\n    } as BundleEntry<T>;\n  }\n\n  // PATCH can be Binary resource or JSON patch\n  if (method === 'PATCH') {\n    if ('resource' in request) {\n      return {\n        ...baseRequest,\n        resource: request.resource,\n      } as BundleEntry<Binary<T>>;\n    }\n    return {\n      ...baseRequest,\n      resource: {\n        resourceType: 'Binary',\n        contentType: 'application/json-patch+json',\n        data: Buffer.from(JSON.stringify(request.operations), 'utf8').toString('base64'),\n      },\n    } as BundleEntry<Binary<T>>;\n  }\n\n  // POST creates require a full resource\n  if (method === 'POST') {\n    const { resource, fullUrl } = request;\n    return {\n      ...baseRequest,\n      resource: resource as T,\n      fullUrl,\n    } as BundleEntry<T>;\n  }\n  throw new Error('Unrecognized method');\n}\n\nfunction bundleRequest(type: 'batch' | 'transaction') {\n  return async function <BundleContentType extends FhirResource>(\n    this: SDKResource,\n    input: BatchInput<BundleContentType>,\n    request?: OystehrClientRequest\n  ): Promise<FhirFetcherResponse<Bundle<BundleContentType>>> {\n    return this.fhirRequest('/', 'POST')(\n      {\n        resourceType: 'Bundle',\n        type,\n        entry: input.requests.map(batchInputRequestToBundleEntryItem),\n      },\n      request\n    );\n  };\n}\n\nexport const batch = bundleRequest('batch');\nexport const transaction = bundleRequest('transaction');\n\nexport function formatAddress(\n  address: AddressR4B | AddressR5,\n  options?: { all?: boolean; use?: boolean; lineSeparator?: string }\n): string {\n  const builder = [];\n\n  if (address.line) {\n    builder.push(...address.line);\n  }\n\n  if (address.city || address.state || address.postalCode) {\n    const cityStateZip = [];\n    if (address.city) {\n      cityStateZip.push(address.city);\n    }\n    if (address.state) {\n      cityStateZip.push(address.state);\n    }\n    if (address.postalCode) {\n      cityStateZip.push(address.postalCode);\n    }\n    builder.push(cityStateZip.join(', '));\n  }\n\n  if (address.use && (options?.all || options?.use)) {\n    builder.push('[' + address.use + ']');\n  }\n\n  return builder.join(options?.lineSeparator || ', ').trim();\n}\n\nexport function formatHumanName(\n  name: HumanNameR4B | HumanNameR5,\n  options?: {\n    all?: boolean;\n    prefix?: boolean;\n    suffix?: boolean;\n    use?: boolean;\n  }\n): string {\n  const builder = [];\n\n  if (name.prefix && options?.prefix !== false) {\n    builder.push(...name.prefix);\n  }\n\n  if (name.given) {\n    builder.push(...name.given);\n  }\n\n  if (name.family) {\n    builder.push(name.family);\n  }\n\n  if (name.suffix && options?.suffix !== false) {\n    builder.push(...name.suffix);\n  }\n\n  if (name.use && (options?.all || options?.use)) {\n    builder.push('[' + name.use + ']');\n  }\n\n  return builder.join(' ').trim();\n}\n"],"names":["addParamsToSearch"],"mappings":"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"}