imng-kendo-odata
Version:
This library was generated with [Nx](https://nx.dev).
1 lines • 52.2 kB
Source Map (JSON)
{"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 ? `×tamp=${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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"}