UNPKG

imng-kendo-odata

Version:

This library was generated with [Nx](https://nx.dev).

1 lines 52.2 kB
{"version":3,"file":"imng-kendo-odata.mjs","sources":["../../../../libs/imng-kendo-odata/src/lib/odata-result.ts","../../../../libs/imng-kendo-odata/src/lib/odata-payload.ts","../../../../libs/imng-kendo-odata/src/lib/odata-state.ts","../../../../libs/imng-kendo-odata/src/lib/odata-rxjs-operators.ts","../../../../libs/imng-kendo-odata/src/lib/isCompositeChildFilterDescriptor.ts","../../../../libs/imng-kendo-odata/src/lib/translate-child-filter-expression.ts","../../../../libs/imng-kendo-odata/src/lib/transform-child-filters.ts","../../../../libs/imng-kendo-odata/src/lib/translate-child-sorting-expression.ts","../../../../libs/imng-kendo-odata/src/lib/odata.service.ts","../../../../libs/imng-kendo-odata/src/lib/kendo-odata.module.ts","../../../../libs/imng-kendo-odata/src/lib/isFilterDescriptor.ts","../../../../libs/imng-kendo-odata/src/lib/find-filter.ts","../../../../libs/imng-kendo-odata/src/lib/replace-filter.ts","../../../../libs/imng-kendo-odata/src/lib/update-filter.ts","../../../../libs/imng-kendo-odata/src/lib/apply-filter.ts","../../../../libs/imng-kendo-odata/src/imng-kendo-odata.ts"],"sourcesContent":["import { DataResult } from '@progress/kendo-data-query';\nimport { IdType } from 'imng-nrsrx-client-utils';\n\nexport interface ODataResult<T extends { id?: IdType; } | unknown> extends DataResult {\n  data: Array<T>;\n  total: number;\n}\nexport const emptyODataResult: ODataResult<unknown> = { data: [], total: 0 };\nexport function createEmptyODataResult<T extends { id?: IdType; } | unknown>(): ODataResult<T> {\n  return { data: Array<T>(), total: 0 };\n}\nexport function createODataResult<T extends { id?: IdType; } | unknown>(t: T[]): ODataResult<T> {\n  return {\n    data: t,\n    total: t?.length,\n  };\n}\nexport function isODataResult<T extends { id?: IdType; } | unknown>(source: unknown): source is ODataResult<T> {\n  return !!(source as ODataResult<T>)?.data;\n}\n","export interface ODataPayload<T> {\n  '@odata.context'?: string;\n  '@odata.count'?: number;\n  value: T[];\n}\n\nexport function createODataPayload<T>(resultSet: T[]): ODataPayload<T> {\n  return {\n    ['@odata.count']: resultSet?.length,\n    value: resultSet,\n  };\n}\n","import {\n  FilterDescriptor,\n  SortDescriptor,\n  GroupDescriptor,\n} from '@progress/kendo-data-query';\nimport { IdType } from 'imng-nrsrx-client-utils';\nimport { ICompositeFilter } from 'imng-odata-client';\n\nexport interface ODataState {\n  /**\n   * The number of records to be skipped by the pager.\n   */\n  skip?: number;\n  /**\n   * The number of records to take.\n   */\n  take?: number;\n  /**\n   * The descriptors used for sorting.\n   */\n  sort?: Array<SortDescriptor>;\n  /**\n   * The descriptors used for grouping.\n   */\n  group?: Array<GroupDescriptor>;\n  expanders?: Array<Expander>;\n  selectors?: string[];\n  inFilters?: InFilter[];\n  notInFilters?: InFilter[];\n  childFilters?: CompositeChildFilterDescriptor;\n  filter?: ICompositeFilter;\n  count?: boolean;\n  transformations?: string;\n  compute?: Array<Computation | string>;\n}\nexport interface Computation {\n  /** This can also be a static value */\n  fieldA: string | number;\n  /** This can also be a static value */\n  fieldB: string | number;\n  operator: 'mul' | 'div' | 'add' | 'sub' | 'mod' | string; //NOSONAR\n  /** This MUST differ from the names of declared or dynamic properties of the identified resources. */\n  alias: string;\n}\n\nexport interface InFilter {\n  /** This value will default to 'and' in cases where there are additional filters specified. */\n  logic?: 'or' | 'and';\n  field: string;\n  values: IdType[];\n}\n\nexport interface CompositeChildFilterDescriptor {\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   *\n   */\n  filters?: Array<CompositeChildFilterDescriptor | ChildFilterDescriptor>;\n  existsFilters?: Array<ChildExistsFilterDescriptor>;\n  /** This is used when combining the child filter with other filters on the parent.\n   * If not specified it will default to 'and'.\n   * Example: (childFilter) and (regularFilter)\n   * Example: (childFilter) or (regularFilter)\n   */\n  externalLogic?: 'and' | 'or';\n}\n/** This is used to filter records that have child records that exists or match a filter.\n *  @See {@link https://docs.oasis-open.org/odata/odata/v4.0/errata03/os/complete/part2-url-conventions/odata-v4.0-errata03-os-part2-url-conventions-complete.html#_Toc371341806}\n */\nexport interface ChildExistsFilterDescriptor {\n  /**  This should be the child table navigation property */\n  childTableNavigationProperty: string;\n  /** Filter expression to be used, this can be undefined\n   * Example: 'childRecord:childRecord/Quantity gt 100'\n   */\n  filter?: string;\n  /**\n   * This should be 'any' or 'all' for child table navigation properties.\n   * 'all' will return records if all child records match the filter.\n   * 'any' will return records if any child record matches the filter.\n   * @default 'any'\n   * @note If 'all' is used a filter expression must be provided.\n   */\n  linqOperation?: 'all' | 'any';\n}\nexport interface ChildFilterDescriptor extends FilterDescriptor {\n  /**  This should be the child table navigation property */\n  childTableNavigationProperty: string;\n  /**\n   * This should be 'any' or 'all' for child table navigation properties.\n   * If this is not specified, it will default to 'any'.\n   * 'all' will return records if all child records match the filter.\n   * 'any' will return records if any child record matches the filter.\n   */\n  linqOperation: 'all' | 'any';\n}\n\nexport interface Expander {\n  table: string;\n  selectors?: string[];\n  expanders?: Array<Expander | string>;\n  filter?: ICompositeFilter;\n  sort?: Array<SortDescriptor>;\n  count?: boolean;\n}\nexport function isExpander(source: string | Expander): source is Expander {\n  return !!(source as Expander)?.table;\n}\nexport function isComputation(\n  source: string | Computation,\n): source is Computation {\n  return !!(source as Computation)?.operator;\n}\n","import { ODataPayload } from './odata-payload';\nimport { map, filter } from 'rxjs/operators';\nimport { ODataResult } from './odata-result';\nimport { Observable } from 'rxjs';\nimport { IdType, MILLI_SECS_PER_SEC } from 'imng-nrsrx-client-utils';\n\nexport const mapToExtDataResult = <T extends object>(\n  utcNullableProps: string[] = [],\n  dateNullableProps: string[] = [],\n) =>\n  map((response: ODataPayload<T> | T[]) => {\n    if (!response) {\n      return { data: [], total: 0 };\n    }\n    const result = Array.isArray(response)\n      ? {\n          data: response,\n          total: response.length,\n        }\n      : ({\n          data: response.value,\n          total: response['@odata.count'],\n        } as ODataResult<T>);\n    result.data = parseDatesInCollection(\n      result.data,\n      utcNullableProps,\n      dateNullableProps,\n    );\n    return result;\n  });\n\nexport const firstRecord = <T>() =>\n  map((result: ODataResult<T>) =>\n    result?.data?.length > 0 ? result.data[0] : ({} as T),\n  );\n\nexport const findById = <T extends { id?: IdType }>(\n  id?: IdType,\n  defaultValue: T = {} as T,\n) =>\n  map(\n    (source: ODataResult<T>) =>\n      source?.data?.find((f) => f.id === id) || defaultValue,\n  );\n\nexport function parseDatesInCollection<T extends object>(\n  collection: Array<T>,\n  utcNullableProps: string[] = [],\n  dateNullableProps: string[] = [],\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    utcNullableProps?.forEach((t) => {\n      if (utcProps.indexOf(t) === -1) {\n        utcProps.push(t);\n      }\n    });\n\n    dateNullableProps?.forEach((t) => {\n      if (dateProps.indexOf(t) === -1) {\n        dateProps.push(t);\n      }\n    });\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    collection.forEach((val: any) => {\n      //NOSONAR\n      utcProps\n        .filter((p) => val[p])\n        .forEach((p) => (val[p] = new Date(val[p])));\n      dateProps\n        .filter((p) => val[p])\n        .forEach((p) => (val[p] = toLocalDate(val[p])));\n    });\n  }\n  return collection;\n}\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\nexport function getSubGridData<\n  PARENT_ENTITY extends { id?: IdType },\n  SUB_ENTITY,\n>(\n  id: IdType | undefined,\n  mappingFunction: (entity: PARENT_ENTITY) => SUB_ENTITY[],\n): (\n  source: Observable<ODataResult<PARENT_ENTITY>>,\n) => Observable<SUB_ENTITY[]> {\n  // tslint:disable-next-line: space-before-function-paren\n  return function (\n    source: Observable<ODataResult<PARENT_ENTITY>>,\n  ): Observable<SUB_ENTITY[]> {\n    return source.pipe(\n      map((t) => t.data.find((f) => f.id === id) as PARENT_ENTITY),\n      map((entity: PARENT_ENTITY) => mappingFunction(entity)),\n      filter((t) => !!t),\n    );\n  };\n}\n\nexport function getSubData<PARENT_ENTITY extends { id?: IdType }, SUB_ENTITY>(\n  id: IdType | undefined,\n  mappingFunction: (entity: PARENT_ENTITY) => SUB_ENTITY[],\n): (source: Observable<Array<PARENT_ENTITY>>) => Observable<SUB_ENTITY[]> {\n  // tslint:disable-next-line: space-before-function-paren\n  return function (\n    source: Observable<Array<PARENT_ENTITY>>,\n  ): Observable<SUB_ENTITY[]> {\n    return source.pipe(\n      map((t) => t.find((f) => f.id === id) as PARENT_ENTITY),\n      map((entity: PARENT_ENTITY) => mappingFunction(entity)),\n      filter((t) => !!t),\n    );\n  };\n}\n","import {\n  CompositeChildFilterDescriptor,\n  ChildFilterDescriptor,\n} from './odata-state';\nimport { ICompositeFilter } from 'imng-odata-client';\nexport function isCompositeChildFilterDescriptor(\n  source:\n    | CompositeChildFilterDescriptor\n    | ChildFilterDescriptor\n    | ICompositeFilter,\n): source is CompositeChildFilterDescriptor {\n  return !!(source as CompositeChildFilterDescriptor)?.filters;\n}\n","import {\n  CompositeFilterDescriptor,\n  FilterDescriptor,\n  SortDescriptor,\n} from '@progress/kendo-data-query';\nimport { BoundChildTableProperty } from './fetch-options';\nimport { isCompositeChildFilterDescriptor } from './isCompositeChildFilterDescriptor';\nimport {\n  ChildFilterDescriptor,\n  CompositeChildFilterDescriptor,\n  ODataState,\n} from './odata-state';\nimport {\n  ICompositeFilter,\n  IFilter,\n  isCompositeFilter,\n} from 'imng-odata-client';\n\nexport function translateChildFilterExpression(\n  odataState: ODataState,\n  childTableProperty: BoundChildTableProperty,\n): ODataState {\n  const childFieldString = `${childTableProperty.table}.${childTableProperty.field}`;\n  const filterPredicate = (filter: IFilter | SortDescriptor | unknown) => {\n    return (filter as IFilter).field === childFieldString;\n  };\n  const childTableFilter: CompositeFilterDescriptor =\n    odataState.filter?.filters.find(\n      (t: ICompositeFilter | IFilter) =>\n        isCompositeFilter(t) && t.filters?.some(filterPredicate),\n    ) as CompositeFilterDescriptor;\n  if (childTableFilter && odataState.filter) {\n    odataState.filter = {\n      ...odataState.filter,\n      filters: odataState.filter.filters.filter(\n        (t: IFilter | ICompositeFilter) =>\n          isCompositeFilter(t) && !t.filters?.some(filterPredicate),\n      ),\n    };\n    odataState.childFilters = {\n      logic: odataState.childFilters?.logic || 'and',\n      filters:\n        odataState.childFilters?.filters?.filter(\n          (\n            childFilterDescriptor:\n              | ChildFilterDescriptor\n              | CompositeChildFilterDescriptor,\n          ) =>\n            !isCompositeChildFilterDescriptor(childFilterDescriptor) &&\n            childFilterDescriptor.childTableNavigationProperty !==\n              childTableProperty.table &&\n            childFilterDescriptor.field !== childTableProperty.field,\n        ) || [],\n    };\n    odataState.childFilters.filters?.push({\n      logic: childTableFilter.logic,\n      filters: childTableFilter?.filters?.map(\n        (filter: FilterDescriptor | CompositeFilterDescriptor) => ({\n          ...(filter as FilterDescriptor),\n          linqOperation: childTableProperty.linqOperation || 'any',\n          childTableNavigationProperty: childTableProperty.table,\n          field: childTableProperty.field,\n        }),\n      ),\n    });\n  }\n  return odataState;\n}\n","import { isaNumber } from 'imng-nrsrx-client-utils';\nimport {\n  ChildExistsFilterDescriptor,\n  ChildFilterDescriptor,\n  CompositeChildFilterDescriptor,\n  ODataState,\n} from './odata-state';\nimport { isCompositeChildFilterDescriptor } from './isCompositeChildFilterDescriptor';\nimport { toODataString } from '@progress/kendo-data-query';\nexport const filterQueryStringParamLen = 8; //\"$filter=\"\nexport const stringFilterOperators: string[] = [\n  `startswith`,\n  `endswith`,\n  `contains`,\n  `doesnotcontain`,\n  `isempty`,\n  `isnotempty`,\n];\nexport function processChildFilterDescriptors(\n  state: ODataState,\n  queryString: string,\n): string {\n  if (!state.childFilters) {\n    return queryString;\n  } else {\n    return transformCompositeChildFilter(state.childFilters, queryString);\n  }\n}\nexport function transformChildExistsFilter(\n  childExistsFilter: ChildExistsFilterDescriptor,\n  logic: 'and' | 'or' | undefined,\n  queryString: string,\n): string {\n  const filterString = `$filter=${childExistsFilter.childTableNavigationProperty}/${childExistsFilter.linqOperation ?? 'any'}(${childExistsFilter.filter ?? ''})`;\n  if (queryString.match(/\\$filter=/)) {\n    queryString = queryString.replace(\n      /\\$filter=/,\n      `${filterString} ${logic || 'and'} `,\n    );\n  } else {\n    queryString += `&${filterString}`;\n  }\n  return queryString;\n}\nexport function transformCompositeChildFilter(\n  compositeChildFilter: CompositeChildFilterDescriptor,\n  queryString: string,\n): string {\n  let tempFilterString = '';\n  compositeChildFilter.filters\n    ?.filter((filter) => !isCompositeChildFilterDescriptor(filter))\n    .forEach(\n      (\n        filter: ChildFilterDescriptor | CompositeChildFilterDescriptor,\n        index: number,\n        array: (ChildFilterDescriptor | CompositeChildFilterDescriptor)[],\n      ) => {\n        tempFilterString += index === 0 && array.length > 1 ? '(' : '';\n        tempFilterString += transformChildFilter(\n          filter as ChildFilterDescriptor,\n        );\n        if (index === array.length - 1 && array.length > 1) {\n          tempFilterString += ')';\n        } else if (index !== array.length - 1) {\n          tempFilterString += ` ${compositeChildFilter.logic || 'and'} `;\n        }\n      },\n    );\n  if (tempFilterString.length > 0) {\n    if (queryString.match(/\\$filter=/)) {\n      queryString = queryString.replace(\n        /\\$filter=/,\n        `$filter=${tempFilterString} ${compositeChildFilter.externalLogic || 'and'} `,\n      );\n    } else {\n      queryString += `&$filter=${tempFilterString}`;\n    }\n  }\n  compositeChildFilter.filters\n    ?.filter((filter) => isCompositeChildFilterDescriptor(filter))\n    .forEach(\n      (filter: CompositeChildFilterDescriptor | ChildFilterDescriptor) => {\n        queryString = transformCompositeChildFilter(\n          filter as CompositeChildFilterDescriptor,\n          queryString,\n        );\n      },\n    );\n  compositeChildFilter.existsFilters?.forEach(\n    (filter: ChildExistsFilterDescriptor) => {\n      queryString = transformChildExistsFilter(\n        filter as ChildExistsFilterDescriptor,\n        compositeChildFilter.logic,\n        queryString,\n      );\n    },\n  );\n  return queryString;\n}\n\nexport function transformChildFilter(\n  childFilter: ChildFilterDescriptor,\n): string {\n  let filteringString: string;\n  if (\n    -1 < stringFilterOperators.findIndex((x) => x === childFilter.operator) &&\n    !isaNumber(childFilter.value)\n  ) {\n    filteringString = `${childFilter.operator}(o/${childFilter.field}, '${childFilter.value}')`;\n  } else {\n    filteringString = `o/${toODataString({\n      filter: { logic: 'and', filters: [childFilter] },\n    }).slice(filterQueryStringParamLen)}`;\n  }\n  return (\n    `${childFilter.childTableNavigationProperty}/${childFilter.linqOperation}` +\n    `(o: ${filteringString})`\n  );\n}\n","import { SortDescriptor } from '@progress/kendo-data-query';\nimport { BoundChildTableProperty } from './fetch-options';\nimport { Expander, isExpander, ODataState } from './odata-state';\nimport { distinct } from 'imng-nrsrx-client-utils';\n\nexport function translateChildSortingExpression(\n  odataState: ODataState,\n  childTableProperties: BoundChildTableProperty[] | undefined,\n): ODataState {\n  if (!childTableProperties || childTableProperties.length === 0) {\n    return odataState;\n  }\n  const childTableStrings: string[] = distinct(childTableProperties.map((x) => x.table));\n  const childTablePropertyStrings: string[] = childTableProperties.map((x) => `${x.table}.${x.field}`);\n  const filterPredicate = (x: SortDescriptor) => childTablePropertyStrings.indexOf(x.field) > -1;\n  const sortedColumns = odataState.sort\n    ?.filter(filterPredicate)\n    .map((m) => ({ ...m, childProperty: m.field.split('.') }));\n  if (sortedColumns && sortedColumns.length > 0) {\n    odataState.sort = odataState.sort?.filter((x) => !filterPredicate(x));\n\n    odataState.expanders = odataState.expanders?.map((m) => (isExpander(m) ? { ...m } : m));\n    const expanders = odataState.expanders\n      ?.filter((t: Expander) => childTableStrings.indexOf(t.table) > -1)\n      .map((t: Expander) => {\n        t.sort = (t.sort || []).filter(\n          (f) => !sortedColumns.find((s) => t.table === s.childProperty[0] && f.field === s.childProperty[1]),\n        );\n        return t;\n      });\n    sortedColumns.forEach((x) => {\n      const expander = expanders?.find((e) => e.table === x.childProperty[0]);\n      expander?.sort?.push({ field: x.childProperty[1], dir: x.dir });\n    });\n  }\n  return odataState;\n}\n","import { Injectable, inject } from '@angular/core';\nimport { State, toODataString } from '@progress/kendo-data-query';\nimport { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport {\n  Expander,\n  InFilter,\n  isComputation,\n  isExpander,\n  ODataState,\n} from './odata-state';\nimport { ODataResult } from './odata-result';\nimport { firstRecord, mapToExtDataResult } from './odata-rxjs-operators';\nimport { isaDate, isaNumber } from 'imng-nrsrx-client-utils';\nimport { FetchOptions } from './fetch-options';\nimport { translateChildFilterExpression } from './translate-child-filter-expression';\nimport { processChildFilterDescriptors } from './transform-child-filters';\nimport { translateChildSortingExpression } from './translate-child-sorting-expression';\nimport { ODataPayload } from './odata-payload';\nimport { processFilters, uuidRegex } from 'imng-odata-client';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ODataService {\n  private readonly http = inject(HttpClient);\n\n  public fetch<T extends object>(\n    odataEndpoint: string,\n    state: ODataState,\n    options: FetchOptions = {},\n  ): Observable<ODataResult<T>> {\n    let tempState = { ...state };\n    options.boundChildTableProperties?.forEach(\n      (prop) => (tempState = translateChildFilterExpression(tempState, prop)),\n    );\n    tempState = translateChildSortingExpression(\n      tempState,\n      options.boundChildTableProperties,\n    );\n    const countClause = tempState.count === false ? '' : '&$count=true';\n    const cacheBustClause =\n      options.bustCache === true\n        ? `&timestamp=${new Date().toISOString().replaceAll(/[-:.TZ]/g, '')}`\n        : '';\n    const queryStr = `${this.getODataString(\n      tempState,\n    )}${countClause}${cacheBustClause}`.replace(/^&/, '');\n    return this.http\n      .get<\n        ODataPayload<T> | T[]\n      >(`${odataEndpoint}?${queryStr}${this.getAdditionalParams(options)}`)\n      .pipe(\n        mapToExtDataResult<T>(\n          options.utcNullableProps || [],\n          options.dateNullableProps || [],\n        ),\n      );\n  }\n\n  public getAdditionalParams(options: FetchOptions): string {\n    if (options.additionalParams) {\n      const keys = Object.keys(options.additionalParams);\n      const values = Object.values(options.additionalParams);\n      const queryStringParams = keys.map(\n        (key, index) =>\n          `&${encodeURIComponent(key)}=${encodeURIComponent(values[index])}`,\n      );\n      return queryStringParams.join('');\n    }\n    return '';\n  }\n\n  public fetchByPrimaryKey<T extends object>(\n    odataEndpoint: string,\n    id: string,\n    state?: ODataState,\n  ): Observable<T> {\n    const request: ODataState = {\n      expanders: state?.expanders,\n      selectors: state?.selectors,\n      filter: {\n        logic: 'and',\n        filters: [{ operator: 'eq', field: 'id', value: id }],\n      },\n    };\n\n    const queryStr = this.getODataString(request).replace(/^&/, '');\n    return this.http\n      .get<ODataPayload<T> | T[]>(`${odataEndpoint}?${queryStr}`)\n      .pipe(mapToExtDataResult<T>(), firstRecord<T>());\n  }\n\n  public getODataString(state: ODataState): string {\n    const filter = state.filter;\n    state.filter = undefined;\n    let queryString = toODataString(state as State);\n    queryString = processFilters({ filter: filter }, queryString);\n    queryString = this.processExpanders(state, queryString);\n    queryString = this.processSelectors(state, queryString);\n    queryString = processChildFilterDescriptors(state, queryString);\n    queryString = this.processInFilters(state.inFilters, queryString, false);\n    queryString = this.processInFilters(state.notInFilters, queryString, true);\n    queryString = this.applyTransformations(state, queryString);\n    queryString = this.processComputations(state, queryString);\n    queryString = this.processGuids(queryString);\n    queryString = this.processDates(queryString);\n    return queryString;\n  }\n\n  public applyTransformations(state: ODataState, queryString: string): string {\n    if (state.transformations) {\n      queryString += `&$apply=${state.transformations}`;\n    }\n    return queryString;\n  }\n\n  public processDates(queryString: string): string {\n    const dateRegex =\n      /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(\n          date,\n          date.replaceAll(uuidRegex, ''),\n        )),\n    );\n    return queryString;\n  }\n\n  public 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\n  public processSelectors(state: ODataState, queryString: string): string {\n    if (state.selectors && state.selectors.length > 0) {\n      queryString += `&$select=${state.selectors.join()}`;\n    }\n    return queryString;\n  }\n\n  public processExpanders(state: ODataState, queryString: string): string {\n    if (state.expanders && state.expanders.length > 0) {\n      const expansionStrings = state.expanders.map((element) =>\n        this.getExpansionString(element),\n      );\n      queryString += `&$expand=${expansionStrings.join(',').replaceAll(';;', ';')}`;\n    }\n    return queryString;\n  }\n\n  public getExpansionString(element: string | 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      if (element.selectors && element.selectors.length > 0) {\n        result += `$select=${element.selectors.join()};`;\n      }\n      if (element.filter || element.sort) {\n        let expansionODataString = toODataString({ sort: element.sort });\n        expansionODataString = processFilters(\n          { filter: element.filter },\n          expansionODataString,\n        );\n        result += `${expansionODataString.replace('&', ';')};`;\n      }\n      if (element.expanders) {\n        const expanders = element.expanders.map((expander) => {\n          if (isExpander(expander)) {\n            return this.getExpansionString(expander);\n          }\n          return expander;\n        });\n        result += `$expand=${expanders.join(',')};`;\n      }\n      if (element.count) {\n        result += `${/[(;]$/.exec(result) ? '' : ';'}$count=true`;\n      }\n      result += ')';\n      result = result\n        .replace(/\\(\\)/, '')\n        .replace(/;\\)/, ')')\n        .replace('(;', '(');\n    }\n    return result;\n  }\n\n  public processInFilters(\n    inFilters: InFilter[] | undefined,\n    queryString: string,\n    isNotIn: boolean,\n  ): string {\n    if (!inFilters) {\n      return queryString;\n    }\n    inFilters.forEach((inFilter) => {\n      const deDupedVals = Array.from(\n        new Set(inFilter.values.filter((f) => !!f)),\n      );\n      const inVals = deDupedVals\n        .map((m) => {\n          if (isaNumber(m)) {\n            return `${m}`;\n          } else if (isaDate(m)) {\n            return `${m.toISOString()}`;\n          }\n          return `'${m}'`;\n        })\n        .join(',');\n      const inFilterString = `(${inFilter.field} in (${inVals})${\n        isNotIn ? ' eq false' : ''\n      })`;\n      if (!queryString || queryString.trim().length === 0) {\n        queryString = `$filter=${inFilterString}`;\n      } else if (new RegExp(/\\$filter=/).exec(queryString)) {\n        queryString = queryString.replace(\n          /\\$filter=/,\n          `$filter=${inFilterString} ${inFilter.logic ?? 'and'} `,\n        );\n      } else {\n        queryString = `${queryString}&$filter=${inFilterString}`;\n      }\n    });\n    return queryString;\n  }\n\n  public processComputations(state: ODataState, queryString: string): string {\n    if (state.compute) {\n      const computeStrings: string[] = state.compute\n        .filter((f) => !isComputation(f))\n        .map((f) => f.toString());\n      computeStrings.push(\n        ...state.compute\n          .filter(isComputation)\n          .map((f) => `${f.fieldA} ${f.operator} ${f.fieldB} as ${f.alias}`),\n      );\n      queryString =\n        `$compute=${computeStrings.join(',')}&${queryString}`.replace(\n          '&&',\n          '&',\n        );\n    }\n    return queryString;\n  }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ODataService } from './odata.service';\n\n@NgModule({\n  imports: [CommonModule],\n  providers: [ODataService],\n})\nexport class ImngKendoODataModule {\n  public static forRoot(): ModuleWithProviders<ImngKendoODataModule> {\n    return {\n      ngModule: ImngKendoODataModule,\n      providers: [ODataService],\n    };\n  }\n}\n","import {\n  CompositeFilterDescriptor,\n  FilterDescriptor,\n} from '@progress/kendo-data-query';\nimport { ChildFilterDescriptor } from './odata-state';\nimport { ICompositeFilter, IFilter } from 'imng-odata-client';\n\nexport function isFilterDescriptor(\n  source:\n    | CompositeFilterDescriptor\n    | FilterDescriptor\n    | ChildFilterDescriptor\n    | ICompositeFilter\n    | IFilter,\n): source is FilterDescriptor {\n  return !!(source as FilterDescriptor)?.field;\n}\n","import { ODataState } from './odata-state';\nimport {\n  ICompositeFilter,\n  IFilter,\n  isCompositeFilter,\n} from 'imng-odata-client';\n\nexport function findMatchingFilters(\n  odataState: ODataState,\n  filterField: string,\n): IFilter | undefined {\n  if (!odataState.filter) {\n    return;\n  }\n  return flattenCompositeFilters(odataState.filter).find(\n    (x) => x.field === filterField,\n  );\n}\n\nexport function flattenCompositeFilters(filters: ICompositeFilter): IFilter[] {\n  return filters.filters.flatMap((x) =>\n    isCompositeFilter(x) ? flattenCompositeFilters(x) : [x],\n  );\n}\n","import {\n  ICompositeFilter,\n  IFilter,\n  isCompositeFilter,\n} from 'imng-odata-client';\nimport { ODataState } from './odata-state';\n\nexport function removeMatchingFilters(\n  odataState: ODataState,\n  filterField: string,\n): ODataState {\n  return {\n    ...odataState,\n    filter: odataState.filter\n      ? {\n          ...odataState.filter,\n          filters: filterFilters(odataState.filter, filterField),\n        }\n      : { logic: 'and', filters: [] },\n  };\n}\n\nexport function filterFilters(\n  filters: (IFilter | ICompositeFilter)[] | ICompositeFilter,\n  filterField: string,\n): (ICompositeFilter | IFilter)[] {\n  return (\n    isCompositeFilter(filters as ICompositeFilter)\n      ? (filters as ICompositeFilter).filters\n      : (filters as (IFilter | ICompositeFilter)[])\n  ).filter((m) => {\n    if (isCompositeFilter(m)) {\n      m.filters = [...filterFilters(m.filters, filterField)];\n      return true;\n    } else {\n      return m.field !== filterField;\n    }\n  });\n}\n","import {\n  ICompositeFilter,\n  IFilter,\n  isCompositeFilter,\n  isFilter,\n} from 'imng-odata-client';\n\nexport function updateFilter(\n  compositefilter: ICompositeFilter,\n  newFilter: IFilter,\n): ICompositeFilter {\n  compositefilter.filters.forEach((subFilter) => {\n    if (isCompositeFilter(subFilter)) {\n      updateFilter(subFilter, newFilter);\n    } else if (isFilter(subFilter) && subFilter.field === newFilter.field) {\n      compositefilter = {\n        ...compositefilter,\n        filters: [\n          ...compositefilter.filters.filter(\n            (f) =>\n              isCompositeFilter(f) ||\n              (isFilter(f) && f.field !== newFilter.field),\n          ),\n          newFilter,\n        ],\n      };\n    }\n  });\n  return compositefilter;\n}\n","import { findMatchingFilters } from './find-filter';\nimport { ODataState } from './odata-state';\nimport { updateFilter } from './update-filter';\nimport { IFilter } from 'imng-odata-client';\n\nexport function applyFilter(\n  odataState: ODataState,\n  filter: IFilter,\n): ODataState {\n  odataState.filter ??= { logic: 'and', filters: [] };\n  const matchedFilter = findMatchingFilters(odataState, filter.field);\n  if (matchedFilter) {\n    updateFilter(odataState.filter, filter);\n  } else {\n    odataState.filter.filters.push({\n      logic: 'and',\n      filters: [filter],\n    });\n  }\n  return odataState;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}