{"version":3,"file":"imng-odata-client.mjs","sources":["../../../../libs/imng-odata-client/src/lib/models/child-filter.ts","../../../../libs/imng-odata-client/src/lib/models/composite-filter.ts","../../../../libs/imng-odata-client/src/lib/models/computation-operators.ts","../../../../libs/imng-odata-client/src/lib/models/computation.ts","../../../../libs/imng-odata-client/src/lib/models/expander.ts","../../../../libs/imng-odata-client/src/lib/helpers/filter-serializers.ts","../../../../libs/imng-odata-client/src/lib/models/filter-operators.ts","../../../../libs/imng-odata-client/src/lib/models/filter.ts","../../../../libs/imng-odata-client/src/lib/models/odata-result.ts","../../../../libs/imng-odata-client/src/lib/models/array-filter.ts","../../../../libs/imng-odata-client/src/lib/operators/map-data.ts","../../../../libs/imng-odata-client/src/lib/helpers/get-filter-operator.ts","../../../../libs/imng-odata-client/src/lib/helpers/filter-processor.ts","../../../../libs/imng-odata-client/src/lib/services/odata-client.service.ts","../../../../libs/imng-odata-client/src/lib/imng-odata-client.module.ts","../../../../libs/imng-odata-client/src/lib/helpers/create-odata-result.ts","../../../../libs/imng-odata-client/src/imng-odata-client.ts"],"sourcesContent":["import { ICompositeFilter } from './composite-filter';\nimport { IFilter } from './filter';\n\nexport interface IChildFilter extends IFilter {\n  /**\n   * Used to support child entity filtering:\n   * Child table name/navigation property\n   * */\n  childTable: string;\n  /**\n   * Used to support child entity filtering:\n   * Specifies whether all or some of the child records have to match the given criteria\n   * */\n  linqOperation: 'all' | 'any';\n}\n\nexport function isChildFilter(\n  source: ICompositeFilter | IFilter | IChildFilter,\n): source is IChildFilter {\n  return !!(source as IChildFilter)?.childTable;\n}\n","import { IChildFilter } from './child-filter';\nimport { IFilter } from './filter';\n\n/**\n * A complex filter expression.\n */\nexport interface ICompositeFilter {\n  /**\n   * The logical operation to use when the `filter.filters` option is set.\n   *\n   * The supported values are:\n   * * `\"and\"`\n   * * `\"or\"`\n   */\n  logic: 'or' | 'and';\n  /**\n   * The nested filter expressions\n   */\n  filters: Array<IFilter | IChildFilter | ICompositeFilter>;\n}\n\nexport function isCompositeFilter(\n  source: ICompositeFilter | IFilter | IChildFilter,\n): source is ICompositeFilter {\n  return !!(source as ICompositeFilter)?.filters;\n}\n","export enum ComputationOperators {\n  Multiply = 'mul',\n  Divide = 'div',\n  Add = 'add',\n  Subtract = 'sub',\n  Modulus = 'mod',\n}\n","import { ComputationOperators } from './computation-operators';\n\nexport interface Computation {\n  /** This is the first value to be used in the computation */\n  fieldA: string | number;\n  /** This is the second value to be used in the computation */\n  fieldB: string | number;\n  operator: ComputationOperators | string; //NOSONAR\n\n  /** This MUST differ from the names of declared or dynamic properties of the identified resources. */\n  alias: string;\n}\n\nexport function isComputation(\n  source: string | Computation,\n): source is Computation {\n  return !!(source as Computation)?.operator;\n}\n","import { ODataQuery } from './odata-query';\n\nexport interface Expander extends ODataQuery {\n  table: string;\n}\n\nexport function isExpander(source: string | Expander): source is Expander {\n  return !!(source as Expander)?.table;\n}\n","import { IdType } from 'imng-nrsrx-client-utils';\n\nexport function serializeValue(\n  value?: IdType,\n  isRelativeValue = false,\n): string {\n  if (isRelativeValue) {\n    return value?.toString() ?? '';\n  } else if (typeof value === 'string') {\n    return `'${encodeURIComponent(value)}'`;\n  } else if (value instanceof Date) {\n    return `${value.toISOString().split('T')[0]}`;\n  }\n  return `${value}`;\n}\n\nexport const serializeSimpleFilter = (\n  field: string,\n  operator: string,\n  value?: IdType,\n  isRelativeValue = false,\n): string => `${field} ${operator} ${serializeValue(value, isRelativeValue)}`;\n\nexport const serializeArrayFilter = (\n  field: string,\n  operator: string,\n  values?: IdType[],\n  isRelativeValue = false,\n): string =>\n  values && values.length > 0\n    ? `${field} ${operator} (${values.map((value) => serializeValue(value, isRelativeValue)).join(',')})`\n    : '';\n\nexport const serializeFunctionFilter = (\n  field: string,\n  func: string,\n  value?: IdType,\n  isRelativeValue = false,\n): string =>\n  value ? `${func}(${field},${serializeValue(value, isRelativeValue)})` : '';\n","import { IdType } from 'imng-nrsrx-client-utils';\nimport { IFilterOperator } from './filter-operator';\nimport {\n  serializeArrayFilter,\n  serializeFunctionFilter,\n  serializeSimpleFilter,\n} from '../helpers/filter-serializers';\n\nexport interface IFilterOperators {\n  [key: string]: IFilterOperator;\n}\n\n/**\n * Represents the list of supported simple filter operators.\n */\nexport class FilterOperators {\n  /**\n   * The `eq` operator.\n   */\n  public static readonly equals: IFilterOperator = {\n    name: 'equals',\n    toODataString: (field: string, value?: IdType, isRelativeValue = false) =>\n      serializeSimpleFilter(field, 'eq', value, isRelativeValue),\n  };\n  /**\n   * The `gt` operator.\n   */\n  public static readonly greaterThan: IFilterOperator = {\n    name: 'greaterThan',\n    toODataString: (\n      field: string,\n      value?: IdType,\n      isRelativeValue = false,\n    ): string => serializeSimpleFilter(field, 'gt', value, isRelativeValue),\n  };\n  /**\n   * The `ge` operator.\n   */\n  public static readonly greaterThanOrEquals: IFilterOperator = {\n    name: 'greaterThanOrEquals',\n    toODataString: (\n      field: string,\n      value?: IdType,\n      isRelativeValue = false,\n    ): string => serializeSimpleFilter(field, 'ge', value, isRelativeValue),\n  };\n  /**\n   * The `lt` operator.\n   */\n  public static readonly lessThan: IFilterOperator = {\n    name: 'lessThan',\n    toODataString: (\n      field: string,\n      value?: IdType,\n      isRelativeValue = false,\n    ): string => serializeSimpleFilter(field, 'lt', value, isRelativeValue),\n  };\n  /**\n   * The `le` operator.\n   */\n  public static readonly lessThanOrEquals: IFilterOperator = {\n    name: 'lessThanOrEquals',\n    toODataString: (\n      field: string,\n      value?: IdType,\n      isRelativeValue = false,\n    ): string => serializeSimpleFilter(field, 'le', value, isRelativeValue),\n  };\n  /**\n   * The `ne` operator.\n   */\n  public static readonly notEquals: IFilterOperator = {\n    name: 'notEquals',\n    toODataString: (\n      field: string,\n      value?: IdType,\n      isRelativeValue = false,\n    ): string => serializeSimpleFilter(field, 'ne', value, isRelativeValue),\n  };\n  /**\n   * The `in` operator.\n   */\n  public static readonly in: IFilterOperator = {\n    name: 'in',\n    toODataString: (\n      field: string,\n      values?: IdType[],\n      isRelativeValue = false,\n    ): string => serializeArrayFilter(field, 'in', values, isRelativeValue),\n  };\n  /**\n   * The `not in` operator.\n   */\n  public static readonly notIn: IFilterOperator = {\n    name: 'notIn',\n    toODataString: (\n      field: string,\n      values?: IdType[],\n      isRelativeValue = false,\n    ): string => serializeArrayFilter(field, 'not in', values, isRelativeValue),\n  };\n  /**\n   * The `is not null` operator.\n   */\n\n  public static readonly notNull: IFilterOperator = {\n    name: 'notNull',\n    toODataString: (field: string): string => `${field} ne null`,\n  };\n  /**\n   * The `is null` operator.\n   */\n  public static readonly isNull: IFilterOperator = {\n    name: 'isNull',\n    toODataString: (field: string): string => `${field} eq null`,\n  };\n  /**\n   * The `contains` operator.\n   */\n  public static readonly contains: IFilterOperator = {\n    name: 'contains',\n    toODataString: (\n      field: string,\n      value?: IdType,\n      isRelativeValue = false,\n    ): string =>\n      serializeFunctionFilter(field, 'contains', value, isRelativeValue),\n  };\n  /**\n   * The `not contain` operator.\n   */\n  public static readonly notContains: IFilterOperator = {\n    name: 'notContains',\n    toODataString: (\n      field: string,\n      value?: IdType,\n      isRelativeValue = false,\n    ): string =>\n      serializeFunctionFilter(field, 'not contains', value, isRelativeValue),\n  };\n  /**\n   * The `ends with` operator.\n   */\n  public static readonly endsWith: IFilterOperator = {\n    name: 'endswith',\n    toODataString: (\n      field: string,\n      value?: IdType,\n      isRelativeValue = false,\n    ): string =>\n      serializeFunctionFilter(field, 'endswith', value, isRelativeValue),\n  };\n  /**\n   * The `not ends with` operator.\n   */\n  public static readonly notEndsWith: IFilterOperator = {\n    name: 'notEndsWith',\n    toODataString: (\n      field: string,\n      value?: IdType,\n      isRelativeValue = false,\n    ): string =>\n      serializeFunctionFilter(field, 'not endswith', value, isRelativeValue),\n  };\n  /**\n   * The `startswith` operator.\n   */\n  public static readonly startsWith: IFilterOperator = {\n    name: 'startsWith',\n    toODataString: (\n      field: string,\n      value?: IdType,\n      isRelativeValue = false,\n    ): string =>\n      serializeFunctionFilter(field, 'startswith', value, isRelativeValue),\n  };\n  /**\n   * The `not start with` operator.\n   */\n  public static readonly notStartsWith: IFilterOperator = {\n    name: 'notStartsWith',\n    toODataString: (\n      field: string,\n      value?: IdType,\n      isRelativeValue = false,\n    ): string =>\n      serializeFunctionFilter(field, 'not startswith', value, isRelativeValue),\n  };\n  /**\n   * The `empty` operator.\n   */\n  public static readonly isEmpty: IFilterOperator = {\n    name: 'isEmpty',\n    toODataString: (field: string): string =>\n      serializeSimpleFilter(field, 'eq', '', false),\n  };\n  /**\n   * The `not empty` operator.\n   */\n  public static readonly notEmpty: IFilterOperator = {\n    name: 'notEmpty',\n    toODataString: (field: string): string =>\n      serializeSimpleFilter(field, 'ne', '', false),\n  };\n}\n\nexport const filterOperators: IFilterOperators = {\n  contains: FilterOperators.contains,\n  endsWith: FilterOperators.endsWith,\n  endswith: FilterOperators.endsWith,\n  equals: FilterOperators.equals,\n  eq: FilterOperators.equals,\n  dateIs: FilterOperators.equals,\n  greaterThan: FilterOperators.greaterThan,\n  gt: FilterOperators.greaterThan,\n  dateAfter: FilterOperators.greaterThan,\n  greaterThanOrEquals: FilterOperators.greaterThanOrEquals,\n  gte: FilterOperators.greaterThanOrEquals,\n  ge: FilterOperators.greaterThanOrEquals,\n  in: FilterOperators.in,\n  isEmpty: FilterOperators.isEmpty,\n  isNull: FilterOperators.isNull,\n  isnull: FilterOperators.isNull,\n  lessThan: FilterOperators.lessThan,\n  lt: FilterOperators.lessThan,\n  dateBefore: FilterOperators.lessThan,\n  lessThanOrEquals: FilterOperators.lessThanOrEquals,\n  lte: FilterOperators.lessThanOrEquals,\n  notContains: FilterOperators.notContains,\n  doesnotcontain: FilterOperators.notContains,\n  notEmpty: FilterOperators.notEmpty,\n  isnotempty: FilterOperators.notEmpty,\n  notEndsWith: FilterOperators.notEndsWith,\n  notEquals: FilterOperators.notEquals,\n  ne: FilterOperators.notEquals,\n  neq: FilterOperators.notEquals,\n  dateIsNot: FilterOperators.notEquals,\n  notIn: FilterOperators.notIn,\n  notNull: FilterOperators.notNull,\n  isnotnull: FilterOperators.notNull,\n  notStartsWith: FilterOperators.notStartsWith,\n  startsWith: FilterOperators.startsWith,\n  startswith: FilterOperators.startsWith,\n};\n","import { IdType } from 'imng-nrsrx-client-utils';\nimport { IFilterOperator } from './filter-operator';\nimport { ICompositeFilter } from './composite-filter';\nimport { IChildFilter } from './child-filter';\n\n/**\n * A basic filter expression.\n */\nexport interface IFilter {\n  /**\n   * The data item field to which the filter operator is applied.\n   */\n  field: string;\n  /**\n   * The filter operator (comparison).\n   *\n   * The supported operators are:\n   * * `FilterOperators.equalTo` (equal to)\n   * * `FilterOperators.notEqualTo` (not equal to)\n   * * `FilterOperators.isNull` (is equal to null)\n   * * `FilterOperators.notNull` (is not equal to null)\n   * * `FilterOperators.lessThan` (less than)\n   * * `FilterOperators.lessThanOrEqualTo` (less than or equal to)\n   * * `FilterOperators.greaterThan` (greater than)\n   * * `FilterOperators.greaterThanOrEqualTo` (greater than or equal to)\n   * * `FilterOperators.in` (specified value should be an array)\n   * * `FilterOperators.notIn` (specified value should be an array)\n   *\n   * The following operators are supported for string fields only:\n   * * `FilterOperators.startsWith`\n   * * `FilterOperators.endsWith`\n   * * `FilterOperators.contains`\n   * * `FilterOperators.notContains`\n   * * `FilterOperators.isEmpty`\n   * * `FilterOperators.notempty`\n   */\n  operator: IFilterOperator | string;\n  /**\n   * The value to which the field is compared. Has to be of the same type as the field.\n   */\n  value?: IdType | IdType[] | boolean | null;\n  /**\n   * Determines if the string comparison is case-insensitive.\n   */\n  ignoreCase?: boolean;\n  /**\n  This is used to determine if the value being compared against a relative field (parentTable/idColumn) vs a static value ('12345').\n  */\n  isRelativeValue?: boolean;\n}\n\nexport function isFilter(\n  source: ICompositeFilter | IFilter | IChildFilter | string,\n): source is IFilter {\n  return !!(source as IFilter)?.field;\n}\n","import { IdType } from 'imng-nrsrx-client-utils';\n\nexport interface ODataResult<T extends { id?: IdType } | unknown> {\n  value: T[];\n  count?: number;\n  '@odata.count'?: number;\n}\n\nexport function createEmptyODataResult<\n  T extends { id?: IdType } | unknown,\n>(): ODataResult<T> {\n  return { value: Array<T>(), count: 0 };\n}\n\nexport function isODataResult<T extends { id?: IdType } | unknown>(\n  source: unknown,\n): source is ODataResult<T> {\n  return !!(source as ODataResult<T>)?.value;\n}\n","import { IdType } from 'imng-nrsrx-client-utils';\nimport { IFilter, isFilter } from './filter';\nimport { IFilterOperator } from './filter-operator';\nimport { ICompositeFilter } from './composite-filter';\nimport { IChildFilter } from './child-filter';\nimport { FilterOperators } from './filter-operators';\n\nexport interface IArrayFilter extends IFilter {\n  /**\n   * The supported operators are:\n   * * `FilterOperators.in` (specified value should be an array)\n   * * `FilterOperators.notIn` (specified value should be an array)\n   */\n  operator: IFilterOperator | string;\n  /**\n   * The value to which the field is compared. Has to be of the same type as the field.\n   */\n  value?: IdType[] | null;\n}\n\nexport function isArrayFilter(\n  source: ICompositeFilter | IFilter | IChildFilter | string,\n): source is IArrayFilter {\n  return (\n    isFilter(source) &&\n    (source.operator === 'in' ||\n      source.operator === 'notIn' ||\n      source.operator === FilterOperators.in ||\n      source.operator === FilterOperators.notIn)\n  );\n}\n","import { MILLI_SECS_PER_SEC } from 'imng-nrsrx-client-utils';\nimport { map } from 'rxjs/operators';\nimport { FetchOptions, ODataResult } from '../models';\n\nexport const mapData = <T extends object>(options: FetchOptions) =>\n  map((response: ODataResult<T> | T[]): ODataResult<T> => {\n    if (!response) {\n      return { value: [], count: 0 };\n    }\n    return Array.isArray(response)\n      ? {\n          value: response,\n          count: response.length,\n        }\n      : ({\n          value: parseDatesInCollection(response.value, options),\n          count: response['@odata.count'],\n        } as ODataResult<T>);\n  });\n\nexport function parseDatesInCollection<T extends object>(\n  collection: Array<T>,\n  options: FetchOptions,\n): Array<T> {\n  if (collection.length > 0) {\n    const utcProps = Object.keys(collection[0]).filter((x) =>\n      x.endsWith('Utc'),\n    );\n    const dateProps = Object.keys(collection[0]).filter(\n      (x) => x.endsWith('Date') || x === 'date',\n    );\n\n    options.utcNullableProps?.forEach((t) => {\n      if (!utcProps.includes(t)) {\n        utcProps.push(t);\n      }\n    });\n\n    options.dateNullableProps?.forEach((t) => {\n      if (!dateProps.includes(t)) {\n        dateProps.push(t);\n      }\n    });\n\n    // prettier-ignore\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    collection.forEach((val: any) => {//NOSONAR\n      utcProps.filter((p) => val[p]).forEach((p) => (val[p] = new Date(val[p])));\n      dateProps.filter((p) => val[p]).forEach((p) => (val[p] = toLocalDate(val[p])));\n    });\n  }\n  return collection;\n}\nexport function toLocalDate(date: string): Date {\n  const dt = new Date(date);\n  return new Date(\n    dt.getTime() + Math.abs(dt.getTimezoneOffset() * MILLI_SECS_PER_SEC),\n  );\n}\n","import { filterOperators } from '../models';\nimport { IFilterOperator } from '../models/filter-operator';\n\nexport const getFilterOperator = (operatorName: string): IFilterOperator =>\n  filterOperators[operatorName];\n","import {\n  IChildFilter,\n  ICompositeFilter,\n  IFilter,\n  isArrayFilter,\n  isChildFilter,\n  isCompositeFilter,\n  ODataQuery,\n} from '../models';\nimport { getFilterOperator } from './get-filter-operator';\n\nexport function processFilters(query: ODataQuery, queryString: string): string {\n  if (!query.filter?.filters?.length) {\n    return queryString;\n  }\n  const filterString = serializeCompositeFilter(query.filter);\n  if (filterString === '()') {\n    return queryString;\n  }\n  return `${queryString}&$filter=${filterString}`;\n}\n\nexport function serializeCompositeFilter(\n  compositeFilter: ICompositeFilter,\n): string {\n  const filterLogicSeparator = ` ${compositeFilter.logic} `;\n  return `(${compositeFilter.filters\n    .map((filter) => serializeFilterItem(filter))\n    .filter((m) => m && m !== '()')\n    .join(filterLogicSeparator)})`;\n}\nexport function serializeFilterItem(\n  filter: IFilter | IChildFilter | ICompositeFilter,\n): string {\n  if (isCompositeFilter(filter)) {\n    const subFilters = filter.filters.filter((subFilter) =>\n      isNotEmptyFilter(subFilter),\n    );\n    if (subFilters.length > 1) {\n      return serializeCompositeFilter(filter);\n    } else if (subFilters.length === 1) {\n      return serializeFilterItem(subFilters[0]);\n    } else {\n      return '';\n    }\n  } else if (isNotEmptyFilter(filter)) {\n    return serializeFilter(filter);\n  }\n  return '';\n}\n\nexport function isNotEmptyFilter(\n  filter: IFilter | IChildFilter | ICompositeFilter,\n): boolean {\n  if (isCompositeFilter(filter)) {\n    return filter.filters.every((filter) => isNotEmptyFilter(filter));\n  } else if (isArrayFilter(filter)) {\n    return (\n      filter.value !== undefined &&\n      filter.value !== null &&\n      filter.value.length > 0\n    );\n  } else {\n    return (\n      filter.field !== undefined &&\n      filter.field !== null &&\n      filter.field.length > 0\n    );\n  }\n}\n\nexport function serializeFilter(filter: IFilter | IChildFilter): string {\n  const operator =\n    typeof filter.operator === 'string'\n      ? getFilterOperator(filter.operator)\n      : getFilterOperator(filter.operator?.name || 'equals');\n  const odataStringFunction = operator.toODataString;\n  if (filter.field === undefined || filter.field === null) {\n    return '';\n  } else {\n    const field = filter.field.replaceAll('.', '/');\n    if (isChildFilter(filter)) {\n      const childFieldName = `o/${field}`;\n      return `${filter.childTable}/${\n        filter.linqOperation\n      }(o: ${odataStringFunction(childFieldName, filter.value as never, filter.isRelativeValue)})`;\n    } else {\n      return odataStringFunction(\n        field,\n        filter.value as never,\n        filter.isRelativeValue,\n      );\n    }\n  }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n  Expander,\n  FetchOptions,\n  isExpander,\n  ODataQuery,\n  ODataResult,\n} from '../models';\nimport { mapData } from '../operators/map-data';\nimport { processFilters } from '../helpers/filter-processor';\n\nexport const uuidRegex = /T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/gi;\n@Injectable({\n  providedIn: 'root',\n})\nexport class ODataClientService {\n  private readonly httpClient = inject(HttpClient);\n\n  public fetch<T extends object>(\n    odataEndpoint: string,\n    query: ODataQuery,\n    options: FetchOptions = {},\n  ): Observable<ODataResult<T>> {\n    const queryStr = getODataString(query, options);\n    return this.httpClient\n      .get<ODataResult<T> | T[]>(`${odataEndpoint}?${queryStr}`)\n      .pipe(mapData<T>(options));\n  }\n}\n\nexport function getODataString(\n  query: ODataQuery,\n  options: FetchOptions = {},\n): string {\n  let queryString = '';\n  queryString = processFilters(query, queryString);\n  queryString = processOrderBy(query, queryString);\n  queryString = processSelectors(query, queryString);\n  queryString = processExpanders(query, queryString);\n  queryString = processSimpleParameters('top', query, queryString);\n  queryString = processSimpleParameters('skip', query, queryString);\n  queryString = processGuids(queryString);\n  queryString = processDates(queryString);\n  queryString = processCount(query, queryString);\n  queryString = processCacheBusting(options, queryString);\n  queryString = queryString.substring(1); // removing first &\n  return queryString;\n}\n\nexport function processExpanders(\n  query: ODataQuery,\n  queryString: string,\n): string {\n  if (query.expand && query.expand.length > 0) {\n    const expansionStrings = query.expand.map((element) =>\n      getExpansionString(element),\n    );\n    queryString += `&$expand=${expansionStrings.join(',')}`;\n  }\n  return queryString;\n}\n\nexport function getExpansionString(element: Expander): string {\n  let result = '';\n  if (!element) {\n    return result;\n  }\n  if (typeof element === 'string') {\n    result += element;\n  } else {\n    result += `${element.table}(`;\n    const query: ODataQuery = {\n      ...element,\n      count: element.count ?? false,\n      expand: undefined,\n    };\n    result += `${getODataString(query).replaceAll('&', ';')};`;\n    if (element.expand) {\n      const expanders = element.expand.map((expander) => {\n        if (isExpander(expander)) {\n          return getExpansionString(expander);\n        }\n        return expander;\n      });\n      result += `$expand=${expanders.join(',')};`;\n    }\n    result += ')';\n    result = result\n      .replace(/\\(;\\$expand=/, '($expand=') //Replaces empty expand \"(;$expand=\" with \"($expand=\"\n      .replace(/\\$expand=;?\\)$/, ')') //Replaces empty expand \";$expand=;)\" or \";$expand=)\" with \")\"\n      .replace(/\\(;\\)$/, '') //Removes empty expansion clause \"(;)\"\n      .replace(/;\\)$/, ')'); //Replaces \";)\" with \")\"\n  }\n  return result;\n}\n\nexport function processOrderBy(query: ODataQuery, queryString: string): string {\n  if (!query.orderBy?.length) {\n    return queryString;\n  }\n  const sortString = query.orderBy\n    .map((m) => `${m.field}${m.dir === 'desc' ? ' desc' : ''}`)\n    .join(',');\n  return `${queryString}&$orderby=${sortString}`;\n}\n\nexport function processSimpleParameters(\n  parameterName: 'skip' | 'top',\n  query: ODataQuery,\n  queryString: string,\n): string {\n  if (\n    query[parameterName] ||\n    (parameterName === 'top' && query[parameterName] === 0)\n  ) {\n    return `${queryString}&$${parameterName}=${query[parameterName]}`;\n  }\n  return queryString;\n}\nexport function processCacheBusting(\n  options: FetchOptions,\n  queryString: string,\n): string {\n  if (options.bustCache) {\n    const timeStamp = new Date().toISOString().replaceAll(/[-:.TZ]/g, '');\n    return `${queryString}&timestamp=${timeStamp}`;\n  }\n  return queryString;\n}\n\nexport function processCount(query: ODataQuery, queryString: string): string {\n  if (query.count === false) {\n    return queryString;\n  }\n  return `${queryString}&$count=true`;\n}\n\nexport function processDates(queryString: string): string {\n  const dateRegex = /Date [e-t]{2} \\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/g;\n  let m: RegExpExecArray | null;\n  const dateMatches: string[] = [];\n  while ((m = dateRegex.exec(queryString)) !== null) {\n    // This is necessary to avoid infinite loops with zero-width matches\n    if (m.index === dateRegex.lastIndex) {\n      dateRegex.lastIndex++;\n    }\n    m.forEach((match) => {\n      dateMatches.push(match);\n    });\n  }\n  dateMatches.forEach(\n    (date) =>\n      (queryString = queryString.replace(date, date.replaceAll(uuidRegex, ''))),\n  );\n  return queryString;\n}\n\nexport function processGuids(queryString: string): string {\n  const guidRegex =\n    /'[\\dA-F]{8}-?[\\dA-F]{4}-?[\\dA-F]{4}-?[\\dA-F]{4}-?[\\dA-F]{12}'/gi;\n  let m: RegExpExecArray | null;\n  const guidMatches: string[] = [];\n  while ((m = guidRegex.exec(queryString)) !== null) {\n    // This is necessary to avoid infinite loops with zero-width matches\n    if (m.index === guidRegex.lastIndex) {\n      guidRegex.lastIndex++;\n    }\n    m.forEach((match) => {\n      guidMatches.push(match);\n    });\n  }\n  guidMatches.forEach(\n    (guid) =>\n      (queryString = queryString.replaceAll(guid, guid.replaceAll(\"'\", ''))),\n  );\n  return queryString;\n}\n\nexport function processSelectors(\n  state: ODataQuery,\n  queryString: string,\n): string {\n  if (state.select && state.select.length > 0) {\n    return `${queryString}&$select=${state.select.join()}`;\n  }\n  return queryString;\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport { ODataClientService } from './services/odata-client.service';\n\n@NgModule({ imports: [CommonModule], providers: [ODataClientService, provideHttpClient(withInterceptorsFromDi())] })\nexport class ImngODataClientModule {}\n","import { IdType } from 'imng-nrsrx-client-utils';\nimport { ODataResult } from '../models/odata-result';\n\nexport function createODataResult<T extends { id?: IdType } | unknown>(\n  t: T[],\n): ODataResult<T> {\n  return {\n    value: t,\n    count: t?.length,\n  };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}