UNPKG

imng-odata-client

Version:

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

1 lines 43.6 kB
{"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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"}