angular-odata 0.95.0 → 0.99.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/esm2020/lib/resources/query/expressions/base.mjs +20 -0
  2. package/esm2020/lib/resources/query/expressions/compute.mjs +38 -0
  3. package/esm2020/lib/resources/query/expressions/expand.mjs +57 -0
  4. package/esm2020/lib/resources/query/expressions/filter.mjs +154 -0
  5. package/esm2020/lib/resources/query/expressions/index.mjs +7 -0
  6. package/esm2020/lib/resources/query/expressions/orderby.mjs +54 -0
  7. package/esm2020/lib/resources/query/expressions/search.mjs +113 -0
  8. package/esm2020/lib/resources/query/expressions/select.mjs +32 -0
  9. package/esm2020/lib/resources/query/expressions/syntax.mjs +371 -0
  10. package/esm2020/lib/resources/query/handlers.mjs +16 -14
  11. package/esm2020/lib/resources/query/options.mjs +2 -2
  12. package/esm2020/lib/resources/resource.mjs +2 -2
  13. package/esm2020/lib/resources/types/batch.mjs +31 -10
  14. package/fesm2015/angular-odata.mjs +359 -123
  15. package/fesm2015/angular-odata.mjs.map +1 -1
  16. package/fesm2020/angular-odata.mjs +359 -123
  17. package/fesm2020/angular-odata.mjs.map +1 -1
  18. package/lib/resources/query/expressions/base.d.ts +19 -0
  19. package/lib/resources/query/expressions/compute.d.ts +26 -0
  20. package/lib/resources/query/expressions/expand.d.ts +40 -0
  21. package/lib/resources/query/expressions/filter.d.ts +58 -0
  22. package/lib/resources/query/expressions/index.d.ts +6 -0
  23. package/lib/resources/query/expressions/orderby.d.ts +37 -0
  24. package/lib/resources/query/expressions/search.d.ts +47 -0
  25. package/lib/resources/query/expressions/select.d.ts +21 -0
  26. package/lib/resources/query/{syntax.d.ts → expressions/syntax.d.ts} +8 -6
  27. package/lib/resources/query/handlers.d.ts +24 -9
  28. package/lib/resources/types/batch.d.ts +9 -0
  29. package/package.json +1 -1
  30. package/esm2020/lib/resources/query/expressions.mjs +0 -207
  31. package/esm2020/lib/resources/query/syntax.mjs +0 -406
  32. package/lib/resources/query/expressions.d.ts +0 -63
@@ -1 +1 @@
1
- {"version":3,"file":"angular-odata.mjs","sources":["../../../projects/angular-odata/src/lib/types.ts","../../../projects/angular-odata/src/lib/constants.ts","../../../projects/angular-odata/src/lib/cache/cache.ts","../../../projects/angular-odata/src/lib/cache/memory.ts","../../../projects/angular-odata/src/lib/resources/query/builder.ts","../../../projects/angular-odata/src/lib/utils/dates.ts","../../../projects/angular-odata/src/lib/utils/durations.ts","../../../projects/angular-odata/src/lib/utils/enums.ts","../../../projects/angular-odata/src/lib/utils/types.ts","../../../projects/angular-odata/src/lib/utils/http.ts","../../../projects/angular-odata/src/lib/utils/objects.ts","../../../projects/angular-odata/src/lib/utils/odata.ts","../../../projects/angular-odata/src/lib/utils/strings.ts","../../../projects/angular-odata/src/lib/utils/urls.ts","../../../projects/angular-odata/src/lib/resources/query/syntax.ts","../../../projects/angular-odata/src/lib/resources/query/expressions.ts","../../../projects/angular-odata/src/lib/resources/query/handlers.ts","../../../projects/angular-odata/src/lib/resources/query/options.ts","../../../projects/angular-odata/src/lib/resources/path/handlers.ts","../../../projects/angular-odata/src/lib/resources/path/segments.ts","../../../projects/angular-odata/src/lib/resources/request.ts","../../../projects/angular-odata/src/lib/schema/annotation.ts","../../../projects/angular-odata/src/lib/schema/element.ts","../../../projects/angular-odata/src/lib/utils/arraybuffers.ts","../../../projects/angular-odata/src/lib/schema/parsers/edm.ts","../../../projects/angular-odata/src/lib/helper.ts","../../../projects/angular-odata/src/lib/options.ts","../../../projects/angular-odata/src/lib/schema/parsers/enum-type.ts","../../../projects/angular-odata/src/lib/schema/parsers/structured-type.ts","../../../projects/angular-odata/src/lib/schema/parsers/callable.ts","../../../projects/angular-odata/src/lib/schema/callable.ts","../../../projects/angular-odata/src/lib/schema/entity-set.ts","../../../projects/angular-odata/src/lib/schema/entity-container.ts","../../../projects/angular-odata/src/lib/schema/enum-type.ts","../../../projects/angular-odata/src/lib/schema/structured-type.ts","../../../projects/angular-odata/src/lib/schema/schema.ts","../../../projects/angular-odata/src/lib/resources/resource.ts","../../../projects/angular-odata/src/lib/resources/types/action.ts","../../../projects/angular-odata/src/lib/resources/responses/annotations.ts","../../../projects/angular-odata/src/lib/resources/responses/options.ts","../../../projects/angular-odata/src/lib/resources/responses/response.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-function-action.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-annotation.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-structured-type.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-enum-type.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-reference.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-structural-property.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-entity-container.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-entity-set.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-navigation-property-binding.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-schema.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-singleton.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-type-definition.ts","../../../projects/angular-odata/src/lib/resources/responses/metadata.ts","../../../projects/angular-odata/src/lib/resources/types/batch.ts","../../../projects/angular-odata/src/lib/resources/types/count.ts","../../../projects/angular-odata/src/lib/resources/types/function.ts","../../../projects/angular-odata/src/lib/resources/types/media.ts","../../../projects/angular-odata/src/lib/resources/types/value.ts","../../../projects/angular-odata/src/lib/resources/types/property.ts","../../../projects/angular-odata/src/lib/resources/types/reference.ts","../../../projects/angular-odata/src/lib/resources/types/navigation-property.ts","../../../projects/angular-odata/src/lib/resources/types/entity.ts","../../../projects/angular-odata/src/lib/resources/types/entity-set.ts","../../../projects/angular-odata/src/lib/resources/types/metadata.ts","../../../projects/angular-odata/src/lib/resources/types/singleton.ts","../../../projects/angular-odata/src/lib/cache/storage.ts","../../../projects/angular-odata/src/lib/models/options.ts","../../../projects/angular-odata/src/lib/models/collection.ts","../../../projects/angular-odata/src/lib/models/model.ts","../../../projects/angular-odata/src/lib/api.ts","../../../projects/angular-odata/src/lib/settings.ts","../../../projects/angular-odata/src/lib/client.ts","../../../projects/angular-odata/src/lib/tokens.ts","../../../projects/angular-odata/src/lib/services/base.ts","../../../projects/angular-odata/src/lib/services/entity.ts","../../../projects/angular-odata/src/lib/services/entity-set.ts","../../../projects/angular-odata/src/lib/services/singleton.ts","../../../projects/angular-odata/src/lib/services/factory.ts","../../../projects/angular-odata/src/lib/module.ts","../../../projects/angular-odata/src/public-api.ts","../../../projects/angular-odata/src/angular-odata.ts"],"sourcesContent":["import { ODataVersionHelper } from './helper';\nimport { Observable } from 'rxjs';\n\nexport type ODataVersion = '2.0' | '3.0' | '4.0';\nexport type FetchPolicy =\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\nexport type ODataMetadataType = 'minimal' | 'full' | 'none';\nexport type CacheCacheability = 'public' | 'private' | 'no-cache' | 'no-store';\n\nexport enum PathSegmentNames {\n batch = 'batch',\n metadata = 'metadata',\n entitySet = 'entitySet',\n singleton = 'singleton',\n type = 'type',\n property = 'property',\n navigationProperty = 'navigationProperty',\n reference = 'reference',\n value = 'value',\n count = 'count',\n function = 'function',\n action = 'action',\n}\n\nexport enum QueryOptionNames {\n select = 'select',\n expand = 'expand',\n compute = 'compute',\n filter = 'filter',\n search = 'search',\n transform = 'transform',\n orderBy = 'orderBy',\n top = 'top',\n skip = 'skip',\n skiptoken = 'skiptoken',\n format = 'format',\n count = 'count',\n}\n\nexport interface Options {\n version?: ODataVersion;\n stringAsEnum?: boolean;\n}\n\nexport interface ApiOptions extends Options {\n params?: { [param: string]: string | string[] };\n headers?: { [param: string]: string | string[] };\n withCredentials?: boolean;\n //Headers\n accept?: {\n exponentialDecimals?: boolean;\n metadata?: ODataMetadataType;\n ieee754Compatible?: boolean;\n streaming?: boolean;\n };\n etag?: {\n ifMatch?: boolean;\n ifNoneMatch?: boolean;\n };\n prefer?: {\n maxPageSize?: number;\n return?: 'representation' | 'minimal';\n continueOnError?: boolean;\n includeAnnotations?: string;\n };\n stripMetadata?: ODataMetadataType;\n fetchPolicy?: FetchPolicy;\n bodyQueryOptions?: QueryOptionNames[];\n //https://github.com/OData/WebApi/issues/1974\n //https://github.com/OData/WebApi/issues/1647\n deleteRefBy?: 'path' | 'id';\n}\n\nexport interface OptionsHelper extends Options {\n helper: ODataVersionHelper;\n exponentialDecimals?: boolean;\n metadata?: ODataMetadataType;\n ieee754Compatible?: boolean;\n streaming?: boolean;\n}\n\nexport interface ResponseOptions extends OptionsHelper {\n cacheability?: CacheCacheability;\n maxAge?: number;\n}\n\nexport interface StructuredTypeFieldOptions extends OptionsHelper {\n field: StructuredTypeFieldConfig;\n}\n\nexport interface Parser<T> {\n // Deserialize value/s from request body.\n deserialize(\n value: any,\n options?: OptionsHelper | StructuredTypeFieldOptions\n ): T;\n // Serialize value/s for request body.\n serialize(\n value: any,\n options?: OptionsHelper | StructuredTypeFieldOptions\n ): any;\n //Encode value/s for URL parameter or query-string.\n encode(value: any, options?: OptionsHelper | StructuredTypeFieldOptions): any;\n}\n\nexport const NONE_PARSER = {\n deserialize: (value: any) => value,\n serialize: (value: any) => value,\n encode: (value: any) => value,\n} as Parser<any>;\n\nexport interface Cache {\n put<T>(key: string, payload: T, ...opts: any[]): void;\n get<T>(key: string, ...opts: any[]): T | undefined;\n}\n\n//#region Configs\nexport type ApiConfig = {\n serviceRootUrl: string;\n name?: string;\n version?: ODataVersion;\n default?: boolean;\n creation?: Date;\n cache?: Cache;\n errorHandler?: (error: any, caught: Observable<any>) => Observable<never>;\n options?: ApiOptions;\n parsers?: { [type: string]: Parser<any> };\n schemas?: SchemaConfig[];\n};\nexport type AnnotationConfig = {\n term: string;\n string?: string;\n bool?: boolean;\n int?: number;\n permissions?: string[];\n properties?: string[];\n};\nexport type SchemaConfig = {\n namespace: string;\n alias?: string;\n annotations?: AnnotationConfig[];\n enums?: EnumTypeConfig<any>[];\n entities?: StructuredTypeConfig<any>[];\n callables?: CallableConfig[];\n containers?: EntityContainerConfig[];\n};\n\nexport type EntityContainerConfig = {\n name: string;\n annotations?: AnnotationConfig[];\n entitySets?: EntitySetConfig[];\n};\n\nexport type EnumTypeFieldConfig = {\n value: number;\n annotations?: AnnotationConfig[];\n};\n\nexport type EnumTypeConfig<T> = {\n name: string;\n flags?: boolean;\n annotations?: AnnotationConfig[];\n members: { [name: string]: number } | { [value: number]: string };\n fields: { [member: string]: EnumTypeFieldConfig };\n};\n\nexport type StructuredTypeFieldConfig = {\n type: string;\n default?: any;\n maxLength?: number;\n key?: boolean;\n collection?: boolean;\n nullable?: boolean;\n navigation?: boolean;\n precision?: number;\n annotations?: AnnotationConfig[];\n scale?: number;\n referentials?: { property: string; referencedProperty: string }[];\n referential?: string;\n referenced?: string;\n};\n\nexport type StructuredTypeConfig<T> = {\n name: string;\n base?: string;\n open?: boolean;\n model?: { new (...params: any[]): any };\n collection?: { new (...params: any[]): any };\n annotations?: AnnotationConfig[];\n keys?: { name: string; alias?: string }[];\n fields: { [P in keyof T]?: StructuredTypeFieldConfig };\n};\n\nexport type Parameter = {\n type: string;\n nullable?: boolean;\n collection?: boolean;\n};\n\nexport type CallableConfig = {\n name: string;\n entitySetPath?: string;\n bound?: boolean;\n composable?: boolean;\n parameters?: { [name: string]: Parameter };\n return?: { type: string; collection?: boolean };\n};\nexport type EntitySetConfig = {\n name: string;\n entityType: string;\n service: { new (...params: any[]): any };\n annotations?: AnnotationConfig[];\n};\n//#endregion\n","export const $ID = '$id';\nexport const ODATA_ID = '@odata.id';\n\n// SEGMENTS\nexport const $METADATA = '$metadata';\nexport const $BATCH = '$batch';\nexport const $REF = '$ref';\nexport const $VALUE = '$value';\nexport const $COUNT = '$count';\nexport const $QUERY = '$query';\nexport const $INLINECOUNT = '$inlinecount';\n\n// HTTP HEADERS\nexport const IF_MATCH_HEADER = 'If-Match';\nexport const IF_NONE_MATCH_HEADER = 'If-None-Match';\nexport const CONTENT_TYPE = 'Content-Type';\nexport const CACHE_CONTROL = 'Cache-Control';\nexport const HTTP11 = 'HTTP/1.1';\nexport const ACCEPT = 'Accept';\nexport const PREFER = 'Prefer';\nexport const ODATA_VERSION = 'OData-Version';\nexport const ODATA_VERSION_HEADERS = [\n ODATA_VERSION,\n ODATA_VERSION.toLowerCase(),\n 'dataserviceversion',\n];\nexport const ETAG_HEADER = 'ETag';\nexport const ETAG_HEADERS = [ETAG_HEADER, ETAG_HEADER.toLowerCase()];\nexport const LOCATION_HEADER = 'Location';\nexport const LOCATION_HEADERS = [\n LOCATION_HEADER,\n LOCATION_HEADER.toLowerCase(),\n];\nexport const ODATA_ENTITYID = 'OData-EntityId';\nexport const ODATA_ENTITYID_HEADERS = [\n ODATA_ENTITYID,\n ODATA_ENTITYID.toLowerCase(),\n];\nexport const PREFERENCE_APPLIED = 'Preference-Applied';\nexport const PREFERENCE_APPLIED_HEADERS = [\n PREFERENCE_APPLIED,\n PREFERENCE_APPLIED.toLowerCase(),\n];\nexport const RETRY_AFTER = 'Retry-After';\nexport const RETRY_AFTER_HEADERS = [RETRY_AFTER, RETRY_AFTER.toLowerCase()];\n\n// HTTP HEADER VALUES\nexport const APPLICATION_JSON = 'application/json';\nexport const APPLICATION_HTTP = 'application/http';\nexport const TEXT_PLAIN = 'text/plain';\nexport const MULTIPART_MIXED = 'multipart/mixed';\nexport const MULTIPART_MIXED_BOUNDARY = 'multipart/mixed;boundary=';\nexport const CONTENT_TRANSFER_ENCODING = 'Content-Transfer-Encoding';\nexport const CONTENT_ID = 'Content-ID';\nexport const MAX_AGE = 'max-age';\n\n// VERSIONS\nexport const VERSION_4_0 = '4.0';\nexport const VERSION_3_0 = '3.0';\nexport const VERSION_2_0 = '2.0';\nexport const DEFAULT_VERSION = VERSION_4_0;\n\nexport const BINARY = 'binary';\nexport const BOUNDARY_PREFIX_SUFFIX = '--';\nexport const BATCH_PREFIX = 'batch_';\nexport const CHANGESET_PREFIX = 'changeset_';\nexport const DEFAULT_STRIP_METADATA = 'full';\nexport const DEFAULT_FETCH_POLICY = 'network-only';\nexport const DEFAULT_TIMEOUT = 60; // Time in seconds\nexport const CALLABLE_BINDING_PARAMETER = 'bindingParameter';\nexport const XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n\n// URL PARTS\nexport const QUERY_SEPARATOR = '?';\nexport const PARAM_SEPARATOR = '&';\nexport const VALUE_SEPARATOR = '=';\nexport const PATH_SEPARATOR = '/';\nexport const ODATA_PARAM_PREFIX = '$';\nexport const ODATA_ALIAS_PREFIX = '@';\n\nexport const NEWLINE = '\\r\\n';\nexport const NEWLINE_REGEXP = /\\r?\\n/;\nexport const CACHE_KEY_SEPARATOR = ':';\n\n// Models\nexport const CID_FIELD_NAME = '_cid';\n\n// Standard vocabularies for annotating OData services\n// http://docs.oasis-open.org/odata/odata-vocabularies/v4.0/csprd01/odata-vocabularies-v4.0-csprd01.html\n\nexport const COMPUTED = /.*Computed$/;\nexport const OPTIMISTIC_CONCURRENCY = /.*OptimisticConcurrency$/;\nexport const DESCRIPTION = /.*Description$/;\nexport const LONG_DESCRIPTION = /.*LongDescription$/;\n","import { Observable, of, throwError } from 'rxjs';\nimport { startWith, tap } from 'rxjs/operators';\nimport { CACHE_KEY_SEPARATOR, DEFAULT_TIMEOUT } from '../constants';\nimport { ODataBatchResource, ODataRequest, ODataResponse } from '../resources';\nimport { Cache, PathSegmentNames } from '../types';\n\nexport interface ODataCacheEntry<T> {\n payload: T;\n lastRead: number;\n timeout: number;\n tags: string[];\n}\n\nexport abstract class ODataCache implements Cache {\n timeout: number;\n entries: Map<string, ODataCacheEntry<any>>;\n\n constructor({ timeout = DEFAULT_TIMEOUT }: { timeout?: number }) {\n this.timeout = timeout;\n this.entries = new Map<string, ODataCacheEntry<any>>();\n }\n\n abstract getResponse(req: ODataRequest<any>): ODataResponse<any> | undefined;\n abstract putResponse(req: ODataRequest<any>, res: ODataResponse<any>): void;\n\n scope(req: ODataRequest<any>): string[] {\n const segments = req.resource.cloneSegments();\n return segments.segments({ key: true }).reduce(\n (acc, s) => {\n if (s.name === PathSegmentNames.entitySet)\n acc = [...acc, s.path() as string];\n return acc;\n },\n ['request']\n );\n }\n\n tags(req: ODataRequest<any>, res: ODataResponse<any>): string[] {\n const tags = [];\n const context = res.context;\n if (context.entitySet) {\n tags.push(\n context.key ? `${context.entitySet}(${context.key})` : context.entitySet\n );\n }\n if (context.type) tags.push(context.type);\n return tags;\n }\n\n buildEntry<T>(\n payload: T,\n { timeout, tags }: { timeout?: number; tags?: string[] }\n ): ODataCacheEntry<T> {\n return {\n payload,\n lastRead: Date.now(),\n timeout: timeout || this.timeout,\n tags: tags || [],\n };\n }\n\n buildKey(names: string[]): string {\n return names.join(CACHE_KEY_SEPARATOR);\n }\n\n put<T>(\n name: string,\n payload: T,\n {\n timeout,\n scope,\n tags,\n }: { timeout?: number; scope?: string[]; tags?: string[] } = {}\n ) {\n const entry = this.buildEntry<T>(payload, { timeout, tags });\n const key = this.buildKey([...(scope || []), name]);\n this.entries.set(key, entry);\n this.forget();\n }\n\n get<T>(name: string, { scope }: { scope?: string[] } = {}): T {\n const key = this.buildKey([...(scope || []), name]);\n const entry = this.entries.get(key);\n return entry !== undefined && !this.isExpired(entry)\n ? entry.payload\n : undefined;\n }\n\n forget({\n name,\n scope = [],\n tags = [],\n }: { name?: string; scope?: string[]; tags?: string[] } = {}) {\n // Remove expired cache entries\n if (name !== undefined) scope.push(name);\n const key = scope.length > 0 ? this.buildKey(scope) : undefined;\n this.entries.forEach((entry, k) => {\n if (\n this.isExpired(entry) || // Expired\n (key !== undefined && k.startsWith(key)) || // Key\n (tags.length > 0 && tags.some((t) => entry.tags.indexOf(t) !== -1)) // Tags\n ) {\n this.entries.delete(k);\n }\n });\n }\n\n flush() {\n // Remove all cache entries\n this.entries = new Map<string, ODataCacheEntry<any>>();\n }\n\n isExpired(entry: ODataCacheEntry<any>) {\n return entry.lastRead < Date.now() - (entry.timeout || this.timeout) * 1000;\n }\n\n handleRequest(\n req: ODataRequest<any>,\n res$: Observable<ODataResponse<any>>\n ): Observable<ODataResponse<any>> {\n return req.isFetch()\n ? this.handleFetch(req, res$)\n : req.isMutate()\n ? this.handleMutate(req, res$)\n : res$;\n }\n\n private handleFetch(\n req: ODataRequest<any>,\n res$: Observable<ODataResponse<any>>\n ): Observable<ODataResponse<any>> {\n const policy = req.fetchPolicy;\n const cached = this.getResponse(req);\n if (policy === 'no-cache') {\n return res$;\n }\n if (policy === 'cache-only') {\n if (cached) {\n return of(cached);\n } else {\n return throwError('No Cached');\n }\n }\n if (\n policy === 'cache-first' ||\n policy === 'cache-and-network' ||\n policy === 'network-only'\n ) {\n res$ = res$.pipe(\n tap((res: ODataResponse<any>) => {\n if (res.options.cacheability !== 'no-store')\n this.putResponse(req, res);\n })\n );\n }\n return cached !== undefined && policy !== 'network-only'\n ? policy === 'cache-and-network'\n ? res$.pipe(startWith(cached))\n : of(cached)\n : res$;\n }\n\n private handleMutate(\n req: ODataRequest<any>,\n res$: Observable<ODataResponse<any>>\n ): Observable<ODataResponse<any>> {\n const requests = req.isBatch()\n ? (req.resource as ODataBatchResource)\n .requests()\n .filter((r) => r.isMutate())\n : [req];\n for (var r of requests) {\n const scope = this.scope(r);\n this.forget({ scope });\n }\n return res$;\n }\n}\n","import type { ODataRequest, ODataResponse } from '../resources';\nimport { ODataCache } from './cache';\n\nexport class ODataInMemoryCache extends ODataCache {\n constructor({ timeout }: { timeout?: number } = {}) {\n super({ timeout });\n }\n\n putResponse(req: ODataRequest<any>, res: ODataResponse<any>) {\n var scope = this.scope(req);\n var tags = this.tags(req, res);\n this.put(req.pathWithParams, res, {\n timeout: res.options.maxAge,\n scope,\n tags,\n });\n }\n\n getResponse(req: ODataRequest<any>): ODataResponse<any> | undefined {\n var scope = this.scope(req);\n return this.get(req.pathWithParams, { scope });\n }\n}\n","const COMPARISON_OPERATORS = ['eq', 'ne', 'gt', 'ge', 'lt', 'le'];\nconst LOGICAL_OPERATORS = ['and', 'or', 'not'];\nconst COLLECTION_OPERATORS = ['any', 'all'];\nconst BOOLEAN_FUNCTIONS = ['startswith', 'endswith', 'contains'];\nconst SUPPORTED_EXPAND_PROPERTIES = [\n 'expand',\n 'levels',\n 'select',\n 'top',\n 'count',\n 'orderby',\n 'filter',\n];\n\nconst FUNCTION_REGEX = /\\((.*)\\)/;\nconst INDEXOF_REGEX = /(?!indexof)\\((\\w+)\\)/;\n\nexport type Unpacked<T> = T extends (infer U)[] ? U : T;\nexport type Select<T> = SelectType<T> | SelectType<T>[];\nexport type SelectType<T> = string | keyof T;\nexport type Filter<T> = FilterType | FilterType[];\nexport type FilterType = string | { [name: string]: any };\n\nexport enum StandardAggregateMethods {\n sum = 'sum',\n min = 'min',\n max = 'max',\n average = 'average',\n countdistinct = 'countdistinct',\n}\nexport type Aggregate =\n | string\n | { [propertyName: string]: { with: StandardAggregateMethods; as: string } };\n\n// OrderBy\n\nexport type OrderBy<T> = OrderByType<T> | OrderByType<T>[];\nexport type OrderByType<T> = string | OrderByObject<T>;\nexport type OrderByObject<T> = keyof T | [keyof T | string, 'asc' | 'desc'];\n//TODO: support angular 12 recursive type:\n/*\nexport type OrderByOptions<T> = keyof T | [ keyof T | string, 'asc' | 'desc' ];\nexport type NestedOrderBy<T> = { [P in keyof T]?: T[P] extends Array<infer E> ? OrderBy<E> : OrderBy<T[P]> }\nexport type OrderBy<T> = string | OrderByOptions<T> | Array<OrderByOptions<T>> | NestedOrderBy<T>;\n*/\n\n// Expand\nexport type Expand<T> = ExpandType<T> | ExpandType<T>[];\nexport type ExpandType<T> = string | ExpandObject<T>;\nexport type ExpandObject<T> = keyof T | NestedExpandOptions<T>;\nexport type NestedExpandOptions<T> = {\n [P in keyof T]?: ExpandOptions<Unpacked<T[P]>>;\n};\nexport type ExpandOptions<T> = {\n select?: Select<T>;\n filter?: Filter<T>;\n orderBy?: OrderBy<T>;\n top?: number;\n levels?: number | 'max';\n count?: boolean | Filter<T>;\n expand?: Expand<T>;\n};\n\nexport type Transform<T> = {\n aggregate?: Aggregate | Array<Aggregate>;\n filter?: Filter<T>;\n groupBy?: GroupBy<T>;\n};\nexport type GroupBy<T> = {\n properties: Array<keyof T>;\n transform?: Transform<T>;\n};\n\nexport enum QueryCustomTypes {\n Raw,\n Alias,\n Duration,\n Binary,\n}\n\nexport type QueryCustomType = {\n type: QueryCustomTypes;\n value: any;\n name?: string;\n};\nexport type Value = string | Date | number | boolean | QueryCustomType;\n\n//https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_QueryOptions\nexport const raw = (value: string): QueryCustomType => ({\n type: QueryCustomTypes.Raw,\n value,\n});\nexport const alias = (value: any, name?: string): QueryCustomType => ({\n type: QueryCustomTypes.Alias,\n value,\n name,\n});\nexport const duration = (value: string): QueryCustomType => ({\n type: QueryCustomTypes.Duration,\n value,\n});\nexport const binary = (value: string): QueryCustomType => ({\n type: QueryCustomTypes.Binary,\n value,\n});\nexport const isQueryCustomType = (value: any) =>\n typeof value === 'object' &&\n 'type' in value &&\n value.type in QueryCustomTypes;\nexport type QueryOptions<T> = ExpandOptions<T> & {\n search: string;\n transform: { [name: string]: any } | { [name: string]: any }[];\n skip: number;\n skiptoken: string;\n key: string | number | { [name: string]: any };\n count: boolean | Filter<T>;\n action: string;\n func: string | { [functionName: string]: { [parameterName: string]: any } };\n format: string;\n aliases: QueryCustomType[];\n escape: boolean;\n};\n\nexport const ITEM_ROOT = '';\n\nexport default function <T>({\n select,\n search,\n skiptoken,\n format,\n top,\n skip,\n filter,\n transform,\n orderBy,\n key,\n count,\n expand,\n action,\n func,\n aliases,\n escape,\n}: Partial<QueryOptions<T>> = {}) {\n const [path, params] = buildPathAndQuery({\n select,\n search,\n skiptoken,\n format,\n top,\n skip,\n filter,\n transform,\n orderBy,\n key,\n count,\n expand,\n action,\n func,\n aliases,\n escape,\n });\n\n return buildUrl(path, params);\n}\n\nexport function buildPathAndQuery<T>({\n select,\n search,\n skiptoken,\n format,\n top,\n skip,\n filter,\n transform,\n orderBy,\n key,\n count,\n expand,\n action,\n func,\n aliases,\n escape,\n}: Partial<QueryOptions<T>> = {}): [string, { [name: string]: any }] {\n let path: string = '';\n aliases = aliases || [];\n\n const query: any = {};\n\n // key is not (null, undefined)\n if (key != undefined) {\n path += `(${normalizeValue(key as Value, { aliases, escape })})`;\n }\n\n if (select) {\n query.$select = Array.isArray(select) ? select.join(',') : select;\n }\n\n if (search) {\n query.$search = search;\n }\n\n if (skiptoken) {\n query.$skiptoken = skiptoken;\n }\n\n if (format) {\n query.$format = format;\n }\n\n if (filter || typeof count === 'object') {\n query.$filter = buildFilter(typeof count === 'object' ? count : filter, {\n aliases,\n escape,\n });\n }\n\n if (transform) {\n query.$apply = buildTransforms(transform, { aliases, escape });\n }\n\n if (expand) {\n query.$expand = buildExpand(expand, { aliases, escape });\n }\n\n if (orderBy) {\n query.$orderby = buildOrderBy(orderBy);\n }\n\n if (count) {\n if (typeof count === 'boolean') {\n query.$count = true;\n } else {\n path += '/$count';\n }\n }\n\n if (typeof top === 'number') {\n query.$top = top;\n }\n\n if (typeof skip === 'number') {\n query.$skip = skip;\n }\n\n if (action) {\n path += `/${action}`;\n }\n\n if (func) {\n if (typeof func === 'string') {\n path += `/${func}`;\n } else if (typeof func === 'object') {\n const [funcName] = Object.keys(func);\n const funcArgs = normalizeValue(func[funcName] as Value, {\n aliases,\n escape,\n });\n\n path += `/${funcName}`;\n if (funcArgs !== '') {\n path += `(${funcArgs})`;\n }\n }\n }\n\n if (aliases.length > 0) {\n Object.assign(\n query,\n aliases.reduce(\n (acc, alias) =>\n Object.assign(acc, {\n [`@${alias.name}`]: normalizeValue(alias.value, {\n escape,\n }),\n }),\n {}\n )\n );\n }\n\n // Filter empty values\n const params = Object.entries(query)\n .filter(([, value]) => value !== undefined && value !== '')\n .reduce((acc, [key, value]) => Object.assign(acc, { [key]: value }), {});\n\n return [path, params];\n}\n\nfunction renderPrimitiveValue(\n key: string,\n val: any,\n {\n aliases,\n escape,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n }\n) {\n return `${key} eq ${normalizeValue(val, { aliases, escape })}`;\n}\n\nfunction buildFilter(\n filters: Filter<any> = {},\n {\n aliases,\n propPrefix,\n escape,\n }: { aliases?: QueryCustomType[]; propPrefix?: string; escape?: boolean }\n): string {\n return (\n (Array.isArray(filters) ? filters : [filters]).reduce(\n (acc: string[], filter) => {\n if (filter) {\n const builtFilter = buildFilterCore(filter, {\n aliases,\n propPrefix,\n escape,\n });\n if (builtFilter) {\n acc.push(builtFilter);\n }\n }\n return acc;\n },\n []\n ) as string[]\n ).join(' and ');\n\n function buildFilterCore(\n filter: Filter<any> = {},\n {\n aliases,\n propPrefix,\n escape,\n }: { aliases?: QueryCustomType[]; propPrefix?: string; escape?: boolean }\n ) {\n let filterExpr = '';\n if (typeof filter === 'string') {\n // Use raw filter string\n filterExpr = filter;\n } else if (filter && typeof filter === 'object') {\n const filtersArray = Object.keys(filter).reduce(\n (result: any[], filterKey) => {\n const value = (filter as any)[filterKey];\n let propName = '';\n if (propPrefix) {\n if (filterKey === ITEM_ROOT) {\n propName = propPrefix;\n } else if (INDEXOF_REGEX.test(filterKey)) {\n propName = filterKey.replace(INDEXOF_REGEX, (_, $1) =>\n $1.trim() === ITEM_ROOT\n ? `(${propPrefix})`\n : `(${propPrefix}/${$1.trim()})`\n );\n } else if (FUNCTION_REGEX.test(filterKey)) {\n propName = filterKey.replace(FUNCTION_REGEX, (_, $1) =>\n $1.trim() === ITEM_ROOT\n ? `(${propPrefix})`\n : `(${propPrefix}/${$1.trim()})`\n );\n } else {\n propName = `${propPrefix}/${filterKey}`;\n }\n } else {\n propName = filterKey;\n }\n\n if (filterKey === ITEM_ROOT && Array.isArray(value)) {\n return result.concat(\n value.map((arrayValue: any) =>\n renderPrimitiveValue(propName, arrayValue, { escape, aliases })\n )\n );\n }\n\n if (\n ['number', 'string', 'boolean'].indexOf(typeof value) !== -1 ||\n value instanceof Date ||\n value === null\n ) {\n // Simple key/value handled as equals operator\n result.push(\n renderPrimitiveValue(propName, value, { aliases, escape })\n );\n } else if (Array.isArray(value)) {\n const op = filterKey;\n const builtFilters = value\n .map((v) => buildFilter(v, { aliases, propPrefix, escape }))\n .filter((f) => f)\n .map((f) =>\n LOGICAL_OPERATORS.indexOf(op) !== -1 ? `(${f})` : f\n );\n if (builtFilters.length) {\n if (LOGICAL_OPERATORS.indexOf(op) !== -1) {\n if (builtFilters.length) {\n if (op === 'not') {\n result.push(parseNot(builtFilters as string[]));\n } else {\n result.push(`(${builtFilters.join(` ${op} `)})`);\n }\n }\n } else {\n result.push(builtFilters.join(` ${op} `));\n }\n }\n } else if (LOGICAL_OPERATORS.indexOf(propName) !== -1) {\n const op = propName;\n const builtFilters = Object.keys(value).map((valueKey) =>\n buildFilterCore(\n { [valueKey]: value[valueKey] },\n { aliases, escape }\n )\n );\n if (builtFilters.length) {\n if (op === 'not') {\n result.push(parseNot(builtFilters as string[]));\n } else {\n result.push(`${builtFilters.join(` ${op} `)}`);\n }\n }\n } else if (typeof value === 'object') {\n if ('type' in value) {\n result.push(\n renderPrimitiveValue(propName, value, { aliases, escape })\n );\n } else {\n const operators = Object.keys(value);\n operators.forEach((op) => {\n if (COMPARISON_OPERATORS.indexOf(op) !== -1) {\n result.push(\n `${propName} ${op} ${normalizeValue(value[op], {\n aliases,\n escape,\n })}`\n );\n } else if (LOGICAL_OPERATORS.indexOf(op) !== -1) {\n if (Array.isArray(value[op])) {\n result.push(\n value[op]\n .map(\n (v: any) =>\n '(' +\n buildFilterCore(v, {\n aliases,\n propPrefix: propName,\n escape,\n }) +\n ')'\n )\n .join(` ${op} `)\n );\n } else {\n result.push(\n '(' +\n buildFilterCore(value[op], {\n aliases,\n propPrefix: propName,\n escape,\n }) +\n ')'\n );\n }\n } else if (COLLECTION_OPERATORS.indexOf(op) !== -1) {\n const collectionClause = buildCollectionClause(\n filterKey.toLowerCase(),\n value[op],\n op,\n propName\n );\n if (collectionClause) {\n result.push(collectionClause);\n }\n } else if (op === 'has') {\n result.push(\n `${propName} ${op} ${normalizeValue(value[op], {\n aliases,\n escape,\n })}`\n );\n } else if (op === 'in') {\n const resultingValues = Array.isArray(value[op])\n ? value[op]\n : value[op].value.map((typedValue: any) => ({\n type: value[op].type,\n value: typedValue,\n }));\n\n result.push(\n propName +\n ' in (' +\n resultingValues\n .map((v: any) => normalizeValue(v, { aliases, escape }))\n .join(',') +\n ')'\n );\n } else if (BOOLEAN_FUNCTIONS.indexOf(op) !== -1) {\n // Simple boolean functions (startswith, endswith, contains)\n result.push(\n `${op}(${propName},${normalizeValue(value[op], {\n aliases,\n escape,\n })})`\n );\n } else {\n // Nested property\n const filter = buildFilterCore(value, {\n aliases,\n propPrefix: propName,\n escape,\n });\n if (filter) {\n result.push(filter);\n }\n }\n });\n }\n } else if (value === undefined) {\n // Ignore/omit filter if value is `undefined`\n } else {\n throw new Error(`Unexpected value type: ${value}`);\n }\n\n return result;\n },\n []\n );\n\n filterExpr = filtersArray.join(' and ');\n } /* else {\n throw new Error(`Unexpected filters type: ${filter}`);\n } */\n return filterExpr;\n }\n\n function buildCollectionClause(\n lambdaParameter: string,\n value: any,\n op: string,\n propName: string\n ) {\n let clause = '';\n\n if (typeof value === 'string' || value instanceof String) {\n clause = getStringCollectionClause(lambdaParameter, value, op, propName);\n } else if (value) {\n // normalize {any:[{prop1: 1}, {prop2: 1}]} --> {any:{prop1: 1, prop2: 1}}; same for 'all',\n // simple values collection: {any:[{'': 'simpleVal1'}, {'': 'simpleVal2'}]} --> {any:{'': ['simpleVal1', 'simpleVal2']}}; same for 'all',\n const filterValue = Array.isArray(value)\n ? value.reduce((acc, item) => {\n if (item.hasOwnProperty(ITEM_ROOT)) {\n if (!acc.hasOwnProperty(ITEM_ROOT)) {\n acc[ITEM_ROOT] = [];\n }\n acc[ITEM_ROOT].push(item[ITEM_ROOT]);\n return acc;\n }\n return { ...acc, ...item };\n }, {})\n : value;\n\n const filter = buildFilterCore(filterValue, {\n aliases,\n propPrefix: lambdaParameter,\n escape,\n });\n clause = `${propName}/${op}(${\n filter ? `${lambdaParameter}:${filter}` : ''\n })`;\n }\n return clause;\n }\n}\n\nfunction getStringCollectionClause(\n lambdaParameter: string,\n value: any,\n collectionOperator: string,\n propName: string\n) {\n let clause = '';\n const conditionOperator = collectionOperator == 'all' ? 'ne' : 'eq';\n clause = `${propName}/${collectionOperator}(${lambdaParameter}: ${lambdaParameter} ${conditionOperator} '${value}')`;\n\n return clause;\n}\n\nfunction escapeIllegalChars(string: string) {\n string = string.replace(/%/g, '%25');\n string = string.replace(/\\+/g, '%2B');\n string = string.replace(/\\//g, '%2F');\n string = string.replace(/\\?/g, '%3F');\n string = string.replace(/#/g, '%23');\n string = string.replace(/&/g, '%26');\n string = string.replace(/'/g, \"''\");\n return string;\n}\n\nexport function normalizeValue(\n value: Value,\n { aliases, escape = false }: { aliases?: QueryCustomType[]; escape?: boolean }\n): any {\n if (typeof value === 'string') {\n return escape ? `'${escapeIllegalChars(value)}'` : `'${value}'`;\n } else if (value instanceof Date) {\n return value.toISOString();\n } else if (typeof value === 'number') {\n return value;\n } else if (Array.isArray(value)) {\n return `[${value\n .map((d) => normalizeValue(d, { aliases, escape }))\n .join(',')}]`;\n } else if (value === null) {\n return value;\n } else if (typeof value === 'object') {\n switch (value.type) {\n case QueryCustomTypes.Raw:\n return value.value;\n case QueryCustomTypes.Duration:\n return `duration'${value.value}'`;\n case QueryCustomTypes.Binary:\n return `binary'${value.value}'`;\n case QueryCustomTypes.Alias:\n // Store\n if (Array.isArray(aliases)) {\n if (value.name === undefined) {\n value.name = `a${aliases.length + 1}`;\n }\n aliases.push(value);\n }\n return `@${value.name}`;\n default:\n return Object.entries(value)\n .filter(([, v]) => v !== undefined)\n .map(\n ([k, v]) =>\n `${k}=${normalizeValue(v as Value, { aliases, escape })}`\n )\n .join(',');\n }\n }\n return value;\n}\n\nfunction buildExpand<T>(\n expands: Expand<T>,\n { aliases, escape = false }: { aliases?: QueryCustomType[]; escape?: boolean }\n): string {\n if (typeof expands === 'number') {\n return expands as any;\n } else if (typeof expands === 'string') {\n if (expands.indexOf('/') === -1) {\n return expands;\n }\n\n // Change `Foo/Bar/Baz` to `Foo($expand=Bar($expand=Baz))`\n return expands\n .split('/')\n .reverse()\n .reduce((results, item, index, arr) => {\n if (index === 0) {\n // Inner-most item\n return `$expand=${item}`;\n } else if (index === arr.length - 1) {\n // Outer-most item, don't add `$expand=` prefix (added above)\n return `${item}(${results})`;\n } else {\n // Other items\n return `$expand=${item}(${results})`;\n }\n }, '');\n } else if (Array.isArray(expands)) {\n return `${(expands as Array<NestedExpandOptions<any>>)\n .map((e) => buildExpand(e, { aliases, escape }))\n .join(',')}`;\n } else if (typeof expands === 'object') {\n const expandKeys = Object.keys(expands);\n\n if (\n expandKeys.some(\n (key) => SUPPORTED_EXPAND_PROPERTIES.indexOf(key.toLowerCase()) !== -1\n )\n ) {\n return expandKeys\n .map((key) => {\n let value;\n switch (key) {\n case 'filter':\n value = buildFilter((expands as NestedExpandOptions<any>)[key], {\n aliases,\n escape,\n });\n break;\n case 'orderBy':\n value = buildOrderBy(\n (expands as NestedExpandOptions<any>)[key] as OrderBy<T>\n );\n break;\n case 'levels':\n case 'count':\n case 'top':\n value = `${(expands as NestedExpandOptions<any>)[key]}`;\n break;\n default:\n value = buildExpand(\n (expands as NestedExpandOptions<any>)[key] as Expand<T>,\n { aliases, escape }\n );\n }\n return `$${key.toLowerCase()}=${value}`;\n })\n .join(';');\n } else {\n return expandKeys\n .map((key) => {\n const builtExpand = buildExpand(\n (expands as NestedExpandOptions<any>)[\n key\n ] as NestedExpandOptions<any>,\n { aliases, escape }\n );\n return builtExpand ? `${key}(${builtExpand})` : key;\n })\n .join(',');\n }\n }\n return '';\n}\n\nfunction buildTransforms<T>(\n transforms: Transform<T> | Transform<T>[],\n { aliases, escape = false }: { aliases?: QueryCustomType[]; escape?: boolean }\n) {\n // Wrap single object an array for simplified processing\n const transformsArray = Array.isArray(transforms) ? transforms : [transforms];\n\n const transformsResult = transformsArray.reduce(\n (result: string[], transform) => {\n const { aggregate, filter, groupBy, ...rest } = transform;\n\n // TODO: support as many of the following:\n // topcount, topsum, toppercent,\n // bottomsum, bottomcount, bottompercent,\n // identity, concat, expand, search, compute, isdefined\n const unsupportedKeys = Object.keys(rest);\n if (unsupportedKeys.length) {\n throw new Error(`Unsupported transform(s): ${unsupportedKeys}`);\n }\n\n if (aggregate) {\n result.push(`aggregate(${buildAggregate(aggregate)})`);\n }\n if (filter) {\n const builtFilter = buildFilter(filter, { aliases, escape });\n if (builtFilter) {\n result.push(\n `filter(${buildFilter(builtFilter, { aliases, escape })})`\n );\n }\n }\n if (groupBy) {\n result.push(`groupby(${buildGroupBy(groupBy, { aliases, escape })})`);\n }\n\n return result;\n },\n []\n );\n\n return transformsResult.join('/') || undefined;\n}\n\nfunction buildAggregate(aggregate: Aggregate | Aggregate[]) {\n // Wrap single object in an array for simplified processing\n const aggregateArray = Array.isArray(aggregate) ? aggregate : [aggregate];\n\n return aggregateArray\n .map((aggregateItem) => {\n return typeof aggregateItem === 'string'\n ? aggregateItem\n : Object.keys(aggregateItem).map((aggregateKey) => {\n const aggregateValue = aggregateItem[aggregateKey];\n\n // TODO: Are these always required? Can/should we default them if so?\n if (!aggregateValue.with) {\n throw new Error(`'with' property required for '${aggregateKey}'`);\n }\n if (!aggregateValue.as) {\n throw new Error(`'as' property required for '${aggregateKey}'`);\n }\n\n return `${aggregateKey} with ${aggregateValue.with} as ${aggregateValue.as}`;\n });\n })\n .join(',');\n}\n\nfunction buildGroupBy<T>(\n groupBy: GroupBy<T>,\n { aliases, escape = false }: { aliases?: QueryCustomType[]; escape?: boolean }\n) {\n if (!groupBy.properties) {\n throw new Error(`'properties' property required for groupBy`);\n }\n\n let result = `(${groupBy.properties.join(',')})`;\n\n if (groupBy.transform) {\n result += `,${buildTransforms(groupBy.transform, { aliases, escape })}`;\n }\n\n return result;\n}\n\nfunction buildOrderBy<T>(orderBy: OrderBy<T>, prefix: string = ''): string {\n if (Array.isArray(orderBy)) {\n return (orderBy as OrderByObject<T>[])\n .map((value) =>\n Array.isArray(value) &&\n value.length === 2 &&\n ['asc', 'desc'].indexOf(value[1]) !== -1\n ? value.join(' ')\n : value\n )\n .map((v) => `${prefix}${v}`)\n .join(',');\n } else if (typeof orderBy === 'object') {\n return Object.entries(orderBy)\n .map(([k, v]) => buildOrderBy(v as OrderBy<any>, `${k}/`))\n .map((v) => `${prefix}${v}`)\n .join(',');\n }\n return `${prefix}${orderBy}`;\n}\n\nfunction buildUrl(path: string, params: { [name: string]: any }): string {\n // This can be refactored using URL API. But IE does not support it.\n const queries: string[] = Object.entries(params).map(\n ([key, value]) => `${key}=${value}`\n );\n return queries.length ? `${path}?${queries.join('&')}` : path;\n}\n\nfunction parseNot(builtFilters: string[]): string {\n return `not(${builtFilters.join(' and ')})`;\n}\n","const ISO_REGEX =\n /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/;\n\nexport const Dates = {\n isoStringToDate(value: any): any {\n if (typeof value === 'string' && value.search(ISO_REGEX) === 0) {\n return new Date(value);\n } else if (Array.isArray(value)) {\n return value.map((v) => this.isoStringToDate(v));\n } else if (value && value.constructor === Object) {\n return Object.keys(value)\n .map((key) => [key, this.isoStringToDate(value[key])])\n .reduce((acc, v) => Object.assign(acc, { [v[0]]: v[1] }), {});\n }\n return value;\n },\n};\n","const DURATION_REGEX =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n//https://en.wikipedia.org/wiki/ISO_8601#Durations\nexport type Duration = {\n sign?: 1 | -1;\n years?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n};\n\nexport const Durations = {\n toDuration(v: string): Duration {\n const matches = DURATION_REGEX.exec(v);\n if (!matches || v.length < 3) {\n throw new TypeError(\n `duration invalid: \"${v}\". Must be a ISO 8601 duration. See https://en.wikipedia.org/wiki/ISO_8601#Durations`\n );\n }\n let duration: Duration = {};\n duration.sign = matches[1] === '-' ? -1 : 1;\n return [\n 'years',\n 'months',\n 'weeks',\n 'days',\n 'hours',\n 'minutes',\n 'seconds',\n ].reduce((acc: any, name, index) => {\n const v = parseFloat(matches[index + 2]);\n if (!Number.isNaN(v)) acc[name] = v;\n return acc;\n }, duration) as Duration;\n },\n toString(v: Duration): string {\n return [\n v.sign === -1 ? '-' : '',\n 'P',\n v.years ? v.years + 'Y' : '',\n v.months ? v.months + 'M' : '',\n v.weeks ? v.weeks + 'W' : '',\n v.days ? v.days + 'D' : '',\n 'T',\n v.hours ? v.hours + 'H' : '',\n v.minutes ? v.minutes + 'M' : '',\n v.seconds ? v.seconds + 'S' : '',\n ].join('');\n },\n};\n","export const Enums = {\n names<E>(Enum: E): string[] {\n return Object.values(Enum).filter((v) => typeof v === 'string');\n },\n\n values<E>(Enum: E): number[] {\n return Object.values(Enum).filter((v) => typeof v === 'number');\n },\n\n toValue<E>(Enum: E, value: any): number {\n if (value in Enum)\n return typeof value === 'string' ? (Enum as any)[value] : value;\n return NaN;\n },\n\n toValues<E>(Enum: E, value: any): number[] {\n if (typeof value === 'number') {\n return this.values(Enum).filter((v) => (value & v) === v);\n }\n if (typeof value === 'string') {\n value = value.split(',').map((o) => o.trim());\n }\n if (Array.isArray(value) && value.every((v) => v in Enum)) {\n return value.map((o) => this.toValue(Enum, o));\n }\n return [];\n },\n\n toName<E>(Enum: E, value: any): string {\n if (value in Enum)\n return typeof value === 'number' ? (Enum as any)[value] : value;\n return '';\n },\n\n toNames<E>(Enum: E, value: any): string[] {\n if (typeof value === 'number') {\n return this.values(Enum)\n .filter((v) => (value & v) === v)\n .map((v) => this.toName(Enum, v));\n }\n if (typeof value === 'string') {\n value = value.split(',').map((o) => o.trim());\n }\n if (Array.isArray(value) && value.every((v) => v in Enum)) {\n return value.map((o) => this.toName(Enum, o) as string);\n }\n return [];\n },\n};\n","function cloneSymbol(targe: any) {\n return Object(Symbol.prototype.valueOf.call(targe));\n}\n\nfunction cloneReg(targe: any) {\n const reFlags = /\\w*$/;\n const result = new targe.constructor(targe.source, reFlags.exec(targe));\n result.lastIndex = targe.lastIndex;\n return result;\n}\n\nexport const Types = {\n rawType(value: any) {\n return Object.prototype.toString.call(value).slice(8, -1);\n },\n\n isObject(value: any): boolean {\n var type = typeof value;\n return value != null && (type === 'object' || type === 'function');\n },\n\n isPlainObject(value: any) {\n if (this.rawType(value) !== 'Object') {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === null || prototype === Object.prototype;\n },\n\n isFunction(value: any): boolean {\n return typeof value === 'function';\n },\n\n isArray(value: any): boolean {\n return Array.isArray(value);\n },\n\n isEmpty(value: any): boolean {\n return (\n value === undefined ||\n value === null ||\n (typeof value === 'string' && !value.length) ||\n (Types.isArray(value) && !value.length) ||\n (Types.isFunction(value.isEmpty) && value.isEmpty()) ||\n (Types.isArray(value) &&\n (value as any[]).every((v) => Types.isEmpty(v))) ||\n (Types.isObject(value) &&\n !Object.keys(value).filter((k) => value.hasOwnProperty(k)).length) ||\n (Types.isPlainObject(value) &&\n !Object.keys(value).filter((k) => value.hasOwnProperty(k)).length)\n );\n },\n\n isEqual(value1: any, value2: any) {\n function getType(obj: any) {\n return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();\n }\n\n function areDatesEqual() {\n return value1.getTime() === value2.getTime();\n }\n\n function areArraysBufferEqual() {\n if (value1.byteLength !== value2.byteLength) {\n return false;\n }\n\n var view1 = new DataView(value1);\n var view2 = new DataView(value2);\n\n var i = value1.byteLength;\n while (i--) {\n if (view1.getUint8(i) !== view2.getUint8(i)) {\n return false;\n }\n }\n\n return true;\n }\n\n function areArraysEqual() {\n // Check length\n if (value1.length !== value2.length) return false;\n\n // Check each item in the array\n for (let i = 0; i < value1.length; i++) {\n if (!Types.isEqual(value1[i], value2[i])) return false;\n }\n\n // If no errors, return true\n return true;\n }\n\n function areObjectsEqual() {\n if (Object.keys(value1).length !== Object.keys(value2).length)\n return false;\n\n // Check each item in the object\n for (let key in value1) {\n if (Object.prototype.hasOwnProperty.call(value1, key)) {\n if (!Types.isEqual(value1[key], value2[key])) return false;\n }\n }\n\n // If no errors, return true\n return true;\n }\n\n function areFunctionsEqual() {\n return value1.toString() === value2.toString();\n }\n\n function arePrimativesEqual() {\n return value1 === value2;\n }\n\n // Get the object type\n let type = getType(value1);\n\n // If the two items are not the same type, return false\n if (type !== getType(value2)) return false;\n\n // Compare based on type\n if (type === 'date') return areDatesEqual();\n if (type === 'arraybuffer') return areArraysBufferEqual();\n if (type === 'array') return areArraysEqual();\n if (type === 'object') return areObjectsEqual();\n if (type === 'function') return areFunctionsEqual();\n return arePrimativesEqual();\n },\n clone(target: any) {\n const constrFun = target.constructor;\n switch (this.rawType(target)) {\n case 'Boolean':\n case 'Number':\n case 'String':\n case 'Error':\n case 'Date':\n return new constrFun(target);\n case 'RegExp':\n return cloneReg(target);\n case 'Symbol':\n return cloneSymbol(target);\n case 'Function':\n return target;\n default:\n return null;\n }\n },\n};\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\n\nimport { BOUNDARY_PREFIX_SUFFIX } from '../constants';\nimport { Types } from './types';\n\nexport const Http = {\n //Merge Headers\n mergeHttpHeaders(\n ...values: (HttpHeaders | { [header: string]: string | string[] })[]\n ): HttpHeaders {\n let headers = new HttpHeaders();\n values.forEach((value) => {\n if (value instanceof HttpHeaders) {\n value.keys().forEach((key) => {\n headers = ((value as HttpHeaders).getAll(key) || []).reduce(\n (acc, v) => acc.append(key, v),\n headers\n );\n });\n } else if (Types.isPlainObject(value)) {\n Object.entries(value).forEach(([key, value]) => {\n headers = (Array.isArray(value) ? value : [value]).reduce(\n (acc, v) => acc.append(key, v),\n headers\n );\n });\n }\n });\n return headers;\n },\n\n // Merge Params\n mergeHttpParams(\n ...values: (HttpParams | { [param: string]: string | string[] })[]\n ): HttpParams {\n let params = new HttpParams();\n values.forEach((value) => {\n if (value instanceof HttpParams) {\n value.keys().forEach((key) => {\n params = ((value as HttpParams).getAll(key) || []).reduce(\n (acc, v) => acc.append(key, v),\n params\n );\n });\n } else if (Types.isPlainObject(value)) {\n Object.entries(value).forEach(([key, value]) => {\n params = (Array.isArray(value) ? value : [value]).reduce(\n (acc, v) => acc.append(key, v),\n params\n );\n });\n }\n });\n return params;\n },\n\n // Split Params\n splitHttpParams(\n params: HttpParams,\n keys: string[]\n ): [HttpParams, HttpParams] {\n let other = new HttpParams();\n params.keys().forEach((key) => {\n if (keys.includes(key)) {\n other = (params.getAll(key) || []).reduce(\n (acc, v) => acc.append(key, v),\n other\n );\n params = params.delete(key);\n }\n });\n return [params, other];\n },\n\n // Without Params\n withoutHttpParams(params: HttpParams, keys: string[]): HttpParams {\n return keys.reduce((acc, key) => acc.delete(key), params);\n },\n\n resolveHeaderKey(\n headers: HttpHeaders | { [param: string]: string | string[] },\n options: string[]\n ): string | undefined {\n if (headers instanceof HttpHeaders) {\n return headers.keys().find((k) => options.indexOf(k) !== -1);\n } else if (Types.isPlainObject(headers)) {\n return Object.keys(headers).find((k) => options.indexOf(k) !== -1);\n }\n return undefined;\n },\n\n headerValue(header: string): string {\n let res: string = header.split(';')[0].trim();\n res = res.split(':')[1].trim();\n return res;\n },\n\n parseResponseStatus(statusLine: string): {\n status: string;\n code: number;\n message: string;\n } {\n const status = statusLine.split(' ')[0];\n const code = parseInt(statusLine.split(' ')[1], 10);\n const message = statusLine.split(' ')[2];\n return { status, code, message };\n },\n\n boundaryDelimiter(contentType: string): string {\n const contentTypeParts: string[] = contentType.split(';');\n if (contentTypeParts.length === 2) {\n const boundary: string = contentType.split(';')[1].trim();\n const boundaryDelimiter: string =\n BOUNDARY_PREFIX_SUFFIX + boundary.split('=')[1];\n return boundaryDelimiter;\n } else {\n return '';\n }\n },\n\n boundaryEnd(boundaryDelimiter: string): string {\n if (!boundaryDelimiter.length) {\n return '';\n }\n const boundaryEnd: string = boundaryDelimiter + BOUNDARY_PREFIX_SUFFIX;\n return boundaryEnd;\n },\n};\n","import { Types } from './types';\n\nfunction forEach(array: any[], iteratee: (value: any, index: number) => void) {\n let index = -1;\n const length = array.length;\n while (++index < length) {\n iteratee(array[index], index);\n }\n return array;\n}\n\nexport const Objects = {\n set(obj: Object, path: string, value: any) {\n // Check if path is string or array. Regex : ensure that we do not have '.' and brackets.\n const pathArray = (\n Types.isArray(path) ? path : path.match(/([^[.\\]])+/g)\n ) as any[];\n\n pathArray.reduce((acc, key, i) => {\n if (acc[key] === undefined) acc[key] = {};\n if (i === pathArray.length - 1) acc[key] = value;\n return acc[key];\n }, obj);\n },\n\n get(obj: Object, path: string, def?: any): any {\n // Check if path is string or array. Regex : ensure that we do not have '.' and brackets.\n const pathArray = (\n Types.isArray(path) ? path : path.match(/([^[.\\]])+/g)\n ) as any[];\n // Find value if exist return otherwise return undefined value;\n return (\n pathArray.reduce((prevObj, key) => prevObj && prevObj[key], obj) || def\n );\n },\n\n unset(obj: Object, path: string) {\n // Check if path is string or array. Regex : ensure that we do not have '.' and brackets.\n const pathArray = (\n Types.isArray(path) ? path : path.match(/([^[.\\]])+/g)\n ) as any[];\n\n pathArray.reduce((acc, key, i) => {\n if (i === pathArray.length - 1) delete acc[key];\n return acc[key];\n }, obj);\n },\n\n has(obj: Object, path: string) {\n // Check if path is string or array. Regex : ensure that we do not have '.' and brackets.\n const pathArray = (\n Types.isArray(path) ? path : path.match(/([^[.\\]])+/g)\n ) as any[];\n\n return !!pathArray.reduce((prevObj, key) => prevObj && prevObj[key], obj);\n },\n\n merge(target: Object, source: Object) {\n const merge = (target: any, source: { [attr: string]: any }) => {\n for (let attr in source) {\n let value = source[attr];\n if (value !== null && Types.isPlainObject(value) && attr in target) {\n merge(target[attr], value);\n } else if (target[attr] !== value) {\n target[attr] = value;\n }\n }\n };\n merge(target, source);\n return target;\n },\n\n equal(object1: { [attr: string]: any }, object2: { [attr: string]: any }) {\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n const val1 = object1[key];\n const val2 = object2[key];\n const areObjects = Types.isPlainObject(val1) && Types.isPlainObject(val2);\n if (\n (areObjects && !Objects.equal(val1, val2)) ||\n (!areObjects && val1 !== val2)\n ) {\n return false;\n }\n }\n return true;\n },\n\n difference(\n object1: { [attr: string]: any },\n object2: { [attr: string]: any }\n ) {\n if (!object2 || !Types.isPlainObject(object2)) {\n return object1;\n }\n var diffs: { [name: string]: any } = {};\n var key;\n var arraysMatch = function (arr1: any[], arr2: any[]) {\n if (arr1.length !== arr2.length) return false;\n\n for (var i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) return false;\n }\n\n return true;\n };\n\n var compare = function (item1: any, item2: any | undefined, key: string) {\n if (item2 === undefined) {\n diffs[key] = null;\n return;\n }\n\n if (typeof item1 !== typeof item2) {\n diffs[key] = item2;\n return;\n }\n\n if (Types.isPlainObject(item1)) {\n var objDiff = Objects.difference(item1, item2);\n if (Object.keys(objDiff).length > 0) {\n diffs[key] = objDiff;\n }\n return;\n }\n\n if (Array.isArray(item1)) {\n if (!arraysMatch(item1, item2)) {\n diffs[key] = item2;\n }\n return;\n }\n\n if (item1 !== item2) {\n diffs[key] = item2;\n }\n };\n\n for (key in object1) {\n if (object1.hasOwnProperty(key)) {\n compare(object1[key], object2[key], key);\n }\n }\n\n for (key in object2) {\n if (object2.hasOwnProperty(key)) {\n if (!object1[key] && object1[key] !== object2[key]) {\n diffs[key] = object2[key];\n }\n }\n }\n return diffs;\n },\n\n resolveKey(key: any, { single = true }: { single?: boolean } = {}) {\n if (['number', 'string'].indexOf(typeof key) !== -1) return key;\n if (!Types.isPlainObject(key)) {\n return undefined;\n }\n const values = Object.values(key);\n if (values.length === 1 && single) {\n // Single primitive key value\n key = values[0];\n } else if (values.some((v) => v === undefined)) {\n // Compose key, needs all values\n return undefined;\n }\n return !Types.isEmpty(key) ? key : undefined;\n },\n\n clone(target: any, map?: WeakMap<object, any>) {\n if (map === undefined) map = new WeakMap();\n // clone primitive types\n if (typeof target != 'object' || target == null) {\n return target;\n }\n\n const type = Types.rawType(target);\n let cloneTarget: any = null;\n\n if (map.get(target)) {\n return map.get(target);\n }\n map.set(target, cloneTarget);\n\n if (type != 'Set' && type != 'Map' && type != 'Array' && type != 'Object') {\n return Types.clone(target);\n }\n\n // clone Set\n if (type == 'Set') {\n cloneTarget = new Set();\n target.forEach((value: any) => {\n cloneTarget.add(this.clone(value, map));\n });\n return cloneTarget;\n }\n\n // clone Map\n if (type == 'Map') {\n cloneTarget = new Map();\n target.forEach((value: any, key: any) => {\n cloneTarget.set(key, this.clone(value, map));\n });\n return cloneTarget;\n }\n\n // clone Array\n if (type == 'Array') {\n cloneTarget = new Array();\n forEach(target, (value, index) => {\n cloneTarget[index] = this.clone(value, map);\n });\n }\n\n // clone normal Object\n if (type == 'Object') {\n cloneTarget = new Object();\n forEach(Object.keys(target), (key, index) => {\n cloneTarget[key] = this.clone(target[key], map);\n });\n }\n\n return cloneTarget;\n },\n};\n","import { CALLABLE_BINDING_PARAMETER } from '../constants';\nimport { CallableConfig } from '../types';\nimport { Objects } from './objects';\n\nexport const OData = {\n // Merge callables parameters\n mergeCallableParameters(callables: CallableConfig[]): CallableConfig[] {\n const areEqual = (a: CallableConfig, b: CallableConfig) =>\n a.name === b.name &&\n Objects.equal(\n (a.parameters || {})[CALLABLE_BINDING_PARAMETER] || {},\n (b.parameters || {})[CALLABLE_BINDING_PARAMETER] || {}\n );\n return callables.reduce((acc: CallableConfig[], config) => {\n if (acc.every((c) => !areEqual(c, config))) {\n config = callables\n .filter((c) => areEqual(c, config))\n .reduce((acc, c) => {\n acc.parameters = Object.assign(\n acc.parameters || {},\n c.parameters || {}\n );\n return acc;\n }, config);\n return [...acc, config];\n }\n return acc;\n }, [] as CallableConfig[]);\n },\n};\n","// From https://github.com/adamhalasz/uniqid\nvar glast: number;\nfunction now() {\n let time = Date.now();\n let last = glast || time;\n return (glast = time > last ? time : last + 1);\n}\nexport const Strings = {\n uniqueId(prefix?: string, suffix?: string): string {\n return (prefix ? prefix : '') + now().toString(36) + (suffix ? suffix : '');\n },\n\n titleCase(text: string): string {\n const result = text.replace(/([a-z])([A-Z])/g, '$1 $2');\n return result\n .split(' ')\n .map((p) => p.charAt(0).toUpperCase() + p.slice(1))\n .join(' ');\n },\n};\n","import { PARAM_SEPARATOR, VALUE_SEPARATOR } from '../constants';\n\nexport const Urls = {\n parseQueryString(query: string) {\n return query.split(PARAM_SEPARATOR).reduce((acc, param: string) => {\n let index = param.indexOf(VALUE_SEPARATOR);\n if (index !== -1)\n Object.assign(acc, {\n [param.substr(0, index)]: param.substr(index + 1),\n });\n return acc;\n }, {});\n },\n escapeIllegalChars(string: string) {\n string = string.replace(/%/g, '%25');\n string = string.replace(/\\+/g, '%2B');\n string = string.replace(/\\//g, '%2F');\n string = string.replace(/\\?/g, '%3F');\n string = string.replace(/#/g, '%23');\n string = string.replace(/&/g, '%26');\n string = string.replace(/'/g, \"''\");\n return string;\n },\n};\n","import type { QueryCustomType } from './builder';\nimport { normalizeValue } from './builder';\n\nexport interface Renderable {\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string;\n toString(): string;\n toJSON(): any;\n}\n\nexport type Funcs<T> = (\n x: ODataSyntax<T>\n) => Function<T> | Operator<T> | Grouping<T>;\n//export type Field<T> = keyof T | Funcs<keyof T>;\n\nexport class Field<T extends object> implements ProxyHandler<T> {\n constructor(public name: string = '') {}\n\n static factory<T extends object>() {\n const h = new Field<T>();\n return new Proxy({ _name: '' } as T, h);\n }\n\n get(target: T, p: string | symbol): any {\n let name = (target as any)['_name'];\n if (p === 'render') {\n return ({ prefix }: { prefix?: string }) =>\n prefix ? `${prefix}/${name}` : name;\n }\n name = name ? `${name}/${p as string}` : p;\n return new Proxy({ _name: name } as any, this);\n }\n}\n\nfunction applyMixins(derivedCtor: any, constructors: any[]) {\n constructors.forEach((baseCtor) => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\n Object.defineProperty(\n derivedCtor.prototype,\n name,\n Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||\n Object.create(null)\n );\n });\n });\n}\n\nfunction render(\n value: any,\n {\n aliases,\n normalize,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n normalize?: boolean;\n escape?: boolean;\n prefix?: string;\n } = {}\n): string | number | boolean | null {\n if (typeof value === 'function') {\n return render(value(syntax), { aliases, normalize, prefix });\n }\n if (\n typeof value === 'object' &&\n value !== null &&\n value.render !== undefined\n ) {\n return render(value.render({ aliases, escape, prefix }), {\n aliases,\n normalize,\n escape,\n prefix,\n });\n }\n return normalize ? normalizeValue(value, { aliases, escape }) : value;\n}\n\nexport class Function<T> implements Renderable {\n constructor(\n protected name: string,\n protected values: any[],\n protected normalize: boolean = true,\n protected escape: boolean = false\n ) {}\n\n get [Symbol.toStringTag]() {\n return 'Function';\n }\n\n toJSON() {\n return {\n name: this.name,\n values: this.values,\n normalize: this.normalize,\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n let [field, ...values] = this.values;\n\n field = render(field, { aliases, escape, prefix });\n let params = [\n field,\n ...values.map((v) =>\n render(v, { aliases, escape, prefix, normalize: this.normalize })\n ),\n ];\n return `${this.name}(${params.join(', ')})`;\n }\n}\n\nexport class StringAndCollectionFunctions<T> {\n concat(field: any, value: any, normalize?: boolean) {\n return new Function<T>('concat', [field, value], normalize);\n }\n\n contains(field: any, value: any, normalize?: boolean) {\n return new Function<T>('contains', [field, value], normalize);\n }\n\n endsWith(field: any, value: any, normalize?: boolean) {\n return new Function<T>('endswith', [field, value], normalize);\n }\n\n indexOf(field: any, value: any, normalize?: boolean) {\n return new Function<T>('indexof', [field, value], normalize);\n }\n\n length(value: any, normalize?: boolean) {\n return new Function<T>('length', [value], normalize);\n }\n\n startsWith(field: any, value: any, normalize?: boolean) {\n return new Function<T>('startswith', [field, value], normalize);\n }\n\n subString(field: any, start: number, length?: number) {\n let values = [field, start];\n if (length !== undefined) {\n values.push(length);\n }\n return new Function<T>('substring', values);\n }\n}\n\nexport class CollectionFunctions<T> {\n hasSubset(s1: T, s2: any) {\n return new Function<T>('hassubset', [s1, s2]);\n }\n hasSubsequence(s1: T, s2: any) {\n return new Function<T>('hassubsequence', [s1, s2]);\n }\n}\n\nexport class StringFunctions<T> {\n matchesPattern(value: T | string, pattern: string) {\n return new Function<T>('matchesPattern', [value, pattern]);\n }\n toLower(value: T) {\n return new Function<T>('tolower', [value]);\n }\n toUpper(value: T) {\n return new Function<T>('toupper', [value]);\n }\n trim(value: T) {\n return new Function<T>('trim', [value]);\n }\n}\n\nexport class DateAndTimeFunctions<T> {\n date(value: any) {\n return new Function<T>('date', [value]);\n }\n day(value: any) {\n return new Function<T>('day', [value]);\n }\n fractionalseconds(value: any) {\n return new Function<T>('fractionalseconds', [value]);\n }\n hour(value: any) {\n return new Function<T>('hour', [value]);\n }\n maxdatetime(value: any) {\n return new Function<T>('maxdatetime', [value]);\n }\n mindatetime(value: any) {\n return new Function<T>('mindatetime', [value]);\n }\n minute(value: any) {\n return new Function<T>('minute', [value]);\n }\n month(value: any) {\n return new Function<T>('month', [value]);\n }\n now() {\n return new Function<T>('now', []);\n }\n second(value: any) {\n return new Function<T>('second', [value]);\n }\n time(value: any) {\n return new Function<T>('time', [value]);\n }\n totaloffsetminutes(value: any) {\n return new Function<T>('totaloffsetminutes', [value]);\n }\n totalseconds(value: any) {\n return new Function<T>('totalseconds', [value]);\n }\n year(value: any) {\n return new Function<T>('year', [value]);\n }\n}\n\nexport class ArithmeticFunctions<T> {\n ceiling(value: T | string) {\n return new Function<T>('ceiling', [value]);\n }\n floor(value: T | string) {\n return new Function<T>('floor', [value]);\n }\n round(value: T | string) {\n return new Function<T>('round', [value]);\n }\n}\n\nexport class TypeFunctions<T> {\n cast(value: T | string, type?: string) {\n return new Function<T>('cast', [value, type]);\n }\n\n isof(value: T | string, type?: string) {\n return new Function<T>('isof', [value, type]);\n }\n}\n\nexport class GeoFunctions<T> {\n geoDistance(value: T, point: string, normalize?: boolean) {\n return new Function<T>('geo.distance', [value, point], normalize);\n }\n geoIntersects(value: T, polygon: string, normalize?: boolean) {\n return new Function<T>('geo.intersects', [value, polygon], normalize);\n }\n geoLength(line: T, normalize?: boolean) {\n return new Function<T>('geo.length', [line], normalize);\n }\n}\n\nexport class ConditionalFunctions<T> {\n case(condition: T | string, value: any) {\n return new Function<T>('case', [condition, value]);\n }\n}\n\nexport class Operator<T> implements Renderable {\n constructor(\n protected op: string,\n protected values: any[],\n protected normalize: boolean = true\n ) {}\n\n get [Symbol.toStringTag]() {\n return 'Operator';\n }\n\n toJSON() {\n return {\n op: this.op,\n values: this.values,\n normalize: this.normalize,\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n let [left, right] = this.values;\n\n left = render(left, { aliases, escape, prefix });\n if (right !== undefined) {\n right = Array.isArray(right)\n ? `(${right\n .map((v) =>\n render(v, {\n aliases,\n escape,\n prefix,\n normalize: this.normalize,\n })\n )\n .join(',')})`\n : render(right, {\n aliases,\n escape,\n prefix,\n normalize: this.normalize,\n });\n return `${left} ${this.op} ${right}`;\n }\n return `${this.op}(${left})`;\n }\n}\n\nexport class LogicalOperators<T> {\n eq(left: any, right: any, normalize?: boolean) {\n return new Operator('eq', [left, right], normalize);\n }\n ne(left: any, right: any, normalize?: boolean) {\n return new Operator('ne', [left, right], normalize);\n }\n gt(left: any, right: any, normalize?: boolean) {\n return new Operator('gt', [left, right], normalize);\n }\n ge(left: any, right: any, normalize?: boolean) {\n return new Operator('ge', [left, right], normalize);\n }\n lt(left: any, right: any, normalize?: boolean) {\n return new Operator('lt', [left, right], normalize);\n }\n le(left: any, right: any, normalize?: boolean) {\n return new Operator('le', [left, right], normalize);\n }\n /*\n and(left: any, right: any, normalize?: boolean) {\n return new Operator('and', [left, right], normalize);\n }\n or(left: any, right: any, normalize?: boolean) {\n return new Operator('or', [left, right], normalize);\n }\n */\n not(value: any, normalize?: boolean) {\n return new Operator<T>('not', [value], normalize);\n }\n has(left: any, right: any, normalize?: boolean) {\n return new Operator('has', [left, right], normalize);\n }\n in(left: any, right: any, normalize?: boolean) {\n return new Operator('in', [left, right], normalize);\n }\n}\n\nexport class ArithmeticOperators<T> {\n add(left: any, right: any, normalize?: boolean) {\n return new Operator<T>('add', [left, right], normalize);\n }\n sub(left: any, right: any, normalize?: boolean) {\n return new Operator('sub', [left, right], normalize);\n }\n mul(left: any, right: any, normalize?: boolean) {\n return new Operator('mul', [left, right], normalize);\n }\n div(left: any, right: any, normalize?: boolean) {\n return new Operator('div', [left, right], normalize);\n }\n mod(left: any, right: any, normalize?: boolean) {\n return new Operator('mod', [left, right], normalize);\n }\n neg(value: any, normalize?: boolean) {\n return new Operator('-', [value], normalize);\n }\n}\n\nexport class Grouping<T> implements Renderable {\n constructor(protected group: Renderable) {}\n\n get [Symbol.toStringTag]() {\n return 'Grouping';\n }\n\n toJSON() {\n return {\n group: this.group.toJSON(),\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n return `(${render(this.group, { aliases, escape, prefix })})`;\n }\n}\n\n/*\nexport class Navigation<T, N> implements Renderable {\n constructor(protected field: T, protected value: Field<N>) {}\n\n get [Symbol.toStringTag]() {\n return 'Navigation';\n }\n\n toJSON() {\n return {\n field: this.field,\n value: this.value,\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n return `${this.field}/${render(this.value, { aliases, escape, prefix })}`;\n }\n}\n*/\n\nexport class GroupingOperators<T> {\n grouping(value: any) {\n return new Grouping(value);\n }\n\n /*\n navigation<N>(field: T, value: Field<N>) {\n return new Navigation<T, N>(field, value);\n }\n */\n}\n\nexport class Lambda<T> implements Renderable {\n constructor(\n protected op: string,\n protected values: any[],\n protected alias?: string\n ) {}\n\n get [Symbol.toStringTag]() {\n return 'Lambda';\n }\n\n toJSON() {\n return {\n op: this.op,\n values: this.values,\n alias: this.alias,\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n let [left, right] = this.values;\n\n left = render(left, { aliases, escape, prefix });\n let alias = this.alias || left.split('/').pop().toLowerCase()[0];\n return `${left}/${this.op}(${alias}:${render(right, {\n aliases,\n escape,\n prefix: alias,\n })})`;\n }\n}\n\nexport class LambdaOperators<T> {\n any(field: T, value: any, alias?: string) {\n return new Lambda('any', [field, value], alias);\n }\n\n all(field: T, value: any, alias?: string) {\n return new Lambda('all', [field, value], alias);\n }\n}\n\nexport class ODataOperators<T> {}\nexport interface ODataOperators<T>\n extends LogicalOperators<T>,\n ArithmeticOperators<T>,\n GroupingOperators<T>,\n LambdaOperators<T> {}\n\napplyMixins(ODataOperators, [\n LogicalOperators,\n ArithmeticOperators,\n GroupingOperators,\n LambdaOperators,\n]);\nexport const operators: ODataOperators<any> = new ODataOperators<any>();\n\nexport class ODataFunctions<T> {}\nexport interface ODataFunctions<T>\n extends StringAndCollectionFunctions<T>,\n CollectionFunctions<T>,\n StringFunctions<T>,\n DateAndTimeFunctions<T>,\n ArithmeticFunctions<T>,\n TypeFunctions<T>,\n GeoFunctions<T>,\n ConditionalFunctions<T> {}\n\napplyMixins(ODataFunctions, [\n StringAndCollectionFunctions,\n CollectionFunctions,\n StringFunctions,\n DateAndTimeFunctions,\n ArithmeticFunctions,\n TypeFunctions,\n GeoFunctions,\n ConditionalFunctions,\n]);\nexport const functions: ODataFunctions<any> = new ODataFunctions<any>();\n\nexport class ODataSyntax<T> {}\nexport interface ODataSyntax<T> extends ODataOperators<T>, ODataFunctions<T> {}\napplyMixins(ODataSyntax, [ODataOperators, ODataFunctions]);\n\nexport const syntax: ODataSyntax<any> = new ODataSyntax<any>();\n","import type { QueryCustomType } from './builder';\nimport {\n Field,\n functions,\n ODataFunctions,\n ODataOperators,\n operators,\n Renderable,\n} from './syntax';\nimport { syntax } from './syntax';\n\nexport type Connector = 'and' | 'or';\n\nexport class Expression<T> implements Renderable {\n private _connector: Connector;\n private _negated: boolean;\n private _children: Renderable[];\n constructor({\n children,\n connector,\n negated,\n }: {\n children?: Renderable[];\n connector?: Connector;\n negated?: boolean;\n } = {}) {\n this._children = children || [];\n this._connector = connector || 'and';\n this._negated = negated || false;\n }\n\n get [Symbol.toStringTag]() {\n return 'Expression';\n }\n\n static s<T extends object>(): T {\n return Field.factory<T>();\n }\n\n static e<T>(connector: Connector = 'and') {\n return new Expression<T>({ connector });\n }\n\n static o<T>(): ODataOperators<T> {\n return operators;\n }\n\n static f<T>(): ODataFunctions<T> {\n return functions;\n }\n\n static filter<T extends object>(\n opts: (e: {\n s: T;\n e: (connector?: Connector) => Expression<T>;\n o: ODataOperators<T>;\n f: ODataFunctions<T>;\n }) => Expression<T>\n ): Expression<T> {\n return opts({\n s: Expression.s<T>(),\n e: Expression.e,\n o: Expression.o<T>(),\n f: Expression.f<T>(),\n }) as Expression<T>;\n }\n\n toJSON() {\n return {\n children: this._children.map((c) => c.toJSON()),\n connector: this._connector,\n negated: this._negated,\n };\n }\n\n children() {\n return this._children;\n }\n\n connector() {\n return this._connector;\n }\n\n negated() {\n return this._negated;\n }\n\n length() {\n return this._children.length;\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n } = {}): string {\n let content = this._children\n .map((n) => n.render({ aliases, escape, prefix }))\n .join(` ${this._connector} `);\n if (this._negated) {\n content = `not (${content})`;\n }\n return content;\n }\n\n private _add(node: Renderable, connector?: Connector): Expression<T> {\n if (connector !== undefined && this._connector !== connector) {\n let children: Renderable[] = [];\n if (this._children.length > 0) {\n if (this._children.length === 1) {\n children = [...this._children];\n } else {\n let exp = new Expression<T>({\n children: this._children,\n connector: this._connector,\n negated: this._negated,\n });\n if (exp.length() > 1) {\n children.push(syntax.grouping(exp));\n } else {\n children.push(exp);\n }\n }\n }\n if (\n node instanceof Expression &&\n (node.connector() === connector || node.length() === 1)\n ) {\n children = [...children, ...node.children()];\n } else {\n children.push(syntax.grouping(node));\n }\n this._connector = connector;\n this._children = children;\n } else if (\n node instanceof Expression &&\n !node.negated() &&\n (node.connector() === connector || node.length() === 1)\n ) {\n this._children = [...this._children, ...node.children()];\n } else {\n this._children.push(\n node instanceof Expression && !node.negated()\n ? syntax.grouping(node)\n : node\n );\n }\n return this;\n }\n\n or(exp: Expression<T>): Expression<T> {\n return this._add(exp, 'or');\n }\n\n and(exp: Expression<T>): Expression<T> {\n return this._add(exp, 'and');\n }\n\n not(exp: Expression<T>): Expression<T> {\n const notExp = new Expression<T>({\n children: exp.children(),\n connector: exp.connector(),\n negated: true,\n });\n\n return this._add(notExp, this._connector);\n }\n\n eq(left: any, right: any, normalize?: boolean) {\n return this._add(operators.eq(left, right, normalize));\n }\n\n ne(left: any, right: any, normalize?: boolean) {\n return this._add(operators.ne(left, right, normalize));\n }\n\n gt(left: any, right: any, normalize?: boolean) {\n return this._add(operators.gt(left, right, normalize));\n }\n\n ge(left: any, right: any, normalize?: boolean) {\n return this._add(operators.ge(left, right, normalize));\n }\n\n lt(left: any, right: any, normalize?: boolean) {\n return this._add(operators.lt(left, right, normalize));\n }\n\n le(left: any, right: any, normalize?: boolean) {\n return this._add(operators.le(left, right, normalize));\n }\n\n has(left: any, right: any, normalize?: boolean) {\n return this._add(operators.has(left, right, normalize));\n }\n\n in(left: any, right: any, normalize?: boolean) {\n return this._add(operators.in(left, right, normalize));\n }\n\n contains(left: any, right: any, normalize?: boolean) {\n return this._add(functions.contains(left, right, normalize));\n }\n\n startsWith(left: any, right: any, normalize?: boolean) {\n return this._add(functions.startsWith(left, right, normalize));\n }\n\n endsWith(left: any, right: any, normalize?: boolean) {\n return this._add(functions.endsWith(left, right, normalize));\n }\n\n any<N extends object>(\n left: N[],\n opts: (e: {\n s: N;\n e: (connector?: Connector) => Expression<N>;\n }) => Expression<N>,\n alias?: string\n ): Expression<T> {\n const exp = opts({\n s: Field.factory<N>(),\n e: Expression.e,\n }) as Expression<N>;\n return this._add(syntax.any(left, exp, alias));\n }\n\n all<N extends object>(\n left: N[],\n opts: (e: {\n s: N;\n e: (connector?: Connector) => Expression<N>;\n }) => Expression<N>,\n alias?: string\n ): Expression<T> {\n const exp = opts({\n s: Field.factory<N>(),\n e: Expression.e,\n }) as Expression<N>;\n return this._add(syntax.all(left, exp, alias));\n }\n\n isof(type: string): Expression<T>;\n isof(left: T, type: string): Expression<T>;\n isof(left: any, type?: string): Expression<T> {\n return this._add(syntax.isof(left, type));\n }\n}\n\n/*\nexport class FilterExpression<T> extends Expression<T> {\n constructor({\n children,\n connector,\n negated,\n }: {\n children?: Renderable[];\n connector?: Connector;\n negated?: boolean;\n } = {}) {\n super({ children, connector, negated });\n }\n\n get [Symbol.toStringTag]() {\n return 'FilterExpression';\n }\n\n static e<T>() {\n return new FilterExpression<T>({ connector: Connector.AND });\n }\n\n static and<T>() {\n return new FilterExpression<T>({ connector: Connector.AND });\n }\n\n static or<T>() {\n return new FilterExpression<T>({ connector: Connector.OR });\n }\n\n static not<T>(exp: FilterExpression<T>) {\n return new FilterExpression<T>({\n children: exp.children(),\n connector: exp.connector(),\n negated: true,\n });\n }\n}\n*/\n","import { QueryOptionNames } from '../../types';\nimport { Objects, Types } from '../../utils';\nimport { alias, Expand, Filter, OrderBy, Select, Transform } from './builder';\nimport { Connector, Expression } from './expressions';\nimport type { ODataQueryArguments, ODataQueryOptions } from './options';\nimport { ODataFunctions, ODataOperators } from './syntax';\n\nexport class ODataQueryOptionHandler<T> {\n constructor(\n private o: { [name: string]: any },\n private n: QueryOptionNames\n ) {}\n\n get name() {\n return this.n;\n }\n\n toJSON() {\n return this.o[this.n];\n }\n\n empty() {\n return Types.isEmpty(this.o[this.n]);\n }\n\n //#region Primitive Value\n value(v?: any) {\n return (v !== undefined && (this.o[this.n] = v)) || this.o[this.n];\n }\n //#endregion\n\n //#region Array Value\n private assertArray(): any[] {\n if (!Types.isArray(this.o[this.n]))\n this.o[this.n] = this.o[this.n] !== undefined ? [this.o[this.n]] : [];\n return this.o[this.n];\n }\n\n push(value: any) {\n this.assertArray().push(value);\n }\n\n remove(value: any) {\n this.o[this.n] = this.assertArray().filter((v) => v !== value);\n // If only one... down to value\n if (this.o[this.n].length === 1) this.o[this.n] = this.o[this.n][0];\n }\n\n at(index: number) {\n return this.assertArray()[index];\n }\n //#endregion\n\n //#region HashMap Value\n private assertObject(create: boolean): { [name: string]: any } {\n if (!Types.isArray(this.o[this.n]) && Types.isPlainObject(this.o[this.n])) {\n return this.o[this.n];\n }\n let arr = this.assertArray();\n let obj = arr.find((v) => Types.isPlainObject(v));\n if (!obj && create) {\n obj = {};\n arr.push(obj);\n }\n return obj;\n }\n\n set(path: string, value: any) {\n let obj = this.assertObject(true);\n Objects.set(obj, path, value);\n }\n\n get(path: string, def?: any): any {\n let obj = this.assertObject(false) || {};\n return Objects.get(obj, path, def);\n }\n\n unset(path: string) {\n let obj = this.assertObject(true);\n Objects.unset(obj, path);\n\n if (Types.isArray(this.o[this.n])) {\n this.o[this.n] = this.o[this.n].filter((v: any) => !Types.isEmpty(v));\n if (this.o[this.n].length === 1) this.o[this.n] = this.o[this.n][0];\n }\n }\n\n has(path: string) {\n let obj = this.assertObject(false) || {};\n return Objects.has(obj, path);\n }\n\n assign(values: { [attr: string]: any }) {\n let obj = this.assertObject(true);\n return Objects.merge(obj, values);\n }\n //#endregion\n\n clear() {\n delete this.o[this.n];\n }\n}\n\nexport class ODataQueryOptionsHandler<T> {\n constructor(protected options: ODataQueryOptions<T>) {}\n\n /**\n * Create a new odata alias parameter\n * @link https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_ParameterAliases\n * @param value The value of the alias\n * @param name The name of the alias\n * @returns The alias\n */\n alias(value: any, name?: string) {\n return alias(value, name);\n }\n\n select(opts: Select<T>): ODataQueryOptionHandler<T>;\n select(): ODataQueryOptionHandler<T>;\n select(opts?: Select<T>): any {\n return this.options.option<Select<T>>(QueryOptionNames.select, opts);\n }\n\n expand(opts: Expand<T>): ODataQueryOptionHandler<T>;\n expand(): ODataQueryOptionHandler<T>;\n expand(opts?: Expand<T>): any {\n return this.options.option<Expand<T>>(QueryOptionNames.expand, opts);\n }\n\n /**\n * @link https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_SystemQueryOptioncompute\n */\n compute(opts: (e: { e: Expression<T> }) => Expression<T>): Expression<T>;\n compute(opts: string): ODataQueryOptionHandler<T>;\n compute(): ODataQueryOptionHandler<T>;\n compute(opts?: any): any {\n if (Types.isFunction(opts)) {\n return this.options.expression(\n QueryOptionNames.compute,\n opts({\n e: () => Expression.e<T>(),\n }) as Expression<T>\n );\n }\n return this.options.option<string>(QueryOptionNames.compute, opts);\n }\n\n /**\n * @link https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_SystemQueryOptionformat\n */\n format(opts: string): ODataQueryOptionHandler<T>;\n format(): ODataQueryOptionHandler<T>;\n format(opts?: string): any {\n return this.options.option<string>(QueryOptionNames.format, opts);\n }\n\n transform(opts: Transform<T>): ODataQueryOptionHandler<T>;\n transform(): ODataQueryOptionHandler<T>;\n transform(opts?: Transform<T>): any {\n return this.options.option<Transform<T>>(QueryOptionNames.transform, opts);\n }\n\n search(opts: string): ODataQueryOptionHandler<T>;\n search(): ODataQueryOptionHandler<T>;\n search(opts?: string): any {\n return this.options.option<string>(QueryOptionNames.search, opts);\n }\n\n filter(\n opts: (e: {\n s: T;\n e: (connector?: Connector) => Expression<T>;\n o: ODataOperators<T>;\n f: ODataFunctions<T>;\n }) => Expression<T>\n ): Expression<T>;\n filter(opts: Filter<T>): ODataQueryOptionHandler<T>;\n filter(): ODataQueryOptionHandler<T>;\n filter(opts?: any): any {\n if (Types.isFunction(opts)) {\n return this.options.expression(\n QueryOptionNames.filter,\n opts({\n s: Expression.s<any>() as T,\n e: Expression.e,\n o: Expression.o<T>(),\n f: Expression.f<T>(),\n }) as Expression<T>\n );\n }\n return this.options.option<Filter<T>>(QueryOptionNames.filter, opts);\n }\n\n orderBy(\n opts: (e: {\n e: () => Expression<T>;\n not: (e: Expression<T>) => Expression<T>;\n }) => Expression<T>\n ): Expression<T>;\n orderBy(opts: OrderBy<T>): ODataQueryOptionHandler<T>;\n orderBy(): ODataQueryOptionHandler<T>;\n orderBy(opts?: any): any {\n if (Types.isFunction(opts)) {\n return this.options.expression(\n QueryOptionNames.orderBy,\n opts({\n e: () => Expression.e<T>(),\n }) as Expression<T>\n );\n }\n return this.options.option<OrderBy<T>>(QueryOptionNames.orderBy, opts);\n }\n\n top(opts: number): ODataQueryOptionHandler<T>;\n top(): ODataQueryOptionHandler<T>;\n top(opts?: number): any {\n return this.options.option<number>(QueryOptionNames.top, opts);\n }\n\n skip(opts: number): ODataQueryOptionHandler<T>;\n skip(): ODataQueryOptionHandler<T>;\n skip(opts?: number): any {\n return this.options.option<number>(QueryOptionNames.skip, opts);\n }\n\n skiptoken(opts: string): ODataQueryOptionHandler<T>;\n skiptoken(): ODataQueryOptionHandler<T>;\n skiptoken(opts?: string): any {\n return this.options.option<string>(QueryOptionNames.skiptoken, opts);\n }\n\n paging({\n skip,\n skiptoken,\n top,\n }: { skip?: number; skiptoken?: string; top?: number } = {}) {\n if (skiptoken !== undefined) this.skiptoken(skiptoken);\n else if (skip !== undefined) this.skip(skip);\n if (top !== undefined) this.top(top);\n }\n\n clearPaging() {\n this.skip().clear();\n this.top().clear();\n this.skiptoken().clear();\n }\n\n apply(query: ODataQueryArguments<T>) {\n if (query.select !== undefined) {\n this.select(query.select);\n }\n if (query.expand !== undefined) {\n this.expand(query.expand);\n }\n if (query.transform !== undefined) {\n this.transform(query.transform);\n }\n if (query.search !== undefined) {\n this.search(query.search);\n }\n if (query.filter !== undefined) {\n this.filter(query.filter);\n }\n if (query.orderBy !== undefined) {\n this.orderBy(query.orderBy);\n }\n this.paging(query);\n }\n}\n","import { QueryOptionNames } from '../../types';\nimport { Objects, Types } from '../../utils';\nimport {\n buildPathAndQuery,\n Expand,\n Filter,\n OrderBy,\n QueryCustomType,\n Select,\n Transform,\n} from './builder';\nimport { Expression } from './expressions';\nimport { ODataQueryOptionHandler } from './handlers';\n\nexport type ODataQueryArguments<T> = {\n [QueryOptionNames.select]?: Select<T>;\n [QueryOptionNames.filter]?: Filter<T>;\n [QueryOptionNames.search]?: string;\n [QueryOptionNames.compute]?: string;\n [QueryOptionNames.transform]?: Transform<T>;\n [QueryOptionNames.orderBy]?: OrderBy<T>;\n [QueryOptionNames.top]?: number;\n [QueryOptionNames.skip]?: number;\n [QueryOptionNames.skiptoken]?: string;\n [QueryOptionNames.expand]?: Expand<T>;\n [QueryOptionNames.format]?: string;\n};\n\nexport class ODataQueryOptions<T> {\n options: { [name: string]: any };\n\n constructor(options?: { [name: string]: any }) {\n this.options = options || {};\n }\n\n // Params\n pathAndParams(escape: boolean = false): [string, { [name: string]: any }] {\n let aliases: QueryCustomType[] = [];\n let options = [\n QueryOptionNames.select,\n QueryOptionNames.filter,\n QueryOptionNames.search,\n QueryOptionNames.compute,\n QueryOptionNames.transform,\n QueryOptionNames.orderBy,\n QueryOptionNames.top,\n QueryOptionNames.skip,\n QueryOptionNames.skiptoken,\n QueryOptionNames.expand,\n QueryOptionNames.format,\n ]\n .filter((key) => !Types.isEmpty(this.options[key]))\n .reduce((acc, key) => {\n let value = this.options[key];\n if (Types.rawType(value) === 'Expression') {\n value = value.render(aliases);\n }\n return Object.assign(acc, { [key]: value });\n }, {});\n\n return buildPathAndQuery<any>({ ...options, aliases, escape });\n }\n\n toString(): string {\n const [path, params] = this.pathAndParams();\n return (\n path +\n Object.entries(params)\n .filter(([, value]) => !Types.isEmpty(value))\n .map(([key, value]) => `${key}=${value}`)\n .join('&')\n );\n }\n\n toJSON() {\n return Object.keys(this.options).reduce((acc, key) => {\n let value = this.options[key];\n if (Types.rawType(value) === 'Expression') {\n value = value.toJSON();\n }\n return Object.assign(acc, { [key]: value });\n }, {});\n }\n\n toQueryArguments(): ODataQueryArguments<T> {\n return {\n select: this.options[QueryOptionNames.select],\n expand: this.options[QueryOptionNames.expand],\n transform: this.options[QueryOptionNames.transform],\n compute: this.options[QueryOptionNames.compute],\n search: this.options[QueryOptionNames.search],\n filter: this.options[QueryOptionNames.filter],\n orderBy: this.options[QueryOptionNames.orderBy],\n top: this.options[QueryOptionNames.top],\n skip: this.options[QueryOptionNames.skip],\n skiptoken: this.options[QueryOptionNames.skiptoken],\n } as ODataQueryArguments<T>;\n }\n\n clone<O>() {\n const options = Object.keys(this.options).reduce((acc, key) => {\n let value = this.options[key];\n if (Types.rawType(value) !== 'Expression') {\n value = Objects.clone(value);\n }\n return Object.assign(acc, { [key]: value });\n }, {});\n return new ODataQueryOptions<O>(options);\n }\n\n // Set Expression\n expression(name: QueryOptionNames, exp: Expression<T>) {\n return (this.options[name] = exp);\n }\n\n // Option Handler\n option<O>(name: QueryOptionNames, opts?: O) {\n if (opts !== undefined) this.options[name] = opts;\n return new ODataQueryOptionHandler<O>(this.options, name);\n }\n\n // Query Options tools\n has(name: QueryOptionNames) {\n return this.options[name] !== undefined;\n }\n\n remove(...names: QueryOptionNames[]) {\n names.forEach((name) => this.option(name).clear());\n }\n\n keep(...names: QueryOptionNames[]) {\n this.options = Object.keys(this.options)\n .filter((k) => names.indexOf(k as QueryOptionNames) !== -1)\n .reduce((acc, k) => Object.assign(acc, { [k]: this.options[k] }), {});\n }\n\n // Clear\n clear() {\n this.options = {};\n }\n}\n","import { PathSegmentNames } from '../../types';\nimport { Types } from '../../utils';\nimport { EntityKey } from '../resource';\nimport type { ODataPathSegments, ODataSegment } from './segments';\n\nexport class SegmentHandler {\n constructor(private segment: ODataSegment) {}\n get name() {\n return this.segment.name;\n }\n type(value?: string) {\n if (value !== undefined) this.segment.type = value;\n return this.segment.type;\n }\n path(value?: string) {\n if (value !== undefined) this.segment.path = value;\n return this.segment.path;\n }\n key<T>(value?: EntityKey<T>) {\n if (value !== undefined) this.segment.key = value;\n return this.segment.key as EntityKey<T>;\n }\n hasKey() {\n return !Types.isEmpty(this.segment.key);\n }\n clearKey() {\n delete this.segment.key;\n }\n parameters<T>(value?: T) {\n if (value !== undefined) this.segment.parameters = value;\n return this.segment.parameters as T;\n }\n hasParameters() {\n return !Types.isEmpty(this.segment.parameters);\n }\n clearParameters() {\n delete this.segment.parameters;\n }\n}\n\nexport class ODataPathSegmentsHandler<T> {\n constructor(protected segments: ODataPathSegments) {}\n entitySet() {\n return this.segments.get(PathSegmentNames.entitySet);\n }\n singleton() {\n return this.segments.get(PathSegmentNames.singleton);\n }\n action() {\n return this.segments.get(PathSegmentNames.action);\n }\n function() {\n return this.segments.get(PathSegmentNames.function);\n }\n keys(values?: (EntityKey<T> | undefined)[]) {\n return this.segments.keys(values);\n }\n property() {\n return this.segments.get(PathSegmentNames.property);\n }\n navigationProperty() {\n return this.segments.get(PathSegmentNames.navigationProperty);\n }\n}\n","import { PATH_SEPARATOR } from '../../constants';\nimport { PathSegmentNames } from '../../types';\nimport { Objects } from '../../utils';\nimport { buildPathAndQuery, raw } from '../query';\nimport { EntityKey } from '../resource';\nimport { SegmentHandler } from './handlers';\n\nexport type ODataSegment = {\n name: PathSegmentNames;\n path: string;\n type?: string;\n key?: any;\n parameters?: any;\n};\n\nfunction pathSegmentsBuilder(\n segment: ODataSegment,\n escape: boolean = false\n): [string, { [name: string]: any }] {\n if (segment.name === PathSegmentNames.function) {\n let [path, params] = segment.parameters\n ? buildPathAndQuery({\n func: { [segment.path]: segment.parameters },\n escape,\n })\n : buildPathAndQuery({ func: segment.path, escape });\n if (path.startsWith(PATH_SEPARATOR)) {\n path = path.slice(1);\n }\n return [path, params];\n } else {\n let key = segment.key;\n // HACK: Check guid string\n if (\n typeof key === 'string' &&\n /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(\n key\n )\n ) {\n key = raw(key);\n }\n let [path, params] = key ? buildPathAndQuery({ key, escape }) : ['', {}];\n return [segment.path + path, params];\n }\n}\n\nexport class ODataPathSegments {\n private _segments: ODataSegment[];\n\n constructor(segments?: ODataSegment[]) {\n this._segments = segments || [];\n }\n\n pathAndParams(escape: boolean = false): [string, { [name: string]: any }] {\n const result = this._segments.reduce(\n (acc, segment) => {\n const [path, params] = pathSegmentsBuilder(segment, escape);\n acc.paths.push(path);\n acc.params = Object.assign(acc.params, params);\n return acc;\n },\n { paths: [] as string[], params: {} as { [name: string]: any } }\n );\n return [result.paths.join(PATH_SEPARATOR), result.params];\n }\n\n types({ key = false }: { key?: boolean } = {}): string[] {\n return this.segments({ key })\n .map((s) => s.type())\n .filter((t) => t !== undefined) as string[];\n }\n\n keys(values?: (EntityKey<any> | undefined)[]) {\n const segments = this.segments({ key: true });\n if (values !== undefined) {\n segments.forEach((segment, index) => {\n const key = values[index];\n if (key === undefined) {\n segment.clearKey();\n } else {\n segment.key(key);\n }\n });\n }\n return segments.map((s) => s.key() as EntityKey<any> | undefined);\n }\n\n toString(): string {\n const [path, params] = this.pathAndParams();\n return (\n path +\n Object.entries(params)\n .filter(([, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('&')\n );\n }\n\n toJSON() {\n return this._segments.map((s) => {\n let json = {\n name: s.name as string,\n path: s.path,\n } as any;\n if (s.type !== undefined) json.type = s.type;\n if (s.key !== undefined) json.key = s.key;\n if (s.parameters !== undefined) json.parameters = s.parameters;\n return json;\n });\n }\n\n clone() {\n const segments = Objects.clone(this._segments);\n return new ODataPathSegments(segments);\n }\n\n find(predicate: (segment: ODataSegment) => boolean) {\n //Backward Find\n return [...this._segments].reverse().find(predicate);\n }\n\n segments({ key = false }: { key?: boolean } = {}) {\n let segments = [...this._segments];\n if (key)\n segments = segments.filter(\n (s) =>\n [\n PathSegmentNames.entitySet,\n PathSegmentNames.navigationProperty,\n PathSegmentNames.property,\n ].indexOf(s.name) !== -1\n );\n return segments.map((s) => new SegmentHandler(s));\n }\n\n first({ key = false }: { key?: boolean } = {}) {\n const segments = this.segments({ key });\n return segments.length > 0 ? segments[0] : undefined;\n }\n\n last({ key = false }: { key?: boolean } = {}) {\n const segments = this.segments({ key });\n return segments.length > 0 ? segments[segments.length - 1] : undefined;\n }\n\n add(name: string, path: string) {\n const segment = { name, path } as ODataSegment;\n this._segments.push(segment);\n return new SegmentHandler(segment);\n }\n\n get(name: string) {\n let segment = this.find((s) => s.name === name);\n if (segment === undefined)\n throw Error(`No Segment for name ${name} was found`);\n return new SegmentHandler(segment);\n }\n}\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\nimport { ODataApi } from '../api';\nimport {\n $BATCH,\n $QUERY,\n ACCEPT,\n IF_MATCH_HEADER,\n IF_NONE_MATCH_HEADER,\n PREFER,\n TEXT_PLAIN,\n} from '../constants';\nimport { QueryOptionNames } from '../types';\nimport { Http } from '../utils';\nimport { ODataResource } from './resource';\n\nexport class ODataRequest<T> {\n readonly api: ODataApi;\n readonly observe: 'events' | 'response';\n readonly reportProgress?: boolean;\n readonly withCredentials?: boolean;\n readonly bodyQueryOptions: QueryOptionNames[];\n readonly fetchPolicy:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n readonly resource: ODataResource<T>;\n private readonly _responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n private readonly _method: string;\n private readonly _body: any | null;\n private readonly _headers: HttpHeaders;\n private readonly _params: HttpParams;\n private readonly _path: string;\n private readonly _queryBody: boolean;\n\n constructor(init: {\n method: string;\n api: ODataApi;\n resource: ODataResource<T>;\n body: any;\n observe: 'events' | 'response';\n etag?: string;\n headers?: HttpHeaders | { [header: string]: string | string[] };\n reportProgress?: boolean;\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n withCredentials?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n }) {\n this._method = init.method;\n this.resource = init.resource;\n\n this.api = init.api;\n this.reportProgress = init.reportProgress;\n this.observe = init.observe;\n\n // Response Type\n this._responseType = init.responseType;\n\n // The Body\n this._body = init.body !== undefined ? init.body : null;\n if (this._body !== null) this._body = this.resource.serialize(this._body);\n\n this.withCredentials =\n init.withCredentials === undefined\n ? this.api.options.withCredentials\n : init.withCredentials;\n this.fetchPolicy = init.fetchPolicy || this.api.options.fetchPolicy;\n this.bodyQueryOptions =\n init.bodyQueryOptions || this.api.options.bodyQueryOptions;\n\n // The Path and Params from resource\n const [resourcePath, resourceParams] = this.resource.pathAndParams();\n this._path = resourcePath;\n\n //#region Headers\n const customHeaders: { [name: string]: string | string[] } = {};\n if (typeof init.etag === 'string') {\n if (\n this.api.options.etag.ifMatch &&\n ['PUT', 'PATCH', 'DELETE'].indexOf(this._method) !== -1\n )\n customHeaders[IF_MATCH_HEADER] = init.etag;\n else if (\n this.api.options.etag.ifNoneMatch &&\n ['GET'].indexOf(this._method) !== -1\n )\n customHeaders[IF_NONE_MATCH_HEADER] = init.etag;\n }\n\n const accept = [];\n // Metadata\n if (this.api.options.accept?.metadata !== undefined)\n accept.push(`odata.metadata=${this.api.options.accept?.metadata}`);\n // IEEE754\n if (this.api.options.accept?.ieee754Compatible !== undefined)\n accept.push(\n `IEEE754Compatible=${this.api.options.accept?.ieee754Compatible}`\n );\n // streaming\n if (this.api.options.accept?.streaming !== undefined)\n accept.push(`streaming=${this.api.options.accept?.streaming}`);\n // ExponentialDecimals\n if (this.api.options.accept?.exponentialDecimals !== undefined)\n accept.push(\n `ExponentialDecimals=${this.api.options.accept?.exponentialDecimals}`\n );\n if (accept.length > 0)\n customHeaders[ACCEPT] = [\n `application/json;${accept.join(';')}`,\n 'text/plain',\n '*/*',\n ];\n\n const prefer = [];\n // Return\n if (\n this.api.options.prefer?.return !== undefined &&\n ['POST', 'PUT', 'PATCH'].indexOf(this._method) !== -1\n )\n prefer.push(`return=${this.api.options.prefer?.return}`);\n // MaxPageSize\n if (\n this.api.options.prefer?.maxPageSize !== undefined &&\n ['GET'].indexOf(this._method) !== -1\n )\n prefer.push(`odata.maxpagesize=${this.api.options.prefer?.maxPageSize}`);\n // Annotations\n if (\n this.api.options.prefer?.includeAnnotations !== undefined &&\n ['GET'].indexOf(this._method) !== -1\n )\n prefer.push(\n `odata.include-annotations=${this.api.options.prefer?.includeAnnotations}`\n );\n if (\n this.api.options.prefer?.continueOnError === true &&\n ['POST'].indexOf(this._method) !== -1\n )\n prefer.push(`odata.continue-on-error`);\n if (prefer.length > 0) customHeaders[PREFER] = prefer;\n this._headers = Http.mergeHttpHeaders(\n this.api.options.headers,\n customHeaders,\n init.headers || {}\n );\n //#endregion\n\n //#region Params\n const customParams: { [name: string]: string | string[] } = {};\n if (\n ['POST', 'PUT', 'PATCH'].indexOf(this._method) !== -1 &&\n '$select' in resourceParams\n ) {\n customParams['$select'] = resourceParams['$select'];\n }\n if (['POST'].indexOf(this._method) !== -1 && '$expand' in resourceParams) {\n customParams['$expand'] = resourceParams['$expand'];\n }\n if (['GET'].indexOf(this._method) !== -1) {\n Object.assign(customParams, resourceParams);\n }\n\n const params = Http.mergeHttpParams(\n this.api.options.params,\n customParams,\n init.params || {}\n );\n\n this._params =\n this._responseType === 'entity'\n ? Http.withoutHttpParams(params, [\n '$filter',\n '$orderby',\n '$count',\n '$skip',\n '$top',\n ])\n : params;\n //#endregion\n\n this._queryBody =\n this._method === 'GET' &&\n this.bodyQueryOptions.length > 0 &&\n this.bodyQueryOptions.some((name) => this._params.has(`$${name}`));\n }\n\n get responseType(): 'arraybuffer' | 'blob' | 'json' | 'text' {\n return this._responseType &&\n ['property', 'entity', 'entities'].indexOf(this._responseType) !== -1\n ? 'json'\n : this._responseType === 'value'\n ? 'text'\n : <'arraybuffer' | 'blob' | 'json' | 'text'>this._responseType;\n }\n\n get path() {\n return this._queryBody ? `${this._path}/${$QUERY}` : this._path;\n }\n\n get method() {\n return this._queryBody ? 'POST' : this._method;\n }\n\n get body() {\n if (this._queryBody) {\n let [, bodyParams] = Http.splitHttpParams(\n this._params,\n this.bodyQueryOptions.map((name) => `$${name}`)\n );\n return bodyParams.toString();\n } else {\n return this._body;\n }\n }\n\n get params() {\n if (this._queryBody) {\n let [queryParams] = Http.splitHttpParams(\n this._params,\n this.bodyQueryOptions.map((name) => `$${name}`)\n );\n return queryParams;\n } else {\n return this._params;\n }\n }\n\n get headers() {\n if (this._queryBody) {\n return Http.mergeHttpHeaders(this._headers, { CONTENT_TYPE: TEXT_PLAIN });\n } else {\n return this._headers;\n }\n }\n\n get pathWithParams() {\n let path = this._path;\n if (this._params.keys().length > 0) {\n path = `${path}?${this._params}`;\n }\n return path;\n }\n\n get url() {\n return `${this.api.serviceRootUrl}${this._path}`;\n }\n\n get urlWithParams() {\n return `${this.api.serviceRootUrl}${this.pathWithParams}`;\n }\n\n isBatch() {\n return this._path.endsWith($BATCH);\n }\n\n isFetch() {\n return ['GET'].indexOf(this._method) !== -1;\n }\n\n isMutate() {\n return ['PUT', 'PATCH', 'POST', 'DELETE'].indexOf(this._method) !== -1;\n }\n}\n","import { AnnotationConfig } from '../types';\n\nexport class ODataAnnotation {\n term: string;\n string?: string;\n bool?: boolean;\n int?: number;\n permissions?: string[];\n properties?: string[];\n\n constructor(annot: AnnotationConfig) {\n this.term = annot.term;\n Object.assign(this, annot);\n }\n}\n\nexport class ODataAnnotatable {\n annotations: ODataAnnotation[];\n constructor(config: { annotations?: AnnotationConfig[] }) {\n this.annotations = (config.annotations || []).map(\n (annot) => new ODataAnnotation(annot)\n );\n }\n\n /**\n * Find an annotation inside the annotatable.\n * @param predicate Function that returns true if the annotation match.\n * @returns The annotation that matches the predicate.\n */\n findAnnotation(predicate: (annot: ODataAnnotation) => boolean) {\n return this.annotations.find(predicate);\n }\n\n /**\n * Find an annotation inside the annotatable and return its value.\n * @param term The term of the annotation to find.\n * @returns The value of the annotation.\n */\n annotatedValue<T>(term: string | RegExp): T | undefined {\n const reg = term instanceof RegExp ? term : new RegExp(`^${term}$`);\n const annot = this.findAnnotation((a) => reg.test(a.term));\n if (!annot) {\n return undefined;\n }\n return (annot.string ||\n annot.bool ||\n annot.int ||\n annot.permissions ||\n annot.properties) as any;\n }\n}\n","import { AnnotationConfig } from '../types';\nimport { Strings } from '../utils';\nimport { ODataAnnotatable } from './annotation';\nimport { ODataSchema } from './schema';\n\nexport class ODataSchemaElement extends ODataAnnotatable {\n name: string;\n schema: ODataSchema;\n\n constructor(\n config: { annotations?: AnnotationConfig[]; name: string },\n schema: ODataSchema\n ) {\n super(config);\n this.schema = schema;\n this.name = config.name;\n }\n\n get api() {\n return this.schema.api;\n }\n\n /**\n * Create a nicer looking title.\n * Titleize is meant for creating pretty output.\n * @param term The term of the annotation to find.\n * @returns The titleized string.\n */\n titleize(term?: string | RegExp): string {\n return (term && this.annotatedValue(term)) || Strings.titleCase(this.name);\n }\n\n /**\n * Returns a full type of the structured type including the namespace/alias.\n * @param alias Use the alias of the namespace instead of the namespace.\n * @returns The string representation of the type.\n */\n type({ alias = false }: { alias?: boolean } = {}) {\n return `${alias ? this.schema.alias : this.schema.namespace}.${this.name}`;\n }\n\n /**\n * Returns a boolean indicating if the structured type is of the given type.\n * @param type String representation of the type\n * @returns True if the callable is type of the given type\n */\n isTypeOf(type: string): boolean {\n var names = [`${this.schema.namespace}.${this.name}`];\n if (this.schema.alias) names.push(`${this.schema.alias}.${this.name}`);\n return names.indexOf(type) !== -1;\n }\n\n /**\n * Returns a boolean indicating if the structured type is a sub type of the given type.\n * @param type String representation of the type\n * @returns True if the callable is type of the given type\n */\n isSubtypeOf(schema: ODataSchemaElement): boolean {\n if (this.isTypeOf(schema.type())) return true;\n return false;\n }\n}\n","//https://github.com/niklasvh/base64-arraybuffer\nconst chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const ArrayBuffers = {\n toArrayBuffer(v: string): ArrayBuffer {\n var bufferLength = v.length * 0.75,\n len = v.length,\n i,\n p = 0,\n encoded1,\n encoded2,\n encoded3,\n encoded4;\n\n if (v[v.length - 1] === '=') {\n bufferLength--;\n if (v[v.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[v.charCodeAt(i)];\n encoded2 = lookup[v.charCodeAt(i + 1)];\n encoded3 = lookup[v.charCodeAt(i + 2)];\n encoded4 = lookup[v.charCodeAt(i + 3)];\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return arraybuffer;\n },\n toString(v: ArrayBuffer): string {\n var bytes = new Uint8Array(v),\n i,\n len = bytes.length,\n base64 = '';\n\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n },\n};\n","import { raw } from '../../resources/query';\nimport { Parser, StructuredTypeFieldOptions } from '../../types';\nimport { ArrayBuffers } from '../../utils/arraybuffers';\nimport { Duration, Durations } from '../../utils/durations';\n\n// Core EdmTypeParserBuilder\nconst EdmParser = <T>(\n _d: (v: any, o: StructuredTypeFieldOptions) => T,\n _s: (v: any, o: StructuredTypeFieldOptions) => any,\n _e: (v: any, o: StructuredTypeFieldOptions) => any\n): Parser<T | T[]> => ({\n deserialize(value: any, options: StructuredTypeFieldOptions): T | T[] {\n return Array.isArray(value)\n ? value.map((v) => _d(v, options))\n : _d(value, options);\n },\n serialize(value: any, options: StructuredTypeFieldOptions): any {\n return Array.isArray(value)\n ? value.map((v) => _s(v, options))\n : _s(value, options);\n },\n encode(value: any, options: StructuredTypeFieldOptions): any {\n return Array.isArray(value)\n ? value.map((v) => _e(v, options))\n : _e(value, options);\n },\n});\n\nconst Identity = (v: any) => v;\nconst toNumber = (v: any) => Number(v);\nconst toString = (v: any) => v.toString();\nconst toBoolean = (v: any) => Boolean(v);\nconst toDate = (v: any) => new Date(v);\n\nexport const EDM_PARSERS: { [type: string]: Parser<any> } = {\n //Edm.Guid 16-byte (128-bit) unique identifier\n 'Edm.Guid': EdmParser<string>(Identity, Identity, (v: string) => raw(v)),\n //Edm.Int16 Signed 16-bit integer\n 'Edm.Int16': EdmParser<number>(toNumber, toNumber, toNumber),\n //Edm.String Sequence of UTF-8 characters\n 'Edm.String': EdmParser<string>(toString, toString, toString),\n //Edm.Boolean Binary-valued logic\n 'Edm.Boolean': EdmParser<boolean>(toBoolean, toBoolean, toBoolean),\n //Edm.Byte Unsigned 8-bit integer\n 'Edm.Byte': EdmParser<number>(toNumber, toNumber, toNumber),\n //Edm.SByte Signed 8-bit integer\n 'Edm.SByte': EdmParser<number>(toNumber, toNumber, toNumber),\n //Edm.Int32 Signed 16-bit integer\n 'Edm.Int32': EdmParser<number>(toNumber, toNumber, toNumber),\n //Edm.Int64 Signed 16-bit integer\n 'Edm.Int64': EdmParser<number>(toNumber, toNumber, toNumber),\n //Edm.Date Date without a time-zone offset\n 'Edm.Date': EdmParser<Date>(\n (v: any) => new Date(`${v}T00:00:00.000Z`),\n (v: any) => toDate(v).toISOString().substring(0, 10),\n (v: any) => toDate(v).toISOString().substring(0, 10)\n ),\n //Edm.TimeOfDay Clock time 00:00-23:59:59.999999999999\n 'Edm.TimeOfDay': EdmParser<Date>(\n (v: any) => new Date(`1970-01-01T${v}Z`),\n (v: any) => toDate(v).toISOString().substring(11, 23),\n (v: any) => toDate(v).toISOString().substring(11, 23)\n ),\n //Edm.DateTimeOffset Date and time with a time-zone offset, no leap seconds\n 'Edm.DateTimeOffset': EdmParser<Date>(\n toDate,\n (v: any) => toDate(v).toISOString(),\n (v: any) => toDate(v).toISOString()\n ),\n //Edm.Duration Signed duration in days, hours, minutes, and (sub)seconds\n 'Edm.Duration': EdmParser<Duration>(\n (v: any) => Durations.toDuration(v),\n (v: Duration) => Durations.toString(v),\n (v: Duration) => Durations.toString(v)\n ),\n //Edm.Decimal Numeric values with fixed precision and scale\n 'Edm.Decimal': EdmParser<number>(\n (v: any, o: StructuredTypeFieldOptions) => {\n if (typeof v === 'string' && o.ieee754Compatible) {\n return parseFloat(v);\n }\n return v;\n },\n (v: number, o: StructuredTypeFieldOptions) => {\n if (o.ieee754Compatible) {\n return parseFloat(v.toPrecision(o.field.precision)).toFixed(\n o.field.scale\n );\n }\n return v;\n },\n (v: number, o: StructuredTypeFieldOptions) => {\n if (o.ieee754Compatible) {\n return parseFloat(v.toPrecision(o.field.precision)).toFixed(\n o.field.scale\n );\n }\n return v;\n }\n ),\n //Edm.Double IEEE 754 binary64 floating-point number (15-17 decimal digits)\n 'Edm.Double': EdmParser<number>(\n (v: any) => (v === 'INF' ? Infinity : (v as number)),\n (v: number) => (v === Infinity ? 'INF' : v),\n (v: number) => (v === Infinity ? 'INF' : v)\n ),\n //Edm.Single IEEE 754 binary32 floating-point number (6-9 decimal digits)\n 'Edm.Single': EdmParser<number>(\n (v: any) => (v === 'INF' ? Infinity : (v as number)),\n (v: number) => (v === Infinity ? 'INF' : v),\n (v: number) => (v === Infinity ? 'INF' : v)\n ),\n //Edm.Binary Binary data\n 'Edm.Binary': EdmParser<ArrayBuffer>(\n (v: string) => ArrayBuffers.toArrayBuffer(v),\n (v: ArrayBuffer) => ArrayBuffers.toString(v),\n (v: ArrayBuffer) => ArrayBuffers.toString(v)\n ),\n};\n\n/*\nEdm.Stream Binary data stream\nEdm.Geography Abstract base type for all Geography types\nEdm.GeographyPoint A point in a round-earth coordinate system\nEdm.GeographyLineString Line string in a round-earth coordinate system\nEdm.GeographyPolygon Polygon in a round-earth coordinate system\nEdm.GeographyMultiPoint Collection of points in a round-earth coordinate system\nEdm.GeographyMultiLineString Collection of line strings in a round-earth coordinate system\nEdm.GeographyMultiPolygon Collection of polygons in a round-earth coordinate system\nEdm.GeographyCollection Collection of arbitrary Geography values\nEdm.Geometry Abstract base type for all Geometry types\nEdm.GeometryPoint Point in a flat-earth coordinate system\nEdm.GeometryLineString Line string in a flat-earth coordinate system\nEdm.GeometryPolygon Polygon in a flat-earth coordinate system\nEdm.GeometryMultiPoint Collection of points in a flat-earth coordinate system\nEdm.GeometryMultiLineString Collection of line strings in a flat-earth coordinate system\nEdm.GeometryMultiPolygon Collection of polygons in a flat-earth coordinate system\nEdm.GeometryCollection Collection of arbitrary Geometry values\n*/\n","import {\n VERSION_3_0,\n VERSION_2_0,\n VERSION_4_0,\n $COUNT,\n $INLINECOUNT,\n} from './constants';\nimport { ODataMetadataType } from './types';\n\nexport const COLLECTION = /Collection\\(([\\w\\.]+)\\)/;\nexport const PROPERTY = /([\\w\\d\\-_]+)\\(([\\'\\w\\d\\-_=]+)\\)/;\nexport const EXPAND = /([\\w\\d\\-_]+)\\(([\\w\\d\\,\\(\\)]+)\\)/;\n\nexport type ODataContext = {\n serviceRootUrl?: string;\n metadataUrl?: string;\n entitySet?: string;\n key?: string;\n expand?: string;\n type?: string;\n property?: string;\n entity?: boolean;\n};\n\nexport interface ODataVersionHelper {\n VALUE: string;\n ODATA_ANNOTATION_PREFIX: string;\n ODATA_FUNCTION_PREFIX: string;\n ODATA_ID: string;\n ODATA_COUNT: string;\n ODATA_ETAG: string;\n ODATA_CONTEXT: string;\n ODATA_MEDIA_ETAG: string;\n entity(value: { [name: string]: any }): any;\n entities(value: { [name: string]: any }): any;\n property(value: { [name: string]: any }): any;\n annotations(value: { [name: string]: any }): { [name: string]: any };\n attributes(value: { [name: string]: any }, metadata: ODataMetadataType): any;\n //Get or Set Id\n id(value: { [name: string]: any }, id?: string): string | undefined;\n //Get or Set Etag\n etag(value: { [name: string]: any }, etag?: string): string | undefined;\n //Get or Set Type\n type(value: { [name: string]: any }, type?: string): string | undefined;\n count(value: { [name: string]: any }): number | undefined;\n context(value: { [name: string]: any }): ODataContext;\n functions(value: { [name: string]: any }): { [name: string]: any };\n properties(value: { [name: string]: any }): { [name: string]: any };\n mediaEtag(value: { [name: string]: any }): string | undefined;\n metadataEtag(value: { [name: string]: any }): string | undefined;\n nextLink(value: { [name: string]: any }): string | undefined;\n readLink(value: { [name: string]: any }): string | undefined;\n mediaReadLink(value: { [name: string]: any }): string | undefined;\n editLink(value: { [name: string]: any }): string | undefined;\n mediaEditLink(value: { [name: string]: any }): string | undefined;\n mediaContentType(value: { [name: string]: any }): string | undefined;\n deltaLink(value: { [name: string]: any }): string | undefined;\n countParam(): { [name: string]: string };\n}\n\nconst ODataVersionBaseHelper = <any>{\n entity(data: { [name: string]: any }) {\n return data;\n },\n entities(data: { [name: string]: any }) {\n return data[this.VALUE];\n },\n property(data: { [name: string]: any }) {\n return this.VALUE in data ? data[this.VALUE] : data;\n },\n functions(value: { [name: string]: any }) {\n return Object.keys(value)\n .filter((k) => k.startsWith(this.ODATA_FUNCTION_PREFIX))\n .reduce(\n (acc, key) => Object.assign(acc, { [key.substr(1)]: value[key] }),\n {}\n );\n },\n properties(value: { [name: string]: any }) {\n return Object.keys(value)\n .filter((k) => k.indexOf(this.ODATA_ANNOTATION_PREFIX) > 0)\n .reduce((acc: { [name: string]: any }, key) => {\n let name = key.substr(0, key.indexOf(this.ODATA_ANNOTATION_PREFIX));\n if (!(name in acc)) {\n acc[name] = {};\n }\n Object.assign(acc[name], {\n [key.substr(key.indexOf(this.ODATA_ANNOTATION_PREFIX))]: value[key],\n });\n return acc;\n }, {});\n },\n id(value: { [name: string]: any }, id?: string) {\n if (id !== undefined) value[this.ODATA_ID] = id;\n return this.ODATA_ID in value\n ? (value[this.ODATA_ID] as string)\n : undefined;\n },\n etag(value: { [name: string]: any }, etag?: string) {\n if (etag !== undefined) value[this.ODATA_ETAG] = etag;\n return this.ODATA_ETAG in value\n ? (value[this.ODATA_ETAG] as string)\n : undefined;\n },\n type(value: { [name: string]: any }, type?: string) {\n if (type !== undefined) value[this.ODATA_TYPE] = `#${type}`;\n if (!(this.ODATA_TYPE in value)) return undefined;\n const t = value[this.ODATA_TYPE].substr(1);\n const matches = COLLECTION.exec(t);\n if (matches)\n return matches[1].indexOf('.') === -1 ? `Edm.${matches[1]}` : matches[1];\n return t;\n },\n mediaEtag(value: { [name: string]: any }) {\n return this.ODATA_MEDIA_ETAG in value\n ? decodeURIComponent(value[this.ODATA_MEDIA_ETAG] as string)\n : undefined;\n },\n metadataEtag(value: { [name: string]: any }) {\n return this.ODATA_METADATA_ETAG in value\n ? decodeURIComponent(value[this.ODATA_METADATA_ETAG] as string)\n : undefined;\n },\n count(value: { [name: string]: any }) {\n return this.ODATA_COUNT in value\n ? Number(value[this.ODATA_COUNT])\n : undefined;\n },\n annotations(value: { [name: string]: any }) {\n return Object.keys(value)\n .filter(\n (key) =>\n key.indexOf(this.ODATA_ANNOTATION_PREFIX) !== -1 ||\n key.startsWith(this.ODATA_FUNCTION_PREFIX)\n )\n .reduce((acc, key) => Object.assign(acc, { [key]: value[key] }), {});\n },\n attributes(value: { [name: string]: any }, metadata: ODataMetadataType) {\n return Object.entries(value)\n .filter(\n ([k]) =>\n metadata === 'none' ||\n (metadata === 'minimal' &&\n (k.indexOf(this.ODATA_ANNOTATION_PREFIX) === -1 ||\n k.startsWith(this.ODATA_ANNOTATION_PREFIX)) &&\n !k.startsWith(this.ODATA_FUNCTION_PREFIX)) ||\n (metadata === 'full' &&\n k.indexOf(this.ODATA_ANNOTATION_PREFIX) === -1 &&\n !k.startsWith(this.ODATA_FUNCTION_PREFIX))\n )\n .reduce((acc, e) => ({ ...acc, [e[0]]: e[1] }), {});\n },\n nextLink(value: { [name: string]: any }) {\n return this.ODATA_NEXTLINK in value\n ? decodeURIComponent(value[this.ODATA_NEXTLINK] as string)\n : undefined;\n },\n readLink(value: { [name: string]: any }) {\n return this.ODATA_READLINK in value\n ? decodeURIComponent(value[this.ODATA_READLINK] as string)\n : undefined;\n },\n mediaReadLink(value: { [name: string]: any }) {\n return this.ODATA_MEDIA_READLINK in value\n ? decodeURIComponent(value[this.ODATA_MEDIA_READLINK] as string)\n : undefined;\n },\n editLink(value: { [name: string]: any }) {\n return this.ODATA_EDITLINK in value\n ? decodeURIComponent(value[this.ODATA_EDITLINK] as string)\n : undefined;\n },\n mediaEditLink(value: { [name: string]: any }) {\n return this.ODATA_MEDIA_EDITLINK in value\n ? decodeURIComponent(value[this.ODATA_MEDIA_EDITLINK] as string)\n : undefined;\n },\n deltaLink(value: { [name: string]: any }) {\n return this.ODATA_DELTALINK in value\n ? decodeURIComponent(value[this.ODATA_DELTALINK] as string)\n : undefined;\n },\n mediaContentType(value: { [name: string]: any }) {\n return this.ODATA_MEDIA_CONTENTTYPE in value\n ? decodeURIComponent(value[this.ODATA_MEDIA_CONTENTTYPE] as string)\n : undefined;\n },\n};\n\nexport const ODataHelper = {\n //#region Version 4.0\n [VERSION_4_0]: <ODataVersionHelper>Object.assign({}, ODataVersionBaseHelper, {\n VALUE: 'value',\n ODATA_ANNOTATION_PREFIX: '@odata',\n ODATA_FUNCTION_PREFIX: '#',\n //odata.id: the ID of the entity\n ODATA_ID: '@odata.id',\n //odata.count: the total count of a collection of entities or collection of entity references, if requested.\n ODATA_COUNT: '@odata.count',\n //odata.context: the context URL for a collection, entity, primitive value, or service document.\n ODATA_CONTEXT: '@odata.context',\n //odata.etag: the ETag of the entity\n ODATA_ETAG: '@odata.etag',\n ODATA_METADATA_ETAG: '@odata.metadataEtag',\n //odata.type: the type of the containing {[name: string]: any} or targeted property if the type of the {[name: string]: any} or targeted property cannot be heuristically determined\n ODATA_TYPE: '@odata.type',\n //odata.nextLink: the next link of a collection with partial results\n ODATA_NEXTLINK: '@odata.nextLink',\n //odata.deltaLink: the delta link for obtaining changes to the result, if requested\n ODATA_DELTALINK: '@odata.deltaLink',\n //odata.readLink: the link used to read the entity, if the edit link cannot be used to read the entity\n ODATA_READLINK: '@odata.readLink',\n //odata.editLink: the link used to edit/update the entity, if the entity is updatable and the odata.id does not represent a URL that can be used to edit the entity\n ODATA_EDITLINK: '@odata.editLink',\n //odata.associationLink: the link used to describe the relationship between this entity and related entities\n ODATA_ASSOCIATIONLINK: '@odata.associationLink',\n //odata.navigationLink: the link used to retrieve the values of a navigation property\n ODATA_NAVIGATIONLINK: '@odata.navigationLink',\n //Media entities and stream properties may in addition contain the following annotations:\n //odata.mediaEtag: the ETag of the stream, as appropriate\n ODATA_MEDIA_ETAG: '@odata.mediaEtag',\n //odata.mediaContentType: the content type of the stream\n ODATA_MEDIA_CONTENTTYPE: '@odata.mediaContentType',\n //odata.mediaReadLink: the link used to read the stream\n ODATA_MEDIA_READLINK: '@odata.mediaReadLink',\n //odata.mediaEditLink: the link used to edit/update the stream\n ODATA_MEDIA_EDITLINK: '@odata.mediaEditLink',\n //http://nb-mdp-dev01:57970/$metadata#recursos/$entity\n //http://nb-mdp-dev01:57970/$metadata#categorias\n //http://nb-mdp-dev01:57970/$metadata#juzgados\n //http://nb-mdp-dev01:57970/$metadata#Collection(SIU.Recursos.RecursoEntry)\n //http://nb-mdp-dev01:57970/$metadata#categorias/$entity\n //http://nb-mdp-dev01:57970/$metadata#categorias(children(children(children(children(children(children(children(children(children(children()))))))))))/$entity\n //http://nb-mdp-dev01:57970/$metadata#recursos/SIU.Documentos.Documento/$entity\n //http://nb-mdp-dev01:57970/$metadata#SIU.Api.Infrastructure.Storage.Backend.SiuUrls\n context(value: { [name: string]: any }) {\n let ctx: ODataContext = {};\n if (this.ODATA_CONTEXT in value) {\n const str = value[this.ODATA_CONTEXT] as string;\n let index = str.indexOf('$metadata');\n ctx.serviceRootUrl = str.substr(0, index);\n index = str.indexOf('#');\n ctx.metadataUrl = str.substr(0, index);\n const parts = str.substr(index + 1).split('/');\n const col = COLLECTION.exec(parts[0]);\n if (col) {\n ctx.type = col[1];\n } else if (parts[0].indexOf('.') !== -1) {\n ctx.type = parts[0];\n } else {\n const property = parts[0].match(PROPERTY);\n const expand = parts[0].match(EXPAND);\n ctx.entity = parts[1] === '$entity';\n if (property) {\n ctx.entitySet = property[1];\n ctx.key = property[2];\n ctx.property = parts[1];\n } else if (expand) {\n ctx.entitySet = expand[1];\n ctx.expand = expand[2];\n } else {\n ctx.entitySet = parts[0];\n }\n }\n }\n return ctx;\n },\n countParam() {\n return { [$COUNT]: 'true' };\n },\n }),\n //#endregion\n //#region Version 3.0\n [VERSION_3_0]: <ODataVersionHelper>Object.assign({}, ODataVersionBaseHelper, {\n ODATA_ANNOTATION_PREFIX: 'odata.',\n ODATA_FUNCTION_PREFIX: '',\n ODATA_ID: 'odata.id',\n ODATA_ETAG: 'odata.etag',\n ODATA_CONTEXT: 'odata.metadata',\n ODATA_NEXTLINK: 'odata.nextLink',\n ODATA_TYPE: 'odata.type',\n ODATA_COUNT: 'odata.count',\n VALUE: 'value',\n context(value: { [name: string]: any }) {\n let ctx: ODataContext = {};\n if (this.ODATA_CONTEXT in value) {\n const str = value[this.ODATA_CONTEXT] as string;\n let index = str.indexOf('$metadata');\n ctx.serviceRootUrl = str.substr(0, index);\n index = str.indexOf('#');\n ctx.metadataUrl = str.substr(0, index);\n const parts = str.substr(index + 1).split('/');\n ctx.entitySet = parts[0];\n }\n return ctx;\n },\n countParam() {\n return { [$INLINECOUNT]: 'allpages' };\n },\n }),\n //#endregion\n //#region Version 2.0\n [VERSION_2_0]: <ODataVersionHelper>Object.assign({}, ODataVersionBaseHelper, {\n ODATA_ID: 'id',\n ODATA_ETAG: 'etag',\n ODATA_ANNOTATION: '__metadata',\n ODATA_NEXTLINK: '__next',\n ODATA_COUNT: '__count',\n ODATA_DEFERRED: '__deferred',\n ODATA_TYPE: 'type',\n VALUE: 'results',\n annotations(value: { [name: string]: any }) {\n if (this.ODATA_ANNOTATION in value) return value[this.ODATA_ANNOTATION];\n return value;\n },\n attributes(value: { [name: string]: any }, metadata: ODataMetadataType) {\n return value;\n },\n countParam() {\n return { [$INLINECOUNT]: 'allpages' };\n },\n }),\n //#endregion\n};\n","import {\n ApiOptions,\n FetchPolicy,\n ODataMetadataType,\n ODataVersion,\n Options,\n OptionsHelper,\n QueryOptionNames,\n} from './types';\nimport {\n DEFAULT_FETCH_POLICY,\n DEFAULT_STRIP_METADATA,\n DEFAULT_VERSION,\n} from './constants';\n\nimport { ODataHelper } from './helper';\n\nexport class ODataApiOptions implements ApiOptions, OptionsHelper {\n /**\n * Default OData version\n */\n version: ODataVersion;\n /**\n * Send enum as string in the request\n */\n stringAsEnum?: boolean;\n /**\n * Strip metadata from the response\n */\n stripMetadata: ODataMetadataType;\n /**\n * Cache fetch policy\n */\n fetchPolicy: FetchPolicy;\n /**\n * Extra params to be sent in the request\n */\n params: { [param: string]: string | string[] };\n /**\n * Extra headers to be sent in the request\n */\n headers: { [param: string]: string | string[] };\n /**\n * Http request with credentials\n */\n withCredentials?: boolean;\n /**\n * Send query options in the request body\n */\n bodyQueryOptions: QueryOptionNames[];\n /**\n * Customize accept header with OData options\n * @link http://docs.oasis-open.org/odata/odata-json-format/v4.01/odata-json-format-v4.01.html#sec_RequestingtheJSONFormat\n */\n accept?: {\n exponentialDecimals?: boolean;\n ieee754Compatible?: boolean;\n metadata?: ODataMetadataType;\n streaming?: boolean;\n };\n etag: {\n /**\n * @link http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398229\n */\n ifMatch: boolean;\n /**\n * @link http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398230\n */\n ifNoneMatch: boolean;\n } = { ifMatch: true, ifNoneMatch: false };\n prefer?: {\n /**\n * @link http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398238\n */\n maxPageSize?: number;\n /**\n * @link http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398240\n */\n return?: 'representation' | 'minimal';\n /**\n * @link http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398236\n */\n continueOnError?: boolean;\n /**\n * @link http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398237\n */\n includeAnnotations?: string;\n };\n deleteRefBy: 'path' | 'id';\n\n constructor(config: ApiOptions) {\n this.version = config.version || DEFAULT_VERSION;\n this.stringAsEnum = config.stringAsEnum;\n this.params = config.params || {};\n this.headers = config.headers || {};\n this.withCredentials = config.withCredentials;\n this.stripMetadata = config.stripMetadata || DEFAULT_STRIP_METADATA;\n this.fetchPolicy = config.fetchPolicy || DEFAULT_FETCH_POLICY;\n this.bodyQueryOptions = config.bodyQueryOptions || [];\n this.accept = config.accept;\n Object.assign(this.etag, config.etag || {});\n this.prefer = config.prefer;\n this.deleteRefBy = config.deleteRefBy || 'path';\n }\n\n get helper() {\n return ODataHelper[this.version];\n }\n}\n\nexport class ODataParserOptions implements OptionsHelper {\n version: ODataVersion;\n stringAsEnum?: boolean;\n\n constructor(config: Options) {\n this.version = config.version || DEFAULT_VERSION;\n this.stringAsEnum = config.stringAsEnum;\n }\n\n get helper() {\n return ODataHelper[this.version];\n }\n}\n","import { ODataParserOptions } from '../../options';\nimport { raw } from '../../resources/query';\nimport {\n EnumTypeConfig,\n EnumTypeFieldConfig,\n Options,\n OptionsHelper,\n Parser,\n} from '../../types';\nimport { Enums, Strings } from '../../utils';\nimport { ODataAnnotatable } from '../annotation';\n\nexport class ODataEnumTypeFieldParser extends ODataAnnotatable {\n name: string;\n value: number;\n\n constructor(name: string, field: EnumTypeFieldConfig) {\n super(field);\n this.name = name;\n this.value = field.value;\n }\n\n titleize(term?: string | RegExp): string {\n return (term && this.annotatedValue(term)) || this.name;\n }\n}\n\nexport class ODataEnumTypeParser<T>\n extends ODataAnnotatable\n implements Parser<T>\n{\n name: string;\n namespace: string;\n alias?: string;\n flags?: boolean;\n members: { [name: string]: number } | { [value: number]: string };\n fields: ODataEnumTypeFieldParser[];\n optionsHelper?: OptionsHelper;\n\n constructor(config: EnumTypeConfig<T>, namespace: string, alias?: string) {\n super(config);\n this.name = config.name;\n this.namespace = namespace;\n this.alias = alias;\n this.flags = config.flags;\n this.members = config.members;\n this.fields = Object.entries(config.fields).map(\n ([name, f]) => new ODataEnumTypeFieldParser(name, f)\n );\n }\n\n /**\n * Create a nicer looking title.\n * Titleize is meant for creating pretty output.\n * @param term The term of the annotation to find.\n * @returns The titleized string.\n */\n ttitelize(term?: string | RegExp): string {\n return (term && this.annotatedValue(term)) || Strings.titleCase(this.name);\n }\n\n configure({ options }: { options: OptionsHelper }) {\n this.optionsHelper = options;\n }\n\n isTypeOf(type: string) {\n var names = [`${this.namespace}.${this.name}`];\n if (this.alias) names.push(`${this.alias}.${this.name}`);\n return names.indexOf(type) !== -1;\n }\n\n // Deserialize\n deserialize(value: string, options?: Options): T {\n // string -> number\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.flags) {\n return Enums.toValues(this.members, value).reduce(\n (acc, v) => acc | v,\n 0\n ) as any;\n } else {\n return Enums.toValue(this.members, value) as any;\n }\n }\n\n // Serialize\n serialize(value: T, options?: Options): string {\n // Enum are string | number\n // string | number -> string\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.flags) {\n const names = Enums.toNames(this.members, value);\n return !parserOptions?.stringAsEnum\n ? `${this.namespace}.${this.name}'${names.join(', ')}'`\n : names.join(', ');\n } else {\n const name = Enums.toName(this.members, value);\n return !parserOptions?.stringAsEnum\n ? `${this.namespace}.${this.name}'${name}'`\n : name;\n }\n }\n\n //Encode\n encode(value: T, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n const serialized = this.serialize(value, parserOptions);\n return parserOptions?.stringAsEnum\n ? raw(`'${serialized}'`)\n : raw(serialized);\n }\n\n // Json Schema\n toJsonSchema() {\n let property = <any>{\n title: this.name,\n type: 'string',\n };\n property.enum = this.fields.map((f) => f.name);\n return property;\n }\n\n validate(\n member: string | number,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}\n ): string[] | undefined {\n if (this.flags) {\n let members = Enums.toValues(this.members, member);\n return members.some((member) => !(member in this.members))\n ? ['mismatch']\n : undefined;\n } else {\n return !(member in this.members) ? ['mismatch'] : undefined;\n }\n }\n}\n","import { COMPUTED, DESCRIPTION, LONG_DESCRIPTION } from '../../constants';\nimport { ODataParserOptions } from '../../options';\nimport { raw } from '../../resources/query';\nimport {\n NONE_PARSER,\n Options,\n OptionsHelper,\n Parser,\n StructuredTypeConfig,\n StructuredTypeFieldConfig,\n StructuredTypeFieldOptions,\n} from '../../types';\nimport { Objects, Strings, Types } from '../../utils';\nimport { ODataAnnotatable } from '../annotation';\nimport { ODataEnumTypeParser } from './enum-type';\n\n// JSON SCHEMA\ntype JsonSchemaSelect<T> = Array<keyof T>;\ntype JsonSchemaCustom<T> = {\n [P in keyof T]?: (\n schema: any,\n field: ODataStructuredTypeFieldParser<T[P]>\n ) => any;\n};\ntype JsonSchemaExpand<T> = { [P in keyof T]?: JsonSchemaOptions<T[P]> };\ntype JsonSchemaRequired<T> = { [P in keyof T]?: boolean };\nexport type JsonSchemaOptions<T> = {\n select?: JsonSchemaSelect<T>;\n custom?: JsonSchemaCustom<T>;\n expand?: JsonSchemaExpand<T>;\n required?: JsonSchemaRequired<T>;\n};\n\nexport class ODataEntityTypeKey {\n name: string;\n alias?: string;\n constructor({ name, alias }: { name: string; alias?: string }) {\n this.name = name;\n this.alias = alias;\n }\n}\n\nexport class ODataReferential {\n property: string;\n referencedProperty: string;\n constructor({\n property,\n referencedProperty,\n }: {\n property: string;\n referencedProperty: string;\n }) {\n this.property = property;\n this.referencedProperty = referencedProperty;\n }\n}\n\nexport class ODataStructuredTypeFieldParser<T>\n extends ODataAnnotatable\n implements Parser<T>\n{\n name: string;\n private structuredType: ODataStructuredTypeParser<any>;\n type: string;\n private parser: Parser<T>;\n default?: any;\n maxLength?: number;\n collection: boolean;\n nullable: boolean;\n navigation: boolean;\n precision?: number;\n scale?: number;\n referentials: ODataReferential[];\n optionsHelper?: OptionsHelper;\n\n constructor(\n name: string,\n structuredType: ODataStructuredTypeParser<any>,\n field: StructuredTypeFieldConfig\n ) {\n super(field);\n this.name = name;\n this.structuredType = structuredType;\n this.type = field.type;\n this.parser = NONE_PARSER;\n this.referentials = (field.referentials || []).map(\n (referential) => new ODataReferential(referential)\n );\n this.default = field.default;\n this.maxLength = field.maxLength;\n this.nullable = field.nullable !== undefined ? field.nullable : true;\n this.collection = Boolean(field.collection);\n this.navigation = Boolean(field.navigation);\n this.precision = field.precision;\n this.scale = field.scale;\n }\n\n validate(\n value: any,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}\n ):\n | { [name: string]: any }\n | { [name: string]: any }[]\n | string[]\n | undefined {\n let errors;\n if (this.collection && Array.isArray(value)) {\n errors = value.map((v) => this.validate(v, { method, navigation })) as {\n [name: string]: any[];\n }[];\n } else if (\n (this.isStructuredType() &&\n typeof value === 'object' &&\n value !== null) ||\n (this.navigation && value !== undefined)\n ) {\n errors =\n this.structured().validate(value, { method, navigation }) ||\n ({} as { [name: string]: any[] });\n } else if (\n this.isEnumType() &&\n (typeof value === 'string' || typeof value === 'number')\n ) {\n errors = this.enum().validate(value, { method, navigation });\n } else {\n // IsEdmType\n const computed = this.annotatedValue<boolean>(COMPUTED);\n errors = [];\n if (\n !this.nullable &&\n (value === null || (value === undefined && method !== 'modify')) && // Is null or undefined without patch?\n !(computed && method === 'create') // Not (Is Computed field and create) ?\n ) {\n errors.push(`required`);\n }\n if (\n this.maxLength !== undefined &&\n typeof value === 'string' &&\n value.length > this.maxLength\n ) {\n errors.push(`maxlength`);\n }\n }\n return !Types.isEmpty(errors) ? errors : undefined;\n }\n\n //#region Deserialize\n private parse(\n parser: ODataStructuredTypeParser<T>,\n value: any,\n options?: OptionsHelper\n ): any {\n const type = Types.isPlainObject(value)\n ? options?.helper.type(value)\n : undefined;\n if (type !== undefined) {\n return parser\n .childParser((c) => c.isTypeOf(type))\n .deserialize(value, options);\n }\n return parser.deserialize(value, options);\n }\n\n deserialize(value: any, options?: Options): T {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.parser instanceof ODataStructuredTypeParser) {\n const parser = this.parser as ODataStructuredTypeParser<T>;\n return Array.isArray(value)\n ? value.map((v) => this.parse(parser, v, parserOptions))\n : this.parse(parser, value, parserOptions);\n }\n return this.parser.deserialize(value, {\n field: this,\n ...parserOptions,\n } as StructuredTypeFieldOptions);\n }\n //#endregion\n\n //#region Serialize\n private toJson(\n parser: ODataStructuredTypeParser<T>,\n value: any,\n options?: OptionsHelper\n ): any {\n const type = Types.isPlainObject(value)\n ? options?.helper.type(value)\n : undefined;\n if (type !== undefined) {\n return parser\n .childParser((c) => c.isTypeOf(type))\n .serialize(value, options);\n }\n return parser.serialize(value, options);\n }\n\n serialize(value: T, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.parser instanceof ODataStructuredTypeParser) {\n const parser = this.parser as ODataStructuredTypeParser<T>;\n return Array.isArray(value)\n ? (value as any[]).map((v) => this.toJson(parser, v, parserOptions))\n : this.toJson(parser, value, parserOptions);\n }\n return this.parser.serialize(value, {\n field: this,\n ...parserOptions,\n } as StructuredTypeFieldOptions);\n }\n //#endregion\n\n //#region Encode\n encode(value: T, options?: Options): string {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return this.parser.encode(value, {\n field: this,\n ...parserOptions,\n } as StructuredTypeFieldOptions);\n }\n //#endregion\n\n configure({\n parserForType,\n options,\n }: {\n parserForType: (type: string) => Parser<any>;\n options: OptionsHelper;\n }) {\n this.optionsHelper = options;\n this.parser = parserForType(this.type);\n if (this.default !== undefined) {\n this.default = this.deserialize(this.default, options);\n }\n }\n\n //#region Json Schema\n // https://json-schema.org/\n toJsonSchema(options: JsonSchemaOptions<T> = {}) {\n let schema: any =\n this.parser instanceof ODataStructuredTypeFieldParser ||\n this.parser instanceof ODataStructuredTypeParser ||\n this.parser instanceof ODataEnumTypeParser\n ? this.parser.toJsonSchema(options)\n : ({ title: this.name, type: 'object' } as any);\n\n if (\n [\n 'Edm.String',\n 'Edm.Date',\n 'Edm.TimeOfDay',\n 'Edm.DateTimeOffset',\n 'Edm.Guid',\n 'Edm.Binary',\n ].indexOf(this.type) !== -1\n ) {\n schema.type = 'string';\n if (this.type === 'Edm.Date') schema.format = 'date';\n else if (this.type === 'Edm.TimeOfDay') schema.format = 'time';\n else if (this.type === 'Edm.DateTimeOffset') schema.format = 'date-time';\n else if (this.type === 'Edm.Guid')\n schema.pattern =\n '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$';\n else if (this.type === 'Edm.Binary') schema.contentEncoding = 'base64';\n else if (this.type === 'Edm.String' && this.maxLength)\n schema.maxLength = this.maxLength;\n } else if (\n ['Edm.Int64', 'Edm.Int32', 'Edm.Int16', 'Edm.Byte', 'Edm.SByte'].indexOf(\n this.type\n ) !== -1\n ) {\n //TODO: Range\n schema.type = 'integer';\n } else if (['Edm.Decimal', 'Edm.Double'].indexOf(this.type) !== -1) {\n schema.type = 'number';\n } else if (['Edm.Boolean'].indexOf(this.type) !== -1) {\n schema.type = 'boolean';\n }\n if (this.default) schema.default = this.default;\n if (this.nullable) schema.type = [schema.type, 'null'];\n if (this.collection)\n schema = {\n type: 'array',\n items: schema,\n additionalItems: false,\n };\n return schema;\n }\n //#endregion\n\n isKey() {\n return (\n this.structuredType.keys?.find((k) => k.name === this.name) !== undefined\n );\n }\n\n hasReferentials() {\n return this.referentials.length !== 0;\n }\n\n isEdmType() {\n return this.type.startsWith('Edm.');\n }\n\n isEnumType() {\n return this.parser instanceof ODataEnumTypeParser;\n }\n\n enum() {\n if (!this.isEnumType()) throw new Error('Field are not EnumType');\n return this.parser as ODataEnumTypeParser<T>;\n }\n\n isStructuredType() {\n return this.parser instanceof ODataStructuredTypeParser;\n }\n\n structured() {\n if (!this.isStructuredType())\n throw new Error('Field are not StrucuturedType');\n return this.parser as ODataStructuredTypeParser<T>;\n }\n}\n\nexport class ODataStructuredTypeParser<T>\n extends ODataAnnotatable\n implements Parser<T>\n{\n name: string;\n namespace: string;\n open: boolean;\n children: ODataStructuredTypeParser<any>[] = [];\n alias?: string;\n base?: string;\n parent?: ODataStructuredTypeParser<any>;\n keys?: ODataEntityTypeKey[];\n fields: ODataStructuredTypeFieldParser<any>[];\n optionsHelper?: OptionsHelper;\n\n constructor(\n config: StructuredTypeConfig<T>,\n namespace: string,\n alias?: string\n ) {\n super(config);\n this.name = config.name;\n this.base = config.base;\n this.open = config.open || false;\n this.namespace = namespace;\n this.alias = alias;\n if (Array.isArray(config.keys))\n this.keys = config.keys.map((key) => new ODataEntityTypeKey(key));\n this.fields = Object.entries<StructuredTypeFieldConfig>(\n config.fields as { [P in keyof T]: StructuredTypeFieldConfig }\n ).map(\n ([name, config]) => new ODataStructuredTypeFieldParser(name, this, config)\n );\n }\n\n /**\n * Create a nicer looking title.\n * Titleize is meant for creating pretty output.\n * @param term The term of the annotation to find.\n * @returns The titleized string.\n */\n titleize(term?: string | RegExp): string {\n return (term && this.annotatedValue(term)) || Strings.titleCase(this.name);\n }\n\n isTypeOf(type: string) {\n var names = [`${this.namespace}.${this.name}`];\n if (this.alias) names.push(`${this.alias}.${this.name}`);\n return names.indexOf(type) !== -1;\n }\n\n isSubtypeOf(type: string): boolean {\n if (this.isTypeOf(type)) return true;\n if (this.parent) return this.parent.isSubtypeOf(type);\n return false;\n }\n\n findChildParser(\n predicate: (p: ODataStructuredTypeParser<any>) => boolean\n ): ODataStructuredTypeParser<any> | undefined {\n if (predicate(this)) return this;\n let match: ODataStructuredTypeParser<any> | undefined;\n for (let ch of this.children) {\n match = ch.findChildParser(predicate);\n if (match !== undefined) break;\n }\n return match;\n }\n\n childParser(\n predicate: (p: ODataStructuredTypeParser<any>) => boolean\n ): Parser<any> {\n return this.findChildParser(predicate) || NONE_PARSER;\n }\n\n // Deserialize\n deserialize(value: any, options?: Options): T {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.parent !== undefined)\n value = this.parent.deserialize(value, parserOptions);\n const fields = this.fields.filter(\n (f) =>\n f.name in value && value[f.name] !== undefined && value[f.name] !== null\n );\n return {\n ...value,\n ...fields.reduce(\n (acc, f) => ({\n ...acc,\n [f.name]: f.deserialize(value[f.name], parserOptions),\n }),\n {}\n ),\n };\n }\n\n // Serialize\n serialize(value: T, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.parent !== undefined)\n value = this.parent.serialize(value, parserOptions);\n const fields = this.fields.filter(\n (f) =>\n f.name in value &&\n (value as any)[f.name] !== undefined &&\n (value as any)[f.name] !== null\n );\n return {\n ...value,\n ...fields.reduce(\n (acc, f) => ({\n ...acc,\n [f.name]: f.serialize((value as any)[f.name], parserOptions),\n }),\n {}\n ),\n };\n }\n\n // Encode\n encode(value: T, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return raw(JSON.stringify(this.serialize(value, parserOptions)));\n }\n\n configure({\n parserForType,\n options,\n }: {\n parserForType: (type: string) => Parser<any>;\n options: OptionsHelper;\n }) {\n this.optionsHelper = options;\n if (this.base) {\n const parent = parserForType(this.base) as ODataStructuredTypeParser<any>;\n parent.children.push(this);\n this.parent = parent;\n }\n this.fields.forEach((f) => f.configure({ parserForType, options }));\n }\n\n resolveKey(value: any): any {\n let key = this.parent?.resolveKey(value) || {};\n if (Array.isArray(this.keys) && this.keys.length > 0) {\n for (var k of this.keys) {\n let v = value as any;\n let structured = this as ODataStructuredTypeParser<any> | undefined;\n let field: ODataStructuredTypeFieldParser<any> | undefined;\n for (let name of k.name.split('/')) {\n if (structured === undefined) break;\n field = structured.fields.find((f) => f.name === name);\n if (field !== undefined) {\n v = Types.isPlainObject(v) ? v[field.name] : v;\n structured = field.isStructuredType()\n ? field.structured()\n : undefined;\n }\n }\n if (field !== undefined && v !== undefined) {\n key[k.alias || field.name] = field.encode(v);\n }\n }\n }\n if (Types.isEmpty(key)) return undefined;\n return Objects.resolveKey(key);\n }\n\n defaults(): { [name: string]: any } {\n let value = this.parent?.defaults() || {};\n let fields = this.fields.filter(\n (f) => f.default !== undefined || f.isStructuredType()\n );\n return {\n ...value,\n ...fields.reduce((acc, f) => {\n let value = f.isStructuredType()\n ? f.structured().defaults()\n : f.default;\n return Types.isEmpty(value) ? acc : { ...acc, [f.name]: value };\n }, {}),\n };\n }\n\n // Json Schema\n toJsonSchema(options: JsonSchemaOptions<T> = {}) {\n let schema: any = this.parent?.toJsonSchema(options) || {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: `${this.namespace}.${this.name}`,\n title: this.titleize(DESCRIPTION),\n description: this.annotatedValue(LONG_DESCRIPTION),\n type: 'object',\n properties: {},\n required: [],\n };\n const fields = this.fields.filter(\n (f) =>\n (!f.navigation || (options.expand && f.name in options.expand)) &&\n (!options.select || (<string[]>options.select).indexOf(f.name) !== -1)\n );\n schema.properties = Object.assign(\n {},\n schema.properties,\n fields\n .map((f) => {\n let expand =\n options.expand && f.name in options.expand\n ? (options.expand as any)[f.name]\n : undefined;\n let schema = f.toJsonSchema(expand);\n if (options.custom && f.name in options.custom)\n schema = (\n options.custom[f.name as keyof T] as (\n schema: any,\n field: ODataStructuredTypeFieldParser<any>\n ) => any\n )(schema, f);\n return { [f.name]: schema };\n })\n .reduce((acc, v) => Object.assign(acc, v), {})\n );\n schema.required = [\n ...schema.required,\n ...fields\n .filter((f) =>\n options.required && f.name in options.required\n ? options.required[f.name as keyof T]\n : !f.nullable\n )\n .map((f) => f.name),\n ];\n return schema;\n }\n\n validate(\n attrs: any,\n {\n method,\n navigation = false,\n }: {\n create?: boolean;\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}\n ): { [name: string]: any } | undefined {\n const errors = (this.parent?.validate(attrs, { method, navigation }) ||\n {}) as { [name: string]: any };\n const fields = this.fields.filter((f) => !f.navigation || navigation);\n for (var field of fields) {\n const value = attrs[field.name as keyof T];\n const errs = field.validate(value, { method, navigation });\n if (errs !== undefined) {\n errors[field.name] = errs;\n }\n }\n return !Types.isEmpty(errors) ? errors : undefined;\n }\n}\n","import { CALLABLE_BINDING_PARAMETER } from '../../constants';\nimport { ODataParserOptions } from '../../options';\nimport {\n CallableConfig,\n NONE_PARSER,\n Options,\n OptionsHelper,\n Parameter,\n Parser,\n} from '../../types';\nimport { ODataEnumTypeParser } from './enum-type';\nimport { ODataStructuredTypeParser } from './structured-type';\n\nexport class ODataParameterParser<T> {\n name: string;\n type: string;\n private parser: Parser<T>;\n collection?: boolean;\n nullable?: boolean;\n optionsHelper?: OptionsHelper;\n\n constructor(name: string, parameter: Parameter) {\n this.name = name;\n this.type = parameter.type;\n this.parser = NONE_PARSER;\n this.nullable = parameter.nullable;\n this.collection = parameter.collection;\n }\n\n serialize(value: T, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return Array.isArray(value)\n ? value.map((v) => this.parser.serialize(v, parserOptions))\n : this.parser.serialize(value, parserOptions);\n }\n\n //Encode\n encode(value: any, options?: Options): string {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return Array.isArray(value)\n ? value.map((v) => this.parser.encode(v, parserOptions))\n : this.parser.encode(value, parserOptions);\n }\n\n configure({\n parserForType,\n options,\n }: {\n parserForType: (type: string) => Parser<any>;\n options: OptionsHelper;\n }) {\n this.optionsHelper = options;\n this.parser = parserForType(this.type);\n }\n\n isEdmType() {\n return this.type.startsWith('Edm.');\n }\n\n isEnumType() {\n return this.parser instanceof ODataEnumTypeParser;\n }\n\n enum() {\n if (!this.isEnumType()) throw new Error('Field are not EnumType');\n return this.parser as ODataEnumTypeParser<T>;\n }\n\n isStructuredType() {\n return this.parser instanceof ODataStructuredTypeParser;\n }\n\n structured() {\n if (!this.isStructuredType())\n throw new Error('Field are not StrucuturedType');\n return this.parser as ODataStructuredTypeParser<T>;\n }\n}\n\nexport class ODataCallableParser<R> implements Parser<R> {\n name: string;\n namespace: string;\n alias?: string;\n return?: { type: string; collection?: boolean };\n parser: Parser<any>;\n parameters: ODataParameterParser<any>[];\n optionsHelper?: OptionsHelper;\n\n constructor(config: CallableConfig, namespace: string, alias?: string) {\n this.name = config.name;\n this.namespace = namespace;\n this.alias = alias;\n this.return = config.return;\n this.parser = NONE_PARSER;\n this.parameters = Object.entries(config.parameters || []).map(\n ([name, p]) => new ODataParameterParser(name, p as Parameter)\n );\n }\n\n isTypeOf(type: string) {\n var names = [`${this.namespace}.${this.name}`];\n if (this.alias) names.push(`${this.alias}.${this.name}`);\n return names.indexOf(type) !== -1;\n }\n\n // Deserialize\n deserialize(value: any, options?: Options): R {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return this.parser.deserialize(value, parserOptions);\n }\n\n // Serialize\n serialize(params: any, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n const parameters = this.parameters\n .filter((p) => p.name !== CALLABLE_BINDING_PARAMETER)\n .filter((p) => p.name in params && params[p.name] !== undefined);\n return parameters.reduce(\n (acc, p) => ({\n ...acc,\n [p.name]: p.serialize(params[p.name], parserOptions),\n }),\n {}\n );\n }\n\n //Encode\n encode(params: any, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n const parameters = this.parameters\n .filter((p) => p.name !== CALLABLE_BINDING_PARAMETER)\n .filter((p) => p.name in params && params[p.name] !== undefined);\n return parameters.reduce(\n (acc, p) => ({\n ...acc,\n [p.name]: p.encode(params[p.name], parserOptions),\n }),\n {}\n );\n }\n\n configure({\n parserForType,\n options,\n }: {\n parserForType: (type: string) => Parser<any>;\n options: OptionsHelper;\n }) {\n this.optionsHelper = options;\n if (this.return)\n this.parser = parserForType(this.return.type) || NONE_PARSER;\n this.parameters.forEach((p) => p.configure({ parserForType, options }));\n }\n\n binding() {\n return this.parameters.find((p) => p.name === CALLABLE_BINDING_PARAMETER);\n }\n}\n","import { CallableConfig, Options, Parser } from '../types';\nimport { ODataSchemaElement } from './element';\nimport { ODataCallableParser } from './parsers';\nimport { ODataSchema } from './schema';\n\nexport class ODataCallable<R> extends ODataSchemaElement {\n entitySetPath?: string;\n bound?: boolean;\n composable?: boolean;\n parser: ODataCallableParser<R>;\n\n constructor(config: CallableConfig, schema: ODataSchema) {\n super(config, schema);\n this.entitySetPath = config.entitySetPath;\n this.bound = config.bound;\n this.composable = config.composable;\n this.parser = new ODataCallableParser(\n config,\n schema.namespace,\n schema.alias\n );\n }\n\n path() {\n let path: string;\n if (this.entitySetPath) path = this.entitySetPath;\n else if (this.bound) path = `${this.schema.namespace}.${this.name}`;\n else\n path = this.parser.return\n ? this.api.findEntitySetForType(this.parser.return.type)?.name ||\n this.name\n : this.name;\n return path;\n }\n\n configure({\n parserForType,\n }: {\n parserForType: (type: string) => Parser<any>;\n }) {\n this.parser.configure({ options: this.api.options, parserForType });\n }\n\n /**\n * Deseialize the given value from the callable.\n * @param value Value to deserialize\n * @param options Options for deserialization\n * @returns Deserialized value\n */\n deserialize(value: any, options?: Options): any {\n return this.parser.deserialize(value, options);\n }\n\n /**\n * Serialize the given value for the callable.\n * @param value Value to serialize\n * @param options Options for serialization\n * @returns Serialized value\n */\n serialize(value: any, options?: Options): any {\n return this.parser.serialize(value, options);\n }\n\n /**\n * Encode the given value for the callable.\n * @param value Value to encode\n * @param options Options for encoding\n * @returns Encoded value\n */\n encode(value: any, options?: Options): any {\n return this.parser.encode(value, options);\n }\n\n /**\n * Returns the binding parameter of the callable.\n * @returns The binding parameter of the callable.\n */\n binding() {\n return this.parser.binding();\n }\n}\n","import { EntitySetConfig } from '../types';\nimport { ODataSchemaElement } from './element';\nimport { ODataSchema } from './schema';\n\nexport class ODataEntitySet extends ODataSchemaElement {\n entityType: string;\n service: { new (...params: any[]): any };\n constructor(config: EntitySetConfig, schema: ODataSchema) {\n super(config, schema);\n this.entityType = config.entityType;\n this.service = config.service;\n }\n}\n","import { EntityContainerConfig } from '../types';\nimport { ODataSchemaElement } from './element';\nimport { ODataEntitySet } from './entity-set';\nimport { ODataSchema } from './schema';\n\nexport class ODataEntityContainer extends ODataSchemaElement {\n entitySets: ODataEntitySet[];\n\n constructor(config: EntityContainerConfig, schema: ODataSchema) {\n super(config, schema);\n this.entitySets = (config.entitySets || []).map(\n (config) => new ODataEntitySet(config, schema)\n );\n }\n}\n","import { EnumTypeConfig, Options } from '../types';\nimport { ODataSchemaElement } from './element';\nimport { ODataEnumTypeFieldParser, ODataEnumTypeParser } from './parsers';\nimport { ODataSchema } from './schema';\n\nexport class ODataEnumType<E> extends ODataSchemaElement {\n parser: ODataEnumTypeParser<E>;\n members: { [name: string]: number } | { [value: number]: string };\n constructor(config: EnumTypeConfig<E>, schema: ODataSchema) {\n super(config, schema);\n this.members = config.members;\n this.parser = new ODataEnumTypeParser<E>(\n config,\n schema.namespace,\n schema.alias\n );\n }\n\n configure() {\n this.parser.configure({ options: this.api.options });\n }\n\n /**\n * Returns the fields of the enum type.\n * @returns The fields of the enum type.\n */\n fields(): ODataEnumTypeFieldParser[] {\n return this.parser.fields;\n }\n\n /**\n * Find a field by name.\n * @param name The name of the field\n * @returns The field with the given name\n */\n findFieldByName(name: string) {\n return this.fields().find((f) => f.name === name);\n }\n\n /**\n * Find a field by value.\n * @param value The value of the field\n * @returns The field with the given value\n */\n findFieldByValue(value: number) {\n return this.fields().find((f) => f.value === value);\n }\n\n /**\n * Map the fields of the enum type.\n * @param mapper Function that maps the value to the new value\n * @returns The fields mapped by the mapper\n */\n mapFields<T>(mapper: (field: ODataEnumTypeFieldParser) => T) {\n return this.fields().map(mapper);\n }\n\n /**\n * Deseialize the given value from the enum type.\n * @param value Value to deserialize\n * @param options Options for deserialization\n * @returns Deserialized value\n */\n deserialize(value: any, options?: Options): E {\n return this.parser.deserialize(value, options);\n }\n\n /**\n * Serialize the given value for the enum type.\n * @param value Value to serialize\n * @param options Options for serialization\n * @returns Serialized value\n */\n serialize(value: E, options?: Options): any {\n return this.parser.serialize(value, options);\n }\n\n /**\n * Encode the given value for the enum type.\n * @param value Value to encode\n * @param options Options for encoding\n * @returns Encoded value\n */\n encode(value: E, options?: Options): any {\n return this.parser.encode(value, options);\n }\n}\n","import { ODataCollection } from '../models';\nimport { ODataModel } from '../models/model';\nimport { Options, StructuredTypeConfig } from '../types';\nimport { ODataSchemaElement } from './element';\nimport {\n JsonSchemaOptions,\n ODataEntityTypeKey,\n ODataStructuredTypeFieldParser,\n ODataStructuredTypeParser,\n} from './parsers';\nimport { ODataSchema } from './schema';\n\nexport class ODataStructuredType<T> extends ODataSchemaElement {\n base?: string;\n open: boolean;\n parent?: ODataStructuredType<any>;\n children: ODataStructuredType<any>[] = [];\n model?: typeof ODataModel;\n collection?: typeof ODataCollection;\n parser: ODataStructuredTypeParser<T>;\n\n constructor(config: StructuredTypeConfig<T>, schema: ODataSchema) {\n super(config, schema);\n this.base = config.base;\n this.open = config.open || false;\n this.parser = new ODataStructuredTypeParser(\n config,\n schema.namespace,\n schema.alias\n );\n this.model = config.model as typeof ODataModel;\n this.collection = config.collection as typeof ODataCollection;\n if (this.model !== undefined) {\n const options = this.model.hasOwnProperty('options')\n ? this.model.options\n : { fields: {} };\n this.model.buildMeta<T>({ options, schema: this });\n }\n if (this.collection !== undefined) {\n this.collection.model = this.model;\n }\n }\n\n configure({\n parserForType,\n findOptionsForType,\n }: {\n parserForType: (type: string) => any;\n findOptionsForType: (type: string) => any;\n }) {\n if (this.base) {\n const parent = this.api.findStructuredTypeForType(\n this.base\n ) as ODataStructuredType<any>;\n parent.children.push(this);\n this.parent = parent;\n }\n this.parser.configure({ parserForType, options: this.api.options });\n if (this.model !== undefined && this.model.options !== null) {\n this.model.meta.configure({\n findOptionsForType,\n options: this.api.options,\n });\n }\n }\n\n /**\n * Returns a boolean indicating if the structured type is a sub type of the given type.\n * @param type String representation of the type\n * @returns True if the callable is type of the given type\n */\n override isSubtypeOf(schema: ODataStructuredType<any>): boolean {\n return (\n super.isSubtypeOf(schema) ||\n (this.parent !== undefined && this.parent.isSubtypeOf(schema))\n );\n }\n\n /**\n * Returns a boolean indicating if the structured type has a simple key.\n * @returns True if the structured type has a simple key\n */\n isSimpleKey() {\n return this.keys().length === 1;\n }\n\n /**\n * Returns a boolean indicating if the structured type has a compound key.\n * @returns True if the structured type has a compound key.\n */\n isCompoundKey() {\n return this.keys().length > 1;\n }\n\n /**\n * Find the field parser for the given field name.\n * @param name Name of the field\n * @returns The field parser\n */\n findFieldByName<F>(name: keyof T) {\n return this.fields({\n include_parents: true,\n include_navigation: true,\n }).find((f) => f.name === name) as\n | ODataStructuredTypeFieldParser<F>\n | undefined;\n }\n\n /**\n * Find a parent schema of the structured type.\n * @param predicate Function for evaluate the schemas in the hierarchy.\n * @returns The schema that matches the predicate.\n */\n findParentSchema(\n predicate: (p: ODataStructuredType<any>) => boolean\n ): ODataStructuredType<any> | undefined {\n if (predicate(this)) return this as ODataStructuredType<any>;\n if (this.parent === undefined) return undefined;\n return this.parent.findParentSchema(predicate);\n }\n\n /**\n * Find a parent schema of the structured type for the given field.\n * @param field Field that belongs to the structured type\n * @returns The schema of the field\n */\n findSchemaForField<E>(field: ODataStructuredTypeFieldParser<any>) {\n return this.findParentSchema(\n (p) =>\n p\n .fields({ include_parents: false, include_navigation: true })\n .find((f) => f === field) !== undefined\n ) as ODataStructuredType<E>;\n }\n\n /**\n * Returns all fields of the structured type.\n * @param include_navigation Include navigation properties in the result.\n * @param include_parents Include the parent types in the result.\n * @returns All fields of the structured type.\n */\n fields({\n include_navigation,\n include_parents,\n }: {\n include_parents: boolean;\n include_navigation: boolean;\n }): ODataStructuredTypeFieldParser<any>[] {\n return [\n ...(include_parents && this.parent !== undefined\n ? this.parent.fields({ include_parents, include_navigation })\n : []),\n ...this.parser.fields.filter(\n (field) => include_navigation || !field.navigation\n ),\n ];\n }\n\n /**\n * Returns the keys of the structured type.\n * @param include_parents Include the parent fields\n * @returns The keys of the structured type\n */\n keys({\n include_parents = true,\n }: {\n include_parents?: boolean;\n } = {}): ODataEntityTypeKey[] {\n return [\n ...(include_parents && this.parent !== undefined\n ? this.parent.keys({ include_parents })\n : []),\n ...(this.parser.keys || []),\n ];\n }\n\n /**\n * Picks the fields from attributes.\n * @param attrs\n * @param include_parents Include the parent fields\n * @param include_navigation Include the navigation fields\n * @param include_etag Include the etag field\n * @returns The picked fields\n */\n pick(\n attrs: { [name: string]: any },\n {\n include_parents = true,\n include_navigation = false,\n include_etag = true,\n }: {\n include_parents?: boolean;\n include_navigation?: boolean;\n include_etag?: boolean;\n } = {}\n ): Partial<T> {\n const names = this.fields({ include_parents, include_navigation }).map(\n (f) => f.name\n );\n let values = Object.keys(attrs)\n .filter((k) => names.indexOf(k) !== -1)\n .reduce((acc, k) => Object.assign(acc, { [k]: attrs[k] }), {});\n if (include_etag) {\n const etag = this.api.options.helper.etag(attrs);\n this.api.options.helper.etag(attrs, etag);\n }\n return values;\n }\n\n /**\n * Deseialize the given value from the structured type.\n * @param value Value to deserialize\n * @param options Options for deserialization\n * @returns Deserialized value\n */\n deserialize(value: any, options?: Options): T {\n return this.parser.deserialize(value, options);\n }\n\n /**\n * Serialize the given value for the structured type.\n * @param value Value to serialize\n * @param options Options for serialization\n * @returns Serialized value\n */\n serialize(value: T, options?: Options): any {\n return this.parser.serialize(value, options);\n }\n\n /**\n * Encode the given value for the structured type.\n * @param value Value to encode\n * @param options Options for encoding\n * @returns Encoded value\n */\n encode(value: T, options?: Options): any {\n return this.parser.encode(value, options);\n }\n\n /**\n * Resolve the key of the structured type for the given value.\n * @param attrs Attributes of the value\n * @returns Resolved key\n */\n resolveKey(attrs: T | { [name: string]: any }) {\n return this.parser.resolveKey(attrs);\n }\n\n /**\n * Returns the defaults values for the structured type.\n * @returns Default values for the structured type\n */\n defaults() {\n return this.parser.defaults();\n }\n\n /**\n * Convert the structured type to json schema\n * @param options Options for json schema\n * @returns Json Schema\n */\n toJsonSchema(options: JsonSchemaOptions<T> = {}) {\n return this.parser.toJsonSchema(options);\n }\n\n /**\n * Validate the given value against the structured type.\n * @param attrs Attributes of the value\n * @param method Method to use for the process validation\n * @returns Object with the errors\n */\n validate(\n attrs: Partial<T>,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}\n ) {\n return this.parser.validate(attrs, { method, navigation });\n }\n}\n","import { ODataApi } from '../api';\nimport { Parser, SchemaConfig } from '../types';\nimport { OData } from '../utils/odata';\nimport { ODataAnnotatable } from './annotation';\nimport { ODataCallable } from './callable';\nimport { ODataEntityContainer } from './entity-container';\nimport { ODataEntitySet } from './entity-set';\nimport { ODataEnumType } from './enum-type';\nimport { ODataStructuredType } from './structured-type';\n\nexport class ODataSchema extends ODataAnnotatable {\n api: ODataApi;\n namespace: string;\n alias?: string;\n enums: ODataEnumType<any>[];\n entities: ODataStructuredType<any>[];\n callables: ODataCallable<any>[];\n containers: ODataEntityContainer[];\n\n constructor(config: SchemaConfig, api: ODataApi) {\n super(config);\n this.api = api;\n this.namespace = config.namespace;\n this.alias = config.alias;\n this.enums = (config.enums || []).map(\n (config) => new ODataEnumType(config, this)\n );\n this.entities = (config.entities || []).map(\n (config) => new ODataStructuredType(config, this)\n );\n this.callables = OData.mergeCallableParameters(config.callables || []).map(\n (config) => new ODataCallable(config, this)\n );\n this.containers = (config.containers || []).map(\n (config) => new ODataEntityContainer(config, this)\n );\n }\n\n isNamespaceOf(type: string) {\n return (\n type.startsWith(this.namespace) ||\n (this.alias && type.startsWith(this.alias))\n );\n }\n\n get entitySets() {\n return this.containers.reduce(\n (acc, container) => [...acc, ...container.entitySets],\n [] as ODataEntitySet[]\n );\n }\n\n //#region Find for Type\n public findEnumTypeForType<T>(type: string) {\n return this.enums.find((e) => e.isTypeOf(type)) as\n | ODataEnumType<T>\n | undefined;\n }\n\n public findStructuredTypeForType<T>(type: string) {\n return this.entities.find((e) => e.isTypeOf(type)) as\n | ODataStructuredType<T>\n | undefined;\n }\n\n public findCallableForType<T>(type: string, bindingType?: string) {\n const bindingStructuredType =\n bindingType !== undefined\n ? this.api.findStructuredTypeForType<any>(bindingType)\n : undefined;\n return this.callables.find((c) => {\n const isCallableType = c.isTypeOf(type);\n const callableBindingType = c.binding()?.type;\n const callableBindingStructuredType =\n callableBindingType !== undefined\n ? this.api.findStructuredTypeForType(callableBindingType)\n : undefined;\n return (\n isCallableType &&\n (!bindingStructuredType ||\n (callableBindingStructuredType &&\n bindingStructuredType.isSubtypeOf(callableBindingStructuredType)))\n );\n }) as ODataCallable<T> | undefined;\n }\n\n public findEntitySetForType(type: string) {\n return this.entitySets.find((e) => e.isTypeOf(type));\n }\n //#endregion\n\n configure({\n parserForType,\n findOptionsForType,\n }: {\n parserForType: (type: string) => Parser<any>;\n findOptionsForType: (type: string) => any;\n }) {\n // Configure Enums\n this.enums.forEach((enu) => enu.configure());\n // Configure Entities\n this.entities.forEach((config) =>\n config.configure({ parserForType, findOptionsForType })\n );\n // Configure callables\n this.callables.forEach((callable) => callable.configure({ parserForType }));\n }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../api';\nimport {\n PARAM_SEPARATOR,\n QUERY_SEPARATOR,\n VALUE_SEPARATOR,\n} from '../constants';\nimport { ODataCollection, ODataModel } from '../models';\nimport {\n ODataCallable,\n ODataStructuredType,\n ODataStructuredTypeParser,\n} from '../schema';\nimport { ODataSchemaElement } from '../schema/element';\nimport { OptionsHelper, Parser, QueryOptionNames } from '../types';\nimport { Http, Objects, Types } from '../utils/index';\nimport { ODataPathSegments, ODataPathSegmentsHandler } from './path';\nimport {\n isQueryCustomType,\n ODataQueryOptions,\n ODataQueryOptionsHandler,\n QueryCustomType,\n} from './query';\nimport { ODataRequest } from './request';\nimport {\n ODataEntitiesAnnotations,\n ODataEntityAnnotations,\n ODataResponse,\n} from './responses/index';\nimport { ODataOptions } from './types';\n\nexport type EntityKey<T> =\n | {\n readonly [P in keyof T]?: T[P];\n }\n | QueryCustomType\n | string\n | number;\n\nexport class ODataResource<T> {\n // VARIABLES\n public api: ODataApi;\n public schema?: ODataSchemaElement;\n protected pathSegments: ODataPathSegments;\n protected queryOptions: ODataQueryOptions<T>;\n constructor(\n api: ODataApi,\n {\n segments,\n query,\n schema,\n }: {\n segments?: ODataPathSegments;\n query?: ODataQueryOptions<T>;\n schema?: ODataSchemaElement;\n } = {}\n ) {\n this.api = api;\n this.pathSegments = segments || new ODataPathSegments();\n this.queryOptions = query || new ODataQueryOptions();\n this.schema = schema;\n }\n\n /**\n * @returns string The type of the resource\n */\n type() {\n return this.pathSegments.last()?.type();\n }\n\n /**\n * @returns string The type of the return\n */\n returnType() {\n return this.pathSegments.last()?.type();\n }\n\n /**\n * @returns string All covered types of the resource\n */\n types(): string[] {\n return this.pathSegments.types();\n }\n\n /**\n * @returns boolean The resource has key ?\n */\n hasKey() {\n return Boolean(this.pathSegments.last({ key: true })?.hasKey());\n }\n\n clearKey() {\n return this.pathSegments.last({ key: true })?.clearKey();\n }\n\n //#region Models\n asModel<M extends ODataModel<T>>(\n entity?: Partial<T> | { [name: string]: any },\n { annots, reset }: { annots?: ODataEntityAnnotations; reset?: boolean } = {}\n ): M {\n let resource: ODataResource<T> = this as ODataResource<T>;\n const type = annots?.type || this.returnType();\n if (type === undefined) throw Error('');\n const Model = this.api.modelForType(type);\n let entitySet = annots?.entitySet;\n if (entitySet !== undefined) {\n resource = this.api.entitySet<T>(entitySet).entity(entity as Partial<T>);\n resource.query((q) => q.apply(this.queryOptions.toQueryArguments()));\n }\n return new Model(entity, { resource, annots, reset }) as M;\n }\n\n asCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n entities?: Partial<T>[] | { [name: string]: any }[],\n {\n annots,\n reset,\n }: { annots?: ODataEntitiesAnnotations; reset?: boolean } = {}\n ): C {\n let resource: ODataResource<T> = this as ODataResource<T>;\n const type = annots?.type || this.returnType();\n if (type === undefined) throw Error('');\n const Collection = this.api.collectionForType(type);\n let path = annots?.entitySet;\n if (path !== undefined) {\n resource = this.api.entitySet<T>(path);\n resource.query((q) => q.apply(this.queryOptions.toQueryArguments()));\n }\n return new Collection(entities, { resource, annots, reset }) as C;\n }\n //#endregion\n\n isSubtypeOf(other: ODataResource<any>) {\n return (\n this.schema !== undefined &&\n other.schema !== undefined &&\n this.schema?.isSubtypeOf(other.schema)\n );\n }\n /*\n isParentOf(other: ODataResource<any>) {\n const [selfPath] = this.pathAndParams();\n const [otherPath] = other.pathAndParams();\n return otherPath !== selfPath && otherPath.startsWith(selfPath);\n }\n\n isChildOf(other: ODataResource<any>) {\n const [selfPath] = this.pathAndParams();\n const [otherPath] = other.pathAndParams();\n return otherPath !== selfPath && selfPath.startsWith(otherPath);\n }\n */\n\n isEqualTo(other: ODataResource<any>, test?: 'path' | 'params') {\n const [selfPath, selfParams] = this.pathAndParams();\n const [otherPath, otherParams] = other.pathAndParams();\n return test === 'path'\n ? otherPath === selfPath\n : test === 'params'\n ? Types.isEqual(selfParams, otherParams)\n : otherPath === selfPath && Types.isEqual(selfParams, otherParams);\n }\n\n pathAndParams(escape: boolean = false): [string, { [name: string]: any }] {\n const [spath, sparams] = this.pathSegments.pathAndParams(escape);\n const [, qparams] = this.queryOptions.pathAndParams(escape);\n return [spath, { ...sparams, ...qparams }];\n }\n\n endpointUrl(params: boolean = true) {\n if (params) {\n return `${this.api.serviceRootUrl}${this}`;\n } else {\n let [path] = this.pathAndParams();\n return `${this.api.serviceRootUrl}${path}`;\n }\n }\n\n toString(): string {\n let [path, params] = this.pathAndParams();\n let queryString = Object.entries(params)\n .map((e) => `${e[0]}${VALUE_SEPARATOR}${e[1]}`)\n .join(PARAM_SEPARATOR);\n return queryString ? `${path}${QUERY_SEPARATOR}${queryString}` : path;\n }\n\n clone<R extends ODataResource<T>>(): R {\n const Ctor = this.constructor as typeof ODataResource;\n return new Ctor(this.api, {\n schema: this.schema,\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n }) as R;\n }\n\n deserialize(value: any, options?: OptionsHelper): any {\n const resourceType = this.returnType();\n const resourceSchema = this.schema;\n const _p = (value: any, options: OptionsHelper): Parser<T> | undefined => {\n const dataType = Types.isPlainObject(value)\n ? options.helper.type(value)\n : undefined;\n if (dataType !== undefined) {\n // Parser from data type\n return this.api.parserForType<T>(dataType);\n } else if (resourceSchema !== undefined && 'parser' in resourceSchema) {\n // Parser from resource schema\n return (<any>resourceSchema).parser as Parser<T> | undefined;\n } else if (resourceType !== undefined) {\n // Parser from resource type\n return this.api.parserForType<T>(resourceType);\n }\n return undefined;\n };\n const _d = (value: any, options: OptionsHelper) => {\n const parser = _p(value, options);\n return parser !== undefined && 'deserialize' in parser\n ? parser.deserialize(value, options)\n : value;\n };\n return Array.isArray(value)\n ? value.map((v) => _d(v, options || this.api.options))\n : _d(value, options || this.api.options);\n }\n\n serialize(value: any, options?: OptionsHelper): any {\n const resourceType = this.type();\n const resourceSchema = this.schema;\n const _p = (value: any, options: OptionsHelper): Parser<T> | undefined => {\n const dataType = Types.isPlainObject(value)\n ? options.helper.type(value)\n : undefined;\n if (dataType !== undefined) {\n // Parser from data type\n return this.api.parserForType<T>(dataType);\n } else if (resourceSchema !== undefined && 'parser' in resourceSchema) {\n // Parser from resource schema\n return (<any>resourceSchema).parser as Parser<T> | undefined;\n } else if (resourceType !== undefined) {\n // Parser from resource type\n return this.api.parserForType<T>(resourceType);\n }\n return undefined;\n };\n const _s = (value: any, options: OptionsHelper) => {\n const parser = _p(value, options);\n return parser !== undefined && 'serialize' in parser\n ? parser.serialize(value, options)\n : value;\n };\n return Array.isArray(value)\n ? value.map((v) => _s(v, options || this.api.options))\n : _s(value, options || this.api.options);\n }\n\n encode(value: any, options?: OptionsHelper): any {\n const resourceType = this.type();\n const resourceSchema = this.schema;\n const _p = (value: any, options: OptionsHelper): Parser<T> | undefined => {\n const dataType = Types.isPlainObject(value)\n ? options.helper.type(value)\n : undefined;\n if (dataType !== undefined) {\n // Parser from data type\n return this.api.parserForType<T>(dataType);\n } else if (resourceSchema !== undefined && 'parser' in resourceSchema) {\n // Parser from resource schema\n return (<any>resourceSchema).parser as Parser<T> | undefined;\n } else if (resourceType !== undefined) {\n // Parser from resource type\n return this.api.parserForType<T>(resourceType);\n }\n return undefined;\n };\n const _e = (value: any, options: OptionsHelper) => {\n const parser = _p(value, options);\n return parser !== undefined && 'encode' in parser\n ? parser.encode(value, options)\n : value;\n };\n return Array.isArray(value)\n ? value.map((v) => _e(v, options || this.api.options))\n : _e(value, options || this.api.options);\n }\n\n toJSON() {\n return {\n segments: this.pathSegments.toJSON(),\n options: this.queryOptions.toJSON(),\n };\n }\n\n cloneSegments() {\n return this.pathSegments.clone();\n }\n\n //#region Query Options\n clearQuery() {\n this.queryOptions.clear();\n }\n\n cloneQuery<P>() {\n return this.queryOptions.clone<P>();\n }\n\n /**\n * Handle the path segments of the resource\n * Create an object handler for mutate the path segments of the resource\n * @param f Function context for handle the segments\n * @returns ODataActionResource\n */\n segment(f: (q: ODataPathSegmentsHandler<T>) => void) {\n f(new ODataPathSegmentsHandler<T>(this.pathSegments));\n return this;\n }\n\n /**\n * Handle the query options of the resource\n * Create an object handler for mutate the query options of the resource\n * @param f Function context for handle the query options\n */\n query(f: (q: ODataQueryOptionsHandler<T>) => void) {\n f(new ODataQueryOptionsHandler<T>(this.queryOptions));\n return this;\n }\n\n static resolveKey<T>(\n value: any,\n schema?: ODataStructuredType<T>\n ): EntityKey<T> | undefined {\n if (isQueryCustomType(value)) {\n return value;\n } else if (Types.isPlainObject(value)) {\n return schema instanceof ODataStructuredType\n ? schema.resolveKey(value)\n : Objects.resolveKey(value);\n }\n return value as EntityKey<T> | undefined;\n }\n\n protected resolveKey(value: any): EntityKey<T> | undefined {\n return ODataResource.resolveKey<T>(\n value,\n this.schema as ODataStructuredType<T>\n );\n }\n //#endregion\n\n // Base Requests\n protected request(\n method: string,\n options: ODataOptions & {\n body?: any;\n etag?: string;\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<any> {\n const apiOptions = this.api.options;\n let params = options.params || {};\n if (options.withCount) {\n params = Http.mergeHttpParams(params, apiOptions.helper.countParam());\n }\n\n let etag = options.etag;\n if (etag === undefined && Types.isPlainObject(options.body)) {\n etag = apiOptions.helper.etag(options.body);\n }\n\n const request = new ODataRequest({\n method,\n etag,\n body: options.body,\n api: this.api,\n resource: this,\n observe: 'response',\n headers: options.headers,\n reportProgress: options.reportProgress,\n params: params,\n responseType: options.responseType,\n fetchPolicy: options.fetchPolicy,\n withCredentials: options.withCredentials,\n bodyQueryOptions: options.bodyQueryOptions,\n });\n\n const res$ = this.api.request(request);\n switch (options.responseType) {\n case 'entities':\n return res$.pipe(map((res: ODataResponse<T>) => res.entities()));\n case 'entity':\n return res$.pipe(map((res: ODataResponse<T>) => res.entity()));\n case 'property':\n return res$.pipe(map((res: ODataResponse<T>) => res.property()));\n case 'value':\n return res$.pipe(map((res: ODataResponse<T>) => res.value() as T));\n default:\n // Other responseTypes (arraybuffer, blob, json, text) return body\n return res$.pipe(map((res: ODataResponse<T>) => res.body));\n }\n }\n\n protected get(\n options: ODataOptions & {\n etag?: string;\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<any> {\n return this.request('GET', options);\n }\n\n protected post(\n body: any,\n options: ODataOptions & {\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n } = {}\n ): Observable<any> {\n return this.request('POST', { body, ...options });\n }\n\n protected put(\n body: any,\n options: ODataOptions & {\n etag?: string;\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n } = {}\n ): Observable<any> {\n return this.request('PUT', { body, ...options });\n }\n\n protected patch(\n body: any,\n options: ODataOptions & {\n etag?: string;\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n } = {}\n ): Observable<any> {\n return this.request('PATCH', { body, ...options });\n }\n\n protected delete(\n options: ODataOptions & {\n etag?: string;\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n } = {}\n ): Observable<any> {\n return this.request('DELETE', options);\n }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataCollection, ODataModel } from '../../models';\nimport { ODataCallable } from '../../schema/callable';\nimport { PathSegmentNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity, ODataProperty } from '../responses';\nimport {\n ODataEntitiesOptions,\n ODataEntityOptions,\n ODataNoneOptions,\n ODataOptions,\n ODataPropertyOptions,\n} from './options';\n\nexport class ODataActionResource<P, R> extends ODataResource<R> {\n //#region Factory\n static factory<P, R>(\n api: ODataApi,\n {\n path,\n schema,\n segments,\n query,\n }: {\n path?: string;\n schema?: ODataCallable<R>;\n segments?: ODataPathSegments;\n query?: ODataQueryOptions<R>;\n }\n ) {\n segments = segments || new ODataPathSegments();\n path = schema !== undefined ? schema.path() : path;\n if (path === undefined)\n throw new Error(`ODataActionResource: path is required`);\n\n const segment = segments.add(PathSegmentNames.action, path);\n if (schema !== undefined) segment.type(schema.type());\n return new ODataActionResource<P, R>(api, {\n segments,\n query,\n schema,\n });\n }\n\n static fromResource<P, R>(resource: ODataResource<any>, path: string) {\n const baseType = resource.type();\n const actionSchema = resource.api.findCallableForType<R>(path, baseType);\n const bindingType = actionSchema?.binding()?.type;\n\n const action = ODataActionResource.factory<P, R>(resource.api, {\n path,\n schema: actionSchema,\n segments: resource.cloneSegments(),\n });\n\n // Switch entitySet to binding type if available\n if (bindingType !== undefined && bindingType !== baseType) {\n let entitySet = resource.api.findEntitySetForType(bindingType);\n if (entitySet !== undefined) {\n action.segment((s) => s.entitySet().path(entitySet!.name));\n }\n }\n\n return action;\n }\n //#endregion\n\n override returnType() {\n return this.schema instanceof ODataCallable\n ? this.schema.parser.return?.type\n : undefined;\n }\n\n //#region Requests\n protected override post(\n params: P | null,\n options?: ODataEntityOptions & ODataEntitiesOptions & ODataPropertyOptions\n ): Observable<any> {\n return super.post(params, options);\n }\n //#endregion\n\n //#region Shortcuts\n /**\n * Execute the action\n * @param params Parameters to be sent to the action\n * @param options Options for the request\n */\n call(\n params: P | null,\n options?: ODataEntityOptions\n ): Observable<ODataEntity<R>>;\n call(\n params: P | null,\n options?: ODataEntitiesOptions\n ): Observable<ODataEntities<R>>;\n call(\n params: P | null,\n options?: ODataPropertyOptions\n ): Observable<ODataProperty<R>>;\n call(params: P | null, options?: ODataNoneOptions): Observable<null>;\n call(\n params: P | null,\n options: ODataEntityOptions &\n ODataEntitiesOptions &\n ODataPropertyOptions &\n ODataNoneOptions = {}\n ): Observable<any> {\n return this.clone<ODataActionResource<P, R>>().post(params, options);\n }\n\n /**\n * Execute the action and return the result as a property\n * @param params Parameters for the action\n * @param options Options for the request\n * @returns Observable of the result of the action\n */\n callProperty(\n params: P | null,\n options: ODataOptions = {}\n ): Observable<R | null> {\n return this.call(params, { responseType: 'property', ...options }).pipe(\n map(({ property }) => property)\n );\n }\n\n /**\n * Execute the action and return the result as a entity\n * @param params Parameters for the action\n * @param options Options for the request\n * @returns Observable of the result of the action\n */\n callEntity(\n params: P | null,\n options: ODataOptions = {}\n ): Observable<R | null> {\n return this.call(params, { responseType: 'entity', ...options }).pipe(\n map(({ entity }) => entity)\n );\n }\n\n /**\n * Execute the action and return the result as a model\n * @param params Parameters for the action\n * @param options Options for the request\n * @returns Observable of the result of the action\n */\n callModel<M extends ODataModel<R>>(\n params: P | null,\n options: ODataOptions = {}\n ): Observable<M | null> {\n return this.call(params, { responseType: 'entity', ...options }).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots, reset: true }) : null\n )\n );\n }\n\n /**\n * Execute the action and return the result as a entities\n * @param params Parameters for the action\n * @param options Options for the request\n * @returns Observable of the result of the action\n */\n callEntities(\n params: P | null,\n options: ODataOptions = {}\n ): Observable<R[] | null> {\n return this.call(params, { responseType: 'entities', ...options }).pipe(\n map(({ entities }) => entities)\n );\n }\n\n /**\n * Execute the action and return the result as a collection\n * @param params Parameters for the action\n * @param options Options for the request\n * @returns Observable of the result of the action\n */\n callCollection<M extends ODataModel<R>, C extends ODataCollection<R, M>>(\n params: P | null,\n options: ODataOptions = {}\n ): Observable<C | null> {\n return this.call(params, { responseType: 'entities', ...options }).pipe(\n map(({ entities, annots }) =>\n entities\n ? this.asCollection<M, C>(entities, { annots, reset: true })\n : null\n )\n );\n }\n //#endregion\n}\n","import { ODataContext, ODataVersionHelper } from '../../helper';\n\nimport { ODataMetadataType } from '../../types';\n\nexport abstract class ODataAnnotations {\n constructor(\n public helper: ODataVersionHelper,\n protected annotations: { [annot: string]: any } = {},\n protected context?: ODataContext\n ) {}\n\n attributes<T>(data: { [name: string]: any }, metadata: ODataMetadataType): T {\n return this.helper.attributes(data, metadata) as T;\n }\n\n get entitySet() {\n return this.context?.entitySet;\n }\n\n get type() {\n return this.helper.type(this.annotations) || this.context?.type;\n }\n\n // Method\n abstract clone(): ODataAnnotations;\n abstract data(data: { [name: string]: any }): { [name: string]: any };\n}\n\nexport class ODataPropertyAnnotations extends ODataAnnotations {\n clone(): ODataPropertyAnnotations {\n return new ODataPropertyAnnotations(\n this.helper,\n { ...this.annotations },\n this.context\n );\n }\n\n data(data: { [name: string]: any }) {\n return this.helper.property(data);\n }\n}\n\nexport class ODataEntityAnnotations extends ODataAnnotations {\n clone(): ODataEntityAnnotations {\n return new ODataEntityAnnotations(\n this.helper,\n { ...this.annotations },\n this.context\n );\n }\n\n data(data: { [name: string]: any }) {\n return this.helper.entity(data);\n }\n\n get id() {\n return this.helper.id(this.annotations);\n }\n\n get etag() {\n return this.helper.etag(this.annotations);\n }\n\n get mediaEtag() {\n return this.helper.mediaEtag(this.annotations);\n }\n\n get metadataEtag() {\n return this.helper.metadataEtag(this.annotations);\n }\n\n get readLink() {\n return this.helper.readLink(this.annotations);\n }\n\n get editLink() {\n return this.helper.editLink(this.annotations);\n }\n\n get mediaReadLink() {\n return this.helper.mediaReadLink(this.annotations);\n }\n\n get mediaEditLink() {\n return this.helper.mediaEditLink(this.annotations);\n }\n\n get mediaContentType() {\n return this.helper.mediaContentType(this.annotations);\n }\n\n private _properties?: { [name: string]: any };\n get properties() {\n if (this._properties === undefined) {\n this._properties = this.helper.properties(this.annotations);\n }\n return this._properties;\n }\n\n property(name: string) {\n return this.properties[name];\n }\n\n private _functions?: { [name: string]: any };\n get functions() {\n if (this._functions === undefined) {\n this._functions = this.helper.functions(this.annotations);\n }\n return this._functions;\n }\n\n function(name: string) {\n return this.functions[name];\n }\n}\n\nexport class ODataEntitiesAnnotations extends ODataAnnotations {\n clone(): ODataEntitiesAnnotations {\n return new ODataEntitiesAnnotations(\n this.helper,\n { ...this.annotations },\n this.context\n );\n }\n\n data(data: { [name: string]: any }) {\n return this.helper.entities(data);\n }\n\n get readLink() {\n return this.helper.readLink(this.annotations);\n }\n\n get count() {\n return this.helper.count(this.annotations);\n }\n\n get nextLink() {\n return this.helper.nextLink(this.annotations);\n }\n\n get deltaLink() {\n return this.helper.deltaLink(this.annotations);\n }\n\n get top() {\n let match = (this.nextLink || '').match(/[&?]{1}\\$top=(\\d+)/);\n return match !== null ? Number(match[1]) : undefined;\n }\n\n get skip() {\n let match = (this.nextLink || '').match(/[&?]{1}\\$skip=(\\d+)/);\n return match !== null ? Number(match[1]) : undefined;\n }\n\n get skiptoken() {\n let match = (this.nextLink || '').match(/[&?]{1}\\$skiptoken=([\\d\\w\\s']+)/);\n return match !== null ? match[1] : undefined;\n }\n\n private _functions?: { [name: string]: any };\n get functions() {\n if (this._functions === undefined) {\n this._functions = this.helper.functions(this.annotations);\n }\n return this._functions;\n }\n function(name: string) {\n return this.functions[name];\n }\n}\n","import {\n CacheCacheability,\n ODataMetadataType,\n ODataVersion,\n Options,\n ResponseOptions,\n} from '../../types';\nimport {\n DEFAULT_VERSION,\n MAX_AGE,\n VERSION_2_0,\n VERSION_3_0,\n VERSION_4_0,\n} from '../../constants';\n\nimport { ODataHelper } from '../../helper';\n\nexport class ODataResponseOptions implements ResponseOptions {\n version: ODataVersion;\n streaming?: boolean;\n // OData\n metadata?: ODataMetadataType;\n stringAsEnum?: boolean;\n ieee754Compatible?: boolean;\n // Location\n location?: string;\n // Cache\n cacheability?: 'public' | 'private' | 'no-cache' | 'no-store';\n maxAge?: number;\n\n constructor(config: Options) {\n this.version = config.version || DEFAULT_VERSION;\n this.stringAsEnum = config.stringAsEnum;\n }\n\n get helper() {\n return ODataHelper[this.version];\n }\n\n clone() {\n return new ODataResponseOptions(this);\n }\n\n setFeatures(features: string) {\n features.split(';').forEach((o) => {\n let [k, v] = o.split('=');\n switch (k.trim()) {\n case 'odata.metadata':\n this.metadata = v as ODataMetadataType;\n break;\n case 'odata.streaming':\n this.streaming = v == 'true';\n break;\n case 'IEEE754Compatible':\n this.ieee754Compatible = v == 'true';\n break;\n }\n });\n }\n\n setVersion(version: string) {\n const value = version.replace(/\\;/g, '').trim();\n if ([VERSION_2_0, VERSION_3_0, VERSION_4_0].indexOf(value) !== -1)\n this.version = value as ODataVersion;\n }\n\n setLocation(location: string) {\n // TODO: resolve location?\n this.location = location;\n }\n\n setCache(cacheControl: string) {\n cacheControl.split(',').forEach((directive) => {\n if (directive.startsWith(MAX_AGE)) {\n let maxAge = Number(directive.split('=')[1]);\n if (!Number.isNaN(maxAge)) this.maxAge = maxAge;\n }\n if (\n ['public', 'private', 'no-cache', 'no-store'].indexOf(directive) !== -1\n ) {\n this.cacheability = directive as CacheCacheability;\n }\n });\n }\n}\n","import { HttpHeaders, HttpResponse } from '@angular/common/http';\nimport {\n ODataEntityAnnotations,\n ODataEntitiesAnnotations,\n ODataPropertyAnnotations,\n} from './annotations';\nimport { Types } from '../../utils/types';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity, ODataProperty } from './types';\nimport {\n APPLICATION_JSON,\n ODATA_VERSION_HEADERS,\n CONTENT_TYPE,\n CACHE_CONTROL,\n LOCATION_HEADER,\n ETAG_HEADERS,\n ODATA_ENTITYID_HEADERS,\n} from '../../constants';\nimport { ODataApi } from '../../api';\nimport { ODataRequest } from '../request';\nimport { ODataResponseOptions } from './options';\nimport { Http } from '../../utils/http';\nimport { ODataContext } from '../../helper';\n\n/**\n * OData Response\n */\nexport class ODataResponse<T> extends HttpResponse<T> {\n readonly api: ODataApi;\n readonly resource: ODataResource<T>;\n\n constructor(init: {\n api: ODataApi;\n resource: ODataResource<T>;\n body: T | null;\n headers: HttpHeaders;\n status: number;\n statusText: string;\n url?: string;\n }) {\n super(init);\n this.api = init.api;\n this.resource = init.resource;\n }\n\n static fromHttpResponse<T>(req: ODataRequest<T>, res: HttpResponse<T>) {\n return new ODataResponse<T>({\n api: req.api,\n resource: req.resource,\n body: res.body,\n headers: res.headers,\n status: res.status,\n statusText: res.statusText,\n url: res.url || undefined,\n });\n }\n\n static fromJSON<T>(\n req: ODataRequest<T>,\n json: {\n body: T | null;\n headers: { [name: string]: string | string[] };\n status: number;\n statusText: string;\n url: string | null;\n }\n ) {\n return new ODataResponse<T>({\n api: req.api,\n resource: req.resource,\n body: json.body,\n headers: new HttpHeaders(json.headers),\n status: json.status,\n statusText: json.statusText,\n url: json.url || undefined,\n });\n }\n\n toJSON() {\n return {\n body: this.body,\n headers: this.headers\n .keys()\n .map((name) => ({ [name]: this.headers.getAll(name) || [] }))\n .reduce((acc, header) => Object.assign(acc, header), {}),\n status: this.status,\n statusText: this.statusText,\n url: this.url,\n };\n }\n\n private _options?: ODataResponseOptions;\n get options(): ODataResponseOptions {\n if (this._options === undefined) {\n this._options = new ODataResponseOptions(this.api.options);\n const contentType = this.headers.get(CONTENT_TYPE);\n if (contentType && contentType.indexOf(APPLICATION_JSON) !== -1) {\n const features = contentType\n .split(',')\n .find((p) => p.startsWith(APPLICATION_JSON)) as string;\n this._options.setFeatures(features);\n }\n const header = Http.resolveHeaderKey(this.headers, ODATA_VERSION_HEADERS);\n if (header) {\n const version = (this.headers.get(header) || '').replace(/\\;/g, '') as\n | '2.0'\n | '3.0'\n | '4.0';\n this._options.setVersion(version);\n }\n\n const location = this.headers.get(LOCATION_HEADER);\n if (location) {\n this._options.setLocation(location);\n }\n\n const cacheControl = this.headers.get(CACHE_CONTROL);\n if (cacheControl) {\n this._options.setCache(cacheControl);\n }\n }\n return this._options;\n }\n\n private _payload?: any;\n get payload() {\n if (this._payload === undefined) {\n this._payload =\n this.body && this.options.version === '2.0'\n ? (<any>this.body)['d']\n : this.body;\n }\n return this._payload;\n }\n\n private _context?: any;\n get context(): ODataContext {\n if (this._context === undefined) {\n this._context = this.options.helper.context(\n Types.isPlainObject(this.payload) ? this.payload : {}\n );\n }\n return this._context;\n }\n\n private _annotations?: any;\n get annotations(): { [name: string]: any } {\n if (this._annotations === undefined) {\n const options = this.options;\n this._annotations = options.helper.annotations(this.payload || {});\n let key = Http.resolveHeaderKey(this.headers, ETAG_HEADERS);\n if (key) {\n const etag = this.headers.get(key);\n if (etag) options.helper.etag(this._annotations, etag);\n }\n key = Http.resolveHeaderKey(this.headers, ODATA_ENTITYID_HEADERS);\n if (key) {\n const entityId = this.headers.get(key);\n if (entityId) options.helper.id(this._annotations, entityId);\n }\n }\n return this._annotations;\n }\n\n /**\n * Handle the response body as an entity\n * @returns\n */\n entity(): ODataEntity<T> {\n const options = this.options;\n const payload = this.payload;\n const annots = new ODataEntityAnnotations(\n options.helper,\n this.annotations,\n this.context\n );\n const data = payload ? annots.data(payload) : null;\n let entity = (\n data !== null && Types.isPlainObject(data)\n ? options.helper.attributes(data, this.api.options.stripMetadata)\n : data\n ) as T | null;\n\n if (entity !== null)\n entity = this.resource.deserialize(entity, options) as T;\n return { entity, annots };\n }\n\n /**\n * Handle the response body as entities\n * @returns\n */\n entities(): ODataEntities<T> {\n const options = this.options;\n const payload = this.payload;\n const annots = new ODataEntitiesAnnotations(\n options.helper,\n this.annotations,\n this.context\n );\n let entities = payload ? annots.data(payload) : null;\n\n if (entities !== null)\n entities = this.resource.deserialize(entities, options) as T[];\n return { entities, annots };\n }\n\n /**\n * Handle the response body as a property\n * @returns\n */\n property(): ODataProperty<T> {\n const options = this.options;\n const payload = this.payload;\n const annots = new ODataPropertyAnnotations(\n options.helper,\n this.annotations,\n this.context\n );\n const data = payload ? (annots.data(payload) as T) : null;\n let property = (\n data !== null && Types.isPlainObject(data)\n ? options.helper.attributes(data, this.api.options.stripMetadata)\n : data\n ) as T | null;\n\n if (property !== null)\n property = this.resource.deserialize(property, options) as T;\n return { property, annots };\n }\n\n /**\n * Handle the response body as a value\n * @returns\n */\n value(): T | null {\n const options = this.options;\n const payload = this.payload;\n let value = (\n payload !== null && Types.isPlainObject(payload)\n ? options.helper.attributes(payload, this.api.options.stripMetadata)\n : payload\n ) as T | null;\n\n if (value !== null) value = this.resource.deserialize(value, options) as T;\n return value;\n }\n}\n","export class CsdlFunction {\n constructor(\n public name: string,\n public returnType: CsdlReturnType,\n public isBound?: boolean,\n public entitySetPath?: string,\n public isComposable?: boolean,\n public parameters?: CsdlParameter[]\n ) {}\n}\n\nexport class CsdlAction {\n constructor(\n public name: string,\n public returnType?: CsdlReturnType,\n public isBound?: boolean,\n public entitySetPath?: string,\n public parameters?: CsdlParameter[]\n ) {}\n}\n\nexport class CsdlFunctionImport {\n constructor(\n public name: string,\n public functionName: string,\n public entitySet?: string,\n public IncludeInServiceDocument?: boolean\n ) {}\n}\n\nexport class CsdlActionImport {\n constructor(\n public name: string,\n public action: string,\n public entitySet?: string\n ) {}\n}\n\nexport class CsdlParameter {\n constructor(\n public name: string,\n public type: string,\n public nullable?: boolean,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public srid?: string\n ) {}\n}\n\nexport class CsdlReturnType {\n constructor(\n public type: string,\n public nullable?: boolean,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public srid?: string\n ) {}\n}\n","export class CsdlAnnotable {\n constructor(public annotationList?: CsdlAnnotation[]) {}\n}\n\nexport class CsdlAnnotations extends CsdlAnnotable {\n constructor(\n public target: string,\n annotationList: CsdlAnnotation[],\n public qualifier?: string\n ) {\n super(annotationList);\n }\n}\n\nexport class CsdlAnnotation {\n constructor(public term: string, public qualifier?: string) {}\n}\n\nexport class CsdlTerm {\n constructor(\n public name: string,\n public type: string,\n public baseTerm?: string,\n public defaultValue?: string,\n public appliesTo?: string,\n public nullable?: boolean,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public srid?: string\n ) {}\n}\n","import {\n CsdlProperty,\n CsdlNavigationProperty,\n} from './csdl-structural-property';\n\nexport class CsdlStructuredType {\n constructor(\n public name: string,\n public properties?: CsdlProperty[],\n public navigationProperties?: CsdlNavigationProperty[],\n public baseType?: string,\n public openType?: boolean,\n public abstract?: boolean\n ) {}\n}\n\nexport class CsdlComplexType extends CsdlStructuredType {\n constructor(\n name: string,\n properties?: CsdlProperty[],\n navigationProperties?: CsdlNavigationProperty[],\n baseType?: string,\n openType?: boolean,\n abstract?: boolean\n ) {\n super(name, properties, navigationProperties, baseType, openType, abstract);\n }\n}\n\nexport class CsdlEntityType extends CsdlStructuredType {\n constructor(\n name: string,\n public key?: CsdlKey,\n properties?: CsdlProperty[],\n navigationProperties?: CsdlNavigationProperty[],\n baseType?: string,\n openType?: boolean,\n abstract?: boolean,\n public hasStream?: boolean\n ) {\n super(name, properties, navigationProperties, baseType, openType, abstract);\n }\n}\n\nexport class CsdlKey {\n constructor(public propertyRefs: CsdlPropertyRef[]) {}\n}\n\nexport class CsdlPropertyRef {\n constructor(public name: string, public alias?: string) {}\n}\n","export class CsdlEnumType {\n constructor(\n public name: string,\n public members: CsdlEnumMember[],\n public underlyingType?: string,\n public isFlags?: boolean\n ) {}\n}\n\nexport class CsdlEnumMember {\n constructor(public name: string, public value?: number) {}\n}\n","import { CsdlAnnotable, CsdlAnnotation } from './csdl-annotation';\n\nexport class CsdlReference extends CsdlAnnotable {\n constructor(\n public uri: string,\n public includes?: CsdlInclude[],\n public includeAnnotations?: CsdlIncludeAnnotations[],\n annotationList?: CsdlAnnotation[]\n ) {\n super(annotationList);\n }\n}\n\nexport class CsdlInclude {\n constructor(public namespace: string, public alias?: string) {}\n}\n\nexport class CsdlIncludeAnnotations {\n constructor(\n public termNamespace: string,\n public qualifier?: string,\n public targetNamespace?: string\n ) {}\n}\n","export abstract class CsdlStructuralProperty {\n constructor(\n public name: string,\n public type: string,\n public nullable?: boolean\n ) {}\n}\n\nexport class CsdlProperty extends CsdlStructuralProperty {\n constructor(\n name: string,\n type: string,\n nullable?: boolean,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public unicode?: boolean,\n public srid?: string,\n public defaultValue?: string\n ) {\n super(name, type, nullable);\n }\n}\n\nexport class CsdlNavigationProperty extends CsdlStructuralProperty {\n constructor(\n name: string,\n type: string,\n nullable?: boolean,\n public partner?: string,\n public containsTarget?: boolean,\n public referentialConstraints?: CsdlReferentialConstraint[],\n public onDelete?: CsdlOnDelete\n ) {\n super(name, type, nullable);\n }\n}\n\nexport class CsdlReferentialConstraint {\n constructor(public property: string, public referencedProperty: string) {}\n}\n\nexport class CsdlOnDelete {\n constructor(public action: string) {}\n}\n","import { CsdlEntitySet } from './csdl-entity-set';\nimport { CsdlSingleton } from './csdl-singleton';\nimport { CsdlFunctionImport, CsdlActionImport } from './csdl-function-action';\n\nexport class CsdlEntityContainer {\n constructor(\n public name: string,\n public extend?: string,\n public entitySets?: CsdlEntitySet[],\n public singletons?: CsdlSingleton[],\n public functionImports?: CsdlFunctionImport[],\n public actionImports?: CsdlActionImport[]\n ) {}\n}\n","import { CsdlNavigationPropertyBinding } from './csdl-navigation-property-binding';\n\nexport class CsdlEntitySet {\n constructor(\n public name: string,\n public entityType: string,\n public navigationPropertyBinding?: CsdlNavigationPropertyBinding[],\n public includeInServiceDocument?: boolean\n ) {}\n}\n","export class CsdlNavigationPropertyBinding {\n constructor(public path: string, public target: string) {}\n}\n","import {\n CsdlAnnotation,\n CsdlAnnotable,\n CsdlTerm,\n CsdlAnnotations,\n} from './csdl-annotation';\nimport { CsdlTypeDefinition } from './csdl-type-definition';\nimport { CsdlEnumType } from './csdl-enum-type';\nimport { CsdlEntityType, CsdlComplexType } from './csdl-structured-type';\nimport { CsdlFunction, CsdlAction } from './csdl-function-action';\nimport { CsdlEntityContainer } from './csdl-entity-container';\n\nexport class CsdlSchema extends CsdlAnnotable {\n constructor(\n public namespace: string,\n public alias?: string,\n public enumTypes?: CsdlEnumType[],\n public complexTypes?: CsdlComplexType[],\n public entityTypes?: CsdlEntityType[],\n public functions?: CsdlFunction[],\n public actions?: CsdlAction[],\n public entityContainer?: CsdlEntityContainer,\n public typeDefinitions?: CsdlTypeDefinition[],\n public terms?: CsdlTerm[],\n public annotationsList?: CsdlAnnotations[],\n annotationList?: CsdlAnnotation[]\n ) {\n super(annotationList);\n }\n}\n","import { CsdlNavigationPropertyBinding } from './csdl-navigation-property-binding';\n\nexport class CsdlSingleton {\n constructor(\n public name: string,\n public type: string,\n public navigationPropertyBindings?: CsdlNavigationPropertyBinding[]\n ) {}\n}\n","import { CsdlAnnotable, CsdlAnnotation } from './csdl-annotation';\n\nexport class CsdlTypeDefinition extends CsdlAnnotable {\n constructor(\n public name: string,\n public underlayingType: string,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public unicode?: boolean,\n public srid?: string,\n annotationList?: CsdlAnnotation[]\n ) {\n super(annotationList);\n }\n}\n","import {\n CsdlAction,\n CsdlActionImport,\n CsdlFunction,\n CsdlFunctionImport,\n CsdlParameter,\n CsdlReturnType,\n} from './csdl/csdl-function-action';\nimport {\n CsdlAnnotation,\n CsdlAnnotations,\n CsdlTerm,\n} from './csdl/csdl-annotation';\nimport {\n CsdlComplexType,\n CsdlEntityType,\n CsdlKey,\n CsdlPropertyRef,\n} from './csdl/csdl-structured-type';\nimport { CsdlEnumMember, CsdlEnumType } from './csdl/csdl-enum-type';\nimport {\n CsdlInclude,\n CsdlIncludeAnnotations,\n CsdlReference,\n} from './csdl/csdl-reference';\nimport {\n CsdlNavigationProperty,\n CsdlOnDelete,\n CsdlProperty,\n CsdlReferentialConstraint,\n} from './csdl/csdl-structural-property';\n\nimport { CsdlEntityContainer } from './csdl/csdl-entity-container';\nimport { CsdlEntitySet } from './csdl/csdl-entity-set';\nimport { CsdlNavigationPropertyBinding } from './csdl/csdl-navigation-property-binding';\nimport { CsdlSchema } from './csdl/csdl-schema';\nimport { CsdlSingleton } from './csdl/csdl-singleton';\nimport { CsdlTypeDefinition } from './csdl/csdl-type-definition';\nimport { Types } from '../../utils/types';\nimport { VERSION_4_0 } from '../../constants';\n\nenum FieldType {\n ATTRIBUTE,\n TAG,\n}\n\nclass Field {\n constructor(public name: string, public fieldType: FieldType) {}\n}\n\nexport class ODataMetadata {\n // TAGS\n private static readonly TAG_EDMX = 'edmx:Edmx';\n private static readonly TAG_DATA_SERVICES = 'edmx:DataServices';\n private static readonly TAG_REFERENCE = 'edmx:Reference';\n private static readonly TAG_INCLUDE = 'edmx:Include';\n private static readonly TAG_INCLUDE_ANNOTATIONS = 'edmx:IncludeAnnotations';\n private static readonly TAG_TERM = 'Term';\n private static readonly TAG_ANNOTATIONS = 'Annotations';\n private static readonly TAG_ANNOTATION = 'Annotation';\n private static readonly TAG_SCHEMA = 'Schema';\n private static readonly TAG_ENUM_TYPE = 'EnumType';\n private static readonly TAG_MEMBER = 'Member';\n private static readonly TAG_COMPLEX_TYPE = 'ComplexType';\n private static readonly TAG_ENTITY_TYPE = 'EntityType';\n private static readonly TAG_PROPERTY = 'Property';\n private static readonly TAG_KEY = 'Key';\n private static readonly TAG_PROPERTY_REF = 'PropertyRef';\n private static readonly TAG_NAVIGATION_PROPERTY = 'NavigationProperty';\n private static readonly TAG_REFERENTIAL_CONSTRAINT = 'ReferentialConstraint';\n private static readonly TAG_ON_DELETE = 'OnDelete';\n private static readonly TAG_FUNCTION = 'Function';\n private static readonly TAG_RETURN_TYPE = 'ReturnType';\n private static readonly TAG_PARAMETER = 'Parameter';\n private static readonly TAG_ACTION = 'Action';\n private static readonly TAG_ENTITY_CONTAINER = 'EntityContainer';\n private static readonly TAG_ENTITY_SET = 'EntitySet';\n private static readonly TAG_SINGLETON = 'Singleton';\n private static readonly TAG_FUNCTION_IMPORT = 'FunctionImport';\n private static readonly TAG_ACTION_IMPORT = 'ActionImport';\n private static readonly TAG_NAVIGATION_PROPERTY_BINDING =\n 'NavigationPropertyBinding';\n private static readonly TAG_TYPE_DEFINITION = 'TypeDefinition';\n\n // ATTRIBUTES\n private static readonly ATTRIBUTE_VERSION = 'Version';\n private static readonly ATTRIBUTE_URI = 'Uri';\n private static readonly ATTRIBUTE_ALIAS = 'Alias';\n private static readonly ATTRIBUTE_NAMESPACE = 'Namespace';\n private static readonly ATTRIBUTE_TERM_NAMESPACE = 'TermNamespace';\n private static readonly ATTRIBUTE_QUALIFIER = 'Qualifier';\n private static readonly ATTRIBUTE_TARGET_NAMESPACE = 'TargetNamespace';\n private static readonly ATTRIBUTE_TERM = 'Term';\n private static readonly ATTRIBUTE_NAME = 'Name';\n private static readonly ATTRIBUTE_VALUE = 'Value';\n private static readonly ATTRIBUTE_BASE_TYPE = 'BaseType';\n private static readonly ATTRIBUTE_OPEN_TYPE = 'OpenType';\n private static readonly ATTRIBUTE_TYPE = 'Type';\n private static readonly ATTRIBUTE_NULLABLE = 'Nullable';\n private static readonly ATTRIBUTE_MAX_LENGTH = 'MaxLength';\n private static readonly ATTRIBUTE_PRECISION = 'Precision';\n private static readonly ATTRIBUTE_SCALE = 'Scale';\n private static readonly ATTRIBUTE_UNICODE = 'Unicode';\n private static readonly ATTRIBUTE_SRID = 'SRID';\n private static readonly ATTRIBUTE_DEFAULT_VALUE = 'DefaultValue';\n private static readonly ATTRIBUTE_PARTNER = 'Partner';\n private static readonly ATTRIBUTE_PROPERTY = 'Property';\n private static readonly ATTRIBUTE_REFERENCED_PROPERTY = 'ReferencedProperty';\n private static readonly ATTRIBUTE_HAS_STREAM = 'HasStream';\n private static readonly ATTRIBUTE_CONTAINS_TARGET = 'ContainsTarget';\n private static readonly ATTRIBUTE_IS_BOUND = 'IsBound';\n private static readonly ATTRIBUTE_ENTITY_SET_PATH = 'EntitySetPath';\n private static readonly ATTRIBUTE_IS_COMPOSABLE = 'IsComposable';\n private static readonly ATTRIBUTE_ENTITY_TYPE = 'EntityType';\n private static readonly ATTRIBUTE_PATH = 'Path';\n private static readonly ATTRIBUTE_TARGET = 'Target';\n private static readonly ATTRIBUTE_FUNCTION = 'Function';\n private static readonly ATTRIBUTE_ACTION = 'Action';\n private static readonly ATTRIBUTE_ENTITY_SET = 'EntitySet';\n private static readonly ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT =\n 'IncludeInServiceDocument';\n private static readonly ATTRIBUTE_ABSTRACT = 'Abstract';\n private static readonly ATTRIBUTE_UNDERLYING_TYPE = 'UnderlyingType';\n private static readonly ATTRIBUTE_IS_FLAGS = 'IsFlags';\n private static readonly ATTRIBUTE_EXTENDS = 'Extends';\n private static readonly ATTRIBUTE_BASE_TERM = 'BaseTerm';\n private static readonly ATTRIBUTE_APPLIES_TO = 'AppliesTo';\n\n public readonly version: string;\n public readonly references: CsdlReference[];\n public readonly schemas: CsdlSchema[];\n\n constructor(xml: string) {\n try {\n const parser: DOMParser = new DOMParser();\n const document: Document = parser.parseFromString(xml, 'text/xml');\n\n this.checkVersion(document);\n\n this.version = this.getFieldValueByAttribute(\n new Field(ODataMetadata.ATTRIBUTE_VERSION, FieldType.ATTRIBUTE),\n document.documentElement.attributes\n );\n\n this.references = this.getObjects(\n document.documentElement,\n ODataMetadata.TAG_REFERENCE,\n [\n new Field(ODataMetadata.ATTRIBUTE_URI, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_INCLUDE, FieldType.TAG),\n new Field(ODataMetadata.TAG_INCLUDE_ANNOTATIONS, FieldType.TAG),\n new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),\n ]\n );\n\n const dataServices: Element =\n document.documentElement.getElementsByTagName(\n ODataMetadata.TAG_DATA_SERVICES\n )[0];\n this.schemas = this.getObjects(dataServices, ODataMetadata.TAG_SCHEMA, [\n new Field(ODataMetadata.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_ENUM_TYPE, FieldType.TAG),\n new Field(ODataMetadata.TAG_COMPLEX_TYPE, FieldType.TAG),\n new Field(ODataMetadata.TAG_ENTITY_TYPE, FieldType.TAG),\n new Field(ODataMetadata.TAG_FUNCTION, FieldType.TAG),\n new Field(ODataMetadata.TAG_ACTION, FieldType.TAG),\n new Field(ODataMetadata.TAG_ENTITY_CONTAINER, FieldType.TAG),\n new Field(ODataMetadata.TAG_TYPE_DEFINITION, FieldType.TAG),\n new Field(ODataMetadata.TAG_TERM, FieldType.TAG),\n new Field(ODataMetadata.TAG_ANNOTATIONS, FieldType.TAG),\n new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),\n ]);\n } catch (error) {\n throw new Error('Unable to parse metadata, ' + error);\n }\n }\n\n protected checkVersion(document: Document) {\n // check version\n const attributes: NamedNodeMap = document.documentElement.attributes;\n if (!attributes) {\n throw new Error('OData version is not specified in the metadata');\n }\n const attr: Attr | null = attributes.getNamedItem('Version');\n if (attr === null) {\n throw new Error('OData version is not specified in the metadata');\n }\n const odataVersion = attr?.nodeValue;\n if (odataVersion !== VERSION_4_0) {\n throw new Error('OData version \"' + odataVersion + '\" is not supported');\n }\n }\n\n protected getObjects(\n parentElement: Element,\n tag: string,\n fieldNames: Field[]\n ): any[] {\n let objects: any[] = [];\n\n const children: HTMLCollection = parentElement.children;\n for (let index = 0; index < children.length; index++) {\n const element = children.item(index);\n\n if (!element || element.nodeName !== tag) {\n continue;\n }\n\n const attributes: NamedNodeMap = element.attributes;\n const fieldValues: any[] = this.getFieldValues(\n fieldNames,\n attributes,\n element\n );\n switch (tag) {\n case ODataMetadata.TAG_REFERENCE:\n objects.push(\n new CsdlReference(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3]\n )\n );\n break;\n case ODataMetadata.TAG_INCLUDE:\n objects.push(new CsdlInclude(fieldValues[0], fieldValues[1]));\n break;\n case ODataMetadata.TAG_INCLUDE_ANNOTATIONS:\n objects.push(\n new CsdlIncludeAnnotations(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2]\n )\n );\n break;\n case ODataMetadata.TAG_TERM:\n objects.push(\n new CsdlTerm(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7],\n fieldValues[8],\n fieldValues[9]\n )\n );\n break;\n case ODataMetadata.TAG_ANNOTATIONS:\n objects.push(\n new CsdlAnnotations(fieldValues[0], fieldValues[1], fieldValues[2])\n );\n break;\n case ODataMetadata.TAG_ANNOTATION:\n objects.push(new CsdlAnnotation(fieldValues[0], fieldValues[1]));\n break;\n case ODataMetadata.TAG_SCHEMA:\n objects.push(\n new CsdlSchema(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7],\n fieldValues[8],\n fieldValues[9],\n fieldValues[10],\n fieldValues[11]\n )\n );\n break;\n case ODataMetadata.TAG_ENUM_TYPE:\n objects.push(\n new CsdlEnumType(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3]\n )\n );\n break;\n case ODataMetadata.TAG_COMPLEX_TYPE:\n objects.push(\n new CsdlComplexType(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5]\n )\n );\n break;\n case ODataMetadata.TAG_ENTITY_TYPE:\n objects.push(\n new CsdlEntityType(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7]\n )\n );\n break;\n case ODataMetadata.TAG_FUNCTION:\n objects.push(\n new CsdlFunction(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5]\n )\n );\n break;\n case ODataMetadata.TAG_MEMBER:\n objects.push(new CsdlEnumMember(fieldValues[0], fieldValues[1]));\n break;\n case ODataMetadata.TAG_PROPERTY:\n objects.push(\n new CsdlProperty(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7],\n fieldValues[8]\n )\n );\n break;\n case ODataMetadata.TAG_PROPERTY_REF:\n objects.push(new CsdlPropertyRef(fieldValues[0], fieldValues[1]));\n break;\n case ODataMetadata.TAG_NAVIGATION_PROPERTY:\n objects.push(\n new CsdlNavigationProperty(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6]\n )\n );\n break;\n case ODataMetadata.TAG_REFERENTIAL_CONSTRAINT:\n objects.push(\n new CsdlReferentialConstraint(fieldValues[0], fieldValues[1])\n );\n break;\n case ODataMetadata.TAG_PARAMETER:\n objects.push(\n new CsdlParameter(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6]\n )\n );\n break;\n case ODataMetadata.TAG_ACTION:\n objects.push(\n new CsdlAction(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4]\n )\n );\n break;\n case ODataMetadata.TAG_ENTITY_SET:\n objects.push(\n new CsdlEntitySet(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3]\n )\n );\n break;\n case ODataMetadata.TAG_SINGLETON:\n objects.push(\n new CsdlSingleton(fieldValues[0], fieldValues[1], fieldValues[2])\n );\n break;\n case ODataMetadata.TAG_FUNCTION_IMPORT:\n objects.push(\n new CsdlFunctionImport(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3]\n )\n );\n break;\n case ODataMetadata.TAG_ACTION_IMPORT:\n objects.push(\n new CsdlActionImport(fieldValues[0], fieldValues[1], fieldValues[2])\n );\n break;\n case ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING:\n objects.push(\n new CsdlNavigationPropertyBinding(fieldValues[0], fieldValues[1])\n );\n break;\n case ODataMetadata.TAG_TYPE_DEFINITION:\n objects.push(\n new CsdlTypeDefinition(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7]\n )\n );\n break;\n default:\n throw new Error('Unknwon tag:' + tag);\n }\n }\n\n return objects;\n }\n\n protected getObject(\n parentElement: Element,\n tag: string,\n fieldNames: Field[]\n ): any {\n let object: any;\n\n const children: HTMLCollection = parentElement.children;\n let element: Element | undefined | null;\n for (let index = 0; index < children.length; index++) {\n if (children && children.item(index)?.nodeName === tag) {\n if (element !== undefined && element !== null) {\n throw new Error('Expected one ' + tag);\n }\n element = children.item(index);\n }\n }\n\n if (element !== undefined && element !== null) {\n const attributes: NamedNodeMap = element.attributes;\n const fieldValues: any[] = this.getFieldValues(\n fieldNames,\n attributes,\n element\n );\n switch (tag) {\n case ODataMetadata.TAG_KEY:\n object = new CsdlKey(fieldValues[0]);\n break;\n case ODataMetadata.TAG_RETURN_TYPE:\n object = new CsdlReturnType(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5]\n );\n break;\n case ODataMetadata.TAG_ENTITY_CONTAINER:\n object = new CsdlEntityContainer(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5]\n );\n break;\n case ODataMetadata.TAG_ON_DELETE:\n object = new CsdlOnDelete(fieldValues[0]);\n break;\n default:\n throw new Error('Unknwon tag:' + tag);\n }\n }\n\n return object;\n }\n\n protected getFieldValues(\n fields: Field[],\n attributes: NamedNodeMap,\n element: Element\n ): any[] {\n const fieldValues: any[] = [];\n\n for (const field of fields) {\n if (field.fieldType === FieldType.TAG) {\n fieldValues.push(this.getFieldValueByTag(field, element));\n } else if (field.fieldType === FieldType.ATTRIBUTE) {\n fieldValues.push(this.getFieldValueByAttribute(field, attributes));\n } else {\n throw new Error('Unknown field type: ' + field.fieldType);\n }\n }\n\n return fieldValues;\n }\n\n protected getFieldValueByAttribute(\n field: Field,\n attributes: NamedNodeMap\n ): any {\n switch (field.name) {\n case ODataMetadata.ATTRIBUTE_VERSION:\n case ODataMetadata.ATTRIBUTE_URI:\n case ODataMetadata.ATTRIBUTE_NAMESPACE:\n case ODataMetadata.ATTRIBUTE_ALIAS:\n case ODataMetadata.ATTRIBUTE_TERM_NAMESPACE:\n case ODataMetadata.ATTRIBUTE_TERM:\n case ODataMetadata.ATTRIBUTE_QUALIFIER:\n case ODataMetadata.ATTRIBUTE_TARGET_NAMESPACE:\n case ODataMetadata.ATTRIBUTE_NAME:\n case ODataMetadata.ATTRIBUTE_TYPE:\n case ODataMetadata.ATTRIBUTE_SRID:\n case ODataMetadata.ATTRIBUTE_DEFAULT_VALUE:\n case ODataMetadata.ATTRIBUTE_PARTNER:\n case ODataMetadata.ATTRIBUTE_PROPERTY:\n case ODataMetadata.ATTRIBUTE_REFERENCED_PROPERTY:\n case ODataMetadata.ATTRIBUTE_BASE_TYPE:\n case ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH:\n case ODataMetadata.ATTRIBUTE_ENTITY_TYPE:\n case ODataMetadata.ATTRIBUTE_PATH:\n case ODataMetadata.ATTRIBUTE_TARGET:\n case ODataMetadata.ATTRIBUTE_FUNCTION:\n case ODataMetadata.ATTRIBUTE_ACTION:\n case ODataMetadata.ATTRIBUTE_ENTITY_SET:\n case ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE:\n case ODataMetadata.ATTRIBUTE_EXTENDS:\n case ODataMetadata.ATTRIBUTE_BASE_TERM:\n case ODataMetadata.ATTRIBUTE_APPLIES_TO:\n return this.getAttributeValue(attributes, field.name);\n case ODataMetadata.ATTRIBUTE_NULLABLE:\n case ODataMetadata.ATTRIBUTE_UNICODE:\n case ODataMetadata.ATTRIBUTE_OPEN_TYPE:\n case ODataMetadata.ATTRIBUTE_HAS_STREAM:\n case ODataMetadata.ATTRIBUTE_IS_BOUND:\n case ODataMetadata.ATTRIBUTE_IS_COMPOSABLE:\n case ODataMetadata.ATTRIBUTE_CONTAINS_TARGET:\n case ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT:\n case ODataMetadata.ATTRIBUTE_ABSTRACT:\n case ODataMetadata.ATTRIBUTE_IS_FLAGS:\n return this.propertyValueToBoolean(\n this.getAttributeValue(attributes, field.name)\n );\n case ODataMetadata.ATTRIBUTE_VALUE:\n case ODataMetadata.ATTRIBUTE_MAX_LENGTH:\n case ODataMetadata.ATTRIBUTE_PRECISION:\n case ODataMetadata.ATTRIBUTE_SCALE:\n return this.propertyValueToNumber(\n this.getAttributeValue(attributes, field.name)\n );\n default:\n throw new Error('Unknwon attribute:' + field.name);\n }\n }\n\n protected getFieldValueByTag(field: Field, element: Element): any[] {\n switch (field.name) {\n case ODataMetadata.TAG_INCLUDE:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_INCLUDE_ANNOTATIONS:\n return this.getObjects(element, field.name, [\n new Field(\n ODataMetadata.ATTRIBUTE_TERM_NAMESPACE,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_TARGET_NAMESPACE,\n FieldType.ATTRIBUTE\n ),\n ]);\n case ODataMetadata.TAG_TERM:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_BASE_TERM, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_DEFAULT_VALUE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_APPLIES_TO, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ANNOTATIONS:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ANNOTATION:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_TERM, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ENUM_TYPE:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_MEMBER, FieldType.TAG),\n new Field(\n ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.ATTRIBUTE_IS_FLAGS, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_COMPLEX_TYPE:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_PROPERTY, FieldType.TAG),\n new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_BASE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_OPEN_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ABSTRACT, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ENTITY_TYPE:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_KEY, FieldType.TAG),\n new Field(ODataMetadata.TAG_PROPERTY, FieldType.TAG),\n new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_BASE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_OPEN_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_HAS_STREAM, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ABSTRACT, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_FUNCTION:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_RETURN_TYPE, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_IS_BOUND, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.ATTRIBUTE_IS_COMPOSABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_PARAMETER, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_MEMBER:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_VALUE, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_PROPERTY:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_DEFAULT_VALUE, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_KEY:\n return this.getObject(element, field.name, [\n new Field(ODataMetadata.TAG_PROPERTY_REF, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_PROPERTY_REF:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_NAVIGATION_PROPERTY:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PARTNER, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_CONTAINS_TARGET,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.TAG_REFERENTIAL_CONSTRAINT, FieldType.TAG),\n new Field(ODataMetadata.TAG_ON_DELETE, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_REFERENTIAL_CONSTRAINT:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_PROPERTY, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_REFERENCED_PROPERTY,\n FieldType.ATTRIBUTE\n ),\n ]);\n case ODataMetadata.TAG_ON_DELETE:\n return this.getObject(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_PARAMETER:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_RETURN_TYPE:\n return this.getObject(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ACTION:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_RETURN_TYPE, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_IS_BOUND, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.TAG_PARAMETER, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_ENTITY_CONTAINER:\n return this.getObject(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_EXTENDS, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_ENTITY_SET, FieldType.TAG),\n new Field(ODataMetadata.TAG_SINGLETON, FieldType.TAG),\n new Field(ODataMetadata.TAG_FUNCTION_IMPORT, FieldType.TAG),\n new Field(ODataMetadata.TAG_ACTION_IMPORT, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_ENTITY_SET:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ENTITY_TYPE, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING,\n FieldType.TAG\n ),\n new Field(\n ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT,\n FieldType.ATTRIBUTE\n ),\n ]);\n case ODataMetadata.TAG_SINGLETON:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING,\n FieldType.TAG\n ),\n ]);\n case ODataMetadata.TAG_FUNCTION_IMPORT:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_FUNCTION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT,\n FieldType.ATTRIBUTE\n ),\n ]);\n case ODataMetadata.TAG_ACTION_IMPORT:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_PATH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_TYPE_DEFINITION:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),\n ]);\n default:\n throw new Error('Unknwon tag:' + field.name);\n }\n }\n\n protected getAttributeValue(attributes: NamedNodeMap, attributeName: string) {\n const attribute: Attr | null = attributes.getNamedItem(attributeName);\n return attribute !== null && attribute.nodeValue\n ? attribute.nodeValue\n : undefined;\n }\n\n protected propertyValueToNumber(attributeValue?: string) {\n return attributeValue !== undefined ? Number(attributeValue) : undefined;\n }\n\n protected propertyValueToBoolean(attributeValue?: string) {\n return attributeValue !== undefined ? attributeValue === 'true' : false;\n }\n}\n","import {\n HttpErrorResponse,\n HttpHeaders,\n HttpResponse,\n} from '@angular/common/http';\nimport { Observable, Subject } from 'rxjs';\nimport { ODataApi } from '../../api';\nimport {\n $BATCH,\n ACCEPT,\n APPLICATION_HTTP,\n APPLICATION_JSON,\n BATCH_PREFIX,\n BINARY,\n BOUNDARY_PREFIX_SUFFIX,\n CHANGESET_PREFIX,\n CONTENT_ID,\n CONTENT_TRANSFER_ENCODING,\n CONTENT_TYPE,\n HTTP11,\n MULTIPART_MIXED,\n MULTIPART_MIXED_BOUNDARY,\n NEWLINE,\n NEWLINE_REGEXP,\n ODATA_VERSION,\n VERSION_4_0,\n XSSI_PREFIX,\n} from '../../constants';\nimport { PathSegmentNames } from '../../types';\nimport { Http } from '../../utils/http';\nimport { Strings } from '../../utils/strings';\nimport { ODataPathSegments } from '../path';\nimport { ODataRequest } from '../request';\nimport { ODataResource } from '../resource';\nimport { ODataResponse } from '../responses';\nimport { ODataOptions } from './options';\n\nexport class ODataBatchRequest<T> extends Subject<ODataResponse<T>> {\n constructor(public request: ODataRequest<any>) {\n super();\n }\n\n override toString() {\n //TODO: Relative or Absolute url ?\n let res = [\n `${this.request.method} ${this.request.pathWithParams} ${HTTP11}`,\n ];\n if (\n this.request.method === 'POST' ||\n this.request.method === 'PATCH' ||\n this.request.method === 'PUT'\n ) {\n res.push(`${CONTENT_TYPE}: ${APPLICATION_JSON}`);\n }\n\n if (this.request.headers instanceof HttpHeaders) {\n let headers = this.request.headers;\n res = [\n ...res,\n ...headers\n .keys()\n .map((key) => `${key}: ${(headers.getAll(key) || []).join(',')}`),\n ];\n }\n\n return res.join(NEWLINE);\n }\n\n onLoad(content: string[], status: { code: number; message: string }) {\n let headers: HttpHeaders = new HttpHeaders();\n var index = 1;\n for (; index < content.length; index++) {\n const batchBodyLine: string = content[index];\n\n if (batchBodyLine === '') {\n break;\n }\n\n const batchBodyLineParts: string[] = batchBodyLine.split(': ');\n headers = headers.append(\n batchBodyLineParts[0].trim(),\n batchBodyLineParts[1].trim()\n );\n }\n\n let body: string | { error: any; text: string } = '';\n for (; index < content.length; index++) {\n body += content[index];\n }\n\n if (status.code === 0) {\n status.code = !!body ? 200 : 0;\n }\n\n let ok = status.code >= 200 && status.code < 300;\n if (this.request.responseType === 'json' && typeof body === 'string') {\n const originalBody = body;\n body = body.replace(XSSI_PREFIX, '');\n try {\n body = body !== '' ? JSON.parse(body) : null;\n } catch (error) {\n body = originalBody;\n\n if (ok) {\n ok = false;\n body = { error, text: body };\n }\n }\n }\n\n if (ok) {\n let res = new HttpResponse<any>({\n body,\n headers,\n status: status.code,\n statusText: status.message,\n url: this.request.urlWithParams,\n });\n this.next(ODataResponse.fromHttpResponse(this.request, res));\n this.complete();\n } else {\n // An unsuccessful request is delivered on the error channel.\n this.error(\n new HttpErrorResponse({\n // The error in this case is the response body (error from the server).\n error: body,\n headers,\n status: status.code,\n statusText: status.message,\n url: this.request.urlWithParams,\n })\n );\n }\n }\n\n onError(content: string[], status: { code: number; text: string }) {\n const res = new HttpErrorResponse({\n error: content.join(NEWLINE),\n status: status.code || 0,\n statusText: status.text || 'Unknown Error',\n url: this.request.urlWithParams || undefined,\n });\n this.error(res);\n }\n}\n\n/**\n * OData Batch Resource\n * https://www.odata.org/getting-started/advanced-tutorial/#batch\n */\nexport class ODataBatchResource extends ODataResource<any> {\n // VARIABLES\n private _requests: ODataBatchRequest<any>[] = [];\n requests() {\n return this._requests.map((r) => r.request);\n }\n\n //#region Factory\n static factory(api: ODataApi) {\n let segments = new ODataPathSegments();\n segments.add(PathSegmentNames.batch, $BATCH);\n return new ODataBatchResource(api, { segments });\n }\n //#endregion\n\n /**\n * Execute the batch request\n * @param ctx The context for the request\n * @param options The options of the batch request\n * @returns The result of execute the context\n */\n exec<R>(\n ctx: (batch: this) => Observable<R>,\n options?: ODataOptions\n ): Observable<R> {\n // Store original requester\n const current = this.api.request;\n // Switch to the batch requester\n this.api.request = (req: ODataRequest<any>): Observable<any> => {\n if (req.api !== this.api)\n throw new Error('Batch Request are for the same api.');\n if (req.observe === 'events')\n throw new Error(\"Batch Request does not allows observe == 'events'.\");\n this._requests.push(new ODataBatchRequest<any>(req));\n return this._requests[this._requests.length - 1];\n };\n // Execute the context\n const obs$ = ctx(this);\n // Restore original requester\n this.api.request = current;\n\n if (this._requests.length >= 0) {\n const bound = Strings.uniqueId(BATCH_PREFIX);\n const requests = this._requests;\n const headers = Http.mergeHttpHeaders(\n (options && options.headers) || {},\n {\n [ODATA_VERSION]: VERSION_4_0,\n [CONTENT_TYPE]: MULTIPART_MIXED_BOUNDARY + bound,\n [ACCEPT]: MULTIPART_MIXED,\n }\n );\n const request = new ODataRequest({\n method: 'POST',\n body: ODataBatchResource.buildBody(bound, requests),\n api: this.api,\n resource: this,\n observe: 'response',\n responseType: 'text',\n headers: headers,\n params: options ? options.params : undefined,\n withCredentials: options ? options.withCredentials : undefined,\n });\n this.api.request(request).subscribe((response) => {\n ODataBatchResource.handleResponse(requests, response);\n });\n }\n\n return obs$;\n }\n\n body() {\n return ODataBatchResource.buildBody(\n Strings.uniqueId(BATCH_PREFIX),\n this._requests\n );\n }\n\n static buildBody(\n batchBoundary: string,\n requests: ODataBatchRequest<any>[]\n ): string {\n let res = [];\n let changesetBoundary: string | null = null;\n let changesetId = 1;\n\n for (const batch of requests) {\n // if method is GET and there is a changeset boundary open then close it\n if (batch.request.method === 'GET' && changesetBoundary !== null) {\n res.push(\n `${BOUNDARY_PREFIX_SUFFIX}${changesetBoundary}${BOUNDARY_PREFIX_SUFFIX}`\n );\n changesetBoundary = null;\n }\n\n // if there is no changeset boundary open then open a batch boundary\n if (changesetBoundary === null) {\n res.push(`${BOUNDARY_PREFIX_SUFFIX}${batchBoundary}`);\n }\n\n // if method is not GET and there is no changeset boundary open then open a changeset boundary\n if (batch.request.method !== 'GET') {\n if (changesetBoundary === null) {\n changesetBoundary = Strings.uniqueId(CHANGESET_PREFIX);\n res.push(\n `${CONTENT_TYPE}: ${MULTIPART_MIXED_BOUNDARY}${changesetBoundary}`\n );\n res.push(NEWLINE);\n }\n res.push(`${BOUNDARY_PREFIX_SUFFIX}${changesetBoundary}`);\n }\n\n res.push(`${CONTENT_TYPE}: ${APPLICATION_HTTP}`);\n res.push(`${CONTENT_TRANSFER_ENCODING}: ${BINARY}`);\n\n if (batch.request.method !== 'GET') {\n res.push(`${CONTENT_ID}: ${changesetId++}`);\n }\n\n res.push(NEWLINE);\n res.push(`${batch}`);\n\n if (batch.request.method === 'GET' || batch.request.method === 'DELETE') {\n res.push(NEWLINE);\n } else {\n res.push(`${NEWLINE}${JSON.stringify(batch.request.body)}`);\n }\n }\n\n if (res.length) {\n if (changesetBoundary !== null) {\n res.push(\n `${BOUNDARY_PREFIX_SUFFIX}${changesetBoundary}${BOUNDARY_PREFIX_SUFFIX}`\n );\n changesetBoundary = null;\n }\n res.push(\n `${BOUNDARY_PREFIX_SUFFIX}${batchBoundary}${BOUNDARY_PREFIX_SUFFIX}`\n );\n }\n return res.join(NEWLINE);\n }\n\n static handleResponse(\n requests: ODataBatchRequest<any>[],\n response: ODataResponse<any>\n ) {\n let chunks: string[][] = [];\n const contentType: string = response.headers.get(CONTENT_TYPE) || '';\n const batchBoundary: string = Http.boundaryDelimiter(contentType);\n const endLine: string = Http.boundaryEnd(batchBoundary);\n\n const lines: string[] = response.body.split(NEWLINE_REGEXP);\n\n let changesetResponses: string[][] | null = null;\n let contentId: number | null = null;\n let changesetBoundary: string | null = null;\n let changesetEndLine: string | null = null;\n let startIndex: number | null = null;\n for (let index = 0; index < lines.length; index++) {\n const line = lines[index];\n\n if (line.startsWith(CONTENT_TYPE)) {\n const contentTypeValue: string = Http.headerValue(line);\n if (contentTypeValue === MULTIPART_MIXED) {\n changesetResponses = [];\n contentId = null;\n changesetBoundary = Http.boundaryDelimiter(line);\n changesetEndLine = Http.boundaryEnd(changesetBoundary);\n startIndex = null;\n }\n continue;\n } else if (changesetResponses !== null && line.startsWith(CONTENT_ID)) {\n contentId = Number(Http.headerValue(line));\n } else if (line.startsWith(HTTP11)) {\n startIndex = index;\n } else if (\n line === batchBoundary ||\n line === changesetBoundary ||\n line === endLine ||\n line === changesetEndLine\n ) {\n if (!startIndex) {\n continue;\n }\n const chunk = lines.slice(startIndex, index);\n if (changesetResponses !== null && contentId !== null) {\n changesetResponses[contentId] = chunk;\n } else {\n chunks.push(chunk);\n }\n\n if (line === batchBoundary || line === changesetBoundary) {\n startIndex = index + 1;\n } else if (line === endLine || line === changesetEndLine) {\n if (changesetResponses !== null) {\n for (const response of changesetResponses) {\n if (response) {\n chunks.push(response);\n }\n }\n }\n changesetResponses = null;\n changesetBoundary = null;\n changesetEndLine = null;\n startIndex = null;\n }\n }\n }\n chunks.forEach((chunk, index) => {\n const req = requests[index];\n const { code, message } = Http.parseResponseStatus(chunk[0]);\n req.onLoad(chunk.slice(1), { code, message });\n });\n }\n}\n","import { Observable } from 'rxjs';\nimport { ODataApi } from '../../api';\nimport { $COUNT } from '../../constants';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataOptions } from './options';\n\nexport class ODataCountResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<T>(\n api: ODataApi,\n {\n segments,\n query,\n }: {\n segments: ODataPathSegments;\n query?: ODataQueryOptions<T>;\n }\n ) {\n segments.add(PathSegmentNames.count, $COUNT).type('Edm.Int32');\n query?.keep(QueryOptionNames.filter, QueryOptionNames.search);\n return new ODataCountResource<T>(api, { segments, query });\n }\n //#endregion\n\n //#region Requests\n protected override get(options?: ODataOptions): Observable<number> {\n return super.get({ responseType: 'value', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n /**\n * Fetch the count of the set.\n * @param options Options for the request\n * @returns The count of the set\n */\n fetch(options?: ODataOptions): Observable<number> {\n return this.get(options);\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataCollection } from '../../models/collection';\nimport { ODataModel } from '../../models/model';\nimport { ODataCallable } from '../../schema/callable';\nimport { PathSegmentNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity, ODataProperty } from '../responses';\nimport {\n ODataEntitiesOptions,\n ODataEntityOptions,\n ODataNoneOptions,\n ODataOptions,\n ODataPropertyOptions,\n} from './options';\n\nexport class ODataFunctionResource<P, R> extends ODataResource<R> {\n //#region Factory\n static factory<P, R>(\n api: ODataApi,\n {\n path,\n schema,\n segments,\n query,\n }: {\n path?: string;\n schema?: ODataCallable<R>;\n segments?: ODataPathSegments;\n query?: ODataQueryOptions<R>;\n }\n ) {\n segments = segments || new ODataPathSegments();\n path = schema !== undefined ? schema.path() : path;\n if (path === undefined)\n throw new Error(`ODataActionResource: path is required`);\n\n const segment = segments.add(PathSegmentNames.function, path);\n if (schema !== undefined) segment.type(schema.type());\n return new ODataFunctionResource<P, R>(api, {\n segments,\n query,\n schema,\n });\n }\n\n static fromResource<P, R>(resource: ODataResource<any>, path: string) {\n const baseType = resource.type();\n const schema = resource.api.findCallableForType<R>(path, baseType);\n const bindingType = schema?.binding()?.type;\n\n const func = ODataFunctionResource.factory<P, R>(resource.api, {\n path,\n schema,\n segments: resource.cloneSegments(),\n });\n\n // Switch entitySet to binding type if available\n if (bindingType !== undefined && bindingType !== baseType) {\n let entitySet = resource.api.findEntitySetForType(bindingType);\n if (entitySet !== undefined) {\n func.segment((s) => s.entitySet().path(entitySet!.name));\n }\n }\n\n return func;\n }\n //#endregion\n\n override returnType() {\n return this.schema instanceof ODataCallable\n ? this.schema.parser.return?.type\n : undefined;\n }\n\n parameters(params: P | null, { alias }: { alias?: boolean } = {}) {\n let parameters = params !== null ? this.encode(params) : null;\n if (alias && parameters !== null) {\n this.query((q) => {\n parameters = Object.entries(parameters).reduce((acc, [name, param]) => {\n return Object.assign(acc, { [name]: q.alias(param, name) });\n }, {});\n });\n }\n return this.clone<ODataFunctionResource<P, R>>().segment((s) =>\n s.function().parameters<P>(parameters)\n );\n }\n\n //#region Requests\n protected override get(\n options?: ODataEntityOptions & ODataEntitiesOptions & ODataPropertyOptions\n ): Observable<any> {\n return super.get(options);\n }\n //#endregion\n\n //#region Shortcuts\n /**\n * Execute the function\n * @param params Parameters to be sent to the function\n * @param alias If true, the parameters will be send using aliases\n * @param options Options for the request\n */\n call(\n params: P | null,\n options?: { alias?: boolean } & ODataEntityOptions\n ): Observable<ODataEntity<R>>;\n call(\n params: P | null,\n options?: { alias?: boolean } & ODataEntitiesOptions\n ): Observable<ODataEntities<R>>;\n call(\n params: P | null,\n options?: { alias?: boolean } & ODataPropertyOptions\n ): Observable<ODataProperty<R>>;\n call(\n params: P | null,\n options?: { alias?: boolean } & ODataNoneOptions\n ): Observable<null>;\n call(\n params: P | null,\n {\n alias,\n ...options\n }: { alias?: boolean } & ODataEntityOptions &\n ODataEntitiesOptions &\n ODataPropertyOptions &\n ODataNoneOptions = {}\n ): Observable<any> {\n return this.parameters(params, { alias }).get(options);\n }\n\n /**\n * Execute the function with the given parameters and return the result as a property\n * @param params Parameters to be sent to the function\n * @param alias If true, the parameters will be send using aliases\n * @param options Options for the request\n * @returns Observable of the result of the function\n */\n callProperty(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & ODataOptions = {}\n ): Observable<R | null> {\n return this.call(params, {\n responseType: 'property',\n alias,\n ...options,\n }).pipe(map(({ property }) => property));\n }\n\n /**\n * Execute the function with the given parameters and return the result as a entity\n * @param params Parameters to be sent to the function\n * @param alias If true, the parameters will be send using aliases\n * @param options Options for the request\n * @returns Observable of the result of the function\n */\n callEntity(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & ODataOptions = {}\n ): Observable<R | null> {\n return this.call(params, {\n responseType: 'entity',\n alias,\n ...options,\n }).pipe(map(({ entity }) => entity));\n }\n\n /**\n * Execute the function with the given parameters and return the result as a model\n * @param params Parameters to be sent to the function\n * @param alias If true, the parameters will be send using aliases\n * @param options Options for the request\n * @returns Observable of the result of the function\n */\n callModel<M extends ODataModel<R>>(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & ODataOptions = {}\n ): Observable<M | null> {\n return this.call(params, {\n responseType: 'entity',\n alias,\n ...options,\n }).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots, reset: true }) : null\n )\n );\n }\n\n /**\n * Execute the function with the given parameters and return the result as a entities\n * @param params Parameters to be sent to the function\n * @param alias If true, the parameters will be send using aliases\n * @param options Options for the request\n * @returns Observable of the result of the function\n */\n callEntities(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & ODataOptions = {}\n ): Observable<R[] | null> {\n return this.call(params, {\n responseType: 'entities',\n alias,\n ...options,\n }).pipe(map(({ entities }) => entities));\n }\n\n /**\n * Execute the function with the given parameters and return the result as a collection\n * @param params Parameters to be sent to the function\n * @param alias If true, the parameters will be send using aliases\n * @param options Options for the request\n * @returns Observable of the result of the function\n */\n callCollection<M extends ODataModel<R>, C extends ODataCollection<R, M>>(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & ODataOptions = {}\n ): Observable<C | null> {\n return this.call(params, {\n responseType: 'entities',\n alias,\n ...options,\n }).pipe(\n map(({ entities, annots }) =>\n entities\n ? this.asCollection<M, C>(entities, { annots, reset: true })\n : null\n )\n );\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { ODataApi } from '../../api';\nimport { $VALUE } from '../../constants';\nimport { PathSegmentNames } from '../../types';\nimport { Http } from '../../utils';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataOptions } from './options';\n\nexport class ODataMediaResource extends ODataResource<any> {\n //#region Factory\n static factory<V>(\n api: ODataApi,\n {\n segments,\n query,\n }: {\n segments: ODataPathSegments;\n query?: ODataQueryOptions<V>;\n }\n ) {\n segments.add(PathSegmentNames.value, $VALUE);\n return new ODataMediaResource(api, { segments, query });\n }\n //#endregion\n\n //#region Requests\n protected override get(\n options: { responseType: any } & ODataOptions\n ): Observable<any> {\n return super.get(options);\n }\n\n protected override put(\n data: ArrayBuffer | Blob,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<any> {\n return super.put(data, options);\n }\n //#endregion\n\n //#region Shortcuts\n fetch(\n options?: { responseType: 'arraybuffer' } & ODataOptions\n ): Observable<ArrayBuffer>;\n fetch(options?: { responseType: 'blob' } & ODataOptions): Observable<Blob>;\n fetch(options: { responseType: any } & ODataOptions): Observable<any> {\n return this.get(options);\n }\n\n fetchArraybuffer(options: ODataOptions = {}): Observable<ArrayBuffer> {\n return this.fetch({ responseType: 'arraybuffer', ...options });\n }\n\n fetchBlob(options: ODataOptions = {}): Observable<Blob> {\n return this.fetch({ responseType: 'blob', ...options });\n }\n\n upload(\n data: ArrayBuffer | Blob,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<any> {\n return this.put(data, options);\n }\n\n uploadArrayBuffer(\n data: ArrayBuffer,\n contentType: string,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<any> {\n options.headers = Http.mergeHttpHeaders(options.headers || {}, {\n 'Content-Type': contentType,\n });\n return this.upload(data, options);\n }\n\n uploadBlob(\n data: Blob,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<any> {\n return this.upload(data, options);\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { ODataApi } from '../../api';\nimport { $VALUE } from '../../constants';\nimport { ODataStructuredType } from '../../schema/structured-type';\nimport { PathSegmentNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataOptions } from './options';\n\nexport class ODataValueResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<V>(\n api: ODataApi,\n {\n type,\n schema,\n segments,\n query,\n }: {\n type?: string;\n schema?: ODataStructuredType<V>;\n segments: ODataPathSegments;\n query?: ODataQueryOptions<V>;\n }\n ) {\n const baseType = type;\n const bindingType = schema?.type();\n\n const segment = segments.add(PathSegmentNames.value, $VALUE);\n if (schema !== undefined) segment.type(schema.type());\n else if (type !== undefined) segment.type(type);\n\n query?.clear();\n const value = new ODataValueResource<V>(api, { segments, query, schema });\n\n // Switch entitySet to binding type if available\n if (bindingType !== undefined && bindingType !== baseType) {\n let entitySet = api.findEntitySetForType(bindingType);\n if (entitySet !== undefined) {\n value.segment((s) => s.entitySet().path(entitySet!.name));\n }\n }\n\n return value;\n }\n //#endregion\n\n //#region Requests\n protected override get(options?: ODataOptions): Observable<T> {\n return super.get({ responseType: 'value', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n\n /**\n * Fetch the value of the resource.\n * @param options OData options.\n * @returns Observable of the value.\n */\n fetch(options?: ODataOptions): Observable<T> {\n return this.get(options);\n }\n\n //#endregion\n}\n","import { EMPTY, Observable } from 'rxjs';\nimport { concatMap, expand, map, toArray } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataCollection, ODataModel } from '../../models';\nimport { ODataStructuredType, ODataStructuredTypeParser } from '../../schema';\n//import { ODataNavigationPropertyResource } from './navigation-property';\nimport { PathSegmentNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport {\n ODataEntities,\n ODataEntitiesAnnotations,\n ODataEntity,\n ODataEntityAnnotations,\n ODataProperty,\n} from '../responses';\nimport {\n ODataEntitiesOptions,\n ODataEntityOptions,\n ODataOptions,\n ODataPropertyOptions,\n} from './options';\nimport { ODataValueResource } from './value';\n\nexport class ODataPropertyResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<P>(\n api: ODataApi,\n {\n path,\n type,\n schema,\n segments,\n query,\n }: {\n path: string;\n type?: string;\n schema?: ODataStructuredType<P>;\n segments: ODataPathSegments;\n query?: ODataQueryOptions<P>;\n }\n ) {\n const segment = segments.add(PathSegmentNames.property, path);\n if (schema !== undefined) segment.type(schema.type());\n else if (type !== undefined) segment.type(type);\n\n query?.clear();\n return new ODataPropertyResource<P>(api, {\n segments,\n query,\n schema,\n });\n }\n\n static fromResource<N>(resource: ODataResource<any>, path: string) {\n const baseType = resource.type();\n let baseSchema = resource.schema as ODataStructuredType<any> | undefined;\n let fieldType: string | undefined;\n let fieldSchema: ODataStructuredType<N> | undefined;\n if (baseSchema !== undefined) {\n const field = baseSchema.findFieldByName<N>(path);\n fieldType = field?.type;\n fieldSchema =\n fieldType !== undefined\n ? resource.api.findStructuredTypeForType(fieldType)\n : undefined;\n baseSchema =\n field !== undefined\n ? baseSchema.findSchemaForField<N>(field)\n : undefined;\n }\n\n const property = ODataPropertyResource.factory<N>(resource.api, {\n path,\n type: fieldType,\n schema: fieldSchema,\n segments: resource.cloneSegments(),\n query: resource.cloneQuery<N>(),\n });\n\n // Switch entitySet to binding type if available\n if (baseSchema !== undefined && baseSchema.type() !== baseType) {\n let entitySet = resource.api.findEntitySetForType(baseSchema.type());\n if (entitySet !== undefined) {\n property.segment((s) => s.entitySet().path(entitySet!.name));\n }\n }\n\n return property;\n }\n //#endregion\n\n key(value: any) {\n const property = this.clone<ODataPropertyResource<T>>();\n var key = this.resolveKey(value);\n if (key !== undefined) property.segment((s) => s.property().key(key));\n return property;\n }\n\n keys(values: any[]) {\n const property = this.clone<ODataPropertyResource<T>>();\n const types = this.pathSegments.types({ key: true });\n const keys = values.map((value, index) =>\n ODataResource.resolveKey(\n value,\n this.api.findStructuredTypeForType<T>(types[index])\n )\n );\n property.segment((s) => s.keys(keys));\n return property;\n }\n\n value() {\n return ODataValueResource.factory<T>(this.api, {\n type: this.returnType(),\n schema: this.schema as ODataStructuredType<T>,\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n }\n\n /*\n navigationProperty<N>(path: string) {\n let schema: ODataStructuredType<N> | undefined;\n if (this.schema instanceof ODataStructuredType) {\n const field = this.schema.findFieldByName<any>(path as keyof T);\n schema =\n field !== undefined\n ? this.schema.findSchemaForField<N>(field)\n : undefined;\n }\n return ODataNavigationPropertyResource.factory<N>(this.api, {\n path,\n schema,\n segments: this.cloneSegments(),\n query: this.cloneQuery<N>(),\n });\n }\n */\n\n property<P>(path: string) {\n let type: string | undefined;\n let schema: ODataStructuredType<P> | undefined;\n if (this.schema instanceof ODataStructuredType) {\n const field = this.schema.findFieldByName<any>(path as keyof T);\n type = field?.type;\n schema =\n field !== undefined\n ? this.schema.findSchemaForField<P>(field)\n : undefined;\n }\n return ODataPropertyResource.factory<P>(this.api, {\n path,\n type,\n schema,\n segments: this.cloneSegments(),\n query: this.cloneQuery<P>(),\n });\n }\n\n //#region Requests\n protected override get(\n options: ODataEntityOptions & ODataEntitiesOptions & ODataPropertyOptions\n ): Observable<any> {\n return super.get(options);\n }\n //#endregion\n\n //#region Shortcuts\n /**\n * Fetch the property\n * @param options Options for the request\n * @return The entity / entities / property value\n */\n fetch(\n options?: ODataEntityOptions & { etag?: string }\n ): Observable<ODataEntity<T>>;\n fetch(options?: ODataEntitiesOptions): Observable<ODataEntities<T>>;\n fetch(options?: ODataPropertyOptions): Observable<ODataProperty<T>>;\n fetch(\n options: ODataEntityOptions &\n ODataEntitiesOptions &\n ODataPropertyOptions & { etag?: string } = {}\n ): Observable<any> {\n return this.get(options);\n }\n\n /**\n * Fetch the property value\n * @param options Options for the request\n * @returns The property value\n */\n fetchProperty(\n options: ODataOptions & { etag?: string } = {}\n ): Observable<T | null> {\n return this.fetch({ responseType: 'property', ...options }).pipe(\n map(({ property }) => property)\n );\n }\n\n /**\n * Fetch the entity\n * @param options Options for the request\n * @returns The entity\n */\n fetchEntity(\n options: ODataOptions & { etag?: string } = {}\n ): Observable<T | null> {\n return this.fetch({ responseType: 'entity', ...options }).pipe(\n map(({ entity }) => entity)\n );\n }\n\n /**\n * Fetch the entity and return as model\n * @param options Options for the request\n * @returns The model\n */\n fetchModel<M extends ODataModel<T>>(\n options: ODataOptions & { etag?: string } = {}\n ): Observable<M | null> {\n return this.fetch({ responseType: 'entity', ...options }).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots, reset: true }) : null\n )\n );\n }\n\n /**\n * Fetch the entities\n * @param options Options for the request\n * @returns The entities\n */\n fetchEntities(\n options: ODataOptions & { withCount?: boolean } = {}\n ): Observable<T[] | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities }) => entities)\n );\n }\n\n /**\n * Fetch the entities and return as collection\n * @param options Options for the request\n * @returns The collection\n */\n fetchCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n options: ODataOptions & { withCount?: boolean } = {}\n ): Observable<C | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities, annots }) =>\n entities\n ? this.asCollection<M, C>(entities, { annots, reset: true })\n : null\n )\n );\n }\n\n /**\n * Fetch all entities\n * @param options Options for the request\n * @returns All entities\n */\n fetchAll(options: ODataOptions = {}): Observable<T[]> {\n let res = this.clone<ODataPropertyResource<T>>();\n // Clean Paging\n res.query((q) => q.clearPaging());\n let fetch = (opts?: {\n skip?: number;\n skiptoken?: string;\n top?: number;\n }): Observable<ODataEntities<T>> => {\n if (opts) {\n res.query((q) => q.paging(opts));\n }\n return res.fetch({ responseType: 'entities', ...options });\n };\n return fetch().pipe(\n expand(({ annots: meta }) =>\n meta.skip || meta.skiptoken ? fetch(meta) : EMPTY\n ),\n concatMap(({ entities }) => entities || []),\n toArray()\n );\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { $ID, $REF, ODATA_ID } from '../../constants';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity } from '../responses/types';\nimport { ODataEntityResource } from './entity';\nimport {\n ODataEntitiesOptions,\n ODataEntityOptions,\n ODataOptions,\n} from './options';\n\nexport class ODataReferenceResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<P>(\n api: ODataApi,\n {\n segments,\n query,\n }: { segments: ODataPathSegments; query?: ODataQueryOptions<P> }\n ) {\n segments.add(PathSegmentNames.reference, $REF);\n query?.clear();\n return new ODataReferenceResource<P>(api, { segments, query });\n }\n //#endregion\n\n //#region Requests\n protected override post(\n target: ODataEntityResource<any>,\n options?: ODataOptions\n ): Observable<any> {\n return super.post({ [ODATA_ID]: target.endpointUrl(false) }, options);\n }\n\n protected override put(\n target: ODataEntityResource<any>,\n options?: ODataOptions & { etag?: string }\n ): Observable<any> {\n return super.put({ [ODATA_ID]: target.endpointUrl(false) }, options);\n }\n\n protected override delete({\n etag,\n target,\n ...options\n }: {\n etag?: string;\n target?: ODataEntityResource<any>;\n } & ODataOptions = {}): Observable<any> {\n if (target) {\n options.params = { [$ID]: target.endpointUrl(false) };\n }\n return super.delete({ etag, ...options });\n }\n //#endregion\n\n //#region Shortcuts for collections\n /**\n * Add the given target to the collection.\n * @param target The target resource\n * @param options Options for the request\n * @returns Observable of the response\n */\n add(\n target: ODataEntityResource<any>,\n options?: ODataOptions\n ): Observable<any> {\n return this.post(target, options);\n }\n\n /**\n * Remove the given target from the collection.\n * @param target The target resource\n * @param options Options for the request\n * @returns Observable of the response\n */\n remove(\n target?: ODataEntityResource<any>,\n options?: ODataOptions\n ): Observable<any> {\n return this.delete({ target, ...options });\n }\n //#region\n\n //#region Shortcuts for single\n /**\n * Set the reference to the given target.\n * @param target The target resource\n * @param options Options for the request\n * @returns Observable of the response\n */\n set(\n target: ODataEntityResource<any>,\n options?: ODataOptions & { etag?: string }\n ): Observable<any> {\n return this.put(target, options);\n }\n\n /**\n * Unset the reference to the given target.\n * @param options Options for the request.\n * @returns Observable of the response\n */\n unset(options?: ODataOptions & { etag?: string }): Observable<any> {\n return this.delete(options);\n }\n //#endregion\n\n //#region Fetch\n /**\n * Fetch entity / entities\n * @param options Options for the request\n * @return An observable of the entity or entities with annotations\n */\n fetch(\n options?: ODataEntityOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntity<T>>;\n fetch(\n options?: ODataEntitiesOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntities<T>>;\n fetch(\n options: ODataEntityOptions &\n ODataEntitiesOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<any> {\n return this.get(options);\n }\n\n /**\n * Fetch the entity\n * @param options Options for the request\n * @returns The entity\n */\n fetchEntity(\n options: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<T | null> {\n return this.fetch({ responseType: 'entity', ...options }).pipe(\n map(({ entity }) => entity)\n );\n }\n\n /**\n * Fetch entities\n * @param options Options for the request\n * @returns The entities\n */\n fetchEntities(\n options: ODataOptions & {\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<T[] | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities }) => entities)\n );\n }\n //#endregion\n}\n","import { EMPTY, Observable } from 'rxjs';\nimport { concatMap, expand, map, toArray } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataCollection, ODataModel } from '../../models';\nimport { ODataStructuredType } from '../../schema';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity } from '../responses';\nimport { ODataCountResource } from './count';\nimport { ODataMediaResource } from './media';\nimport {\n ODataEntitiesOptions,\n ODataEntityOptions,\n ODataOptions,\n} from './options';\nimport { ODataPropertyResource } from './property';\nimport { ODataReferenceResource } from './reference';\n\n/**\n * OData Navigation Property Resource\n * https://www.odata.org/getting-started/advanced-tutorial/#containment\n * https://www.odata.org/getting-started/advanced-tutorial/#derived\n */\nexport class ODataNavigationPropertyResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<N>(\n api: ODataApi,\n {\n path,\n type,\n schema,\n segments,\n query,\n }: {\n path: string;\n type?: string;\n schema?: ODataStructuredType<N>;\n segments: ODataPathSegments;\n query?: ODataQueryOptions<N>;\n }\n ) {\n const segment = segments.add(PathSegmentNames.navigationProperty, path);\n if (schema !== undefined) segment.type(schema.type());\n else if (type !== undefined) segment.type(type);\n query?.keep(QueryOptionNames.format);\n return new ODataNavigationPropertyResource<N>(api, {\n segments,\n query,\n schema,\n });\n }\n\n static fromResource<N>(resource: ODataResource<any>, path: string) {\n const baseType = resource.type();\n let baseSchema = resource.schema as ODataStructuredType<any> | undefined;\n let fieldType: string | undefined;\n let fieldSchema: ODataStructuredType<N> | undefined;\n if (baseSchema !== undefined) {\n const field = baseSchema.findFieldByName<N>(path);\n fieldType = field?.type;\n fieldSchema =\n fieldType !== undefined\n ? resource.api.findStructuredTypeForType(fieldType)\n : undefined;\n baseSchema =\n field !== undefined\n ? baseSchema.findSchemaForField<N>(field)\n : undefined;\n }\n\n const navigation = ODataNavigationPropertyResource.factory<N>(\n resource.api,\n {\n path,\n type: fieldType,\n schema: fieldSchema,\n segments: resource.cloneSegments(),\n query: resource.cloneQuery<N>(),\n }\n );\n\n // Switch entitySet to binding type if available\n if (baseSchema !== undefined && baseSchema.type() !== baseType) {\n let entitySet = resource.api.findEntitySetForType(baseSchema.type());\n if (entitySet !== undefined) {\n navigation.segment((s) => s.entitySet().path(entitySet!.name));\n }\n }\n\n return navigation;\n }\n //#endregion\n\n key(value: any) {\n const navigation = this.clone<ODataNavigationPropertyResource<T>>();\n var key = this.resolveKey(value);\n if (key !== undefined)\n navigation.segment((s) => s.navigationProperty().key(key));\n return navigation;\n }\n\n keys(values: any[]) {\n const navigation = this.clone<ODataNavigationPropertyResource<T>>();\n const types = this.pathSegments.types({ key: true });\n const keys = values.map((value, index) =>\n ODataResource.resolveKey(\n value,\n this.api.findStructuredTypeForType<T>(types[index])\n )\n );\n navigation.segment((s) => s.keys(keys));\n return navigation;\n }\n\n media() {\n return ODataMediaResource.factory<T>(this.api, {\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n }\n\n reference() {\n return ODataReferenceResource.factory<T>(this.api, {\n segments: this.cloneSegments(),\n });\n }\n\n navigationProperty<N>(path: string) {\n return ODataNavigationPropertyResource.fromResource<N>(this, path);\n }\n\n property<P>(path: string) {\n return ODataPropertyResource.fromResource<P>(this, path);\n }\n\n count() {\n return ODataCountResource.factory<T>(this.api, {\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n }\n\n cast<C>(type: string) {\n const baseSchema = this.schema as ODataStructuredType<T>;\n const castSchema = this.api.findStructuredTypeForType<C>(type);\n if (\n castSchema !== undefined &&\n baseSchema !== undefined &&\n !castSchema.isSubtypeOf(baseSchema)\n )\n throw new Error(`Cannot cast to ${type}`);\n const segments = this.cloneSegments();\n segments.add(PathSegmentNames.type, type).type(type);\n return new ODataNavigationPropertyResource<C>(this.api, {\n segments,\n schema: castSchema,\n query: this.cloneQuery<C>(),\n });\n }\n\n //#region Requests\n protected override post(\n attrs: Partial<T>,\n options: ODataOptions = {}\n ): Observable<ODataEntity<T>> {\n return super.post(attrs, { responseType: 'entity', ...options });\n }\n\n protected override put(\n attrs: Partial<T>,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.put(attrs, { responseType: 'entity', ...options });\n }\n\n protected override patch(\n attrs: Partial<T>,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.patch(attrs, { responseType: 'entity', ...options });\n }\n\n protected override delete(\n options: ODataOptions & { etag?: string } = {}\n ): Observable<any> {\n return super.delete({ responseType: 'entity', ...options });\n }\n\n protected override get(\n options: ODataEntityOptions &\n ODataEntitiesOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<any> {\n return super.get(options);\n }\n\n //#endregion\n\n //#region Shortcuts\n /**\n * Create a new entity\n * @param attrs The entity attributes\n * @param options Options for the request\n * @returns The created entity with the annotations\n */\n create(\n attrs: Partial<T>,\n options?: ODataOptions\n ): Observable<ODataEntity<T>> {\n return this.post(attrs, options);\n }\n\n /**\n * Update an existing entity\n * @param attrs The entity attributes\n * @param options Options for the request\n * @param etag The etag of the entity\n * @returns The updated entity with the annotations\n */\n update(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n return this.put(attrs, options);\n }\n\n /**\n * Modify an existing entity\n * @param attrs The entity attributes\n * @param options Options for the request\n * @param etag The etag of the entity\n * @returns The modified entity with the annotations\n */\n modify(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n return this.patch(attrs, options);\n }\n\n /**\n * Delete an existing entity\n * @param options Options for the request\n * @param etag The etag of the entity\n * @returns An observable of the destroy\n */\n destroy(options?: ODataOptions & { etag?: string }): Observable<any> {\n return this.delete(options);\n }\n\n /**\n * Fetch entity / entities\n * @param options Options for the request\n * @return An observable of the entity or entities with annotations\n */\n fetch(\n options?: ODataEntityOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntity<T>>;\n fetch(\n options?: ODataEntitiesOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntities<T>>;\n fetch(\n options: ODataEntityOptions &\n ODataEntitiesOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<any> {\n return this.get(options);\n }\n\n /**\n * Fetch the entity\n * @param options Options for the request\n * @returns The entity\n */\n fetchEntity(\n options: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<T | null> {\n return this.fetch({ responseType: 'entity', ...options }).pipe(\n map(({ entity }) => entity)\n );\n }\n\n /**\n * Fetch the entity and return as model\n * @param options Options for the request\n * @returns The model\n */\n fetchModel<M extends ODataModel<T>>(\n options: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<M | null> {\n return this.fetch({ responseType: 'entity', ...options }).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots, reset: true }) : null\n )\n );\n }\n\n /**\n * Fetch entities\n * @param options Options for the request\n * @returns The entities\n */\n fetchEntities(\n options: ODataOptions & {\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<T[] | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities }) => entities)\n );\n }\n\n /**\n * Fetch entities and return as collection\n * @param options Options for the request\n * @returns The collection\n */\n fetchCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n options: ODataOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<C | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities, annots }) =>\n entities\n ? this.asCollection<M, C>(entities, { annots, reset: true })\n : null\n )\n );\n }\n\n /**\n * Fetch all entities\n * @param options Options for the request\n * @returns All entities\n */\n fetchAll(\n options: ODataOptions & {\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<T[]> {\n let res = this.clone<ODataNavigationPropertyResource<T>>();\n // Clean Paging\n res.query((q) => q.clearPaging());\n let fetch = (opts?: {\n skip?: number;\n skiptoken?: string;\n top?: number;\n }): Observable<ODataEntities<T>> => {\n if (opts) {\n res.query((q) => q.paging(opts));\n }\n return res.fetch({ responseType: 'entities', ...options });\n };\n return fetch().pipe(\n expand(({ annots: meta }) =>\n meta.skip || meta.skiptoken ? fetch(meta) : EMPTY\n ),\n concatMap(({ entities }) => entities || []),\n toArray()\n );\n }\n //#endregion\n}\n","import { Observable, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataModel } from '../../models';\nimport { ODataStructuredType } from '../../schema/structured-type';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntity } from '../responses/types';\nimport { ODataActionResource } from './action';\nimport { ODataFunctionResource } from './function';\nimport { ODataMediaResource } from './media';\nimport { ODataNavigationPropertyResource } from './navigation-property';\nimport { ODataOptions } from './options';\nimport { ODataPropertyResource } from './property';\n\nexport class ODataEntityResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<E>(\n api: ODataApi,\n {\n schema,\n segments,\n query,\n }: {\n schema?: ODataStructuredType<E>;\n segments: ODataPathSegments;\n query?: ODataQueryOptions<E>;\n }\n ) {\n query?.keep(\n QueryOptionNames.expand,\n QueryOptionNames.select,\n QueryOptionNames.format\n );\n return new ODataEntityResource<E>(api, { segments, query, schema });\n }\n //#endregion\n\n key(value: any) {\n const entity = this.clone<ODataEntityResource<T>>();\n var key = this.resolveKey(value);\n if (key !== undefined) entity.segment((s) => s.entitySet().key(key));\n return entity;\n }\n\n keys(values: any[]) {\n const entity = this.clone<ODataEntityResource<T>>();\n const types = this.pathSegments.types({ key: true });\n const keys = values.map((value, index) =>\n ODataResource.resolveKey(\n value,\n this.api.findStructuredTypeForType<T>(types[index])\n )\n );\n entity.segment((s) => s.keys(keys));\n return entity;\n }\n\n media() {\n return ODataMediaResource.factory<T>(this.api, {\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n }\n\n navigationProperty<N>(path: string) {\n return ODataNavigationPropertyResource.fromResource<N>(this, path);\n }\n\n property<P>(path: string) {\n return ODataPropertyResource.fromResource<P>(this, path);\n }\n\n action<P, R>(path: string) {\n return ODataActionResource.fromResource<P, R>(this, path);\n }\n\n function<P, R>(path: string) {\n return ODataFunctionResource.fromResource<P, R>(this, path);\n }\n\n cast<C>(type: string) {\n const baseSchema = this.schema as ODataStructuredType<T>;\n const castSchema = this.api.findStructuredTypeForType<C>(type);\n if (\n castSchema !== undefined &&\n baseSchema !== undefined &&\n !castSchema.isSubtypeOf(baseSchema)\n )\n throw new Error(`Cannot cast to ${type}`);\n const segments = this.cloneSegments();\n segments.add(PathSegmentNames.type, type).type(type);\n return new ODataEntityResource<C>(this.api, {\n segments,\n schema: castSchema,\n query: this.cloneQuery<C>(),\n });\n }\n\n //#region Requests\n protected override post(\n attrs: Partial<T>,\n options: ODataOptions = {}\n ): Observable<ODataEntity<T>> {\n return super.post(attrs, { responseType: 'entity', ...options });\n }\n\n protected override put(\n attrs: Partial<T>,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.put(attrs, { responseType: 'entity', ...options });\n }\n\n protected override patch(\n attrs: Partial<T>,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.patch(attrs, { responseType: 'entity', ...options });\n }\n\n protected override delete(\n options: ODataOptions & { etag?: string } = {}\n ): Observable<any> {\n return super.delete({ responseType: 'entity', ...options });\n }\n\n protected override get(\n options: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<ODataEntity<T>> {\n return super.get({ responseType: 'entity', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n create(\n attrs: Partial<T>,\n options?: ODataOptions\n ): Observable<ODataEntity<T>> {\n return this.post(attrs, options);\n }\n\n update(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n return this.put(attrs, options);\n }\n\n modify(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n return this.patch(attrs, options);\n }\n\n destroy(options?: ODataOptions & { etag?: string }): Observable<any> {\n return this.delete(options);\n }\n\n fetch(\n options?: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntity<T>> {\n if (!this.hasKey()) return throwError('Entity resource without key');\n return this.get(options);\n }\n\n fetchEntity(\n options?: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<T | null> {\n return this.fetch(options).pipe(map(({ entity }) => entity));\n }\n\n fetchModel<M extends ODataModel<T>>(\n options?: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<M | null> {\n return this.fetch(options).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots, reset: true }) : null\n )\n );\n }\n //#endregion\n}\n","import { EMPTY, Observable } from 'rxjs';\nimport { concatMap, expand, map, toArray } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataCollection, ODataModel } from '../../models';\nimport { ODataStructuredType } from '../../schema/structured-type';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity } from '../responses';\nimport { ODataActionResource } from './action';\nimport { ODataCountResource } from './count';\nimport { ODataEntityResource } from './entity';\nimport { ODataFunctionResource } from './function';\nimport { ODataOptions } from './options';\n\nexport class ODataEntitySetResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<E>(\n api: ODataApi,\n {\n path,\n schema,\n query,\n }: {\n path: string;\n schema?: ODataStructuredType<E>;\n query?: ODataQueryOptions<E>;\n }\n ) {\n const segments = new ODataPathSegments();\n const segment = segments.add(PathSegmentNames.entitySet, path);\n if (schema !== undefined) segment.type(schema.type());\n return new ODataEntitySetResource<E>(api, { segments, query, schema });\n }\n //#endregion\n\n entity(key?: any) {\n const entity = ODataEntityResource.factory<T>(this.api, {\n schema: this.schema as ODataStructuredType<T>,\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n if (key !== undefined) {\n return entity.key(key);\n }\n return entity;\n }\n\n action<P, R>(path: string) {\n return ODataActionResource.fromResource<P, R>(this, path);\n }\n\n function<P, R>(path: string) {\n return ODataFunctionResource.fromResource<P, R>(this, path);\n }\n\n count() {\n return ODataCountResource.factory<T>(this.api, {\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n }\n\n cast<C>(type: string) {\n const baseSchema = this.schema as ODataStructuredType<T>;\n const castSchema = this.api.findStructuredTypeForType<C>(type);\n if (\n castSchema !== undefined &&\n baseSchema !== undefined &&\n !castSchema.isSubtypeOf(baseSchema)\n )\n throw new Error(`Cannot cast to ${type}`);\n const segments = this.cloneSegments();\n segments.add(PathSegmentNames.type, type).type(type);\n return new ODataEntitySetResource<C>(this.api, {\n segments,\n schema: castSchema,\n query: this.cloneQuery<C>(),\n });\n }\n\n //#region Requests\n protected override post(\n attrs: Partial<T>,\n options: ODataOptions = {}\n ): Observable<ODataEntity<T>> {\n return super.post(attrs, { responseType: 'entity', ...options });\n }\n\n protected override get(\n options: ODataOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<ODataEntities<T>> {\n return super.get({ responseType: 'entities', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n create(\n attrs: Partial<T>,\n options?: ODataOptions\n ): Observable<ODataEntity<T>> {\n return this.post(attrs, options);\n }\n\n fetch(\n options?: ODataOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntities<T>> {\n return this.get(options);\n }\n\n fetchEntities(\n options?: ODataOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<T[] | null> {\n return this.fetch(options).pipe(map(({ entities }) => entities));\n }\n\n fetchCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n options?: ODataOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataCollection<T, ODataModel<T>> | null> {\n return this.fetch(options).pipe(\n map(({ entities, annots }) =>\n entities\n ? this.asCollection<M, C>(entities, { annots, reset: true })\n : null\n )\n );\n }\n\n fetchAll(\n options?: ODataOptions & {\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<T[]> {\n let res = this.clone<ODataEntitySetResource<T>>();\n // Clean Paging\n res.query((q) => q.clearPaging());\n let fetch = (opts?: {\n skip?: number;\n skiptoken?: string;\n top?: number;\n }): Observable<ODataEntities<T>> => {\n if (opts) {\n res.query((q) => q.paging(opts));\n }\n return res.fetch(options);\n };\n return fetch().pipe(\n expand(({ annots: meta }) =>\n meta.skip || meta.skiptoken ? fetch(meta) : EMPTY\n ),\n concatMap(({ entities }) => entities || []),\n toArray()\n );\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { $METADATA } from '../../constants';\nimport { PathSegmentNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataResource } from '../resource';\nimport { ODataMetadata } from '../responses';\nimport { ODataOptions } from './options';\n\nexport class ODataMetadataResource extends ODataResource<any> {\n constructor(api: ODataApi, segments?: ODataPathSegments) {\n super(api, { segments });\n }\n\n //#region Factory\n static factory(api: ODataApi) {\n let segments = new ODataPathSegments();\n segments.add(PathSegmentNames.metadata, $METADATA);\n return new ODataMetadataResource(api, segments);\n }\n //#endregion\n\n //#region Requests\n protected override get(options?: ODataOptions): Observable<ODataMetadata> {\n return super\n .get({ responseType: 'text', ...options })\n .pipe(map((body: any) => new ODataMetadata(body)));\n }\n //#endregion\n\n //#region Shortcuts\n fetch(options?: ODataOptions): Observable<ODataMetadata> {\n return this.get(options);\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataModel } from '../../models';\nimport { ODataStructuredType } from '../../schema';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntity } from '../responses';\nimport { ODataActionResource } from './action';\nimport { ODataFunctionResource } from './function';\nimport { ODataNavigationPropertyResource } from './navigation-property';\nimport { ODataOptions } from './options';\nimport { ODataPropertyResource } from './property';\n\nexport class ODataSingletonResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<S>(\n api: ODataApi,\n {\n path,\n schema,\n query,\n }: {\n path: string;\n schema?: ODataStructuredType<S>;\n query?: ODataQueryOptions<S>;\n }\n ) {\n const segments = new ODataPathSegments();\n const segment = segments.add(PathSegmentNames.singleton, path);\n if (schema !== undefined) segment.type(schema.type());\n return new ODataSingletonResource<S>(api, { segments, query, schema });\n }\n //#endregion\n\n key(value: any) {\n const singleton = this.clone<ODataSingletonResource<T>>();\n var key = this.resolveKey(value);\n if (key !== undefined) singleton.segment((s) => s.singleton().key(key));\n return singleton;\n }\n\n keys(values: any[]) {\n const singleton = this.clone<ODataSingletonResource<T>>();\n const types = this.pathSegments.types({ key: true });\n const keys = values.map((value, index) =>\n ODataResource.resolveKey(\n value,\n this.api.findStructuredTypeForType<T>(types[index])\n )\n );\n singleton.segment((s) => s.keys(keys));\n return singleton;\n }\n\n navigationProperty<N>(path: string) {\n return ODataNavigationPropertyResource.fromResource<N>(this, path);\n }\n\n property<P>(path: string) {\n return ODataPropertyResource.fromResource<P>(this, path);\n }\n\n action<P, R>(path: string) {\n return ODataActionResource.fromResource<P, R>(this, path);\n }\n\n function<P, R>(path: string) {\n return ODataFunctionResource.fromResource<P, R>(this, path);\n }\n\n //#region Requests\n protected override post(\n attrs: Partial<T>,\n options: ODataOptions = {}\n ): Observable<ODataEntity<T>> {\n return super.post(attrs, { responseType: 'entity', ...options });\n }\n\n protected override put(\n attrs: Partial<T>,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.put(attrs, { responseType: 'entity', ...options });\n }\n\n protected override patch(\n attrs: Partial<T>,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.patch(attrs, { responseType: 'entity', ...options });\n }\n\n protected override delete(\n options: ODataOptions & { etag?: string } = {}\n ): Observable<any> {\n return super.delete({ responseType: 'entity', ...options });\n }\n\n protected override get(\n options: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<ODataEntity<T>> {\n return super.get({ responseType: 'entity', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n /**\n * Creates a new entity.\n * @param attrs The entity attributes to create.\n * @param options The options for the request.\n * @returns The created entity with the annotations.\n */\n create(\n attrs: Partial<T>,\n options?: ODataOptions\n ): Observable<ODataEntity<T>> {\n return this.post(attrs, options);\n }\n\n /**\n * Updates an existing entity.\n * @param attrs The entity attributes to update.\n * @param options The options for the request.\n * @returns The updated entity with the annotations.\n */\n update(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n return this.put(attrs, options);\n }\n\n /**\n * Modifies an existing entity.\n * @param attrs The entity attributes to modify.\n * @param options The options for the request.\n * @returns The modified entity with the annotations.\n */\n modify(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n return this.patch(attrs, options);\n }\n\n /**\n * Delete an existing entity.\n * @param options The options for the request.\n * @returns Observable of the deleted entity.\n */\n destroy(options?: ODataOptions & { etag?: string }): Observable<any> {\n return this.delete(options);\n }\n\n /**\n * Fetch an existing entity.\n * @param options The options for the request.\n * @param etag The etag to use for the request.\n * @returns Observable of the entity with the annotations.\n */\n fetch(\n options?: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntity<T>> {\n return this.get(options);\n }\n\n /**\n * Fetch an existing entity.\n * @param options The options for the request.\n * @param etag The etag to use for the request.\n * @returns Observable of the entity.\n */\n fetchEntity(\n options?: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<T | null> {\n return this.fetch(options).pipe(map(({ entity }) => entity));\n }\n\n /**\n * Fetch an existing entity and return a model.\n * @param options The options for the request.\n * @param etag The etag to use for the request.\n * @returns Observable of the entity.\n */\n fetchModel<M extends ODataModel<T>>(\n options?: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<M | null> {\n return this.fetch(options).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots, reset: true }) : null\n )\n );\n }\n //#endregion\n}\n","import { ODataRequest, ODataResponse } from '../resources';\nimport { ODataCache, ODataCacheEntry } from './cache';\n\ninterface ResponseJson {\n body: any | null;\n headers: { [name: string]: string | string[] };\n status: number;\n statusText: string;\n url: string | null;\n}\n\nexport class ODataInStorageCache extends ODataCache {\n name: string;\n storage: Storage;\n\n constructor({\n name,\n storage = sessionStorage,\n timeout,\n }: {\n timeout?: number;\n name: string;\n storage?: Storage;\n }) {\n super({ timeout });\n this.name = name;\n this.storage = storage;\n this.restore();\n window.addEventListener('beforeunload', () => this.store());\n }\n\n store() {\n this.storage.setItem(\n this.name,\n JSON.stringify(Array.from(this.entries.entries()))\n );\n }\n\n restore() {\n this.entries = new Map<string, ODataCacheEntry<any>>(\n JSON.parse(this.storage.getItem(this.name) || '[]')\n );\n }\n\n override flush() {\n super.flush();\n this.store();\n }\n\n putResponse(req: ODataRequest<any>, res: ODataResponse<any>) {\n const scope = this.scope(req);\n const tags = this.tags(req, res);\n this.put<ResponseJson>(req.pathWithParams, res.toJSON(), {\n timeout: res.options.maxAge,\n scope,\n tags,\n });\n }\n\n getResponse(req: ODataRequest<any>): ODataResponse<any> | undefined {\n const scope = this.scope(req);\n const data = this.get<ResponseJson>(req.pathWithParams, { scope });\n\n return data !== undefined ? ODataResponse.fromJSON(req, data) : undefined;\n }\n}\n","import { Observable, Subscription } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport {\n CID_FIELD_NAME,\n COMPUTED,\n DEFAULT_VERSION,\n OPTIMISTIC_CONCURRENCY,\n} from '../constants';\nimport { ODataHelper } from '../helper';\nimport { ODataParserOptions } from '../options';\nimport {\n EntityKey,\n ODataEntitiesAnnotations,\n ODataEntityAnnotations,\n ODataEntityResource,\n ODataEntitySetResource,\n ODataNavigationPropertyResource,\n ODataPropertyResource,\n ODataQueryOptions,\n ODataQueryOptionsHandler,\n ODataResource,\n ODataSingletonResource,\n} from '../resources';\nimport {\n ODataEntitySet,\n ODataStructuredType,\n ODataStructuredTypeFieldParser,\n} from '../schema';\nimport { Options, OptionsHelper } from '../types';\nimport { Objects, Types } from '../utils';\nimport type { ODataCollection } from './collection';\nimport type { ODataModel } from './model';\n\nexport type ODataModelEventType =\n | 'change'\n | 'reset'\n | 'update'\n | 'destroy'\n | 'add'\n | 'remove'\n | 'invalid'\n | 'request'\n | 'sync'\n | 'attach';\nexport class ODataModelEvent<T> {\n name: ODataModelEventType;\n bubbling: boolean = true;\n model?: ODataModel<T>;\n collection?: ODataCollection<T, ODataModel<T>>;\n chain: [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n string | number | null\n ][];\n value?: any;\n previous?: any;\n options?: any;\n constructor(\n name: ODataModelEventType,\n {\n model,\n collection,\n previous,\n value,\n track,\n options,\n }: {\n model?: ODataModel<T>;\n collection?: ODataCollection<T, ODataModel<T>>;\n track?: string | number;\n previous?: any;\n value?: any;\n options?: any;\n } = {}\n ) {\n this.name = name;\n this.model = model;\n this.collection = collection;\n this.previous = previous;\n this.value = value;\n this.options = options;\n this.chain = [\n [\n (this.collection || this.model) as\n | ODataModel<any>\n | ODataCollection<any, ODataModel<any>>,\n track || null,\n ],\n ];\n }\n\n stopPropagation() {\n this.bubbling = false;\n }\n\n push(\n model: ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n track: string | number\n ) {\n this.chain.splice(0, 0, [model, track]);\n }\n\n visited(model: ODataModel<any> | ODataCollection<any, ODataModel<any>>) {\n return (\n this.chain.some((c) => c[0] === model) &&\n this.chain[this.chain.length - 1][0] !== model\n );\n }\n\n get path() {\n return this.chain\n .map(([, track], index) =>\n typeof track === 'number'\n ? `[${track}]`\n : typeof track === 'string'\n ? index === 0\n ? track\n : `.${track}`\n : ''\n )\n .join('');\n }\n}\n\nexport const BUBBLING = [\n 'change',\n 'reset',\n 'update',\n 'destroy',\n 'add',\n 'remove',\n];\n\nexport const INCLUDE_SHALLOW = {\n include_concurrency: true,\n include_computed: true,\n include_key: true,\n};\n\nexport const INCLUDE_DEEP = {\n include_navigation: true,\n include_non_field: true,\n ...INCLUDE_SHALLOW,\n};\n\nexport enum ODataModelState {\n Added,\n Removed,\n Changed,\n Unchanged,\n}\n\nexport type ModelOptions = {\n cid?: string;\n fields: { [name: string]: ModelFieldOptions };\n};\n\nexport type ModelFieldOptions = {\n field?: string;\n default?: any;\n required?: boolean;\n concurrency?: boolean;\n maxLength?: number;\n minLength?: number;\n min?: number;\n max?: number;\n pattern?: RegExp;\n};\n\nexport function Model({ cid = CID_FIELD_NAME }: { cid?: string } = {}) {\n return <T extends { new (...args: any[]): {} }>(constructor: T) => {\n const Klass = <any>constructor;\n if (!Klass.hasOwnProperty('options'))\n Klass.options = { fields: {} } as ModelOptions;\n Klass.options.cid = cid;\n return constructor;\n };\n}\n\nexport function ModelField({\n name,\n ...options\n}: { name?: string } & ModelFieldOptions = {}) {\n return (target: any, key: string): void => {\n const Klass = target.constructor;\n if (!Klass.hasOwnProperty('options'))\n Klass.options = { fields: {} } as ModelOptions;\n options.field = name || key;\n Klass.options.fields[key] = options;\n };\n}\n\nexport type ODataModelFieldOptions<F> = ModelFieldOptions & {\n name: string;\n field: string;\n parser: ODataStructuredTypeFieldParser<F>;\n};\n\nexport class ODataModelField<F> {\n name: string;\n field: string;\n parser: ODataStructuredTypeFieldParser<F>;\n options: ODataModelOptions<any>;\n meta?: ODataModelOptions<any>;\n default?: any;\n required: boolean;\n concurrency: boolean;\n maxLength?: number;\n minLength?: number;\n min?: number;\n max?: number;\n pattern?: RegExp;\n constructor(\n options: ODataModelOptions<any>,\n { name, field, parser, ...opts }: ODataModelFieldOptions<F>\n ) {\n this.options = options;\n this.name = name;\n this.field = field;\n this.parser = parser;\n this.default = opts.default || parser.default;\n this.required = Boolean(opts.required || !parser.nullable);\n this.concurrency = Boolean(opts.concurrency);\n this.maxLength = opts.maxLength || parser.maxLength;\n this.minLength = opts.minLength;\n this.min = opts.min;\n this.max = opts.max;\n this.pattern = opts.pattern;\n }\n\n get api() {\n return this.options.api;\n }\n\n get type() {\n return this.parser.type;\n }\n\n get navigation() {\n return Boolean(this.parser.navigation);\n }\n\n get collection() {\n return Boolean(this.parser.collection);\n }\n\n annotatedValue<T>(term: string | RegExp) {\n return this.parser.annotatedValue<T>(term);\n }\n\n configure({\n findOptionsForType,\n concurrency,\n options,\n }: {\n findOptionsForType: (type: string) => ODataModelOptions<any> | undefined;\n concurrency: boolean;\n options: OptionsHelper;\n }) {\n this.meta = findOptionsForType(this.parser.type);\n if (concurrency) this.concurrency = concurrency;\n if (this.default !== undefined)\n this.default = this.deserialize(this.default, options);\n }\n\n isKey() {\n return this.parser.isKey();\n }\n\n hasReferentials() {\n return this.parser.hasReferentials();\n }\n\n get referentials() {\n return this.parser.referentials;\n }\n\n isStructuredType() {\n return this.parser.isStructuredType();\n }\n\n structured() {\n let structuredType = this.api.findStructuredTypeForType<F>(\n this.parser.type\n );\n //Throw error if not found\n if (!structuredType)\n throw new Error(`Could not find structured type for ${this.parser.type}`);\n return structuredType;\n }\n\n isEnumType() {\n return this.parser.isEnumType();\n }\n\n enum() {\n let enumType = this.api.findEnumTypeForType<F>(this.parser.type);\n //Throw error if not found\n if (!enumType)\n throw new Error(`Could not find enum type for ${this.parser.type}`);\n return enumType;\n }\n\n validate(\n value: any,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}\n ) {\n /*\n if ('isValid' in value && typeof value.isValid === 'function') {\n return !value.isValid({ method, navigation }) ? value._errors : undefined;\n } else if ('models' in value && typeof value.models === 'function') {\n */\n if (ODataModelOptions.isModel(value)) {\n return !value.isValid({ method, navigation }) ? value._errors : undefined;\n } else if (ODataModelOptions.isCollection(value)) {\n return value\n .models()\n .some((m: ODataModel<any>) => !m.isValid({ method, navigation }))\n ? value.models().map((m: ODataModel<any>) => m._errors)\n : undefined;\n } else {\n const computed = this.annotatedValue<boolean>(COMPUTED);\n let errors = this.parser?.validate(value, { method, navigation }) || [];\n if (\n this.required &&\n (value === null || (value === undefined && method !== 'modify')) && // Is null or undefined without patch?\n !(computed && method === 'create') // Not (Is Computed field and create) ?\n ) {\n errors['push'](`required`);\n }\n if (\n this.maxLength !== undefined &&\n typeof value === 'string' &&\n value.length > this.maxLength\n ) {\n errors['push'](`maxlength`);\n }\n if (\n this.minLength !== undefined &&\n typeof value === 'string' &&\n value.length < this.minLength\n ) {\n errors['push'](`minlength`);\n }\n if (\n this.min !== undefined &&\n typeof value === 'number' &&\n value < this.min\n ) {\n errors['push'](`min`);\n }\n if (\n this.max !== undefined &&\n typeof value === 'number' &&\n value > this.max\n ) {\n errors['push'](`max`);\n }\n if (\n this.pattern !== undefined &&\n typeof value === 'string' &&\n !this.pattern.test(value)\n ) {\n errors['push'](`pattern`);\n }\n return !Types.isEmpty(errors) ? errors : undefined;\n }\n }\n\n defaults(): any {\n return this.isStructuredType() && this.meta !== undefined\n ? this.meta.defaults()\n : this.default;\n }\n\n deserialize(value: any, options?: Options): F {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.api.options;\n return this.parser.deserialize(value, parserOptions);\n }\n\n serialize(value: F, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.api.options;\n return this.parser.serialize(value, parserOptions);\n }\n\n encode(value: F, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.api.options;\n return this.parser.encode(value, parserOptions);\n }\n\n resourceFactory<T, F>(\n base: ODataResource<T>\n ): ODataNavigationPropertyResource<F> | ODataPropertyResource<F> {\n if (\n !(\n base instanceof ODataEntityResource ||\n base instanceof ODataNavigationPropertyResource ||\n base instanceof ODataPropertyResource\n )\n )\n throw new Error(\"Can't build resource for non compatible base type\");\n return this.navigation\n ? (base as ODataEntityResource<T>).navigationProperty<F>(this.parser.name)\n : (base as ODataEntityResource<T>).property<F>(this.parser.name);\n }\n\n annotationsFactory(\n base: ODataEntityAnnotations\n ): ODataEntityAnnotations | ODataEntitiesAnnotations {\n return this.parser.collection\n ? new ODataEntitiesAnnotations(\n base.helper,\n base.property(this.parser.name) || {}\n )\n : new ODataEntityAnnotations(\n base.helper,\n base.property(this.parser.name) || {}\n );\n }\n\n schemaFactory<T, F>(\n base: ODataStructuredType<T>\n ): ODataStructuredType<F> | undefined {\n return this.api.findStructuredTypeForType(this.parser.type);\n }\n\n modelCollectionFactory<T, F>({\n parent,\n value,\n reset,\n }: {\n parent: ODataModel<any>;\n value?: F | F[] | { [name: string]: any } | { [name: string]: any }[];\n reset?: boolean;\n }): ODataModel<F> | ODataCollection<F, ODataModel<F>> {\n const annots = this.annotationsFactory(parent.annots());\n const Model = this.api.modelForType(this.parser.type);\n const Collection = this.api.collectionForType(this.parser.type);\n\n if (Model === undefined || Collection === undefined)\n throw Error(`No model for ${this.name}`);\n return this.parser.collection\n ? (new Collection((value || []) as F[], {\n annots: annots as ODataEntitiesAnnotations,\n parent: [parent, this],\n reset,\n }) as ODataCollection<F, ODataModel<F>>)\n : (new Model((value || {}) as F, {\n annots: annots as ODataEntityAnnotations,\n parent: [parent, this],\n reset,\n }) as ODataModel<F>);\n }\n}\n\nexport type ODataModelRelation<T> = {\n state: ODataModelState;\n model?: ODataModel<T> | ODataCollection<T, ODataModel<T>> | null;\n field: ODataModelField<T>;\n subscription?: Subscription;\n};\nexport type ODataModelEntry<T, M extends ODataModel<T>> = {\n state: ODataModelState;\n model: M;\n key?: EntityKey<T> | { [name: string]: any };\n subscription?: Subscription;\n};\n\nexport class ODataModelOptions<T> {\n name: string;\n cid: string;\n base?: string;\n open?: boolean;\n private _fields: ODataModelField<any>[];\n schema: ODataStructuredType<T>;\n entitySet?: ODataEntitySet;\n // Hierarchy\n parent?: ODataModelOptions<any>;\n children: ODataModelOptions<any>[] = [];\n\n constructor({\n options,\n schema,\n }: {\n options: ModelOptions;\n schema: ODataStructuredType<T>;\n }) {\n this.name = schema.name;\n this.base = schema.base;\n this.open = schema.open;\n this.schema = schema;\n this.cid = options?.cid || CID_FIELD_NAME;\n this._fields = Object.entries(options.fields).map(([name, options]) => {\n const { field, ...opts } = options;\n if (field === undefined || name === undefined)\n throw new Error('Model Properties need name and field');\n const parser = this.schema.findFieldByName<T>(field as keyof T);\n if (parser === undefined)\n throw new Error(`No parser for ${field} with name = ${name}`);\n return new ODataModelField<T>(this, { name, field, parser, ...opts });\n });\n }\n\n get api() {\n return this.schema.api;\n }\n\n type() {\n return this.schema.type();\n }\n\n isTypeOf(type: string) {\n return this.schema.isTypeOf(type);\n }\n\n findChildOptions(\n predicate: (options: ODataModelOptions<any>) => boolean\n ): ODataModelOptions<any> | undefined {\n if (predicate(this)) return this;\n let match: ODataModelOptions<any> | undefined;\n for (let ch of this.children) {\n match = ch.findChildOptions(predicate);\n if (match !== undefined) break;\n }\n return match;\n }\n\n configure({\n findOptionsForType,\n options,\n }: {\n findOptionsForType: (type: string) => ODataModelOptions<any> | undefined;\n options: OptionsHelper;\n }) {\n if (this.base) {\n const parent = findOptionsForType(this.base) as ODataModelOptions<any>;\n parent.children.push(this);\n this.parent = parent;\n }\n this.entitySet = this.api.findEntitySetForEntityType(this.type());\n let concurrencyFields: string[] = [];\n if (this.entitySet !== undefined) {\n concurrencyFields =\n this.entitySet.annotatedValue<string[]>(OPTIMISTIC_CONCURRENCY) || [];\n }\n this._fields.forEach((field) => {\n let concurrency = concurrencyFields.indexOf(field.field) !== -1;\n field.configure({\n findOptionsForType,\n concurrency,\n options,\n });\n });\n }\n\n fields({\n include_navigation = false,\n include_parents = true,\n }: {\n include_parents?: boolean;\n include_navigation?: boolean;\n } = {}): ODataModelField<any>[] {\n return [\n ...(include_parents && this.parent !== undefined\n ? this.parent.fields({ include_navigation, include_parents })\n : []),\n ...this._fields.filter(\n (field) => include_navigation || !field.navigation\n ),\n ];\n }\n\n field<F>(name: keyof T | string) {\n let field = this.fields({\n include_parents: true,\n include_navigation: true,\n }).find(\n (modelField: ODataModelField<F>) =>\n modelField.name === name || modelField.field === name\n );\n //Throw error if not found\n if (field === undefined) throw new Error(`No field with name ${name}`);\n return field;\n }\n\n attach(\n self: ODataModel<T>,\n resource:\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T>\n ) {\n if (\n self._resource !== null &&\n resource.type() !== self._resource.type() &&\n !resource.isSubtypeOf(self._resource)\n )\n throw new Error(\n `Can't reattach ${resource.type()} to ${self._resource.type()}`\n );\n\n const current = self._resource;\n if (current === null || !current.isEqualTo(resource)) {\n self._resource = resource;\n self.events$.emit(\n new ODataModelEvent('attach', {\n model: self,\n previous: current,\n value: resource,\n })\n );\n }\n }\n\n //# region Resource\n static chain(\n child: ODataModel<any> | ODataCollection<any, ODataModel<any>>\n ): [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ][] {\n const chain = [] as any[];\n let tuple:\n | [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ]\n | null = [child, null];\n while (tuple !== null) {\n const parent = tuple as [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ];\n if (chain.some((p) => p[0] === parent[0])) break;\n chain.splice(0, 0, parent);\n tuple = tuple[0]._parent;\n }\n return chain;\n }\n\n static resource<T>(\n child: ODataModel<T> | ODataCollection<T, ODataModel<T>>\n ): ODataResource<T> | ODataResource<T> {\n let resource: ODataResource<any> | ODataResource<any> | undefined =\n undefined;\n for (let [model, field] of ODataModelOptions.chain(child)) {\n resource =\n resource ||\n model._resource ||\n (ODataModelOptions.isModel(model)\n ? (model as ODataModel<any>)._meta.modelResourceFactory()\n : (\n model as ODataCollection<any, ODataModel<any>>\n )._model.meta.collectionResourceFactory());\n if (resource === undefined) break;\n if (ODataModelOptions.isModel(model)) {\n let key = (model as ODataModel<any>).key({\n field_mapping: true,\n }) as EntityKey<any>;\n if (key !== undefined)\n resource =\n resource instanceof ODataEntitySetResource\n ? resource.entity(key)\n : (resource as ODataEntityResource<T>).key(key);\n }\n if (field === null) {\n const query = model._resource?.cloneQuery<T>().toQueryArguments();\n if (query !== undefined) resource.query((q) => q.apply(query));\n continue;\n }\n resource = (field as ODataModelField<any>).resourceFactory<any, any>(\n resource as ODataResource<any>\n );\n }\n if (resource === undefined)\n throw new Error(`resource: Can't build resource for ${child}`);\n return resource;\n }\n\n collectionResourceFactory(\n query?: ODataQueryOptions<T>\n ):\n | ODataEntitySetResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | undefined {\n if (this.entitySet === undefined) return undefined;\n return ODataEntitySetResource.factory<T>(this.api, {\n path: this.entitySet.name,\n schema: this.schema,\n query,\n });\n }\n\n modelResourceFactory(\n query?: ODataQueryOptions<T>\n ):\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T>\n | undefined {\n const resource = this.collectionResourceFactory(query);\n if (resource instanceof ODataEntitySetResource) return resource.entity();\n return resource as\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T>\n | undefined;\n }\n\n entityResource(self: ODataModel<T>): ODataResource<T> {\n let resource = this.modelResourceFactory(\n self._resource !== null ? self._resource.cloneQuery() : undefined\n );\n if (resource === undefined)\n throw new Error(`entityResource: Can't build resource for ${self}`);\n const key = self.key({ field_mapping: true }) as EntityKey<T>;\n if (key !== undefined) return resource.key(key);\n return resource as ODataResource<T>;\n }\n //#endregion\n\n bind(\n self: ODataModel<T>,\n {\n parent,\n resource,\n annots,\n }: {\n parent?: [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ];\n resource?: ODataResource<T>;\n annots?: ODataEntityAnnotations;\n } = {}\n ) {\n // Parent\n if (parent !== undefined) {\n self._parent = parent;\n }\n\n // Resource\n resource = resource || this.modelResourceFactory();\n if (resource !== undefined) {\n this.attach(\n self,\n resource as\n | ODataEntityResource<T>\n | ODataPropertyResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataSingletonResource<T>\n );\n }\n\n // Annotations\n self._annotations =\n annots || new ODataEntityAnnotations(ODataHelper[DEFAULT_VERSION]);\n\n const fields = this.fields({\n include_navigation: true,\n include_parents: true,\n });\n for (let field of fields) {\n Object.defineProperty(self, field.name, {\n configurable: true,\n get: () => this._get(self, field as ODataModelField<any>),\n set: (value: any) =>\n this._set(self, field as ODataModelField<any>, value),\n });\n }\n }\n\n query(\n self: ODataModel<T>,\n resource:\n | ODataEntityResource<T>\n | ODataPropertyResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataSingletonResource<T>,\n func: (q: ODataQueryOptionsHandler<T>) => void\n ) {\n resource.query(func);\n this.attach(self, resource);\n return self;\n }\n\n resolveKey(\n value: ODataModel<T> | T | { [name: string]: any },\n {\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}\n ): EntityKey<T> | { [name: string]: any } | undefined {\n const keyTypes = this.schema.keys({ include_parents: true });\n const key: any = {};\n for (var kt of keyTypes) {\n let v = value as any;\n let options = this as ODataModelOptions<any>;\n let field: ODataModelField<any> | undefined;\n for (let name of kt.name.split('/')) {\n if (options === undefined) break;\n field = options\n .fields({ include_parents: true })\n .find((field: ODataModelField<any>) => field.field === name);\n if (field !== undefined) {\n v =\n Types.isPlainObject(v) || ODataModelOptions.isModel(v)\n ? v[field.name]\n : v;\n options = field.meta as ODataModelOptions<any>;\n }\n }\n if (field === undefined) return undefined;\n let name = field_mapping ? field.field : field.name;\n if (kt.alias !== undefined) name = kt.alias;\n key[name] = v;\n }\n if (Types.isEmpty(key)) return undefined;\n return resolve ? Objects.resolveKey(key) : key;\n }\n\n resolveReferential(\n value: ODataModel<T> | T | { [name: string]: any } | null,\n field: ODataModelField<any>,\n {\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}\n ): { [name: string]: any } | undefined {\n const referential: any = {};\n for (var ref of field.referentials) {\n let from = this.fields({ include_parents: true }).find(\n (p: any) => p.field === ref.referencedProperty\n );\n let to = field.options\n .fields({ include_parents: true })\n .find((field: ODataModelField<any>) => field.field === ref.property);\n if (from !== undefined && to !== undefined) {\n let name = field_mapping ? to.field : to.name;\n referential[name] = value && (value as any)[from.name];\n }\n }\n if (Types.isEmpty(referential)) return undefined;\n return resolve\n ? Objects.resolveKey(referential, { single: false })\n : referential;\n }\n\n resolveReferenced(\n value: ODataModel<T> | T | { [name: string]: any } | null,\n field: ODataModelField<any>,\n {\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}\n ): { [name: string]: any } | undefined {\n const referenced: any = {};\n for (var ref of field.referentials) {\n let from = this.fields({ include_parents: true }).find(\n (field: ODataModelField<any>) => field.field === ref.property\n );\n let to = (field.meta as ODataModelOptions<any>)\n .fields({ include_parents: true })\n .find(\n (field: ODataModelField<any>) =>\n field.field === ref.referencedProperty\n );\n if (from !== undefined && to !== undefined) {\n let name = field_mapping ? to.field : to.name;\n referenced[name] = value && (value as any)[from.name];\n }\n }\n if (Types.isEmpty(referenced)) return undefined;\n return resolve\n ? Objects.resolveKey(referenced, { single: false })\n : referenced;\n }\n\n validate(\n self: ODataModel<T>,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}\n ): { [name: string]: string[] } | undefined {\n const errors = this.fields({\n include_parents: true,\n include_navigation: navigation,\n }).reduce((acc, field) => {\n let value = (self as any)[field.name];\n let errs = field.validate(value, { method });\n return errs !== undefined\n ? Object.assign(acc, { [field.name]: errs })\n : acc;\n }, {});\n return !Types.isEmpty(errors) ? errors : undefined;\n }\n\n defaults(): T | { [name: string]: any } | undefined {\n const defs = this.fields().reduce((acc, field) => {\n let value = field.defaults();\n return value !== undefined\n ? Object.assign(acc, { [field.name]: value })\n : acc;\n }, {});\n return !Types.isEmpty(defs) ? defs : undefined;\n }\n\n hasChanged(\n self: ODataModel<T>,\n { include_navigation = false }: { include_navigation?: boolean } = {}\n ): boolean {\n return (\n !Types.isEmpty(self._changes) ||\n Object.values(self._relations)\n .filter(({ field }) => !field.navigation || include_navigation)\n .some(\n ({ field, state, model }) =>\n (!include_navigation || field.navigation) &&\n (state === ODataModelState.Changed ||\n (model != undefined && model.hasChanged({ include_navigation })))\n )\n );\n }\n\n asEntity<R, M extends ODataModel<T>>(self: M, func: (model: M) => R): R {\n const parent = self._parent;\n self._parent = null;\n const result = func(self);\n if (result instanceof Observable) {\n return (result as any).pipe(finalize(() => (self._parent = parent)));\n } else {\n self._parent = parent;\n return result;\n }\n }\n\n toEntity(\n self: ODataModel<T>,\n {\n client_id = false,\n include_navigation = false,\n include_concurrency = false,\n include_computed = false,\n include_key = true,\n include_non_field = false,\n changes_only = false,\n field_mapping = false,\n chain = [],\n }: {\n client_id?: boolean;\n include_navigation?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_key?: boolean;\n include_non_field?: boolean;\n changes_only?: boolean;\n field_mapping?: boolean;\n chain?: (ODataModel<any> | ODataCollection<any, ODataModel<any>>)[];\n } = {}\n ): T | { [name: string]: any } {\n let attrs = self.attributes({\n changes_only,\n field_mapping,\n include_concurrency,\n include_computed,\n include_non_field,\n });\n\n let relations = Object.entries(self._relations)\n .filter(\n // Chain\n ([, { model }]) => chain.every((c) => c !== model)\n )\n .filter(\n // Changes only\n ([, { model, state }]) =>\n !changes_only ||\n (changes_only &&\n (state === ODataModelState.Changed ||\n (model != undefined && model.hasChanged({ include_navigation }))))\n )\n .filter(\n ([, { field, model }]) =>\n // Navigation\n (include_navigation && field.navigation && model !== null) ||\n !field.navigation\n )\n .map(([k, { model, field, state }]) => {\n let changesOnly =\n changes_only &&\n state !== ODataModelState.Changed &&\n !!field.navigation;\n let includeKey = include_key && !!field.navigation;\n if (ODataModelOptions.isModel(model)) {\n return [\n k,\n (model as ODataModel<any>).toEntity({\n client_id,\n include_navigation,\n include_concurrency,\n include_non_field,\n field_mapping,\n changes_only: changesOnly,\n include_key: includeKey,\n chain: [self, ...chain],\n }),\n ];\n } else if (ODataModelOptions.isCollection(model)) {\n return [\n k,\n (model as ODataCollection<any, ODataModel<any>>).toEntities({\n client_id,\n include_navigation,\n include_concurrency,\n include_non_field,\n field_mapping,\n changes_only: changesOnly,\n include_key: includeKey,\n chain: [self, ...chain],\n }),\n ];\n }\n return [k, model];\n })\n .reduce((acc, [k, v]) => {\n const name = field_mapping\n ? this.fields().find(\n (field: ODataModelField<any>) => field.name === k\n )?.field || k\n : k;\n return Object.assign(acc, { [name]: v });\n }, {});\n\n // Create entity\n let entity = { ...attrs, ...relations };\n\n // Add client_id\n if (client_id) {\n (<any>entity)[this.cid] = (<any>self)[this.cid];\n }\n\n // Add key\n if (include_key) {\n entity = {\n ...entity,\n ...(this.resolveKey(self, { field_mapping, resolve: false }) as {}),\n };\n }\n\n // Add type\n if (\n self._parent !== null &&\n ((ODataModelOptions.isModel(self._parent[0]) &&\n (self._parent[1] as ODataModelField<any>).meta !== self._meta) ||\n (ODataModelOptions.isCollection(self._parent[0]) &&\n (self._parent[0] as ODataCollection<any, ODataModel<any>>)._model\n .meta !== self._meta))\n ) {\n this.api.options.helper.type(entity, this.schema.type());\n }\n\n return entity;\n }\n\n attributes(\n self: ODataModel<T>,\n {\n changes_only = false,\n include_concurrency = false,\n include_computed = false,\n include_non_field = false,\n field_mapping = false,\n }: {\n changes_only?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_non_field?: boolean;\n field_mapping?: boolean;\n } = {}\n ): { [name: string]: any } {\n // Attributes by fields (attributes for the model type)\n const fieldAttrs = this.fields().reduce((acc, f) => {\n const isChanged = f.name in self._changes;\n const name = field_mapping ? f.field : f.name;\n const computed = f.annotatedValue<boolean>(COMPUTED);\n const value = isChanged\n ? self._changes[f.name]\n : self._attributes[f.name];\n if (f.concurrency && include_concurrency) {\n return Object.assign(acc, { [name]: value });\n } else if (computed && include_computed) {\n return Object.assign(acc, { [name]: value });\n } else if (changes_only && isChanged) {\n return Object.assign(acc, { [name]: value });\n } else if (!changes_only && !f.concurrency && !computed) {\n return Object.assign(acc, { [name]: value });\n } else {\n return acc;\n }\n }, {});\n if (!include_non_field) return fieldAttrs;\n const names = Object.keys(fieldAttrs);\n // Attributes from object (attributes for object)\n const nonFieldAttrs = Object.entries(self)\n .filter(\n ([k]) =>\n names.indexOf(k) === -1 && !k.startsWith('_') && !k.endsWith('$')\n )\n .reduce((acc, [k, v]) => Object.assign(acc, { [k]: v }), {});\n return { ...fieldAttrs, ...nonFieldAttrs };\n }\n\n reset(\n self: ODataModel<T>,\n { name, silent = false }: { name?: string; silent?: boolean } = {}\n ) {\n if (!Types.isEmpty(name) && (name as string) in self._changes) {\n const value = self._attributes[name as string];\n const previous = self._changes[name as string];\n delete self._changes[name as string];\n if (!silent) {\n self.events$.emit(\n new ODataModelEvent('change', {\n model: self,\n track: name,\n value,\n previous,\n })\n );\n }\n } else if (Types.isEmpty(name)) {\n const entries = Object.entries(self._changes);\n self._changes = {};\n if (!silent) {\n entries.forEach((entry) => {\n self.events$.emit(\n new ODataModelEvent('change', {\n track: entry[0],\n model: self,\n value: self._attributes[entry[0]],\n previous: entry[1],\n })\n );\n });\n }\n }\n }\n\n assign(\n self: ODataModel<T>,\n entity: Partial<T> | { [name: string]: any },\n {\n reset = false,\n reparent = false,\n silent = false,\n }: { reset?: boolean; reparent?: boolean; silent?: boolean } = {}\n ) {\n self._reset = reset;\n self._reparent = reparent;\n self._silent = silent;\n\n const changes: string[] = [];\n\n // Apply entity\n const model = self as any;\n Object.entries(entity)\n .filter(([, value]) => value !== undefined) // Filter undefined\n .forEach(([key, value]) => {\n const field = this.fields({\n include_parents: true,\n include_navigation: true,\n }).find(\n (field: ODataModelField<any>) =>\n (self._reset && field.field === key) || field.name === key\n );\n\n if (field !== undefined) {\n // Delegated to private setter\n if (this._set(self, field, value)) {\n changes.push(field.name);\n }\n } else {\n // Basic assignment\n const current = model[key];\n model[key] = value;\n if (current !== value) changes.push(key);\n }\n });\n\n if ((!self._silent && changes.length > 0) || self._reset) {\n self.events$.emit(\n new ODataModelEvent(self._reset ? 'reset' : 'update', {\n model: self,\n options: { changes },\n })\n );\n }\n self._reset = false;\n self._reparent = false;\n self._silent = false;\n }\n\n static isModel(obj: any) {\n return Types.rawType(obj) === 'Model';\n }\n\n static isCollection(obj: any) {\n return Types.rawType(obj) === 'Collection';\n }\n\n private updateCollection<F>(\n self: ODataModel<T>,\n field: ODataModelField<F>,\n collection: ODataCollection<F, ODataModel<F>>,\n value: T[] | { [name: string]: any }[]\n ) {\n collection._annotations = field.annotationsFactory(\n self.annots()\n ) as ODataEntitiesAnnotations;\n collection.assign(value as T[] | { [name: string]: any }[], {\n reset: self._reset,\n reparent: self._reparent,\n silent: self._silent,\n });\n return collection.hasChanged();\n }\n private updateModel<F>(\n self: ODataModel<T>,\n field: ODataModelField<F>,\n model: ODataModel<F>,\n value: F | { [name: string]: any }\n ) {\n model._annotations = field.annotationsFactory(\n self.annots()\n ) as ODataEntityAnnotations;\n model.assign(value as F | { [name: string]: any }, {\n reset: self._reset,\n reparent: self._reparent,\n silent: self._silent,\n });\n return model.hasChanged();\n }\n\n private _get<F>(\n self: ODataModel<T>,\n field: ODataModelField<F>\n ): F | ODataModel<F> | ODataCollection<F, ODataModel<F>> | null | undefined {\n if (field.isStructuredType()) {\n return self._relations[field.name]?.model;\n } else {\n return this.attributes(self, {\n include_concurrency: true,\n include_computed: true,\n })[field.name];\n }\n }\n\n private _setStructured<F>(\n self: ODataModel<T>,\n field: ODataModelField<F>,\n value:\n | F\n | F[]\n | { [name: string]: any }\n | { [name: string]: any }[]\n | ODataModel<F>\n | ODataCollection<F, ODataModel<F>>\n | null\n ): boolean {\n let changed = false;\n // Ensures that the relation exists\n if (!(field.name in self._relations)) {\n self._relations[field.name] = {\n state: ODataModelState.Unchanged,\n field: field,\n };\n }\n\n const relation = self._relations[field.name];\n const currentModel = relation.model;\n\n if (value === null) {\n relation.model = value as null;\n changed = currentModel !== value;\n this._unsubscribe(self, relation);\n } else if (ODataModelOptions.isCollection(currentModel)) {\n if (ODataModelOptions.isCollection(value)) {\n if (\n (currentModel as ODataCollection<F, ODataModel<F>>).equals(\n value as ODataCollection<F, ODataModel<F>>\n )\n ) {\n changed = false;\n }\n this._unsubscribe(self, relation);\n relation.model = value as ODataCollection<F, ODataModel<F>>;\n this._subscribe(self, relation);\n if (self._reparent) relation.model._parent = [self, field];\n changed = true;\n } else if (Types.isArray(value)) {\n changed = this.updateCollection<F>(\n self,\n field,\n currentModel as ODataCollection<F, ODataModel<F>>,\n value as T[] | { [name: string]: any }[]\n );\n }\n } else if (ODataModelOptions.isModel(currentModel)) {\n if (ODataModelOptions.isModel(value)) {\n if ((currentModel as ODataModel<F>).equals(value as ODataModel<F>)) {\n changed = false;\n }\n this._unsubscribe(self, relation);\n relation.model = value as ODataModel<F>;\n this._subscribe(self, relation);\n if (self._reparent) relation.model._parent = [self, field];\n changed = true;\n } else if (Types.isPlainObject(value)) {\n changed = this.updateModel<F>(\n self,\n field,\n currentModel as ODataModel<F>,\n value as F | { [name: string]: any }\n );\n }\n } else {\n relation.model =\n ODataModelOptions.isCollection(value) ||\n ODataModelOptions.isModel(value)\n ? (value as ODataModel<F> | ODataCollection<F, ODataModel<F>>)\n : field.modelCollectionFactory<T, F>({\n parent: self,\n value: value,\n reset: self._reset,\n });\n changed = true;\n this._subscribe(self, relation);\n if (self._reparent) relation.model._parent = [self, field];\n }\n if (!ODataModelOptions.isCollection(relation.model)) {\n var ref = field.meta?.resolveReferential(relation.model, field);\n if (ref !== undefined) {\n Object.entries(ref).forEach(([k, v]) =>\n this._setValue(self, k, v, false)\n );\n }\n }\n relation.state =\n self._reset || !changed\n ? ODataModelState.Unchanged\n : ODataModelState.Changed;\n if (!self._silent && changed) {\n self.events$.emit(\n new ODataModelEvent('change', {\n track: field.name,\n model: self,\n value: relation.model,\n previous: currentModel,\n })\n );\n }\n return changed;\n }\n\n private _setValue<F>(\n self: ODataModel<T>,\n field: string,\n value:\n | F\n | F[]\n | { [name: string]: any }\n | { [name: string]: any }[]\n | ODataModel<F>\n | ODataCollection<F, ODataModel<F>>\n | null,\n key?: boolean\n ): boolean {\n let changed = false;\n const attrs = this.attributes(self, {\n include_concurrency: true,\n include_computed: true,\n });\n const currentValue = attrs[field];\n changed = !Types.isEqual(currentValue, value);\n if (self._reset) {\n delete self._changes[field];\n self._attributes[field] = value;\n } else if (Types.isEqual(value, self._attributes[field])) {\n delete self._changes[field];\n } else if (changed) {\n self._changes[field] = value;\n }\n if (!self._silent && changed) {\n self.events$.emit(\n new ODataModelEvent('change', {\n track: field,\n model: self,\n value,\n previous: currentValue,\n options: { key },\n })\n );\n }\n return changed;\n }\n\n private _set<F>(\n self: ODataModel<T>,\n field: ODataModelField<F>,\n value:\n | F\n | F[]\n | { [name: string]: any }\n | { [name: string]: any }[]\n | ODataModel<F>\n | ODataCollection<F, ODataModel<F>>\n | null\n ): boolean {\n return field.isStructuredType()\n ? this._setStructured(self, field, value)\n : this._setValue(self, field.name, value, field.isKey());\n }\n\n private _unsubscribe<F>(\n self: ODataModel<T>,\n relation: ODataModelRelation<F>\n ) {\n if (relation.subscription) {\n relation.subscription.unsubscribe();\n delete relation.subscription;\n }\n }\n private _subscribe<F>(self: ODataModel<T>, relation: ODataModelRelation<F>) {\n if (relation.subscription) {\n throw new Error('Subscription already exists');\n }\n if (relation.model == null) {\n throw new Error('Subscription model is null');\n }\n relation.subscription = relation.model.events$.subscribe(\n (event: ODataModelEvent<any>) => {\n if (\n BUBBLING.indexOf(event.name) !== -1 &&\n event.bubbling &&\n !event.visited(self)\n ) {\n if (event.model === relation.model) {\n if (\n event.name === 'change' &&\n relation.field.navigation &&\n event.options?.key\n ) {\n var ref = (relation.model as ODataModel<any>).referential(\n relation.field\n );\n if (ref !== undefined) {\n Object.entries(ref).forEach(([k, v]) =>\n this._setValue(self, k, v, false)\n );\n }\n }\n }\n\n event.push(self, relation.field.name);\n self.events$.emit(event);\n }\n }\n );\n }\n}\n","import { EventEmitter } from '@angular/core';\nimport { forkJoin, Observable, of, throwError } from 'rxjs';\nimport { finalize, map, switchMap } from 'rxjs/operators';\nimport { DEFAULT_VERSION } from '../constants';\nimport { ODataHelper } from '../helper';\nimport {\n EntityKey,\n ODataEntities,\n ODataEntitiesAnnotations,\n ODataEntityAnnotations,\n ODataEntityResource,\n ODataEntitySetResource,\n ODataNavigationPropertyResource,\n ODataOptions,\n ODataPropertyResource,\n ODataQueryArgumentsOptions,\n ODataQueryOptionsHandler,\n ODataResource,\n} from '../resources';\nimport { Types } from '../utils/types';\nimport { ODataModel } from './model';\nimport {\n BUBBLING,\n INCLUDE_DEEP,\n INCLUDE_SHALLOW,\n ODataModelEntry,\n ODataModelEvent,\n ODataModelField,\n ODataModelOptions,\n ODataModelState,\n} from './options';\n\nexport class ODataCollection<T, M extends ODataModel<T>>\n implements Iterable<M>\n{\n static model: typeof ODataModel | null = null;\n _parent:\n | [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ]\n | null = null;\n _resource:\n | ODataEntitySetResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | null = null;\n _annotations!: ODataEntitiesAnnotations;\n _entries: ODataModelEntry<T, M>[] = [];\n _model: typeof ODataModel;\n\n models() {\n return this._entries\n .filter((e) => e.state !== ODataModelState.Removed)\n .map((e) => e.model);\n }\n\n get length(): number {\n return this.models().length;\n }\n\n //Events\n events$ = new EventEmitter<ODataModelEvent<T>>();\n constructor(\n entities: Partial<T>[] | { [name: string]: any }[] = [],\n {\n parent,\n resource,\n annots,\n model,\n reset = false,\n }: {\n parent?: [ODataModel<any>, ODataModelField<any>];\n resource?: ODataResource<T>;\n annots?: ODataEntitiesAnnotations;\n model?: typeof ODataModel;\n reset?: boolean;\n } = {}\n ) {\n const Klass = this.constructor as typeof ODataCollection;\n if (model === undefined && Klass.model !== null) model = Klass.model;\n if (model === undefined) throw new Error('Collection need model');\n this._model = model;\n\n // Parent\n if (parent !== undefined) {\n this._parent = parent;\n }\n\n // Resource\n resource = (resource || this._model.meta.collectionResourceFactory()) as\n | ODataEntitySetResource<T>\n | ODataPropertyResource<T>\n | ODataNavigationPropertyResource<T>\n | undefined;\n if (resource !== undefined) {\n this.attach(\n resource as\n | ODataEntitySetResource<T>\n | ODataPropertyResource<T>\n | ODataNavigationPropertyResource<T>\n );\n }\n\n // Annotations\n this._annotations =\n annots ||\n new ODataEntitiesAnnotations(\n resource?.api.options.helper || ODataHelper[DEFAULT_VERSION]\n );\n\n entities = entities || [];\n this.assign(entities, { reset });\n }\n\n isParentOf(\n child: ODataModel<any> | ODataCollection<any, ODataModel<any>>\n ): boolean {\n return (\n child !== this &&\n ODataModelOptions.chain(child).some((p) => p[0] === this)\n );\n }\n\n resource():\n | ODataEntitySetResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T> {\n return ODataModelOptions.resource<T>(this) as\n | ODataEntitySetResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>;\n }\n\n attach(\n resource:\n | ODataEntitySetResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n ) {\n if (\n this._resource !== null &&\n this._resource.type() !== resource.type() &&\n !resource.isSubtypeOf(this._resource)\n )\n throw new Error(\n `Can't reattach ${resource.type()} to ${this._resource.type()}`\n );\n\n this._entries.forEach(({ model }) => {\n const mr = this._model.meta.modelResourceFactory(\n resource.cloneQuery<T>()\n ) as ODataEntityResource<T>;\n model.attach(mr);\n });\n\n const current = this._resource;\n if (current === null || !current.isEqualTo(resource)) {\n this._resource = resource;\n this.events$.emit(\n new ODataModelEvent('attach', {\n collection: this,\n previous: current,\n value: resource,\n })\n );\n }\n }\n\n asEntitySet<R>(func: (collection: this) => R): R {\n const parent = this._parent;\n this._parent = null;\n const result = func(this);\n if (result instanceof Observable) {\n return (result as any).pipe(finalize(() => (this._parent = parent)));\n } else {\n this._parent = parent;\n return result;\n }\n }\n\n annots() {\n return this._annotations;\n }\n\n private modelFactory(\n data: Partial<T> | { [name: string]: any },\n { reset = false }: { reset?: boolean } = {}\n ): M {\n let Model = this._model;\n const helper = this._annotations.helper;\n const annots = new ODataEntityAnnotations(\n helper,\n helper.annotations(data) || {}\n );\n\n if (annots?.type !== undefined && Model.meta !== null) {\n let schema = Model.meta.findChildOptions((o) =>\n o.isTypeOf(annots.type as string)\n )?.schema;\n if (schema !== undefined && schema.model !== undefined)\n // Change to child model\n Model = schema.model;\n }\n\n return new Model(data, {\n annots,\n reset,\n parent: [this, null],\n }) as M;\n }\n\n toEntities({\n client_id = false,\n include_navigation = false,\n include_concurrency = false,\n include_computed = false,\n include_key = true,\n include_non_field = false,\n changes_only = false,\n field_mapping = false,\n chain = [],\n }: {\n client_id?: boolean;\n include_navigation?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_key?: boolean;\n include_non_field?: boolean;\n changes_only?: boolean;\n field_mapping?: boolean;\n chain?: (ODataModel<any> | ODataCollection<any, ODataModel<any>>)[];\n } = {}): (T | { [name: string]: any })[] {\n return this._entries\n .filter(\n ({ model, state }) =>\n state !== ODataModelState.Removed && chain.every((c) => c !== model)\n )\n .map(({ model, state }) => {\n var changesOnly = changes_only && state !== ODataModelState.Added;\n return model.toEntity({\n client_id,\n include_navigation,\n include_concurrency,\n include_computed,\n include_key,\n include_non_field,\n field_mapping,\n changes_only: changesOnly,\n chain: [this, ...chain],\n });\n });\n }\n\n toJSON() {\n return this.toEntities();\n }\n\n hasChanged({ include_navigation }: { include_navigation?: boolean } = {}) {\n return (\n this._entries.some((e) => e.state !== ODataModelState.Unchanged) ||\n this.models().some((m) => m.hasChanged({ include_navigation }))\n );\n }\n\n clone<C extends ODataCollection<T, M>>() {\n let Ctor = <typeof ODataCollection>this.constructor;\n return new Ctor(this.toEntities(INCLUDE_SHALLOW), {\n resource: this.resource(),\n annots: this.annots(),\n }) as C;\n }\n\n fetch({\n withCount,\n ...options\n }: ODataOptions & {\n withCount?: boolean;\n } = {}): Observable<this> {\n const resource = this.resource();\n if (resource === undefined)\n return throwError('fetch: Resource is undefined');\n\n let obs$: Observable<ODataEntities<any>>;\n if (resource instanceof ODataEntitySetResource) {\n obs$ = resource.fetch({ withCount, ...options });\n } else if (resource instanceof ODataNavigationPropertyResource) {\n obs$ = resource.fetch({\n responseType: 'entities',\n withCount,\n ...options,\n });\n } else {\n obs$ = resource.fetch({\n responseType: 'entities',\n withCount,\n ...options,\n });\n }\n this.events$.emit(\n new ODataModelEvent('request', { collection: this, value: obs$ })\n );\n return obs$.pipe(\n map(({ entities, annots }) => {\n this._annotations = annots;\n this.assign(entities || [], { reset: true });\n this.events$.emit(new ODataModelEvent('sync', { collection: this }));\n return this;\n })\n );\n }\n\n fetchAll(options?: ODataOptions): Observable<this> {\n const resource = this.resource();\n if (resource === undefined)\n return throwError('fetchAll: Resource is undefined');\n\n if (resource instanceof ODataPropertyResource)\n return throwError('fetchAll: Resource is ODataPropertyResource');\n\n const obs$ = resource.fetchAll(options);\n this.events$.emit(\n new ODataModelEvent('request', {\n collection: this,\n options: { observable: obs$ },\n })\n );\n return obs$.pipe(\n map((entities) => {\n this._annotations = new ODataEntitiesAnnotations(\n resource?.api.options.helper\n );\n this.assign(entities || [], { reset: true });\n this.events$.emit(\n new ODataModelEvent('sync', {\n collection: this,\n options: { entities },\n })\n );\n return this;\n })\n );\n }\n\n /**\n * Save all models in the collection\n * @param relModel The model is relationship\n * @param method The method to use\n * @param options HttpOptions\n */\n save({\n relModel = false,\n method,\n ...options\n }: ODataOptions & {\n relModel?: boolean;\n method?: 'update' | 'modify';\n } = {}): Observable<this> {\n const resource = this.resource();\n if (resource === undefined)\n return throwError('saveAll: Resource is undefined');\n\n if (resource instanceof ODataPropertyResource)\n return throwError('fetchAll: Resource is ODataPropertyResource');\n\n let toDestroyEntity: M[] = [];\n let toRemoveReference: M[] = [];\n let toDestroyContained: M[] = [];\n let toCreateEntity: M[] = [];\n let toAddReference: M[] = [];\n let toCreateContained: M[] = [];\n let toUpdateEntity: M[] = [];\n let toUpdateContained: M[] = [];\n\n this._entries.forEach(({ model, state }) => {\n if (state === ODataModelState.Removed) {\n if (relModel) {\n toDestroyEntity.push(model);\n } else if (!model.isNew()) {\n toRemoveReference.push(model);\n } else {\n toDestroyContained.push(model);\n }\n } else if (state === ODataModelState.Added) {\n if (relModel) {\n toCreateEntity.push(model);\n } else if (!model.isNew()) {\n toAddReference.push(model);\n } else {\n toCreateContained.push(model);\n }\n } else if (model.hasChanged()) {\n toUpdateEntity.push(model);\n }\n });\n if (\n toDestroyEntity.length > 0 ||\n toRemoveReference.length > 0 ||\n toDestroyContained.length > 0 ||\n toCreateEntity.length > 0 ||\n toAddReference.length > 0 ||\n toCreateContained.length > 0 ||\n toUpdateEntity.length > 0 ||\n toUpdateContained.length > 0\n ) {\n const obs$ = forkJoin([\n ...toDestroyEntity.map((m) => m.asEntity((e) => e.destroy(options))),\n ...toRemoveReference.map((m) => this.removeReference(m, options)),\n ...toDestroyContained.map((m) => m.destroy(options)),\n ...toCreateEntity.map((m) =>\n m.asEntity((e) => e.save({ method: 'create', ...options }))\n ),\n ...toAddReference.map((m) => this.addReference(m, options)),\n ...toCreateContained.map((m) =>\n m.save({ method: 'create', ...options })\n ),\n ...toUpdateEntity.map((m) =>\n m.asEntity((e) => e.save({ method, ...options }))\n ),\n ...toUpdateContained.map((m) => m.save({ method, ...options })),\n ]);\n this.events$.emit(\n new ODataModelEvent('request', {\n collection: this,\n options: { observable: obs$ },\n })\n );\n return obs$.pipe(\n map(() => {\n this._entries = this._entries\n .filter((entry) => entry.state !== ODataModelState.Removed)\n .map((entry) => ({ ...entry, state: ODataModelState.Unchanged }));\n this.events$.emit(new ODataModelEvent('sync', { collection: this }));\n return this;\n })\n );\n }\n return of(this);\n }\n\n private addReference(model: M, options?: ODataOptions): Observable<M> {\n const resource = this.resource();\n if (!model.isNew() && resource instanceof ODataNavigationPropertyResource) {\n return resource\n .reference()\n .add(\n model._meta.entityResource(model) as ODataEntityResource<T>,\n options\n )\n .pipe(map(() => model));\n }\n return of(model);\n }\n\n private _addModel(\n model: M,\n {\n silent = false,\n reset = false,\n reparent = false,\n position = -1,\n }: {\n silent?: boolean;\n reset?: boolean;\n reparent?: boolean;\n position?: number;\n } = {}\n ): M | undefined {\n const key = model.key();\n let entry = this._findEntry({\n model,\n key,\n cid: (<any>model)[this._model.meta.cid],\n });\n if (entry !== undefined && entry.state !== ODataModelState.Removed) {\n return undefined;\n }\n\n if (entry !== undefined && entry.state === ODataModelState.Removed) {\n const index = this._entries.indexOf(entry);\n this._entries.splice(index, 1);\n }\n\n // Create Entry\n entry = {\n state: reset ? ODataModelState.Unchanged : ODataModelState.Added,\n model,\n key: model.key(),\n };\n // Set Parent\n if (reparent) model._parent = [this, null];\n // Subscribe\n this._subscribe(entry);\n // Now add\n if (position >= 0) this._entries.splice(position, 0, entry);\n else this._entries.push(entry);\n\n if (!silent) {\n model.events$.emit(\n new ODataModelEvent('add', { model, collection: this })\n );\n }\n return entry.model;\n }\n\n private addModel(\n model: M,\n {\n silent = false,\n reset = false,\n reparent = false,\n position = -1,\n }: {\n silent?: boolean;\n reset?: boolean;\n reparent?: boolean;\n position?: number;\n } = {}\n ) {\n if (position < 0) position = this._bisect(model);\n const added = this._addModel(model, { silent, reset, position, reparent });\n if (!silent && added !== undefined) {\n this.events$.emit(\n new ODataModelEvent('update', {\n collection: this,\n options: { added: [added], removed: [], merged: [] },\n })\n );\n }\n }\n\n add(\n model: M,\n {\n silent = false,\n reparent = false,\n server = true,\n position = -1,\n }: {\n silent?: boolean;\n reparent?: boolean;\n server?: boolean;\n position?: number;\n } = {}\n ): Observable<this> {\n if (server) {\n return this.addReference(model).pipe(\n map((model) => {\n this.addModel(model, { silent, position, reparent, reset: true });\n return this;\n })\n );\n } else {\n this.addModel(model, { silent, position, reparent });\n return of(this);\n }\n }\n\n private removeReference(model: M, options?: ODataOptions): Observable<M> {\n let resource = this.resource();\n if (!model.isNew() && resource instanceof ODataNavigationPropertyResource) {\n let target =\n this._model.meta.api.options.deleteRefBy === 'id'\n ? (model._meta.entityResource(model) as ODataEntityResource<T>)\n : undefined;\n if (this._model.meta.api.options.deleteRefBy === 'path') {\n resource = resource.key(model.key());\n }\n return resource\n .reference()\n .remove(target, options)\n .pipe(map(() => model));\n }\n return of(model);\n }\n\n private _removeModel(\n model: M,\n {\n silent = false,\n reset = false,\n }: { silent?: boolean; reset?: boolean } = {}\n ): M | undefined {\n const key = model.key();\n let entry = this._findEntry({\n model,\n key,\n cid: (<any>model)[this._model.meta.cid],\n });\n if (entry === undefined || entry.state === ODataModelState.Removed) {\n return undefined;\n }\n\n // Emit Event\n if (!silent)\n model.events$.emit(\n new ODataModelEvent('remove', { model, collection: this })\n );\n\n // Now remove\n const index = this._entries.indexOf(entry);\n this._entries.splice(index, 1);\n if (!(reset || entry.state === ODataModelState.Added)) {\n // Move to end of array and mark as removed\n entry.state = ODataModelState.Removed;\n this._entries.push(entry);\n }\n this._unsubscribe(entry);\n return entry.model;\n }\n\n private removeModel(\n model: M,\n {\n silent = false,\n reset = false,\n }: { silent?: boolean; reset?: boolean } = {}\n ) {\n const removed = this._removeModel(model, { silent, reset });\n if (!silent && removed !== undefined) {\n this.events$.emit(\n new ODataModelEvent('update', {\n collection: this,\n options: { added: [], removed: [removed], merged: [] },\n })\n );\n }\n }\n\n remove(\n model: M,\n {\n silent = false,\n server = true,\n }: { silent?: boolean; server?: boolean } = {}\n ): Observable<this> {\n if (server) {\n return this.removeReference(model).pipe(\n map((model) => {\n this.removeModel(model, { silent, reset: true });\n return this;\n })\n );\n } else {\n this.removeModel(model, { silent });\n return of(this);\n }\n }\n\n create(\n attrs: T = {} as T,\n {\n silent = false,\n server = true,\n }: { silent?: boolean; server?: boolean } = {}\n ) {\n const model = this.modelFactory(attrs);\n return (model.isValid() && server ? model.save() : of(model)).pipe(\n switchMap((model) => this.add(model, { silent, server })),\n map(() => model)\n );\n }\n\n set(path: string | string[], value: any) {\n const Model = this._model;\n const pathArray = (\n Types.isArray(path) ? path : (path as string).match(/([^[.\\]])+/g)\n ) as any[];\n if (pathArray.length === 0) return undefined;\n if (pathArray.length > 1) {\n const model = this._entries[Number(pathArray[0])].model;\n return model.set(pathArray.slice(1), value);\n }\n if (pathArray.length === 1 && ODataModelOptions.isModel(value)) {\n let toAdd: M[] = [];\n let toMerge: M[] = [];\n let toRemove: M[] = [];\n let index = Number(pathArray[0]);\n const model = this.models()[index];\n const entry = this._findEntry({ model });\n if (entry !== undefined) {\n //TODO: Remove/Add or Merge?\n // Merge\n entry.model.assign(\n value.toEntity({ client_id: true, ...INCLUDE_DEEP })\n );\n if (entry.model.hasChanged()) toMerge.push(model);\n } else {\n // Add\n this._addModel(value, { reparent: true });\n toAdd.push(model);\n }\n this.events$.emit(\n new ODataModelEvent('update', {\n collection: this,\n options: { added: toAdd, removed: toRemove, merged: toMerge },\n })\n );\n return value;\n }\n }\n\n get(path: number): M | undefined;\n get(path: string | string[]): any;\n get(path: any): any {\n const Model = this._model;\n const pathArray = (\n Types.isArray(path) ? path : `${path}`.match(/([^[.\\]])+/g)\n ) as any[];\n if (pathArray.length === 0) return undefined;\n const value = this.models()[Number(pathArray[0])];\n if (pathArray.length > 1 && ODataModelOptions.isModel(value)) {\n return value.get(pathArray.slice(1));\n }\n return value;\n }\n\n reset({\n path,\n silent = false,\n }: { path?: string | string[]; silent?: boolean } = {}) {\n if (Types.isEmpty(path)) {\n this.models().forEach((m) => m.reset({ silent }));\n } else {\n const Model = this._model;\n const pathArray = (\n Types.isArray(path) ? path : `${path}`.match(/([^[.\\]])+/g)\n ) as any[];\n const value = this.models()[Number(pathArray[0])];\n if (ODataModelOptions.isModel(value)) {\n value.reset({ path: pathArray.slice(1), silent });\n }\n }\n }\n\n assign(\n objects: Partial<T>[] | { [name: string]: any }[] | M[],\n {\n reset = false,\n reparent = false,\n silent = false,\n }: { reset?: boolean; reparent?: boolean; silent?: boolean } = {}\n ) {\n const Model = this._model;\n\n let toAdd: M[] = [];\n let toMerge: M[] = [];\n let toRemove: M[] = [];\n let toSort: [M, number][] = [];\n let modelMap: string[] = [];\n objects.forEach((obj, index) => {\n const isModel = ODataModelOptions.isModel(obj);\n const key =\n Model !== null && Model.meta ? Model.meta.resolveKey(obj) : undefined;\n const cid =\n Model.meta.cid in obj ? (<any>obj)[Model.meta.cid] : undefined;\n // Try find entry\n const entry = isModel\n ? this._findEntry({ model: obj as M }) // By Model\n : this._findEntry({ cid, key }); // By Cid or Key\n\n let model: M;\n if (entry !== undefined) {\n // Merge\n model = entry.model;\n if (model !== obj) {\n // Get entity from model\n if (isModel) {\n const entity = (obj as M).toEntity({\n client_id: true,\n ...INCLUDE_DEEP,\n });\n model.assign(entity, { reset, silent });\n } else {\n const helper = this._annotations.helper;\n const annots = new ODataEntityAnnotations(\n helper,\n helper.annotations(obj) || {}\n );\n const entity = annots.attributes<T>(obj, 'full');\n model._annotations = annots;\n model.assign(entity, { reset, silent });\n }\n // Model Change?\n if (model.hasChanged()) toMerge.push(model);\n }\n // Has Sort or Index Change?\n if (toSort.length > 0 || index !== this.models().indexOf(model)) {\n toSort.push([model, index]);\n }\n } else {\n // Add\n model = isModel\n ? (obj as M)\n : this.modelFactory(obj as Partial<T> | { [name: string]: any }, {\n reset,\n });\n toAdd.push(model);\n }\n modelMap.push((<any>model)[Model.meta.cid]);\n });\n this._entries\n .filter((e) => modelMap.indexOf((<any>e.model)[Model.meta.cid]) === -1)\n .forEach((entry) => {\n toRemove.push(entry.model);\n });\n\n toRemove.forEach((m) => {\n this._removeModel(m, { silent, reset });\n });\n toAdd.forEach((m) => {\n this._addModel(m, { silent, reset, reparent });\n });\n toSort.forEach((m) => {\n this._removeModel(m[0], { silent: true, reset });\n this._addModel(m[0], { silent: true, reset, position: m[1], reparent });\n });\n\n if (\n (!silent &&\n (toAdd.length > 0 ||\n toRemove.length > 0 ||\n toMerge.length > 0 ||\n toSort.length > 0)) ||\n reset\n ) {\n this._sortBy = null;\n this.events$.emit(\n new ODataModelEvent(reset ? 'reset' : 'update', {\n collection: this,\n options: {\n added: toAdd,\n removed: toRemove,\n merged: toMerge,\n sorted: toSort,\n },\n })\n );\n }\n }\n\n query(func: (q: ODataQueryOptionsHandler<T>) => void) {\n const resource = this.resource();\n resource.query(func);\n this.attach(resource);\n return this;\n }\n\n callFunction<P, R>(\n name: string,\n params: P | null,\n responseType: 'property' | 'model' | 'collection' | 'none',\n { ...options }: {} & ODataQueryArgumentsOptions<R> = {}\n ): Observable<R | ODataModel<R> | ODataCollection<R, ODataModel<R>> | null> {\n const resource = this.resource();\n if (resource instanceof ODataEntitySetResource) {\n const func = resource.function<P, R>(name);\n func.query((q) => q.apply(options));\n switch (responseType) {\n case 'property':\n return func.callProperty(params, options);\n case 'model':\n return func.callModel(params, options);\n case 'collection':\n return func.callCollection(params, options);\n default:\n return func.call(params, { responseType, ...options });\n }\n }\n return throwError(`Can't function without ODataEntitySetResource`);\n }\n\n callAction<P, R>(\n name: string,\n params: P | null,\n responseType: 'property' | 'model' | 'collection' | 'none',\n { ...options }: {} & ODataQueryArgumentsOptions<R> = {}\n ): Observable<R | ODataModel<R> | ODataCollection<R, ODataModel<R>> | null> {\n const resource = this.resource();\n if (resource instanceof ODataEntitySetResource) {\n const action = resource.action<P, R>(name);\n action.query((q) => q.apply(options));\n switch (responseType) {\n case 'property':\n return action.callProperty(params, options);\n case 'model':\n return action.callModel(params, options);\n case 'collection':\n return action.callCollection(params, options);\n default:\n return action.call(params, { responseType, ...options });\n }\n }\n return throwError(`Can't action without ODataEntitySetResource`);\n }\n\n private _unsubscribe(entry: ODataModelEntry<T, M>) {\n if (entry.subscription) {\n entry.subscription.unsubscribe();\n delete entry.subscription;\n }\n }\n\n private _subscribe(entry: ODataModelEntry<T, M>) {\n if (entry.subscription) {\n throw new Error('Subscription already exists');\n }\n entry.subscription = entry.model.events$.subscribe(\n (event: ODataModelEvent<T>) => {\n if (\n BUBBLING.indexOf(event.name) !== -1 &&\n event.bubbling &&\n !event.visited(this)\n ) {\n if (event.model === entry.model) {\n if (event.name === 'destroy') {\n this.removeModel(entry.model, { reset: true });\n } else if (event.name === 'change' && event.options?.key) {\n entry.key = entry.model.key();\n }\n }\n\n const index = this.models().indexOf(entry.model);\n event.push(this, index);\n this.events$.emit(event);\n }\n }\n );\n }\n\n private _findEntry({\n model,\n cid,\n key,\n }: {\n model?: ODataModel<T>;\n cid?: string;\n key?: EntityKey<T> | { [name: string]: any };\n } = {}) {\n return this._entries.find((entry) => {\n const byModel = model !== undefined && entry.model.equals(model);\n const byCid =\n cid !== undefined && (<any>entry.model)[this._model.meta.cid] === cid;\n const byKey =\n key !== undefined &&\n entry.key !== undefined &&\n Types.isEqual(entry.key, key);\n return byModel || byCid || byKey;\n });\n }\n\n // Collection functions\n equals(other: ODataCollection<T, ODataModel<T>>) {\n return this === other;\n }\n\n get [Symbol.toStringTag]() {\n return 'Collection';\n }\n\n public [Symbol.iterator]() {\n let pointer = 0;\n let models = this.models();\n return {\n next(): IteratorResult<M> {\n return {\n done: pointer === models.length,\n value: models[pointer++],\n };\n },\n };\n }\n\n filter(predicate: (m: M, index: number) => boolean): M[] {\n return this.models().filter(predicate);\n }\n\n find(predicate: (m: M, index: number) => boolean): M | undefined {\n return this.models().find(predicate);\n }\n\n first(): M | undefined {\n return this.models()[0];\n }\n\n last(): M | undefined {\n const models = this.models();\n return models[models.length - 1];\n }\n\n next(model: M): M | undefined {\n const index = this.indexOf(model);\n if (index === -1 || index === this.length - 1) {\n return undefined;\n }\n return this.get(index + 1);\n }\n\n prev(model: M): M | undefined {\n const index = this.indexOf(model);\n if (index <= 0) {\n return undefined;\n }\n return this.get(index - 1);\n }\n\n every(predicate: (m: M, index: number) => boolean): boolean {\n return this.models().every(predicate);\n }\n\n some(predicate: (m: M, index: number) => boolean): boolean {\n return this.models().some(predicate);\n }\n\n contains(model: M) {\n return this.some((m) => m.equals(model));\n }\n\n indexOf(model: M): number {\n const models = this.models();\n const m = models.find((m) => m.equals(model));\n return m === undefined ? -1 : models.indexOf(m);\n }\n\n //#region Sort\n private _bisect(model: M) {\n let index = -1;\n if (this._sortBy !== null) {\n for (index = 0; index < this._entries.length; index++) {\n if (this._compare(model, this._entries[index], this._sortBy, 0) < 0) {\n return index;\n }\n }\n }\n return index;\n }\n\n private _compare(\n e1: ODataModelEntry<T, M> | M,\n e2: ODataModelEntry<T, M> | M,\n by: { field: string | keyof T; order?: 1 | -1 }[],\n index: number\n ): number {\n let m1 = ODataModelOptions.isModel(e1)\n ? (e1 as M)\n : (e1 as ODataModelEntry<T, M>).model;\n let m2 = ODataModelOptions.isModel(e2)\n ? (e2 as M)\n : (e2 as ODataModelEntry<T, M>).model;\n let value1 = m1.get(by[index].field as string);\n let value2 = m2.get(by[index].field as string);\n let result: number = 0;\n\n if (value1 == null && value2 != null) result = -1;\n else if (value1 != null && value2 == null) result = 1;\n else if (value1 == null && value2 == null) result = 0;\n else if (typeof value1 == 'string' || value1 instanceof String) {\n if (value1.localeCompare && value1 != value2) {\n return (by[index].order || 1) * value1.localeCompare(value2);\n }\n } else {\n result = value1 < value2 ? -1 : 1;\n }\n\n if (value1 == value2) {\n return by.length - 1 > index ? this._compare(e1, e2, by, index + 1) : 0;\n }\n\n return (by[index].order || 1) * result;\n }\n\n _sortBy: { field: string | keyof T; order?: 1 | -1 }[] | null = null;\n isSorted() {\n return this._sortBy !== null;\n }\n\n sort(\n by: { field: string | keyof T; order?: 1 | -1 }[],\n { silent }: { silent?: boolean } = {}\n ) {\n this._sortBy = by;\n this._entries = this._entries.sort(\n (e1: ODataModelEntry<T, M>, e2: ODataModelEntry<T, M>) =>\n this._compare(e1, e2, by, 0)\n );\n if (!silent) {\n this.events$.emit(\n new ODataModelEvent('update', {\n collection: this,\n })\n );\n }\n }\n //#endregion\n}\n","import { EventEmitter } from '@angular/core';\nimport { forkJoin, NEVER, Observable, of, throwError } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\nimport {\n EntityKey,\n ODataEntity,\n ODataEntityAnnotations,\n ODataEntityResource,\n ODataNavigationPropertyResource,\n ODataOptions,\n ODataPropertyResource,\n ODataQueryArgumentsOptions,\n ODataQueryOptionsHandler,\n ODataResource,\n ODataSingletonResource,\n} from '../resources';\nimport { ODataStructuredType } from '../schema';\nimport { Objects, Strings, Types } from '../utils';\nimport { ODataCollection } from './collection';\nimport {\n INCLUDE_DEEP,\n INCLUDE_SHALLOW,\n ModelOptions,\n ODataModelEvent,\n ODataModelField,\n ODataModelOptions,\n ODataModelRelation,\n} from './options';\n\n// @dynamic\nexport class ODataModel<T> {\n // Properties\n static options: ModelOptions;\n static meta: ODataModelOptions<any>;\n static buildMeta<T>({\n options,\n schema,\n }: {\n options?: ModelOptions;\n schema: ODataStructuredType<T>;\n }) {\n if (options === undefined) {\n let fields = schema\n .fields({ include_navigation: true, include_parents: true })\n .reduce((acc, f) => {\n let name = f.name;\n // Prevent collision with reserved keywords\n while (RESERVED_FIELD_NAMES.includes(name)) {\n name = name + '_';\n }\n return Object.assign(acc, {\n [name]: {\n field: f.name,\n default: f.default,\n required: !f.nullable,\n },\n });\n }, {});\n options = { fields };\n }\n this.meta = new ODataModelOptions<T>({ options, schema });\n }\n // Parent\n _parent:\n | [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ]\n | null = null;\n _attributes: { [name: string]: any } = {};\n _changes: { [name: string]: any } = {};\n _relations: { [name: string]: ODataModelRelation<any> } = {};\n _resource: ODataResource<T> | null = null;\n _annotations!: ODataEntityAnnotations;\n _reset: boolean = false;\n _reparent: boolean = false;\n _silent: boolean = false;\n _meta: ODataModelOptions<T>;\n // Events\n events$ = new EventEmitter<ODataModelEvent<T>>();\n\n constructor(\n data: Partial<T> | { [name: string]: any } = {},\n {\n parent,\n resource,\n annots,\n reset = false,\n }: {\n parent?: [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ];\n resource?: ODataResource<T>;\n annots?: ODataEntityAnnotations;\n reset?: boolean;\n } = {}\n ) {\n const Klass = this.constructor as typeof ODataModel;\n if (Klass.meta === undefined)\n throw new Error(`Can't create model without metadata`);\n this._meta = Klass.meta;\n this._meta.bind(this, { parent, resource, annots });\n\n // Client Id\n (<any>this)[this._meta.cid] =\n (<any>data)[this._meta.cid] ||\n Strings.uniqueId(`${Klass.meta.schema.name.toLowerCase()}-`);\n\n let attrs = this.annots().attributes<T>(data, 'full');\n let defaults = this.defaults();\n\n this.assign(Objects.merge(defaults, attrs), { reset });\n }\n\n //#region Resources\n resource():\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T> {\n return ODataModelOptions.resource<T>(this) as\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T>;\n }\n\n navigationProperty<N>(\n name: keyof T | string\n ): ODataNavigationPropertyResource<N> {\n const field = this._meta.field(name);\n if (field === undefined || !field.navigation)\n throw Error(`Can't find navigation property ${name}`);\n\n const resource = this.resource();\n if (!(resource instanceof ODataEntityResource) || !resource.hasKey())\n throw Error(\"Can't get navigation without ODataEntityResource with key\");\n\n return field.resourceFactory<T, N>(\n resource\n ) as ODataNavigationPropertyResource<N>;\n }\n\n property<N>(name: string): ODataPropertyResource<N> {\n const field = this._meta.field(name);\n if (field === undefined || field.navigation)\n throw Error(`Can't find property ${name}`);\n\n const resource = this.resource();\n if (!(resource instanceof ODataEntityResource) || !resource.hasKey())\n throw Error(\"Can't get property without ODataEntityResource with key\");\n\n return field.resourceFactory<T, N>(resource) as ODataPropertyResource<N>;\n }\n\n attach(\n resource:\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T>\n ) {\n return this._meta.attach(this, resource);\n }\n //#endregion\n\n schema() {\n return this._meta.schema;\n }\n\n annots() {\n return this._annotations;\n }\n\n key({\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}):\n | EntityKey<T>\n | { [name: string]: any }\n | undefined {\n return this._meta.resolveKey(this, { field_mapping, resolve });\n }\n\n isNew() {\n return this.key() === undefined;\n }\n\n isParentOf(\n child: ODataModel<any> | ODataCollection<any, ODataModel<any>>\n ): boolean {\n return (\n child !== this &&\n ODataModelOptions.chain(child).some((p) => p[0] === this)\n );\n }\n\n referential(\n field: ODataModelField<any>,\n {\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}\n ): { [name: string]: any } | undefined {\n return this._meta.resolveReferential(this, field, {\n field_mapping,\n resolve,\n });\n }\n\n referenced(\n field: ODataModelField<any>,\n {\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}\n ): { [name: string]: any } | undefined {\n return this._meta.resolveReferenced(this, field, {\n field_mapping,\n resolve,\n });\n }\n\n // Validation\n _errors?: { [key: string]: any };\n validate({\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}) {\n return this._meta.validate(this, { method, navigation });\n }\n\n isValid({\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}): boolean {\n this._errors = this.validate({ method, navigation });\n if (this._errors !== undefined)\n this.events$.emit(\n new ODataModelEvent('invalid', {\n model: this,\n value: this._errors,\n options: { method },\n })\n );\n return this._errors === undefined;\n }\n\n defaults() {\n return this._meta.defaults() || {};\n }\n\n toEntity({\n client_id = false,\n include_navigation = false,\n include_concurrency = false,\n include_computed = false,\n include_key = true,\n include_non_field = false,\n changes_only = false,\n field_mapping = false,\n chain = [],\n }: {\n client_id?: boolean;\n include_navigation?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_key?: boolean;\n include_non_field?: boolean;\n changes_only?: boolean;\n field_mapping?: boolean;\n chain?: (ODataModel<any> | ODataCollection<any, ODataModel<any>>)[];\n } = {}): T | { [name: string]: any } {\n return this._meta.toEntity(this, {\n client_id,\n include_navigation,\n include_concurrency,\n include_computed,\n include_key,\n include_non_field,\n changes_only,\n field_mapping,\n chain,\n });\n }\n\n toJSON() {\n return this.toEntity();\n }\n\n attributes({\n changes_only = false,\n include_concurrency = false,\n include_computed = false,\n include_non_field = false,\n field_mapping = false,\n }: {\n changes_only?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_non_field?: boolean;\n field_mapping?: boolean;\n } = {}): { [name: string]: any } {\n return this._meta.attributes(this, {\n changes_only,\n include_concurrency,\n include_computed,\n include_non_field,\n field_mapping,\n });\n }\n\n set(path: string | string[], value: any) {\n const pathArray = (\n Types.isArray(path) ? path : (path as string).match(/([^[.\\]])+/g)\n ) as any[];\n if (pathArray.length === 0) return undefined;\n if (pathArray.length > 1) {\n const model = (<any>this)[pathArray[0]];\n return model.set(pathArray.slice(1), value);\n }\n if (pathArray.length === 1) {\n return ((<any>this)[pathArray[0]] = value);\n }\n }\n\n get(path: string | string[]): any {\n const pathArray = (\n Types.isArray(path) ? path : (path as string).match(/([^[.\\]])+/g)\n ) as any[];\n if (pathArray.length === 0) return undefined;\n const value = (<any>this)[pathArray[0]];\n if (\n pathArray.length > 1 &&\n (value instanceof ODataModel || value instanceof ODataCollection)\n ) {\n return value.get(pathArray.slice(1));\n }\n return value;\n }\n\n reset({\n path,\n silent = false,\n }: { path?: string | string[]; silent?: boolean } = {}) {\n const pathArray: string[] = (\n path === undefined\n ? []\n : Types.isArray(path)\n ? path\n : (path as string).match(/([^[.\\]])+/g)\n ) as any[];\n const name = pathArray[0];\n const value = name !== undefined ? (<any>this)[name] : undefined;\n if (\n ODataModelOptions.isModel(value) ||\n ODataModelOptions.isCollection(value)\n ) {\n value.reset({ path: pathArray.slice(1), silent });\n } else {\n this._meta.reset(this, { name: pathArray[0], silent });\n }\n }\n\n assign(\n entity: Partial<T> | { [name: string]: any },\n {\n reset = false,\n reparent = false,\n silent = false,\n }: { reset?: boolean; reparent?: boolean; silent?: boolean } = {}\n ) {\n return this._meta.assign(this, entity, { reset, silent, reparent });\n }\n\n clone<M extends ODataModel<T>>() {\n let Ctor = <typeof ODataModel>this.constructor;\n return new Ctor(this.toEntity(INCLUDE_SHALLOW), {\n resource: this.resource() as ODataResource<T>,\n annots: this.annots(),\n }) as M;\n }\n\n private _request(obs$: Observable<ODataEntity<any>>): Observable<this> {\n this.events$.emit(\n new ODataModelEvent('request', {\n model: this,\n options: { observable: obs$ },\n })\n );\n return obs$.pipe(\n map(({ entity, annots }) => {\n this._annotations = annots;\n this.assign(annots.attributes<T>(entity || {}, 'full'), {\n reset: true,\n });\n this.events$.emit(\n new ODataModelEvent('sync', {\n model: this,\n options: { entity, annots },\n })\n );\n return this;\n })\n );\n }\n\n fetch({\n ...options\n }: ODataOptions & {\n options?: ODataOptions;\n } = {}): Observable<this> {\n let resource = this.resource();\n if (resource === undefined)\n return throwError('fetch: Resource is undefined');\n\n let obs$: Observable<ODataEntity<T>>;\n if (resource instanceof ODataEntityResource) {\n if (!resource.hasKey())\n return throwError(\"fetch: Can't fetch model without key\");\n obs$ = resource.fetch(options);\n } else if (resource instanceof ODataNavigationPropertyResource) {\n obs$ = resource.fetch({ responseType: 'entity', ...options });\n } else {\n obs$ = (resource as ODataPropertyResource<T>).fetch({\n responseType: 'entity',\n ...options,\n });\n }\n return this._request(obs$);\n }\n\n save({\n method,\n navigation = false,\n validate = true,\n ...options\n }: ODataOptions & {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n validate?: boolean;\n options?: ODataOptions;\n } = {}): Observable<this> {\n let resource = this.resource();\n if (resource === undefined)\n return throwError('save: Resource is undefined');\n if (\n !(\n resource instanceof ODataEntityResource ||\n resource instanceof ODataNavigationPropertyResource\n )\n )\n return throwError(\n 'save: Resource type ODataEntityResource/ODataNavigationPropertyResource needed'\n );\n\n // Resolve method and resource key\n if (method === undefined && this.schema().isCompoundKey())\n return throwError(\n 'save: Composite key require a specific method, use create/update/modify'\n );\n method = method || (!resource.hasKey() ? 'create' : 'update');\n if (\n resource instanceof ODataEntityResource &&\n (method === 'update' || method === 'modify') &&\n !resource.hasKey()\n )\n return throwError('save: Update/Patch require entity key');\n if (\n resource instanceof ODataNavigationPropertyResource ||\n method === 'create'\n )\n resource.clearKey();\n\n let obs$: Observable<ODataEntity<any>>;\n if (!validate || this.isValid({ method, navigation })) {\n const _entity = this.toEntity({\n changes_only: method === 'modify',\n field_mapping: true,\n include_concurrency: true,\n include_navigation: navigation,\n }) as T;\n obs$ = (\n method === 'create'\n ? resource.create(_entity, options)\n : method === 'modify'\n ? resource.modify(_entity, { etag: this.annots().etag, ...options })\n : resource.update(_entity, { etag: this.annots().etag, ...options })\n ).pipe(\n map(({ entity, annots }) => ({ entity: entity || _entity, annots }))\n );\n } else {\n obs$ = throwError(this._errors);\n }\n return this._request(obs$);\n }\n\n destroy({\n ...options\n }: ODataOptions & {\n options?: ODataOptions;\n } = {}): Observable<this> {\n let resource = this.resource();\n if (resource === undefined)\n return throwError('destroy: Resource is undefined');\n if (\n !(\n resource instanceof ODataEntityResource ||\n resource instanceof ODataNavigationPropertyResource\n )\n )\n return throwError(\n 'destroy: Resource type ODataEntityResource/ODataNavigationPropertyResource needed'\n );\n if (!resource.hasKey())\n return throwError(\"destroy: Can't destroy model without key\");\n\n const _entity = this.toEntity({ field_mapping: true }) as T;\n const obs$ = resource\n .destroy({ etag: this.annots().etag, ...options })\n .pipe(\n map(({ entity, annots }) => ({ entity: entity || _entity, annots }))\n );\n return this._request(obs$).pipe(\n tap(() =>\n this.events$.emit(new ODataModelEvent('destroy', { model: this }))\n )\n );\n }\n\n /**\n * Create an execution context for change the internal query of a resource\n * @param func Function to execute\n */\n query(func: (q: ODataQueryOptionsHandler<T>) => void) {\n return this._meta.query(this, this.resource(), func) as this;\n }\n\n /**\n * Perform a check on the internal state of the model and return true if the model is changed.\n * @param include_navigation Check in navigation properties\n * @returns true if the model has changed, false otherwise\n */\n hasChanged({\n include_navigation = false,\n }: { include_navigation?: boolean } = {}) {\n return this._meta.hasChanged(this, { include_navigation });\n }\n\n /**\n * Create an execution context for a given function, where the model is bound to its entity endpoint\n * @param ctx Context function\n * @returns The result of the context\n */\n asEntity<R>(ctx: (model: this) => R): R {\n return this._meta.asEntity(this, ctx);\n }\n\n callFunction<P, R>(\n name: string,\n params: P | null,\n responseType: 'property' | 'model' | 'collection' | 'none',\n { ...options }: {} & ODataQueryArgumentsOptions<R> = {}\n ): Observable<R | ODataModel<R> | ODataCollection<R, ODataModel<R>> | null> {\n const resource = this.resource();\n if (!(resource instanceof ODataEntityResource) || !resource.hasKey())\n return throwError(\n \"Can't call function without ODataEntityResource with key\"\n );\n\n const func = resource.function<P, R>(name).query((q) => q.apply(options));\n switch (responseType) {\n case 'property':\n return func.callProperty(params, options);\n case 'model':\n return func.callModel(params, options);\n case 'collection':\n return func.callCollection(params, options);\n default:\n return func.call(params, { responseType, ...options });\n }\n }\n\n callAction<P, R>(\n name: string,\n params: P | null,\n responseType: 'property' | 'model' | 'collection' | 'none',\n { ...options }: {} & ODataQueryArgumentsOptions<R> = {}\n ): Observable<R | ODataModel<R> | ODataCollection<R, ODataModel<R>> | null> {\n const resource = this.resource();\n if (!(resource instanceof ODataEntityResource) || !resource.hasKey())\n return throwError(\n \"Can't call action without ODataEntityResource with key\"\n );\n\n const action = resource.action<P, R>(name).query((q) => q.apply(options));\n switch (responseType) {\n case 'property':\n return action.callProperty(params, options);\n case 'model':\n return action.callModel(params, options);\n case 'collection':\n return action.callCollection(params, options);\n default:\n return action.call(params, { responseType, ...options });\n }\n }\n\n // Cast\n cast<S>(type: string): ODataModel<S> {\n const resource = this.resource();\n if (!(resource instanceof ODataEntityResource))\n throw new Error(\n `Can't cast to derived model without ODataEntityResource`\n );\n\n return resource\n .cast<S>(type)\n .asModel(this.toEntity(INCLUDE_DEEP), { annots: this.annots() });\n }\n\n fetchNavigationProperty<S>(\n name: keyof T | string,\n responseType: 'model' | 'collection',\n { ...options }: {} & ODataQueryArgumentsOptions<S> = {}\n ): Observable<ODataModel<S> | ODataCollection<S, ODataModel<S>> | null> {\n const nav = this.navigationProperty<S>(\n name\n ) as ODataNavigationPropertyResource<S>;\n nav.query((q) => q.apply(options));\n switch (responseType) {\n case 'model':\n return nav.fetchModel(options);\n case 'collection':\n return nav.fetchCollection(options);\n }\n }\n\n // Get Value\n getValue<P>(\n name: keyof T | string,\n options?: ODataOptions\n ): Observable<P | ODataModel<P> | ODataCollection<P, ODataModel<P>> | null> {\n const field = this._meta.field(name);\n if (field === undefined || field.navigation)\n throw Error(`Can't find property ${name}`);\n\n let value = (this as any)[name] as\n | P\n | ODataModel<P>\n | ODataCollection<P, ODataModel<P>>;\n if (value === undefined) {\n const prop = field.resourceFactory(\n this.resource()\n ) as ODataPropertyResource<P>;\n return field.collection\n ? prop\n .fetchCollection(options)\n .pipe(tap((c) => this.assign({ [name]: c }, { silent: true })))\n : field.isStructuredType()\n ? prop\n .fetchModel(options)\n .pipe(tap((c) => this.assign({ [name]: c }, { silent: true })))\n : prop\n .fetchProperty(options)\n .pipe(tap((c) => this.assign({ [name]: c }, { silent: true })));\n }\n return of(value as P);\n }\n\n // Set Reference\n setReference<N>(\n name: keyof T | string,\n model: ODataModel<N> | ODataCollection<N, ODataModel<N>> | null,\n options?: ODataOptions\n ): Observable<this> {\n const reference = (\n this.navigationProperty<N>(name) as ODataNavigationPropertyResource<N>\n ).reference();\n\n const etag = this.annots().etag;\n let obs$ = NEVER as Observable<any>;\n if (model instanceof ODataModel) {\n obs$ = reference.set(\n model._meta.entityResource(model) as ODataEntityResource<N>,\n { etag, ...options }\n );\n } else if (model instanceof ODataCollection) {\n obs$ = forkJoin(\n model\n .models()\n .map((m) =>\n reference.add(\n m._meta.entityResource(m) as ODataEntityResource<N>,\n options\n )\n )\n );\n } else if (model === null) {\n obs$ = reference.unset({ etag, ...options });\n }\n this.events$.emit(\n new ODataModelEvent('request', {\n model: this,\n options: { observable: obs$ },\n })\n );\n return obs$.pipe(\n map((model) => {\n this.assign({ [name]: model });\n this.events$.emit(new ODataModelEvent('sync', { model: this }));\n return this;\n })\n );\n }\n\n getReference<P>(\n name: keyof T | string\n ): ODataModel<P> | ODataCollection<P, ODataModel<P>> {\n const field = this._meta.field(name);\n if (field === undefined || !field.navigation)\n throw Error(`Can't find navigation property ${name}`);\n\n let model = (this as any)[name] as\n | ODataModel<P>\n | ODataCollection<P, ODataModel<P>>;\n if (model === undefined) {\n const value = field.collection ? [] : this.referenced(field);\n model = field.modelCollectionFactory<T, P>({ parent: this, value });\n (this as any)[name] = model;\n }\n return model;\n }\n\n // Model functions\n equals(other: ODataModel<T>) {\n const thisKey = this.key();\n const otherKey = other.key();\n return (\n this === other ||\n (typeof this === typeof other &&\n ((<any>this)[this._meta.cid] === (<any>other)[this._meta.cid] ||\n (thisKey !== undefined &&\n otherKey !== undefined &&\n Types.isEqual(thisKey, otherKey))))\n );\n }\n\n get [Symbol.toStringTag]() {\n return 'Model';\n }\n\n collection() {\n return this._parent !== null &&\n ODataModelOptions.isCollection(this._parent[0])\n ? (this._parent[0] as ODataCollection<T, ODataModel<T>>)\n : undefined;\n }\n\n next(): ODataModel<T> | undefined {\n return this.collection()?.next(this);\n }\n\n prev(): ODataModel<T> | undefined {\n return this.collection()?.prev(this);\n }\n}\n\nexport const RESERVED_FIELD_NAMES = Object.getOwnPropertyNames(\n ODataModel.prototype\n);\n","import { HttpEvent, HttpEventType } from '@angular/common/http';\nimport { NEVER, Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { ODataCache, ODataInMemoryCache } from './cache/index';\nimport { DEFAULT_VERSION } from './constants';\nimport {\n ModelOptions,\n ODataCollection,\n ODataModel,\n ODataModelOptions,\n} from './models/index';\nimport { ODataApiOptions } from './options';\nimport {\n ODataActionResource,\n ODataBatchResource,\n ODataEntityResource,\n ODataEntitySetResource,\n ODataFunctionResource,\n ODataMetadataResource,\n ODataNavigationPropertyResource,\n ODataPathSegments,\n ODataQueryOptions,\n ODataRequest,\n ODataResponse,\n ODataSegment,\n ODataSingletonResource,\n} from './resources/index';\nimport {\n EDM_PARSERS,\n ODataCallable,\n ODataEntitySet,\n ODataEnumType,\n ODataSchema,\n ODataStructuredType,\n} from './schema';\nimport { ODataEntityService } from './services/entity';\nimport {\n ApiConfig,\n ApiOptions,\n NONE_PARSER,\n Parser,\n PathSegmentNames,\n} from './types';\n\n/**\n * Api abstraction for consuming OData services.\n */\nexport class ODataApi {\n requester?: (request: ODataRequest<any>) => Observable<any>;\n serviceRootUrl: string;\n metadataUrl: string;\n name?: string;\n version: string;\n default: boolean;\n creation: Date;\n // Options\n options: ODataApiOptions;\n // Cache\n cache!: ODataCache;\n // Error Handler\n errorHandler?: (error: any, caught: Observable<any>) => Observable<never>;\n // Base Parsers\n parsers: { [type: string]: Parser<any> };\n // Schemas\n schemas: ODataSchema[];\n\n constructor(config: ApiConfig) {\n this.serviceRootUrl = config.serviceRootUrl;\n if (this.serviceRootUrl.indexOf('?') != -1)\n throw new Error(\n \"The 'serviceRootUrl' should not contain query string. Please use 'params' to add extra parameters\"\n );\n if (!this.serviceRootUrl.endsWith('/')) this.serviceRootUrl += '/';\n this.metadataUrl = `${this.serviceRootUrl}$metadata`;\n this.name = config.name;\n this.version = config.version || DEFAULT_VERSION;\n this.default = config.default || false;\n this.creation = config.creation || new Date();\n this.options = new ODataApiOptions(\n Object.assign(<ApiOptions>{ version: this.version }, config.options || {})\n );\n\n this.cache = (config.cache as ODataCache) || new ODataInMemoryCache();\n this.errorHandler = config.errorHandler;\n\n this.parsers = config.parsers || EDM_PARSERS;\n\n this.schemas = (config.schemas || []).map(\n (schema) => new ODataSchema(schema, this)\n );\n }\n\n configure(\n settings: {\n requester?: (request: ODataRequest<any>) => Observable<any>;\n } = {}\n ) {\n this.requester = settings.requester;\n this.schemas.forEach((schema) => {\n schema.configure({\n parserForType: (type: string) => this.parserForType(type),\n findOptionsForType: (type: string) => this.findOptionsForType(type),\n });\n });\n }\n\n fromJSON<P, R>(json: {\n segments: ODataSegment[];\n options: { [name: string]: any };\n }): ODataActionResource<P, R> | ODataFunctionResource<P, R>;\n fromJSON<E>(json: {\n segments: ODataSegment[];\n options: { [name: string]: any };\n }):\n | ODataEntityResource<E>\n | ODataEntitySetResource<E>\n | ODataNavigationPropertyResource<E>\n | ODataSingletonResource<E>;\n fromJSON(json: {\n segments: ODataSegment[];\n options: { [name: string]: any };\n }) {\n const segments = new ODataPathSegments(json.segments);\n const query = new ODataQueryOptions(json.options);\n switch (segments.last()?.name as PathSegmentNames) {\n case PathSegmentNames.entitySet:\n if (segments.last()?.hasKey()) {\n return new ODataEntityResource(this, { segments, query });\n } else {\n return new ODataEntitySetResource(this, { segments, query });\n }\n case PathSegmentNames.navigationProperty:\n return new ODataNavigationPropertyResource(this, { segments, query });\n case PathSegmentNames.singleton:\n return new ODataSingletonResource(this, { segments, query });\n case PathSegmentNames.action:\n return new ODataActionResource(this, { segments, query });\n case PathSegmentNames.function:\n return new ODataFunctionResource(this, { segments, query });\n }\n throw new Error('No Resource for json');\n }\n\n /**\n * Build a metadata resource.\n * @returns ODataMetadataResource\n */\n metadata(): ODataMetadataResource {\n return ODataMetadataResource.factory(this);\n }\n\n /**\n * Build a batch resource.\n * @returns ODataBatchResource\n */\n batch(): ODataBatchResource {\n return ODataBatchResource.factory(this);\n }\n\n /**\n * Build a singleton resource.\n * @param path Name of the singleton\n * @returns\n */\n singleton<T>(path: string) {\n const entitySet = this.findEntitySetByName(path);\n const schema =\n entitySet !== undefined\n ? this.findStructuredTypeForType<T>(entitySet.entityType)\n : undefined;\n return ODataSingletonResource.factory<T>(this, { path, schema });\n }\n\n /**\n * Build an entity set resource.\n * @param path Name of the entity set\n * @returns\n */\n entitySet<T>(path: string): ODataEntitySetResource<T> {\n const entitySet = this.findEntitySetByName(path);\n const schema =\n entitySet !== undefined\n ? this.findStructuredTypeForType<T>(entitySet.entityType)\n : undefined;\n return ODataEntitySetResource.factory<T>(this, { path, schema });\n }\n\n /**\n * Unbound Action\n * @param {string} path?\n * @returns ODataActionResource\n */\n action<P, R>(path: string): ODataActionResource<P, R> {\n const schema = this.findCallableForType<R>(path);\n return ODataActionResource.factory<P, R>(this, { path, schema });\n }\n\n /**\n * Unbound Function\n * @param {string} path?\n * @returns ODataFunctionResource\n */\n function<P, R>(path: string): ODataFunctionResource<P, R> {\n const schema = this.findCallableForType<R>(path);\n return ODataFunctionResource.factory<P, R>(this, { path, schema });\n }\n\n request(req: ODataRequest<any>): Observable<any> {\n let res$ = this.requester !== undefined ? this.requester(req) : NEVER;\n res$ = res$.pipe(\n map((res: HttpEvent<any>) =>\n res.type === HttpEventType.Response\n ? ODataResponse.fromHttpResponse<any>(req, res)\n : res\n )\n );\n\n if (this.errorHandler !== undefined)\n res$ = res$.pipe(catchError(this.errorHandler));\n\n return req.observe === 'response'\n ? this.cache.handleRequest(req, res$)\n : res$;\n }\n\n //# region Find by Type\n // Memoize\n private memo: {\n forType: {\n enum: { [type: string]: ODataEnumType<any> | undefined };\n structured: { [type: string]: ODataStructuredType<any> | undefined };\n callable: { [key: string]: ODataCallable<any> | undefined };\n entitySet: { [type: string]: ODataEntitySet | undefined };\n parser: { [type: string]: Parser<any> };\n options: { [type: string]: ODataModelOptions<any> | undefined };\n };\n byName: {\n enum: { [type: string]: ODataEnumType<any> | undefined };\n structured: { [type: string]: ODataStructuredType<any> | undefined };\n callable: { [key: string]: ODataCallable<any> | undefined };\n entitySet: { [type: string]: ODataEntitySet | undefined };\n };\n } = {\n forType: {\n enum: {},\n structured: {},\n callable: {},\n entitySet: {},\n parser: {},\n options: {},\n },\n byName: { enum: {}, structured: {}, callable: {}, entitySet: {} },\n };\n\n private findSchemaForType(type: string) {\n const schemas = this.schemas.filter((s) => s.isNamespaceOf(type));\n if (schemas.length === 0) return undefined;\n if (schemas.length === 1) return schemas[0];\n return schemas\n .sort((s1, s2) => s1.namespace.length - s2.namespace.length)\n .pop();\n }\n\n public findEnumTypeForType<T>(type: string) {\n if (!(type in this.memo.forType.enum))\n this.memo.forType.enum[type] =\n this.findSchemaForType(type)?.findEnumTypeForType<T>(type);\n return this.memo.forType.enum[type] as ODataEnumType<T> | undefined;\n }\n\n public findStructuredTypeForType<T>(type: string) {\n if (!(type in this.memo.forType.structured))\n this.memo.forType.structured[type] =\n this.findSchemaForType(type)?.findStructuredTypeForType<T>(type);\n return this.memo.forType.structured[type] as\n | ODataStructuredType<T>\n | undefined;\n }\n\n public findCallableForType<T>(type: string, bindingType?: string) {\n const key = bindingType !== undefined ? `${bindingType}/${type}` : type;\n if (!(key in this.memo.forType.callable))\n this.memo.forType.callable[key] = this.findSchemaForType(\n type\n )?.findCallableForType<T>(type, bindingType);\n return this.memo.forType.callable[key] as ODataCallable<T> | undefined;\n }\n\n public findEntitySetForType(type: string) {\n if (!(type in this.memo.forType.entitySet))\n this.memo.forType.entitySet[type] =\n this.findSchemaForType(type)?.findEntitySetForType(type);\n return this.memo.forType.entitySet[type] as ODataEntitySet | undefined;\n }\n\n public findModelForType(type: string) {\n return this.findStructuredTypeForType<any>(type)?.model;\n }\n\n public modelForType(type: string) {\n let Model = this.findModelForType(type);\n if (Model === undefined) {\n // Build Ad-hoc model\n let schema = this.findStructuredTypeForType<any>(type);\n if (schema === undefined) throw Error(`No schema for ${type}`);\n Model = class extends ODataModel<any> {} as typeof ODataModel;\n // Build Meta\n Model.buildMeta({ schema });\n // Configure\n Model.meta.configure({\n findOptionsForType: (type: string) => this.findOptionsForType(type),\n options: this.options,\n });\n // Store New Model for next time\n schema.model = Model;\n }\n return Model;\n }\n\n public findCollectionForType(type: string) {\n return this.findStructuredTypeForType<any>(type)?.collection;\n }\n\n public collectionForType(type: string) {\n let Collection = this.findCollectionForType(type);\n if (Collection === undefined) {\n let schema = this.findStructuredTypeForType<any>(type);\n if (schema === undefined) throw Error('');\n Collection = class extends ODataCollection<\n any,\n ODataModel<any>\n > {} as typeof ODataCollection;\n Collection.model = this.modelForType(type);\n // Store New Collection for next time\n schema.collection = Collection;\n }\n return Collection;\n }\n\n public findServiceForType(type: string) {\n return this.findEntitySetForType(type)?.service as\n | typeof ODataEntityService\n | undefined;\n }\n\n public findEntitySetForEntityType(entityType: string) {\n if (!(entityType in this.memo.forType.entitySet))\n this.memo.forType.entitySet[entityType] = this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.entitySets],\n <ODataEntitySet[]>[]\n )\n .find((e) => e.entityType === entityType);\n return this.memo.forType.entitySet[entityType] as\n | ODataEntitySet\n | undefined;\n }\n\n public findServiceForEntityType(entityType: string) {\n return this.findEntitySetForEntityType(entityType)?.service as\n | typeof ODataEntityService\n | undefined;\n }\n\n public findEnumTypeByName<T>(name: string) {\n if (!(name in this.memo.byName.enum))\n this.memo.byName.enum[name] = this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.enums],\n <ODataEnumType<T>[]>[]\n )\n .find((e) => e.name === name);\n return this.memo.byName.enum[name] as ODataEnumType<T> | undefined;\n }\n\n public findStructuredTypeByName<T>(name: string) {\n if (!(name in this.memo.byName.structured))\n this.memo.byName.structured[name] = this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.entities],\n <ODataStructuredType<T>[]>[]\n )\n .find((e) => e.name === name);\n return this.memo.byName.structured[name] as\n | ODataStructuredType<T>\n | undefined;\n }\n\n public findCallableByName<T>(name: string, bindingType?: string) {\n const key = bindingType !== undefined ? `${bindingType}/${name}` : name;\n if (!(key in this.memo.byName.callable))\n this.memo.byName.callable[key] = this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.callables],\n <ODataCallable<T>[]>[]\n )\n .find(\n (c) =>\n c.name === name &&\n (bindingType === undefined || c.binding()?.type === bindingType)\n );\n return this.memo.byName.callable[key] as ODataCallable<T> | undefined;\n }\n\n public findEntitySetByName(name: string) {\n if (!(name in this.memo.byName.entitySet))\n this.memo.byName.entitySet[name] = this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.entitySets],\n <ODataEntitySet[]>[]\n )\n .find((e) => e.name === name);\n return this.memo.byName.entitySet[name] as ODataEntitySet | undefined;\n }\n\n public findModelByName(name: string) {\n return this.findStructuredTypeByName<any>(name)?.model as\n | typeof ODataModel\n | undefined;\n }\n\n public findCollectionByName(name: string) {\n return this.findStructuredTypeByName<any>(name)?.collection as\n | typeof ODataCollection\n | undefined;\n }\n\n public findServiceByName(name: string) {\n return this.findEntitySetByName(name)?.service as\n | typeof ODataEntityService\n | undefined;\n }\n\n public parserForType<T>(type: string, bindingType?: string) {\n const key = bindingType !== undefined ? `${bindingType}/${type}` : type;\n if (!(key in this.memo.forType.parser)) {\n if (type in this.parsers) {\n // Edm, Base Parsers\n this.memo.forType.parser[key] = this.parsers[type] as Parser<T>;\n } else if (!type.startsWith('Edm.')) {\n // EnumType, ComplexType and EntityType Parsers\n let value =\n this.findCallableForType<T>(type, bindingType) ||\n this.findEnumTypeForType<T>(type) ||\n this.findStructuredTypeForType<T>(type);\n this.memo.forType.parser[key] = value?.parser as Parser<T>;\n } else {\n // None Parser\n this.memo.forType.parser[key] = NONE_PARSER;\n }\n }\n return this.memo.forType.parser[key] as Parser<T>;\n }\n\n public findOptionsForType<T>(type: string) {\n // Strucutred Options\n if (!(type in this.memo.forType.options)) {\n let st = this.findStructuredTypeForType<T>(type);\n this.memo.forType.options[type] =\n st !== undefined && st.model !== undefined && st.model?.meta !== null\n ? st.model.meta\n : undefined;\n }\n return this.memo.forType.options[type] as ODataModelOptions<T> | undefined;\n }\n}\n","import { Observable } from 'rxjs';\nimport { ODataApi } from './api';\nimport { ODataCollection, ODataModel } from './models';\nimport { ODataRequest } from './resources';\nimport {\n ODataCallable,\n ODataEntitySet,\n ODataEnumType,\n ODataStructuredType,\n} from './schema';\nimport { ODataEntityService } from './services/entity';\nimport { ApiConfig, Parser } from './types';\n\nexport class ODataSettings {\n apis: ODataApi[];\n constructor(...configs: ApiConfig[]) {\n this.apis = configs.map((config) => new ODataApi(config));\n if (this.apis.length > 1) {\n if (this.apis.some((c) => c.name === undefined))\n throw new Error('Multiple APIs: Needs configuration names');\n if (this.apis.filter((c) => c.default).length > 1)\n throw new Error('Multiple APIs: Needs only one default api');\n }\n // If not default setup first config as default api\n if (this.apis.every((c) => !c.default)) this.apis[0].default = true;\n }\n\n configure(settings: {\n requester?: (request: ODataRequest<any>) => Observable<any>;\n }) {\n this.apis.forEach((api) => api.configure(settings));\n }\n\n public defaultApi() {\n return this.apis.find((c) => c.default) as ODataApi;\n }\n public findApiByName(name: string) {\n return this.apis.find((c) => c.name === name);\n }\n public apiByName(name: string) {\n const api = this.findApiByName(name);\n if (api === undefined) throw new Error(`No API for name: ${name}`);\n return api;\n }\n public findApiForTypes(types: string[]) {\n return this.apis.find((c) =>\n c.schemas.some((s) => types.some((type) => s.isNamespaceOf(type)))\n );\n }\n public findApiForType(type: string) {\n return this.findApiForTypes([type]);\n }\n public apiForType(type: string) {\n const api = this.findApiForType(type);\n if (api === undefined) throw new Error(`No API for type: ${type}`);\n return api;\n }\n\n //#region Configs shortcuts\n public enumTypeForType<T>(type: string) {\n let values = this.apis\n .map((api) => api.findEnumTypeForType<T>(type))\n .filter((e) => e);\n if (values.length === 0) throw Error(`No Enum for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataEnumType<T>;\n }\n\n public structuredTypeForType<T>(type: string) {\n let values = this.apis\n .map((api) => api.findStructuredTypeForType<T>(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Structured for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataStructuredType<T>;\n }\n\n public callableForType<T>(type: string, bindingType?: string) {\n let values = this.apis\n .map((api) => api.findCallableForType<T>(type, bindingType))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Callable for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataCallable<T>;\n }\n\n public entitySetForType(type: string) {\n let values = this.apis\n .map((api) => api.findEntitySetForType(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No EntitySet for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataEntitySet;\n }\n\n public parserForType<T>(type: string) {\n let values = this.apis\n .map((api) => api.parserForType<T>(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Parser for type ${type} was found`);\n if (!type.startsWith('Edm.') && values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as Parser<T>;\n }\n\n public modelForType(type: string) {\n let values = this.apis\n .map((api) => api.findModelForType(type))\n .filter((e) => e);\n if (values.length === 0) throw Error(`No Model for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataModel;\n }\n\n public collectionForType(type: string) {\n let values = this.apis\n .map((api) => api.findCollectionForType(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Collection for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataCollection;\n }\n\n public serviceForType(type: string) {\n let values = this.apis\n .map((api) => api.findServiceForType(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Service for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataEntityService;\n }\n public serviceForEntityType(type: string) {\n let values = this.apis\n .map((api) => api.findServiceForEntityType(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Service for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataEntityService;\n }\n\n public enumTypeByName<T>(name: string) {\n let values = this.apis\n .map((api) => api.findEnumTypeByName<T>(name))\n .filter((e) => e);\n if (values.length === 0) throw Error(`No Enum for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataEnumType<T>;\n }\n\n public structuredTypeByName<T>(name: string) {\n let values = this.apis\n .map((api) => api.findStructuredTypeByName<T>(name))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Structured for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple Structured: More than one value was found');\n return values[0] as ODataStructuredType<T>;\n }\n\n public callableByName<T>(name: string, bindingType?: string) {\n let values = this.apis\n .map((api) => api.findCallableByName<T>(name, bindingType))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Callable for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple Callable: More than one value was found');\n return values[0] as ODataCallable<T>;\n }\n\n public entitySetByName(name: string) {\n let values = this.apis\n .map((api) => api.findEntitySetByName(name))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No EntitySet for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple EntitySet: More than one value was found');\n return values[0] as ODataEntitySet;\n }\n\n public modelByName(name: string) {\n let values = this.apis\n .map((api) => api.findModelByName(name))\n .filter((e) => e);\n if (values.length === 0) throw Error(`No Model for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataModel;\n }\n\n public collectionByName(name: string) {\n let values = this.apis\n .map((api) => api.findCollectionByName(name))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Collection for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataCollection;\n }\n public serviceByName(name: string) {\n let values = this.apis\n .map((api) => api.findServiceByName(name))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Service for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataEntityService;\n }\n //#endregion\n}\n","import {\n HttpClient,\n HttpEvent,\n HttpHeaders,\n HttpParams,\n HttpResponse,\n} from '@angular/common/http';\nimport { Injectable, Injector } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from './api';\nimport { ODataCollection, ODataModel } from './models/index';\nimport {\n ODataActionResource,\n ODataBatchResource,\n ODataEntityResource,\n ODataEntitySetResource,\n ODataFunctionResource,\n ODataMetadataResource,\n ODataNavigationPropertyResource,\n ODataRequest,\n ODataResource,\n ODataResponse,\n ODataSegment,\n ODataSingletonResource,\n} from './resources/index';\nimport { ODataEntityService } from './services/entity';\nimport { ODataSettings } from './settings';\n\nfunction addBody<T>(\n options: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n },\n body: T | null\n): any {\n return {\n body,\n etag: options.etag,\n apiName: options.apiName,\n fetchPolicy: options.fetchPolicy,\n headers: options.headers,\n observe: options.observe,\n params: options.params,\n reportProgress: options.reportProgress,\n responseType: options.responseType,\n withCredentials: options.withCredentials,\n };\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ODataClient {\n constructor(\n private http: HttpClient,\n private settings: ODataSettings,\n private injector: Injector\n ) {\n this.settings.configure({\n requester: (req: ODataRequest<any>): Observable<any> =>\n this.http.request(req.method, `${req.url}`, {\n body: req.body,\n headers: req.headers,\n observe: req.observe,\n params: req.params,\n reportProgress: req.reportProgress,\n responseType: req.responseType,\n withCredentials: req.withCredentials,\n }),\n });\n }\n\n //#region Resolve Building Blocks\n /**\n * Resolve the api for the given value.\n * Where value is: string type or an string name or an instance of resource.\n * @param value The value to resolve.\n * @returns The api for the value.\n */\n apiFor(value?: ODataResource<any> | string): ODataApi {\n let api: ODataApi | undefined = undefined;\n if (value instanceof ODataResource)\n api = this.settings.findApiForTypes(value.types());\n else if (typeof value === 'string')\n api =\n this.settings.findApiByName(value) ||\n this.settings.findApiForType(value);\n return api || this.settings.defaultApi();\n }\n\n /**\n * Resolve the parser for the given string type.\n * @param type The string type of the parser.\n * @returns The parser for the given type.\n */\n parserForType<T>(type: string) {\n return this.settings.parserForType<T>(type);\n }\n\n /**\n * Resolve the enum type for the given string type.\n * @param type The string type of the enum type.\n * @returns The enum type for the given type.\n */\n enumTypeForType<T>(type: string) {\n return this.settings.enumTypeForType<T>(type);\n }\n\n /**\n * Resolve the structured type for the given string type.\n * @param type The string type of the structured type.\n * @returns The structured type for the given type.\n */\n structuredTypeForType<T>(type: string) {\n return this.settings.structuredTypeForType<T>(type);\n }\n\n /**\n * Resolve the callable for the given string type.\n * @param type The string type of the callable.\n * @returns The callable for the given type.\n */\n callableForType<T>(type: string) {\n return this.settings.callableForType<T>(type);\n }\n\n /**\n * Resolve the entity set for the given string type.\n * @param type The string type of the entity set.\n * @returns The entity set for the given type.\n */\n entitySetForType(type: string) {\n return this.settings.entitySetForType(type);\n }\n\n /**\n * Resolve the model for the given string type.\n * @param type The string type of the model.\n * @returns The model for the given type.\n */\n modelForType(type: string): typeof ODataModel {\n return this.settings.modelForType(type);\n }\n\n /**\n * Resolve the collection for the given string type.\n * @param type The string type of the collection.\n * @returns The collection for the given type.\n */\n collectionForType(type: string): typeof ODataCollection {\n return this.settings.collectionForType(type);\n }\n\n /**\n * Resolve the service for the given string type.\n * @param type The string type of the service.\n * @returns The service for the given type.\n */\n serviceForType(type: string): ODataEntityService<any> {\n return this.injector.get(this.settings.serviceForType(type));\n }\n\n /**\n * Resolve the service for the given string entity type.\n * @param type The string entity type binding to the service.\n * @returns The service for the given entity type.\n */\n serviceForEntityType(type: string): ODataEntityService<any> {\n return this.injector.get(this.settings.serviceForEntityType(type));\n }\n\n enumTypeByName<T>(name: string) {\n return this.settings.enumTypeByName<T>(name);\n }\n structuredTypeByName<T>(name: string) {\n return this.settings.structuredTypeByName<T>(name);\n }\n callableByName<T>(name: string) {\n return this.settings.callableByName<T>(name);\n }\n entitySetByName(name: string) {\n return this.settings.entitySetByName(name);\n }\n modelByName(name: string): typeof ODataModel {\n return this.settings.modelByName(name);\n }\n collectionByName(name: string): typeof ODataCollection {\n return this.settings.collectionByName(name);\n }\n serviceByName(name: string): ODataEntityService<any> {\n return this.injector.get(this.settings.serviceByName(name));\n }\n //#endregion\n\n //#region API Resource Proxy Methods\n fromJSON<E>(\n json: { segments: ODataSegment[]; options: { [name: string]: any } },\n apiNameOrType?: string\n ):\n | ODataEntityResource<E>\n | ODataEntitySetResource<E>\n | ODataNavigationPropertyResource<E>\n | ODataSingletonResource<E>;\n fromJSON(\n json: { segments: ODataSegment[]; options: { [name: string]: any } },\n apiNameOrType?: string\n ) {\n return this.apiFor(apiNameOrType).fromJSON<any>(json);\n }\n\n // Requests\n /**\n * Build a resource for the metadata.\n * @param apiName The name of the API.\n * @returns The metadata resource.\n */\n metadata(apiName?: string): ODataMetadataResource {\n return this.apiFor(apiName).metadata();\n }\n\n /**\n * Build a resource for the batch.\n * @param apiName The name of the API.\n * @returns The batch resource.\n */\n batch(apiName?: string): ODataBatchResource {\n return this.apiFor(apiName).batch();\n }\n\n /**\n * Build a resource for the singleton.\n * @param path The full path to the singleton.\n * @param apiNameOrType The name of the API or the type of the singleton.\n * @returns The singleton resource.\n */\n singleton<T>(path: string, apiNameOrType?: string) {\n return this.apiFor(apiNameOrType).singleton<T>(path);\n }\n\n /**\n * Build a resource for the entity set.\n * @param path The full path to the entity set.\n * @param apiNameOrType The name of the API or the type of the entity set.\n * @returns The entity set resource.\n */\n entitySet<T>(\n path: string,\n apiNameOrType?: string\n ): ODataEntitySetResource<T> {\n return this.apiFor(apiNameOrType).entitySet<T>(path);\n }\n\n /**\n * Build a resource for unbound action.\n * @param path The full path to the action.\n * @param apiNameOrType The name of the API or the type of the entity.\n * @returns The unbound action resource.\n */\n action<P, R>(\n path: string,\n apiNameOrType?: string\n ): ODataActionResource<P, R> {\n return this.apiFor(apiNameOrType).action<P, R>(path);\n }\n\n /**\n * Build a resource for unbound function.\n * @param path The full path to the function.\n * @param apiNameOrType The name of the API or the type of the callable.\n * @returns The unbound function resource.\n */\n function<P, R>(\n path: string,\n apiNameOrType?: string\n ): ODataFunctionResource<P, R> {\n return this.apiFor(apiNameOrType).function<P, R>(path);\n }\n //#endregion\n\n // Request headers, get, post, put, patch... etc\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n params?: HttpParams | { [param: string]: string | string[] };\n observe: 'events';\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n reportProgress?: boolean;\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<any>>;\n\n request<R>(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n reportProgress?: boolean;\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<R>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n reportProgress?: boolean;\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n request<R>(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n reportProgress?: boolean;\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<R>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n reportProgress?: boolean;\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n request<R>(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n reportProgress?: boolean;\n withCredentials?: boolean;\n }\n ): Observable<R>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options?: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n params?: HttpParams | { [param: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n }\n ): Observable<any>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n }\n ): Observable<any> {\n let api = options.apiName\n ? this.settings.apiByName(options.apiName)\n : resource.api;\n if (!api)\n throw new Error(\n `The types: '[${resource\n .types()\n .join(', ')}]' does not belongs to any known configuration`\n );\n\n const request = new ODataRequest({\n method,\n api,\n resource,\n body: options.body,\n observe: options.observe === 'events' ? 'events' : 'response',\n etag: options.etag,\n headers: options.headers,\n reportProgress: options.reportProgress,\n params: options.params,\n responseType: options.responseType,\n fetchPolicy: options.fetchPolicy,\n withCredentials: options.withCredentials,\n });\n\n return api\n .request(request)\n .pipe(\n map((res: any) =>\n options.observe === undefined || options.observe === 'body'\n ? res.body\n : res\n )\n );\n }\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n delete<T>(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n delete<T>(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n delete<T>(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n delete(\n resource: ODataResource<any>,\n options: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('DELETE', resource, addBody<any>(options, null));\n }\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n get<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n get<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n get(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n get<T>(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('GET', resource, options as any);\n }\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n head<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n head<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n head(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n head<T>(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('HEAD', resource, options as any);\n }\n\n jsonp(\n resource: ODataResource<any>,\n callbackParam: string\n ): Observable<Object>;\n\n jsonp<T>(resource: ODataResource<any>, callbackParam: string): Observable<T>;\n\n jsonp<T>(resource: ODataResource<any>, callbackParam: string): Observable<T> {\n return this.request<any>('JSONP', resource, {\n body: null,\n params: new HttpParams().append(callbackParam, 'JSONP_CALLBACK'),\n observe: 'body',\n responseType: 'json',\n });\n }\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n options<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n options<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n options(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n options<T>(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('OPTIONS', resource, options as any);\n }\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n patch<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n patch<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n patch<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('PATCH', resource, addBody(options, body));\n }\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n post<T>(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n post<T>(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n post<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('POST', resource, addBody(options, body));\n }\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n put<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n put<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n put<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('PUT', resource, addBody(options, body));\n }\n}\n","import { ApiConfig } from './types';\nimport { InjectionToken } from '@angular/core';\n\nexport const ODATA_CONFIGURATIONS = new InjectionToken<ApiConfig>(\n 'odata.configuraions'\n);\n","import { Observable } from 'rxjs';\nimport { ODataClient } from '../client';\nimport {\n ODataActionResource,\n ODataEntities,\n ODataEntity,\n ODataFunctionResource,\n ODataNavigationPropertyResource,\n ODataProperty,\n ODataQueryArgumentsOptions,\n} from '../resources';\n\nexport abstract class ODataBaseService {\n constructor(\n protected client: ODataClient,\n protected name: string,\n protected apiNameOrEntityType?: string\n ) {}\n\n get api() {\n return this.client.apiFor(this.apiNameOrEntityType);\n }\n\n protected callFunction<P, R>(\n params: P | null,\n resource: ODataFunctionResource<P, R>,\n responseType: 'entity',\n options?: ODataQueryArgumentsOptions<R>\n ): Observable<ODataEntity<R>>;\n protected callFunction<P, R>(\n params: P | null,\n resource: ODataFunctionResource<P, R>,\n responseType: 'entities',\n options?: ODataQueryArgumentsOptions<R>\n ): Observable<ODataEntities<R>>;\n protected callFunction<P, R>(\n params: P | null,\n resource: ODataFunctionResource<P, R>,\n responseType: 'property',\n options?: ODataQueryArgumentsOptions<R>\n ): Observable<ODataProperty<R>>;\n protected callFunction<P, R>(\n params: P | null,\n resource: ODataFunctionResource<P, R>,\n responseType: 'none',\n options?: ODataQueryArgumentsOptions<R>\n ): Observable<null>;\n protected callFunction<P, R>(\n params: P | null,\n resource: ODataFunctionResource<P, R>,\n responseType: 'property' | 'entity' | 'entities' | 'none',\n options: ODataQueryArgumentsOptions<R> = {}\n ): Observable<any> {\n resource.query((q) => q.apply(options));\n return resource.call(params, {\n responseType: responseType as any,\n ...options,\n });\n }\n\n protected callAction<P, R>(\n params: P | null,\n resource: ODataActionResource<P, R>,\n responseType: 'entity',\n options?: ODataQueryArgumentsOptions<R>\n ): Observable<ODataEntity<R>>;\n protected callAction<P, R>(\n params: P | null,\n resource: ODataActionResource<P, R>,\n responseType: 'entities',\n options?: ODataQueryArgumentsOptions<R>\n ): Observable<ODataEntities<R>>;\n protected callAction<P, R>(\n params: P | null,\n resource: ODataActionResource<P, R>,\n responseType: 'property',\n options?: ODataQueryArgumentsOptions<R>\n ): Observable<ODataProperty<R>>;\n protected callAction<P, R>(\n params: P | null,\n resource: ODataActionResource<P, R>,\n responseType: 'none',\n options?: ODataQueryArgumentsOptions<R>\n ): Observable<null>;\n protected callAction<P, R>(\n params: P | null,\n resource: ODataActionResource<P, R>,\n responseType: 'property' | 'entity' | 'entities' | 'none',\n options: ODataQueryArgumentsOptions<R> = {}\n ): Observable<any> {\n resource.query((q) => q.apply(options));\n return resource.call(params, {\n responseType: responseType as any,\n ...options,\n });\n }\n\n protected fetchNavigationProperty<S>(\n resource: ODataNavigationPropertyResource<S>,\n responseType: 'entity',\n options?: ODataQueryArgumentsOptions<S>\n ): Observable<ODataEntity<S>>;\n protected fetchNavigationProperty<S>(\n resource: ODataNavigationPropertyResource<S>,\n responseType: 'entities',\n options?: ODataQueryArgumentsOptions<S>\n ): Observable<ODataEntities<S>>;\n protected fetchNavigationProperty<S>(\n resource: ODataNavigationPropertyResource<S>,\n responseType: 'entity' | 'entities',\n options: ODataQueryArgumentsOptions<S> = {}\n ): Observable<any> {\n resource.query((q) => q.apply(options));\n return resource.fetch({ responseType: responseType as any, ...options });\n }\n}\n","import { ODataModel } from '../models/model';\nimport { EntityKey, ODataResource } from '../resources';\nimport { ODataBaseService } from './base';\n\nexport abstract class ODataEntityService<T> extends ODataBaseService {\n public abstract entity(key?: EntityKey<T>): ODataResource<T>;\n public abstract attach<M extends ODataModel<T>>(value: M): void;\n\n /**\n * The schema for the structured type.\n */\n get structuredTypeSchema() {\n return this.apiNameOrEntityType !== undefined\n ? this.api.findStructuredTypeForType<T>(this.apiNameOrEntityType)\n : undefined;\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { ODataCollection } from '../models/collection';\nimport { ODataModel } from '../models/model';\nimport {\n EntityKey,\n ODataEntities,\n ODataEntity,\n ODataEntityResource,\n ODataEntitySetResource,\n ODataOptions,\n} from '../resources';\nimport { ODataEntityService } from './entity';\n\nexport class ODataEntitySetService<T> extends ODataEntityService<T> {\n /**\n * Get the entity set resource for this service.\n */\n public entities(): ODataEntitySetResource<T> {\n return this.client.entitySet<T>(this.name, this.apiNameOrEntityType);\n }\n\n /**\n * Get the entity resource for this service.\n * @param key The entity key.\n */\n public entity(key?: EntityKey<T>): ODataEntityResource<T> {\n return this.entities().entity(key);\n }\n\n /**\n * Attach an existing model to this service.\n * @param model The model to attach.\n */\n public attach<M extends ODataModel<T>>(model: M): void;\n public attach<C extends ODataCollection<T, ODataModel<T>>>(model: C): void;\n public attach(model: any): void {\n if (model instanceof ODataModel) {\n model.attach(this.entities().entity());\n } else if (model instanceof ODataCollection) {\n model.attach(this.entities());\n }\n }\n\n /**\n * The schema for the entity set.\n */\n get entitySetSchema() {\n return this.api.findEntitySetByName(this.name);\n }\n\n /**\n * Get all entities from the entity set.\n * @param options The options for the request.\n */\n public fetchAll(options?: ODataOptions): Observable<T[]> {\n return this.entities().fetchAll(options);\n }\n\n /**\n * Get entities from the entity set.\n * @param withCount Get the count of the entities.\n * @param options The options for the request.\n */\n public fetchMany(\n options?: ODataOptions & { withCount?: boolean }\n ): Observable<ODataEntities<T>> {\n return this.entities().fetch(options);\n }\n\n /**\n * Get an entity from the entity set.\n * @param key The entity key.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public fetchOne(\n key: EntityKey<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n return this.entity(key).fetch(options);\n }\n\n /**\n * Create an entity in the entity set.\n * @param attrs The attributes for the entity.\n * @param options The options for the request.\n */\n public create(\n attrs: Partial<T>,\n options?: ODataOptions\n ): Observable<ODataEntity<T>> {\n return this.entities().create(attrs, options);\n }\n\n /**\n * Update an entity in the entity set.\n * @param key The entity key.\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public update(\n key: EntityKey<T>,\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n const res = this.entity(key);\n if (!res.hasKey()) return throwError('Resource without key');\n return res.update(attrs, options);\n }\n\n /**\n * Patch an entity in the entity set.\n * @param key The entity key.\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public modify(\n key: EntityKey<T>,\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n const res = this.entity(key);\n if (!res.hasKey()) return throwError('Resource without key');\n return res.modify(attrs, options);\n }\n\n /**\n * Delete an entity in the entity set.\n * @param key The entity key.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public destroy(\n key: EntityKey<T>,\n options?: ODataOptions & { etag?: string }\n ) {\n const res = this.entity(key);\n if (!res.hasKey()) return throwError('Resource without key');\n return res.destroy(options);\n }\n\n //#region Shortcuts\n /**\n * Get or create an entity in the entity set.\n * @param key The entity key.\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public fetchOrCreate(\n key: EntityKey<T>,\n attrs: Partial<T>,\n { etag, ...options }: { etag?: string } & ODataOptions = {}\n ): Observable<ODataEntity<T>> {\n return this.fetchOne(key, { etag, ...options }).pipe(\n catchError((error: HttpErrorResponse) => {\n if (error.status === 404) return this.create(attrs, options);\n else return throwError(error);\n })\n );\n }\n\n /**\n * Save an entity in the entity set.\n * @param attrs The attributes for the entity.\n * @param method The method to use.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public save(\n attrs: Partial<T>,\n {\n etag,\n method,\n ...options\n }: {\n etag?: string;\n method?: 'create' | 'update' | 'modify';\n } & ODataOptions = {}\n ) {\n let schema = this.structuredTypeSchema;\n if (method === undefined && schema !== undefined && schema.isCompoundKey())\n return throwError(\n 'Composite key require a specific method, use create/update/patch'\n );\n let key = schema && schema.resolveKey(attrs);\n if (method === undefined) method = key !== undefined ? 'update' : 'create';\n if ((method === 'update' || method === 'modify') && key === undefined)\n return throwError(\"Can't update/patch entity without key\");\n return method === 'create'\n ? this.create(attrs, options)\n : method === 'modify'\n ? this.modify(key, attrs, { etag, ...options })\n : this.update(key, attrs, { etag, ...options });\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport type { ODataModel } from '../models/model';\nimport type {\n ODataEntity,\n ODataOptions,\n ODataSingletonResource,\n} from '../resources';\nimport { ODataEntityService } from './entity';\n\n/**\n * OData Singleton Service\n * www.odata.org/getting-started/advanced-tutorial/#singleton\n */\nexport class ODataSingletonService<T> extends ODataEntityService<T> {\n /**\n * Get the entity resource for this service.\n * @param key The entity key.\n */\n public entity(): ODataSingletonResource<T> {\n return this.client.singleton(this.name, this.apiNameOrEntityType);\n }\n\n /**\n * Attach an existing model to this service.\n * @param model The model to attach.\n */\n public attach<M extends ODataModel<T>>(model: M) {\n model.attach(this.entity());\n }\n\n /**\n * The schema for the singleton.\n */\n get singletonSchema() {\n return this.api.findEntitySetByName(this.name);\n }\n\n /**\n * Update the singleton entity\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public update(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n const res = this.entity();\n return res.update(attrs, options);\n }\n\n /**\n * Patch the singleton entity\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public patch(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n const res = this.entity();\n return res.modify(attrs, options);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ODataClient } from '../client';\nimport { ODataEntitySetService } from './entity-set';\nimport { ODataSingletonService } from './singleton';\n\n@Injectable()\nexport class ODataServiceFactory {\n constructor(protected client: ODataClient) {}\n\n /**\n * Factory method to create an entity set service.\n * @param entitySetName Name of the entity set.\n * @param apiNameOrEntityType Name of the API or the type of the entity.\n */\n entitySet<T>(\n entitySetName: string,\n apiNameOrEntityType?: string\n ): ODataEntitySetService<T> {\n return new (class extends ODataEntitySetService<T> {})(\n this.client,\n entitySetName,\n apiNameOrEntityType\n );\n }\n\n /** Factory method to create a singleton service.\n * @param singletonName Name of the singleton.\n * @param apiNameOrEntityType Name of the API or the type of the entity.\n */\n singleton<T>(\n singletonName: string,\n apiNameOrEntityType?: string\n ): ODataSingletonService<T> {\n return new (class extends ODataSingletonService<T> {})(\n this.client,\n singletonName,\n apiNameOrEntityType\n );\n }\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ODataClient } from './client';\nimport { ODataServiceFactory } from './services/index';\nimport { ODataSettings } from './settings';\nimport { ODATA_CONFIGURATIONS } from './tokens';\nimport { ApiConfig } from './types';\n\nexport function createSettings(configs: ApiConfig[]) {\n return new ODataSettings(...configs);\n}\n\n@NgModule({\n imports: [HttpClientModule],\n providers: [ODataClient, ODataServiceFactory],\n})\nexport class ODataModule {\n public static forRoot(\n ...configs: ApiConfig[]\n ): ModuleWithProviders<ODataModule> {\n return {\n ngModule: ODataModule,\n providers: [\n { provide: ODATA_CONFIGURATIONS, useValue: configs },\n {\n provide: ODataSettings,\n useFactory: createSettings,\n deps: [ODATA_CONFIGURATIONS],\n },\n ODataClient,\n ODataServiceFactory,\n ],\n };\n }\n}\n","/*\n * Public API Surface of angular-odata\n */\n\nexport * from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Field"],"mappings":"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"}
1
+ {"version":3,"file":"angular-odata.mjs","sources":["../../../projects/angular-odata/src/lib/types.ts","../../../projects/angular-odata/src/lib/constants.ts","../../../projects/angular-odata/src/lib/cache/cache.ts","../../../projects/angular-odata/src/lib/cache/memory.ts","../../../projects/angular-odata/src/lib/resources/query/builder.ts","../../../projects/angular-odata/src/lib/utils/dates.ts","../../../projects/angular-odata/src/lib/utils/durations.ts","../../../projects/angular-odata/src/lib/utils/enums.ts","../../../projects/angular-odata/src/lib/utils/types.ts","../../../projects/angular-odata/src/lib/utils/http.ts","../../../projects/angular-odata/src/lib/utils/objects.ts","../../../projects/angular-odata/src/lib/utils/odata.ts","../../../projects/angular-odata/src/lib/utils/strings.ts","../../../projects/angular-odata/src/lib/utils/urls.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/base.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/syntax.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/compute.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/filter.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/orderby.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/search.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/expand.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/select.ts","../../../projects/angular-odata/src/lib/resources/query/handlers.ts","../../../projects/angular-odata/src/lib/resources/query/options.ts","../../../projects/angular-odata/src/lib/resources/path/handlers.ts","../../../projects/angular-odata/src/lib/resources/path/segments.ts","../../../projects/angular-odata/src/lib/resources/request.ts","../../../projects/angular-odata/src/lib/schema/annotation.ts","../../../projects/angular-odata/src/lib/schema/element.ts","../../../projects/angular-odata/src/lib/utils/arraybuffers.ts","../../../projects/angular-odata/src/lib/schema/parsers/edm.ts","../../../projects/angular-odata/src/lib/helper.ts","../../../projects/angular-odata/src/lib/options.ts","../../../projects/angular-odata/src/lib/schema/parsers/enum-type.ts","../../../projects/angular-odata/src/lib/schema/parsers/structured-type.ts","../../../projects/angular-odata/src/lib/schema/parsers/callable.ts","../../../projects/angular-odata/src/lib/schema/callable.ts","../../../projects/angular-odata/src/lib/schema/entity-set.ts","../../../projects/angular-odata/src/lib/schema/entity-container.ts","../../../projects/angular-odata/src/lib/schema/enum-type.ts","../../../projects/angular-odata/src/lib/schema/structured-type.ts","../../../projects/angular-odata/src/lib/schema/schema.ts","../../../projects/angular-odata/src/lib/resources/resource.ts","../../../projects/angular-odata/src/lib/resources/types/action.ts","../../../projects/angular-odata/src/lib/resources/responses/annotations.ts","../../../projects/angular-odata/src/lib/resources/responses/options.ts","../../../projects/angular-odata/src/lib/resources/responses/response.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-function-action.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-annotation.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-structured-type.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-enum-type.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-reference.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-structural-property.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-entity-container.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-entity-set.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-navigation-property-binding.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-schema.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-singleton.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-type-definition.ts","../../../projects/angular-odata/src/lib/resources/responses/metadata.ts","../../../projects/angular-odata/src/lib/resources/types/batch.ts","../../../projects/angular-odata/src/lib/resources/types/count.ts","../../../projects/angular-odata/src/lib/resources/types/function.ts","../../../projects/angular-odata/src/lib/resources/types/media.ts","../../../projects/angular-odata/src/lib/resources/types/value.ts","../../../projects/angular-odata/src/lib/resources/types/property.ts","../../../projects/angular-odata/src/lib/resources/types/reference.ts","../../../projects/angular-odata/src/lib/resources/types/navigation-property.ts","../../../projects/angular-odata/src/lib/resources/types/entity.ts","../../../projects/angular-odata/src/lib/resources/types/entity-set.ts","../../../projects/angular-odata/src/lib/resources/types/metadata.ts","../../../projects/angular-odata/src/lib/resources/types/singleton.ts","../../../projects/angular-odata/src/lib/cache/storage.ts","../../../projects/angular-odata/src/lib/models/options.ts","../../../projects/angular-odata/src/lib/models/collection.ts","../../../projects/angular-odata/src/lib/models/model.ts","../../../projects/angular-odata/src/lib/api.ts","../../../projects/angular-odata/src/lib/settings.ts","../../../projects/angular-odata/src/lib/client.ts","../../../projects/angular-odata/src/lib/tokens.ts","../../../projects/angular-odata/src/lib/services/base.ts","../../../projects/angular-odata/src/lib/services/entity.ts","../../../projects/angular-odata/src/lib/services/entity-set.ts","../../../projects/angular-odata/src/lib/services/singleton.ts","../../../projects/angular-odata/src/lib/services/factory.ts","../../../projects/angular-odata/src/lib/module.ts","../../../projects/angular-odata/src/public-api.ts","../../../projects/angular-odata/src/angular-odata.ts"],"sourcesContent":["import { ODataVersionHelper } from './helper';\nimport { Observable } from 'rxjs';\n\nexport type ODataVersion = '2.0' | '3.0' | '4.0';\nexport type FetchPolicy =\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\nexport type ODataMetadataType = 'minimal' | 'full' | 'none';\nexport type CacheCacheability = 'public' | 'private' | 'no-cache' | 'no-store';\n\nexport enum PathSegmentNames {\n batch = 'batch',\n metadata = 'metadata',\n entitySet = 'entitySet',\n singleton = 'singleton',\n type = 'type',\n property = 'property',\n navigationProperty = 'navigationProperty',\n reference = 'reference',\n value = 'value',\n count = 'count',\n function = 'function',\n action = 'action',\n}\n\nexport enum QueryOptionNames {\n select = 'select',\n expand = 'expand',\n compute = 'compute',\n filter = 'filter',\n search = 'search',\n transform = 'transform',\n orderBy = 'orderBy',\n top = 'top',\n skip = 'skip',\n skiptoken = 'skiptoken',\n format = 'format',\n count = 'count',\n}\n\nexport interface Options {\n version?: ODataVersion;\n stringAsEnum?: boolean;\n}\n\nexport interface ApiOptions extends Options {\n params?: { [param: string]: string | string[] };\n headers?: { [param: string]: string | string[] };\n withCredentials?: boolean;\n //Headers\n accept?: {\n exponentialDecimals?: boolean;\n metadata?: ODataMetadataType;\n ieee754Compatible?: boolean;\n streaming?: boolean;\n };\n etag?: {\n ifMatch?: boolean;\n ifNoneMatch?: boolean;\n };\n prefer?: {\n maxPageSize?: number;\n return?: 'representation' | 'minimal';\n continueOnError?: boolean;\n includeAnnotations?: string;\n };\n stripMetadata?: ODataMetadataType;\n fetchPolicy?: FetchPolicy;\n bodyQueryOptions?: QueryOptionNames[];\n //https://github.com/OData/WebApi/issues/1974\n //https://github.com/OData/WebApi/issues/1647\n deleteRefBy?: 'path' | 'id';\n}\n\nexport interface OptionsHelper extends Options {\n helper: ODataVersionHelper;\n exponentialDecimals?: boolean;\n metadata?: ODataMetadataType;\n ieee754Compatible?: boolean;\n streaming?: boolean;\n}\n\nexport interface ResponseOptions extends OptionsHelper {\n cacheability?: CacheCacheability;\n maxAge?: number;\n}\n\nexport interface StructuredTypeFieldOptions extends OptionsHelper {\n field: StructuredTypeFieldConfig;\n}\n\nexport interface Parser<T> {\n // Deserialize value/s from request body.\n deserialize(\n value: any,\n options?: OptionsHelper | StructuredTypeFieldOptions\n ): T;\n // Serialize value/s for request body.\n serialize(\n value: any,\n options?: OptionsHelper | StructuredTypeFieldOptions\n ): any;\n //Encode value/s for URL parameter or query-string.\n encode(value: any, options?: OptionsHelper | StructuredTypeFieldOptions): any;\n}\n\nexport const NONE_PARSER = {\n deserialize: (value: any) => value,\n serialize: (value: any) => value,\n encode: (value: any) => value,\n} as Parser<any>;\n\nexport interface Cache {\n put<T>(key: string, payload: T, ...opts: any[]): void;\n get<T>(key: string, ...opts: any[]): T | undefined;\n}\n\n//#region Configs\nexport type ApiConfig = {\n serviceRootUrl: string;\n name?: string;\n version?: ODataVersion;\n default?: boolean;\n creation?: Date;\n cache?: Cache;\n errorHandler?: (error: any, caught: Observable<any>) => Observable<never>;\n options?: ApiOptions;\n parsers?: { [type: string]: Parser<any> };\n schemas?: SchemaConfig[];\n};\nexport type AnnotationConfig = {\n term: string;\n string?: string;\n bool?: boolean;\n int?: number;\n permissions?: string[];\n properties?: string[];\n};\nexport type SchemaConfig = {\n namespace: string;\n alias?: string;\n annotations?: AnnotationConfig[];\n enums?: EnumTypeConfig<any>[];\n entities?: StructuredTypeConfig<any>[];\n callables?: CallableConfig[];\n containers?: EntityContainerConfig[];\n};\n\nexport type EntityContainerConfig = {\n name: string;\n annotations?: AnnotationConfig[];\n entitySets?: EntitySetConfig[];\n};\n\nexport type EnumTypeFieldConfig = {\n value: number;\n annotations?: AnnotationConfig[];\n};\n\nexport type EnumTypeConfig<T> = {\n name: string;\n flags?: boolean;\n annotations?: AnnotationConfig[];\n members: { [name: string]: number } | { [value: number]: string };\n fields: { [member: string]: EnumTypeFieldConfig };\n};\n\nexport type StructuredTypeFieldConfig = {\n type: string;\n default?: any;\n maxLength?: number;\n key?: boolean;\n collection?: boolean;\n nullable?: boolean;\n navigation?: boolean;\n precision?: number;\n annotations?: AnnotationConfig[];\n scale?: number;\n referentials?: { property: string; referencedProperty: string }[];\n referential?: string;\n referenced?: string;\n};\n\nexport type StructuredTypeConfig<T> = {\n name: string;\n base?: string;\n open?: boolean;\n model?: { new (...params: any[]): any };\n collection?: { new (...params: any[]): any };\n annotations?: AnnotationConfig[];\n keys?: { name: string; alias?: string }[];\n fields: { [P in keyof T]?: StructuredTypeFieldConfig };\n};\n\nexport type Parameter = {\n type: string;\n nullable?: boolean;\n collection?: boolean;\n};\n\nexport type CallableConfig = {\n name: string;\n entitySetPath?: string;\n bound?: boolean;\n composable?: boolean;\n parameters?: { [name: string]: Parameter };\n return?: { type: string; collection?: boolean };\n};\nexport type EntitySetConfig = {\n name: string;\n entityType: string;\n service: { new (...params: any[]): any };\n annotations?: AnnotationConfig[];\n};\n//#endregion\n","export const $ID = '$id';\nexport const ODATA_ID = '@odata.id';\n\n// SEGMENTS\nexport const $METADATA = '$metadata';\nexport const $BATCH = '$batch';\nexport const $REF = '$ref';\nexport const $VALUE = '$value';\nexport const $COUNT = '$count';\nexport const $QUERY = '$query';\nexport const $INLINECOUNT = '$inlinecount';\n\n// HTTP HEADERS\nexport const IF_MATCH_HEADER = 'If-Match';\nexport const IF_NONE_MATCH_HEADER = 'If-None-Match';\nexport const CONTENT_TYPE = 'Content-Type';\nexport const CACHE_CONTROL = 'Cache-Control';\nexport const HTTP11 = 'HTTP/1.1';\nexport const ACCEPT = 'Accept';\nexport const PREFER = 'Prefer';\nexport const ODATA_VERSION = 'OData-Version';\nexport const ODATA_VERSION_HEADERS = [\n ODATA_VERSION,\n ODATA_VERSION.toLowerCase(),\n 'dataserviceversion',\n];\nexport const ETAG_HEADER = 'ETag';\nexport const ETAG_HEADERS = [ETAG_HEADER, ETAG_HEADER.toLowerCase()];\nexport const LOCATION_HEADER = 'Location';\nexport const LOCATION_HEADERS = [\n LOCATION_HEADER,\n LOCATION_HEADER.toLowerCase(),\n];\nexport const ODATA_ENTITYID = 'OData-EntityId';\nexport const ODATA_ENTITYID_HEADERS = [\n ODATA_ENTITYID,\n ODATA_ENTITYID.toLowerCase(),\n];\nexport const PREFERENCE_APPLIED = 'Preference-Applied';\nexport const PREFERENCE_APPLIED_HEADERS = [\n PREFERENCE_APPLIED,\n PREFERENCE_APPLIED.toLowerCase(),\n];\nexport const RETRY_AFTER = 'Retry-After';\nexport const RETRY_AFTER_HEADERS = [RETRY_AFTER, RETRY_AFTER.toLowerCase()];\n\n// HTTP HEADER VALUES\nexport const APPLICATION_JSON = 'application/json';\nexport const APPLICATION_HTTP = 'application/http';\nexport const TEXT_PLAIN = 'text/plain';\nexport const MULTIPART_MIXED = 'multipart/mixed';\nexport const MULTIPART_MIXED_BOUNDARY = 'multipart/mixed;boundary=';\nexport const CONTENT_TRANSFER_ENCODING = 'Content-Transfer-Encoding';\nexport const CONTENT_ID = 'Content-ID';\nexport const MAX_AGE = 'max-age';\n\n// VERSIONS\nexport const VERSION_4_0 = '4.0';\nexport const VERSION_3_0 = '3.0';\nexport const VERSION_2_0 = '2.0';\nexport const DEFAULT_VERSION = VERSION_4_0;\n\nexport const BINARY = 'binary';\nexport const BOUNDARY_PREFIX_SUFFIX = '--';\nexport const BATCH_PREFIX = 'batch_';\nexport const CHANGESET_PREFIX = 'changeset_';\nexport const DEFAULT_STRIP_METADATA = 'full';\nexport const DEFAULT_FETCH_POLICY = 'network-only';\nexport const DEFAULT_TIMEOUT = 60; // Time in seconds\nexport const CALLABLE_BINDING_PARAMETER = 'bindingParameter';\nexport const XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n\n// URL PARTS\nexport const QUERY_SEPARATOR = '?';\nexport const PARAM_SEPARATOR = '&';\nexport const VALUE_SEPARATOR = '=';\nexport const PATH_SEPARATOR = '/';\nexport const ODATA_PARAM_PREFIX = '$';\nexport const ODATA_ALIAS_PREFIX = '@';\n\nexport const NEWLINE = '\\r\\n';\nexport const NEWLINE_REGEXP = /\\r?\\n/;\nexport const CACHE_KEY_SEPARATOR = ':';\n\n// Models\nexport const CID_FIELD_NAME = '_cid';\n\n// Standard vocabularies for annotating OData services\n// http://docs.oasis-open.org/odata/odata-vocabularies/v4.0/csprd01/odata-vocabularies-v4.0-csprd01.html\n\nexport const COMPUTED = /.*Computed$/;\nexport const OPTIMISTIC_CONCURRENCY = /.*OptimisticConcurrency$/;\nexport const DESCRIPTION = /.*Description$/;\nexport const LONG_DESCRIPTION = /.*LongDescription$/;\n","import { Observable, of, throwError } from 'rxjs';\nimport { startWith, tap } from 'rxjs/operators';\nimport { CACHE_KEY_SEPARATOR, DEFAULT_TIMEOUT } from '../constants';\nimport { ODataBatchResource, ODataRequest, ODataResponse } from '../resources';\nimport { Cache, PathSegmentNames } from '../types';\n\nexport interface ODataCacheEntry<T> {\n payload: T;\n lastRead: number;\n timeout: number;\n tags: string[];\n}\n\nexport abstract class ODataCache implements Cache {\n timeout: number;\n entries: Map<string, ODataCacheEntry<any>>;\n\n constructor({ timeout = DEFAULT_TIMEOUT }: { timeout?: number }) {\n this.timeout = timeout;\n this.entries = new Map<string, ODataCacheEntry<any>>();\n }\n\n abstract getResponse(req: ODataRequest<any>): ODataResponse<any> | undefined;\n abstract putResponse(req: ODataRequest<any>, res: ODataResponse<any>): void;\n\n scope(req: ODataRequest<any>): string[] {\n const segments = req.resource.cloneSegments();\n return segments.segments({ key: true }).reduce(\n (acc, s) => {\n if (s.name === PathSegmentNames.entitySet)\n acc = [...acc, s.path() as string];\n return acc;\n },\n ['request']\n );\n }\n\n tags(req: ODataRequest<any>, res: ODataResponse<any>): string[] {\n const tags = [];\n const context = res.context;\n if (context.entitySet) {\n tags.push(\n context.key ? `${context.entitySet}(${context.key})` : context.entitySet\n );\n }\n if (context.type) tags.push(context.type);\n return tags;\n }\n\n buildEntry<T>(\n payload: T,\n { timeout, tags }: { timeout?: number; tags?: string[] }\n ): ODataCacheEntry<T> {\n return {\n payload,\n lastRead: Date.now(),\n timeout: timeout || this.timeout,\n tags: tags || [],\n };\n }\n\n buildKey(names: string[]): string {\n return names.join(CACHE_KEY_SEPARATOR);\n }\n\n put<T>(\n name: string,\n payload: T,\n {\n timeout,\n scope,\n tags,\n }: { timeout?: number; scope?: string[]; tags?: string[] } = {}\n ) {\n const entry = this.buildEntry<T>(payload, { timeout, tags });\n const key = this.buildKey([...(scope || []), name]);\n this.entries.set(key, entry);\n this.forget();\n }\n\n get<T>(name: string, { scope }: { scope?: string[] } = {}): T {\n const key = this.buildKey([...(scope || []), name]);\n const entry = this.entries.get(key);\n return entry !== undefined && !this.isExpired(entry)\n ? entry.payload\n : undefined;\n }\n\n forget({\n name,\n scope = [],\n tags = [],\n }: { name?: string; scope?: string[]; tags?: string[] } = {}) {\n // Remove expired cache entries\n if (name !== undefined) scope.push(name);\n const key = scope.length > 0 ? this.buildKey(scope) : undefined;\n this.entries.forEach((entry, k) => {\n if (\n this.isExpired(entry) || // Expired\n (key !== undefined && k.startsWith(key)) || // Key\n (tags.length > 0 && tags.some((t) => entry.tags.indexOf(t) !== -1)) // Tags\n ) {\n this.entries.delete(k);\n }\n });\n }\n\n flush() {\n // Remove all cache entries\n this.entries = new Map<string, ODataCacheEntry<any>>();\n }\n\n isExpired(entry: ODataCacheEntry<any>) {\n return entry.lastRead < Date.now() - (entry.timeout || this.timeout) * 1000;\n }\n\n handleRequest(\n req: ODataRequest<any>,\n res$: Observable<ODataResponse<any>>\n ): Observable<ODataResponse<any>> {\n return req.isFetch()\n ? this.handleFetch(req, res$)\n : req.isMutate()\n ? this.handleMutate(req, res$)\n : res$;\n }\n\n private handleFetch(\n req: ODataRequest<any>,\n res$: Observable<ODataResponse<any>>\n ): Observable<ODataResponse<any>> {\n const policy = req.fetchPolicy;\n const cached = this.getResponse(req);\n if (policy === 'no-cache') {\n return res$;\n }\n if (policy === 'cache-only') {\n if (cached) {\n return of(cached);\n } else {\n return throwError('No Cached');\n }\n }\n if (\n policy === 'cache-first' ||\n policy === 'cache-and-network' ||\n policy === 'network-only'\n ) {\n res$ = res$.pipe(\n tap((res: ODataResponse<any>) => {\n if (res.options.cacheability !== 'no-store')\n this.putResponse(req, res);\n })\n );\n }\n return cached !== undefined && policy !== 'network-only'\n ? policy === 'cache-and-network'\n ? res$.pipe(startWith(cached))\n : of(cached)\n : res$;\n }\n\n private handleMutate(\n req: ODataRequest<any>,\n res$: Observable<ODataResponse<any>>\n ): Observable<ODataResponse<any>> {\n const requests = req.isBatch()\n ? (req.resource as ODataBatchResource)\n .requests()\n .filter((r) => r.isMutate())\n : [req];\n for (var r of requests) {\n const scope = this.scope(r);\n this.forget({ scope });\n }\n return res$;\n }\n}\n","import type { ODataRequest, ODataResponse } from '../resources';\nimport { ODataCache } from './cache';\n\nexport class ODataInMemoryCache extends ODataCache {\n constructor({ timeout }: { timeout?: number } = {}) {\n super({ timeout });\n }\n\n putResponse(req: ODataRequest<any>, res: ODataResponse<any>) {\n var scope = this.scope(req);\n var tags = this.tags(req, res);\n this.put(req.pathWithParams, res, {\n timeout: res.options.maxAge,\n scope,\n tags,\n });\n }\n\n getResponse(req: ODataRequest<any>): ODataResponse<any> | undefined {\n var scope = this.scope(req);\n return this.get(req.pathWithParams, { scope });\n }\n}\n","const COMPARISON_OPERATORS = ['eq', 'ne', 'gt', 'ge', 'lt', 'le'];\nconst LOGICAL_OPERATORS = ['and', 'or', 'not'];\nconst COLLECTION_OPERATORS = ['any', 'all'];\nconst BOOLEAN_FUNCTIONS = ['startswith', 'endswith', 'contains'];\nconst SUPPORTED_EXPAND_PROPERTIES = [\n 'expand',\n 'levels',\n 'select',\n 'top',\n 'count',\n 'orderby',\n 'filter',\n];\n\nconst FUNCTION_REGEX = /\\((.*)\\)/;\nconst INDEXOF_REGEX = /(?!indexof)\\((\\w+)\\)/;\n\nexport type Unpacked<T> = T extends (infer U)[] ? U : T;\nexport type Select<T> = SelectType<T> | SelectType<T>[];\nexport type SelectType<T> = string | keyof T;\nexport type Filter<T> = FilterType | FilterType[];\nexport type FilterType = string | { [name: string]: any };\n\nexport enum StandardAggregateMethods {\n sum = 'sum',\n min = 'min',\n max = 'max',\n average = 'average',\n countdistinct = 'countdistinct',\n}\nexport type Aggregate =\n | string\n | { [propertyName: string]: { with: StandardAggregateMethods; as: string } };\n\n// OrderBy\n\nexport type OrderBy<T> = OrderByType<T> | OrderByType<T>[];\nexport type OrderByType<T> = string | OrderByObject<T>;\nexport type OrderByObject<T> = keyof T | [keyof T | string, 'asc' | 'desc'];\n//TODO: support angular 12 recursive type:\n/*\nexport type OrderByOptions<T> = keyof T | [ keyof T | string, 'asc' | 'desc' ];\nexport type NestedOrderBy<T> = { [P in keyof T]?: T[P] extends Array<infer E> ? OrderBy<E> : OrderBy<T[P]> }\nexport type OrderBy<T> = string | OrderByOptions<T> | Array<OrderByOptions<T>> | NestedOrderBy<T>;\n*/\n\n// Expand\nexport type Expand<T> = ExpandType<T> | ExpandType<T>[];\nexport type ExpandType<T> = string | ExpandObject<T>;\nexport type ExpandObject<T> = keyof T | NestedExpandOptions<T>;\nexport type NestedExpandOptions<T> = {\n [P in keyof T]?: ExpandOptions<Unpacked<T[P]>>;\n};\nexport type ExpandOptions<T> = {\n select?: Select<T>;\n filter?: Filter<T>;\n orderBy?: OrderBy<T>;\n top?: number;\n levels?: number | 'max';\n count?: boolean | Filter<T>;\n expand?: Expand<T>;\n};\n\nexport type Transform<T> = {\n aggregate?: Aggregate | Array<Aggregate>;\n filter?: Filter<T>;\n groupBy?: GroupBy<T>;\n};\nexport type GroupBy<T> = {\n properties: Array<keyof T>;\n transform?: Transform<T>;\n};\n\nexport enum QueryCustomTypes {\n Raw,\n Alias,\n Duration,\n Binary,\n}\n\nexport type QueryCustomType = {\n type: QueryCustomTypes;\n value: any;\n name?: string;\n};\nexport type Value = string | Date | number | boolean | QueryCustomType;\n\n//https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_QueryOptions\nexport const raw = (value: string): QueryCustomType => ({\n type: QueryCustomTypes.Raw,\n value,\n});\nexport const alias = (value: any, name?: string): QueryCustomType => ({\n type: QueryCustomTypes.Alias,\n value,\n name,\n});\nexport const duration = (value: string): QueryCustomType => ({\n type: QueryCustomTypes.Duration,\n value,\n});\nexport const binary = (value: string): QueryCustomType => ({\n type: QueryCustomTypes.Binary,\n value,\n});\nexport const isQueryCustomType = (value: any) =>\n typeof value === 'object' &&\n 'type' in value &&\n value.type in QueryCustomTypes;\nexport type QueryOptions<T> = ExpandOptions<T> & {\n search: string;\n transform: { [name: string]: any } | { [name: string]: any }[];\n skip: number;\n skiptoken: string;\n key: string | number | { [name: string]: any };\n count: boolean | Filter<T>;\n action: string;\n func: string | { [functionName: string]: { [parameterName: string]: any } };\n format: string;\n aliases: QueryCustomType[];\n escape: boolean;\n};\n\nexport const ITEM_ROOT = '';\n\nexport default function <T>({\n select,\n search,\n skiptoken,\n format,\n top,\n skip,\n filter,\n transform,\n orderBy,\n key,\n count,\n expand,\n action,\n func,\n aliases,\n escape,\n}: Partial<QueryOptions<T>> = {}) {\n const [path, params] = buildPathAndQuery({\n select,\n search,\n skiptoken,\n format,\n top,\n skip,\n filter,\n transform,\n orderBy,\n key,\n count,\n expand,\n action,\n func,\n aliases,\n escape,\n });\n\n return buildUrl(path, params);\n}\n\nexport function buildPathAndQuery<T>({\n select,\n search,\n skiptoken,\n format,\n top,\n skip,\n filter,\n transform,\n orderBy,\n key,\n count,\n expand,\n action,\n func,\n aliases,\n escape,\n}: Partial<QueryOptions<T>> = {}): [string, { [name: string]: any }] {\n let path: string = '';\n aliases = aliases || [];\n\n const query: any = {};\n\n // key is not (null, undefined)\n if (key != undefined) {\n path += `(${normalizeValue(key as Value, { aliases, escape })})`;\n }\n\n if (select) {\n query.$select = Array.isArray(select) ? select.join(',') : select;\n }\n\n if (search) {\n query.$search = search;\n }\n\n if (skiptoken) {\n query.$skiptoken = skiptoken;\n }\n\n if (format) {\n query.$format = format;\n }\n\n if (filter || typeof count === 'object') {\n query.$filter = buildFilter(typeof count === 'object' ? count : filter, {\n aliases,\n escape,\n });\n }\n\n if (transform) {\n query.$apply = buildTransforms(transform, { aliases, escape });\n }\n\n if (expand) {\n query.$expand = buildExpand(expand, { aliases, escape });\n }\n\n if (orderBy) {\n query.$orderby = buildOrderBy(orderBy);\n }\n\n if (count) {\n if (typeof count === 'boolean') {\n query.$count = true;\n } else {\n path += '/$count';\n }\n }\n\n if (typeof top === 'number') {\n query.$top = top;\n }\n\n if (typeof skip === 'number') {\n query.$skip = skip;\n }\n\n if (action) {\n path += `/${action}`;\n }\n\n if (func) {\n if (typeof func === 'string') {\n path += `/${func}`;\n } else if (typeof func === 'object') {\n const [funcName] = Object.keys(func);\n const funcArgs = normalizeValue(func[funcName] as Value, {\n aliases,\n escape,\n });\n\n path += `/${funcName}`;\n if (funcArgs !== '') {\n path += `(${funcArgs})`;\n }\n }\n }\n\n if (aliases.length > 0) {\n Object.assign(\n query,\n aliases.reduce(\n (acc, alias) =>\n Object.assign(acc, {\n [`@${alias.name}`]: normalizeValue(alias.value, {\n escape,\n }),\n }),\n {}\n )\n );\n }\n\n // Filter empty values\n const params = Object.entries(query)\n .filter(([, value]) => value !== undefined && value !== '')\n .reduce((acc, [key, value]) => Object.assign(acc, { [key]: value }), {});\n\n return [path, params];\n}\n\nfunction renderPrimitiveValue(\n key: string,\n val: any,\n {\n aliases,\n escape,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n }\n) {\n return `${key} eq ${normalizeValue(val, { aliases, escape })}`;\n}\n\nfunction buildFilter(\n filters: Filter<any> = {},\n {\n aliases,\n propPrefix,\n escape,\n }: { aliases?: QueryCustomType[]; propPrefix?: string; escape?: boolean }\n): string {\n return (\n (Array.isArray(filters) ? filters : [filters]).reduce(\n (acc: string[], filter) => {\n if (filter) {\n const builtFilter = buildFilterCore(filter, {\n aliases,\n propPrefix,\n escape,\n });\n if (builtFilter) {\n acc.push(builtFilter);\n }\n }\n return acc;\n },\n []\n ) as string[]\n ).join(' and ');\n\n function buildFilterCore(\n filter: Filter<any> = {},\n {\n aliases,\n propPrefix,\n escape,\n }: { aliases?: QueryCustomType[]; propPrefix?: string; escape?: boolean }\n ) {\n let filterExpr = '';\n if (typeof filter === 'string') {\n // Use raw filter string\n filterExpr = filter;\n } else if (filter && typeof filter === 'object') {\n const filtersArray = Object.keys(filter).reduce(\n (result: any[], filterKey) => {\n const value = (filter as any)[filterKey];\n let propName = '';\n if (propPrefix) {\n if (filterKey === ITEM_ROOT) {\n propName = propPrefix;\n } else if (INDEXOF_REGEX.test(filterKey)) {\n propName = filterKey.replace(INDEXOF_REGEX, (_, $1) =>\n $1.trim() === ITEM_ROOT\n ? `(${propPrefix})`\n : `(${propPrefix}/${$1.trim()})`\n );\n } else if (FUNCTION_REGEX.test(filterKey)) {\n propName = filterKey.replace(FUNCTION_REGEX, (_, $1) =>\n $1.trim() === ITEM_ROOT\n ? `(${propPrefix})`\n : `(${propPrefix}/${$1.trim()})`\n );\n } else {\n propName = `${propPrefix}/${filterKey}`;\n }\n } else {\n propName = filterKey;\n }\n\n if (filterKey === ITEM_ROOT && Array.isArray(value)) {\n return result.concat(\n value.map((arrayValue: any) =>\n renderPrimitiveValue(propName, arrayValue, { escape, aliases })\n )\n );\n }\n\n if (\n ['number', 'string', 'boolean'].indexOf(typeof value) !== -1 ||\n value instanceof Date ||\n value === null\n ) {\n // Simple key/value handled as equals operator\n result.push(\n renderPrimitiveValue(propName, value, { aliases, escape })\n );\n } else if (Array.isArray(value)) {\n const op = filterKey;\n const builtFilters = value\n .map((v) => buildFilter(v, { aliases, propPrefix, escape }))\n .filter((f) => f)\n .map((f) =>\n LOGICAL_OPERATORS.indexOf(op) !== -1 ? `(${f})` : f\n );\n if (builtFilters.length) {\n if (LOGICAL_OPERATORS.indexOf(op) !== -1) {\n if (builtFilters.length) {\n if (op === 'not') {\n result.push(parseNot(builtFilters as string[]));\n } else {\n result.push(`(${builtFilters.join(` ${op} `)})`);\n }\n }\n } else {\n result.push(builtFilters.join(` ${op} `));\n }\n }\n } else if (LOGICAL_OPERATORS.indexOf(propName) !== -1) {\n const op = propName;\n const builtFilters = Object.keys(value).map((valueKey) =>\n buildFilterCore(\n { [valueKey]: value[valueKey] },\n { aliases, escape }\n )\n );\n if (builtFilters.length) {\n if (op === 'not') {\n result.push(parseNot(builtFilters as string[]));\n } else {\n result.push(`${builtFilters.join(` ${op} `)}`);\n }\n }\n } else if (typeof value === 'object') {\n if ('type' in value) {\n result.push(\n renderPrimitiveValue(propName, value, { aliases, escape })\n );\n } else {\n const operators = Object.keys(value);\n operators.forEach((op) => {\n if (COMPARISON_OPERATORS.indexOf(op) !== -1) {\n result.push(\n `${propName} ${op} ${normalizeValue(value[op], {\n aliases,\n escape,\n })}`\n );\n } else if (LOGICAL_OPERATORS.indexOf(op) !== -1) {\n if (Array.isArray(value[op])) {\n result.push(\n value[op]\n .map(\n (v: any) =>\n '(' +\n buildFilterCore(v, {\n aliases,\n propPrefix: propName,\n escape,\n }) +\n ')'\n )\n .join(` ${op} `)\n );\n } else {\n result.push(\n '(' +\n buildFilterCore(value[op], {\n aliases,\n propPrefix: propName,\n escape,\n }) +\n ')'\n );\n }\n } else if (COLLECTION_OPERATORS.indexOf(op) !== -1) {\n const collectionClause = buildCollectionClause(\n filterKey.toLowerCase(),\n value[op],\n op,\n propName\n );\n if (collectionClause) {\n result.push(collectionClause);\n }\n } else if (op === 'has') {\n result.push(\n `${propName} ${op} ${normalizeValue(value[op], {\n aliases,\n escape,\n })}`\n );\n } else if (op === 'in') {\n const resultingValues = Array.isArray(value[op])\n ? value[op]\n : value[op].value.map((typedValue: any) => ({\n type: value[op].type,\n value: typedValue,\n }));\n\n result.push(\n propName +\n ' in (' +\n resultingValues\n .map((v: any) => normalizeValue(v, { aliases, escape }))\n .join(',') +\n ')'\n );\n } else if (BOOLEAN_FUNCTIONS.indexOf(op) !== -1) {\n // Simple boolean functions (startswith, endswith, contains)\n result.push(\n `${op}(${propName},${normalizeValue(value[op], {\n aliases,\n escape,\n })})`\n );\n } else {\n // Nested property\n const filter = buildFilterCore(value, {\n aliases,\n propPrefix: propName,\n escape,\n });\n if (filter) {\n result.push(filter);\n }\n }\n });\n }\n } else if (value === undefined) {\n // Ignore/omit filter if value is `undefined`\n } else {\n throw new Error(`Unexpected value type: ${value}`);\n }\n\n return result;\n },\n []\n );\n\n filterExpr = filtersArray.join(' and ');\n } /* else {\n throw new Error(`Unexpected filters type: ${filter}`);\n } */\n return filterExpr;\n }\n\n function buildCollectionClause(\n lambdaParameter: string,\n value: any,\n op: string,\n propName: string\n ) {\n let clause = '';\n\n if (typeof value === 'string' || value instanceof String) {\n clause = getStringCollectionClause(lambdaParameter, value, op, propName);\n } else if (value) {\n // normalize {any:[{prop1: 1}, {prop2: 1}]} --> {any:{prop1: 1, prop2: 1}}; same for 'all',\n // simple values collection: {any:[{'': 'simpleVal1'}, {'': 'simpleVal2'}]} --> {any:{'': ['simpleVal1', 'simpleVal2']}}; same for 'all',\n const filterValue = Array.isArray(value)\n ? value.reduce((acc, item) => {\n if (item.hasOwnProperty(ITEM_ROOT)) {\n if (!acc.hasOwnProperty(ITEM_ROOT)) {\n acc[ITEM_ROOT] = [];\n }\n acc[ITEM_ROOT].push(item[ITEM_ROOT]);\n return acc;\n }\n return { ...acc, ...item };\n }, {})\n : value;\n\n const filter = buildFilterCore(filterValue, {\n aliases,\n propPrefix: lambdaParameter,\n escape,\n });\n clause = `${propName}/${op}(${\n filter ? `${lambdaParameter}:${filter}` : ''\n })`;\n }\n return clause;\n }\n}\n\nfunction getStringCollectionClause(\n lambdaParameter: string,\n value: any,\n collectionOperator: string,\n propName: string\n) {\n let clause = '';\n const conditionOperator = collectionOperator == 'all' ? 'ne' : 'eq';\n clause = `${propName}/${collectionOperator}(${lambdaParameter}: ${lambdaParameter} ${conditionOperator} '${value}')`;\n\n return clause;\n}\n\nfunction escapeIllegalChars(string: string) {\n string = string.replace(/%/g, '%25');\n string = string.replace(/\\+/g, '%2B');\n string = string.replace(/\\//g, '%2F');\n string = string.replace(/\\?/g, '%3F');\n string = string.replace(/#/g, '%23');\n string = string.replace(/&/g, '%26');\n string = string.replace(/'/g, \"''\");\n return string;\n}\n\nexport function normalizeValue(\n value: Value,\n { aliases, escape = false }: { aliases?: QueryCustomType[]; escape?: boolean }\n): any {\n if (typeof value === 'string') {\n return escape ? `'${escapeIllegalChars(value)}'` : `'${value}'`;\n } else if (value instanceof Date) {\n return value.toISOString();\n } else if (typeof value === 'number') {\n return value;\n } else if (Array.isArray(value)) {\n return `[${value\n .map((d) => normalizeValue(d, { aliases, escape }))\n .join(',')}]`;\n } else if (value === null) {\n return value;\n } else if (typeof value === 'object') {\n switch (value.type) {\n case QueryCustomTypes.Raw:\n return value.value;\n case QueryCustomTypes.Duration:\n return `duration'${value.value}'`;\n case QueryCustomTypes.Binary:\n return `binary'${value.value}'`;\n case QueryCustomTypes.Alias:\n // Store\n if (Array.isArray(aliases)) {\n if (value.name === undefined) {\n value.name = `a${aliases.length + 1}`;\n }\n aliases.push(value);\n }\n return `@${value.name}`;\n default:\n return Object.entries(value)\n .filter(([, v]) => v !== undefined)\n .map(\n ([k, v]) =>\n `${k}=${normalizeValue(v as Value, { aliases, escape })}`\n )\n .join(',');\n }\n }\n return value;\n}\n\nfunction buildExpand<T>(\n expands: Expand<T>,\n { aliases, escape = false }: { aliases?: QueryCustomType[]; escape?: boolean }\n): string {\n if (typeof expands === 'number') {\n return expands as any;\n } else if (typeof expands === 'string') {\n if (expands.indexOf('/') === -1) {\n return expands;\n }\n\n // Change `Foo/Bar/Baz` to `Foo($expand=Bar($expand=Baz))`\n return expands\n .split('/')\n .reverse()\n .reduce((results, item, index, arr) => {\n if (index === 0) {\n // Inner-most item\n return `$expand=${item}`;\n } else if (index === arr.length - 1) {\n // Outer-most item, don't add `$expand=` prefix (added above)\n return `${item}(${results})`;\n } else {\n // Other items\n return `$expand=${item}(${results})`;\n }\n }, '');\n } else if (Array.isArray(expands)) {\n return `${(expands as Array<NestedExpandOptions<any>>)\n .map((e) => buildExpand(e, { aliases, escape }))\n .join(',')}`;\n } else if (typeof expands === 'object') {\n const expandKeys = Object.keys(expands);\n\n if (\n expandKeys.some(\n (key) => SUPPORTED_EXPAND_PROPERTIES.indexOf(key.toLowerCase()) !== -1\n )\n ) {\n return expandKeys\n .map((key) => {\n let value;\n switch (key) {\n case 'filter':\n value = buildFilter((expands as NestedExpandOptions<any>)[key], {\n aliases,\n escape,\n });\n break;\n case 'orderBy':\n value = buildOrderBy(\n (expands as NestedExpandOptions<any>)[key] as OrderBy<T>\n );\n break;\n case 'levels':\n case 'count':\n case 'top':\n value = `${(expands as NestedExpandOptions<any>)[key]}`;\n break;\n default:\n value = buildExpand(\n (expands as NestedExpandOptions<any>)[key] as Expand<T>,\n { aliases, escape }\n );\n }\n return `$${key.toLowerCase()}=${value}`;\n })\n .join(';');\n } else {\n return expandKeys\n .map((key) => {\n const builtExpand = buildExpand(\n (expands as NestedExpandOptions<any>)[\n key\n ] as NestedExpandOptions<any>,\n { aliases, escape }\n );\n return builtExpand ? `${key}(${builtExpand})` : key;\n })\n .join(',');\n }\n }\n return '';\n}\n\nfunction buildTransforms<T>(\n transforms: Transform<T> | Transform<T>[],\n { aliases, escape = false }: { aliases?: QueryCustomType[]; escape?: boolean }\n) {\n // Wrap single object an array for simplified processing\n const transformsArray = Array.isArray(transforms) ? transforms : [transforms];\n\n const transformsResult = transformsArray.reduce(\n (result: string[], transform) => {\n const { aggregate, filter, groupBy, ...rest } = transform;\n\n // TODO: support as many of the following:\n // topcount, topsum, toppercent,\n // bottomsum, bottomcount, bottompercent,\n // identity, concat, expand, search, compute, isdefined\n const unsupportedKeys = Object.keys(rest);\n if (unsupportedKeys.length) {\n throw new Error(`Unsupported transform(s): ${unsupportedKeys}`);\n }\n\n if (aggregate) {\n result.push(`aggregate(${buildAggregate(aggregate)})`);\n }\n if (filter) {\n const builtFilter = buildFilter(filter, { aliases, escape });\n if (builtFilter) {\n result.push(\n `filter(${buildFilter(builtFilter, { aliases, escape })})`\n );\n }\n }\n if (groupBy) {\n result.push(`groupby(${buildGroupBy(groupBy, { aliases, escape })})`);\n }\n\n return result;\n },\n []\n );\n\n return transformsResult.join('/') || undefined;\n}\n\nfunction buildAggregate(aggregate: Aggregate | Aggregate[]) {\n // Wrap single object in an array for simplified processing\n const aggregateArray = Array.isArray(aggregate) ? aggregate : [aggregate];\n\n return aggregateArray\n .map((aggregateItem) => {\n return typeof aggregateItem === 'string'\n ? aggregateItem\n : Object.keys(aggregateItem).map((aggregateKey) => {\n const aggregateValue = aggregateItem[aggregateKey];\n\n // TODO: Are these always required? Can/should we default them if so?\n if (!aggregateValue.with) {\n throw new Error(`'with' property required for '${aggregateKey}'`);\n }\n if (!aggregateValue.as) {\n throw new Error(`'as' property required for '${aggregateKey}'`);\n }\n\n return `${aggregateKey} with ${aggregateValue.with} as ${aggregateValue.as}`;\n });\n })\n .join(',');\n}\n\nfunction buildGroupBy<T>(\n groupBy: GroupBy<T>,\n { aliases, escape = false }: { aliases?: QueryCustomType[]; escape?: boolean }\n) {\n if (!groupBy.properties) {\n throw new Error(`'properties' property required for groupBy`);\n }\n\n let result = `(${groupBy.properties.join(',')})`;\n\n if (groupBy.transform) {\n result += `,${buildTransforms(groupBy.transform, { aliases, escape })}`;\n }\n\n return result;\n}\n\nfunction buildOrderBy<T>(orderBy: OrderBy<T>, prefix: string = ''): string {\n if (Array.isArray(orderBy)) {\n return (orderBy as OrderByObject<T>[])\n .map((value) =>\n Array.isArray(value) &&\n value.length === 2 &&\n ['asc', 'desc'].indexOf(value[1]) !== -1\n ? value.join(' ')\n : value\n )\n .map((v) => `${prefix}${v}`)\n .join(',');\n } else if (typeof orderBy === 'object') {\n return Object.entries(orderBy)\n .map(([k, v]) => buildOrderBy(v as OrderBy<any>, `${k}/`))\n .map((v) => `${prefix}${v}`)\n .join(',');\n }\n return `${prefix}${orderBy}`;\n}\n\nfunction buildUrl(path: string, params: { [name: string]: any }): string {\n // This can be refactored using URL API. But IE does not support it.\n const queries: string[] = Object.entries(params).map(\n ([key, value]) => `${key}=${value}`\n );\n return queries.length ? `${path}?${queries.join('&')}` : path;\n}\n\nfunction parseNot(builtFilters: string[]): string {\n return `not(${builtFilters.join(' and ')})`;\n}\n","const ISO_REGEX =\n /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/;\n\nexport const Dates = {\n isoStringToDate(value: any): any {\n if (typeof value === 'string' && value.search(ISO_REGEX) === 0) {\n return new Date(value);\n } else if (Array.isArray(value)) {\n return value.map((v) => this.isoStringToDate(v));\n } else if (value && value.constructor === Object) {\n return Object.keys(value)\n .map((key) => [key, this.isoStringToDate(value[key])])\n .reduce((acc, v) => Object.assign(acc, { [v[0]]: v[1] }), {});\n }\n return value;\n },\n};\n","const DURATION_REGEX =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n//https://en.wikipedia.org/wiki/ISO_8601#Durations\nexport type Duration = {\n sign?: 1 | -1;\n years?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n};\n\nexport const Durations = {\n toDuration(v: string): Duration {\n const matches = DURATION_REGEX.exec(v);\n if (!matches || v.length < 3) {\n throw new TypeError(\n `duration invalid: \"${v}\". Must be a ISO 8601 duration. See https://en.wikipedia.org/wiki/ISO_8601#Durations`\n );\n }\n let duration: Duration = {};\n duration.sign = matches[1] === '-' ? -1 : 1;\n return [\n 'years',\n 'months',\n 'weeks',\n 'days',\n 'hours',\n 'minutes',\n 'seconds',\n ].reduce((acc: any, name, index) => {\n const v = parseFloat(matches[index + 2]);\n if (!Number.isNaN(v)) acc[name] = v;\n return acc;\n }, duration) as Duration;\n },\n toString(v: Duration): string {\n return [\n v.sign === -1 ? '-' : '',\n 'P',\n v.years ? v.years + 'Y' : '',\n v.months ? v.months + 'M' : '',\n v.weeks ? v.weeks + 'W' : '',\n v.days ? v.days + 'D' : '',\n 'T',\n v.hours ? v.hours + 'H' : '',\n v.minutes ? v.minutes + 'M' : '',\n v.seconds ? v.seconds + 'S' : '',\n ].join('');\n },\n};\n","export const Enums = {\n names<E>(Enum: E): string[] {\n return Object.values(Enum).filter((v) => typeof v === 'string');\n },\n\n values<E>(Enum: E): number[] {\n return Object.values(Enum).filter((v) => typeof v === 'number');\n },\n\n toValue<E>(Enum: E, value: any): number {\n if (value in Enum)\n return typeof value === 'string' ? (Enum as any)[value] : value;\n return NaN;\n },\n\n toValues<E>(Enum: E, value: any): number[] {\n if (typeof value === 'number') {\n return this.values(Enum).filter((v) => (value & v) === v);\n }\n if (typeof value === 'string') {\n value = value.split(',').map((o) => o.trim());\n }\n if (Array.isArray(value) && value.every((v) => v in Enum)) {\n return value.map((o) => this.toValue(Enum, o));\n }\n return [];\n },\n\n toName<E>(Enum: E, value: any): string {\n if (value in Enum)\n return typeof value === 'number' ? (Enum as any)[value] : value;\n return '';\n },\n\n toNames<E>(Enum: E, value: any): string[] {\n if (typeof value === 'number') {\n return this.values(Enum)\n .filter((v) => (value & v) === v)\n .map((v) => this.toName(Enum, v));\n }\n if (typeof value === 'string') {\n value = value.split(',').map((o) => o.trim());\n }\n if (Array.isArray(value) && value.every((v) => v in Enum)) {\n return value.map((o) => this.toName(Enum, o) as string);\n }\n return [];\n },\n};\n","function cloneSymbol(targe: any) {\n return Object(Symbol.prototype.valueOf.call(targe));\n}\n\nfunction cloneReg(targe: any) {\n const reFlags = /\\w*$/;\n const result = new targe.constructor(targe.source, reFlags.exec(targe));\n result.lastIndex = targe.lastIndex;\n return result;\n}\n\nexport const Types = {\n rawType(value: any) {\n return Object.prototype.toString.call(value).slice(8, -1);\n },\n\n isObject(value: any): boolean {\n var type = typeof value;\n return value != null && (type === 'object' || type === 'function');\n },\n\n isPlainObject(value: any) {\n if (this.rawType(value) !== 'Object') {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === null || prototype === Object.prototype;\n },\n\n isFunction(value: any): boolean {\n return typeof value === 'function';\n },\n\n isArray(value: any): boolean {\n return Array.isArray(value);\n },\n\n isEmpty(value: any): boolean {\n return (\n value === undefined ||\n value === null ||\n (typeof value === 'string' && !value.length) ||\n (Types.isArray(value) && !value.length) ||\n (Types.isFunction(value.isEmpty) && value.isEmpty()) ||\n (Types.isArray(value) &&\n (value as any[]).every((v) => Types.isEmpty(v))) ||\n (Types.isObject(value) &&\n !Object.keys(value).filter((k) => value.hasOwnProperty(k)).length) ||\n (Types.isPlainObject(value) &&\n !Object.keys(value).filter((k) => value.hasOwnProperty(k)).length)\n );\n },\n\n isEqual(value1: any, value2: any) {\n function getType(obj: any) {\n return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();\n }\n\n function areDatesEqual() {\n return value1.getTime() === value2.getTime();\n }\n\n function areArraysBufferEqual() {\n if (value1.byteLength !== value2.byteLength) {\n return false;\n }\n\n var view1 = new DataView(value1);\n var view2 = new DataView(value2);\n\n var i = value1.byteLength;\n while (i--) {\n if (view1.getUint8(i) !== view2.getUint8(i)) {\n return false;\n }\n }\n\n return true;\n }\n\n function areArraysEqual() {\n // Check length\n if (value1.length !== value2.length) return false;\n\n // Check each item in the array\n for (let i = 0; i < value1.length; i++) {\n if (!Types.isEqual(value1[i], value2[i])) return false;\n }\n\n // If no errors, return true\n return true;\n }\n\n function areObjectsEqual() {\n if (Object.keys(value1).length !== Object.keys(value2).length)\n return false;\n\n // Check each item in the object\n for (let key in value1) {\n if (Object.prototype.hasOwnProperty.call(value1, key)) {\n if (!Types.isEqual(value1[key], value2[key])) return false;\n }\n }\n\n // If no errors, return true\n return true;\n }\n\n function areFunctionsEqual() {\n return value1.toString() === value2.toString();\n }\n\n function arePrimativesEqual() {\n return value1 === value2;\n }\n\n // Get the object type\n let type = getType(value1);\n\n // If the two items are not the same type, return false\n if (type !== getType(value2)) return false;\n\n // Compare based on type\n if (type === 'date') return areDatesEqual();\n if (type === 'arraybuffer') return areArraysBufferEqual();\n if (type === 'array') return areArraysEqual();\n if (type === 'object') return areObjectsEqual();\n if (type === 'function') return areFunctionsEqual();\n return arePrimativesEqual();\n },\n clone(target: any) {\n const constrFun = target.constructor;\n switch (this.rawType(target)) {\n case 'Boolean':\n case 'Number':\n case 'String':\n case 'Error':\n case 'Date':\n return new constrFun(target);\n case 'RegExp':\n return cloneReg(target);\n case 'Symbol':\n return cloneSymbol(target);\n case 'Function':\n return target;\n default:\n return null;\n }\n },\n};\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\n\nimport { BOUNDARY_PREFIX_SUFFIX } from '../constants';\nimport { Types } from './types';\n\nexport const Http = {\n //Merge Headers\n mergeHttpHeaders(\n ...values: (HttpHeaders | { [header: string]: string | string[] })[]\n ): HttpHeaders {\n let headers = new HttpHeaders();\n values.forEach((value) => {\n if (value instanceof HttpHeaders) {\n value.keys().forEach((key) => {\n headers = ((value as HttpHeaders).getAll(key) || []).reduce(\n (acc, v) => acc.append(key, v),\n headers\n );\n });\n } else if (Types.isPlainObject(value)) {\n Object.entries(value).forEach(([key, value]) => {\n headers = (Array.isArray(value) ? value : [value]).reduce(\n (acc, v) => acc.append(key, v),\n headers\n );\n });\n }\n });\n return headers;\n },\n\n // Merge Params\n mergeHttpParams(\n ...values: (HttpParams | { [param: string]: string | string[] })[]\n ): HttpParams {\n let params = new HttpParams();\n values.forEach((value) => {\n if (value instanceof HttpParams) {\n value.keys().forEach((key) => {\n params = ((value as HttpParams).getAll(key) || []).reduce(\n (acc, v) => acc.append(key, v),\n params\n );\n });\n } else if (Types.isPlainObject(value)) {\n Object.entries(value).forEach(([key, value]) => {\n params = (Array.isArray(value) ? value : [value]).reduce(\n (acc, v) => acc.append(key, v),\n params\n );\n });\n }\n });\n return params;\n },\n\n // Split Params\n splitHttpParams(\n params: HttpParams,\n keys: string[]\n ): [HttpParams, HttpParams] {\n let other = new HttpParams();\n params.keys().forEach((key) => {\n if (keys.includes(key)) {\n other = (params.getAll(key) || []).reduce(\n (acc, v) => acc.append(key, v),\n other\n );\n params = params.delete(key);\n }\n });\n return [params, other];\n },\n\n // Without Params\n withoutHttpParams(params: HttpParams, keys: string[]): HttpParams {\n return keys.reduce((acc, key) => acc.delete(key), params);\n },\n\n resolveHeaderKey(\n headers: HttpHeaders | { [param: string]: string | string[] },\n options: string[]\n ): string | undefined {\n if (headers instanceof HttpHeaders) {\n return headers.keys().find((k) => options.indexOf(k) !== -1);\n } else if (Types.isPlainObject(headers)) {\n return Object.keys(headers).find((k) => options.indexOf(k) !== -1);\n }\n return undefined;\n },\n\n headerValue(header: string): string {\n let res: string = header.split(';')[0].trim();\n res = res.split(':')[1].trim();\n return res;\n },\n\n parseResponseStatus(statusLine: string): {\n status: string;\n code: number;\n message: string;\n } {\n const status = statusLine.split(' ')[0];\n const code = parseInt(statusLine.split(' ')[1], 10);\n const message = statusLine.split(' ')[2];\n return { status, code, message };\n },\n\n boundaryDelimiter(contentType: string): string {\n const contentTypeParts: string[] = contentType.split(';');\n if (contentTypeParts.length === 2) {\n const boundary: string = contentType.split(';')[1].trim();\n const boundaryDelimiter: string =\n BOUNDARY_PREFIX_SUFFIX + boundary.split('=')[1];\n return boundaryDelimiter;\n } else {\n return '';\n }\n },\n\n boundaryEnd(boundaryDelimiter: string): string {\n if (!boundaryDelimiter.length) {\n return '';\n }\n const boundaryEnd: string = boundaryDelimiter + BOUNDARY_PREFIX_SUFFIX;\n return boundaryEnd;\n },\n};\n","import { Types } from './types';\n\nfunction forEach(array: any[], iteratee: (value: any, index: number) => void) {\n let index = -1;\n const length = array.length;\n while (++index < length) {\n iteratee(array[index], index);\n }\n return array;\n}\n\nexport const Objects = {\n set(obj: Object, path: string, value: any) {\n // Check if path is string or array. Regex : ensure that we do not have '.' and brackets.\n const pathArray = (\n Types.isArray(path) ? path : path.match(/([^[.\\]])+/g)\n ) as any[];\n\n pathArray.reduce((acc, key, i) => {\n if (acc[key] === undefined) acc[key] = {};\n if (i === pathArray.length - 1) acc[key] = value;\n return acc[key];\n }, obj);\n },\n\n get(obj: Object, path: string, def?: any): any {\n // Check if path is string or array. Regex : ensure that we do not have '.' and brackets.\n const pathArray = (\n Types.isArray(path) ? path : path.match(/([^[.\\]])+/g)\n ) as any[];\n // Find value if exist return otherwise return undefined value;\n return (\n pathArray.reduce((prevObj, key) => prevObj && prevObj[key], obj) || def\n );\n },\n\n unset(obj: Object, path: string) {\n // Check if path is string or array. Regex : ensure that we do not have '.' and brackets.\n const pathArray = (\n Types.isArray(path) ? path : path.match(/([^[.\\]])+/g)\n ) as any[];\n\n pathArray.reduce((acc, key, i) => {\n if (i === pathArray.length - 1) delete acc[key];\n return acc[key];\n }, obj);\n },\n\n has(obj: Object, path: string) {\n // Check if path is string or array. Regex : ensure that we do not have '.' and brackets.\n const pathArray = (\n Types.isArray(path) ? path : path.match(/([^[.\\]])+/g)\n ) as any[];\n\n return !!pathArray.reduce((prevObj, key) => prevObj && prevObj[key], obj);\n },\n\n merge(target: Object, source: Object) {\n const merge = (target: any, source: { [attr: string]: any }) => {\n for (let attr in source) {\n let value = source[attr];\n if (value !== null && Types.isPlainObject(value) && attr in target) {\n merge(target[attr], value);\n } else if (target[attr] !== value) {\n target[attr] = value;\n }\n }\n };\n merge(target, source);\n return target;\n },\n\n equal(object1: { [attr: string]: any }, object2: { [attr: string]: any }) {\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n const val1 = object1[key];\n const val2 = object2[key];\n const areObjects = Types.isPlainObject(val1) && Types.isPlainObject(val2);\n if (\n (areObjects && !Objects.equal(val1, val2)) ||\n (!areObjects && val1 !== val2)\n ) {\n return false;\n }\n }\n return true;\n },\n\n difference(\n object1: { [attr: string]: any },\n object2: { [attr: string]: any }\n ) {\n if (!object2 || !Types.isPlainObject(object2)) {\n return object1;\n }\n var diffs: { [name: string]: any } = {};\n var key;\n var arraysMatch = function (arr1: any[], arr2: any[]) {\n if (arr1.length !== arr2.length) return false;\n\n for (var i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) return false;\n }\n\n return true;\n };\n\n var compare = function (item1: any, item2: any | undefined, key: string) {\n if (item2 === undefined) {\n diffs[key] = null;\n return;\n }\n\n if (typeof item1 !== typeof item2) {\n diffs[key] = item2;\n return;\n }\n\n if (Types.isPlainObject(item1)) {\n var objDiff = Objects.difference(item1, item2);\n if (Object.keys(objDiff).length > 0) {\n diffs[key] = objDiff;\n }\n return;\n }\n\n if (Array.isArray(item1)) {\n if (!arraysMatch(item1, item2)) {\n diffs[key] = item2;\n }\n return;\n }\n\n if (item1 !== item2) {\n diffs[key] = item2;\n }\n };\n\n for (key in object1) {\n if (object1.hasOwnProperty(key)) {\n compare(object1[key], object2[key], key);\n }\n }\n\n for (key in object2) {\n if (object2.hasOwnProperty(key)) {\n if (!object1[key] && object1[key] !== object2[key]) {\n diffs[key] = object2[key];\n }\n }\n }\n return diffs;\n },\n\n resolveKey(key: any, { single = true }: { single?: boolean } = {}) {\n if (['number', 'string'].indexOf(typeof key) !== -1) return key;\n if (!Types.isPlainObject(key)) {\n return undefined;\n }\n const values = Object.values(key);\n if (values.length === 1 && single) {\n // Single primitive key value\n key = values[0];\n } else if (values.some((v) => v === undefined)) {\n // Compose key, needs all values\n return undefined;\n }\n return !Types.isEmpty(key) ? key : undefined;\n },\n\n clone(target: any, map?: WeakMap<object, any>) {\n if (map === undefined) map = new WeakMap();\n // clone primitive types\n if (typeof target != 'object' || target == null) {\n return target;\n }\n\n const type = Types.rawType(target);\n let cloneTarget: any = null;\n\n if (map.get(target)) {\n return map.get(target);\n }\n map.set(target, cloneTarget);\n\n if (type != 'Set' && type != 'Map' && type != 'Array' && type != 'Object') {\n return Types.clone(target);\n }\n\n // clone Set\n if (type == 'Set') {\n cloneTarget = new Set();\n target.forEach((value: any) => {\n cloneTarget.add(this.clone(value, map));\n });\n return cloneTarget;\n }\n\n // clone Map\n if (type == 'Map') {\n cloneTarget = new Map();\n target.forEach((value: any, key: any) => {\n cloneTarget.set(key, this.clone(value, map));\n });\n return cloneTarget;\n }\n\n // clone Array\n if (type == 'Array') {\n cloneTarget = new Array();\n forEach(target, (value, index) => {\n cloneTarget[index] = this.clone(value, map);\n });\n }\n\n // clone normal Object\n if (type == 'Object') {\n cloneTarget = new Object();\n forEach(Object.keys(target), (key, index) => {\n cloneTarget[key] = this.clone(target[key], map);\n });\n }\n\n return cloneTarget;\n },\n};\n","import { CALLABLE_BINDING_PARAMETER } from '../constants';\nimport { CallableConfig } from '../types';\nimport { Objects } from './objects';\n\nexport const OData = {\n // Merge callables parameters\n mergeCallableParameters(callables: CallableConfig[]): CallableConfig[] {\n const areEqual = (a: CallableConfig, b: CallableConfig) =>\n a.name === b.name &&\n Objects.equal(\n (a.parameters || {})[CALLABLE_BINDING_PARAMETER] || {},\n (b.parameters || {})[CALLABLE_BINDING_PARAMETER] || {}\n );\n return callables.reduce((acc: CallableConfig[], config) => {\n if (acc.every((c) => !areEqual(c, config))) {\n config = callables\n .filter((c) => areEqual(c, config))\n .reduce((acc, c) => {\n acc.parameters = Object.assign(\n acc.parameters || {},\n c.parameters || {}\n );\n return acc;\n }, config);\n return [...acc, config];\n }\n return acc;\n }, [] as CallableConfig[]);\n },\n};\n","// From https://github.com/adamhalasz/uniqid\nvar glast: number;\nfunction now() {\n let time = Date.now();\n let last = glast || time;\n return (glast = time > last ? time : last + 1);\n}\nexport const Strings = {\n uniqueId(prefix?: string, suffix?: string): string {\n return (prefix ? prefix : '') + now().toString(36) + (suffix ? suffix : '');\n },\n\n titleCase(text: string): string {\n const result = text.replace(/([a-z])([A-Z])/g, '$1 $2');\n return result\n .split(' ')\n .map((p) => p.charAt(0).toUpperCase() + p.slice(1))\n .join(' ');\n },\n};\n","import { PARAM_SEPARATOR, VALUE_SEPARATOR } from '../constants';\n\nexport const Urls = {\n parseQueryString(query: string) {\n return query.split(PARAM_SEPARATOR).reduce((acc, param: string) => {\n let index = param.indexOf(VALUE_SEPARATOR);\n if (index !== -1)\n Object.assign(acc, {\n [param.substr(0, index)]: param.substr(index + 1),\n });\n return acc;\n }, {});\n },\n escapeIllegalChars(string: string) {\n string = string.replace(/%/g, '%25');\n string = string.replace(/\\+/g, '%2B');\n string = string.replace(/\\//g, '%2F');\n string = string.replace(/\\?/g, '%3F');\n string = string.replace(/#/g, '%23');\n string = string.replace(/&/g, '%26');\n string = string.replace(/'/g, \"''\");\n return string;\n },\n};\n","import type { QueryCustomType } from '../builder';\nimport { Renderable } from './syntax';\n\nexport abstract class Expression<T> implements Renderable {\n protected _children: Renderable[];\n constructor({\n children,\n }: {\n children?: Renderable[];\n } = {}) {\n this._children = children || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'Expression';\n }\n\n abstract render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[] | undefined;\n escape?: boolean | undefined;\n prefix?: string | undefined;\n }): string;\n\n children() {\n return this._children;\n }\n\n length() {\n return this._children.length;\n }\n\n toJSON() {\n return {\n children: this._children.map((c) => c.toJSON()),\n };\n }\n}\n","import type { QueryCustomType } from '../builder';\nimport { normalizeValue } from '../builder';\n\nexport interface Renderable {\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string;\n toString(): string;\n toJSON(): any;\n}\n\nexport class Field<T extends object> implements ProxyHandler<T> {\n constructor(public name: string = '') {}\n\n static factory<T extends object>() {\n const h = new Field<T>();\n return new Proxy({ _name: '' } as T, h);\n }\n\n get(target: T, p: string | symbol): any {\n let name = (target as any)['_name'];\n if (p === 'render') {\n return ({ prefix }: { prefix?: string }) =>\n prefix ? `${prefix}/${name}` : name;\n }\n name = name ? `${name}/${p as string}` : p;\n return new Proxy({ _name: name } as any, this);\n }\n}\n\nfunction applyMixins(derivedCtor: any, constructors: any[]) {\n constructors.forEach((baseCtor) => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\n Object.defineProperty(\n derivedCtor.prototype,\n name,\n Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||\n Object.create(null)\n );\n });\n });\n}\n\nexport function render(\n value: any,\n {\n aliases,\n normalize,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n normalize?: boolean;\n escape?: boolean;\n prefix?: string;\n } = {}\n): string | number | boolean | null {\n if (typeof value === 'function') {\n return render(value(syntax), { aliases, normalize, prefix });\n }\n if (\n typeof value === 'object' &&\n value !== null &&\n value.render !== undefined\n ) {\n return render(value.render({ aliases, escape, prefix }), {\n aliases,\n normalize,\n escape,\n prefix,\n });\n }\n return normalize ? normalizeValue(value, { aliases, escape }) : value;\n}\n\nexport class Function<T> implements Renderable {\n constructor(\n protected name: string,\n protected values: any[],\n protected normalize: boolean = true,\n protected escape: boolean = false\n ) {}\n\n get [Symbol.toStringTag]() {\n return 'Function';\n }\n\n toJSON() {\n return {\n name: this.name,\n values: this.values,\n normalize: this.normalize,\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n let [field, ...values] = this.values;\n\n field = render(field, { aliases, escape, prefix });\n let params = [\n field,\n ...values.map((v) =>\n render(v, { aliases, escape, prefix, normalize: this.normalize })\n ),\n ];\n return `${this.name}(${params.join(', ')})`;\n }\n}\n\nexport class StringAndCollectionFunctions<T> {\n concat(field: any, value: any, normalize?: boolean) {\n return new Function<T>('concat', [field, value], normalize);\n }\n\n contains(field: any, value: any, normalize?: boolean) {\n return new Function<T>('contains', [field, value], normalize);\n }\n\n endsWith(field: any, value: any, normalize?: boolean) {\n return new Function<T>('endswith', [field, value], normalize);\n }\n\n indexOf(field: any, value: any, normalize?: boolean) {\n return new Function<T>('indexof', [field, value], normalize);\n }\n\n length(value: any, normalize?: boolean) {\n return new Function<T>('length', [value], normalize);\n }\n\n startsWith(field: any, value: any, normalize?: boolean) {\n return new Function<T>('startswith', [field, value], normalize);\n }\n\n subString(field: any, start: number, length?: number) {\n let values = [field, start];\n if (length !== undefined) {\n values.push(length);\n }\n return new Function<T>('substring', values);\n }\n}\n\nexport class CollectionFunctions<T> {\n hasSubset(s1: T, s2: any) {\n return new Function<T>('hassubset', [s1, s2]);\n }\n hasSubsequence(s1: T, s2: any) {\n return new Function<T>('hassubsequence', [s1, s2]);\n }\n}\n\nexport class StringFunctions<T> {\n matchesPattern(value: T | string, pattern: string) {\n return new Function<T>('matchesPattern', [value, pattern]);\n }\n toLower(value: T) {\n return new Function<T>('tolower', [value]);\n }\n toUpper(value: T) {\n return new Function<T>('toupper', [value]);\n }\n trim(value: T) {\n return new Function<T>('trim', [value]);\n }\n}\n\nexport class DateAndTimeFunctions<T> {\n date(value: any) {\n return new Function<T>('date', [value]);\n }\n day(value: any) {\n return new Function<T>('day', [value]);\n }\n fractionalseconds(value: any) {\n return new Function<T>('fractionalseconds', [value]);\n }\n hour(value: any) {\n return new Function<T>('hour', [value]);\n }\n maxdatetime(value: any) {\n return new Function<T>('maxdatetime', [value]);\n }\n mindatetime(value: any) {\n return new Function<T>('mindatetime', [value]);\n }\n minute(value: any) {\n return new Function<T>('minute', [value]);\n }\n month(value: any) {\n return new Function<T>('month', [value]);\n }\n now() {\n return new Function<T>('now', []);\n }\n second(value: any) {\n return new Function<T>('second', [value]);\n }\n time(value: any) {\n return new Function<T>('time', [value]);\n }\n totaloffsetminutes(value: any) {\n return new Function<T>('totaloffsetminutes', [value]);\n }\n totalseconds(value: any) {\n return new Function<T>('totalseconds', [value]);\n }\n year(value: any) {\n return new Function<T>('year', [value]);\n }\n}\n\nexport class ArithmeticFunctions<T> {\n ceiling(value: T | string) {\n return new Function<T>('ceiling', [value]);\n }\n floor(value: T | string) {\n return new Function<T>('floor', [value]);\n }\n round(value: T | string) {\n return new Function<T>('round', [value]);\n }\n}\n\nexport class TypeFunctions<T> {\n cast(value: T | string, type?: string) {\n return new Function<T>('cast', [value, type]);\n }\n\n isof(value: T | string, type?: string) {\n return new Function<T>('isof', [value, type]);\n }\n}\n\nexport class GeoFunctions<T> {\n geoDistance(value: T, point: string, normalize?: boolean) {\n return new Function<T>('geo.distance', [value, point], normalize);\n }\n geoIntersects(value: T, polygon: string, normalize?: boolean) {\n return new Function<T>('geo.intersects', [value, polygon], normalize);\n }\n geoLength(line: T, normalize?: boolean) {\n return new Function<T>('geo.length', [line], normalize);\n }\n}\n\nexport class ConditionalFunctions<T> {\n case(condition: T | string, value: any) {\n return new Function<T>('case', [condition, value]);\n }\n}\n\nexport class Operator<T> implements Renderable {\n constructor(\n protected op: string,\n protected values: any[],\n protected normalize: boolean = true\n ) {}\n\n get [Symbol.toStringTag]() {\n return 'Operator';\n }\n\n toJSON() {\n return {\n op: this.op,\n values: this.values,\n normalize: this.normalize,\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n let [left, right] = this.values;\n\n left = render(left, { aliases, escape, prefix });\n if (right !== undefined) {\n right = Array.isArray(right)\n ? `(${right\n .map((v) =>\n render(v, {\n aliases,\n escape,\n prefix,\n normalize: this.normalize,\n })\n )\n .join(',')})`\n : render(right, {\n aliases,\n escape,\n prefix,\n normalize: this.normalize,\n });\n return `${left} ${this.op} ${right}`;\n }\n return `${this.op}(${left})`;\n }\n}\n\nexport class LogicalOperators<T> {\n eq(left: any, right: any, normalize?: boolean) {\n return new Operator('eq', [left, right], normalize);\n }\n ne(left: any, right: any, normalize?: boolean) {\n return new Operator('ne', [left, right], normalize);\n }\n gt(left: any, right: any, normalize?: boolean) {\n return new Operator('gt', [left, right], normalize);\n }\n ge(left: any, right: any, normalize?: boolean) {\n return new Operator('ge', [left, right], normalize);\n }\n lt(left: any, right: any, normalize?: boolean) {\n return new Operator('lt', [left, right], normalize);\n }\n le(left: any, right: any, normalize?: boolean) {\n return new Operator('le', [left, right], normalize);\n }\n /*\n and(left: any, right: any, normalize?: boolean) {\n return new Operator('and', [left, right], normalize);\n }\n or(left: any, right: any, normalize?: boolean) {\n return new Operator('or', [left, right], normalize);\n }\n */\n not(value: any, normalize?: boolean) {\n return new Operator<T>('not', [value], normalize);\n }\n has(left: any, right: any, normalize?: boolean) {\n return new Operator('has', [left, right], normalize);\n }\n in(left: any, right: any, normalize?: boolean) {\n return new Operator('in', [left, right], normalize);\n }\n}\n\nexport class ArithmeticOperators<T> {\n add(left: any, right: any, normalize?: boolean) {\n return new Operator<T>('add', [left, right], normalize);\n }\n sub(left: any, right: any, normalize?: boolean) {\n return new Operator('sub', [left, right], normalize);\n }\n mul(left: any, right: any, normalize?: boolean) {\n return new Operator('mul', [left, right], normalize);\n }\n div(left: any, right: any, normalize?: boolean) {\n return new Operator('div', [left, right], normalize);\n }\n mod(left: any, right: any, normalize?: boolean) {\n return new Operator('mod', [left, right], normalize);\n }\n neg(value: any, normalize?: boolean) {\n return new Operator('-', [value], normalize);\n }\n}\n\nexport class Grouping<T> implements Renderable {\n constructor(protected group: Renderable) {}\n\n get [Symbol.toStringTag]() {\n return 'Grouping';\n }\n\n toJSON() {\n return {\n group: this.group.toJSON(),\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n return `(${render(this.group, { aliases, escape, prefix })})`;\n }\n}\n\nexport class Lambda<T> implements Renderable {\n constructor(\n protected op: string,\n protected values: any[],\n protected alias?: string\n ) {}\n\n get [Symbol.toStringTag]() {\n return 'Lambda';\n }\n\n toJSON() {\n return {\n op: this.op,\n values: this.values,\n alias: this.alias,\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n let [left, right] = this.values;\n\n left = render(left, { aliases, escape, prefix });\n let alias = this.alias || left.split('/').pop().toLowerCase()[0];\n return `${left}/${this.op}(${alias}:${render(right, {\n aliases,\n escape,\n prefix: alias,\n })})`;\n }\n}\n\nexport class LambdaOperators<T> {\n any(field: T, value: any, alias?: string) {\n return new Lambda('any', [field, value], alias);\n }\n\n all(field: T, value: any, alias?: string) {\n return new Lambda('all', [field, value], alias);\n }\n}\n\nexport class ODataOperators<T> {}\nexport interface ODataOperators<T>\n extends LogicalOperators<T>,\n ArithmeticOperators<T>,\n LambdaOperators<T> {}\n\napplyMixins(ODataOperators, [\n LogicalOperators,\n ArithmeticOperators,\n LambdaOperators,\n]);\nexport const operators: ODataOperators<any> = new ODataOperators<any>();\n\nexport class ODataFunctions<T> {}\nexport interface ODataFunctions<T>\n extends StringAndCollectionFunctions<T>,\n CollectionFunctions<T>,\n StringFunctions<T>,\n DateAndTimeFunctions<T>,\n ArithmeticFunctions<T>,\n TypeFunctions<T>,\n GeoFunctions<T>,\n ConditionalFunctions<T> {}\n\napplyMixins(ODataFunctions, [\n StringAndCollectionFunctions,\n CollectionFunctions,\n StringFunctions,\n DateAndTimeFunctions,\n ArithmeticFunctions,\n TypeFunctions,\n GeoFunctions,\n ConditionalFunctions,\n]);\nexport const functions: ODataFunctions<any> = new ODataFunctions<any>();\n\nexport class ODataSyntax<T> {}\nexport interface ODataSyntax<T> extends ODataOperators<T>, ODataFunctions<T> {}\napplyMixins(ODataSyntax, [ODataOperators, ODataFunctions]);\n\nexport const syntax: ODataSyntax<any> = new ODataSyntax<any>();\n","import type { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport {\n Field,\n functions,\n ODataFunctions,\n ODataOperators,\n operators,\n Renderable,\n} from './syntax';\n\nexport class ComputeExpression<T> extends Expression<T> {\n names: string[];\n constructor({\n children,\n names,\n }: {\n children?: Renderable[];\n names?: string[];\n } = {}) {\n super({ children });\n this.names = names || [];\n }\n\n static e<T>() {\n return new ComputeExpression<T>();\n }\n\n static s<T extends object>(): T {\n return Field.factory<T>();\n }\n\n static compute<T extends object>(\n opts: (e: { s: T; e: () => ComputeExpression<T> }) => ComputeExpression<T>\n ): ComputeExpression<T> {\n return opts({\n s: ComputeExpression.s<T>(),\n e: ComputeExpression.e,\n }) as ComputeExpression<T>;\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[] | undefined;\n escape?: boolean | undefined;\n prefix?: string | undefined;\n } = {}): string {\n let children = this._children\n .map((n) => n.render({ aliases, escape, prefix }));\n return this.names.map((name, index) => `${children[index]} as ${name}`).join(',');\n }\n\n private _add(name: string, node: Renderable): ComputeExpression<T> {\n this.names.push(name);\n this._children.push(node);\n return this;\n }\n\n field<T extends object>(\n name: string,\n opts: (e: { o: ODataOperators<T>; f: ODataFunctions<T> }) => Renderable\n ): ComputeExpression<T> {\n const node = opts({\n o: operators as ODataOperators<T>,\n f: functions as ODataFunctions<T>,\n });\n return this._add(name, node);\n }\n}\n","import type { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport {\n Field,\n functions,\n Grouping,\n ODataFunctions,\n ODataOperators,\n operators,\n Renderable,\n} from './syntax';\nimport { syntax } from './syntax';\n\nexport type FilterConnector = 'and' | 'or';\n\nexport class FilterExpression<T> extends Expression<T> {\n private _connector: FilterConnector;\n private _negated: boolean;\n constructor({\n children,\n connector,\n negated,\n }: {\n children?: Renderable[];\n connector?: FilterConnector;\n negated?: boolean;\n } = {}) {\n super({ children });\n this._connector = connector || 'and';\n this._negated = negated || false;\n }\n\n static s<T extends object>(): T {\n return Field.factory<T>();\n }\n\n static e<T>(connector: FilterConnector = 'and') {\n return new FilterExpression<T>({ connector });\n }\n\n static filter<T extends object>(\n opts: (e: {\n s: T;\n e: (connector?: FilterConnector) => FilterExpression<T>;\n o: ODataOperators<T>;\n f: ODataFunctions<T>;\n }) => FilterExpression<T>\n ): FilterExpression<T> {\n return opts({\n s: FilterExpression.s<T>(),\n e: FilterExpression.e,\n o: operators as ODataOperators<T>,\n f: functions as ODataFunctions<T>,\n }) as FilterExpression<T>;\n }\n\n override toJSON() {\n return {\n children: this._children.map((c) => c.toJSON()),\n connector: this._connector,\n negated: this._negated,\n };\n }\n\n connector() {\n return this._connector;\n }\n\n negated() {\n return this._negated;\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n } = {}): string {\n let content = this._children\n .map((n) => n.render({ aliases, escape, prefix }))\n .join(` ${this._connector} `);\n if (this._negated) {\n content = `not (${content})`;\n }\n return content;\n }\n\n private _add(\n node: Renderable,\n connector?: FilterConnector\n ): FilterExpression<T> {\n if (connector !== undefined && this._connector !== connector) {\n let children: Renderable[] = [];\n if (this._children.length > 0) {\n if (this._children.length === 1) {\n children = [...this._children];\n } else {\n let exp = new FilterExpression<T>({\n children: this._children,\n connector: this._connector,\n negated: this._negated,\n });\n if (exp.length() > 1) {\n children.push(new Grouping(exp));\n } else {\n children.push(exp);\n }\n }\n }\n if (\n node instanceof FilterExpression &&\n (node.connector() === connector || node.length() === 1)\n ) {\n children = [...children, ...node.children()];\n } else {\n children.push(new Grouping(node));\n }\n this._connector = connector;\n this._children = children;\n } else if (\n node instanceof FilterExpression &&\n !node.negated() &&\n (node.connector() === connector || node.length() === 1)\n ) {\n this._children = [...this._children, ...node.children()];\n } else {\n this._children.push(\n node instanceof FilterExpression && !node.negated()\n ? new Grouping(node)\n : node\n );\n }\n return this;\n }\n\n or(exp: FilterExpression<T>): FilterExpression<T> {\n return this._add(exp, 'or');\n }\n\n and(exp: FilterExpression<T>): FilterExpression<T> {\n return this._add(exp, 'and');\n }\n\n not(exp: FilterExpression<T>): FilterExpression<T> {\n const notExp = new FilterExpression<T>({\n children: exp.children(),\n connector: exp.connector(),\n negated: true,\n });\n\n return this._add(notExp, this._connector);\n }\n\n eq(left: any, right: any, normalize?: boolean) {\n return this._add(operators.eq(left, right, normalize));\n }\n\n ne(left: any, right: any, normalize?: boolean) {\n return this._add(operators.ne(left, right, normalize));\n }\n\n gt(left: any, right: any, normalize?: boolean) {\n return this._add(operators.gt(left, right, normalize));\n }\n\n ge(left: any, right: any, normalize?: boolean) {\n return this._add(operators.ge(left, right, normalize));\n }\n\n lt(left: any, right: any, normalize?: boolean) {\n return this._add(operators.lt(left, right, normalize));\n }\n\n le(left: any, right: any, normalize?: boolean) {\n return this._add(operators.le(left, right, normalize));\n }\n\n has(left: any, right: any, normalize?: boolean) {\n return this._add(operators.has(left, right, normalize));\n }\n\n in(left: any, right: any, normalize?: boolean) {\n return this._add(operators.in(left, right, normalize));\n }\n\n contains(left: any, right: any, normalize?: boolean) {\n return this._add(functions.contains(left, right, normalize));\n }\n\n startsWith(left: any, right: any, normalize?: boolean) {\n return this._add(functions.startsWith(left, right, normalize));\n }\n\n endsWith(left: any, right: any, normalize?: boolean) {\n return this._add(functions.endsWith(left, right, normalize));\n }\n\n any<N extends object>(\n left: N[],\n opts: (e: {\n s: N;\n e: (connector?: FilterConnector) => FilterExpression<N>;\n }) => FilterExpression<N>,\n alias?: string\n ): FilterExpression<T> {\n const exp = opts({\n s: Field.factory<N>(),\n e: FilterExpression.e,\n }) as FilterExpression<N>;\n return this._add(syntax.any(left, exp, alias));\n }\n\n all<N extends object>(\n left: N[],\n opts: (e: {\n s: N;\n e: (connector?: FilterConnector) => FilterExpression<N>;\n }) => FilterExpression<N>,\n alias?: string\n ): FilterExpression<T> {\n const exp = opts({\n s: Field.factory<N>(),\n e: FilterExpression.e,\n }) as FilterExpression<N>;\n return this._add(syntax.all(left, exp, alias));\n }\n\n isof(type: string): FilterExpression<T>;\n isof(left: T, type: string): FilterExpression<T>;\n isof(left: any, type?: string): FilterExpression<T> {\n return this._add(syntax.isof(left, type));\n }\n}\n","import type { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport { render, Field, Renderable } from './syntax';\n\nexport class OrderByField implements Renderable {\n constructor(protected field: Renderable, protected order: 'asc' | 'desc') {}\n\n get [Symbol.toStringTag]() {\n return 'OrderByField';\n }\n\n toJSON() {\n return {\n field: this.field.toJSON(),\n order: this.order,\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n return `${render(this.field, { aliases, escape, prefix })} ${this.order}`;\n }\n}\n\nexport class OrderByExpression<T> extends Expression<T> {\n constructor({\n children,\n }: {\n children?: Renderable[];\n } = {}) {\n super({ children });\n }\n\n static e<T>() {\n return new OrderByExpression<T>();\n }\n\n static s<T extends object>(): T {\n return Field.factory<T>();\n }\n\n static orderBy<T extends object>(\n opts: (e: { s: T; e: () => OrderByExpression<T> }) => OrderByExpression<T>\n ): OrderByExpression<T> {\n return opts({\n s: OrderByExpression.s<T>(),\n e: OrderByExpression.e,\n }) as OrderByExpression<T>;\n }\n\n private _add(node: Renderable): OrderByExpression<T> {\n this._children.push(node);\n return this;\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[] | undefined;\n escape?: boolean | undefined;\n prefix?: string | undefined;\n } = {}): string {\n let content = this._children\n .map((n) => n.render({ aliases, escape, prefix }))\n .join(`,`);\n return content;\n }\n\n ascending(field: any) {\n return this._add(new OrderByField(field, 'asc'));\n }\n\n descending(field: any) {\n return this._add(new OrderByField(field, 'desc'));\n }\n}\n","import type { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport { render, Grouping, Renderable } from './syntax';\n\nexport type SearchConnector = 'AND' | 'OR';\n\nexport class SearchTerm implements Renderable {\n constructor(protected value: string) {}\n\n get [Symbol.toStringTag]() {\n return 'SearchTerm';\n }\n\n toJSON() {\n return {\n value: this.value,\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n return `${render(this.value, { aliases, escape, prefix })}`;\n }\n}\n\nexport class SearchExpression<T> extends Expression<T> {\n private _connector: SearchConnector;\n private _negated: boolean;\n constructor({\n children,\n connector,\n negated,\n }: {\n children?: Renderable[];\n connector?: SearchConnector;\n negated?: boolean;\n } = {}) {\n super({ children });\n this._connector = connector || 'AND';\n this._negated = negated || false;\n }\n\n static e<T>(connector: SearchConnector = 'AND') {\n return new SearchExpression<T>({ connector });\n }\n\n static search<T extends object>(\n opts: (e: {\n e: (connector?: SearchConnector) => SearchExpression<T>;\n }) => SearchExpression<T>\n ): SearchExpression<T> {\n return opts({\n e: SearchExpression.e,\n }) as SearchExpression<T>;\n }\n\n private _add(\n node: Renderable,\n connector?: SearchConnector\n ): SearchExpression<T> {\n if (connector !== undefined && this._connector !== connector) {\n let children: Renderable[] = [];\n if (this._children.length > 0) {\n if (this._children.length === 1) {\n children = [...this._children];\n } else {\n let exp = new SearchExpression<T>({\n children: this._children,\n connector: this._connector,\n negated: this._negated,\n });\n if (exp.length() > 1) {\n children.push(new Grouping(exp));\n } else {\n children.push(exp);\n }\n }\n }\n if (\n node instanceof SearchExpression &&\n (node.connector() === connector || node.length() === 1)\n ) {\n children = [...children, ...node.children()];\n } else {\n children.push(new Grouping(node));\n }\n this._connector = connector;\n this._children = children;\n } else if (\n node instanceof SearchExpression &&\n !node.negated() &&\n (node.connector() === connector || node.length() === 1)\n ) {\n this._children = [...this._children, ...node.children()];\n } else {\n this._children.push(\n node instanceof SearchExpression && !node.negated()\n ? new Grouping(node)\n : node\n );\n }\n return this;\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[] | undefined;\n escape?: boolean | undefined;\n prefix?: string | undefined;\n } = {}): string {\n let content = this._children\n .map((n) => n.render({ aliases, escape, prefix }))\n .join(` ${this._connector} `);\n return content;\n }\n\n override toJSON() {\n return {\n children: this._children.map((c) => c.toJSON()),\n connector: this._connector,\n negated: this._negated,\n };\n }\n\n connector() {\n return this._connector;\n }\n\n negated() {\n return this._negated;\n }\n\n or(exp: SearchExpression<T>): SearchExpression<T> {\n return this._add(exp, 'OR');\n }\n\n and(exp: SearchExpression<T>): SearchExpression<T> {\n return this._add(exp, 'AND');\n }\n\n not(exp: SearchExpression<T>): SearchExpression<T> {\n const notExp = new SearchExpression<T>({\n children: exp.children(),\n connector: exp.connector(),\n negated: true,\n });\n\n return this._add(notExp, this._connector);\n }\n\n term(value: any) {\n return this._add(new SearchTerm(value));\n }\n}\n","import type { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport { Field, render, Renderable } from './syntax';\n\nexport class ExpandField<T> implements Renderable {\n constructor(protected field: Renderable) {}\n\n get [Symbol.toStringTag]() {\n return 'ExpandField';\n }\n\n toJSON() {\n return {\n field: this.field.toJSON(),\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n return `${render(this.field, { aliases, escape, prefix })}`;\n }\n\n select() {}\n filter() {}\n levels() {}\n orderBy() {}\n top() {}\n skip() {}\n}\n\nexport class ExpandExpression<T> extends Expression<T> {\n constructor({\n children,\n }: {\n children?: Renderable[];\n } = {}) {\n super({ children });\n }\n\n static e<T>() {\n return new ExpandExpression<T>();\n }\n\n static s<T extends object>(): T {\n return Field.factory<T>();\n }\n\n static expand<T extends object>(\n opts: (e: { s: T; e: () => ExpandExpression<T> }) => ExpandExpression<T>\n ): ExpandExpression<T> {\n return opts({\n s: ExpandExpression.s<T>(),\n e: ExpandExpression.e,\n }) as ExpandExpression<T>;\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[] | undefined;\n escape?: boolean | undefined;\n prefix?: string | undefined;\n } = {}): string {\n return this._children\n .map((n) => n.render({ aliases, escape, prefix }))\n .join(',');\n }\n\n private _add(node: Renderable): ExpandExpression<T> {\n this._children.push(node);\n return this;\n }\n\n field<T extends object>(\n field: any,\n opts?: (e: ExpandField<keyof T>) => void\n ): ExpandExpression<T> {\n let node = new ExpandField(field);\n if (opts !== undefined) opts(node as ExpandField<keyof T>);\n return this._add(node);\n }\n}\n","import type { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport {\n Field,\n functions,\n ODataFunctions,\n ODataOperators,\n operators,\n Renderable,\n} from './syntax';\n\nexport class SelectExpression<T> extends Expression<T> {\n constructor({\n children,\n }: {\n children?: Renderable[];\n } = {}) {\n super({ children });\n }\n\n static e<T>() {\n return new SelectExpression<T>();\n }\n\n static s<T extends object>(): T {\n return Field.factory<T>();\n }\n\n static select<T extends object>(\n opts: (e: { s: T; e: () => SelectExpression<T> }) => SelectExpression<T>\n ): SelectExpression<T> {\n return opts({\n s: SelectExpression.s<T>(),\n e: SelectExpression.e,\n }) as SelectExpression<T>;\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[] | undefined;\n escape?: boolean | undefined;\n prefix?: string | undefined;\n } = {}): string {\n return this._children\n .map((n) => n.render({ aliases, escape, prefix }))\n .join(',');\n }\n\n private _add(node: Renderable): SelectExpression<T> {\n this._children.push(node);\n return this;\n }\n\n field(field: any): SelectExpression<T> {\n return this._add(field);\n }\n}\n","import { QueryOptionNames } from '../../types';\nimport { Objects, Types } from '../../utils';\nimport { alias, Expand, Filter, OrderBy, Select, Transform } from './builder';\nimport {\n ComputeExpression,\n FilterConnector,\n FilterExpression,\n OrderByExpression,\n SearchConnector,\n SearchExpression,\n ODataFunctions,\n ODataOperators,\n} from './expressions';\nimport { ExpandExpression } from './expressions/expand';\nimport { SelectExpression } from './expressions/select';\nimport type { ODataQueryArguments, ODataQueryOptions } from './options';\n\nexport class ODataQueryOptionHandler<T> {\n constructor(\n private o: { [name: string]: any },\n private n: QueryOptionNames\n ) {}\n\n get name() {\n return this.n;\n }\n\n toJSON() {\n return this.o[this.n];\n }\n\n empty() {\n return Types.isEmpty(this.o[this.n]);\n }\n\n //#region Primitive Value\n value(v?: any) {\n return (v !== undefined && (this.o[this.n] = v)) || this.o[this.n];\n }\n //#endregion\n\n //#region Array Value\n private assertArray(): any[] {\n if (!Types.isArray(this.o[this.n]))\n this.o[this.n] = this.o[this.n] !== undefined ? [this.o[this.n]] : [];\n return this.o[this.n];\n }\n\n push(value: any) {\n this.assertArray().push(value);\n }\n\n remove(value: any) {\n this.o[this.n] = this.assertArray().filter((v) => v !== value);\n // If only one... down to value\n if (this.o[this.n].length === 1) this.o[this.n] = this.o[this.n][0];\n }\n\n at(index: number) {\n return this.assertArray()[index];\n }\n //#endregion\n\n //#region HashMap Value\n private assertObject(create: boolean): { [name: string]: any } {\n if (!Types.isArray(this.o[this.n]) && Types.isPlainObject(this.o[this.n])) {\n return this.o[this.n];\n }\n let arr = this.assertArray();\n let obj = arr.find((v) => Types.isPlainObject(v));\n if (!obj && create) {\n obj = {};\n arr.push(obj);\n }\n return obj;\n }\n\n set(path: string, value: any) {\n let obj = this.assertObject(true);\n Objects.set(obj, path, value);\n }\n\n get(path: string, def?: any): any {\n let obj = this.assertObject(false) || {};\n return Objects.get(obj, path, def);\n }\n\n unset(path: string) {\n let obj = this.assertObject(true);\n Objects.unset(obj, path);\n\n if (Types.isArray(this.o[this.n])) {\n this.o[this.n] = this.o[this.n].filter((v: any) => !Types.isEmpty(v));\n if (this.o[this.n].length === 1) this.o[this.n] = this.o[this.n][0];\n }\n }\n\n has(path: string) {\n let obj = this.assertObject(false) || {};\n return Objects.has(obj, path);\n }\n\n assign(values: { [attr: string]: any }) {\n let obj = this.assertObject(true);\n return Objects.merge(obj, values);\n }\n //#endregion\n\n clear() {\n delete this.o[this.n];\n }\n}\n\nexport class ODataQueryOptionsHandler<T> {\n constructor(protected options: ODataQueryOptions<T>) {}\n\n /**\n * Create a new odata alias parameter\n * @link https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_ParameterAliases\n * @param value The value of the alias\n * @param name The name of the alias\n * @returns The alias\n */\n alias(value: any, name?: string) {\n return alias(value, name);\n }\n\n select(\n opts: (e: { s: T; e: () => SelectExpression<T> }) => SelectExpression<T>\n ): SelectExpression<T>;\n select(opts: Select<T>): ODataQueryOptionHandler<T>;\n select(): ODataQueryOptionHandler<T>;\n select(opts?: any): any {\n if (Types.isFunction(opts)) {\n return this.options.expression(\n QueryOptionNames.select,\n SelectExpression.select(opts)\n );\n }\n return this.options.option<Select<T>>(QueryOptionNames.select, opts);\n }\n\n expand(\n opts: (e: { s: T; e: () => ExpandExpression<T> }) => ExpandExpression<T>\n ): ExpandExpression<T>;\n expand(opts: Expand<T>): ODataQueryOptionHandler<T>;\n expand(): ODataQueryOptionHandler<T>;\n expand(opts?: any): any {\n if (Types.isFunction(opts)) {\n return this.options.expression(\n QueryOptionNames.expand,\n ExpandExpression.expand(opts)\n );\n }\n return this.options.option<Expand<T>>(QueryOptionNames.expand, opts);\n }\n\n /**\n * @link https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_SystemQueryOptioncompute\n */\n compute(\n opts: (e: {\n s: T;\n e: () => ComputeExpression<T>;\n o: ODataOperators<T>;\n f: ODataFunctions<T>;\n }) => ComputeExpression<T>\n ): ComputeExpression<T>;\n compute(opts: string): ODataQueryOptionHandler<T>;\n compute(): ODataQueryOptionHandler<T>;\n compute(opts?: any): any {\n if (Types.isFunction(opts)) {\n return this.options.expression(\n QueryOptionNames.compute,\n ComputeExpression.compute(opts)\n );\n }\n return this.options.option<string>(QueryOptionNames.compute, opts);\n }\n\n /**\n * @link https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_SystemQueryOptionformat\n */\n format(opts: string): ODataQueryOptionHandler<T>;\n format(): ODataQueryOptionHandler<T>;\n format(opts?: string): any {\n return this.options.option<string>(QueryOptionNames.format, opts);\n }\n\n transform(opts: Transform<T>): ODataQueryOptionHandler<T>;\n transform(): ODataQueryOptionHandler<T>;\n transform(opts?: Transform<T>): any {\n return this.options.option<Transform<T>>(QueryOptionNames.transform, opts);\n }\n\n search(\n opts: (e: {\n e: (connector: SearchConnector) => SearchExpression<T>;\n }) => SearchExpression<T>\n ): SearchExpression<T>;\n search(opts: string): ODataQueryOptionHandler<T>;\n search(): ODataQueryOptionHandler<T>;\n search(opts?: any): any {\n if (Types.isFunction(opts)) {\n return this.options.expression(\n QueryOptionNames.search,\n SearchExpression.search(opts)\n );\n }\n return this.options.option<string>(QueryOptionNames.search, opts);\n }\n\n filter(\n opts: (e: {\n s: T;\n e: (connector?: FilterConnector) => FilterExpression<T>;\n o: ODataOperators<T>;\n f: ODataFunctions<T>;\n }) => FilterExpression<T>\n ): FilterExpression<T>;\n filter(opts: Filter<T>): ODataQueryOptionHandler<T>;\n filter(): ODataQueryOptionHandler<T>;\n filter(opts?: any): any {\n if (Types.isFunction(opts)) {\n return this.options.expression(\n QueryOptionNames.filter,\n FilterExpression.filter(opts)\n );\n }\n return this.options.option<Filter<T>>(QueryOptionNames.filter, opts);\n }\n\n orderBy(\n opts: (e: { s: T; e: () => OrderByExpression<T> }) => OrderByExpression<T>\n ): OrderByExpression<T>;\n orderBy(opts: OrderBy<T>): ODataQueryOptionHandler<T>;\n orderBy(): ODataQueryOptionHandler<T>;\n orderBy(opts?: any): any {\n if (Types.isFunction(opts)) {\n return this.options.expression(\n QueryOptionNames.orderBy,\n OrderByExpression.orderBy(opts)\n );\n }\n return this.options.option<OrderBy<T>>(QueryOptionNames.orderBy, opts);\n }\n\n top(opts: number): ODataQueryOptionHandler<T>;\n top(): ODataQueryOptionHandler<T>;\n top(opts?: number): any {\n return this.options.option<number>(QueryOptionNames.top, opts);\n }\n\n skip(opts: number): ODataQueryOptionHandler<T>;\n skip(): ODataQueryOptionHandler<T>;\n skip(opts?: number): any {\n return this.options.option<number>(QueryOptionNames.skip, opts);\n }\n\n skiptoken(opts: string): ODataQueryOptionHandler<T>;\n skiptoken(): ODataQueryOptionHandler<T>;\n skiptoken(opts?: string): any {\n return this.options.option<string>(QueryOptionNames.skiptoken, opts);\n }\n\n paging({\n skip,\n skiptoken,\n top,\n }: { skip?: number; skiptoken?: string; top?: number } = {}) {\n if (skiptoken !== undefined) this.skiptoken(skiptoken);\n else if (skip !== undefined) this.skip(skip);\n if (top !== undefined) this.top(top);\n }\n\n clearPaging() {\n this.skip().clear();\n this.top().clear();\n this.skiptoken().clear();\n }\n\n apply(query: ODataQueryArguments<T>) {\n if (query.select !== undefined) {\n this.select(query.select);\n }\n if (query.expand !== undefined) {\n this.expand(query.expand);\n }\n if (query.transform !== undefined) {\n this.transform(query.transform);\n }\n if (query.search !== undefined) {\n this.search(query.search);\n }\n if (query.filter !== undefined) {\n this.filter(query.filter);\n }\n if (query.orderBy !== undefined) {\n this.orderBy(query.orderBy);\n }\n this.paging(query);\n }\n}\n","import { QueryOptionNames } from '../../types';\nimport { Objects, Types } from '../../utils';\nimport {\n buildPathAndQuery,\n Expand,\n Filter,\n OrderBy,\n QueryCustomType,\n Select,\n Transform,\n} from './builder';\nimport { Expression } from './expressions';\nimport { ODataQueryOptionHandler } from './handlers';\n\nexport type ODataQueryArguments<T> = {\n [QueryOptionNames.select]?: Select<T>;\n [QueryOptionNames.filter]?: Filter<T>;\n [QueryOptionNames.search]?: string;\n [QueryOptionNames.compute]?: string;\n [QueryOptionNames.transform]?: Transform<T>;\n [QueryOptionNames.orderBy]?: OrderBy<T>;\n [QueryOptionNames.top]?: number;\n [QueryOptionNames.skip]?: number;\n [QueryOptionNames.skiptoken]?: string;\n [QueryOptionNames.expand]?: Expand<T>;\n [QueryOptionNames.format]?: string;\n};\n\nexport class ODataQueryOptions<T> {\n options: { [name: string]: any };\n\n constructor(options?: { [name: string]: any }) {\n this.options = options || {};\n }\n\n // Params\n pathAndParams(escape: boolean = false): [string, { [name: string]: any }] {\n let aliases: QueryCustomType[] = [];\n let options = [\n QueryOptionNames.select,\n QueryOptionNames.filter,\n QueryOptionNames.search,\n QueryOptionNames.compute,\n QueryOptionNames.transform,\n QueryOptionNames.orderBy,\n QueryOptionNames.top,\n QueryOptionNames.skip,\n QueryOptionNames.skiptoken,\n QueryOptionNames.expand,\n QueryOptionNames.format,\n ]\n .filter((key) => !Types.isEmpty(this.options[key]))\n .reduce((acc, key) => {\n let value = this.options[key];\n if (Types.rawType(value) === 'Expression') {\n value = value.render(aliases);\n }\n return Object.assign(acc, { [key]: value });\n }, {});\n\n return buildPathAndQuery<any>({ ...options, aliases, escape });\n }\n\n toString(): string {\n const [path, params] = this.pathAndParams();\n return (\n path +\n Object.entries(params)\n .filter(([, value]) => !Types.isEmpty(value))\n .map(([key, value]) => `${key}=${value}`)\n .join('&')\n );\n }\n\n toJSON() {\n return Object.keys(this.options).reduce((acc, key) => {\n let value = this.options[key];\n if (Types.rawType(value) === 'Expression') {\n value = value.toJSON();\n }\n return Object.assign(acc, { [key]: value });\n }, {});\n }\n\n toQueryArguments(): ODataQueryArguments<T> {\n return {\n select: this.options[QueryOptionNames.select],\n expand: this.options[QueryOptionNames.expand],\n transform: this.options[QueryOptionNames.transform],\n compute: this.options[QueryOptionNames.compute],\n search: this.options[QueryOptionNames.search],\n filter: this.options[QueryOptionNames.filter],\n orderBy: this.options[QueryOptionNames.orderBy],\n top: this.options[QueryOptionNames.top],\n skip: this.options[QueryOptionNames.skip],\n skiptoken: this.options[QueryOptionNames.skiptoken],\n } as ODataQueryArguments<T>;\n }\n\n clone<O>() {\n const options = Object.keys(this.options).reduce((acc, key) => {\n let value = this.options[key];\n if (Types.rawType(value) !== 'Expression') {\n value = Objects.clone(value);\n }\n return Object.assign(acc, { [key]: value });\n }, {});\n return new ODataQueryOptions<O>(options);\n }\n\n // Set Renderable\n expression(name: QueryOptionNames, exp: Expression<T>) {\n return (this.options[name] = exp);\n }\n\n // Option Handler\n option<O>(name: QueryOptionNames, opts?: O) {\n if (opts !== undefined) this.options[name] = opts;\n return new ODataQueryOptionHandler<O>(this.options, name);\n }\n\n // Query Options tools\n has(name: QueryOptionNames) {\n return this.options[name] !== undefined;\n }\n\n remove(...names: QueryOptionNames[]) {\n names.forEach((name) => this.option(name).clear());\n }\n\n keep(...names: QueryOptionNames[]) {\n this.options = Object.keys(this.options)\n .filter((k) => names.indexOf(k as QueryOptionNames) !== -1)\n .reduce((acc, k) => Object.assign(acc, { [k]: this.options[k] }), {});\n }\n\n // Clear\n clear() {\n this.options = {};\n }\n}\n","import { PathSegmentNames } from '../../types';\nimport { Types } from '../../utils';\nimport { EntityKey } from '../resource';\nimport type { ODataPathSegments, ODataSegment } from './segments';\n\nexport class SegmentHandler {\n constructor(private segment: ODataSegment) {}\n get name() {\n return this.segment.name;\n }\n type(value?: string) {\n if (value !== undefined) this.segment.type = value;\n return this.segment.type;\n }\n path(value?: string) {\n if (value !== undefined) this.segment.path = value;\n return this.segment.path;\n }\n key<T>(value?: EntityKey<T>) {\n if (value !== undefined) this.segment.key = value;\n return this.segment.key as EntityKey<T>;\n }\n hasKey() {\n return !Types.isEmpty(this.segment.key);\n }\n clearKey() {\n delete this.segment.key;\n }\n parameters<T>(value?: T) {\n if (value !== undefined) this.segment.parameters = value;\n return this.segment.parameters as T;\n }\n hasParameters() {\n return !Types.isEmpty(this.segment.parameters);\n }\n clearParameters() {\n delete this.segment.parameters;\n }\n}\n\nexport class ODataPathSegmentsHandler<T> {\n constructor(protected segments: ODataPathSegments) {}\n entitySet() {\n return this.segments.get(PathSegmentNames.entitySet);\n }\n singleton() {\n return this.segments.get(PathSegmentNames.singleton);\n }\n action() {\n return this.segments.get(PathSegmentNames.action);\n }\n function() {\n return this.segments.get(PathSegmentNames.function);\n }\n keys(values?: (EntityKey<T> | undefined)[]) {\n return this.segments.keys(values);\n }\n property() {\n return this.segments.get(PathSegmentNames.property);\n }\n navigationProperty() {\n return this.segments.get(PathSegmentNames.navigationProperty);\n }\n}\n","import { PATH_SEPARATOR } from '../../constants';\nimport { PathSegmentNames } from '../../types';\nimport { Objects } from '../../utils';\nimport { buildPathAndQuery, raw } from '../query';\nimport { EntityKey } from '../resource';\nimport { SegmentHandler } from './handlers';\n\nexport type ODataSegment = {\n name: PathSegmentNames;\n path: string;\n type?: string;\n key?: any;\n parameters?: any;\n};\n\nfunction pathSegmentsBuilder(\n segment: ODataSegment,\n escape: boolean = false\n): [string, { [name: string]: any }] {\n if (segment.name === PathSegmentNames.function) {\n let [path, params] = segment.parameters\n ? buildPathAndQuery({\n func: { [segment.path]: segment.parameters },\n escape,\n })\n : buildPathAndQuery({ func: segment.path, escape });\n if (path.startsWith(PATH_SEPARATOR)) {\n path = path.slice(1);\n }\n return [path, params];\n } else {\n let key = segment.key;\n // HACK: Check guid string\n if (\n typeof key === 'string' &&\n /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(\n key\n )\n ) {\n key = raw(key);\n }\n let [path, params] = key ? buildPathAndQuery({ key, escape }) : ['', {}];\n return [segment.path + path, params];\n }\n}\n\nexport class ODataPathSegments {\n private _segments: ODataSegment[];\n\n constructor(segments?: ODataSegment[]) {\n this._segments = segments || [];\n }\n\n pathAndParams(escape: boolean = false): [string, { [name: string]: any }] {\n const result = this._segments.reduce(\n (acc, segment) => {\n const [path, params] = pathSegmentsBuilder(segment, escape);\n acc.paths.push(path);\n acc.params = Object.assign(acc.params, params);\n return acc;\n },\n { paths: [] as string[], params: {} as { [name: string]: any } }\n );\n return [result.paths.join(PATH_SEPARATOR), result.params];\n }\n\n types({ key = false }: { key?: boolean } = {}): string[] {\n return this.segments({ key })\n .map((s) => s.type())\n .filter((t) => t !== undefined) as string[];\n }\n\n keys(values?: (EntityKey<any> | undefined)[]) {\n const segments = this.segments({ key: true });\n if (values !== undefined) {\n segments.forEach((segment, index) => {\n const key = values[index];\n if (key === undefined) {\n segment.clearKey();\n } else {\n segment.key(key);\n }\n });\n }\n return segments.map((s) => s.key() as EntityKey<any> | undefined);\n }\n\n toString(): string {\n const [path, params] = this.pathAndParams();\n return (\n path +\n Object.entries(params)\n .filter(([, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('&')\n );\n }\n\n toJSON() {\n return this._segments.map((s) => {\n let json = {\n name: s.name as string,\n path: s.path,\n } as any;\n if (s.type !== undefined) json.type = s.type;\n if (s.key !== undefined) json.key = s.key;\n if (s.parameters !== undefined) json.parameters = s.parameters;\n return json;\n });\n }\n\n clone() {\n const segments = Objects.clone(this._segments);\n return new ODataPathSegments(segments);\n }\n\n find(predicate: (segment: ODataSegment) => boolean) {\n //Backward Find\n return [...this._segments].reverse().find(predicate);\n }\n\n segments({ key = false }: { key?: boolean } = {}) {\n let segments = [...this._segments];\n if (key)\n segments = segments.filter(\n (s) =>\n [\n PathSegmentNames.entitySet,\n PathSegmentNames.navigationProperty,\n PathSegmentNames.property,\n ].indexOf(s.name) !== -1\n );\n return segments.map((s) => new SegmentHandler(s));\n }\n\n first({ key = false }: { key?: boolean } = {}) {\n const segments = this.segments({ key });\n return segments.length > 0 ? segments[0] : undefined;\n }\n\n last({ key = false }: { key?: boolean } = {}) {\n const segments = this.segments({ key });\n return segments.length > 0 ? segments[segments.length - 1] : undefined;\n }\n\n add(name: string, path: string) {\n const segment = { name, path } as ODataSegment;\n this._segments.push(segment);\n return new SegmentHandler(segment);\n }\n\n get(name: string) {\n let segment = this.find((s) => s.name === name);\n if (segment === undefined)\n throw Error(`No Segment for name ${name} was found`);\n return new SegmentHandler(segment);\n }\n}\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\nimport { ODataApi } from '../api';\nimport {\n $BATCH,\n $QUERY,\n ACCEPT,\n IF_MATCH_HEADER,\n IF_NONE_MATCH_HEADER,\n PREFER,\n TEXT_PLAIN,\n} from '../constants';\nimport { QueryOptionNames } from '../types';\nimport { Http } from '../utils';\nimport { ODataResource } from './resource';\n\nexport class ODataRequest<T> {\n readonly api: ODataApi;\n readonly observe: 'events' | 'response';\n readonly reportProgress?: boolean;\n readonly withCredentials?: boolean;\n readonly bodyQueryOptions: QueryOptionNames[];\n readonly fetchPolicy:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n readonly resource: ODataResource<T>;\n private readonly _responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n private readonly _method: string;\n private readonly _body: any | null;\n private readonly _headers: HttpHeaders;\n private readonly _params: HttpParams;\n private readonly _path: string;\n private readonly _queryBody: boolean;\n\n constructor(init: {\n method: string;\n api: ODataApi;\n resource: ODataResource<T>;\n body: any;\n observe: 'events' | 'response';\n etag?: string;\n headers?: HttpHeaders | { [header: string]: string | string[] };\n reportProgress?: boolean;\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n withCredentials?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n }) {\n this._method = init.method;\n this.resource = init.resource;\n\n this.api = init.api;\n this.reportProgress = init.reportProgress;\n this.observe = init.observe;\n\n // Response Type\n this._responseType = init.responseType;\n\n // The Body\n this._body = init.body !== undefined ? init.body : null;\n if (this._body !== null) this._body = this.resource.serialize(this._body);\n\n this.withCredentials =\n init.withCredentials === undefined\n ? this.api.options.withCredentials\n : init.withCredentials;\n this.fetchPolicy = init.fetchPolicy || this.api.options.fetchPolicy;\n this.bodyQueryOptions =\n init.bodyQueryOptions || this.api.options.bodyQueryOptions;\n\n // The Path and Params from resource\n const [resourcePath, resourceParams] = this.resource.pathAndParams();\n this._path = resourcePath;\n\n //#region Headers\n const customHeaders: { [name: string]: string | string[] } = {};\n if (typeof init.etag === 'string') {\n if (\n this.api.options.etag.ifMatch &&\n ['PUT', 'PATCH', 'DELETE'].indexOf(this._method) !== -1\n )\n customHeaders[IF_MATCH_HEADER] = init.etag;\n else if (\n this.api.options.etag.ifNoneMatch &&\n ['GET'].indexOf(this._method) !== -1\n )\n customHeaders[IF_NONE_MATCH_HEADER] = init.etag;\n }\n\n const accept = [];\n // Metadata\n if (this.api.options.accept?.metadata !== undefined)\n accept.push(`odata.metadata=${this.api.options.accept?.metadata}`);\n // IEEE754\n if (this.api.options.accept?.ieee754Compatible !== undefined)\n accept.push(\n `IEEE754Compatible=${this.api.options.accept?.ieee754Compatible}`\n );\n // streaming\n if (this.api.options.accept?.streaming !== undefined)\n accept.push(`streaming=${this.api.options.accept?.streaming}`);\n // ExponentialDecimals\n if (this.api.options.accept?.exponentialDecimals !== undefined)\n accept.push(\n `ExponentialDecimals=${this.api.options.accept?.exponentialDecimals}`\n );\n if (accept.length > 0)\n customHeaders[ACCEPT] = [\n `application/json;${accept.join(';')}`,\n 'text/plain',\n '*/*',\n ];\n\n const prefer = [];\n // Return\n if (\n this.api.options.prefer?.return !== undefined &&\n ['POST', 'PUT', 'PATCH'].indexOf(this._method) !== -1\n )\n prefer.push(`return=${this.api.options.prefer?.return}`);\n // MaxPageSize\n if (\n this.api.options.prefer?.maxPageSize !== undefined &&\n ['GET'].indexOf(this._method) !== -1\n )\n prefer.push(`odata.maxpagesize=${this.api.options.prefer?.maxPageSize}`);\n // Annotations\n if (\n this.api.options.prefer?.includeAnnotations !== undefined &&\n ['GET'].indexOf(this._method) !== -1\n )\n prefer.push(\n `odata.include-annotations=${this.api.options.prefer?.includeAnnotations}`\n );\n if (\n this.api.options.prefer?.continueOnError === true &&\n ['POST'].indexOf(this._method) !== -1\n )\n prefer.push(`odata.continue-on-error`);\n if (prefer.length > 0) customHeaders[PREFER] = prefer;\n this._headers = Http.mergeHttpHeaders(\n this.api.options.headers,\n customHeaders,\n init.headers || {}\n );\n //#endregion\n\n //#region Params\n const customParams: { [name: string]: string | string[] } = {};\n if (\n ['POST', 'PUT', 'PATCH'].indexOf(this._method) !== -1 &&\n '$select' in resourceParams\n ) {\n customParams['$select'] = resourceParams['$select'];\n }\n if (['POST'].indexOf(this._method) !== -1 && '$expand' in resourceParams) {\n customParams['$expand'] = resourceParams['$expand'];\n }\n if (['GET'].indexOf(this._method) !== -1) {\n Object.assign(customParams, resourceParams);\n }\n\n const params = Http.mergeHttpParams(\n this.api.options.params,\n customParams,\n init.params || {}\n );\n\n this._params =\n this._responseType === 'entity'\n ? Http.withoutHttpParams(params, [\n '$filter',\n '$orderby',\n '$count',\n '$skip',\n '$top',\n ])\n : params;\n //#endregion\n\n this._queryBody =\n this._method === 'GET' &&\n this.bodyQueryOptions.length > 0 &&\n this.bodyQueryOptions.some((name) => this._params.has(`$${name}`));\n }\n\n get responseType(): 'arraybuffer' | 'blob' | 'json' | 'text' {\n return this._responseType &&\n ['property', 'entity', 'entities'].indexOf(this._responseType) !== -1\n ? 'json'\n : this._responseType === 'value'\n ? 'text'\n : <'arraybuffer' | 'blob' | 'json' | 'text'>this._responseType;\n }\n\n get path() {\n return this._queryBody ? `${this._path}/${$QUERY}` : this._path;\n }\n\n get method() {\n return this._queryBody ? 'POST' : this._method;\n }\n\n get body() {\n if (this._queryBody) {\n let [, bodyParams] = Http.splitHttpParams(\n this._params,\n this.bodyQueryOptions.map((name) => `$${name}`)\n );\n return bodyParams.toString();\n } else {\n return this._body;\n }\n }\n\n get params() {\n if (this._queryBody) {\n let [queryParams] = Http.splitHttpParams(\n this._params,\n this.bodyQueryOptions.map((name) => `$${name}`)\n );\n return queryParams;\n } else {\n return this._params;\n }\n }\n\n get headers() {\n if (this._queryBody) {\n return Http.mergeHttpHeaders(this._headers, { CONTENT_TYPE: TEXT_PLAIN });\n } else {\n return this._headers;\n }\n }\n\n get pathWithParams() {\n let path = this._path;\n if (this._params.keys().length > 0) {\n path = `${path}?${this._params}`;\n }\n return path;\n }\n\n get url() {\n return `${this.api.serviceRootUrl}${this._path}`;\n }\n\n get urlWithParams() {\n return `${this.api.serviceRootUrl}${this.pathWithParams}`;\n }\n\n isBatch() {\n return this._path.endsWith($BATCH);\n }\n\n isFetch() {\n return ['GET'].indexOf(this._method) !== -1;\n }\n\n isMutate() {\n return ['PUT', 'PATCH', 'POST', 'DELETE'].indexOf(this._method) !== -1;\n }\n}\n","import { AnnotationConfig } from '../types';\n\nexport class ODataAnnotation {\n term: string;\n string?: string;\n bool?: boolean;\n int?: number;\n permissions?: string[];\n properties?: string[];\n\n constructor(annot: AnnotationConfig) {\n this.term = annot.term;\n Object.assign(this, annot);\n }\n}\n\nexport class ODataAnnotatable {\n annotations: ODataAnnotation[];\n constructor(config: { annotations?: AnnotationConfig[] }) {\n this.annotations = (config.annotations || []).map(\n (annot) => new ODataAnnotation(annot)\n );\n }\n\n /**\n * Find an annotation inside the annotatable.\n * @param predicate Function that returns true if the annotation match.\n * @returns The annotation that matches the predicate.\n */\n findAnnotation(predicate: (annot: ODataAnnotation) => boolean) {\n return this.annotations.find(predicate);\n }\n\n /**\n * Find an annotation inside the annotatable and return its value.\n * @param term The term of the annotation to find.\n * @returns The value of the annotation.\n */\n annotatedValue<T>(term: string | RegExp): T | undefined {\n const reg = term instanceof RegExp ? term : new RegExp(`^${term}$`);\n const annot = this.findAnnotation((a) => reg.test(a.term));\n if (!annot) {\n return undefined;\n }\n return (annot.string ||\n annot.bool ||\n annot.int ||\n annot.permissions ||\n annot.properties) as any;\n }\n}\n","import { AnnotationConfig } from '../types';\nimport { Strings } from '../utils';\nimport { ODataAnnotatable } from './annotation';\nimport { ODataSchema } from './schema';\n\nexport class ODataSchemaElement extends ODataAnnotatable {\n name: string;\n schema: ODataSchema;\n\n constructor(\n config: { annotations?: AnnotationConfig[]; name: string },\n schema: ODataSchema\n ) {\n super(config);\n this.schema = schema;\n this.name = config.name;\n }\n\n get api() {\n return this.schema.api;\n }\n\n /**\n * Create a nicer looking title.\n * Titleize is meant for creating pretty output.\n * @param term The term of the annotation to find.\n * @returns The titleized string.\n */\n titleize(term?: string | RegExp): string {\n return (term && this.annotatedValue(term)) || Strings.titleCase(this.name);\n }\n\n /**\n * Returns a full type of the structured type including the namespace/alias.\n * @param alias Use the alias of the namespace instead of the namespace.\n * @returns The string representation of the type.\n */\n type({ alias = false }: { alias?: boolean } = {}) {\n return `${alias ? this.schema.alias : this.schema.namespace}.${this.name}`;\n }\n\n /**\n * Returns a boolean indicating if the structured type is of the given type.\n * @param type String representation of the type\n * @returns True if the callable is type of the given type\n */\n isTypeOf(type: string): boolean {\n var names = [`${this.schema.namespace}.${this.name}`];\n if (this.schema.alias) names.push(`${this.schema.alias}.${this.name}`);\n return names.indexOf(type) !== -1;\n }\n\n /**\n * Returns a boolean indicating if the structured type is a sub type of the given type.\n * @param type String representation of the type\n * @returns True if the callable is type of the given type\n */\n isSubtypeOf(schema: ODataSchemaElement): boolean {\n if (this.isTypeOf(schema.type())) return true;\n return false;\n }\n}\n","//https://github.com/niklasvh/base64-arraybuffer\nconst chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const ArrayBuffers = {\n toArrayBuffer(v: string): ArrayBuffer {\n var bufferLength = v.length * 0.75,\n len = v.length,\n i,\n p = 0,\n encoded1,\n encoded2,\n encoded3,\n encoded4;\n\n if (v[v.length - 1] === '=') {\n bufferLength--;\n if (v[v.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[v.charCodeAt(i)];\n encoded2 = lookup[v.charCodeAt(i + 1)];\n encoded3 = lookup[v.charCodeAt(i + 2)];\n encoded4 = lookup[v.charCodeAt(i + 3)];\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return arraybuffer;\n },\n toString(v: ArrayBuffer): string {\n var bytes = new Uint8Array(v),\n i,\n len = bytes.length,\n base64 = '';\n\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n },\n};\n","import { raw } from '../../resources/query';\nimport { Parser, StructuredTypeFieldOptions } from '../../types';\nimport { ArrayBuffers } from '../../utils/arraybuffers';\nimport { Duration, Durations } from '../../utils/durations';\n\n// Core EdmTypeParserBuilder\nconst EdmParser = <T>(\n _d: (v: any, o: StructuredTypeFieldOptions) => T,\n _s: (v: any, o: StructuredTypeFieldOptions) => any,\n _e: (v: any, o: StructuredTypeFieldOptions) => any\n): Parser<T | T[]> => ({\n deserialize(value: any, options: StructuredTypeFieldOptions): T | T[] {\n return Array.isArray(value)\n ? value.map((v) => _d(v, options))\n : _d(value, options);\n },\n serialize(value: any, options: StructuredTypeFieldOptions): any {\n return Array.isArray(value)\n ? value.map((v) => _s(v, options))\n : _s(value, options);\n },\n encode(value: any, options: StructuredTypeFieldOptions): any {\n return Array.isArray(value)\n ? value.map((v) => _e(v, options))\n : _e(value, options);\n },\n});\n\nconst Identity = (v: any) => v;\nconst toNumber = (v: any) => Number(v);\nconst toString = (v: any) => v.toString();\nconst toBoolean = (v: any) => Boolean(v);\nconst toDate = (v: any) => new Date(v);\n\nexport const EDM_PARSERS: { [type: string]: Parser<any> } = {\n //Edm.Guid 16-byte (128-bit) unique identifier\n 'Edm.Guid': EdmParser<string>(Identity, Identity, (v: string) => raw(v)),\n //Edm.Int16 Signed 16-bit integer\n 'Edm.Int16': EdmParser<number>(toNumber, toNumber, toNumber),\n //Edm.String Sequence of UTF-8 characters\n 'Edm.String': EdmParser<string>(toString, toString, toString),\n //Edm.Boolean Binary-valued logic\n 'Edm.Boolean': EdmParser<boolean>(toBoolean, toBoolean, toBoolean),\n //Edm.Byte Unsigned 8-bit integer\n 'Edm.Byte': EdmParser<number>(toNumber, toNumber, toNumber),\n //Edm.SByte Signed 8-bit integer\n 'Edm.SByte': EdmParser<number>(toNumber, toNumber, toNumber),\n //Edm.Int32 Signed 16-bit integer\n 'Edm.Int32': EdmParser<number>(toNumber, toNumber, toNumber),\n //Edm.Int64 Signed 16-bit integer\n 'Edm.Int64': EdmParser<number>(toNumber, toNumber, toNumber),\n //Edm.Date Date without a time-zone offset\n 'Edm.Date': EdmParser<Date>(\n (v: any) => new Date(`${v}T00:00:00.000Z`),\n (v: any) => toDate(v).toISOString().substring(0, 10),\n (v: any) => toDate(v).toISOString().substring(0, 10)\n ),\n //Edm.TimeOfDay Clock time 00:00-23:59:59.999999999999\n 'Edm.TimeOfDay': EdmParser<Date>(\n (v: any) => new Date(`1970-01-01T${v}Z`),\n (v: any) => toDate(v).toISOString().substring(11, 23),\n (v: any) => toDate(v).toISOString().substring(11, 23)\n ),\n //Edm.DateTimeOffset Date and time with a time-zone offset, no leap seconds\n 'Edm.DateTimeOffset': EdmParser<Date>(\n toDate,\n (v: any) => toDate(v).toISOString(),\n (v: any) => toDate(v).toISOString()\n ),\n //Edm.Duration Signed duration in days, hours, minutes, and (sub)seconds\n 'Edm.Duration': EdmParser<Duration>(\n (v: any) => Durations.toDuration(v),\n (v: Duration) => Durations.toString(v),\n (v: Duration) => Durations.toString(v)\n ),\n //Edm.Decimal Numeric values with fixed precision and scale\n 'Edm.Decimal': EdmParser<number>(\n (v: any, o: StructuredTypeFieldOptions) => {\n if (typeof v === 'string' && o.ieee754Compatible) {\n return parseFloat(v);\n }\n return v;\n },\n (v: number, o: StructuredTypeFieldOptions) => {\n if (o.ieee754Compatible) {\n return parseFloat(v.toPrecision(o.field.precision)).toFixed(\n o.field.scale\n );\n }\n return v;\n },\n (v: number, o: StructuredTypeFieldOptions) => {\n if (o.ieee754Compatible) {\n return parseFloat(v.toPrecision(o.field.precision)).toFixed(\n o.field.scale\n );\n }\n return v;\n }\n ),\n //Edm.Double IEEE 754 binary64 floating-point number (15-17 decimal digits)\n 'Edm.Double': EdmParser<number>(\n (v: any) => (v === 'INF' ? Infinity : (v as number)),\n (v: number) => (v === Infinity ? 'INF' : v),\n (v: number) => (v === Infinity ? 'INF' : v)\n ),\n //Edm.Single IEEE 754 binary32 floating-point number (6-9 decimal digits)\n 'Edm.Single': EdmParser<number>(\n (v: any) => (v === 'INF' ? Infinity : (v as number)),\n (v: number) => (v === Infinity ? 'INF' : v),\n (v: number) => (v === Infinity ? 'INF' : v)\n ),\n //Edm.Binary Binary data\n 'Edm.Binary': EdmParser<ArrayBuffer>(\n (v: string) => ArrayBuffers.toArrayBuffer(v),\n (v: ArrayBuffer) => ArrayBuffers.toString(v),\n (v: ArrayBuffer) => ArrayBuffers.toString(v)\n ),\n};\n\n/*\nEdm.Stream Binary data stream\nEdm.Geography Abstract base type for all Geography types\nEdm.GeographyPoint A point in a round-earth coordinate system\nEdm.GeographyLineString Line string in a round-earth coordinate system\nEdm.GeographyPolygon Polygon in a round-earth coordinate system\nEdm.GeographyMultiPoint Collection of points in a round-earth coordinate system\nEdm.GeographyMultiLineString Collection of line strings in a round-earth coordinate system\nEdm.GeographyMultiPolygon Collection of polygons in a round-earth coordinate system\nEdm.GeographyCollection Collection of arbitrary Geography values\nEdm.Geometry Abstract base type for all Geometry types\nEdm.GeometryPoint Point in a flat-earth coordinate system\nEdm.GeometryLineString Line string in a flat-earth coordinate system\nEdm.GeometryPolygon Polygon in a flat-earth coordinate system\nEdm.GeometryMultiPoint Collection of points in a flat-earth coordinate system\nEdm.GeometryMultiLineString Collection of line strings in a flat-earth coordinate system\nEdm.GeometryMultiPolygon Collection of polygons in a flat-earth coordinate system\nEdm.GeometryCollection Collection of arbitrary Geometry values\n*/\n","import {\n VERSION_3_0,\n VERSION_2_0,\n VERSION_4_0,\n $COUNT,\n $INLINECOUNT,\n} from './constants';\nimport { ODataMetadataType } from './types';\n\nexport const COLLECTION = /Collection\\(([\\w\\.]+)\\)/;\nexport const PROPERTY = /([\\w\\d\\-_]+)\\(([\\'\\w\\d\\-_=]+)\\)/;\nexport const EXPAND = /([\\w\\d\\-_]+)\\(([\\w\\d\\,\\(\\)]+)\\)/;\n\nexport type ODataContext = {\n serviceRootUrl?: string;\n metadataUrl?: string;\n entitySet?: string;\n key?: string;\n expand?: string;\n type?: string;\n property?: string;\n entity?: boolean;\n};\n\nexport interface ODataVersionHelper {\n VALUE: string;\n ODATA_ANNOTATION_PREFIX: string;\n ODATA_FUNCTION_PREFIX: string;\n ODATA_ID: string;\n ODATA_COUNT: string;\n ODATA_ETAG: string;\n ODATA_CONTEXT: string;\n ODATA_MEDIA_ETAG: string;\n entity(value: { [name: string]: any }): any;\n entities(value: { [name: string]: any }): any;\n property(value: { [name: string]: any }): any;\n annotations(value: { [name: string]: any }): { [name: string]: any };\n attributes(value: { [name: string]: any }, metadata: ODataMetadataType): any;\n //Get or Set Id\n id(value: { [name: string]: any }, id?: string): string | undefined;\n //Get or Set Etag\n etag(value: { [name: string]: any }, etag?: string): string | undefined;\n //Get or Set Type\n type(value: { [name: string]: any }, type?: string): string | undefined;\n count(value: { [name: string]: any }): number | undefined;\n context(value: { [name: string]: any }): ODataContext;\n functions(value: { [name: string]: any }): { [name: string]: any };\n properties(value: { [name: string]: any }): { [name: string]: any };\n mediaEtag(value: { [name: string]: any }): string | undefined;\n metadataEtag(value: { [name: string]: any }): string | undefined;\n nextLink(value: { [name: string]: any }): string | undefined;\n readLink(value: { [name: string]: any }): string | undefined;\n mediaReadLink(value: { [name: string]: any }): string | undefined;\n editLink(value: { [name: string]: any }): string | undefined;\n mediaEditLink(value: { [name: string]: any }): string | undefined;\n mediaContentType(value: { [name: string]: any }): string | undefined;\n deltaLink(value: { [name: string]: any }): string | undefined;\n countParam(): { [name: string]: string };\n}\n\nconst ODataVersionBaseHelper = <any>{\n entity(data: { [name: string]: any }) {\n return data;\n },\n entities(data: { [name: string]: any }) {\n return data[this.VALUE];\n },\n property(data: { [name: string]: any }) {\n return this.VALUE in data ? data[this.VALUE] : data;\n },\n functions(value: { [name: string]: any }) {\n return Object.keys(value)\n .filter((k) => k.startsWith(this.ODATA_FUNCTION_PREFIX))\n .reduce(\n (acc, key) => Object.assign(acc, { [key.substr(1)]: value[key] }),\n {}\n );\n },\n properties(value: { [name: string]: any }) {\n return Object.keys(value)\n .filter((k) => k.indexOf(this.ODATA_ANNOTATION_PREFIX) > 0)\n .reduce((acc: { [name: string]: any }, key) => {\n let name = key.substr(0, key.indexOf(this.ODATA_ANNOTATION_PREFIX));\n if (!(name in acc)) {\n acc[name] = {};\n }\n Object.assign(acc[name], {\n [key.substr(key.indexOf(this.ODATA_ANNOTATION_PREFIX))]: value[key],\n });\n return acc;\n }, {});\n },\n id(value: { [name: string]: any }, id?: string) {\n if (id !== undefined) value[this.ODATA_ID] = id;\n return this.ODATA_ID in value\n ? (value[this.ODATA_ID] as string)\n : undefined;\n },\n etag(value: { [name: string]: any }, etag?: string) {\n if (etag !== undefined) value[this.ODATA_ETAG] = etag;\n return this.ODATA_ETAG in value\n ? (value[this.ODATA_ETAG] as string)\n : undefined;\n },\n type(value: { [name: string]: any }, type?: string) {\n if (type !== undefined) value[this.ODATA_TYPE] = `#${type}`;\n if (!(this.ODATA_TYPE in value)) return undefined;\n const t = value[this.ODATA_TYPE].substr(1);\n const matches = COLLECTION.exec(t);\n if (matches)\n return matches[1].indexOf('.') === -1 ? `Edm.${matches[1]}` : matches[1];\n return t;\n },\n mediaEtag(value: { [name: string]: any }) {\n return this.ODATA_MEDIA_ETAG in value\n ? decodeURIComponent(value[this.ODATA_MEDIA_ETAG] as string)\n : undefined;\n },\n metadataEtag(value: { [name: string]: any }) {\n return this.ODATA_METADATA_ETAG in value\n ? decodeURIComponent(value[this.ODATA_METADATA_ETAG] as string)\n : undefined;\n },\n count(value: { [name: string]: any }) {\n return this.ODATA_COUNT in value\n ? Number(value[this.ODATA_COUNT])\n : undefined;\n },\n annotations(value: { [name: string]: any }) {\n return Object.keys(value)\n .filter(\n (key) =>\n key.indexOf(this.ODATA_ANNOTATION_PREFIX) !== -1 ||\n key.startsWith(this.ODATA_FUNCTION_PREFIX)\n )\n .reduce((acc, key) => Object.assign(acc, { [key]: value[key] }), {});\n },\n attributes(value: { [name: string]: any }, metadata: ODataMetadataType) {\n return Object.entries(value)\n .filter(\n ([k]) =>\n metadata === 'none' ||\n (metadata === 'minimal' &&\n (k.indexOf(this.ODATA_ANNOTATION_PREFIX) === -1 ||\n k.startsWith(this.ODATA_ANNOTATION_PREFIX)) &&\n !k.startsWith(this.ODATA_FUNCTION_PREFIX)) ||\n (metadata === 'full' &&\n k.indexOf(this.ODATA_ANNOTATION_PREFIX) === -1 &&\n !k.startsWith(this.ODATA_FUNCTION_PREFIX))\n )\n .reduce((acc, e) => ({ ...acc, [e[0]]: e[1] }), {});\n },\n nextLink(value: { [name: string]: any }) {\n return this.ODATA_NEXTLINK in value\n ? decodeURIComponent(value[this.ODATA_NEXTLINK] as string)\n : undefined;\n },\n readLink(value: { [name: string]: any }) {\n return this.ODATA_READLINK in value\n ? decodeURIComponent(value[this.ODATA_READLINK] as string)\n : undefined;\n },\n mediaReadLink(value: { [name: string]: any }) {\n return this.ODATA_MEDIA_READLINK in value\n ? decodeURIComponent(value[this.ODATA_MEDIA_READLINK] as string)\n : undefined;\n },\n editLink(value: { [name: string]: any }) {\n return this.ODATA_EDITLINK in value\n ? decodeURIComponent(value[this.ODATA_EDITLINK] as string)\n : undefined;\n },\n mediaEditLink(value: { [name: string]: any }) {\n return this.ODATA_MEDIA_EDITLINK in value\n ? decodeURIComponent(value[this.ODATA_MEDIA_EDITLINK] as string)\n : undefined;\n },\n deltaLink(value: { [name: string]: any }) {\n return this.ODATA_DELTALINK in value\n ? decodeURIComponent(value[this.ODATA_DELTALINK] as string)\n : undefined;\n },\n mediaContentType(value: { [name: string]: any }) {\n return this.ODATA_MEDIA_CONTENTTYPE in value\n ? decodeURIComponent(value[this.ODATA_MEDIA_CONTENTTYPE] as string)\n : undefined;\n },\n};\n\nexport const ODataHelper = {\n //#region Version 4.0\n [VERSION_4_0]: <ODataVersionHelper>Object.assign({}, ODataVersionBaseHelper, {\n VALUE: 'value',\n ODATA_ANNOTATION_PREFIX: '@odata',\n ODATA_FUNCTION_PREFIX: '#',\n //odata.id: the ID of the entity\n ODATA_ID: '@odata.id',\n //odata.count: the total count of a collection of entities or collection of entity references, if requested.\n ODATA_COUNT: '@odata.count',\n //odata.context: the context URL for a collection, entity, primitive value, or service document.\n ODATA_CONTEXT: '@odata.context',\n //odata.etag: the ETag of the entity\n ODATA_ETAG: '@odata.etag',\n ODATA_METADATA_ETAG: '@odata.metadataEtag',\n //odata.type: the type of the containing {[name: string]: any} or targeted property if the type of the {[name: string]: any} or targeted property cannot be heuristically determined\n ODATA_TYPE: '@odata.type',\n //odata.nextLink: the next link of a collection with partial results\n ODATA_NEXTLINK: '@odata.nextLink',\n //odata.deltaLink: the delta link for obtaining changes to the result, if requested\n ODATA_DELTALINK: '@odata.deltaLink',\n //odata.readLink: the link used to read the entity, if the edit link cannot be used to read the entity\n ODATA_READLINK: '@odata.readLink',\n //odata.editLink: the link used to edit/update the entity, if the entity is updatable and the odata.id does not represent a URL that can be used to edit the entity\n ODATA_EDITLINK: '@odata.editLink',\n //odata.associationLink: the link used to describe the relationship between this entity and related entities\n ODATA_ASSOCIATIONLINK: '@odata.associationLink',\n //odata.navigationLink: the link used to retrieve the values of a navigation property\n ODATA_NAVIGATIONLINK: '@odata.navigationLink',\n //Media entities and stream properties may in addition contain the following annotations:\n //odata.mediaEtag: the ETag of the stream, as appropriate\n ODATA_MEDIA_ETAG: '@odata.mediaEtag',\n //odata.mediaContentType: the content type of the stream\n ODATA_MEDIA_CONTENTTYPE: '@odata.mediaContentType',\n //odata.mediaReadLink: the link used to read the stream\n ODATA_MEDIA_READLINK: '@odata.mediaReadLink',\n //odata.mediaEditLink: the link used to edit/update the stream\n ODATA_MEDIA_EDITLINK: '@odata.mediaEditLink',\n //http://nb-mdp-dev01:57970/$metadata#recursos/$entity\n //http://nb-mdp-dev01:57970/$metadata#categorias\n //http://nb-mdp-dev01:57970/$metadata#juzgados\n //http://nb-mdp-dev01:57970/$metadata#Collection(SIU.Recursos.RecursoEntry)\n //http://nb-mdp-dev01:57970/$metadata#categorias/$entity\n //http://nb-mdp-dev01:57970/$metadata#categorias(children(children(children(children(children(children(children(children(children(children()))))))))))/$entity\n //http://nb-mdp-dev01:57970/$metadata#recursos/SIU.Documentos.Documento/$entity\n //http://nb-mdp-dev01:57970/$metadata#SIU.Api.Infrastructure.Storage.Backend.SiuUrls\n context(value: { [name: string]: any }) {\n let ctx: ODataContext = {};\n if (this.ODATA_CONTEXT in value) {\n const str = value[this.ODATA_CONTEXT] as string;\n let index = str.indexOf('$metadata');\n ctx.serviceRootUrl = str.substr(0, index);\n index = str.indexOf('#');\n ctx.metadataUrl = str.substr(0, index);\n const parts = str.substr(index + 1).split('/');\n const col = COLLECTION.exec(parts[0]);\n if (col) {\n ctx.type = col[1];\n } else if (parts[0].indexOf('.') !== -1) {\n ctx.type = parts[0];\n } else {\n const property = parts[0].match(PROPERTY);\n const expand = parts[0].match(EXPAND);\n ctx.entity = parts[1] === '$entity';\n if (property) {\n ctx.entitySet = property[1];\n ctx.key = property[2];\n ctx.property = parts[1];\n } else if (expand) {\n ctx.entitySet = expand[1];\n ctx.expand = expand[2];\n } else {\n ctx.entitySet = parts[0];\n }\n }\n }\n return ctx;\n },\n countParam() {\n return { [$COUNT]: 'true' };\n },\n }),\n //#endregion\n //#region Version 3.0\n [VERSION_3_0]: <ODataVersionHelper>Object.assign({}, ODataVersionBaseHelper, {\n ODATA_ANNOTATION_PREFIX: 'odata.',\n ODATA_FUNCTION_PREFIX: '',\n ODATA_ID: 'odata.id',\n ODATA_ETAG: 'odata.etag',\n ODATA_CONTEXT: 'odata.metadata',\n ODATA_NEXTLINK: 'odata.nextLink',\n ODATA_TYPE: 'odata.type',\n ODATA_COUNT: 'odata.count',\n VALUE: 'value',\n context(value: { [name: string]: any }) {\n let ctx: ODataContext = {};\n if (this.ODATA_CONTEXT in value) {\n const str = value[this.ODATA_CONTEXT] as string;\n let index = str.indexOf('$metadata');\n ctx.serviceRootUrl = str.substr(0, index);\n index = str.indexOf('#');\n ctx.metadataUrl = str.substr(0, index);\n const parts = str.substr(index + 1).split('/');\n ctx.entitySet = parts[0];\n }\n return ctx;\n },\n countParam() {\n return { [$INLINECOUNT]: 'allpages' };\n },\n }),\n //#endregion\n //#region Version 2.0\n [VERSION_2_0]: <ODataVersionHelper>Object.assign({}, ODataVersionBaseHelper, {\n ODATA_ID: 'id',\n ODATA_ETAG: 'etag',\n ODATA_ANNOTATION: '__metadata',\n ODATA_NEXTLINK: '__next',\n ODATA_COUNT: '__count',\n ODATA_DEFERRED: '__deferred',\n ODATA_TYPE: 'type',\n VALUE: 'results',\n annotations(value: { [name: string]: any }) {\n if (this.ODATA_ANNOTATION in value) return value[this.ODATA_ANNOTATION];\n return value;\n },\n attributes(value: { [name: string]: any }, metadata: ODataMetadataType) {\n return value;\n },\n countParam() {\n return { [$INLINECOUNT]: 'allpages' };\n },\n }),\n //#endregion\n};\n","import {\n ApiOptions,\n FetchPolicy,\n ODataMetadataType,\n ODataVersion,\n Options,\n OptionsHelper,\n QueryOptionNames,\n} from './types';\nimport {\n DEFAULT_FETCH_POLICY,\n DEFAULT_STRIP_METADATA,\n DEFAULT_VERSION,\n} from './constants';\n\nimport { ODataHelper } from './helper';\n\nexport class ODataApiOptions implements ApiOptions, OptionsHelper {\n /**\n * Default OData version\n */\n version: ODataVersion;\n /**\n * Send enum as string in the request\n */\n stringAsEnum?: boolean;\n /**\n * Strip metadata from the response\n */\n stripMetadata: ODataMetadataType;\n /**\n * Cache fetch policy\n */\n fetchPolicy: FetchPolicy;\n /**\n * Extra params to be sent in the request\n */\n params: { [param: string]: string | string[] };\n /**\n * Extra headers to be sent in the request\n */\n headers: { [param: string]: string | string[] };\n /**\n * Http request with credentials\n */\n withCredentials?: boolean;\n /**\n * Send query options in the request body\n */\n bodyQueryOptions: QueryOptionNames[];\n /**\n * Customize accept header with OData options\n * @link http://docs.oasis-open.org/odata/odata-json-format/v4.01/odata-json-format-v4.01.html#sec_RequestingtheJSONFormat\n */\n accept?: {\n exponentialDecimals?: boolean;\n ieee754Compatible?: boolean;\n metadata?: ODataMetadataType;\n streaming?: boolean;\n };\n etag: {\n /**\n * @link http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398229\n */\n ifMatch: boolean;\n /**\n * @link http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398230\n */\n ifNoneMatch: boolean;\n } = { ifMatch: true, ifNoneMatch: false };\n prefer?: {\n /**\n * @link http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398238\n */\n maxPageSize?: number;\n /**\n * @link http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398240\n */\n return?: 'representation' | 'minimal';\n /**\n * @link http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398236\n */\n continueOnError?: boolean;\n /**\n * @link http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398237\n */\n includeAnnotations?: string;\n };\n deleteRefBy: 'path' | 'id';\n\n constructor(config: ApiOptions) {\n this.version = config.version || DEFAULT_VERSION;\n this.stringAsEnum = config.stringAsEnum;\n this.params = config.params || {};\n this.headers = config.headers || {};\n this.withCredentials = config.withCredentials;\n this.stripMetadata = config.stripMetadata || DEFAULT_STRIP_METADATA;\n this.fetchPolicy = config.fetchPolicy || DEFAULT_FETCH_POLICY;\n this.bodyQueryOptions = config.bodyQueryOptions || [];\n this.accept = config.accept;\n Object.assign(this.etag, config.etag || {});\n this.prefer = config.prefer;\n this.deleteRefBy = config.deleteRefBy || 'path';\n }\n\n get helper() {\n return ODataHelper[this.version];\n }\n}\n\nexport class ODataParserOptions implements OptionsHelper {\n version: ODataVersion;\n stringAsEnum?: boolean;\n\n constructor(config: Options) {\n this.version = config.version || DEFAULT_VERSION;\n this.stringAsEnum = config.stringAsEnum;\n }\n\n get helper() {\n return ODataHelper[this.version];\n }\n}\n","import { ODataParserOptions } from '../../options';\nimport { raw } from '../../resources/query';\nimport {\n EnumTypeConfig,\n EnumTypeFieldConfig,\n Options,\n OptionsHelper,\n Parser,\n} from '../../types';\nimport { Enums, Strings } from '../../utils';\nimport { ODataAnnotatable } from '../annotation';\n\nexport class ODataEnumTypeFieldParser extends ODataAnnotatable {\n name: string;\n value: number;\n\n constructor(name: string, field: EnumTypeFieldConfig) {\n super(field);\n this.name = name;\n this.value = field.value;\n }\n\n titleize(term?: string | RegExp): string {\n return (term && this.annotatedValue(term)) || this.name;\n }\n}\n\nexport class ODataEnumTypeParser<T>\n extends ODataAnnotatable\n implements Parser<T>\n{\n name: string;\n namespace: string;\n alias?: string;\n flags?: boolean;\n members: { [name: string]: number } | { [value: number]: string };\n fields: ODataEnumTypeFieldParser[];\n optionsHelper?: OptionsHelper;\n\n constructor(config: EnumTypeConfig<T>, namespace: string, alias?: string) {\n super(config);\n this.name = config.name;\n this.namespace = namespace;\n this.alias = alias;\n this.flags = config.flags;\n this.members = config.members;\n this.fields = Object.entries(config.fields).map(\n ([name, f]) => new ODataEnumTypeFieldParser(name, f)\n );\n }\n\n /**\n * Create a nicer looking title.\n * Titleize is meant for creating pretty output.\n * @param term The term of the annotation to find.\n * @returns The titleized string.\n */\n ttitelize(term?: string | RegExp): string {\n return (term && this.annotatedValue(term)) || Strings.titleCase(this.name);\n }\n\n configure({ options }: { options: OptionsHelper }) {\n this.optionsHelper = options;\n }\n\n isTypeOf(type: string) {\n var names = [`${this.namespace}.${this.name}`];\n if (this.alias) names.push(`${this.alias}.${this.name}`);\n return names.indexOf(type) !== -1;\n }\n\n // Deserialize\n deserialize(value: string, options?: Options): T {\n // string -> number\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.flags) {\n return Enums.toValues(this.members, value).reduce(\n (acc, v) => acc | v,\n 0\n ) as any;\n } else {\n return Enums.toValue(this.members, value) as any;\n }\n }\n\n // Serialize\n serialize(value: T, options?: Options): string {\n // Enum are string | number\n // string | number -> string\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.flags) {\n const names = Enums.toNames(this.members, value);\n return !parserOptions?.stringAsEnum\n ? `${this.namespace}.${this.name}'${names.join(', ')}'`\n : names.join(', ');\n } else {\n const name = Enums.toName(this.members, value);\n return !parserOptions?.stringAsEnum\n ? `${this.namespace}.${this.name}'${name}'`\n : name;\n }\n }\n\n //Encode\n encode(value: T, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n const serialized = this.serialize(value, parserOptions);\n return parserOptions?.stringAsEnum\n ? raw(`'${serialized}'`)\n : raw(serialized);\n }\n\n // Json Schema\n toJsonSchema() {\n let property = <any>{\n title: this.name,\n type: 'string',\n };\n property.enum = this.fields.map((f) => f.name);\n return property;\n }\n\n validate(\n member: string | number,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}\n ): string[] | undefined {\n if (this.flags) {\n let members = Enums.toValues(this.members, member);\n return members.some((member) => !(member in this.members))\n ? ['mismatch']\n : undefined;\n } else {\n return !(member in this.members) ? ['mismatch'] : undefined;\n }\n }\n}\n","import { COMPUTED, DESCRIPTION, LONG_DESCRIPTION } from '../../constants';\nimport { ODataParserOptions } from '../../options';\nimport { raw } from '../../resources/query';\nimport {\n NONE_PARSER,\n Options,\n OptionsHelper,\n Parser,\n StructuredTypeConfig,\n StructuredTypeFieldConfig,\n StructuredTypeFieldOptions,\n} from '../../types';\nimport { Objects, Strings, Types } from '../../utils';\nimport { ODataAnnotatable } from '../annotation';\nimport { ODataEnumTypeParser } from './enum-type';\n\n// JSON SCHEMA\ntype JsonSchemaSelect<T> = Array<keyof T>;\ntype JsonSchemaCustom<T> = {\n [P in keyof T]?: (\n schema: any,\n field: ODataStructuredTypeFieldParser<T[P]>\n ) => any;\n};\ntype JsonSchemaExpand<T> = { [P in keyof T]?: JsonSchemaOptions<T[P]> };\ntype JsonSchemaRequired<T> = { [P in keyof T]?: boolean };\nexport type JsonSchemaOptions<T> = {\n select?: JsonSchemaSelect<T>;\n custom?: JsonSchemaCustom<T>;\n expand?: JsonSchemaExpand<T>;\n required?: JsonSchemaRequired<T>;\n};\n\nexport class ODataEntityTypeKey {\n name: string;\n alias?: string;\n constructor({ name, alias }: { name: string; alias?: string }) {\n this.name = name;\n this.alias = alias;\n }\n}\n\nexport class ODataReferential {\n property: string;\n referencedProperty: string;\n constructor({\n property,\n referencedProperty,\n }: {\n property: string;\n referencedProperty: string;\n }) {\n this.property = property;\n this.referencedProperty = referencedProperty;\n }\n}\n\nexport class ODataStructuredTypeFieldParser<T>\n extends ODataAnnotatable\n implements Parser<T>\n{\n name: string;\n private structuredType: ODataStructuredTypeParser<any>;\n type: string;\n private parser: Parser<T>;\n default?: any;\n maxLength?: number;\n collection: boolean;\n nullable: boolean;\n navigation: boolean;\n precision?: number;\n scale?: number;\n referentials: ODataReferential[];\n optionsHelper?: OptionsHelper;\n\n constructor(\n name: string,\n structuredType: ODataStructuredTypeParser<any>,\n field: StructuredTypeFieldConfig\n ) {\n super(field);\n this.name = name;\n this.structuredType = structuredType;\n this.type = field.type;\n this.parser = NONE_PARSER;\n this.referentials = (field.referentials || []).map(\n (referential) => new ODataReferential(referential)\n );\n this.default = field.default;\n this.maxLength = field.maxLength;\n this.nullable = field.nullable !== undefined ? field.nullable : true;\n this.collection = Boolean(field.collection);\n this.navigation = Boolean(field.navigation);\n this.precision = field.precision;\n this.scale = field.scale;\n }\n\n validate(\n value: any,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}\n ):\n | { [name: string]: any }\n | { [name: string]: any }[]\n | string[]\n | undefined {\n let errors;\n if (this.collection && Array.isArray(value)) {\n errors = value.map((v) => this.validate(v, { method, navigation })) as {\n [name: string]: any[];\n }[];\n } else if (\n (this.isStructuredType() &&\n typeof value === 'object' &&\n value !== null) ||\n (this.navigation && value !== undefined)\n ) {\n errors =\n this.structured().validate(value, { method, navigation }) ||\n ({} as { [name: string]: any[] });\n } else if (\n this.isEnumType() &&\n (typeof value === 'string' || typeof value === 'number')\n ) {\n errors = this.enum().validate(value, { method, navigation });\n } else {\n // IsEdmType\n const computed = this.annotatedValue<boolean>(COMPUTED);\n errors = [];\n if (\n !this.nullable &&\n (value === null || (value === undefined && method !== 'modify')) && // Is null or undefined without patch?\n !(computed && method === 'create') // Not (Is Computed field and create) ?\n ) {\n errors.push(`required`);\n }\n if (\n this.maxLength !== undefined &&\n typeof value === 'string' &&\n value.length > this.maxLength\n ) {\n errors.push(`maxlength`);\n }\n }\n return !Types.isEmpty(errors) ? errors : undefined;\n }\n\n //#region Deserialize\n private parse(\n parser: ODataStructuredTypeParser<T>,\n value: any,\n options?: OptionsHelper\n ): any {\n const type = Types.isPlainObject(value)\n ? options?.helper.type(value)\n : undefined;\n if (type !== undefined) {\n return parser\n .childParser((c) => c.isTypeOf(type))\n .deserialize(value, options);\n }\n return parser.deserialize(value, options);\n }\n\n deserialize(value: any, options?: Options): T {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.parser instanceof ODataStructuredTypeParser) {\n const parser = this.parser as ODataStructuredTypeParser<T>;\n return Array.isArray(value)\n ? value.map((v) => this.parse(parser, v, parserOptions))\n : this.parse(parser, value, parserOptions);\n }\n return this.parser.deserialize(value, {\n field: this,\n ...parserOptions,\n } as StructuredTypeFieldOptions);\n }\n //#endregion\n\n //#region Serialize\n private toJson(\n parser: ODataStructuredTypeParser<T>,\n value: any,\n options?: OptionsHelper\n ): any {\n const type = Types.isPlainObject(value)\n ? options?.helper.type(value)\n : undefined;\n if (type !== undefined) {\n return parser\n .childParser((c) => c.isTypeOf(type))\n .serialize(value, options);\n }\n return parser.serialize(value, options);\n }\n\n serialize(value: T, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.parser instanceof ODataStructuredTypeParser) {\n const parser = this.parser as ODataStructuredTypeParser<T>;\n return Array.isArray(value)\n ? (value as any[]).map((v) => this.toJson(parser, v, parserOptions))\n : this.toJson(parser, value, parserOptions);\n }\n return this.parser.serialize(value, {\n field: this,\n ...parserOptions,\n } as StructuredTypeFieldOptions);\n }\n //#endregion\n\n //#region Encode\n encode(value: T, options?: Options): string {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return this.parser.encode(value, {\n field: this,\n ...parserOptions,\n } as StructuredTypeFieldOptions);\n }\n //#endregion\n\n configure({\n parserForType,\n options,\n }: {\n parserForType: (type: string) => Parser<any>;\n options: OptionsHelper;\n }) {\n this.optionsHelper = options;\n this.parser = parserForType(this.type);\n if (this.default !== undefined) {\n this.default = this.deserialize(this.default, options);\n }\n }\n\n //#region Json Schema\n // https://json-schema.org/\n toJsonSchema(options: JsonSchemaOptions<T> = {}) {\n let schema: any =\n this.parser instanceof ODataStructuredTypeFieldParser ||\n this.parser instanceof ODataStructuredTypeParser ||\n this.parser instanceof ODataEnumTypeParser\n ? this.parser.toJsonSchema(options)\n : ({ title: this.name, type: 'object' } as any);\n\n if (\n [\n 'Edm.String',\n 'Edm.Date',\n 'Edm.TimeOfDay',\n 'Edm.DateTimeOffset',\n 'Edm.Guid',\n 'Edm.Binary',\n ].indexOf(this.type) !== -1\n ) {\n schema.type = 'string';\n if (this.type === 'Edm.Date') schema.format = 'date';\n else if (this.type === 'Edm.TimeOfDay') schema.format = 'time';\n else if (this.type === 'Edm.DateTimeOffset') schema.format = 'date-time';\n else if (this.type === 'Edm.Guid')\n schema.pattern =\n '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$';\n else if (this.type === 'Edm.Binary') schema.contentEncoding = 'base64';\n else if (this.type === 'Edm.String' && this.maxLength)\n schema.maxLength = this.maxLength;\n } else if (\n ['Edm.Int64', 'Edm.Int32', 'Edm.Int16', 'Edm.Byte', 'Edm.SByte'].indexOf(\n this.type\n ) !== -1\n ) {\n //TODO: Range\n schema.type = 'integer';\n } else if (['Edm.Decimal', 'Edm.Double'].indexOf(this.type) !== -1) {\n schema.type = 'number';\n } else if (['Edm.Boolean'].indexOf(this.type) !== -1) {\n schema.type = 'boolean';\n }\n if (this.default) schema.default = this.default;\n if (this.nullable) schema.type = [schema.type, 'null'];\n if (this.collection)\n schema = {\n type: 'array',\n items: schema,\n additionalItems: false,\n };\n return schema;\n }\n //#endregion\n\n isKey() {\n return (\n this.structuredType.keys?.find((k) => k.name === this.name) !== undefined\n );\n }\n\n hasReferentials() {\n return this.referentials.length !== 0;\n }\n\n isEdmType() {\n return this.type.startsWith('Edm.');\n }\n\n isEnumType() {\n return this.parser instanceof ODataEnumTypeParser;\n }\n\n enum() {\n if (!this.isEnumType()) throw new Error('Field are not EnumType');\n return this.parser as ODataEnumTypeParser<T>;\n }\n\n isStructuredType() {\n return this.parser instanceof ODataStructuredTypeParser;\n }\n\n structured() {\n if (!this.isStructuredType())\n throw new Error('Field are not StrucuturedType');\n return this.parser as ODataStructuredTypeParser<T>;\n }\n}\n\nexport class ODataStructuredTypeParser<T>\n extends ODataAnnotatable\n implements Parser<T>\n{\n name: string;\n namespace: string;\n open: boolean;\n children: ODataStructuredTypeParser<any>[] = [];\n alias?: string;\n base?: string;\n parent?: ODataStructuredTypeParser<any>;\n keys?: ODataEntityTypeKey[];\n fields: ODataStructuredTypeFieldParser<any>[];\n optionsHelper?: OptionsHelper;\n\n constructor(\n config: StructuredTypeConfig<T>,\n namespace: string,\n alias?: string\n ) {\n super(config);\n this.name = config.name;\n this.base = config.base;\n this.open = config.open || false;\n this.namespace = namespace;\n this.alias = alias;\n if (Array.isArray(config.keys))\n this.keys = config.keys.map((key) => new ODataEntityTypeKey(key));\n this.fields = Object.entries<StructuredTypeFieldConfig>(\n config.fields as { [P in keyof T]: StructuredTypeFieldConfig }\n ).map(\n ([name, config]) => new ODataStructuredTypeFieldParser(name, this, config)\n );\n }\n\n /**\n * Create a nicer looking title.\n * Titleize is meant for creating pretty output.\n * @param term The term of the annotation to find.\n * @returns The titleized string.\n */\n titleize(term?: string | RegExp): string {\n return (term && this.annotatedValue(term)) || Strings.titleCase(this.name);\n }\n\n isTypeOf(type: string) {\n var names = [`${this.namespace}.${this.name}`];\n if (this.alias) names.push(`${this.alias}.${this.name}`);\n return names.indexOf(type) !== -1;\n }\n\n isSubtypeOf(type: string): boolean {\n if (this.isTypeOf(type)) return true;\n if (this.parent) return this.parent.isSubtypeOf(type);\n return false;\n }\n\n findChildParser(\n predicate: (p: ODataStructuredTypeParser<any>) => boolean\n ): ODataStructuredTypeParser<any> | undefined {\n if (predicate(this)) return this;\n let match: ODataStructuredTypeParser<any> | undefined;\n for (let ch of this.children) {\n match = ch.findChildParser(predicate);\n if (match !== undefined) break;\n }\n return match;\n }\n\n childParser(\n predicate: (p: ODataStructuredTypeParser<any>) => boolean\n ): Parser<any> {\n return this.findChildParser(predicate) || NONE_PARSER;\n }\n\n // Deserialize\n deserialize(value: any, options?: Options): T {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.parent !== undefined)\n value = this.parent.deserialize(value, parserOptions);\n const fields = this.fields.filter(\n (f) =>\n f.name in value && value[f.name] !== undefined && value[f.name] !== null\n );\n return {\n ...value,\n ...fields.reduce(\n (acc, f) => ({\n ...acc,\n [f.name]: f.deserialize(value[f.name], parserOptions),\n }),\n {}\n ),\n };\n }\n\n // Serialize\n serialize(value: T, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.parent !== undefined)\n value = this.parent.serialize(value, parserOptions);\n const fields = this.fields.filter(\n (f) =>\n f.name in value &&\n (value as any)[f.name] !== undefined &&\n (value as any)[f.name] !== null\n );\n return {\n ...value,\n ...fields.reduce(\n (acc, f) => ({\n ...acc,\n [f.name]: f.serialize((value as any)[f.name], parserOptions),\n }),\n {}\n ),\n };\n }\n\n // Encode\n encode(value: T, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return raw(JSON.stringify(this.serialize(value, parserOptions)));\n }\n\n configure({\n parserForType,\n options,\n }: {\n parserForType: (type: string) => Parser<any>;\n options: OptionsHelper;\n }) {\n this.optionsHelper = options;\n if (this.base) {\n const parent = parserForType(this.base) as ODataStructuredTypeParser<any>;\n parent.children.push(this);\n this.parent = parent;\n }\n this.fields.forEach((f) => f.configure({ parserForType, options }));\n }\n\n resolveKey(value: any): any {\n let key = this.parent?.resolveKey(value) || {};\n if (Array.isArray(this.keys) && this.keys.length > 0) {\n for (var k of this.keys) {\n let v = value as any;\n let structured = this as ODataStructuredTypeParser<any> | undefined;\n let field: ODataStructuredTypeFieldParser<any> | undefined;\n for (let name of k.name.split('/')) {\n if (structured === undefined) break;\n field = structured.fields.find((f) => f.name === name);\n if (field !== undefined) {\n v = Types.isPlainObject(v) ? v[field.name] : v;\n structured = field.isStructuredType()\n ? field.structured()\n : undefined;\n }\n }\n if (field !== undefined && v !== undefined) {\n key[k.alias || field.name] = field.encode(v);\n }\n }\n }\n if (Types.isEmpty(key)) return undefined;\n return Objects.resolveKey(key);\n }\n\n defaults(): { [name: string]: any } {\n let value = this.parent?.defaults() || {};\n let fields = this.fields.filter(\n (f) => f.default !== undefined || f.isStructuredType()\n );\n return {\n ...value,\n ...fields.reduce((acc, f) => {\n let value = f.isStructuredType()\n ? f.structured().defaults()\n : f.default;\n return Types.isEmpty(value) ? acc : { ...acc, [f.name]: value };\n }, {}),\n };\n }\n\n // Json Schema\n toJsonSchema(options: JsonSchemaOptions<T> = {}) {\n let schema: any = this.parent?.toJsonSchema(options) || {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: `${this.namespace}.${this.name}`,\n title: this.titleize(DESCRIPTION),\n description: this.annotatedValue(LONG_DESCRIPTION),\n type: 'object',\n properties: {},\n required: [],\n };\n const fields = this.fields.filter(\n (f) =>\n (!f.navigation || (options.expand && f.name in options.expand)) &&\n (!options.select || (<string[]>options.select).indexOf(f.name) !== -1)\n );\n schema.properties = Object.assign(\n {},\n schema.properties,\n fields\n .map((f) => {\n let expand =\n options.expand && f.name in options.expand\n ? (options.expand as any)[f.name]\n : undefined;\n let schema = f.toJsonSchema(expand);\n if (options.custom && f.name in options.custom)\n schema = (\n options.custom[f.name as keyof T] as (\n schema: any,\n field: ODataStructuredTypeFieldParser<any>\n ) => any\n )(schema, f);\n return { [f.name]: schema };\n })\n .reduce((acc, v) => Object.assign(acc, v), {})\n );\n schema.required = [\n ...schema.required,\n ...fields\n .filter((f) =>\n options.required && f.name in options.required\n ? options.required[f.name as keyof T]\n : !f.nullable\n )\n .map((f) => f.name),\n ];\n return schema;\n }\n\n validate(\n attrs: any,\n {\n method,\n navigation = false,\n }: {\n create?: boolean;\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}\n ): { [name: string]: any } | undefined {\n const errors = (this.parent?.validate(attrs, { method, navigation }) ||\n {}) as { [name: string]: any };\n const fields = this.fields.filter((f) => !f.navigation || navigation);\n for (var field of fields) {\n const value = attrs[field.name as keyof T];\n const errs = field.validate(value, { method, navigation });\n if (errs !== undefined) {\n errors[field.name] = errs;\n }\n }\n return !Types.isEmpty(errors) ? errors : undefined;\n }\n}\n","import { CALLABLE_BINDING_PARAMETER } from '../../constants';\nimport { ODataParserOptions } from '../../options';\nimport {\n CallableConfig,\n NONE_PARSER,\n Options,\n OptionsHelper,\n Parameter,\n Parser,\n} from '../../types';\nimport { ODataEnumTypeParser } from './enum-type';\nimport { ODataStructuredTypeParser } from './structured-type';\n\nexport class ODataParameterParser<T> {\n name: string;\n type: string;\n private parser: Parser<T>;\n collection?: boolean;\n nullable?: boolean;\n optionsHelper?: OptionsHelper;\n\n constructor(name: string, parameter: Parameter) {\n this.name = name;\n this.type = parameter.type;\n this.parser = NONE_PARSER;\n this.nullable = parameter.nullable;\n this.collection = parameter.collection;\n }\n\n serialize(value: T, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return Array.isArray(value)\n ? value.map((v) => this.parser.serialize(v, parserOptions))\n : this.parser.serialize(value, parserOptions);\n }\n\n //Encode\n encode(value: any, options?: Options): string {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return Array.isArray(value)\n ? value.map((v) => this.parser.encode(v, parserOptions))\n : this.parser.encode(value, parserOptions);\n }\n\n configure({\n parserForType,\n options,\n }: {\n parserForType: (type: string) => Parser<any>;\n options: OptionsHelper;\n }) {\n this.optionsHelper = options;\n this.parser = parserForType(this.type);\n }\n\n isEdmType() {\n return this.type.startsWith('Edm.');\n }\n\n isEnumType() {\n return this.parser instanceof ODataEnumTypeParser;\n }\n\n enum() {\n if (!this.isEnumType()) throw new Error('Field are not EnumType');\n return this.parser as ODataEnumTypeParser<T>;\n }\n\n isStructuredType() {\n return this.parser instanceof ODataStructuredTypeParser;\n }\n\n structured() {\n if (!this.isStructuredType())\n throw new Error('Field are not StrucuturedType');\n return this.parser as ODataStructuredTypeParser<T>;\n }\n}\n\nexport class ODataCallableParser<R> implements Parser<R> {\n name: string;\n namespace: string;\n alias?: string;\n return?: { type: string; collection?: boolean };\n parser: Parser<any>;\n parameters: ODataParameterParser<any>[];\n optionsHelper?: OptionsHelper;\n\n constructor(config: CallableConfig, namespace: string, alias?: string) {\n this.name = config.name;\n this.namespace = namespace;\n this.alias = alias;\n this.return = config.return;\n this.parser = NONE_PARSER;\n this.parameters = Object.entries(config.parameters || []).map(\n ([name, p]) => new ODataParameterParser(name, p as Parameter)\n );\n }\n\n isTypeOf(type: string) {\n var names = [`${this.namespace}.${this.name}`];\n if (this.alias) names.push(`${this.alias}.${this.name}`);\n return names.indexOf(type) !== -1;\n }\n\n // Deserialize\n deserialize(value: any, options?: Options): R {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return this.parser.deserialize(value, parserOptions);\n }\n\n // Serialize\n serialize(params: any, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n const parameters = this.parameters\n .filter((p) => p.name !== CALLABLE_BINDING_PARAMETER)\n .filter((p) => p.name in params && params[p.name] !== undefined);\n return parameters.reduce(\n (acc, p) => ({\n ...acc,\n [p.name]: p.serialize(params[p.name], parserOptions),\n }),\n {}\n );\n }\n\n //Encode\n encode(params: any, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n const parameters = this.parameters\n .filter((p) => p.name !== CALLABLE_BINDING_PARAMETER)\n .filter((p) => p.name in params && params[p.name] !== undefined);\n return parameters.reduce(\n (acc, p) => ({\n ...acc,\n [p.name]: p.encode(params[p.name], parserOptions),\n }),\n {}\n );\n }\n\n configure({\n parserForType,\n options,\n }: {\n parserForType: (type: string) => Parser<any>;\n options: OptionsHelper;\n }) {\n this.optionsHelper = options;\n if (this.return)\n this.parser = parserForType(this.return.type) || NONE_PARSER;\n this.parameters.forEach((p) => p.configure({ parserForType, options }));\n }\n\n binding() {\n return this.parameters.find((p) => p.name === CALLABLE_BINDING_PARAMETER);\n }\n}\n","import { CallableConfig, Options, Parser } from '../types';\nimport { ODataSchemaElement } from './element';\nimport { ODataCallableParser } from './parsers';\nimport { ODataSchema } from './schema';\n\nexport class ODataCallable<R> extends ODataSchemaElement {\n entitySetPath?: string;\n bound?: boolean;\n composable?: boolean;\n parser: ODataCallableParser<R>;\n\n constructor(config: CallableConfig, schema: ODataSchema) {\n super(config, schema);\n this.entitySetPath = config.entitySetPath;\n this.bound = config.bound;\n this.composable = config.composable;\n this.parser = new ODataCallableParser(\n config,\n schema.namespace,\n schema.alias\n );\n }\n\n path() {\n let path: string;\n if (this.entitySetPath) path = this.entitySetPath;\n else if (this.bound) path = `${this.schema.namespace}.${this.name}`;\n else\n path = this.parser.return\n ? this.api.findEntitySetForType(this.parser.return.type)?.name ||\n this.name\n : this.name;\n return path;\n }\n\n configure({\n parserForType,\n }: {\n parserForType: (type: string) => Parser<any>;\n }) {\n this.parser.configure({ options: this.api.options, parserForType });\n }\n\n /**\n * Deseialize the given value from the callable.\n * @param value Value to deserialize\n * @param options Options for deserialization\n * @returns Deserialized value\n */\n deserialize(value: any, options?: Options): any {\n return this.parser.deserialize(value, options);\n }\n\n /**\n * Serialize the given value for the callable.\n * @param value Value to serialize\n * @param options Options for serialization\n * @returns Serialized value\n */\n serialize(value: any, options?: Options): any {\n return this.parser.serialize(value, options);\n }\n\n /**\n * Encode the given value for the callable.\n * @param value Value to encode\n * @param options Options for encoding\n * @returns Encoded value\n */\n encode(value: any, options?: Options): any {\n return this.parser.encode(value, options);\n }\n\n /**\n * Returns the binding parameter of the callable.\n * @returns The binding parameter of the callable.\n */\n binding() {\n return this.parser.binding();\n }\n}\n","import { EntitySetConfig } from '../types';\nimport { ODataSchemaElement } from './element';\nimport { ODataSchema } from './schema';\n\nexport class ODataEntitySet extends ODataSchemaElement {\n entityType: string;\n service: { new (...params: any[]): any };\n constructor(config: EntitySetConfig, schema: ODataSchema) {\n super(config, schema);\n this.entityType = config.entityType;\n this.service = config.service;\n }\n}\n","import { EntityContainerConfig } from '../types';\nimport { ODataSchemaElement } from './element';\nimport { ODataEntitySet } from './entity-set';\nimport { ODataSchema } from './schema';\n\nexport class ODataEntityContainer extends ODataSchemaElement {\n entitySets: ODataEntitySet[];\n\n constructor(config: EntityContainerConfig, schema: ODataSchema) {\n super(config, schema);\n this.entitySets = (config.entitySets || []).map(\n (config) => new ODataEntitySet(config, schema)\n );\n }\n}\n","import { EnumTypeConfig, Options } from '../types';\nimport { ODataSchemaElement } from './element';\nimport { ODataEnumTypeFieldParser, ODataEnumTypeParser } from './parsers';\nimport { ODataSchema } from './schema';\n\nexport class ODataEnumType<E> extends ODataSchemaElement {\n parser: ODataEnumTypeParser<E>;\n members: { [name: string]: number } | { [value: number]: string };\n constructor(config: EnumTypeConfig<E>, schema: ODataSchema) {\n super(config, schema);\n this.members = config.members;\n this.parser = new ODataEnumTypeParser<E>(\n config,\n schema.namespace,\n schema.alias\n );\n }\n\n configure() {\n this.parser.configure({ options: this.api.options });\n }\n\n /**\n * Returns the fields of the enum type.\n * @returns The fields of the enum type.\n */\n fields(): ODataEnumTypeFieldParser[] {\n return this.parser.fields;\n }\n\n /**\n * Find a field by name.\n * @param name The name of the field\n * @returns The field with the given name\n */\n findFieldByName(name: string) {\n return this.fields().find((f) => f.name === name);\n }\n\n /**\n * Find a field by value.\n * @param value The value of the field\n * @returns The field with the given value\n */\n findFieldByValue(value: number) {\n return this.fields().find((f) => f.value === value);\n }\n\n /**\n * Map the fields of the enum type.\n * @param mapper Function that maps the value to the new value\n * @returns The fields mapped by the mapper\n */\n mapFields<T>(mapper: (field: ODataEnumTypeFieldParser) => T) {\n return this.fields().map(mapper);\n }\n\n /**\n * Deseialize the given value from the enum type.\n * @param value Value to deserialize\n * @param options Options for deserialization\n * @returns Deserialized value\n */\n deserialize(value: any, options?: Options): E {\n return this.parser.deserialize(value, options);\n }\n\n /**\n * Serialize the given value for the enum type.\n * @param value Value to serialize\n * @param options Options for serialization\n * @returns Serialized value\n */\n serialize(value: E, options?: Options): any {\n return this.parser.serialize(value, options);\n }\n\n /**\n * Encode the given value for the enum type.\n * @param value Value to encode\n * @param options Options for encoding\n * @returns Encoded value\n */\n encode(value: E, options?: Options): any {\n return this.parser.encode(value, options);\n }\n}\n","import { ODataCollection } from '../models';\nimport { ODataModel } from '../models/model';\nimport { Options, StructuredTypeConfig } from '../types';\nimport { ODataSchemaElement } from './element';\nimport {\n JsonSchemaOptions,\n ODataEntityTypeKey,\n ODataStructuredTypeFieldParser,\n ODataStructuredTypeParser,\n} from './parsers';\nimport { ODataSchema } from './schema';\n\nexport class ODataStructuredType<T> extends ODataSchemaElement {\n base?: string;\n open: boolean;\n parent?: ODataStructuredType<any>;\n children: ODataStructuredType<any>[] = [];\n model?: typeof ODataModel;\n collection?: typeof ODataCollection;\n parser: ODataStructuredTypeParser<T>;\n\n constructor(config: StructuredTypeConfig<T>, schema: ODataSchema) {\n super(config, schema);\n this.base = config.base;\n this.open = config.open || false;\n this.parser = new ODataStructuredTypeParser(\n config,\n schema.namespace,\n schema.alias\n );\n this.model = config.model as typeof ODataModel;\n this.collection = config.collection as typeof ODataCollection;\n if (this.model !== undefined) {\n const options = this.model.hasOwnProperty('options')\n ? this.model.options\n : { fields: {} };\n this.model.buildMeta<T>({ options, schema: this });\n }\n if (this.collection !== undefined) {\n this.collection.model = this.model;\n }\n }\n\n configure({\n parserForType,\n findOptionsForType,\n }: {\n parserForType: (type: string) => any;\n findOptionsForType: (type: string) => any;\n }) {\n if (this.base) {\n const parent = this.api.findStructuredTypeForType(\n this.base\n ) as ODataStructuredType<any>;\n parent.children.push(this);\n this.parent = parent;\n }\n this.parser.configure({ parserForType, options: this.api.options });\n if (this.model !== undefined && this.model.options !== null) {\n this.model.meta.configure({\n findOptionsForType,\n options: this.api.options,\n });\n }\n }\n\n /**\n * Returns a boolean indicating if the structured type is a sub type of the given type.\n * @param type String representation of the type\n * @returns True if the callable is type of the given type\n */\n override isSubtypeOf(schema: ODataStructuredType<any>): boolean {\n return (\n super.isSubtypeOf(schema) ||\n (this.parent !== undefined && this.parent.isSubtypeOf(schema))\n );\n }\n\n /**\n * Returns a boolean indicating if the structured type has a simple key.\n * @returns True if the structured type has a simple key\n */\n isSimpleKey() {\n return this.keys().length === 1;\n }\n\n /**\n * Returns a boolean indicating if the structured type has a compound key.\n * @returns True if the structured type has a compound key.\n */\n isCompoundKey() {\n return this.keys().length > 1;\n }\n\n /**\n * Find the field parser for the given field name.\n * @param name Name of the field\n * @returns The field parser\n */\n findFieldByName<F>(name: keyof T) {\n return this.fields({\n include_parents: true,\n include_navigation: true,\n }).find((f) => f.name === name) as\n | ODataStructuredTypeFieldParser<F>\n | undefined;\n }\n\n /**\n * Find a parent schema of the structured type.\n * @param predicate Function for evaluate the schemas in the hierarchy.\n * @returns The schema that matches the predicate.\n */\n findParentSchema(\n predicate: (p: ODataStructuredType<any>) => boolean\n ): ODataStructuredType<any> | undefined {\n if (predicate(this)) return this as ODataStructuredType<any>;\n if (this.parent === undefined) return undefined;\n return this.parent.findParentSchema(predicate);\n }\n\n /**\n * Find a parent schema of the structured type for the given field.\n * @param field Field that belongs to the structured type\n * @returns The schema of the field\n */\n findSchemaForField<E>(field: ODataStructuredTypeFieldParser<any>) {\n return this.findParentSchema(\n (p) =>\n p\n .fields({ include_parents: false, include_navigation: true })\n .find((f) => f === field) !== undefined\n ) as ODataStructuredType<E>;\n }\n\n /**\n * Returns all fields of the structured type.\n * @param include_navigation Include navigation properties in the result.\n * @param include_parents Include the parent types in the result.\n * @returns All fields of the structured type.\n */\n fields({\n include_navigation,\n include_parents,\n }: {\n include_parents: boolean;\n include_navigation: boolean;\n }): ODataStructuredTypeFieldParser<any>[] {\n return [\n ...(include_parents && this.parent !== undefined\n ? this.parent.fields({ include_parents, include_navigation })\n : []),\n ...this.parser.fields.filter(\n (field) => include_navigation || !field.navigation\n ),\n ];\n }\n\n /**\n * Returns the keys of the structured type.\n * @param include_parents Include the parent fields\n * @returns The keys of the structured type\n */\n keys({\n include_parents = true,\n }: {\n include_parents?: boolean;\n } = {}): ODataEntityTypeKey[] {\n return [\n ...(include_parents && this.parent !== undefined\n ? this.parent.keys({ include_parents })\n : []),\n ...(this.parser.keys || []),\n ];\n }\n\n /**\n * Picks the fields from attributes.\n * @param attrs\n * @param include_parents Include the parent fields\n * @param include_navigation Include the navigation fields\n * @param include_etag Include the etag field\n * @returns The picked fields\n */\n pick(\n attrs: { [name: string]: any },\n {\n include_parents = true,\n include_navigation = false,\n include_etag = true,\n }: {\n include_parents?: boolean;\n include_navigation?: boolean;\n include_etag?: boolean;\n } = {}\n ): Partial<T> {\n const names = this.fields({ include_parents, include_navigation }).map(\n (f) => f.name\n );\n let values = Object.keys(attrs)\n .filter((k) => names.indexOf(k) !== -1)\n .reduce((acc, k) => Object.assign(acc, { [k]: attrs[k] }), {});\n if (include_etag) {\n const etag = this.api.options.helper.etag(attrs);\n this.api.options.helper.etag(attrs, etag);\n }\n return values;\n }\n\n /**\n * Deseialize the given value from the structured type.\n * @param value Value to deserialize\n * @param options Options for deserialization\n * @returns Deserialized value\n */\n deserialize(value: any, options?: Options): T {\n return this.parser.deserialize(value, options);\n }\n\n /**\n * Serialize the given value for the structured type.\n * @param value Value to serialize\n * @param options Options for serialization\n * @returns Serialized value\n */\n serialize(value: T, options?: Options): any {\n return this.parser.serialize(value, options);\n }\n\n /**\n * Encode the given value for the structured type.\n * @param value Value to encode\n * @param options Options for encoding\n * @returns Encoded value\n */\n encode(value: T, options?: Options): any {\n return this.parser.encode(value, options);\n }\n\n /**\n * Resolve the key of the structured type for the given value.\n * @param attrs Attributes of the value\n * @returns Resolved key\n */\n resolveKey(attrs: T | { [name: string]: any }) {\n return this.parser.resolveKey(attrs);\n }\n\n /**\n * Returns the defaults values for the structured type.\n * @returns Default values for the structured type\n */\n defaults() {\n return this.parser.defaults();\n }\n\n /**\n * Convert the structured type to json schema\n * @param options Options for json schema\n * @returns Json Schema\n */\n toJsonSchema(options: JsonSchemaOptions<T> = {}) {\n return this.parser.toJsonSchema(options);\n }\n\n /**\n * Validate the given value against the structured type.\n * @param attrs Attributes of the value\n * @param method Method to use for the process validation\n * @returns Object with the errors\n */\n validate(\n attrs: Partial<T>,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}\n ) {\n return this.parser.validate(attrs, { method, navigation });\n }\n}\n","import { ODataApi } from '../api';\nimport { Parser, SchemaConfig } from '../types';\nimport { OData } from '../utils/odata';\nimport { ODataAnnotatable } from './annotation';\nimport { ODataCallable } from './callable';\nimport { ODataEntityContainer } from './entity-container';\nimport { ODataEntitySet } from './entity-set';\nimport { ODataEnumType } from './enum-type';\nimport { ODataStructuredType } from './structured-type';\n\nexport class ODataSchema extends ODataAnnotatable {\n api: ODataApi;\n namespace: string;\n alias?: string;\n enums: ODataEnumType<any>[];\n entities: ODataStructuredType<any>[];\n callables: ODataCallable<any>[];\n containers: ODataEntityContainer[];\n\n constructor(config: SchemaConfig, api: ODataApi) {\n super(config);\n this.api = api;\n this.namespace = config.namespace;\n this.alias = config.alias;\n this.enums = (config.enums || []).map(\n (config) => new ODataEnumType(config, this)\n );\n this.entities = (config.entities || []).map(\n (config) => new ODataStructuredType(config, this)\n );\n this.callables = OData.mergeCallableParameters(config.callables || []).map(\n (config) => new ODataCallable(config, this)\n );\n this.containers = (config.containers || []).map(\n (config) => new ODataEntityContainer(config, this)\n );\n }\n\n isNamespaceOf(type: string) {\n return (\n type.startsWith(this.namespace) ||\n (this.alias && type.startsWith(this.alias))\n );\n }\n\n get entitySets() {\n return this.containers.reduce(\n (acc, container) => [...acc, ...container.entitySets],\n [] as ODataEntitySet[]\n );\n }\n\n //#region Find for Type\n public findEnumTypeForType<T>(type: string) {\n return this.enums.find((e) => e.isTypeOf(type)) as\n | ODataEnumType<T>\n | undefined;\n }\n\n public findStructuredTypeForType<T>(type: string) {\n return this.entities.find((e) => e.isTypeOf(type)) as\n | ODataStructuredType<T>\n | undefined;\n }\n\n public findCallableForType<T>(type: string, bindingType?: string) {\n const bindingStructuredType =\n bindingType !== undefined\n ? this.api.findStructuredTypeForType<any>(bindingType)\n : undefined;\n return this.callables.find((c) => {\n const isCallableType = c.isTypeOf(type);\n const callableBindingType = c.binding()?.type;\n const callableBindingStructuredType =\n callableBindingType !== undefined\n ? this.api.findStructuredTypeForType(callableBindingType)\n : undefined;\n return (\n isCallableType &&\n (!bindingStructuredType ||\n (callableBindingStructuredType &&\n bindingStructuredType.isSubtypeOf(callableBindingStructuredType)))\n );\n }) as ODataCallable<T> | undefined;\n }\n\n public findEntitySetForType(type: string) {\n return this.entitySets.find((e) => e.isTypeOf(type));\n }\n //#endregion\n\n configure({\n parserForType,\n findOptionsForType,\n }: {\n parserForType: (type: string) => Parser<any>;\n findOptionsForType: (type: string) => any;\n }) {\n // Configure Enums\n this.enums.forEach((enu) => enu.configure());\n // Configure Entities\n this.entities.forEach((config) =>\n config.configure({ parserForType, findOptionsForType })\n );\n // Configure callables\n this.callables.forEach((callable) => callable.configure({ parserForType }));\n }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../api';\nimport {\n PARAM_SEPARATOR,\n QUERY_SEPARATOR,\n VALUE_SEPARATOR,\n} from '../constants';\nimport { ODataCollection, ODataModel } from '../models';\nimport { ODataStructuredType } from '../schema';\nimport { ODataSchemaElement } from '../schema/element';\nimport { OptionsHelper, Parser, QueryOptionNames } from '../types';\nimport { Http, Objects, Types } from '../utils/index';\nimport { ODataPathSegments, ODataPathSegmentsHandler } from './path';\nimport {\n isQueryCustomType,\n ODataQueryOptions,\n ODataQueryOptionsHandler,\n QueryCustomType,\n} from './query';\nimport { ODataRequest } from './request';\nimport {\n ODataEntitiesAnnotations,\n ODataEntityAnnotations,\n ODataResponse,\n} from './responses/index';\nimport { ODataOptions } from './types';\n\nexport type EntityKey<T> =\n | {\n readonly [P in keyof T]?: T[P];\n }\n | QueryCustomType\n | string\n | number;\n\nexport class ODataResource<T> {\n // VARIABLES\n public api: ODataApi;\n public schema?: ODataSchemaElement;\n protected pathSegments: ODataPathSegments;\n protected queryOptions: ODataQueryOptions<T>;\n constructor(\n api: ODataApi,\n {\n segments,\n query,\n schema,\n }: {\n segments?: ODataPathSegments;\n query?: ODataQueryOptions<T>;\n schema?: ODataSchemaElement;\n } = {}\n ) {\n this.api = api;\n this.pathSegments = segments || new ODataPathSegments();\n this.queryOptions = query || new ODataQueryOptions();\n this.schema = schema;\n }\n\n /**\n * @returns string The type of the resource\n */\n type() {\n return this.pathSegments.last()?.type();\n }\n\n /**\n * @returns string The type of the return\n */\n returnType() {\n return this.pathSegments.last()?.type();\n }\n\n /**\n * @returns string All covered types of the resource\n */\n types(): string[] {\n return this.pathSegments.types();\n }\n\n /**\n * @returns boolean The resource has key ?\n */\n hasKey() {\n return Boolean(this.pathSegments.last({ key: true })?.hasKey());\n }\n\n clearKey() {\n return this.pathSegments.last({ key: true })?.clearKey();\n }\n\n //#region Models\n asModel<M extends ODataModel<T>>(\n entity?: Partial<T> | { [name: string]: any },\n { annots, reset }: { annots?: ODataEntityAnnotations; reset?: boolean } = {}\n ): M {\n let resource: ODataResource<T> = this as ODataResource<T>;\n const type = annots?.type || this.returnType();\n if (type === undefined) throw Error('');\n const Model = this.api.modelForType(type);\n let entitySet = annots?.entitySet;\n if (entitySet !== undefined) {\n resource = this.api.entitySet<T>(entitySet).entity(entity as Partial<T>);\n resource.query((q) => q.apply(this.queryOptions.toQueryArguments()));\n }\n return new Model(entity, { resource, annots, reset }) as M;\n }\n\n asCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n entities?: Partial<T>[] | { [name: string]: any }[],\n {\n annots,\n reset,\n }: { annots?: ODataEntitiesAnnotations; reset?: boolean } = {}\n ): C {\n let resource: ODataResource<T> = this as ODataResource<T>;\n const type = annots?.type || this.returnType();\n if (type === undefined) throw Error('');\n const Collection = this.api.collectionForType(type);\n let path = annots?.entitySet;\n if (path !== undefined) {\n resource = this.api.entitySet<T>(path);\n resource.query((q) => q.apply(this.queryOptions.toQueryArguments()));\n }\n return new Collection(entities, { resource, annots, reset }) as C;\n }\n //#endregion\n\n isSubtypeOf(other: ODataResource<any>) {\n return (\n this.schema !== undefined &&\n other.schema !== undefined &&\n this.schema?.isSubtypeOf(other.schema)\n );\n }\n /*\n isParentOf(other: ODataResource<any>) {\n const [selfPath] = this.pathAndParams();\n const [otherPath] = other.pathAndParams();\n return otherPath !== selfPath && otherPath.startsWith(selfPath);\n }\n\n isChildOf(other: ODataResource<any>) {\n const [selfPath] = this.pathAndParams();\n const [otherPath] = other.pathAndParams();\n return otherPath !== selfPath && selfPath.startsWith(otherPath);\n }\n */\n\n isEqualTo(other: ODataResource<any>, test?: 'path' | 'params') {\n const [selfPath, selfParams] = this.pathAndParams();\n const [otherPath, otherParams] = other.pathAndParams();\n return test === 'path'\n ? otherPath === selfPath\n : test === 'params'\n ? Types.isEqual(selfParams, otherParams)\n : otherPath === selfPath && Types.isEqual(selfParams, otherParams);\n }\n\n pathAndParams(escape: boolean = false): [string, { [name: string]: any }] {\n const [spath, sparams] = this.pathSegments.pathAndParams(escape);\n const [, qparams] = this.queryOptions.pathAndParams(escape);\n return [spath, { ...sparams, ...qparams }];\n }\n\n endpointUrl(params: boolean = true) {\n if (params) {\n return `${this.api.serviceRootUrl}${this}`;\n } else {\n let [path] = this.pathAndParams();\n return `${this.api.serviceRootUrl}${path}`;\n }\n }\n\n toString(): string {\n let [path, params] = this.pathAndParams();\n let queryString = Object.entries(params)\n .map((e) => `${e[0]}${VALUE_SEPARATOR}${e[1]}`)\n .join(PARAM_SEPARATOR);\n return queryString ? `${path}${QUERY_SEPARATOR}${queryString}` : path;\n }\n\n clone<R extends ODataResource<T>>(): R {\n const Ctor = this.constructor as typeof ODataResource;\n return new Ctor(this.api, {\n schema: this.schema,\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n }) as R;\n }\n\n deserialize(value: any, options?: OptionsHelper): any {\n const resourceType = this.returnType();\n const resourceSchema = this.schema;\n const _p = (value: any, options: OptionsHelper): Parser<T> | undefined => {\n const dataType = Types.isPlainObject(value)\n ? options.helper.type(value)\n : undefined;\n if (dataType !== undefined) {\n // Parser from data type\n return this.api.parserForType<T>(dataType);\n } else if (resourceSchema !== undefined && 'parser' in resourceSchema) {\n // Parser from resource schema\n return (<any>resourceSchema).parser as Parser<T> | undefined;\n } else if (resourceType !== undefined) {\n // Parser from resource type\n return this.api.parserForType<T>(resourceType);\n }\n return undefined;\n };\n const _d = (value: any, options: OptionsHelper) => {\n const parser = _p(value, options);\n return parser !== undefined && 'deserialize' in parser\n ? parser.deserialize(value, options)\n : value;\n };\n return Array.isArray(value)\n ? value.map((v) => _d(v, options || this.api.options))\n : _d(value, options || this.api.options);\n }\n\n serialize(value: any, options?: OptionsHelper): any {\n const resourceType = this.type();\n const resourceSchema = this.schema;\n const _p = (value: any, options: OptionsHelper): Parser<T> | undefined => {\n const dataType = Types.isPlainObject(value)\n ? options.helper.type(value)\n : undefined;\n if (dataType !== undefined) {\n // Parser from data type\n return this.api.parserForType<T>(dataType);\n } else if (resourceSchema !== undefined && 'parser' in resourceSchema) {\n // Parser from resource schema\n return (<any>resourceSchema).parser as Parser<T> | undefined;\n } else if (resourceType !== undefined) {\n // Parser from resource type\n return this.api.parserForType<T>(resourceType);\n }\n return undefined;\n };\n const _s = (value: any, options: OptionsHelper) => {\n const parser = _p(value, options);\n return parser !== undefined && 'serialize' in parser\n ? parser.serialize(value, options)\n : value;\n };\n return Array.isArray(value)\n ? value.map((v) => _s(v, options || this.api.options))\n : _s(value, options || this.api.options);\n }\n\n encode(value: any, options?: OptionsHelper): any {\n const resourceType = this.type();\n const resourceSchema = this.schema;\n const _p = (value: any, options: OptionsHelper): Parser<T> | undefined => {\n const dataType = Types.isPlainObject(value)\n ? options.helper.type(value)\n : undefined;\n if (dataType !== undefined) {\n // Parser from data type\n return this.api.parserForType<T>(dataType);\n } else if (resourceSchema !== undefined && 'parser' in resourceSchema) {\n // Parser from resource schema\n return (<any>resourceSchema).parser as Parser<T> | undefined;\n } else if (resourceType !== undefined) {\n // Parser from resource type\n return this.api.parserForType<T>(resourceType);\n }\n return undefined;\n };\n const _e = (value: any, options: OptionsHelper) => {\n const parser = _p(value, options);\n return parser !== undefined && 'encode' in parser\n ? parser.encode(value, options)\n : value;\n };\n return Array.isArray(value)\n ? value.map((v) => _e(v, options || this.api.options))\n : _e(value, options || this.api.options);\n }\n\n toJSON() {\n return {\n segments: this.pathSegments.toJSON(),\n options: this.queryOptions.toJSON(),\n };\n }\n\n cloneSegments() {\n return this.pathSegments.clone();\n }\n\n //#region Query Options\n clearQuery() {\n this.queryOptions.clear();\n }\n\n cloneQuery<P>() {\n return this.queryOptions.clone<P>();\n }\n\n /**\n * Handle the path segments of the resource\n * Create an object handler for mutate the path segments of the resource\n * @param f Function context for handle the segments\n * @returns ODataActionResource\n */\n segment(f: (q: ODataPathSegmentsHandler<T>) => void) {\n f(new ODataPathSegmentsHandler<T>(this.pathSegments));\n return this;\n }\n\n /**\n * Handle the query options of the resource\n * Create an object handler for mutate the query options of the resource\n * @param f Function context for handle the query options\n */\n query(f: (q: ODataQueryOptionsHandler<T>) => void) {\n f(new ODataQueryOptionsHandler<T>(this.queryOptions));\n return this;\n }\n\n static resolveKey<T>(\n value: any,\n schema?: ODataStructuredType<T>\n ): EntityKey<T> | undefined {\n if (isQueryCustomType(value)) {\n return value;\n } else if (Types.isPlainObject(value)) {\n return schema instanceof ODataStructuredType\n ? schema.resolveKey(value)\n : Objects.resolveKey(value);\n }\n return value as EntityKey<T> | undefined;\n }\n\n protected resolveKey(value: any): EntityKey<T> | undefined {\n return ODataResource.resolveKey<T>(\n value,\n this.schema as ODataStructuredType<T>\n );\n }\n //#endregion\n\n // Base Requests\n protected request(\n method: string,\n options: ODataOptions & {\n body?: any;\n etag?: string;\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<any> {\n const apiOptions = this.api.options;\n let params = options.params || {};\n if (options.withCount) {\n params = Http.mergeHttpParams(params, apiOptions.helper.countParam());\n }\n\n let etag = options.etag;\n if (etag === undefined && Types.isPlainObject(options.body)) {\n etag = apiOptions.helper.etag(options.body);\n }\n\n const request = new ODataRequest({\n method,\n etag,\n body: options.body,\n api: this.api,\n resource: this,\n observe: 'response',\n headers: options.headers,\n reportProgress: options.reportProgress,\n params: params,\n responseType: options.responseType,\n fetchPolicy: options.fetchPolicy,\n withCredentials: options.withCredentials,\n bodyQueryOptions: options.bodyQueryOptions,\n });\n\n const res$ = this.api.request(request);\n switch (options.responseType) {\n case 'entities':\n return res$.pipe(map((res: ODataResponse<T>) => res.entities()));\n case 'entity':\n return res$.pipe(map((res: ODataResponse<T>) => res.entity()));\n case 'property':\n return res$.pipe(map((res: ODataResponse<T>) => res.property()));\n case 'value':\n return res$.pipe(map((res: ODataResponse<T>) => res.value() as T));\n default:\n // Other responseTypes (arraybuffer, blob, json, text) return body\n return res$.pipe(map((res: ODataResponse<T>) => res.body));\n }\n }\n\n protected get(\n options: ODataOptions & {\n etag?: string;\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<any> {\n return this.request('GET', options);\n }\n\n protected post(\n body: any,\n options: ODataOptions & {\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n } = {}\n ): Observable<any> {\n return this.request('POST', { body, ...options });\n }\n\n protected put(\n body: any,\n options: ODataOptions & {\n etag?: string;\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n } = {}\n ): Observable<any> {\n return this.request('PUT', { body, ...options });\n }\n\n protected patch(\n body: any,\n options: ODataOptions & {\n etag?: string;\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n } = {}\n ): Observable<any> {\n return this.request('PATCH', { body, ...options });\n }\n\n protected delete(\n options: ODataOptions & {\n etag?: string;\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n } = {}\n ): Observable<any> {\n return this.request('DELETE', options);\n }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataCollection, ODataModel } from '../../models';\nimport { ODataCallable } from '../../schema/callable';\nimport { PathSegmentNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity, ODataProperty } from '../responses';\nimport {\n ODataEntitiesOptions,\n ODataEntityOptions,\n ODataNoneOptions,\n ODataOptions,\n ODataPropertyOptions,\n} from './options';\n\nexport class ODataActionResource<P, R> extends ODataResource<R> {\n //#region Factory\n static factory<P, R>(\n api: ODataApi,\n {\n path,\n schema,\n segments,\n query,\n }: {\n path?: string;\n schema?: ODataCallable<R>;\n segments?: ODataPathSegments;\n query?: ODataQueryOptions<R>;\n }\n ) {\n segments = segments || new ODataPathSegments();\n path = schema !== undefined ? schema.path() : path;\n if (path === undefined)\n throw new Error(`ODataActionResource: path is required`);\n\n const segment = segments.add(PathSegmentNames.action, path);\n if (schema !== undefined) segment.type(schema.type());\n return new ODataActionResource<P, R>(api, {\n segments,\n query,\n schema,\n });\n }\n\n static fromResource<P, R>(resource: ODataResource<any>, path: string) {\n const baseType = resource.type();\n const actionSchema = resource.api.findCallableForType<R>(path, baseType);\n const bindingType = actionSchema?.binding()?.type;\n\n const action = ODataActionResource.factory<P, R>(resource.api, {\n path,\n schema: actionSchema,\n segments: resource.cloneSegments(),\n });\n\n // Switch entitySet to binding type if available\n if (bindingType !== undefined && bindingType !== baseType) {\n let entitySet = resource.api.findEntitySetForType(bindingType);\n if (entitySet !== undefined) {\n action.segment((s) => s.entitySet().path(entitySet!.name));\n }\n }\n\n return action;\n }\n //#endregion\n\n override returnType() {\n return this.schema instanceof ODataCallable\n ? this.schema.parser.return?.type\n : undefined;\n }\n\n //#region Requests\n protected override post(\n params: P | null,\n options?: ODataEntityOptions & ODataEntitiesOptions & ODataPropertyOptions\n ): Observable<any> {\n return super.post(params, options);\n }\n //#endregion\n\n //#region Shortcuts\n /**\n * Execute the action\n * @param params Parameters to be sent to the action\n * @param options Options for the request\n */\n call(\n params: P | null,\n options?: ODataEntityOptions\n ): Observable<ODataEntity<R>>;\n call(\n params: P | null,\n options?: ODataEntitiesOptions\n ): Observable<ODataEntities<R>>;\n call(\n params: P | null,\n options?: ODataPropertyOptions\n ): Observable<ODataProperty<R>>;\n call(params: P | null, options?: ODataNoneOptions): Observable<null>;\n call(\n params: P | null,\n options: ODataEntityOptions &\n ODataEntitiesOptions &\n ODataPropertyOptions &\n ODataNoneOptions = {}\n ): Observable<any> {\n return this.clone<ODataActionResource<P, R>>().post(params, options);\n }\n\n /**\n * Execute the action and return the result as a property\n * @param params Parameters for the action\n * @param options Options for the request\n * @returns Observable of the result of the action\n */\n callProperty(\n params: P | null,\n options: ODataOptions = {}\n ): Observable<R | null> {\n return this.call(params, { responseType: 'property', ...options }).pipe(\n map(({ property }) => property)\n );\n }\n\n /**\n * Execute the action and return the result as a entity\n * @param params Parameters for the action\n * @param options Options for the request\n * @returns Observable of the result of the action\n */\n callEntity(\n params: P | null,\n options: ODataOptions = {}\n ): Observable<R | null> {\n return this.call(params, { responseType: 'entity', ...options }).pipe(\n map(({ entity }) => entity)\n );\n }\n\n /**\n * Execute the action and return the result as a model\n * @param params Parameters for the action\n * @param options Options for the request\n * @returns Observable of the result of the action\n */\n callModel<M extends ODataModel<R>>(\n params: P | null,\n options: ODataOptions = {}\n ): Observable<M | null> {\n return this.call(params, { responseType: 'entity', ...options }).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots, reset: true }) : null\n )\n );\n }\n\n /**\n * Execute the action and return the result as a entities\n * @param params Parameters for the action\n * @param options Options for the request\n * @returns Observable of the result of the action\n */\n callEntities(\n params: P | null,\n options: ODataOptions = {}\n ): Observable<R[] | null> {\n return this.call(params, { responseType: 'entities', ...options }).pipe(\n map(({ entities }) => entities)\n );\n }\n\n /**\n * Execute the action and return the result as a collection\n * @param params Parameters for the action\n * @param options Options for the request\n * @returns Observable of the result of the action\n */\n callCollection<M extends ODataModel<R>, C extends ODataCollection<R, M>>(\n params: P | null,\n options: ODataOptions = {}\n ): Observable<C | null> {\n return this.call(params, { responseType: 'entities', ...options }).pipe(\n map(({ entities, annots }) =>\n entities\n ? this.asCollection<M, C>(entities, { annots, reset: true })\n : null\n )\n );\n }\n //#endregion\n}\n","import { ODataContext, ODataVersionHelper } from '../../helper';\n\nimport { ODataMetadataType } from '../../types';\n\nexport abstract class ODataAnnotations {\n constructor(\n public helper: ODataVersionHelper,\n protected annotations: { [annot: string]: any } = {},\n protected context?: ODataContext\n ) {}\n\n attributes<T>(data: { [name: string]: any }, metadata: ODataMetadataType): T {\n return this.helper.attributes(data, metadata) as T;\n }\n\n get entitySet() {\n return this.context?.entitySet;\n }\n\n get type() {\n return this.helper.type(this.annotations) || this.context?.type;\n }\n\n // Method\n abstract clone(): ODataAnnotations;\n abstract data(data: { [name: string]: any }): { [name: string]: any };\n}\n\nexport class ODataPropertyAnnotations extends ODataAnnotations {\n clone(): ODataPropertyAnnotations {\n return new ODataPropertyAnnotations(\n this.helper,\n { ...this.annotations },\n this.context\n );\n }\n\n data(data: { [name: string]: any }) {\n return this.helper.property(data);\n }\n}\n\nexport class ODataEntityAnnotations extends ODataAnnotations {\n clone(): ODataEntityAnnotations {\n return new ODataEntityAnnotations(\n this.helper,\n { ...this.annotations },\n this.context\n );\n }\n\n data(data: { [name: string]: any }) {\n return this.helper.entity(data);\n }\n\n get id() {\n return this.helper.id(this.annotations);\n }\n\n get etag() {\n return this.helper.etag(this.annotations);\n }\n\n get mediaEtag() {\n return this.helper.mediaEtag(this.annotations);\n }\n\n get metadataEtag() {\n return this.helper.metadataEtag(this.annotations);\n }\n\n get readLink() {\n return this.helper.readLink(this.annotations);\n }\n\n get editLink() {\n return this.helper.editLink(this.annotations);\n }\n\n get mediaReadLink() {\n return this.helper.mediaReadLink(this.annotations);\n }\n\n get mediaEditLink() {\n return this.helper.mediaEditLink(this.annotations);\n }\n\n get mediaContentType() {\n return this.helper.mediaContentType(this.annotations);\n }\n\n private _properties?: { [name: string]: any };\n get properties() {\n if (this._properties === undefined) {\n this._properties = this.helper.properties(this.annotations);\n }\n return this._properties;\n }\n\n property(name: string) {\n return this.properties[name];\n }\n\n private _functions?: { [name: string]: any };\n get functions() {\n if (this._functions === undefined) {\n this._functions = this.helper.functions(this.annotations);\n }\n return this._functions;\n }\n\n function(name: string) {\n return this.functions[name];\n }\n}\n\nexport class ODataEntitiesAnnotations extends ODataAnnotations {\n clone(): ODataEntitiesAnnotations {\n return new ODataEntitiesAnnotations(\n this.helper,\n { ...this.annotations },\n this.context\n );\n }\n\n data(data: { [name: string]: any }) {\n return this.helper.entities(data);\n }\n\n get readLink() {\n return this.helper.readLink(this.annotations);\n }\n\n get count() {\n return this.helper.count(this.annotations);\n }\n\n get nextLink() {\n return this.helper.nextLink(this.annotations);\n }\n\n get deltaLink() {\n return this.helper.deltaLink(this.annotations);\n }\n\n get top() {\n let match = (this.nextLink || '').match(/[&?]{1}\\$top=(\\d+)/);\n return match !== null ? Number(match[1]) : undefined;\n }\n\n get skip() {\n let match = (this.nextLink || '').match(/[&?]{1}\\$skip=(\\d+)/);\n return match !== null ? Number(match[1]) : undefined;\n }\n\n get skiptoken() {\n let match = (this.nextLink || '').match(/[&?]{1}\\$skiptoken=([\\d\\w\\s']+)/);\n return match !== null ? match[1] : undefined;\n }\n\n private _functions?: { [name: string]: any };\n get functions() {\n if (this._functions === undefined) {\n this._functions = this.helper.functions(this.annotations);\n }\n return this._functions;\n }\n function(name: string) {\n return this.functions[name];\n }\n}\n","import {\n CacheCacheability,\n ODataMetadataType,\n ODataVersion,\n Options,\n ResponseOptions,\n} from '../../types';\nimport {\n DEFAULT_VERSION,\n MAX_AGE,\n VERSION_2_0,\n VERSION_3_0,\n VERSION_4_0,\n} from '../../constants';\n\nimport { ODataHelper } from '../../helper';\n\nexport class ODataResponseOptions implements ResponseOptions {\n version: ODataVersion;\n streaming?: boolean;\n // OData\n metadata?: ODataMetadataType;\n stringAsEnum?: boolean;\n ieee754Compatible?: boolean;\n // Location\n location?: string;\n // Cache\n cacheability?: 'public' | 'private' | 'no-cache' | 'no-store';\n maxAge?: number;\n\n constructor(config: Options) {\n this.version = config.version || DEFAULT_VERSION;\n this.stringAsEnum = config.stringAsEnum;\n }\n\n get helper() {\n return ODataHelper[this.version];\n }\n\n clone() {\n return new ODataResponseOptions(this);\n }\n\n setFeatures(features: string) {\n features.split(';').forEach((o) => {\n let [k, v] = o.split('=');\n switch (k.trim()) {\n case 'odata.metadata':\n this.metadata = v as ODataMetadataType;\n break;\n case 'odata.streaming':\n this.streaming = v == 'true';\n break;\n case 'IEEE754Compatible':\n this.ieee754Compatible = v == 'true';\n break;\n }\n });\n }\n\n setVersion(version: string) {\n const value = version.replace(/\\;/g, '').trim();\n if ([VERSION_2_0, VERSION_3_0, VERSION_4_0].indexOf(value) !== -1)\n this.version = value as ODataVersion;\n }\n\n setLocation(location: string) {\n // TODO: resolve location?\n this.location = location;\n }\n\n setCache(cacheControl: string) {\n cacheControl.split(',').forEach((directive) => {\n if (directive.startsWith(MAX_AGE)) {\n let maxAge = Number(directive.split('=')[1]);\n if (!Number.isNaN(maxAge)) this.maxAge = maxAge;\n }\n if (\n ['public', 'private', 'no-cache', 'no-store'].indexOf(directive) !== -1\n ) {\n this.cacheability = directive as CacheCacheability;\n }\n });\n }\n}\n","import { HttpHeaders, HttpResponse } from '@angular/common/http';\nimport {\n ODataEntityAnnotations,\n ODataEntitiesAnnotations,\n ODataPropertyAnnotations,\n} from './annotations';\nimport { Types } from '../../utils/types';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity, ODataProperty } from './types';\nimport {\n APPLICATION_JSON,\n ODATA_VERSION_HEADERS,\n CONTENT_TYPE,\n CACHE_CONTROL,\n LOCATION_HEADER,\n ETAG_HEADERS,\n ODATA_ENTITYID_HEADERS,\n} from '../../constants';\nimport { ODataApi } from '../../api';\nimport { ODataRequest } from '../request';\nimport { ODataResponseOptions } from './options';\nimport { Http } from '../../utils/http';\nimport { ODataContext } from '../../helper';\n\n/**\n * OData Response\n */\nexport class ODataResponse<T> extends HttpResponse<T> {\n readonly api: ODataApi;\n readonly resource: ODataResource<T>;\n\n constructor(init: {\n api: ODataApi;\n resource: ODataResource<T>;\n body: T | null;\n headers: HttpHeaders;\n status: number;\n statusText: string;\n url?: string;\n }) {\n super(init);\n this.api = init.api;\n this.resource = init.resource;\n }\n\n static fromHttpResponse<T>(req: ODataRequest<T>, res: HttpResponse<T>) {\n return new ODataResponse<T>({\n api: req.api,\n resource: req.resource,\n body: res.body,\n headers: res.headers,\n status: res.status,\n statusText: res.statusText,\n url: res.url || undefined,\n });\n }\n\n static fromJSON<T>(\n req: ODataRequest<T>,\n json: {\n body: T | null;\n headers: { [name: string]: string | string[] };\n status: number;\n statusText: string;\n url: string | null;\n }\n ) {\n return new ODataResponse<T>({\n api: req.api,\n resource: req.resource,\n body: json.body,\n headers: new HttpHeaders(json.headers),\n status: json.status,\n statusText: json.statusText,\n url: json.url || undefined,\n });\n }\n\n toJSON() {\n return {\n body: this.body,\n headers: this.headers\n .keys()\n .map((name) => ({ [name]: this.headers.getAll(name) || [] }))\n .reduce((acc, header) => Object.assign(acc, header), {}),\n status: this.status,\n statusText: this.statusText,\n url: this.url,\n };\n }\n\n private _options?: ODataResponseOptions;\n get options(): ODataResponseOptions {\n if (this._options === undefined) {\n this._options = new ODataResponseOptions(this.api.options);\n const contentType = this.headers.get(CONTENT_TYPE);\n if (contentType && contentType.indexOf(APPLICATION_JSON) !== -1) {\n const features = contentType\n .split(',')\n .find((p) => p.startsWith(APPLICATION_JSON)) as string;\n this._options.setFeatures(features);\n }\n const header = Http.resolveHeaderKey(this.headers, ODATA_VERSION_HEADERS);\n if (header) {\n const version = (this.headers.get(header) || '').replace(/\\;/g, '') as\n | '2.0'\n | '3.0'\n | '4.0';\n this._options.setVersion(version);\n }\n\n const location = this.headers.get(LOCATION_HEADER);\n if (location) {\n this._options.setLocation(location);\n }\n\n const cacheControl = this.headers.get(CACHE_CONTROL);\n if (cacheControl) {\n this._options.setCache(cacheControl);\n }\n }\n return this._options;\n }\n\n private _payload?: any;\n get payload() {\n if (this._payload === undefined) {\n this._payload =\n this.body && this.options.version === '2.0'\n ? (<any>this.body)['d']\n : this.body;\n }\n return this._payload;\n }\n\n private _context?: any;\n get context(): ODataContext {\n if (this._context === undefined) {\n this._context = this.options.helper.context(\n Types.isPlainObject(this.payload) ? this.payload : {}\n );\n }\n return this._context;\n }\n\n private _annotations?: any;\n get annotations(): { [name: string]: any } {\n if (this._annotations === undefined) {\n const options = this.options;\n this._annotations = options.helper.annotations(this.payload || {});\n let key = Http.resolveHeaderKey(this.headers, ETAG_HEADERS);\n if (key) {\n const etag = this.headers.get(key);\n if (etag) options.helper.etag(this._annotations, etag);\n }\n key = Http.resolveHeaderKey(this.headers, ODATA_ENTITYID_HEADERS);\n if (key) {\n const entityId = this.headers.get(key);\n if (entityId) options.helper.id(this._annotations, entityId);\n }\n }\n return this._annotations;\n }\n\n /**\n * Handle the response body as an entity\n * @returns\n */\n entity(): ODataEntity<T> {\n const options = this.options;\n const payload = this.payload;\n const annots = new ODataEntityAnnotations(\n options.helper,\n this.annotations,\n this.context\n );\n const data = payload ? annots.data(payload) : null;\n let entity = (\n data !== null && Types.isPlainObject(data)\n ? options.helper.attributes(data, this.api.options.stripMetadata)\n : data\n ) as T | null;\n\n if (entity !== null)\n entity = this.resource.deserialize(entity, options) as T;\n return { entity, annots };\n }\n\n /**\n * Handle the response body as entities\n * @returns\n */\n entities(): ODataEntities<T> {\n const options = this.options;\n const payload = this.payload;\n const annots = new ODataEntitiesAnnotations(\n options.helper,\n this.annotations,\n this.context\n );\n let entities = payload ? annots.data(payload) : null;\n\n if (entities !== null)\n entities = this.resource.deserialize(entities, options) as T[];\n return { entities, annots };\n }\n\n /**\n * Handle the response body as a property\n * @returns\n */\n property(): ODataProperty<T> {\n const options = this.options;\n const payload = this.payload;\n const annots = new ODataPropertyAnnotations(\n options.helper,\n this.annotations,\n this.context\n );\n const data = payload ? (annots.data(payload) as T) : null;\n let property = (\n data !== null && Types.isPlainObject(data)\n ? options.helper.attributes(data, this.api.options.stripMetadata)\n : data\n ) as T | null;\n\n if (property !== null)\n property = this.resource.deserialize(property, options) as T;\n return { property, annots };\n }\n\n /**\n * Handle the response body as a value\n * @returns\n */\n value(): T | null {\n const options = this.options;\n const payload = this.payload;\n let value = (\n payload !== null && Types.isPlainObject(payload)\n ? options.helper.attributes(payload, this.api.options.stripMetadata)\n : payload\n ) as T | null;\n\n if (value !== null) value = this.resource.deserialize(value, options) as T;\n return value;\n }\n}\n","export class CsdlFunction {\n constructor(\n public name: string,\n public returnType: CsdlReturnType,\n public isBound?: boolean,\n public entitySetPath?: string,\n public isComposable?: boolean,\n public parameters?: CsdlParameter[]\n ) {}\n}\n\nexport class CsdlAction {\n constructor(\n public name: string,\n public returnType?: CsdlReturnType,\n public isBound?: boolean,\n public entitySetPath?: string,\n public parameters?: CsdlParameter[]\n ) {}\n}\n\nexport class CsdlFunctionImport {\n constructor(\n public name: string,\n public functionName: string,\n public entitySet?: string,\n public IncludeInServiceDocument?: boolean\n ) {}\n}\n\nexport class CsdlActionImport {\n constructor(\n public name: string,\n public action: string,\n public entitySet?: string\n ) {}\n}\n\nexport class CsdlParameter {\n constructor(\n public name: string,\n public type: string,\n public nullable?: boolean,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public srid?: string\n ) {}\n}\n\nexport class CsdlReturnType {\n constructor(\n public type: string,\n public nullable?: boolean,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public srid?: string\n ) {}\n}\n","export class CsdlAnnotable {\n constructor(public annotationList?: CsdlAnnotation[]) {}\n}\n\nexport class CsdlAnnotations extends CsdlAnnotable {\n constructor(\n public target: string,\n annotationList: CsdlAnnotation[],\n public qualifier?: string\n ) {\n super(annotationList);\n }\n}\n\nexport class CsdlAnnotation {\n constructor(public term: string, public qualifier?: string) {}\n}\n\nexport class CsdlTerm {\n constructor(\n public name: string,\n public type: string,\n public baseTerm?: string,\n public defaultValue?: string,\n public appliesTo?: string,\n public nullable?: boolean,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public srid?: string\n ) {}\n}\n","import {\n CsdlProperty,\n CsdlNavigationProperty,\n} from './csdl-structural-property';\n\nexport class CsdlStructuredType {\n constructor(\n public name: string,\n public properties?: CsdlProperty[],\n public navigationProperties?: CsdlNavigationProperty[],\n public baseType?: string,\n public openType?: boolean,\n public abstract?: boolean\n ) {}\n}\n\nexport class CsdlComplexType extends CsdlStructuredType {\n constructor(\n name: string,\n properties?: CsdlProperty[],\n navigationProperties?: CsdlNavigationProperty[],\n baseType?: string,\n openType?: boolean,\n abstract?: boolean\n ) {\n super(name, properties, navigationProperties, baseType, openType, abstract);\n }\n}\n\nexport class CsdlEntityType extends CsdlStructuredType {\n constructor(\n name: string,\n public key?: CsdlKey,\n properties?: CsdlProperty[],\n navigationProperties?: CsdlNavigationProperty[],\n baseType?: string,\n openType?: boolean,\n abstract?: boolean,\n public hasStream?: boolean\n ) {\n super(name, properties, navigationProperties, baseType, openType, abstract);\n }\n}\n\nexport class CsdlKey {\n constructor(public propertyRefs: CsdlPropertyRef[]) {}\n}\n\nexport class CsdlPropertyRef {\n constructor(public name: string, public alias?: string) {}\n}\n","export class CsdlEnumType {\n constructor(\n public name: string,\n public members: CsdlEnumMember[],\n public underlyingType?: string,\n public isFlags?: boolean\n ) {}\n}\n\nexport class CsdlEnumMember {\n constructor(public name: string, public value?: number) {}\n}\n","import { CsdlAnnotable, CsdlAnnotation } from './csdl-annotation';\n\nexport class CsdlReference extends CsdlAnnotable {\n constructor(\n public uri: string,\n public includes?: CsdlInclude[],\n public includeAnnotations?: CsdlIncludeAnnotations[],\n annotationList?: CsdlAnnotation[]\n ) {\n super(annotationList);\n }\n}\n\nexport class CsdlInclude {\n constructor(public namespace: string, public alias?: string) {}\n}\n\nexport class CsdlIncludeAnnotations {\n constructor(\n public termNamespace: string,\n public qualifier?: string,\n public targetNamespace?: string\n ) {}\n}\n","export abstract class CsdlStructuralProperty {\n constructor(\n public name: string,\n public type: string,\n public nullable?: boolean\n ) {}\n}\n\nexport class CsdlProperty extends CsdlStructuralProperty {\n constructor(\n name: string,\n type: string,\n nullable?: boolean,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public unicode?: boolean,\n public srid?: string,\n public defaultValue?: string\n ) {\n super(name, type, nullable);\n }\n}\n\nexport class CsdlNavigationProperty extends CsdlStructuralProperty {\n constructor(\n name: string,\n type: string,\n nullable?: boolean,\n public partner?: string,\n public containsTarget?: boolean,\n public referentialConstraints?: CsdlReferentialConstraint[],\n public onDelete?: CsdlOnDelete\n ) {\n super(name, type, nullable);\n }\n}\n\nexport class CsdlReferentialConstraint {\n constructor(public property: string, public referencedProperty: string) {}\n}\n\nexport class CsdlOnDelete {\n constructor(public action: string) {}\n}\n","import { CsdlEntitySet } from './csdl-entity-set';\nimport { CsdlSingleton } from './csdl-singleton';\nimport { CsdlFunctionImport, CsdlActionImport } from './csdl-function-action';\n\nexport class CsdlEntityContainer {\n constructor(\n public name: string,\n public extend?: string,\n public entitySets?: CsdlEntitySet[],\n public singletons?: CsdlSingleton[],\n public functionImports?: CsdlFunctionImport[],\n public actionImports?: CsdlActionImport[]\n ) {}\n}\n","import { CsdlNavigationPropertyBinding } from './csdl-navigation-property-binding';\n\nexport class CsdlEntitySet {\n constructor(\n public name: string,\n public entityType: string,\n public navigationPropertyBinding?: CsdlNavigationPropertyBinding[],\n public includeInServiceDocument?: boolean\n ) {}\n}\n","export class CsdlNavigationPropertyBinding {\n constructor(public path: string, public target: string) {}\n}\n","import {\n CsdlAnnotation,\n CsdlAnnotable,\n CsdlTerm,\n CsdlAnnotations,\n} from './csdl-annotation';\nimport { CsdlTypeDefinition } from './csdl-type-definition';\nimport { CsdlEnumType } from './csdl-enum-type';\nimport { CsdlEntityType, CsdlComplexType } from './csdl-structured-type';\nimport { CsdlFunction, CsdlAction } from './csdl-function-action';\nimport { CsdlEntityContainer } from './csdl-entity-container';\n\nexport class CsdlSchema extends CsdlAnnotable {\n constructor(\n public namespace: string,\n public alias?: string,\n public enumTypes?: CsdlEnumType[],\n public complexTypes?: CsdlComplexType[],\n public entityTypes?: CsdlEntityType[],\n public functions?: CsdlFunction[],\n public actions?: CsdlAction[],\n public entityContainer?: CsdlEntityContainer,\n public typeDefinitions?: CsdlTypeDefinition[],\n public terms?: CsdlTerm[],\n public annotationsList?: CsdlAnnotations[],\n annotationList?: CsdlAnnotation[]\n ) {\n super(annotationList);\n }\n}\n","import { CsdlNavigationPropertyBinding } from './csdl-navigation-property-binding';\n\nexport class CsdlSingleton {\n constructor(\n public name: string,\n public type: string,\n public navigationPropertyBindings?: CsdlNavigationPropertyBinding[]\n ) {}\n}\n","import { CsdlAnnotable, CsdlAnnotation } from './csdl-annotation';\n\nexport class CsdlTypeDefinition extends CsdlAnnotable {\n constructor(\n public name: string,\n public underlayingType: string,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public unicode?: boolean,\n public srid?: string,\n annotationList?: CsdlAnnotation[]\n ) {\n super(annotationList);\n }\n}\n","import {\n CsdlAction,\n CsdlActionImport,\n CsdlFunction,\n CsdlFunctionImport,\n CsdlParameter,\n CsdlReturnType,\n} from './csdl/csdl-function-action';\nimport {\n CsdlAnnotation,\n CsdlAnnotations,\n CsdlTerm,\n} from './csdl/csdl-annotation';\nimport {\n CsdlComplexType,\n CsdlEntityType,\n CsdlKey,\n CsdlPropertyRef,\n} from './csdl/csdl-structured-type';\nimport { CsdlEnumMember, CsdlEnumType } from './csdl/csdl-enum-type';\nimport {\n CsdlInclude,\n CsdlIncludeAnnotations,\n CsdlReference,\n} from './csdl/csdl-reference';\nimport {\n CsdlNavigationProperty,\n CsdlOnDelete,\n CsdlProperty,\n CsdlReferentialConstraint,\n} from './csdl/csdl-structural-property';\n\nimport { CsdlEntityContainer } from './csdl/csdl-entity-container';\nimport { CsdlEntitySet } from './csdl/csdl-entity-set';\nimport { CsdlNavigationPropertyBinding } from './csdl/csdl-navigation-property-binding';\nimport { CsdlSchema } from './csdl/csdl-schema';\nimport { CsdlSingleton } from './csdl/csdl-singleton';\nimport { CsdlTypeDefinition } from './csdl/csdl-type-definition';\nimport { Types } from '../../utils/types';\nimport { VERSION_4_0 } from '../../constants';\n\nenum FieldType {\n ATTRIBUTE,\n TAG,\n}\n\nclass Field {\n constructor(public name: string, public fieldType: FieldType) {}\n}\n\nexport class ODataMetadata {\n // TAGS\n private static readonly TAG_EDMX = 'edmx:Edmx';\n private static readonly TAG_DATA_SERVICES = 'edmx:DataServices';\n private static readonly TAG_REFERENCE = 'edmx:Reference';\n private static readonly TAG_INCLUDE = 'edmx:Include';\n private static readonly TAG_INCLUDE_ANNOTATIONS = 'edmx:IncludeAnnotations';\n private static readonly TAG_TERM = 'Term';\n private static readonly TAG_ANNOTATIONS = 'Annotations';\n private static readonly TAG_ANNOTATION = 'Annotation';\n private static readonly TAG_SCHEMA = 'Schema';\n private static readonly TAG_ENUM_TYPE = 'EnumType';\n private static readonly TAG_MEMBER = 'Member';\n private static readonly TAG_COMPLEX_TYPE = 'ComplexType';\n private static readonly TAG_ENTITY_TYPE = 'EntityType';\n private static readonly TAG_PROPERTY = 'Property';\n private static readonly TAG_KEY = 'Key';\n private static readonly TAG_PROPERTY_REF = 'PropertyRef';\n private static readonly TAG_NAVIGATION_PROPERTY = 'NavigationProperty';\n private static readonly TAG_REFERENTIAL_CONSTRAINT = 'ReferentialConstraint';\n private static readonly TAG_ON_DELETE = 'OnDelete';\n private static readonly TAG_FUNCTION = 'Function';\n private static readonly TAG_RETURN_TYPE = 'ReturnType';\n private static readonly TAG_PARAMETER = 'Parameter';\n private static readonly TAG_ACTION = 'Action';\n private static readonly TAG_ENTITY_CONTAINER = 'EntityContainer';\n private static readonly TAG_ENTITY_SET = 'EntitySet';\n private static readonly TAG_SINGLETON = 'Singleton';\n private static readonly TAG_FUNCTION_IMPORT = 'FunctionImport';\n private static readonly TAG_ACTION_IMPORT = 'ActionImport';\n private static readonly TAG_NAVIGATION_PROPERTY_BINDING =\n 'NavigationPropertyBinding';\n private static readonly TAG_TYPE_DEFINITION = 'TypeDefinition';\n\n // ATTRIBUTES\n private static readonly ATTRIBUTE_VERSION = 'Version';\n private static readonly ATTRIBUTE_URI = 'Uri';\n private static readonly ATTRIBUTE_ALIAS = 'Alias';\n private static readonly ATTRIBUTE_NAMESPACE = 'Namespace';\n private static readonly ATTRIBUTE_TERM_NAMESPACE = 'TermNamespace';\n private static readonly ATTRIBUTE_QUALIFIER = 'Qualifier';\n private static readonly ATTRIBUTE_TARGET_NAMESPACE = 'TargetNamespace';\n private static readonly ATTRIBUTE_TERM = 'Term';\n private static readonly ATTRIBUTE_NAME = 'Name';\n private static readonly ATTRIBUTE_VALUE = 'Value';\n private static readonly ATTRIBUTE_BASE_TYPE = 'BaseType';\n private static readonly ATTRIBUTE_OPEN_TYPE = 'OpenType';\n private static readonly ATTRIBUTE_TYPE = 'Type';\n private static readonly ATTRIBUTE_NULLABLE = 'Nullable';\n private static readonly ATTRIBUTE_MAX_LENGTH = 'MaxLength';\n private static readonly ATTRIBUTE_PRECISION = 'Precision';\n private static readonly ATTRIBUTE_SCALE = 'Scale';\n private static readonly ATTRIBUTE_UNICODE = 'Unicode';\n private static readonly ATTRIBUTE_SRID = 'SRID';\n private static readonly ATTRIBUTE_DEFAULT_VALUE = 'DefaultValue';\n private static readonly ATTRIBUTE_PARTNER = 'Partner';\n private static readonly ATTRIBUTE_PROPERTY = 'Property';\n private static readonly ATTRIBUTE_REFERENCED_PROPERTY = 'ReferencedProperty';\n private static readonly ATTRIBUTE_HAS_STREAM = 'HasStream';\n private static readonly ATTRIBUTE_CONTAINS_TARGET = 'ContainsTarget';\n private static readonly ATTRIBUTE_IS_BOUND = 'IsBound';\n private static readonly ATTRIBUTE_ENTITY_SET_PATH = 'EntitySetPath';\n private static readonly ATTRIBUTE_IS_COMPOSABLE = 'IsComposable';\n private static readonly ATTRIBUTE_ENTITY_TYPE = 'EntityType';\n private static readonly ATTRIBUTE_PATH = 'Path';\n private static readonly ATTRIBUTE_TARGET = 'Target';\n private static readonly ATTRIBUTE_FUNCTION = 'Function';\n private static readonly ATTRIBUTE_ACTION = 'Action';\n private static readonly ATTRIBUTE_ENTITY_SET = 'EntitySet';\n private static readonly ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT =\n 'IncludeInServiceDocument';\n private static readonly ATTRIBUTE_ABSTRACT = 'Abstract';\n private static readonly ATTRIBUTE_UNDERLYING_TYPE = 'UnderlyingType';\n private static readonly ATTRIBUTE_IS_FLAGS = 'IsFlags';\n private static readonly ATTRIBUTE_EXTENDS = 'Extends';\n private static readonly ATTRIBUTE_BASE_TERM = 'BaseTerm';\n private static readonly ATTRIBUTE_APPLIES_TO = 'AppliesTo';\n\n public readonly version: string;\n public readonly references: CsdlReference[];\n public readonly schemas: CsdlSchema[];\n\n constructor(xml: string) {\n try {\n const parser: DOMParser = new DOMParser();\n const document: Document = parser.parseFromString(xml, 'text/xml');\n\n this.checkVersion(document);\n\n this.version = this.getFieldValueByAttribute(\n new Field(ODataMetadata.ATTRIBUTE_VERSION, FieldType.ATTRIBUTE),\n document.documentElement.attributes\n );\n\n this.references = this.getObjects(\n document.documentElement,\n ODataMetadata.TAG_REFERENCE,\n [\n new Field(ODataMetadata.ATTRIBUTE_URI, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_INCLUDE, FieldType.TAG),\n new Field(ODataMetadata.TAG_INCLUDE_ANNOTATIONS, FieldType.TAG),\n new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),\n ]\n );\n\n const dataServices: Element =\n document.documentElement.getElementsByTagName(\n ODataMetadata.TAG_DATA_SERVICES\n )[0];\n this.schemas = this.getObjects(dataServices, ODataMetadata.TAG_SCHEMA, [\n new Field(ODataMetadata.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_ENUM_TYPE, FieldType.TAG),\n new Field(ODataMetadata.TAG_COMPLEX_TYPE, FieldType.TAG),\n new Field(ODataMetadata.TAG_ENTITY_TYPE, FieldType.TAG),\n new Field(ODataMetadata.TAG_FUNCTION, FieldType.TAG),\n new Field(ODataMetadata.TAG_ACTION, FieldType.TAG),\n new Field(ODataMetadata.TAG_ENTITY_CONTAINER, FieldType.TAG),\n new Field(ODataMetadata.TAG_TYPE_DEFINITION, FieldType.TAG),\n new Field(ODataMetadata.TAG_TERM, FieldType.TAG),\n new Field(ODataMetadata.TAG_ANNOTATIONS, FieldType.TAG),\n new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),\n ]);\n } catch (error) {\n throw new Error('Unable to parse metadata, ' + error);\n }\n }\n\n protected checkVersion(document: Document) {\n // check version\n const attributes: NamedNodeMap = document.documentElement.attributes;\n if (!attributes) {\n throw new Error('OData version is not specified in the metadata');\n }\n const attr: Attr | null = attributes.getNamedItem('Version');\n if (attr === null) {\n throw new Error('OData version is not specified in the metadata');\n }\n const odataVersion = attr?.nodeValue;\n if (odataVersion !== VERSION_4_0) {\n throw new Error('OData version \"' + odataVersion + '\" is not supported');\n }\n }\n\n protected getObjects(\n parentElement: Element,\n tag: string,\n fieldNames: Field[]\n ): any[] {\n let objects: any[] = [];\n\n const children: HTMLCollection = parentElement.children;\n for (let index = 0; index < children.length; index++) {\n const element = children.item(index);\n\n if (!element || element.nodeName !== tag) {\n continue;\n }\n\n const attributes: NamedNodeMap = element.attributes;\n const fieldValues: any[] = this.getFieldValues(\n fieldNames,\n attributes,\n element\n );\n switch (tag) {\n case ODataMetadata.TAG_REFERENCE:\n objects.push(\n new CsdlReference(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3]\n )\n );\n break;\n case ODataMetadata.TAG_INCLUDE:\n objects.push(new CsdlInclude(fieldValues[0], fieldValues[1]));\n break;\n case ODataMetadata.TAG_INCLUDE_ANNOTATIONS:\n objects.push(\n new CsdlIncludeAnnotations(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2]\n )\n );\n break;\n case ODataMetadata.TAG_TERM:\n objects.push(\n new CsdlTerm(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7],\n fieldValues[8],\n fieldValues[9]\n )\n );\n break;\n case ODataMetadata.TAG_ANNOTATIONS:\n objects.push(\n new CsdlAnnotations(fieldValues[0], fieldValues[1], fieldValues[2])\n );\n break;\n case ODataMetadata.TAG_ANNOTATION:\n objects.push(new CsdlAnnotation(fieldValues[0], fieldValues[1]));\n break;\n case ODataMetadata.TAG_SCHEMA:\n objects.push(\n new CsdlSchema(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7],\n fieldValues[8],\n fieldValues[9],\n fieldValues[10],\n fieldValues[11]\n )\n );\n break;\n case ODataMetadata.TAG_ENUM_TYPE:\n objects.push(\n new CsdlEnumType(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3]\n )\n );\n break;\n case ODataMetadata.TAG_COMPLEX_TYPE:\n objects.push(\n new CsdlComplexType(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5]\n )\n );\n break;\n case ODataMetadata.TAG_ENTITY_TYPE:\n objects.push(\n new CsdlEntityType(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7]\n )\n );\n break;\n case ODataMetadata.TAG_FUNCTION:\n objects.push(\n new CsdlFunction(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5]\n )\n );\n break;\n case ODataMetadata.TAG_MEMBER:\n objects.push(new CsdlEnumMember(fieldValues[0], fieldValues[1]));\n break;\n case ODataMetadata.TAG_PROPERTY:\n objects.push(\n new CsdlProperty(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7],\n fieldValues[8]\n )\n );\n break;\n case ODataMetadata.TAG_PROPERTY_REF:\n objects.push(new CsdlPropertyRef(fieldValues[0], fieldValues[1]));\n break;\n case ODataMetadata.TAG_NAVIGATION_PROPERTY:\n objects.push(\n new CsdlNavigationProperty(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6]\n )\n );\n break;\n case ODataMetadata.TAG_REFERENTIAL_CONSTRAINT:\n objects.push(\n new CsdlReferentialConstraint(fieldValues[0], fieldValues[1])\n );\n break;\n case ODataMetadata.TAG_PARAMETER:\n objects.push(\n new CsdlParameter(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6]\n )\n );\n break;\n case ODataMetadata.TAG_ACTION:\n objects.push(\n new CsdlAction(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4]\n )\n );\n break;\n case ODataMetadata.TAG_ENTITY_SET:\n objects.push(\n new CsdlEntitySet(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3]\n )\n );\n break;\n case ODataMetadata.TAG_SINGLETON:\n objects.push(\n new CsdlSingleton(fieldValues[0], fieldValues[1], fieldValues[2])\n );\n break;\n case ODataMetadata.TAG_FUNCTION_IMPORT:\n objects.push(\n new CsdlFunctionImport(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3]\n )\n );\n break;\n case ODataMetadata.TAG_ACTION_IMPORT:\n objects.push(\n new CsdlActionImport(fieldValues[0], fieldValues[1], fieldValues[2])\n );\n break;\n case ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING:\n objects.push(\n new CsdlNavigationPropertyBinding(fieldValues[0], fieldValues[1])\n );\n break;\n case ODataMetadata.TAG_TYPE_DEFINITION:\n objects.push(\n new CsdlTypeDefinition(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7]\n )\n );\n break;\n default:\n throw new Error('Unknwon tag:' + tag);\n }\n }\n\n return objects;\n }\n\n protected getObject(\n parentElement: Element,\n tag: string,\n fieldNames: Field[]\n ): any {\n let object: any;\n\n const children: HTMLCollection = parentElement.children;\n let element: Element | undefined | null;\n for (let index = 0; index < children.length; index++) {\n if (children && children.item(index)?.nodeName === tag) {\n if (element !== undefined && element !== null) {\n throw new Error('Expected one ' + tag);\n }\n element = children.item(index);\n }\n }\n\n if (element !== undefined && element !== null) {\n const attributes: NamedNodeMap = element.attributes;\n const fieldValues: any[] = this.getFieldValues(\n fieldNames,\n attributes,\n element\n );\n switch (tag) {\n case ODataMetadata.TAG_KEY:\n object = new CsdlKey(fieldValues[0]);\n break;\n case ODataMetadata.TAG_RETURN_TYPE:\n object = new CsdlReturnType(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5]\n );\n break;\n case ODataMetadata.TAG_ENTITY_CONTAINER:\n object = new CsdlEntityContainer(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5]\n );\n break;\n case ODataMetadata.TAG_ON_DELETE:\n object = new CsdlOnDelete(fieldValues[0]);\n break;\n default:\n throw new Error('Unknwon tag:' + tag);\n }\n }\n\n return object;\n }\n\n protected getFieldValues(\n fields: Field[],\n attributes: NamedNodeMap,\n element: Element\n ): any[] {\n const fieldValues: any[] = [];\n\n for (const field of fields) {\n if (field.fieldType === FieldType.TAG) {\n fieldValues.push(this.getFieldValueByTag(field, element));\n } else if (field.fieldType === FieldType.ATTRIBUTE) {\n fieldValues.push(this.getFieldValueByAttribute(field, attributes));\n } else {\n throw new Error('Unknown field type: ' + field.fieldType);\n }\n }\n\n return fieldValues;\n }\n\n protected getFieldValueByAttribute(\n field: Field,\n attributes: NamedNodeMap\n ): any {\n switch (field.name) {\n case ODataMetadata.ATTRIBUTE_VERSION:\n case ODataMetadata.ATTRIBUTE_URI:\n case ODataMetadata.ATTRIBUTE_NAMESPACE:\n case ODataMetadata.ATTRIBUTE_ALIAS:\n case ODataMetadata.ATTRIBUTE_TERM_NAMESPACE:\n case ODataMetadata.ATTRIBUTE_TERM:\n case ODataMetadata.ATTRIBUTE_QUALIFIER:\n case ODataMetadata.ATTRIBUTE_TARGET_NAMESPACE:\n case ODataMetadata.ATTRIBUTE_NAME:\n case ODataMetadata.ATTRIBUTE_TYPE:\n case ODataMetadata.ATTRIBUTE_SRID:\n case ODataMetadata.ATTRIBUTE_DEFAULT_VALUE:\n case ODataMetadata.ATTRIBUTE_PARTNER:\n case ODataMetadata.ATTRIBUTE_PROPERTY:\n case ODataMetadata.ATTRIBUTE_REFERENCED_PROPERTY:\n case ODataMetadata.ATTRIBUTE_BASE_TYPE:\n case ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH:\n case ODataMetadata.ATTRIBUTE_ENTITY_TYPE:\n case ODataMetadata.ATTRIBUTE_PATH:\n case ODataMetadata.ATTRIBUTE_TARGET:\n case ODataMetadata.ATTRIBUTE_FUNCTION:\n case ODataMetadata.ATTRIBUTE_ACTION:\n case ODataMetadata.ATTRIBUTE_ENTITY_SET:\n case ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE:\n case ODataMetadata.ATTRIBUTE_EXTENDS:\n case ODataMetadata.ATTRIBUTE_BASE_TERM:\n case ODataMetadata.ATTRIBUTE_APPLIES_TO:\n return this.getAttributeValue(attributes, field.name);\n case ODataMetadata.ATTRIBUTE_NULLABLE:\n case ODataMetadata.ATTRIBUTE_UNICODE:\n case ODataMetadata.ATTRIBUTE_OPEN_TYPE:\n case ODataMetadata.ATTRIBUTE_HAS_STREAM:\n case ODataMetadata.ATTRIBUTE_IS_BOUND:\n case ODataMetadata.ATTRIBUTE_IS_COMPOSABLE:\n case ODataMetadata.ATTRIBUTE_CONTAINS_TARGET:\n case ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT:\n case ODataMetadata.ATTRIBUTE_ABSTRACT:\n case ODataMetadata.ATTRIBUTE_IS_FLAGS:\n return this.propertyValueToBoolean(\n this.getAttributeValue(attributes, field.name)\n );\n case ODataMetadata.ATTRIBUTE_VALUE:\n case ODataMetadata.ATTRIBUTE_MAX_LENGTH:\n case ODataMetadata.ATTRIBUTE_PRECISION:\n case ODataMetadata.ATTRIBUTE_SCALE:\n return this.propertyValueToNumber(\n this.getAttributeValue(attributes, field.name)\n );\n default:\n throw new Error('Unknwon attribute:' + field.name);\n }\n }\n\n protected getFieldValueByTag(field: Field, element: Element): any[] {\n switch (field.name) {\n case ODataMetadata.TAG_INCLUDE:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_INCLUDE_ANNOTATIONS:\n return this.getObjects(element, field.name, [\n new Field(\n ODataMetadata.ATTRIBUTE_TERM_NAMESPACE,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_TARGET_NAMESPACE,\n FieldType.ATTRIBUTE\n ),\n ]);\n case ODataMetadata.TAG_TERM:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_BASE_TERM, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_DEFAULT_VALUE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_APPLIES_TO, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ANNOTATIONS:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ANNOTATION:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_TERM, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ENUM_TYPE:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_MEMBER, FieldType.TAG),\n new Field(\n ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.ATTRIBUTE_IS_FLAGS, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_COMPLEX_TYPE:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_PROPERTY, FieldType.TAG),\n new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_BASE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_OPEN_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ABSTRACT, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ENTITY_TYPE:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_KEY, FieldType.TAG),\n new Field(ODataMetadata.TAG_PROPERTY, FieldType.TAG),\n new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_BASE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_OPEN_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_HAS_STREAM, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ABSTRACT, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_FUNCTION:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_RETURN_TYPE, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_IS_BOUND, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.ATTRIBUTE_IS_COMPOSABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_PARAMETER, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_MEMBER:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_VALUE, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_PROPERTY:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_DEFAULT_VALUE, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_KEY:\n return this.getObject(element, field.name, [\n new Field(ODataMetadata.TAG_PROPERTY_REF, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_PROPERTY_REF:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_NAVIGATION_PROPERTY:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PARTNER, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_CONTAINS_TARGET,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.TAG_REFERENTIAL_CONSTRAINT, FieldType.TAG),\n new Field(ODataMetadata.TAG_ON_DELETE, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_REFERENTIAL_CONSTRAINT:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_PROPERTY, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_REFERENCED_PROPERTY,\n FieldType.ATTRIBUTE\n ),\n ]);\n case ODataMetadata.TAG_ON_DELETE:\n return this.getObject(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_PARAMETER:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_RETURN_TYPE:\n return this.getObject(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ACTION:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_RETURN_TYPE, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_IS_BOUND, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.TAG_PARAMETER, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_ENTITY_CONTAINER:\n return this.getObject(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_EXTENDS, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_ENTITY_SET, FieldType.TAG),\n new Field(ODataMetadata.TAG_SINGLETON, FieldType.TAG),\n new Field(ODataMetadata.TAG_FUNCTION_IMPORT, FieldType.TAG),\n new Field(ODataMetadata.TAG_ACTION_IMPORT, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_ENTITY_SET:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ENTITY_TYPE, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING,\n FieldType.TAG\n ),\n new Field(\n ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT,\n FieldType.ATTRIBUTE\n ),\n ]);\n case ODataMetadata.TAG_SINGLETON:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING,\n FieldType.TAG\n ),\n ]);\n case ODataMetadata.TAG_FUNCTION_IMPORT:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_FUNCTION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT,\n FieldType.ATTRIBUTE\n ),\n ]);\n case ODataMetadata.TAG_ACTION_IMPORT:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_PATH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_TYPE_DEFINITION:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),\n ]);\n default:\n throw new Error('Unknwon tag:' + field.name);\n }\n }\n\n protected getAttributeValue(attributes: NamedNodeMap, attributeName: string) {\n const attribute: Attr | null = attributes.getNamedItem(attributeName);\n return attribute !== null && attribute.nodeValue\n ? attribute.nodeValue\n : undefined;\n }\n\n protected propertyValueToNumber(attributeValue?: string) {\n return attributeValue !== undefined ? Number(attributeValue) : undefined;\n }\n\n protected propertyValueToBoolean(attributeValue?: string) {\n return attributeValue !== undefined ? attributeValue === 'true' : false;\n }\n}\n","import {\n HttpErrorResponse,\n HttpHeaders,\n HttpResponse,\n} from '@angular/common/http';\nimport { Observable, Subject } from 'rxjs';\nimport { ODataApi } from '../../api';\nimport {\n $BATCH,\n ACCEPT,\n APPLICATION_HTTP,\n APPLICATION_JSON,\n BATCH_PREFIX,\n BINARY,\n BOUNDARY_PREFIX_SUFFIX,\n CHANGESET_PREFIX,\n CONTENT_ID,\n CONTENT_TRANSFER_ENCODING,\n CONTENT_TYPE,\n HTTP11,\n MULTIPART_MIXED,\n MULTIPART_MIXED_BOUNDARY,\n NEWLINE,\n NEWLINE_REGEXP,\n ODATA_VERSION,\n VERSION_4_0,\n XSSI_PREFIX,\n} from '../../constants';\nimport { PathSegmentNames } from '../../types';\nimport { Http } from '../../utils/http';\nimport { Strings } from '../../utils/strings';\nimport { ODataPathSegments } from '../path';\nimport { ODataRequest } from '../request';\nimport { ODataResource } from '../resource';\nimport { ODataResponse } from '../responses';\nimport { ODataOptions } from './options';\n\nexport class ODataBatchRequest<T> extends Subject<ODataResponse<T>> {\n constructor(public request: ODataRequest<any>) {\n super();\n }\n\n override toString() {\n //TODO: Relative or Absolute url ?\n let res = [\n `${this.request.method} ${this.request.pathWithParams} ${HTTP11}`,\n ];\n if (\n this.request.method === 'POST' ||\n this.request.method === 'PATCH' ||\n this.request.method === 'PUT'\n ) {\n res.push(`${CONTENT_TYPE}: ${APPLICATION_JSON}`);\n }\n\n if (this.request.headers instanceof HttpHeaders) {\n let headers = this.request.headers;\n res = [\n ...res,\n ...headers\n .keys()\n .map((key) => `${key}: ${(headers.getAll(key) || []).join(',')}`),\n ];\n }\n\n return res.join(NEWLINE);\n }\n\n onLoad(content: string[], status: { code: number; message: string }) {\n let headers: HttpHeaders = new HttpHeaders();\n var index = 1;\n for (; index < content.length; index++) {\n const batchBodyLine: string = content[index];\n\n if (batchBodyLine === '') {\n break;\n }\n\n const batchBodyLineParts: string[] = batchBodyLine.split(': ');\n headers = headers.append(\n batchBodyLineParts[0].trim(),\n batchBodyLineParts[1].trim()\n );\n }\n\n let body: string | { error: any; text: string } = '';\n for (; index < content.length; index++) {\n body += content[index];\n }\n\n if (status.code === 0) {\n status.code = !!body ? 200 : 0;\n }\n\n let ok = status.code >= 200 && status.code < 300;\n if (this.request.responseType === 'json' && typeof body === 'string') {\n const originalBody = body;\n body = body.replace(XSSI_PREFIX, '');\n try {\n body = body !== '' ? JSON.parse(body) : null;\n } catch (error) {\n body = originalBody;\n\n if (ok) {\n ok = false;\n body = { error, text: body };\n }\n }\n }\n\n if (ok) {\n let res = new HttpResponse<any>({\n body,\n headers,\n status: status.code,\n statusText: status.message,\n url: this.request.urlWithParams,\n });\n this.next(ODataResponse.fromHttpResponse(this.request, res));\n this.complete();\n } else {\n // An unsuccessful request is delivered on the error channel.\n this.error(\n new HttpErrorResponse({\n // The error in this case is the response body (error from the server).\n error: body,\n headers,\n status: status.code,\n statusText: status.message,\n url: this.request.urlWithParams,\n })\n );\n }\n }\n\n onError(content: string[], status: { code: number; text: string }) {\n const res = new HttpErrorResponse({\n error: content.join(NEWLINE),\n status: status.code || 0,\n statusText: status.text || 'Unknown Error',\n url: this.request.urlWithParams || undefined,\n });\n this.error(res);\n }\n}\n\n/**\n * OData Batch Resource\n * https://www.odata.org/getting-started/advanced-tutorial/#batch\n */\nexport class ODataBatchResource extends ODataResource<any> {\n // VARIABLES\n private _requests: ODataBatchRequest<any>[] = [];\n requests() {\n return this._requests.map((r) => r.request);\n }\n\n //#region Factory\n static factory(api: ODataApi) {\n let segments = new ODataPathSegments();\n segments.add(PathSegmentNames.batch, $BATCH);\n return new ODataBatchResource(api, { segments });\n }\n //#endregion\n\n private storeRequester() {\n const current = this.api.request;\n // Switch to the batch requester\n this.api.request = (req: ODataRequest<any>): Observable<any> => {\n if (req.api !== this.api)\n throw new Error('Batch Request are for the same api.');\n if (req.observe === 'events')\n throw new Error(\"Batch Request does not allows observe == 'events'.\");\n this._requests.push(new ODataBatchRequest<any>(req));\n return this._requests[this._requests.length - 1];\n };\n return current;\n }\n\n private restoreRequester(\n handler: (req: ODataRequest<any>) => Observable<any>\n ) {\n this.api.request = handler;\n }\n\n /**\n * Add to batch request\n * @param ctx The context for the request\n * @returns The result of execute the context\n */\n add<R>(ctx: (batch: this) => Observable<R>): Observable<R> {\n // Store original requester\n var handler = this.storeRequester();\n // Execute the context\n const obs$ = ctx(this);\n // Restore original requester\n this.restoreRequester(handler);\n\n return obs$;\n }\n\n send(options?: ODataOptions) {\n if (this._requests.length >= 0) {\n const bound = Strings.uniqueId(BATCH_PREFIX);\n const requests = this._requests;\n // Clean requests\n this._requests = [];\n const headers = Http.mergeHttpHeaders(\n (options && options.headers) || {},\n {\n [ODATA_VERSION]: VERSION_4_0,\n [CONTENT_TYPE]: MULTIPART_MIXED_BOUNDARY + bound,\n [ACCEPT]: MULTIPART_MIXED,\n }\n );\n const request = new ODataRequest({\n method: 'POST',\n body: ODataBatchResource.buildBody(bound, requests),\n api: this.api,\n resource: this,\n observe: 'response',\n responseType: 'text',\n headers: headers,\n params: options ? options.params : undefined,\n withCredentials: options ? options.withCredentials : undefined,\n });\n this.api.request(request).subscribe((response) => {\n ODataBatchResource.handleResponse(requests, response);\n });\n }\n }\n\n /**\n * Execute the batch request\n * @param ctx The context for the request\n * @param options The options of the batch request\n * @returns The result of execute the context\n */\n exec<R>(\n ctx: (batch: this) => Observable<R>,\n options?: ODataOptions\n ): Observable<R> {\n const obs$ = this.add(ctx);\n this.send(options);\n\n return obs$;\n }\n\n body() {\n return ODataBatchResource.buildBody(\n Strings.uniqueId(BATCH_PREFIX),\n this._requests\n );\n }\n\n static buildBody(\n batchBoundary: string,\n requests: ODataBatchRequest<any>[]\n ): string {\n let res = [];\n let changesetBoundary: string | null = null;\n let changesetId = 1;\n\n for (const batch of requests) {\n // if method is GET and there is a changeset boundary open then close it\n if (batch.request.method === 'GET' && changesetBoundary !== null) {\n res.push(\n `${BOUNDARY_PREFIX_SUFFIX}${changesetBoundary}${BOUNDARY_PREFIX_SUFFIX}`\n );\n changesetBoundary = null;\n }\n\n // if there is no changeset boundary open then open a batch boundary\n if (changesetBoundary === null) {\n res.push(`${BOUNDARY_PREFIX_SUFFIX}${batchBoundary}`);\n }\n\n // if method is not GET and there is no changeset boundary open then open a changeset boundary\n if (batch.request.method !== 'GET') {\n if (changesetBoundary === null) {\n changesetBoundary = Strings.uniqueId(CHANGESET_PREFIX);\n res.push(\n `${CONTENT_TYPE}: ${MULTIPART_MIXED_BOUNDARY}${changesetBoundary}`\n );\n res.push(NEWLINE);\n }\n res.push(`${BOUNDARY_PREFIX_SUFFIX}${changesetBoundary}`);\n }\n\n res.push(`${CONTENT_TYPE}: ${APPLICATION_HTTP}`);\n res.push(`${CONTENT_TRANSFER_ENCODING}: ${BINARY}`);\n\n if (batch.request.method !== 'GET') {\n res.push(`${CONTENT_ID}: ${changesetId++}`);\n }\n\n res.push(NEWLINE);\n res.push(`${batch}`);\n\n if (batch.request.method === 'GET' || batch.request.method === 'DELETE') {\n res.push(NEWLINE);\n } else {\n res.push(`${NEWLINE}${JSON.stringify(batch.request.body)}`);\n }\n }\n\n if (res.length) {\n if (changesetBoundary !== null) {\n res.push(\n `${BOUNDARY_PREFIX_SUFFIX}${changesetBoundary}${BOUNDARY_PREFIX_SUFFIX}`\n );\n changesetBoundary = null;\n }\n res.push(\n `${BOUNDARY_PREFIX_SUFFIX}${batchBoundary}${BOUNDARY_PREFIX_SUFFIX}`\n );\n }\n return res.join(NEWLINE);\n }\n\n static handleResponse(\n requests: ODataBatchRequest<any>[],\n response: ODataResponse<any>\n ) {\n let chunks: string[][] = [];\n const contentType: string = response.headers.get(CONTENT_TYPE) || '';\n const batchBoundary: string = Http.boundaryDelimiter(contentType);\n const endLine: string = Http.boundaryEnd(batchBoundary);\n\n const lines: string[] = response.body.split(NEWLINE_REGEXP);\n\n let changesetResponses: string[][] | null = null;\n let contentId: number | null = null;\n let changesetBoundary: string | null = null;\n let changesetEndLine: string | null = null;\n let startIndex: number | null = null;\n for (let index = 0; index < lines.length; index++) {\n const line = lines[index];\n\n if (line.startsWith(CONTENT_TYPE)) {\n const contentTypeValue: string = Http.headerValue(line);\n if (contentTypeValue === MULTIPART_MIXED) {\n changesetResponses = [];\n contentId = null;\n changesetBoundary = Http.boundaryDelimiter(line);\n changesetEndLine = Http.boundaryEnd(changesetBoundary);\n startIndex = null;\n }\n continue;\n } else if (changesetResponses !== null && line.startsWith(CONTENT_ID)) {\n contentId = Number(Http.headerValue(line));\n } else if (line.startsWith(HTTP11)) {\n startIndex = index;\n } else if (\n line === batchBoundary ||\n line === changesetBoundary ||\n line === endLine ||\n line === changesetEndLine\n ) {\n if (!startIndex) {\n continue;\n }\n const chunk = lines.slice(startIndex, index);\n if (changesetResponses !== null && contentId !== null) {\n changesetResponses[contentId] = chunk;\n } else {\n chunks.push(chunk);\n }\n\n if (line === batchBoundary || line === changesetBoundary) {\n startIndex = index + 1;\n } else if (line === endLine || line === changesetEndLine) {\n if (changesetResponses !== null) {\n for (const response of changesetResponses) {\n if (response) {\n chunks.push(response);\n }\n }\n }\n changesetResponses = null;\n changesetBoundary = null;\n changesetEndLine = null;\n startIndex = null;\n }\n }\n }\n chunks.forEach((chunk, index) => {\n const req = requests[index];\n const { code, message } = Http.parseResponseStatus(chunk[0]);\n req.onLoad(chunk.slice(1), { code, message });\n });\n }\n}\n","import { Observable } from 'rxjs';\nimport { ODataApi } from '../../api';\nimport { $COUNT } from '../../constants';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataOptions } from './options';\n\nexport class ODataCountResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<T>(\n api: ODataApi,\n {\n segments,\n query,\n }: {\n segments: ODataPathSegments;\n query?: ODataQueryOptions<T>;\n }\n ) {\n segments.add(PathSegmentNames.count, $COUNT).type('Edm.Int32');\n query?.keep(QueryOptionNames.filter, QueryOptionNames.search);\n return new ODataCountResource<T>(api, { segments, query });\n }\n //#endregion\n\n //#region Requests\n protected override get(options?: ODataOptions): Observable<number> {\n return super.get({ responseType: 'value', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n /**\n * Fetch the count of the set.\n * @param options Options for the request\n * @returns The count of the set\n */\n fetch(options?: ODataOptions): Observable<number> {\n return this.get(options);\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataCollection } from '../../models/collection';\nimport { ODataModel } from '../../models/model';\nimport { ODataCallable } from '../../schema/callable';\nimport { PathSegmentNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity, ODataProperty } from '../responses';\nimport {\n ODataEntitiesOptions,\n ODataEntityOptions,\n ODataNoneOptions,\n ODataOptions,\n ODataPropertyOptions,\n} from './options';\n\nexport class ODataFunctionResource<P, R> extends ODataResource<R> {\n //#region Factory\n static factory<P, R>(\n api: ODataApi,\n {\n path,\n schema,\n segments,\n query,\n }: {\n path?: string;\n schema?: ODataCallable<R>;\n segments?: ODataPathSegments;\n query?: ODataQueryOptions<R>;\n }\n ) {\n segments = segments || new ODataPathSegments();\n path = schema !== undefined ? schema.path() : path;\n if (path === undefined)\n throw new Error(`ODataActionResource: path is required`);\n\n const segment = segments.add(PathSegmentNames.function, path);\n if (schema !== undefined) segment.type(schema.type());\n return new ODataFunctionResource<P, R>(api, {\n segments,\n query,\n schema,\n });\n }\n\n static fromResource<P, R>(resource: ODataResource<any>, path: string) {\n const baseType = resource.type();\n const schema = resource.api.findCallableForType<R>(path, baseType);\n const bindingType = schema?.binding()?.type;\n\n const func = ODataFunctionResource.factory<P, R>(resource.api, {\n path,\n schema,\n segments: resource.cloneSegments(),\n });\n\n // Switch entitySet to binding type if available\n if (bindingType !== undefined && bindingType !== baseType) {\n let entitySet = resource.api.findEntitySetForType(bindingType);\n if (entitySet !== undefined) {\n func.segment((s) => s.entitySet().path(entitySet!.name));\n }\n }\n\n return func;\n }\n //#endregion\n\n override returnType() {\n return this.schema instanceof ODataCallable\n ? this.schema.parser.return?.type\n : undefined;\n }\n\n parameters(params: P | null, { alias }: { alias?: boolean } = {}) {\n let parameters = params !== null ? this.encode(params) : null;\n if (alias && parameters !== null) {\n this.query((q) => {\n parameters = Object.entries(parameters).reduce((acc, [name, param]) => {\n return Object.assign(acc, { [name]: q.alias(param, name) });\n }, {});\n });\n }\n return this.clone<ODataFunctionResource<P, R>>().segment((s) =>\n s.function().parameters<P>(parameters)\n );\n }\n\n //#region Requests\n protected override get(\n options?: ODataEntityOptions & ODataEntitiesOptions & ODataPropertyOptions\n ): Observable<any> {\n return super.get(options);\n }\n //#endregion\n\n //#region Shortcuts\n /**\n * Execute the function\n * @param params Parameters to be sent to the function\n * @param alias If true, the parameters will be send using aliases\n * @param options Options for the request\n */\n call(\n params: P | null,\n options?: { alias?: boolean } & ODataEntityOptions\n ): Observable<ODataEntity<R>>;\n call(\n params: P | null,\n options?: { alias?: boolean } & ODataEntitiesOptions\n ): Observable<ODataEntities<R>>;\n call(\n params: P | null,\n options?: { alias?: boolean } & ODataPropertyOptions\n ): Observable<ODataProperty<R>>;\n call(\n params: P | null,\n options?: { alias?: boolean } & ODataNoneOptions\n ): Observable<null>;\n call(\n params: P | null,\n {\n alias,\n ...options\n }: { alias?: boolean } & ODataEntityOptions &\n ODataEntitiesOptions &\n ODataPropertyOptions &\n ODataNoneOptions = {}\n ): Observable<any> {\n return this.parameters(params, { alias }).get(options);\n }\n\n /**\n * Execute the function with the given parameters and return the result as a property\n * @param params Parameters to be sent to the function\n * @param alias If true, the parameters will be send using aliases\n * @param options Options for the request\n * @returns Observable of the result of the function\n */\n callProperty(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & ODataOptions = {}\n ): Observable<R | null> {\n return this.call(params, {\n responseType: 'property',\n alias,\n ...options,\n }).pipe(map(({ property }) => property));\n }\n\n /**\n * Execute the function with the given parameters and return the result as a entity\n * @param params Parameters to be sent to the function\n * @param alias If true, the parameters will be send using aliases\n * @param options Options for the request\n * @returns Observable of the result of the function\n */\n callEntity(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & ODataOptions = {}\n ): Observable<R | null> {\n return this.call(params, {\n responseType: 'entity',\n alias,\n ...options,\n }).pipe(map(({ entity }) => entity));\n }\n\n /**\n * Execute the function with the given parameters and return the result as a model\n * @param params Parameters to be sent to the function\n * @param alias If true, the parameters will be send using aliases\n * @param options Options for the request\n * @returns Observable of the result of the function\n */\n callModel<M extends ODataModel<R>>(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & ODataOptions = {}\n ): Observable<M | null> {\n return this.call(params, {\n responseType: 'entity',\n alias,\n ...options,\n }).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots, reset: true }) : null\n )\n );\n }\n\n /**\n * Execute the function with the given parameters and return the result as a entities\n * @param params Parameters to be sent to the function\n * @param alias If true, the parameters will be send using aliases\n * @param options Options for the request\n * @returns Observable of the result of the function\n */\n callEntities(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & ODataOptions = {}\n ): Observable<R[] | null> {\n return this.call(params, {\n responseType: 'entities',\n alias,\n ...options,\n }).pipe(map(({ entities }) => entities));\n }\n\n /**\n * Execute the function with the given parameters and return the result as a collection\n * @param params Parameters to be sent to the function\n * @param alias If true, the parameters will be send using aliases\n * @param options Options for the request\n * @returns Observable of the result of the function\n */\n callCollection<M extends ODataModel<R>, C extends ODataCollection<R, M>>(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & ODataOptions = {}\n ): Observable<C | null> {\n return this.call(params, {\n responseType: 'entities',\n alias,\n ...options,\n }).pipe(\n map(({ entities, annots }) =>\n entities\n ? this.asCollection<M, C>(entities, { annots, reset: true })\n : null\n )\n );\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { ODataApi } from '../../api';\nimport { $VALUE } from '../../constants';\nimport { PathSegmentNames } from '../../types';\nimport { Http } from '../../utils';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataOptions } from './options';\n\nexport class ODataMediaResource extends ODataResource<any> {\n //#region Factory\n static factory<V>(\n api: ODataApi,\n {\n segments,\n query,\n }: {\n segments: ODataPathSegments;\n query?: ODataQueryOptions<V>;\n }\n ) {\n segments.add(PathSegmentNames.value, $VALUE);\n return new ODataMediaResource(api, { segments, query });\n }\n //#endregion\n\n //#region Requests\n protected override get(\n options: { responseType: any } & ODataOptions\n ): Observable<any> {\n return super.get(options);\n }\n\n protected override put(\n data: ArrayBuffer | Blob,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<any> {\n return super.put(data, options);\n }\n //#endregion\n\n //#region Shortcuts\n fetch(\n options?: { responseType: 'arraybuffer' } & ODataOptions\n ): Observable<ArrayBuffer>;\n fetch(options?: { responseType: 'blob' } & ODataOptions): Observable<Blob>;\n fetch(options: { responseType: any } & ODataOptions): Observable<any> {\n return this.get(options);\n }\n\n fetchArraybuffer(options: ODataOptions = {}): Observable<ArrayBuffer> {\n return this.fetch({ responseType: 'arraybuffer', ...options });\n }\n\n fetchBlob(options: ODataOptions = {}): Observable<Blob> {\n return this.fetch({ responseType: 'blob', ...options });\n }\n\n upload(\n data: ArrayBuffer | Blob,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<any> {\n return this.put(data, options);\n }\n\n uploadArrayBuffer(\n data: ArrayBuffer,\n contentType: string,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<any> {\n options.headers = Http.mergeHttpHeaders(options.headers || {}, {\n 'Content-Type': contentType,\n });\n return this.upload(data, options);\n }\n\n uploadBlob(\n data: Blob,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<any> {\n return this.upload(data, options);\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { ODataApi } from '../../api';\nimport { $VALUE } from '../../constants';\nimport { ODataStructuredType } from '../../schema/structured-type';\nimport { PathSegmentNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataOptions } from './options';\n\nexport class ODataValueResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<V>(\n api: ODataApi,\n {\n type,\n schema,\n segments,\n query,\n }: {\n type?: string;\n schema?: ODataStructuredType<V>;\n segments: ODataPathSegments;\n query?: ODataQueryOptions<V>;\n }\n ) {\n const baseType = type;\n const bindingType = schema?.type();\n\n const segment = segments.add(PathSegmentNames.value, $VALUE);\n if (schema !== undefined) segment.type(schema.type());\n else if (type !== undefined) segment.type(type);\n\n query?.clear();\n const value = new ODataValueResource<V>(api, { segments, query, schema });\n\n // Switch entitySet to binding type if available\n if (bindingType !== undefined && bindingType !== baseType) {\n let entitySet = api.findEntitySetForType(bindingType);\n if (entitySet !== undefined) {\n value.segment((s) => s.entitySet().path(entitySet!.name));\n }\n }\n\n return value;\n }\n //#endregion\n\n //#region Requests\n protected override get(options?: ODataOptions): Observable<T> {\n return super.get({ responseType: 'value', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n\n /**\n * Fetch the value of the resource.\n * @param options OData options.\n * @returns Observable of the value.\n */\n fetch(options?: ODataOptions): Observable<T> {\n return this.get(options);\n }\n\n //#endregion\n}\n","import { EMPTY, Observable } from 'rxjs';\nimport { concatMap, expand, map, toArray } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataCollection, ODataModel } from '../../models';\nimport { ODataStructuredType, ODataStructuredTypeParser } from '../../schema';\n//import { ODataNavigationPropertyResource } from './navigation-property';\nimport { PathSegmentNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport {\n ODataEntities,\n ODataEntitiesAnnotations,\n ODataEntity,\n ODataEntityAnnotations,\n ODataProperty,\n} from '../responses';\nimport {\n ODataEntitiesOptions,\n ODataEntityOptions,\n ODataOptions,\n ODataPropertyOptions,\n} from './options';\nimport { ODataValueResource } from './value';\n\nexport class ODataPropertyResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<P>(\n api: ODataApi,\n {\n path,\n type,\n schema,\n segments,\n query,\n }: {\n path: string;\n type?: string;\n schema?: ODataStructuredType<P>;\n segments: ODataPathSegments;\n query?: ODataQueryOptions<P>;\n }\n ) {\n const segment = segments.add(PathSegmentNames.property, path);\n if (schema !== undefined) segment.type(schema.type());\n else if (type !== undefined) segment.type(type);\n\n query?.clear();\n return new ODataPropertyResource<P>(api, {\n segments,\n query,\n schema,\n });\n }\n\n static fromResource<N>(resource: ODataResource<any>, path: string) {\n const baseType = resource.type();\n let baseSchema = resource.schema as ODataStructuredType<any> | undefined;\n let fieldType: string | undefined;\n let fieldSchema: ODataStructuredType<N> | undefined;\n if (baseSchema !== undefined) {\n const field = baseSchema.findFieldByName<N>(path);\n fieldType = field?.type;\n fieldSchema =\n fieldType !== undefined\n ? resource.api.findStructuredTypeForType(fieldType)\n : undefined;\n baseSchema =\n field !== undefined\n ? baseSchema.findSchemaForField<N>(field)\n : undefined;\n }\n\n const property = ODataPropertyResource.factory<N>(resource.api, {\n path,\n type: fieldType,\n schema: fieldSchema,\n segments: resource.cloneSegments(),\n query: resource.cloneQuery<N>(),\n });\n\n // Switch entitySet to binding type if available\n if (baseSchema !== undefined && baseSchema.type() !== baseType) {\n let entitySet = resource.api.findEntitySetForType(baseSchema.type());\n if (entitySet !== undefined) {\n property.segment((s) => s.entitySet().path(entitySet!.name));\n }\n }\n\n return property;\n }\n //#endregion\n\n key(value: any) {\n const property = this.clone<ODataPropertyResource<T>>();\n var key = this.resolveKey(value);\n if (key !== undefined) property.segment((s) => s.property().key(key));\n return property;\n }\n\n keys(values: any[]) {\n const property = this.clone<ODataPropertyResource<T>>();\n const types = this.pathSegments.types({ key: true });\n const keys = values.map((value, index) =>\n ODataResource.resolveKey(\n value,\n this.api.findStructuredTypeForType<T>(types[index])\n )\n );\n property.segment((s) => s.keys(keys));\n return property;\n }\n\n value() {\n return ODataValueResource.factory<T>(this.api, {\n type: this.returnType(),\n schema: this.schema as ODataStructuredType<T>,\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n }\n\n /*\n navigationProperty<N>(path: string) {\n let schema: ODataStructuredType<N> | undefined;\n if (this.schema instanceof ODataStructuredType) {\n const field = this.schema.findFieldByName<any>(path as keyof T);\n schema =\n field !== undefined\n ? this.schema.findSchemaForField<N>(field)\n : undefined;\n }\n return ODataNavigationPropertyResource.factory<N>(this.api, {\n path,\n schema,\n segments: this.cloneSegments(),\n query: this.cloneQuery<N>(),\n });\n }\n */\n\n property<P>(path: string) {\n let type: string | undefined;\n let schema: ODataStructuredType<P> | undefined;\n if (this.schema instanceof ODataStructuredType) {\n const field = this.schema.findFieldByName<any>(path as keyof T);\n type = field?.type;\n schema =\n field !== undefined\n ? this.schema.findSchemaForField<P>(field)\n : undefined;\n }\n return ODataPropertyResource.factory<P>(this.api, {\n path,\n type,\n schema,\n segments: this.cloneSegments(),\n query: this.cloneQuery<P>(),\n });\n }\n\n //#region Requests\n protected override get(\n options: ODataEntityOptions & ODataEntitiesOptions & ODataPropertyOptions\n ): Observable<any> {\n return super.get(options);\n }\n //#endregion\n\n //#region Shortcuts\n /**\n * Fetch the property\n * @param options Options for the request\n * @return The entity / entities / property value\n */\n fetch(\n options?: ODataEntityOptions & { etag?: string }\n ): Observable<ODataEntity<T>>;\n fetch(options?: ODataEntitiesOptions): Observable<ODataEntities<T>>;\n fetch(options?: ODataPropertyOptions): Observable<ODataProperty<T>>;\n fetch(\n options: ODataEntityOptions &\n ODataEntitiesOptions &\n ODataPropertyOptions & { etag?: string } = {}\n ): Observable<any> {\n return this.get(options);\n }\n\n /**\n * Fetch the property value\n * @param options Options for the request\n * @returns The property value\n */\n fetchProperty(\n options: ODataOptions & { etag?: string } = {}\n ): Observable<T | null> {\n return this.fetch({ responseType: 'property', ...options }).pipe(\n map(({ property }) => property)\n );\n }\n\n /**\n * Fetch the entity\n * @param options Options for the request\n * @returns The entity\n */\n fetchEntity(\n options: ODataOptions & { etag?: string } = {}\n ): Observable<T | null> {\n return this.fetch({ responseType: 'entity', ...options }).pipe(\n map(({ entity }) => entity)\n );\n }\n\n /**\n * Fetch the entity and return as model\n * @param options Options for the request\n * @returns The model\n */\n fetchModel<M extends ODataModel<T>>(\n options: ODataOptions & { etag?: string } = {}\n ): Observable<M | null> {\n return this.fetch({ responseType: 'entity', ...options }).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots, reset: true }) : null\n )\n );\n }\n\n /**\n * Fetch the entities\n * @param options Options for the request\n * @returns The entities\n */\n fetchEntities(\n options: ODataOptions & { withCount?: boolean } = {}\n ): Observable<T[] | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities }) => entities)\n );\n }\n\n /**\n * Fetch the entities and return as collection\n * @param options Options for the request\n * @returns The collection\n */\n fetchCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n options: ODataOptions & { withCount?: boolean } = {}\n ): Observable<C | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities, annots }) =>\n entities\n ? this.asCollection<M, C>(entities, { annots, reset: true })\n : null\n )\n );\n }\n\n /**\n * Fetch all entities\n * @param options Options for the request\n * @returns All entities\n */\n fetchAll(options: ODataOptions = {}): Observable<T[]> {\n let res = this.clone<ODataPropertyResource<T>>();\n // Clean Paging\n res.query((q) => q.clearPaging());\n let fetch = (opts?: {\n skip?: number;\n skiptoken?: string;\n top?: number;\n }): Observable<ODataEntities<T>> => {\n if (opts) {\n res.query((q) => q.paging(opts));\n }\n return res.fetch({ responseType: 'entities', ...options });\n };\n return fetch().pipe(\n expand(({ annots: meta }) =>\n meta.skip || meta.skiptoken ? fetch(meta) : EMPTY\n ),\n concatMap(({ entities }) => entities || []),\n toArray()\n );\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { $ID, $REF, ODATA_ID } from '../../constants';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity } from '../responses/types';\nimport { ODataEntityResource } from './entity';\nimport {\n ODataEntitiesOptions,\n ODataEntityOptions,\n ODataOptions,\n} from './options';\n\nexport class ODataReferenceResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<P>(\n api: ODataApi,\n {\n segments,\n query,\n }: { segments: ODataPathSegments; query?: ODataQueryOptions<P> }\n ) {\n segments.add(PathSegmentNames.reference, $REF);\n query?.clear();\n return new ODataReferenceResource<P>(api, { segments, query });\n }\n //#endregion\n\n //#region Requests\n protected override post(\n target: ODataEntityResource<any>,\n options?: ODataOptions\n ): Observable<any> {\n return super.post({ [ODATA_ID]: target.endpointUrl(false) }, options);\n }\n\n protected override put(\n target: ODataEntityResource<any>,\n options?: ODataOptions & { etag?: string }\n ): Observable<any> {\n return super.put({ [ODATA_ID]: target.endpointUrl(false) }, options);\n }\n\n protected override delete({\n etag,\n target,\n ...options\n }: {\n etag?: string;\n target?: ODataEntityResource<any>;\n } & ODataOptions = {}): Observable<any> {\n if (target) {\n options.params = { [$ID]: target.endpointUrl(false) };\n }\n return super.delete({ etag, ...options });\n }\n //#endregion\n\n //#region Shortcuts for collections\n /**\n * Add the given target to the collection.\n * @param target The target resource\n * @param options Options for the request\n * @returns Observable of the response\n */\n add(\n target: ODataEntityResource<any>,\n options?: ODataOptions\n ): Observable<any> {\n return this.post(target, options);\n }\n\n /**\n * Remove the given target from the collection.\n * @param target The target resource\n * @param options Options for the request\n * @returns Observable of the response\n */\n remove(\n target?: ODataEntityResource<any>,\n options?: ODataOptions\n ): Observable<any> {\n return this.delete({ target, ...options });\n }\n //#region\n\n //#region Shortcuts for single\n /**\n * Set the reference to the given target.\n * @param target The target resource\n * @param options Options for the request\n * @returns Observable of the response\n */\n set(\n target: ODataEntityResource<any>,\n options?: ODataOptions & { etag?: string }\n ): Observable<any> {\n return this.put(target, options);\n }\n\n /**\n * Unset the reference to the given target.\n * @param options Options for the request.\n * @returns Observable of the response\n */\n unset(options?: ODataOptions & { etag?: string }): Observable<any> {\n return this.delete(options);\n }\n //#endregion\n\n //#region Fetch\n /**\n * Fetch entity / entities\n * @param options Options for the request\n * @return An observable of the entity or entities with annotations\n */\n fetch(\n options?: ODataEntityOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntity<T>>;\n fetch(\n options?: ODataEntitiesOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntities<T>>;\n fetch(\n options: ODataEntityOptions &\n ODataEntitiesOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<any> {\n return this.get(options);\n }\n\n /**\n * Fetch the entity\n * @param options Options for the request\n * @returns The entity\n */\n fetchEntity(\n options: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<T | null> {\n return this.fetch({ responseType: 'entity', ...options }).pipe(\n map(({ entity }) => entity)\n );\n }\n\n /**\n * Fetch entities\n * @param options Options for the request\n * @returns The entities\n */\n fetchEntities(\n options: ODataOptions & {\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<T[] | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities }) => entities)\n );\n }\n //#endregion\n}\n","import { EMPTY, Observable } from 'rxjs';\nimport { concatMap, expand, map, toArray } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataCollection, ODataModel } from '../../models';\nimport { ODataStructuredType } from '../../schema';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity } from '../responses';\nimport { ODataCountResource } from './count';\nimport { ODataMediaResource } from './media';\nimport {\n ODataEntitiesOptions,\n ODataEntityOptions,\n ODataOptions,\n} from './options';\nimport { ODataPropertyResource } from './property';\nimport { ODataReferenceResource } from './reference';\n\n/**\n * OData Navigation Property Resource\n * https://www.odata.org/getting-started/advanced-tutorial/#containment\n * https://www.odata.org/getting-started/advanced-tutorial/#derived\n */\nexport class ODataNavigationPropertyResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<N>(\n api: ODataApi,\n {\n path,\n type,\n schema,\n segments,\n query,\n }: {\n path: string;\n type?: string;\n schema?: ODataStructuredType<N>;\n segments: ODataPathSegments;\n query?: ODataQueryOptions<N>;\n }\n ) {\n const segment = segments.add(PathSegmentNames.navigationProperty, path);\n if (schema !== undefined) segment.type(schema.type());\n else if (type !== undefined) segment.type(type);\n query?.keep(QueryOptionNames.format);\n return new ODataNavigationPropertyResource<N>(api, {\n segments,\n query,\n schema,\n });\n }\n\n static fromResource<N>(resource: ODataResource<any>, path: string) {\n const baseType = resource.type();\n let baseSchema = resource.schema as ODataStructuredType<any> | undefined;\n let fieldType: string | undefined;\n let fieldSchema: ODataStructuredType<N> | undefined;\n if (baseSchema !== undefined) {\n const field = baseSchema.findFieldByName<N>(path);\n fieldType = field?.type;\n fieldSchema =\n fieldType !== undefined\n ? resource.api.findStructuredTypeForType(fieldType)\n : undefined;\n baseSchema =\n field !== undefined\n ? baseSchema.findSchemaForField<N>(field)\n : undefined;\n }\n\n const navigation = ODataNavigationPropertyResource.factory<N>(\n resource.api,\n {\n path,\n type: fieldType,\n schema: fieldSchema,\n segments: resource.cloneSegments(),\n query: resource.cloneQuery<N>(),\n }\n );\n\n // Switch entitySet to binding type if available\n if (baseSchema !== undefined && baseSchema.type() !== baseType) {\n let entitySet = resource.api.findEntitySetForType(baseSchema.type());\n if (entitySet !== undefined) {\n navigation.segment((s) => s.entitySet().path(entitySet!.name));\n }\n }\n\n return navigation;\n }\n //#endregion\n\n key(value: any) {\n const navigation = this.clone<ODataNavigationPropertyResource<T>>();\n var key = this.resolveKey(value);\n if (key !== undefined)\n navigation.segment((s) => s.navigationProperty().key(key));\n return navigation;\n }\n\n keys(values: any[]) {\n const navigation = this.clone<ODataNavigationPropertyResource<T>>();\n const types = this.pathSegments.types({ key: true });\n const keys = values.map((value, index) =>\n ODataResource.resolveKey(\n value,\n this.api.findStructuredTypeForType<T>(types[index])\n )\n );\n navigation.segment((s) => s.keys(keys));\n return navigation;\n }\n\n media() {\n return ODataMediaResource.factory<T>(this.api, {\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n }\n\n reference() {\n return ODataReferenceResource.factory<T>(this.api, {\n segments: this.cloneSegments(),\n });\n }\n\n navigationProperty<N>(path: string) {\n return ODataNavigationPropertyResource.fromResource<N>(this, path);\n }\n\n property<P>(path: string) {\n return ODataPropertyResource.fromResource<P>(this, path);\n }\n\n count() {\n return ODataCountResource.factory<T>(this.api, {\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n }\n\n cast<C>(type: string) {\n const baseSchema = this.schema as ODataStructuredType<T>;\n const castSchema = this.api.findStructuredTypeForType<C>(type);\n if (\n castSchema !== undefined &&\n baseSchema !== undefined &&\n !castSchema.isSubtypeOf(baseSchema)\n )\n throw new Error(`Cannot cast to ${type}`);\n const segments = this.cloneSegments();\n segments.add(PathSegmentNames.type, type).type(type);\n return new ODataNavigationPropertyResource<C>(this.api, {\n segments,\n schema: castSchema,\n query: this.cloneQuery<C>(),\n });\n }\n\n //#region Requests\n protected override post(\n attrs: Partial<T>,\n options: ODataOptions = {}\n ): Observable<ODataEntity<T>> {\n return super.post(attrs, { responseType: 'entity', ...options });\n }\n\n protected override put(\n attrs: Partial<T>,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.put(attrs, { responseType: 'entity', ...options });\n }\n\n protected override patch(\n attrs: Partial<T>,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.patch(attrs, { responseType: 'entity', ...options });\n }\n\n protected override delete(\n options: ODataOptions & { etag?: string } = {}\n ): Observable<any> {\n return super.delete({ responseType: 'entity', ...options });\n }\n\n protected override get(\n options: ODataEntityOptions &\n ODataEntitiesOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<any> {\n return super.get(options);\n }\n\n //#endregion\n\n //#region Shortcuts\n /**\n * Create a new entity\n * @param attrs The entity attributes\n * @param options Options for the request\n * @returns The created entity with the annotations\n */\n create(\n attrs: Partial<T>,\n options?: ODataOptions\n ): Observable<ODataEntity<T>> {\n return this.post(attrs, options);\n }\n\n /**\n * Update an existing entity\n * @param attrs The entity attributes\n * @param options Options for the request\n * @param etag The etag of the entity\n * @returns The updated entity with the annotations\n */\n update(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n return this.put(attrs, options);\n }\n\n /**\n * Modify an existing entity\n * @param attrs The entity attributes\n * @param options Options for the request\n * @param etag The etag of the entity\n * @returns The modified entity with the annotations\n */\n modify(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n return this.patch(attrs, options);\n }\n\n /**\n * Delete an existing entity\n * @param options Options for the request\n * @param etag The etag of the entity\n * @returns An observable of the destroy\n */\n destroy(options?: ODataOptions & { etag?: string }): Observable<any> {\n return this.delete(options);\n }\n\n /**\n * Fetch entity / entities\n * @param options Options for the request\n * @return An observable of the entity or entities with annotations\n */\n fetch(\n options?: ODataEntityOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntity<T>>;\n fetch(\n options?: ODataEntitiesOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntities<T>>;\n fetch(\n options: ODataEntityOptions &\n ODataEntitiesOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<any> {\n return this.get(options);\n }\n\n /**\n * Fetch the entity\n * @param options Options for the request\n * @returns The entity\n */\n fetchEntity(\n options: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<T | null> {\n return this.fetch({ responseType: 'entity', ...options }).pipe(\n map(({ entity }) => entity)\n );\n }\n\n /**\n * Fetch the entity and return as model\n * @param options Options for the request\n * @returns The model\n */\n fetchModel<M extends ODataModel<T>>(\n options: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<M | null> {\n return this.fetch({ responseType: 'entity', ...options }).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots, reset: true }) : null\n )\n );\n }\n\n /**\n * Fetch entities\n * @param options Options for the request\n * @returns The entities\n */\n fetchEntities(\n options: ODataOptions & {\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<T[] | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities }) => entities)\n );\n }\n\n /**\n * Fetch entities and return as collection\n * @param options Options for the request\n * @returns The collection\n */\n fetchCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n options: ODataOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<C | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities, annots }) =>\n entities\n ? this.asCollection<M, C>(entities, { annots, reset: true })\n : null\n )\n );\n }\n\n /**\n * Fetch all entities\n * @param options Options for the request\n * @returns All entities\n */\n fetchAll(\n options: ODataOptions & {\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<T[]> {\n let res = this.clone<ODataNavigationPropertyResource<T>>();\n // Clean Paging\n res.query((q) => q.clearPaging());\n let fetch = (opts?: {\n skip?: number;\n skiptoken?: string;\n top?: number;\n }): Observable<ODataEntities<T>> => {\n if (opts) {\n res.query((q) => q.paging(opts));\n }\n return res.fetch({ responseType: 'entities', ...options });\n };\n return fetch().pipe(\n expand(({ annots: meta }) =>\n meta.skip || meta.skiptoken ? fetch(meta) : EMPTY\n ),\n concatMap(({ entities }) => entities || []),\n toArray()\n );\n }\n //#endregion\n}\n","import { Observable, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataModel } from '../../models';\nimport { ODataStructuredType } from '../../schema/structured-type';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntity } from '../responses/types';\nimport { ODataActionResource } from './action';\nimport { ODataFunctionResource } from './function';\nimport { ODataMediaResource } from './media';\nimport { ODataNavigationPropertyResource } from './navigation-property';\nimport { ODataOptions } from './options';\nimport { ODataPropertyResource } from './property';\n\nexport class ODataEntityResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<E>(\n api: ODataApi,\n {\n schema,\n segments,\n query,\n }: {\n schema?: ODataStructuredType<E>;\n segments: ODataPathSegments;\n query?: ODataQueryOptions<E>;\n }\n ) {\n query?.keep(\n QueryOptionNames.expand,\n QueryOptionNames.select,\n QueryOptionNames.format\n );\n return new ODataEntityResource<E>(api, { segments, query, schema });\n }\n //#endregion\n\n key(value: any) {\n const entity = this.clone<ODataEntityResource<T>>();\n var key = this.resolveKey(value);\n if (key !== undefined) entity.segment((s) => s.entitySet().key(key));\n return entity;\n }\n\n keys(values: any[]) {\n const entity = this.clone<ODataEntityResource<T>>();\n const types = this.pathSegments.types({ key: true });\n const keys = values.map((value, index) =>\n ODataResource.resolveKey(\n value,\n this.api.findStructuredTypeForType<T>(types[index])\n )\n );\n entity.segment((s) => s.keys(keys));\n return entity;\n }\n\n media() {\n return ODataMediaResource.factory<T>(this.api, {\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n }\n\n navigationProperty<N>(path: string) {\n return ODataNavigationPropertyResource.fromResource<N>(this, path);\n }\n\n property<P>(path: string) {\n return ODataPropertyResource.fromResource<P>(this, path);\n }\n\n action<P, R>(path: string) {\n return ODataActionResource.fromResource<P, R>(this, path);\n }\n\n function<P, R>(path: string) {\n return ODataFunctionResource.fromResource<P, R>(this, path);\n }\n\n cast<C>(type: string) {\n const baseSchema = this.schema as ODataStructuredType<T>;\n const castSchema = this.api.findStructuredTypeForType<C>(type);\n if (\n castSchema !== undefined &&\n baseSchema !== undefined &&\n !castSchema.isSubtypeOf(baseSchema)\n )\n throw new Error(`Cannot cast to ${type}`);\n const segments = this.cloneSegments();\n segments.add(PathSegmentNames.type, type).type(type);\n return new ODataEntityResource<C>(this.api, {\n segments,\n schema: castSchema,\n query: this.cloneQuery<C>(),\n });\n }\n\n //#region Requests\n protected override post(\n attrs: Partial<T>,\n options: ODataOptions = {}\n ): Observable<ODataEntity<T>> {\n return super.post(attrs, { responseType: 'entity', ...options });\n }\n\n protected override put(\n attrs: Partial<T>,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.put(attrs, { responseType: 'entity', ...options });\n }\n\n protected override patch(\n attrs: Partial<T>,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.patch(attrs, { responseType: 'entity', ...options });\n }\n\n protected override delete(\n options: ODataOptions & { etag?: string } = {}\n ): Observable<any> {\n return super.delete({ responseType: 'entity', ...options });\n }\n\n protected override get(\n options: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<ODataEntity<T>> {\n return super.get({ responseType: 'entity', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n create(\n attrs: Partial<T>,\n options?: ODataOptions\n ): Observable<ODataEntity<T>> {\n return this.post(attrs, options);\n }\n\n update(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n return this.put(attrs, options);\n }\n\n modify(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n return this.patch(attrs, options);\n }\n\n destroy(options?: ODataOptions & { etag?: string }): Observable<any> {\n return this.delete(options);\n }\n\n fetch(\n options?: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntity<T>> {\n if (!this.hasKey()) return throwError('Entity resource without key');\n return this.get(options);\n }\n\n fetchEntity(\n options?: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<T | null> {\n return this.fetch(options).pipe(map(({ entity }) => entity));\n }\n\n fetchModel<M extends ODataModel<T>>(\n options?: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<M | null> {\n return this.fetch(options).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots, reset: true }) : null\n )\n );\n }\n //#endregion\n}\n","import { EMPTY, Observable } from 'rxjs';\nimport { concatMap, expand, map, toArray } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataCollection, ODataModel } from '../../models';\nimport { ODataStructuredType } from '../../schema/structured-type';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity } from '../responses';\nimport { ODataActionResource } from './action';\nimport { ODataCountResource } from './count';\nimport { ODataEntityResource } from './entity';\nimport { ODataFunctionResource } from './function';\nimport { ODataOptions } from './options';\n\nexport class ODataEntitySetResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<E>(\n api: ODataApi,\n {\n path,\n schema,\n query,\n }: {\n path: string;\n schema?: ODataStructuredType<E>;\n query?: ODataQueryOptions<E>;\n }\n ) {\n const segments = new ODataPathSegments();\n const segment = segments.add(PathSegmentNames.entitySet, path);\n if (schema !== undefined) segment.type(schema.type());\n return new ODataEntitySetResource<E>(api, { segments, query, schema });\n }\n //#endregion\n\n entity(key?: any) {\n const entity = ODataEntityResource.factory<T>(this.api, {\n schema: this.schema as ODataStructuredType<T>,\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n if (key !== undefined) {\n return entity.key(key);\n }\n return entity;\n }\n\n action<P, R>(path: string) {\n return ODataActionResource.fromResource<P, R>(this, path);\n }\n\n function<P, R>(path: string) {\n return ODataFunctionResource.fromResource<P, R>(this, path);\n }\n\n count() {\n return ODataCountResource.factory<T>(this.api, {\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n }\n\n cast<C>(type: string) {\n const baseSchema = this.schema as ODataStructuredType<T>;\n const castSchema = this.api.findStructuredTypeForType<C>(type);\n if (\n castSchema !== undefined &&\n baseSchema !== undefined &&\n !castSchema.isSubtypeOf(baseSchema)\n )\n throw new Error(`Cannot cast to ${type}`);\n const segments = this.cloneSegments();\n segments.add(PathSegmentNames.type, type).type(type);\n return new ODataEntitySetResource<C>(this.api, {\n segments,\n schema: castSchema,\n query: this.cloneQuery<C>(),\n });\n }\n\n //#region Requests\n protected override post(\n attrs: Partial<T>,\n options: ODataOptions = {}\n ): Observable<ODataEntity<T>> {\n return super.post(attrs, { responseType: 'entity', ...options });\n }\n\n protected override get(\n options: ODataOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<ODataEntities<T>> {\n return super.get({ responseType: 'entities', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n create(\n attrs: Partial<T>,\n options?: ODataOptions\n ): Observable<ODataEntity<T>> {\n return this.post(attrs, options);\n }\n\n fetch(\n options?: ODataOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntities<T>> {\n return this.get(options);\n }\n\n fetchEntities(\n options?: ODataOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<T[] | null> {\n return this.fetch(options).pipe(map(({ entities }) => entities));\n }\n\n fetchCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n options?: ODataOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataCollection<T, ODataModel<T>> | null> {\n return this.fetch(options).pipe(\n map(({ entities, annots }) =>\n entities\n ? this.asCollection<M, C>(entities, { annots, reset: true })\n : null\n )\n );\n }\n\n fetchAll(\n options?: ODataOptions & {\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<T[]> {\n let res = this.clone<ODataEntitySetResource<T>>();\n // Clean Paging\n res.query((q) => q.clearPaging());\n let fetch = (opts?: {\n skip?: number;\n skiptoken?: string;\n top?: number;\n }): Observable<ODataEntities<T>> => {\n if (opts) {\n res.query((q) => q.paging(opts));\n }\n return res.fetch(options);\n };\n return fetch().pipe(\n expand(({ annots: meta }) =>\n meta.skip || meta.skiptoken ? fetch(meta) : EMPTY\n ),\n concatMap(({ entities }) => entities || []),\n toArray()\n );\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { $METADATA } from '../../constants';\nimport { PathSegmentNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataResource } from '../resource';\nimport { ODataMetadata } from '../responses';\nimport { ODataOptions } from './options';\n\nexport class ODataMetadataResource extends ODataResource<any> {\n constructor(api: ODataApi, segments?: ODataPathSegments) {\n super(api, { segments });\n }\n\n //#region Factory\n static factory(api: ODataApi) {\n let segments = new ODataPathSegments();\n segments.add(PathSegmentNames.metadata, $METADATA);\n return new ODataMetadataResource(api, segments);\n }\n //#endregion\n\n //#region Requests\n protected override get(options?: ODataOptions): Observable<ODataMetadata> {\n return super\n .get({ responseType: 'text', ...options })\n .pipe(map((body: any) => new ODataMetadata(body)));\n }\n //#endregion\n\n //#region Shortcuts\n fetch(options?: ODataOptions): Observable<ODataMetadata> {\n return this.get(options);\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataModel } from '../../models';\nimport { ODataStructuredType } from '../../schema';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntity } from '../responses';\nimport { ODataActionResource } from './action';\nimport { ODataFunctionResource } from './function';\nimport { ODataNavigationPropertyResource } from './navigation-property';\nimport { ODataOptions } from './options';\nimport { ODataPropertyResource } from './property';\n\nexport class ODataSingletonResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<S>(\n api: ODataApi,\n {\n path,\n schema,\n query,\n }: {\n path: string;\n schema?: ODataStructuredType<S>;\n query?: ODataQueryOptions<S>;\n }\n ) {\n const segments = new ODataPathSegments();\n const segment = segments.add(PathSegmentNames.singleton, path);\n if (schema !== undefined) segment.type(schema.type());\n return new ODataSingletonResource<S>(api, { segments, query, schema });\n }\n //#endregion\n\n key(value: any) {\n const singleton = this.clone<ODataSingletonResource<T>>();\n var key = this.resolveKey(value);\n if (key !== undefined) singleton.segment((s) => s.singleton().key(key));\n return singleton;\n }\n\n keys(values: any[]) {\n const singleton = this.clone<ODataSingletonResource<T>>();\n const types = this.pathSegments.types({ key: true });\n const keys = values.map((value, index) =>\n ODataResource.resolveKey(\n value,\n this.api.findStructuredTypeForType<T>(types[index])\n )\n );\n singleton.segment((s) => s.keys(keys));\n return singleton;\n }\n\n navigationProperty<N>(path: string) {\n return ODataNavigationPropertyResource.fromResource<N>(this, path);\n }\n\n property<P>(path: string) {\n return ODataPropertyResource.fromResource<P>(this, path);\n }\n\n action<P, R>(path: string) {\n return ODataActionResource.fromResource<P, R>(this, path);\n }\n\n function<P, R>(path: string) {\n return ODataFunctionResource.fromResource<P, R>(this, path);\n }\n\n //#region Requests\n protected override post(\n attrs: Partial<T>,\n options: ODataOptions = {}\n ): Observable<ODataEntity<T>> {\n return super.post(attrs, { responseType: 'entity', ...options });\n }\n\n protected override put(\n attrs: Partial<T>,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.put(attrs, { responseType: 'entity', ...options });\n }\n\n protected override patch(\n attrs: Partial<T>,\n options: ODataOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.patch(attrs, { responseType: 'entity', ...options });\n }\n\n protected override delete(\n options: ODataOptions & { etag?: string } = {}\n ): Observable<any> {\n return super.delete({ responseType: 'entity', ...options });\n }\n\n protected override get(\n options: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<ODataEntity<T>> {\n return super.get({ responseType: 'entity', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n /**\n * Creates a new entity.\n * @param attrs The entity attributes to create.\n * @param options The options for the request.\n * @returns The created entity with the annotations.\n */\n create(\n attrs: Partial<T>,\n options?: ODataOptions\n ): Observable<ODataEntity<T>> {\n return this.post(attrs, options);\n }\n\n /**\n * Updates an existing entity.\n * @param attrs The entity attributes to update.\n * @param options The options for the request.\n * @returns The updated entity with the annotations.\n */\n update(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n return this.put(attrs, options);\n }\n\n /**\n * Modifies an existing entity.\n * @param attrs The entity attributes to modify.\n * @param options The options for the request.\n * @returns The modified entity with the annotations.\n */\n modify(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n return this.patch(attrs, options);\n }\n\n /**\n * Delete an existing entity.\n * @param options The options for the request.\n * @returns Observable of the deleted entity.\n */\n destroy(options?: ODataOptions & { etag?: string }): Observable<any> {\n return this.delete(options);\n }\n\n /**\n * Fetch an existing entity.\n * @param options The options for the request.\n * @param etag The etag to use for the request.\n * @returns Observable of the entity with the annotations.\n */\n fetch(\n options?: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntity<T>> {\n return this.get(options);\n }\n\n /**\n * Fetch an existing entity.\n * @param options The options for the request.\n * @param etag The etag to use for the request.\n * @returns Observable of the entity.\n */\n fetchEntity(\n options?: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<T | null> {\n return this.fetch(options).pipe(map(({ entity }) => entity));\n }\n\n /**\n * Fetch an existing entity and return a model.\n * @param options The options for the request.\n * @param etag The etag to use for the request.\n * @returns Observable of the entity.\n */\n fetchModel<M extends ODataModel<T>>(\n options?: ODataOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<M | null> {\n return this.fetch(options).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots, reset: true }) : null\n )\n );\n }\n //#endregion\n}\n","import { ODataRequest, ODataResponse } from '../resources';\nimport { ODataCache, ODataCacheEntry } from './cache';\n\ninterface ResponseJson {\n body: any | null;\n headers: { [name: string]: string | string[] };\n status: number;\n statusText: string;\n url: string | null;\n}\n\nexport class ODataInStorageCache extends ODataCache {\n name: string;\n storage: Storage;\n\n constructor({\n name,\n storage = sessionStorage,\n timeout,\n }: {\n timeout?: number;\n name: string;\n storage?: Storage;\n }) {\n super({ timeout });\n this.name = name;\n this.storage = storage;\n this.restore();\n window.addEventListener('beforeunload', () => this.store());\n }\n\n store() {\n this.storage.setItem(\n this.name,\n JSON.stringify(Array.from(this.entries.entries()))\n );\n }\n\n restore() {\n this.entries = new Map<string, ODataCacheEntry<any>>(\n JSON.parse(this.storage.getItem(this.name) || '[]')\n );\n }\n\n override flush() {\n super.flush();\n this.store();\n }\n\n putResponse(req: ODataRequest<any>, res: ODataResponse<any>) {\n const scope = this.scope(req);\n const tags = this.tags(req, res);\n this.put<ResponseJson>(req.pathWithParams, res.toJSON(), {\n timeout: res.options.maxAge,\n scope,\n tags,\n });\n }\n\n getResponse(req: ODataRequest<any>): ODataResponse<any> | undefined {\n const scope = this.scope(req);\n const data = this.get<ResponseJson>(req.pathWithParams, { scope });\n\n return data !== undefined ? ODataResponse.fromJSON(req, data) : undefined;\n }\n}\n","import { Observable, Subscription } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport {\n CID_FIELD_NAME,\n COMPUTED,\n DEFAULT_VERSION,\n OPTIMISTIC_CONCURRENCY,\n} from '../constants';\nimport { ODataHelper } from '../helper';\nimport { ODataParserOptions } from '../options';\nimport {\n EntityKey,\n ODataEntitiesAnnotations,\n ODataEntityAnnotations,\n ODataEntityResource,\n ODataEntitySetResource,\n ODataNavigationPropertyResource,\n ODataPropertyResource,\n ODataQueryOptions,\n ODataQueryOptionsHandler,\n ODataResource,\n ODataSingletonResource,\n} from '../resources';\nimport {\n ODataEntitySet,\n ODataStructuredType,\n ODataStructuredTypeFieldParser,\n} from '../schema';\nimport { Options, OptionsHelper } from '../types';\nimport { Objects, Types } from '../utils';\nimport type { ODataCollection } from './collection';\nimport type { ODataModel } from './model';\n\nexport type ODataModelEventType =\n | 'change'\n | 'reset'\n | 'update'\n | 'destroy'\n | 'add'\n | 'remove'\n | 'invalid'\n | 'request'\n | 'sync'\n | 'attach';\nexport class ODataModelEvent<T> {\n name: ODataModelEventType;\n bubbling: boolean = true;\n model?: ODataModel<T>;\n collection?: ODataCollection<T, ODataModel<T>>;\n chain: [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n string | number | null\n ][];\n value?: any;\n previous?: any;\n options?: any;\n constructor(\n name: ODataModelEventType,\n {\n model,\n collection,\n previous,\n value,\n track,\n options,\n }: {\n model?: ODataModel<T>;\n collection?: ODataCollection<T, ODataModel<T>>;\n track?: string | number;\n previous?: any;\n value?: any;\n options?: any;\n } = {}\n ) {\n this.name = name;\n this.model = model;\n this.collection = collection;\n this.previous = previous;\n this.value = value;\n this.options = options;\n this.chain = [\n [\n (this.collection || this.model) as\n | ODataModel<any>\n | ODataCollection<any, ODataModel<any>>,\n track || null,\n ],\n ];\n }\n\n stopPropagation() {\n this.bubbling = false;\n }\n\n push(\n model: ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n track: string | number\n ) {\n this.chain.splice(0, 0, [model, track]);\n }\n\n visited(model: ODataModel<any> | ODataCollection<any, ODataModel<any>>) {\n return (\n this.chain.some((c) => c[0] === model) &&\n this.chain[this.chain.length - 1][0] !== model\n );\n }\n\n get path() {\n return this.chain\n .map(([, track], index) =>\n typeof track === 'number'\n ? `[${track}]`\n : typeof track === 'string'\n ? index === 0\n ? track\n : `.${track}`\n : ''\n )\n .join('');\n }\n}\n\nexport const BUBBLING = [\n 'change',\n 'reset',\n 'update',\n 'destroy',\n 'add',\n 'remove',\n];\n\nexport const INCLUDE_SHALLOW = {\n include_concurrency: true,\n include_computed: true,\n include_key: true,\n};\n\nexport const INCLUDE_DEEP = {\n include_navigation: true,\n include_non_field: true,\n ...INCLUDE_SHALLOW,\n};\n\nexport enum ODataModelState {\n Added,\n Removed,\n Changed,\n Unchanged,\n}\n\nexport type ModelOptions = {\n cid?: string;\n fields: { [name: string]: ModelFieldOptions };\n};\n\nexport type ModelFieldOptions = {\n field?: string;\n default?: any;\n required?: boolean;\n concurrency?: boolean;\n maxLength?: number;\n minLength?: number;\n min?: number;\n max?: number;\n pattern?: RegExp;\n};\n\nexport function Model({ cid = CID_FIELD_NAME }: { cid?: string } = {}) {\n return <T extends { new (...args: any[]): {} }>(constructor: T) => {\n const Klass = <any>constructor;\n if (!Klass.hasOwnProperty('options'))\n Klass.options = { fields: {} } as ModelOptions;\n Klass.options.cid = cid;\n return constructor;\n };\n}\n\nexport function ModelField({\n name,\n ...options\n}: { name?: string } & ModelFieldOptions = {}) {\n return (target: any, key: string): void => {\n const Klass = target.constructor;\n if (!Klass.hasOwnProperty('options'))\n Klass.options = { fields: {} } as ModelOptions;\n options.field = name || key;\n Klass.options.fields[key] = options;\n };\n}\n\nexport type ODataModelFieldOptions<F> = ModelFieldOptions & {\n name: string;\n field: string;\n parser: ODataStructuredTypeFieldParser<F>;\n};\n\nexport class ODataModelField<F> {\n name: string;\n field: string;\n parser: ODataStructuredTypeFieldParser<F>;\n options: ODataModelOptions<any>;\n meta?: ODataModelOptions<any>;\n default?: any;\n required: boolean;\n concurrency: boolean;\n maxLength?: number;\n minLength?: number;\n min?: number;\n max?: number;\n pattern?: RegExp;\n constructor(\n options: ODataModelOptions<any>,\n { name, field, parser, ...opts }: ODataModelFieldOptions<F>\n ) {\n this.options = options;\n this.name = name;\n this.field = field;\n this.parser = parser;\n this.default = opts.default || parser.default;\n this.required = Boolean(opts.required || !parser.nullable);\n this.concurrency = Boolean(opts.concurrency);\n this.maxLength = opts.maxLength || parser.maxLength;\n this.minLength = opts.minLength;\n this.min = opts.min;\n this.max = opts.max;\n this.pattern = opts.pattern;\n }\n\n get api() {\n return this.options.api;\n }\n\n get type() {\n return this.parser.type;\n }\n\n get navigation() {\n return Boolean(this.parser.navigation);\n }\n\n get collection() {\n return Boolean(this.parser.collection);\n }\n\n annotatedValue<T>(term: string | RegExp) {\n return this.parser.annotatedValue<T>(term);\n }\n\n configure({\n findOptionsForType,\n concurrency,\n options,\n }: {\n findOptionsForType: (type: string) => ODataModelOptions<any> | undefined;\n concurrency: boolean;\n options: OptionsHelper;\n }) {\n this.meta = findOptionsForType(this.parser.type);\n if (concurrency) this.concurrency = concurrency;\n if (this.default !== undefined)\n this.default = this.deserialize(this.default, options);\n }\n\n isKey() {\n return this.parser.isKey();\n }\n\n hasReferentials() {\n return this.parser.hasReferentials();\n }\n\n get referentials() {\n return this.parser.referentials;\n }\n\n isStructuredType() {\n return this.parser.isStructuredType();\n }\n\n structured() {\n let structuredType = this.api.findStructuredTypeForType<F>(\n this.parser.type\n );\n //Throw error if not found\n if (!structuredType)\n throw new Error(`Could not find structured type for ${this.parser.type}`);\n return structuredType;\n }\n\n isEnumType() {\n return this.parser.isEnumType();\n }\n\n enum() {\n let enumType = this.api.findEnumTypeForType<F>(this.parser.type);\n //Throw error if not found\n if (!enumType)\n throw new Error(`Could not find enum type for ${this.parser.type}`);\n return enumType;\n }\n\n validate(\n value: any,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}\n ) {\n /*\n if ('isValid' in value && typeof value.isValid === 'function') {\n return !value.isValid({ method, navigation }) ? value._errors : undefined;\n } else if ('models' in value && typeof value.models === 'function') {\n */\n if (ODataModelOptions.isModel(value)) {\n return !value.isValid({ method, navigation }) ? value._errors : undefined;\n } else if (ODataModelOptions.isCollection(value)) {\n return value\n .models()\n .some((m: ODataModel<any>) => !m.isValid({ method, navigation }))\n ? value.models().map((m: ODataModel<any>) => m._errors)\n : undefined;\n } else {\n const computed = this.annotatedValue<boolean>(COMPUTED);\n let errors = this.parser?.validate(value, { method, navigation }) || [];\n if (\n this.required &&\n (value === null || (value === undefined && method !== 'modify')) && // Is null or undefined without patch?\n !(computed && method === 'create') // Not (Is Computed field and create) ?\n ) {\n errors['push'](`required`);\n }\n if (\n this.maxLength !== undefined &&\n typeof value === 'string' &&\n value.length > this.maxLength\n ) {\n errors['push'](`maxlength`);\n }\n if (\n this.minLength !== undefined &&\n typeof value === 'string' &&\n value.length < this.minLength\n ) {\n errors['push'](`minlength`);\n }\n if (\n this.min !== undefined &&\n typeof value === 'number' &&\n value < this.min\n ) {\n errors['push'](`min`);\n }\n if (\n this.max !== undefined &&\n typeof value === 'number' &&\n value > this.max\n ) {\n errors['push'](`max`);\n }\n if (\n this.pattern !== undefined &&\n typeof value === 'string' &&\n !this.pattern.test(value)\n ) {\n errors['push'](`pattern`);\n }\n return !Types.isEmpty(errors) ? errors : undefined;\n }\n }\n\n defaults(): any {\n return this.isStructuredType() && this.meta !== undefined\n ? this.meta.defaults()\n : this.default;\n }\n\n deserialize(value: any, options?: Options): F {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.api.options;\n return this.parser.deserialize(value, parserOptions);\n }\n\n serialize(value: F, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.api.options;\n return this.parser.serialize(value, parserOptions);\n }\n\n encode(value: F, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.api.options;\n return this.parser.encode(value, parserOptions);\n }\n\n resourceFactory<T, F>(\n base: ODataResource<T>\n ): ODataNavigationPropertyResource<F> | ODataPropertyResource<F> {\n if (\n !(\n base instanceof ODataEntityResource ||\n base instanceof ODataNavigationPropertyResource ||\n base instanceof ODataPropertyResource\n )\n )\n throw new Error(\"Can't build resource for non compatible base type\");\n return this.navigation\n ? (base as ODataEntityResource<T>).navigationProperty<F>(this.parser.name)\n : (base as ODataEntityResource<T>).property<F>(this.parser.name);\n }\n\n annotationsFactory(\n base: ODataEntityAnnotations\n ): ODataEntityAnnotations | ODataEntitiesAnnotations {\n return this.parser.collection\n ? new ODataEntitiesAnnotations(\n base.helper,\n base.property(this.parser.name) || {}\n )\n : new ODataEntityAnnotations(\n base.helper,\n base.property(this.parser.name) || {}\n );\n }\n\n schemaFactory<T, F>(\n base: ODataStructuredType<T>\n ): ODataStructuredType<F> | undefined {\n return this.api.findStructuredTypeForType(this.parser.type);\n }\n\n modelCollectionFactory<T, F>({\n parent,\n value,\n reset,\n }: {\n parent: ODataModel<any>;\n value?: F | F[] | { [name: string]: any } | { [name: string]: any }[];\n reset?: boolean;\n }): ODataModel<F> | ODataCollection<F, ODataModel<F>> {\n const annots = this.annotationsFactory(parent.annots());\n const Model = this.api.modelForType(this.parser.type);\n const Collection = this.api.collectionForType(this.parser.type);\n\n if (Model === undefined || Collection === undefined)\n throw Error(`No model for ${this.name}`);\n return this.parser.collection\n ? (new Collection((value || []) as F[], {\n annots: annots as ODataEntitiesAnnotations,\n parent: [parent, this],\n reset,\n }) as ODataCollection<F, ODataModel<F>>)\n : (new Model((value || {}) as F, {\n annots: annots as ODataEntityAnnotations,\n parent: [parent, this],\n reset,\n }) as ODataModel<F>);\n }\n}\n\nexport type ODataModelRelation<T> = {\n state: ODataModelState;\n model?: ODataModel<T> | ODataCollection<T, ODataModel<T>> | null;\n field: ODataModelField<T>;\n subscription?: Subscription;\n};\nexport type ODataModelEntry<T, M extends ODataModel<T>> = {\n state: ODataModelState;\n model: M;\n key?: EntityKey<T> | { [name: string]: any };\n subscription?: Subscription;\n};\n\nexport class ODataModelOptions<T> {\n name: string;\n cid: string;\n base?: string;\n open?: boolean;\n private _fields: ODataModelField<any>[];\n schema: ODataStructuredType<T>;\n entitySet?: ODataEntitySet;\n // Hierarchy\n parent?: ODataModelOptions<any>;\n children: ODataModelOptions<any>[] = [];\n\n constructor({\n options,\n schema,\n }: {\n options: ModelOptions;\n schema: ODataStructuredType<T>;\n }) {\n this.name = schema.name;\n this.base = schema.base;\n this.open = schema.open;\n this.schema = schema;\n this.cid = options?.cid || CID_FIELD_NAME;\n this._fields = Object.entries(options.fields).map(([name, options]) => {\n const { field, ...opts } = options;\n if (field === undefined || name === undefined)\n throw new Error('Model Properties need name and field');\n const parser = this.schema.findFieldByName<T>(field as keyof T);\n if (parser === undefined)\n throw new Error(`No parser for ${field} with name = ${name}`);\n return new ODataModelField<T>(this, { name, field, parser, ...opts });\n });\n }\n\n get api() {\n return this.schema.api;\n }\n\n type() {\n return this.schema.type();\n }\n\n isTypeOf(type: string) {\n return this.schema.isTypeOf(type);\n }\n\n findChildOptions(\n predicate: (options: ODataModelOptions<any>) => boolean\n ): ODataModelOptions<any> | undefined {\n if (predicate(this)) return this;\n let match: ODataModelOptions<any> | undefined;\n for (let ch of this.children) {\n match = ch.findChildOptions(predicate);\n if (match !== undefined) break;\n }\n return match;\n }\n\n configure({\n findOptionsForType,\n options,\n }: {\n findOptionsForType: (type: string) => ODataModelOptions<any> | undefined;\n options: OptionsHelper;\n }) {\n if (this.base) {\n const parent = findOptionsForType(this.base) as ODataModelOptions<any>;\n parent.children.push(this);\n this.parent = parent;\n }\n this.entitySet = this.api.findEntitySetForEntityType(this.type());\n let concurrencyFields: string[] = [];\n if (this.entitySet !== undefined) {\n concurrencyFields =\n this.entitySet.annotatedValue<string[]>(OPTIMISTIC_CONCURRENCY) || [];\n }\n this._fields.forEach((field) => {\n let concurrency = concurrencyFields.indexOf(field.field) !== -1;\n field.configure({\n findOptionsForType,\n concurrency,\n options,\n });\n });\n }\n\n fields({\n include_navigation = false,\n include_parents = true,\n }: {\n include_parents?: boolean;\n include_navigation?: boolean;\n } = {}): ODataModelField<any>[] {\n return [\n ...(include_parents && this.parent !== undefined\n ? this.parent.fields({ include_navigation, include_parents })\n : []),\n ...this._fields.filter(\n (field) => include_navigation || !field.navigation\n ),\n ];\n }\n\n field<F>(name: keyof T | string) {\n let field = this.fields({\n include_parents: true,\n include_navigation: true,\n }).find(\n (modelField: ODataModelField<F>) =>\n modelField.name === name || modelField.field === name\n );\n //Throw error if not found\n if (field === undefined) throw new Error(`No field with name ${name}`);\n return field;\n }\n\n attach(\n self: ODataModel<T>,\n resource:\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T>\n ) {\n if (\n self._resource !== null &&\n resource.type() !== self._resource.type() &&\n !resource.isSubtypeOf(self._resource)\n )\n throw new Error(\n `Can't reattach ${resource.type()} to ${self._resource.type()}`\n );\n\n const current = self._resource;\n if (current === null || !current.isEqualTo(resource)) {\n self._resource = resource;\n self.events$.emit(\n new ODataModelEvent('attach', {\n model: self,\n previous: current,\n value: resource,\n })\n );\n }\n }\n\n //# region Resource\n static chain(\n child: ODataModel<any> | ODataCollection<any, ODataModel<any>>\n ): [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ][] {\n const chain = [] as any[];\n let tuple:\n | [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ]\n | null = [child, null];\n while (tuple !== null) {\n const parent = tuple as [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ];\n if (chain.some((p) => p[0] === parent[0])) break;\n chain.splice(0, 0, parent);\n tuple = tuple[0]._parent;\n }\n return chain;\n }\n\n static resource<T>(\n child: ODataModel<T> | ODataCollection<T, ODataModel<T>>\n ): ODataResource<T> | ODataResource<T> {\n let resource: ODataResource<any> | ODataResource<any> | undefined =\n undefined;\n for (let [model, field] of ODataModelOptions.chain(child)) {\n resource =\n resource ||\n model._resource ||\n (ODataModelOptions.isModel(model)\n ? (model as ODataModel<any>)._meta.modelResourceFactory()\n : (\n model as ODataCollection<any, ODataModel<any>>\n )._model.meta.collectionResourceFactory());\n if (resource === undefined) break;\n if (ODataModelOptions.isModel(model)) {\n let key = (model as ODataModel<any>).key({\n field_mapping: true,\n }) as EntityKey<any>;\n if (key !== undefined)\n resource =\n resource instanceof ODataEntitySetResource\n ? resource.entity(key)\n : (resource as ODataEntityResource<T>).key(key);\n }\n if (field === null) {\n const query = model._resource?.cloneQuery<T>().toQueryArguments();\n if (query !== undefined) resource.query((q) => q.apply(query));\n continue;\n }\n resource = (field as ODataModelField<any>).resourceFactory<any, any>(\n resource as ODataResource<any>\n );\n }\n if (resource === undefined)\n throw new Error(`resource: Can't build resource for ${child}`);\n return resource;\n }\n\n collectionResourceFactory(\n query?: ODataQueryOptions<T>\n ):\n | ODataEntitySetResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | undefined {\n if (this.entitySet === undefined) return undefined;\n return ODataEntitySetResource.factory<T>(this.api, {\n path: this.entitySet.name,\n schema: this.schema,\n query,\n });\n }\n\n modelResourceFactory(\n query?: ODataQueryOptions<T>\n ):\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T>\n | undefined {\n const resource = this.collectionResourceFactory(query);\n if (resource instanceof ODataEntitySetResource) return resource.entity();\n return resource as\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T>\n | undefined;\n }\n\n entityResource(self: ODataModel<T>): ODataResource<T> {\n let resource = this.modelResourceFactory(\n self._resource !== null ? self._resource.cloneQuery() : undefined\n );\n if (resource === undefined)\n throw new Error(`entityResource: Can't build resource for ${self}`);\n const key = self.key({ field_mapping: true }) as EntityKey<T>;\n if (key !== undefined) return resource.key(key);\n return resource as ODataResource<T>;\n }\n //#endregion\n\n bind(\n self: ODataModel<T>,\n {\n parent,\n resource,\n annots,\n }: {\n parent?: [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ];\n resource?: ODataResource<T>;\n annots?: ODataEntityAnnotations;\n } = {}\n ) {\n // Parent\n if (parent !== undefined) {\n self._parent = parent;\n }\n\n // Resource\n resource = resource || this.modelResourceFactory();\n if (resource !== undefined) {\n this.attach(\n self,\n resource as\n | ODataEntityResource<T>\n | ODataPropertyResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataSingletonResource<T>\n );\n }\n\n // Annotations\n self._annotations =\n annots || new ODataEntityAnnotations(ODataHelper[DEFAULT_VERSION]);\n\n const fields = this.fields({\n include_navigation: true,\n include_parents: true,\n });\n for (let field of fields) {\n Object.defineProperty(self, field.name, {\n configurable: true,\n get: () => this._get(self, field as ODataModelField<any>),\n set: (value: any) =>\n this._set(self, field as ODataModelField<any>, value),\n });\n }\n }\n\n query(\n self: ODataModel<T>,\n resource:\n | ODataEntityResource<T>\n | ODataPropertyResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataSingletonResource<T>,\n func: (q: ODataQueryOptionsHandler<T>) => void\n ) {\n resource.query(func);\n this.attach(self, resource);\n return self;\n }\n\n resolveKey(\n value: ODataModel<T> | T | { [name: string]: any },\n {\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}\n ): EntityKey<T> | { [name: string]: any } | undefined {\n const keyTypes = this.schema.keys({ include_parents: true });\n const key: any = {};\n for (var kt of keyTypes) {\n let v = value as any;\n let options = this as ODataModelOptions<any>;\n let field: ODataModelField<any> | undefined;\n for (let name of kt.name.split('/')) {\n if (options === undefined) break;\n field = options\n .fields({ include_parents: true })\n .find((field: ODataModelField<any>) => field.field === name);\n if (field !== undefined) {\n v =\n Types.isPlainObject(v) || ODataModelOptions.isModel(v)\n ? v[field.name]\n : v;\n options = field.meta as ODataModelOptions<any>;\n }\n }\n if (field === undefined) return undefined;\n let name = field_mapping ? field.field : field.name;\n if (kt.alias !== undefined) name = kt.alias;\n key[name] = v;\n }\n if (Types.isEmpty(key)) return undefined;\n return resolve ? Objects.resolveKey(key) : key;\n }\n\n resolveReferential(\n value: ODataModel<T> | T | { [name: string]: any } | null,\n field: ODataModelField<any>,\n {\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}\n ): { [name: string]: any } | undefined {\n const referential: any = {};\n for (var ref of field.referentials) {\n let from = this.fields({ include_parents: true }).find(\n (p: any) => p.field === ref.referencedProperty\n );\n let to = field.options\n .fields({ include_parents: true })\n .find((field: ODataModelField<any>) => field.field === ref.property);\n if (from !== undefined && to !== undefined) {\n let name = field_mapping ? to.field : to.name;\n referential[name] = value && (value as any)[from.name];\n }\n }\n if (Types.isEmpty(referential)) return undefined;\n return resolve\n ? Objects.resolveKey(referential, { single: false })\n : referential;\n }\n\n resolveReferenced(\n value: ODataModel<T> | T | { [name: string]: any } | null,\n field: ODataModelField<any>,\n {\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}\n ): { [name: string]: any } | undefined {\n const referenced: any = {};\n for (var ref of field.referentials) {\n let from = this.fields({ include_parents: true }).find(\n (field: ODataModelField<any>) => field.field === ref.property\n );\n let to = (field.meta as ODataModelOptions<any>)\n .fields({ include_parents: true })\n .find(\n (field: ODataModelField<any>) =>\n field.field === ref.referencedProperty\n );\n if (from !== undefined && to !== undefined) {\n let name = field_mapping ? to.field : to.name;\n referenced[name] = value && (value as any)[from.name];\n }\n }\n if (Types.isEmpty(referenced)) return undefined;\n return resolve\n ? Objects.resolveKey(referenced, { single: false })\n : referenced;\n }\n\n validate(\n self: ODataModel<T>,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}\n ): { [name: string]: string[] } | undefined {\n const errors = this.fields({\n include_parents: true,\n include_navigation: navigation,\n }).reduce((acc, field) => {\n let value = (self as any)[field.name];\n let errs = field.validate(value, { method });\n return errs !== undefined\n ? Object.assign(acc, { [field.name]: errs })\n : acc;\n }, {});\n return !Types.isEmpty(errors) ? errors : undefined;\n }\n\n defaults(): T | { [name: string]: any } | undefined {\n const defs = this.fields().reduce((acc, field) => {\n let value = field.defaults();\n return value !== undefined\n ? Object.assign(acc, { [field.name]: value })\n : acc;\n }, {});\n return !Types.isEmpty(defs) ? defs : undefined;\n }\n\n hasChanged(\n self: ODataModel<T>,\n { include_navigation = false }: { include_navigation?: boolean } = {}\n ): boolean {\n return (\n !Types.isEmpty(self._changes) ||\n Object.values(self._relations)\n .filter(({ field }) => !field.navigation || include_navigation)\n .some(\n ({ field, state, model }) =>\n (!include_navigation || field.navigation) &&\n (state === ODataModelState.Changed ||\n (model != undefined && model.hasChanged({ include_navigation })))\n )\n );\n }\n\n asEntity<R, M extends ODataModel<T>>(self: M, func: (model: M) => R): R {\n const parent = self._parent;\n self._parent = null;\n const result = func(self);\n if (result instanceof Observable) {\n return (result as any).pipe(finalize(() => (self._parent = parent)));\n } else {\n self._parent = parent;\n return result;\n }\n }\n\n toEntity(\n self: ODataModel<T>,\n {\n client_id = false,\n include_navigation = false,\n include_concurrency = false,\n include_computed = false,\n include_key = true,\n include_non_field = false,\n changes_only = false,\n field_mapping = false,\n chain = [],\n }: {\n client_id?: boolean;\n include_navigation?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_key?: boolean;\n include_non_field?: boolean;\n changes_only?: boolean;\n field_mapping?: boolean;\n chain?: (ODataModel<any> | ODataCollection<any, ODataModel<any>>)[];\n } = {}\n ): T | { [name: string]: any } {\n let attrs = self.attributes({\n changes_only,\n field_mapping,\n include_concurrency,\n include_computed,\n include_non_field,\n });\n\n let relations = Object.entries(self._relations)\n .filter(\n // Chain\n ([, { model }]) => chain.every((c) => c !== model)\n )\n .filter(\n // Changes only\n ([, { model, state }]) =>\n !changes_only ||\n (changes_only &&\n (state === ODataModelState.Changed ||\n (model != undefined && model.hasChanged({ include_navigation }))))\n )\n .filter(\n ([, { field, model }]) =>\n // Navigation\n (include_navigation && field.navigation && model !== null) ||\n !field.navigation\n )\n .map(([k, { model, field, state }]) => {\n let changesOnly =\n changes_only &&\n state !== ODataModelState.Changed &&\n !!field.navigation;\n let includeKey = include_key && !!field.navigation;\n if (ODataModelOptions.isModel(model)) {\n return [\n k,\n (model as ODataModel<any>).toEntity({\n client_id,\n include_navigation,\n include_concurrency,\n include_non_field,\n field_mapping,\n changes_only: changesOnly,\n include_key: includeKey,\n chain: [self, ...chain],\n }),\n ];\n } else if (ODataModelOptions.isCollection(model)) {\n return [\n k,\n (model as ODataCollection<any, ODataModel<any>>).toEntities({\n client_id,\n include_navigation,\n include_concurrency,\n include_non_field,\n field_mapping,\n changes_only: changesOnly,\n include_key: includeKey,\n chain: [self, ...chain],\n }),\n ];\n }\n return [k, model];\n })\n .reduce((acc, [k, v]) => {\n const name = field_mapping\n ? this.fields().find(\n (field: ODataModelField<any>) => field.name === k\n )?.field || k\n : k;\n return Object.assign(acc, { [name]: v });\n }, {});\n\n // Create entity\n let entity = { ...attrs, ...relations };\n\n // Add client_id\n if (client_id) {\n (<any>entity)[this.cid] = (<any>self)[this.cid];\n }\n\n // Add key\n if (include_key) {\n entity = {\n ...entity,\n ...(this.resolveKey(self, { field_mapping, resolve: false }) as {}),\n };\n }\n\n // Add type\n if (\n self._parent !== null &&\n ((ODataModelOptions.isModel(self._parent[0]) &&\n (self._parent[1] as ODataModelField<any>).meta !== self._meta) ||\n (ODataModelOptions.isCollection(self._parent[0]) &&\n (self._parent[0] as ODataCollection<any, ODataModel<any>>)._model\n .meta !== self._meta))\n ) {\n this.api.options.helper.type(entity, this.schema.type());\n }\n\n return entity;\n }\n\n attributes(\n self: ODataModel<T>,\n {\n changes_only = false,\n include_concurrency = false,\n include_computed = false,\n include_non_field = false,\n field_mapping = false,\n }: {\n changes_only?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_non_field?: boolean;\n field_mapping?: boolean;\n } = {}\n ): { [name: string]: any } {\n // Attributes by fields (attributes for the model type)\n const fieldAttrs = this.fields().reduce((acc, f) => {\n const isChanged = f.name in self._changes;\n const name = field_mapping ? f.field : f.name;\n const computed = f.annotatedValue<boolean>(COMPUTED);\n const value = isChanged\n ? self._changes[f.name]\n : self._attributes[f.name];\n if (f.concurrency && include_concurrency) {\n return Object.assign(acc, { [name]: value });\n } else if (computed && include_computed) {\n return Object.assign(acc, { [name]: value });\n } else if (changes_only && isChanged) {\n return Object.assign(acc, { [name]: value });\n } else if (!changes_only && !f.concurrency && !computed) {\n return Object.assign(acc, { [name]: value });\n } else {\n return acc;\n }\n }, {});\n if (!include_non_field) return fieldAttrs;\n const names = Object.keys(fieldAttrs);\n // Attributes from object (attributes for object)\n const nonFieldAttrs = Object.entries(self)\n .filter(\n ([k]) =>\n names.indexOf(k) === -1 && !k.startsWith('_') && !k.endsWith('$')\n )\n .reduce((acc, [k, v]) => Object.assign(acc, { [k]: v }), {});\n return { ...fieldAttrs, ...nonFieldAttrs };\n }\n\n reset(\n self: ODataModel<T>,\n { name, silent = false }: { name?: string; silent?: boolean } = {}\n ) {\n if (!Types.isEmpty(name) && (name as string) in self._changes) {\n const value = self._attributes[name as string];\n const previous = self._changes[name as string];\n delete self._changes[name as string];\n if (!silent) {\n self.events$.emit(\n new ODataModelEvent('change', {\n model: self,\n track: name,\n value,\n previous,\n })\n );\n }\n } else if (Types.isEmpty(name)) {\n const entries = Object.entries(self._changes);\n self._changes = {};\n if (!silent) {\n entries.forEach((entry) => {\n self.events$.emit(\n new ODataModelEvent('change', {\n track: entry[0],\n model: self,\n value: self._attributes[entry[0]],\n previous: entry[1],\n })\n );\n });\n }\n }\n }\n\n assign(\n self: ODataModel<T>,\n entity: Partial<T> | { [name: string]: any },\n {\n reset = false,\n reparent = false,\n silent = false,\n }: { reset?: boolean; reparent?: boolean; silent?: boolean } = {}\n ) {\n self._reset = reset;\n self._reparent = reparent;\n self._silent = silent;\n\n const changes: string[] = [];\n\n // Apply entity\n const model = self as any;\n Object.entries(entity)\n .filter(([, value]) => value !== undefined) // Filter undefined\n .forEach(([key, value]) => {\n const field = this.fields({\n include_parents: true,\n include_navigation: true,\n }).find(\n (field: ODataModelField<any>) =>\n (self._reset && field.field === key) || field.name === key\n );\n\n if (field !== undefined) {\n // Delegated to private setter\n if (this._set(self, field, value)) {\n changes.push(field.name);\n }\n } else {\n // Basic assignment\n const current = model[key];\n model[key] = value;\n if (current !== value) changes.push(key);\n }\n });\n\n if ((!self._silent && changes.length > 0) || self._reset) {\n self.events$.emit(\n new ODataModelEvent(self._reset ? 'reset' : 'update', {\n model: self,\n options: { changes },\n })\n );\n }\n self._reset = false;\n self._reparent = false;\n self._silent = false;\n }\n\n static isModel(obj: any) {\n return Types.rawType(obj) === 'Model';\n }\n\n static isCollection(obj: any) {\n return Types.rawType(obj) === 'Collection';\n }\n\n private updateCollection<F>(\n self: ODataModel<T>,\n field: ODataModelField<F>,\n collection: ODataCollection<F, ODataModel<F>>,\n value: T[] | { [name: string]: any }[]\n ) {\n collection._annotations = field.annotationsFactory(\n self.annots()\n ) as ODataEntitiesAnnotations;\n collection.assign(value as T[] | { [name: string]: any }[], {\n reset: self._reset,\n reparent: self._reparent,\n silent: self._silent,\n });\n return collection.hasChanged();\n }\n private updateModel<F>(\n self: ODataModel<T>,\n field: ODataModelField<F>,\n model: ODataModel<F>,\n value: F | { [name: string]: any }\n ) {\n model._annotations = field.annotationsFactory(\n self.annots()\n ) as ODataEntityAnnotations;\n model.assign(value as F | { [name: string]: any }, {\n reset: self._reset,\n reparent: self._reparent,\n silent: self._silent,\n });\n return model.hasChanged();\n }\n\n private _get<F>(\n self: ODataModel<T>,\n field: ODataModelField<F>\n ): F | ODataModel<F> | ODataCollection<F, ODataModel<F>> | null | undefined {\n if (field.isStructuredType()) {\n return self._relations[field.name]?.model;\n } else {\n return this.attributes(self, {\n include_concurrency: true,\n include_computed: true,\n })[field.name];\n }\n }\n\n private _setStructured<F>(\n self: ODataModel<T>,\n field: ODataModelField<F>,\n value:\n | F\n | F[]\n | { [name: string]: any }\n | { [name: string]: any }[]\n | ODataModel<F>\n | ODataCollection<F, ODataModel<F>>\n | null\n ): boolean {\n let changed = false;\n // Ensures that the relation exists\n if (!(field.name in self._relations)) {\n self._relations[field.name] = {\n state: ODataModelState.Unchanged,\n field: field,\n };\n }\n\n const relation = self._relations[field.name];\n const currentModel = relation.model;\n\n if (value === null) {\n relation.model = value as null;\n changed = currentModel !== value;\n this._unsubscribe(self, relation);\n } else if (ODataModelOptions.isCollection(currentModel)) {\n if (ODataModelOptions.isCollection(value)) {\n if (\n (currentModel as ODataCollection<F, ODataModel<F>>).equals(\n value as ODataCollection<F, ODataModel<F>>\n )\n ) {\n changed = false;\n }\n this._unsubscribe(self, relation);\n relation.model = value as ODataCollection<F, ODataModel<F>>;\n this._subscribe(self, relation);\n if (self._reparent) relation.model._parent = [self, field];\n changed = true;\n } else if (Types.isArray(value)) {\n changed = this.updateCollection<F>(\n self,\n field,\n currentModel as ODataCollection<F, ODataModel<F>>,\n value as T[] | { [name: string]: any }[]\n );\n }\n } else if (ODataModelOptions.isModel(currentModel)) {\n if (ODataModelOptions.isModel(value)) {\n if ((currentModel as ODataModel<F>).equals(value as ODataModel<F>)) {\n changed = false;\n }\n this._unsubscribe(self, relation);\n relation.model = value as ODataModel<F>;\n this._subscribe(self, relation);\n if (self._reparent) relation.model._parent = [self, field];\n changed = true;\n } else if (Types.isPlainObject(value)) {\n changed = this.updateModel<F>(\n self,\n field,\n currentModel as ODataModel<F>,\n value as F | { [name: string]: any }\n );\n }\n } else {\n relation.model =\n ODataModelOptions.isCollection(value) ||\n ODataModelOptions.isModel(value)\n ? (value as ODataModel<F> | ODataCollection<F, ODataModel<F>>)\n : field.modelCollectionFactory<T, F>({\n parent: self,\n value: value,\n reset: self._reset,\n });\n changed = true;\n this._subscribe(self, relation);\n if (self._reparent) relation.model._parent = [self, field];\n }\n if (!ODataModelOptions.isCollection(relation.model)) {\n var ref = field.meta?.resolveReferential(relation.model, field);\n if (ref !== undefined) {\n Object.entries(ref).forEach(([k, v]) =>\n this._setValue(self, k, v, false)\n );\n }\n }\n relation.state =\n self._reset || !changed\n ? ODataModelState.Unchanged\n : ODataModelState.Changed;\n if (!self._silent && changed) {\n self.events$.emit(\n new ODataModelEvent('change', {\n track: field.name,\n model: self,\n value: relation.model,\n previous: currentModel,\n })\n );\n }\n return changed;\n }\n\n private _setValue<F>(\n self: ODataModel<T>,\n field: string,\n value:\n | F\n | F[]\n | { [name: string]: any }\n | { [name: string]: any }[]\n | ODataModel<F>\n | ODataCollection<F, ODataModel<F>>\n | null,\n key?: boolean\n ): boolean {\n let changed = false;\n const attrs = this.attributes(self, {\n include_concurrency: true,\n include_computed: true,\n });\n const currentValue = attrs[field];\n changed = !Types.isEqual(currentValue, value);\n if (self._reset) {\n delete self._changes[field];\n self._attributes[field] = value;\n } else if (Types.isEqual(value, self._attributes[field])) {\n delete self._changes[field];\n } else if (changed) {\n self._changes[field] = value;\n }\n if (!self._silent && changed) {\n self.events$.emit(\n new ODataModelEvent('change', {\n track: field,\n model: self,\n value,\n previous: currentValue,\n options: { key },\n })\n );\n }\n return changed;\n }\n\n private _set<F>(\n self: ODataModel<T>,\n field: ODataModelField<F>,\n value:\n | F\n | F[]\n | { [name: string]: any }\n | { [name: string]: any }[]\n | ODataModel<F>\n | ODataCollection<F, ODataModel<F>>\n | null\n ): boolean {\n return field.isStructuredType()\n ? this._setStructured(self, field, value)\n : this._setValue(self, field.name, value, field.isKey());\n }\n\n private _unsubscribe<F>(\n self: ODataModel<T>,\n relation: ODataModelRelation<F>\n ) {\n if (relation.subscription) {\n relation.subscription.unsubscribe();\n delete relation.subscription;\n }\n }\n private _subscribe<F>(self: ODataModel<T>, relation: ODataModelRelation<F>) {\n if (relation.subscription) {\n throw new Error('Subscription already exists');\n }\n if (relation.model == null) {\n throw new Error('Subscription model is null');\n }\n relation.subscription = relation.model.events$.subscribe(\n (event: ODataModelEvent<any>) => {\n if (\n BUBBLING.indexOf(event.name) !== -1 &&\n event.bubbling &&\n !event.visited(self)\n ) {\n if (event.model === relation.model) {\n if (\n event.name === 'change' &&\n relation.field.navigation &&\n event.options?.key\n ) {\n var ref = (relation.model as ODataModel<any>).referential(\n relation.field\n );\n if (ref !== undefined) {\n Object.entries(ref).forEach(([k, v]) =>\n this._setValue(self, k, v, false)\n );\n }\n }\n }\n\n event.push(self, relation.field.name);\n self.events$.emit(event);\n }\n }\n );\n }\n}\n","import { EventEmitter } from '@angular/core';\nimport { forkJoin, Observable, of, throwError } from 'rxjs';\nimport { finalize, map, switchMap } from 'rxjs/operators';\nimport { DEFAULT_VERSION } from '../constants';\nimport { ODataHelper } from '../helper';\nimport {\n EntityKey,\n ODataEntities,\n ODataEntitiesAnnotations,\n ODataEntityAnnotations,\n ODataEntityResource,\n ODataEntitySetResource,\n ODataNavigationPropertyResource,\n ODataOptions,\n ODataPropertyResource,\n ODataQueryArgumentsOptions,\n ODataQueryOptionsHandler,\n ODataResource,\n} from '../resources';\nimport { Types } from '../utils/types';\nimport { ODataModel } from './model';\nimport {\n BUBBLING,\n INCLUDE_DEEP,\n INCLUDE_SHALLOW,\n ODataModelEntry,\n ODataModelEvent,\n ODataModelField,\n ODataModelOptions,\n ODataModelState,\n} from './options';\n\nexport class ODataCollection<T, M extends ODataModel<T>>\n implements Iterable<M>\n{\n static model: typeof ODataModel | null = null;\n _parent:\n | [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ]\n | null = null;\n _resource:\n | ODataEntitySetResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | null = null;\n _annotations!: ODataEntitiesAnnotations;\n _entries: ODataModelEntry<T, M>[] = [];\n _model: typeof ODataModel;\n\n models() {\n return this._entries\n .filter((e) => e.state !== ODataModelState.Removed)\n .map((e) => e.model);\n }\n\n get length(): number {\n return this.models().length;\n }\n\n //Events\n events$ = new EventEmitter<ODataModelEvent<T>>();\n constructor(\n entities: Partial<T>[] | { [name: string]: any }[] = [],\n {\n parent,\n resource,\n annots,\n model,\n reset = false,\n }: {\n parent?: [ODataModel<any>, ODataModelField<any>];\n resource?: ODataResource<T>;\n annots?: ODataEntitiesAnnotations;\n model?: typeof ODataModel;\n reset?: boolean;\n } = {}\n ) {\n const Klass = this.constructor as typeof ODataCollection;\n if (model === undefined && Klass.model !== null) model = Klass.model;\n if (model === undefined) throw new Error('Collection need model');\n this._model = model;\n\n // Parent\n if (parent !== undefined) {\n this._parent = parent;\n }\n\n // Resource\n resource = (resource || this._model.meta.collectionResourceFactory()) as\n | ODataEntitySetResource<T>\n | ODataPropertyResource<T>\n | ODataNavigationPropertyResource<T>\n | undefined;\n if (resource !== undefined) {\n this.attach(\n resource as\n | ODataEntitySetResource<T>\n | ODataPropertyResource<T>\n | ODataNavigationPropertyResource<T>\n );\n }\n\n // Annotations\n this._annotations =\n annots ||\n new ODataEntitiesAnnotations(\n resource?.api.options.helper || ODataHelper[DEFAULT_VERSION]\n );\n\n entities = entities || [];\n this.assign(entities, { reset });\n }\n\n isParentOf(\n child: ODataModel<any> | ODataCollection<any, ODataModel<any>>\n ): boolean {\n return (\n child !== this &&\n ODataModelOptions.chain(child).some((p) => p[0] === this)\n );\n }\n\n resource():\n | ODataEntitySetResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T> {\n return ODataModelOptions.resource<T>(this) as\n | ODataEntitySetResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>;\n }\n\n attach(\n resource:\n | ODataEntitySetResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n ) {\n if (\n this._resource !== null &&\n this._resource.type() !== resource.type() &&\n !resource.isSubtypeOf(this._resource)\n )\n throw new Error(\n `Can't reattach ${resource.type()} to ${this._resource.type()}`\n );\n\n this._entries.forEach(({ model }) => {\n const mr = this._model.meta.modelResourceFactory(\n resource.cloneQuery<T>()\n ) as ODataEntityResource<T>;\n model.attach(mr);\n });\n\n const current = this._resource;\n if (current === null || !current.isEqualTo(resource)) {\n this._resource = resource;\n this.events$.emit(\n new ODataModelEvent('attach', {\n collection: this,\n previous: current,\n value: resource,\n })\n );\n }\n }\n\n asEntitySet<R>(func: (collection: this) => R): R {\n const parent = this._parent;\n this._parent = null;\n const result = func(this);\n if (result instanceof Observable) {\n return (result as any).pipe(finalize(() => (this._parent = parent)));\n } else {\n this._parent = parent;\n return result;\n }\n }\n\n annots() {\n return this._annotations;\n }\n\n private modelFactory(\n data: Partial<T> | { [name: string]: any },\n { reset = false }: { reset?: boolean } = {}\n ): M {\n let Model = this._model;\n const helper = this._annotations.helper;\n const annots = new ODataEntityAnnotations(\n helper,\n helper.annotations(data) || {}\n );\n\n if (annots?.type !== undefined && Model.meta !== null) {\n let schema = Model.meta.findChildOptions((o) =>\n o.isTypeOf(annots.type as string)\n )?.schema;\n if (schema !== undefined && schema.model !== undefined)\n // Change to child model\n Model = schema.model;\n }\n\n return new Model(data, {\n annots,\n reset,\n parent: [this, null],\n }) as M;\n }\n\n toEntities({\n client_id = false,\n include_navigation = false,\n include_concurrency = false,\n include_computed = false,\n include_key = true,\n include_non_field = false,\n changes_only = false,\n field_mapping = false,\n chain = [],\n }: {\n client_id?: boolean;\n include_navigation?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_key?: boolean;\n include_non_field?: boolean;\n changes_only?: boolean;\n field_mapping?: boolean;\n chain?: (ODataModel<any> | ODataCollection<any, ODataModel<any>>)[];\n } = {}): (T | { [name: string]: any })[] {\n return this._entries\n .filter(\n ({ model, state }) =>\n state !== ODataModelState.Removed && chain.every((c) => c !== model)\n )\n .map(({ model, state }) => {\n var changesOnly = changes_only && state !== ODataModelState.Added;\n return model.toEntity({\n client_id,\n include_navigation,\n include_concurrency,\n include_computed,\n include_key,\n include_non_field,\n field_mapping,\n changes_only: changesOnly,\n chain: [this, ...chain],\n });\n });\n }\n\n toJSON() {\n return this.toEntities();\n }\n\n hasChanged({ include_navigation }: { include_navigation?: boolean } = {}) {\n return (\n this._entries.some((e) => e.state !== ODataModelState.Unchanged) ||\n this.models().some((m) => m.hasChanged({ include_navigation }))\n );\n }\n\n clone<C extends ODataCollection<T, M>>() {\n let Ctor = <typeof ODataCollection>this.constructor;\n return new Ctor(this.toEntities(INCLUDE_SHALLOW), {\n resource: this.resource(),\n annots: this.annots(),\n }) as C;\n }\n\n fetch({\n withCount,\n ...options\n }: ODataOptions & {\n withCount?: boolean;\n } = {}): Observable<this> {\n const resource = this.resource();\n if (resource === undefined)\n return throwError('fetch: Resource is undefined');\n\n let obs$: Observable<ODataEntities<any>>;\n if (resource instanceof ODataEntitySetResource) {\n obs$ = resource.fetch({ withCount, ...options });\n } else if (resource instanceof ODataNavigationPropertyResource) {\n obs$ = resource.fetch({\n responseType: 'entities',\n withCount,\n ...options,\n });\n } else {\n obs$ = resource.fetch({\n responseType: 'entities',\n withCount,\n ...options,\n });\n }\n this.events$.emit(\n new ODataModelEvent('request', { collection: this, value: obs$ })\n );\n return obs$.pipe(\n map(({ entities, annots }) => {\n this._annotations = annots;\n this.assign(entities || [], { reset: true });\n this.events$.emit(new ODataModelEvent('sync', { collection: this }));\n return this;\n })\n );\n }\n\n fetchAll(options?: ODataOptions): Observable<this> {\n const resource = this.resource();\n if (resource === undefined)\n return throwError('fetchAll: Resource is undefined');\n\n if (resource instanceof ODataPropertyResource)\n return throwError('fetchAll: Resource is ODataPropertyResource');\n\n const obs$ = resource.fetchAll(options);\n this.events$.emit(\n new ODataModelEvent('request', {\n collection: this,\n options: { observable: obs$ },\n })\n );\n return obs$.pipe(\n map((entities) => {\n this._annotations = new ODataEntitiesAnnotations(\n resource?.api.options.helper\n );\n this.assign(entities || [], { reset: true });\n this.events$.emit(\n new ODataModelEvent('sync', {\n collection: this,\n options: { entities },\n })\n );\n return this;\n })\n );\n }\n\n /**\n * Save all models in the collection\n * @param relModel The model is relationship\n * @param method The method to use\n * @param options HttpOptions\n */\n save({\n relModel = false,\n method,\n ...options\n }: ODataOptions & {\n relModel?: boolean;\n method?: 'update' | 'modify';\n } = {}): Observable<this> {\n const resource = this.resource();\n if (resource === undefined)\n return throwError('saveAll: Resource is undefined');\n\n if (resource instanceof ODataPropertyResource)\n return throwError('fetchAll: Resource is ODataPropertyResource');\n\n let toDestroyEntity: M[] = [];\n let toRemoveReference: M[] = [];\n let toDestroyContained: M[] = [];\n let toCreateEntity: M[] = [];\n let toAddReference: M[] = [];\n let toCreateContained: M[] = [];\n let toUpdateEntity: M[] = [];\n let toUpdateContained: M[] = [];\n\n this._entries.forEach(({ model, state }) => {\n if (state === ODataModelState.Removed) {\n if (relModel) {\n toDestroyEntity.push(model);\n } else if (!model.isNew()) {\n toRemoveReference.push(model);\n } else {\n toDestroyContained.push(model);\n }\n } else if (state === ODataModelState.Added) {\n if (relModel) {\n toCreateEntity.push(model);\n } else if (!model.isNew()) {\n toAddReference.push(model);\n } else {\n toCreateContained.push(model);\n }\n } else if (model.hasChanged()) {\n toUpdateEntity.push(model);\n }\n });\n if (\n toDestroyEntity.length > 0 ||\n toRemoveReference.length > 0 ||\n toDestroyContained.length > 0 ||\n toCreateEntity.length > 0 ||\n toAddReference.length > 0 ||\n toCreateContained.length > 0 ||\n toUpdateEntity.length > 0 ||\n toUpdateContained.length > 0\n ) {\n const obs$ = forkJoin([\n ...toDestroyEntity.map((m) => m.asEntity((e) => e.destroy(options))),\n ...toRemoveReference.map((m) => this.removeReference(m, options)),\n ...toDestroyContained.map((m) => m.destroy(options)),\n ...toCreateEntity.map((m) =>\n m.asEntity((e) => e.save({ method: 'create', ...options }))\n ),\n ...toAddReference.map((m) => this.addReference(m, options)),\n ...toCreateContained.map((m) =>\n m.save({ method: 'create', ...options })\n ),\n ...toUpdateEntity.map((m) =>\n m.asEntity((e) => e.save({ method, ...options }))\n ),\n ...toUpdateContained.map((m) => m.save({ method, ...options })),\n ]);\n this.events$.emit(\n new ODataModelEvent('request', {\n collection: this,\n options: { observable: obs$ },\n })\n );\n return obs$.pipe(\n map(() => {\n this._entries = this._entries\n .filter((entry) => entry.state !== ODataModelState.Removed)\n .map((entry) => ({ ...entry, state: ODataModelState.Unchanged }));\n this.events$.emit(new ODataModelEvent('sync', { collection: this }));\n return this;\n })\n );\n }\n return of(this);\n }\n\n private addReference(model: M, options?: ODataOptions): Observable<M> {\n const resource = this.resource();\n if (!model.isNew() && resource instanceof ODataNavigationPropertyResource) {\n return resource\n .reference()\n .add(\n model._meta.entityResource(model) as ODataEntityResource<T>,\n options\n )\n .pipe(map(() => model));\n }\n return of(model);\n }\n\n private _addModel(\n model: M,\n {\n silent = false,\n reset = false,\n reparent = false,\n position = -1,\n }: {\n silent?: boolean;\n reset?: boolean;\n reparent?: boolean;\n position?: number;\n } = {}\n ): M | undefined {\n const key = model.key();\n let entry = this._findEntry({\n model,\n key,\n cid: (<any>model)[this._model.meta.cid],\n });\n if (entry !== undefined && entry.state !== ODataModelState.Removed) {\n return undefined;\n }\n\n if (entry !== undefined && entry.state === ODataModelState.Removed) {\n const index = this._entries.indexOf(entry);\n this._entries.splice(index, 1);\n }\n\n // Create Entry\n entry = {\n state: reset ? ODataModelState.Unchanged : ODataModelState.Added,\n model,\n key: model.key(),\n };\n // Set Parent\n if (reparent) model._parent = [this, null];\n // Subscribe\n this._subscribe(entry);\n // Now add\n if (position >= 0) this._entries.splice(position, 0, entry);\n else this._entries.push(entry);\n\n if (!silent) {\n model.events$.emit(\n new ODataModelEvent('add', { model, collection: this })\n );\n }\n return entry.model;\n }\n\n private addModel(\n model: M,\n {\n silent = false,\n reset = false,\n reparent = false,\n position = -1,\n }: {\n silent?: boolean;\n reset?: boolean;\n reparent?: boolean;\n position?: number;\n } = {}\n ) {\n if (position < 0) position = this._bisect(model);\n const added = this._addModel(model, { silent, reset, position, reparent });\n if (!silent && added !== undefined) {\n this.events$.emit(\n new ODataModelEvent('update', {\n collection: this,\n options: { added: [added], removed: [], merged: [] },\n })\n );\n }\n }\n\n add(\n model: M,\n {\n silent = false,\n reparent = false,\n server = true,\n position = -1,\n }: {\n silent?: boolean;\n reparent?: boolean;\n server?: boolean;\n position?: number;\n } = {}\n ): Observable<this> {\n if (server) {\n return this.addReference(model).pipe(\n map((model) => {\n this.addModel(model, { silent, position, reparent, reset: true });\n return this;\n })\n );\n } else {\n this.addModel(model, { silent, position, reparent });\n return of(this);\n }\n }\n\n private removeReference(model: M, options?: ODataOptions): Observable<M> {\n let resource = this.resource();\n if (!model.isNew() && resource instanceof ODataNavigationPropertyResource) {\n let target =\n this._model.meta.api.options.deleteRefBy === 'id'\n ? (model._meta.entityResource(model) as ODataEntityResource<T>)\n : undefined;\n if (this._model.meta.api.options.deleteRefBy === 'path') {\n resource = resource.key(model.key());\n }\n return resource\n .reference()\n .remove(target, options)\n .pipe(map(() => model));\n }\n return of(model);\n }\n\n private _removeModel(\n model: M,\n {\n silent = false,\n reset = false,\n }: { silent?: boolean; reset?: boolean } = {}\n ): M | undefined {\n const key = model.key();\n let entry = this._findEntry({\n model,\n key,\n cid: (<any>model)[this._model.meta.cid],\n });\n if (entry === undefined || entry.state === ODataModelState.Removed) {\n return undefined;\n }\n\n // Emit Event\n if (!silent)\n model.events$.emit(\n new ODataModelEvent('remove', { model, collection: this })\n );\n\n // Now remove\n const index = this._entries.indexOf(entry);\n this._entries.splice(index, 1);\n if (!(reset || entry.state === ODataModelState.Added)) {\n // Move to end of array and mark as removed\n entry.state = ODataModelState.Removed;\n this._entries.push(entry);\n }\n this._unsubscribe(entry);\n return entry.model;\n }\n\n private removeModel(\n model: M,\n {\n silent = false,\n reset = false,\n }: { silent?: boolean; reset?: boolean } = {}\n ) {\n const removed = this._removeModel(model, { silent, reset });\n if (!silent && removed !== undefined) {\n this.events$.emit(\n new ODataModelEvent('update', {\n collection: this,\n options: { added: [], removed: [removed], merged: [] },\n })\n );\n }\n }\n\n remove(\n model: M,\n {\n silent = false,\n server = true,\n }: { silent?: boolean; server?: boolean } = {}\n ): Observable<this> {\n if (server) {\n return this.removeReference(model).pipe(\n map((model) => {\n this.removeModel(model, { silent, reset: true });\n return this;\n })\n );\n } else {\n this.removeModel(model, { silent });\n return of(this);\n }\n }\n\n create(\n attrs: T = {} as T,\n {\n silent = false,\n server = true,\n }: { silent?: boolean; server?: boolean } = {}\n ) {\n const model = this.modelFactory(attrs);\n return (model.isValid() && server ? model.save() : of(model)).pipe(\n switchMap((model) => this.add(model, { silent, server })),\n map(() => model)\n );\n }\n\n set(path: string | string[], value: any) {\n const Model = this._model;\n const pathArray = (\n Types.isArray(path) ? path : (path as string).match(/([^[.\\]])+/g)\n ) as any[];\n if (pathArray.length === 0) return undefined;\n if (pathArray.length > 1) {\n const model = this._entries[Number(pathArray[0])].model;\n return model.set(pathArray.slice(1), value);\n }\n if (pathArray.length === 1 && ODataModelOptions.isModel(value)) {\n let toAdd: M[] = [];\n let toMerge: M[] = [];\n let toRemove: M[] = [];\n let index = Number(pathArray[0]);\n const model = this.models()[index];\n const entry = this._findEntry({ model });\n if (entry !== undefined) {\n //TODO: Remove/Add or Merge?\n // Merge\n entry.model.assign(\n value.toEntity({ client_id: true, ...INCLUDE_DEEP })\n );\n if (entry.model.hasChanged()) toMerge.push(model);\n } else {\n // Add\n this._addModel(value, { reparent: true });\n toAdd.push(model);\n }\n this.events$.emit(\n new ODataModelEvent('update', {\n collection: this,\n options: { added: toAdd, removed: toRemove, merged: toMerge },\n })\n );\n return value;\n }\n }\n\n get(path: number): M | undefined;\n get(path: string | string[]): any;\n get(path: any): any {\n const Model = this._model;\n const pathArray = (\n Types.isArray(path) ? path : `${path}`.match(/([^[.\\]])+/g)\n ) as any[];\n if (pathArray.length === 0) return undefined;\n const value = this.models()[Number(pathArray[0])];\n if (pathArray.length > 1 && ODataModelOptions.isModel(value)) {\n return value.get(pathArray.slice(1));\n }\n return value;\n }\n\n reset({\n path,\n silent = false,\n }: { path?: string | string[]; silent?: boolean } = {}) {\n if (Types.isEmpty(path)) {\n this.models().forEach((m) => m.reset({ silent }));\n } else {\n const Model = this._model;\n const pathArray = (\n Types.isArray(path) ? path : `${path}`.match(/([^[.\\]])+/g)\n ) as any[];\n const value = this.models()[Number(pathArray[0])];\n if (ODataModelOptions.isModel(value)) {\n value.reset({ path: pathArray.slice(1), silent });\n }\n }\n }\n\n assign(\n objects: Partial<T>[] | { [name: string]: any }[] | M[],\n {\n reset = false,\n reparent = false,\n silent = false,\n }: { reset?: boolean; reparent?: boolean; silent?: boolean } = {}\n ) {\n const Model = this._model;\n\n let toAdd: M[] = [];\n let toMerge: M[] = [];\n let toRemove: M[] = [];\n let toSort: [M, number][] = [];\n let modelMap: string[] = [];\n objects.forEach((obj, index) => {\n const isModel = ODataModelOptions.isModel(obj);\n const key =\n Model !== null && Model.meta ? Model.meta.resolveKey(obj) : undefined;\n const cid =\n Model.meta.cid in obj ? (<any>obj)[Model.meta.cid] : undefined;\n // Try find entry\n const entry = isModel\n ? this._findEntry({ model: obj as M }) // By Model\n : this._findEntry({ cid, key }); // By Cid or Key\n\n let model: M;\n if (entry !== undefined) {\n // Merge\n model = entry.model;\n if (model !== obj) {\n // Get entity from model\n if (isModel) {\n const entity = (obj as M).toEntity({\n client_id: true,\n ...INCLUDE_DEEP,\n });\n model.assign(entity, { reset, silent });\n } else {\n const helper = this._annotations.helper;\n const annots = new ODataEntityAnnotations(\n helper,\n helper.annotations(obj) || {}\n );\n const entity = annots.attributes<T>(obj, 'full');\n model._annotations = annots;\n model.assign(entity, { reset, silent });\n }\n // Model Change?\n if (model.hasChanged()) toMerge.push(model);\n }\n // Has Sort or Index Change?\n if (toSort.length > 0 || index !== this.models().indexOf(model)) {\n toSort.push([model, index]);\n }\n } else {\n // Add\n model = isModel\n ? (obj as M)\n : this.modelFactory(obj as Partial<T> | { [name: string]: any }, {\n reset,\n });\n toAdd.push(model);\n }\n modelMap.push((<any>model)[Model.meta.cid]);\n });\n this._entries\n .filter((e) => modelMap.indexOf((<any>e.model)[Model.meta.cid]) === -1)\n .forEach((entry) => {\n toRemove.push(entry.model);\n });\n\n toRemove.forEach((m) => {\n this._removeModel(m, { silent, reset });\n });\n toAdd.forEach((m) => {\n this._addModel(m, { silent, reset, reparent });\n });\n toSort.forEach((m) => {\n this._removeModel(m[0], { silent: true, reset });\n this._addModel(m[0], { silent: true, reset, position: m[1], reparent });\n });\n\n if (\n (!silent &&\n (toAdd.length > 0 ||\n toRemove.length > 0 ||\n toMerge.length > 0 ||\n toSort.length > 0)) ||\n reset\n ) {\n this._sortBy = null;\n this.events$.emit(\n new ODataModelEvent(reset ? 'reset' : 'update', {\n collection: this,\n options: {\n added: toAdd,\n removed: toRemove,\n merged: toMerge,\n sorted: toSort,\n },\n })\n );\n }\n }\n\n query(func: (q: ODataQueryOptionsHandler<T>) => void) {\n const resource = this.resource();\n resource.query(func);\n this.attach(resource);\n return this;\n }\n\n callFunction<P, R>(\n name: string,\n params: P | null,\n responseType: 'property' | 'model' | 'collection' | 'none',\n { ...options }: {} & ODataQueryArgumentsOptions<R> = {}\n ): Observable<R | ODataModel<R> | ODataCollection<R, ODataModel<R>> | null> {\n const resource = this.resource();\n if (resource instanceof ODataEntitySetResource) {\n const func = resource.function<P, R>(name);\n func.query((q) => q.apply(options));\n switch (responseType) {\n case 'property':\n return func.callProperty(params, options);\n case 'model':\n return func.callModel(params, options);\n case 'collection':\n return func.callCollection(params, options);\n default:\n return func.call(params, { responseType, ...options });\n }\n }\n return throwError(`Can't function without ODataEntitySetResource`);\n }\n\n callAction<P, R>(\n name: string,\n params: P | null,\n responseType: 'property' | 'model' | 'collection' | 'none',\n { ...options }: {} & ODataQueryArgumentsOptions<R> = {}\n ): Observable<R | ODataModel<R> | ODataCollection<R, ODataModel<R>> | null> {\n const resource = this.resource();\n if (resource instanceof ODataEntitySetResource) {\n const action = resource.action<P, R>(name);\n action.query((q) => q.apply(options));\n switch (responseType) {\n case 'property':\n return action.callProperty(params, options);\n case 'model':\n return action.callModel(params, options);\n case 'collection':\n return action.callCollection(params, options);\n default:\n return action.call(params, { responseType, ...options });\n }\n }\n return throwError(`Can't action without ODataEntitySetResource`);\n }\n\n private _unsubscribe(entry: ODataModelEntry<T, M>) {\n if (entry.subscription) {\n entry.subscription.unsubscribe();\n delete entry.subscription;\n }\n }\n\n private _subscribe(entry: ODataModelEntry<T, M>) {\n if (entry.subscription) {\n throw new Error('Subscription already exists');\n }\n entry.subscription = entry.model.events$.subscribe(\n (event: ODataModelEvent<T>) => {\n if (\n BUBBLING.indexOf(event.name) !== -1 &&\n event.bubbling &&\n !event.visited(this)\n ) {\n if (event.model === entry.model) {\n if (event.name === 'destroy') {\n this.removeModel(entry.model, { reset: true });\n } else if (event.name === 'change' && event.options?.key) {\n entry.key = entry.model.key();\n }\n }\n\n const index = this.models().indexOf(entry.model);\n event.push(this, index);\n this.events$.emit(event);\n }\n }\n );\n }\n\n private _findEntry({\n model,\n cid,\n key,\n }: {\n model?: ODataModel<T>;\n cid?: string;\n key?: EntityKey<T> | { [name: string]: any };\n } = {}) {\n return this._entries.find((entry) => {\n const byModel = model !== undefined && entry.model.equals(model);\n const byCid =\n cid !== undefined && (<any>entry.model)[this._model.meta.cid] === cid;\n const byKey =\n key !== undefined &&\n entry.key !== undefined &&\n Types.isEqual(entry.key, key);\n return byModel || byCid || byKey;\n });\n }\n\n // Collection functions\n equals(other: ODataCollection<T, ODataModel<T>>) {\n return this === other;\n }\n\n get [Symbol.toStringTag]() {\n return 'Collection';\n }\n\n public [Symbol.iterator]() {\n let pointer = 0;\n let models = this.models();\n return {\n next(): IteratorResult<M> {\n return {\n done: pointer === models.length,\n value: models[pointer++],\n };\n },\n };\n }\n\n filter(predicate: (m: M, index: number) => boolean): M[] {\n return this.models().filter(predicate);\n }\n\n find(predicate: (m: M, index: number) => boolean): M | undefined {\n return this.models().find(predicate);\n }\n\n first(): M | undefined {\n return this.models()[0];\n }\n\n last(): M | undefined {\n const models = this.models();\n return models[models.length - 1];\n }\n\n next(model: M): M | undefined {\n const index = this.indexOf(model);\n if (index === -1 || index === this.length - 1) {\n return undefined;\n }\n return this.get(index + 1);\n }\n\n prev(model: M): M | undefined {\n const index = this.indexOf(model);\n if (index <= 0) {\n return undefined;\n }\n return this.get(index - 1);\n }\n\n every(predicate: (m: M, index: number) => boolean): boolean {\n return this.models().every(predicate);\n }\n\n some(predicate: (m: M, index: number) => boolean): boolean {\n return this.models().some(predicate);\n }\n\n contains(model: M) {\n return this.some((m) => m.equals(model));\n }\n\n indexOf(model: M): number {\n const models = this.models();\n const m = models.find((m) => m.equals(model));\n return m === undefined ? -1 : models.indexOf(m);\n }\n\n //#region Sort\n private _bisect(model: M) {\n let index = -1;\n if (this._sortBy !== null) {\n for (index = 0; index < this._entries.length; index++) {\n if (this._compare(model, this._entries[index], this._sortBy, 0) < 0) {\n return index;\n }\n }\n }\n return index;\n }\n\n private _compare(\n e1: ODataModelEntry<T, M> | M,\n e2: ODataModelEntry<T, M> | M,\n by: { field: string | keyof T; order?: 1 | -1 }[],\n index: number\n ): number {\n let m1 = ODataModelOptions.isModel(e1)\n ? (e1 as M)\n : (e1 as ODataModelEntry<T, M>).model;\n let m2 = ODataModelOptions.isModel(e2)\n ? (e2 as M)\n : (e2 as ODataModelEntry<T, M>).model;\n let value1 = m1.get(by[index].field as string);\n let value2 = m2.get(by[index].field as string);\n let result: number = 0;\n\n if (value1 == null && value2 != null) result = -1;\n else if (value1 != null && value2 == null) result = 1;\n else if (value1 == null && value2 == null) result = 0;\n else if (typeof value1 == 'string' || value1 instanceof String) {\n if (value1.localeCompare && value1 != value2) {\n return (by[index].order || 1) * value1.localeCompare(value2);\n }\n } else {\n result = value1 < value2 ? -1 : 1;\n }\n\n if (value1 == value2) {\n return by.length - 1 > index ? this._compare(e1, e2, by, index + 1) : 0;\n }\n\n return (by[index].order || 1) * result;\n }\n\n _sortBy: { field: string | keyof T; order?: 1 | -1 }[] | null = null;\n isSorted() {\n return this._sortBy !== null;\n }\n\n sort(\n by: { field: string | keyof T; order?: 1 | -1 }[],\n { silent }: { silent?: boolean } = {}\n ) {\n this._sortBy = by;\n this._entries = this._entries.sort(\n (e1: ODataModelEntry<T, M>, e2: ODataModelEntry<T, M>) =>\n this._compare(e1, e2, by, 0)\n );\n if (!silent) {\n this.events$.emit(\n new ODataModelEvent('update', {\n collection: this,\n })\n );\n }\n }\n //#endregion\n}\n","import { EventEmitter } from '@angular/core';\nimport { forkJoin, NEVER, Observable, of, throwError } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\nimport {\n EntityKey,\n ODataEntity,\n ODataEntityAnnotations,\n ODataEntityResource,\n ODataNavigationPropertyResource,\n ODataOptions,\n ODataPropertyResource,\n ODataQueryArgumentsOptions,\n ODataQueryOptionsHandler,\n ODataResource,\n ODataSingletonResource,\n} from '../resources';\nimport { ODataStructuredType } from '../schema';\nimport { Objects, Strings, Types } from '../utils';\nimport { ODataCollection } from './collection';\nimport {\n INCLUDE_DEEP,\n INCLUDE_SHALLOW,\n ModelOptions,\n ODataModelEvent,\n ODataModelField,\n ODataModelOptions,\n ODataModelRelation,\n} from './options';\n\n// @dynamic\nexport class ODataModel<T> {\n // Properties\n static options: ModelOptions;\n static meta: ODataModelOptions<any>;\n static buildMeta<T>({\n options,\n schema,\n }: {\n options?: ModelOptions;\n schema: ODataStructuredType<T>;\n }) {\n if (options === undefined) {\n let fields = schema\n .fields({ include_navigation: true, include_parents: true })\n .reduce((acc, f) => {\n let name = f.name;\n // Prevent collision with reserved keywords\n while (RESERVED_FIELD_NAMES.includes(name)) {\n name = name + '_';\n }\n return Object.assign(acc, {\n [name]: {\n field: f.name,\n default: f.default,\n required: !f.nullable,\n },\n });\n }, {});\n options = { fields };\n }\n this.meta = new ODataModelOptions<T>({ options, schema });\n }\n // Parent\n _parent:\n | [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ]\n | null = null;\n _attributes: { [name: string]: any } = {};\n _changes: { [name: string]: any } = {};\n _relations: { [name: string]: ODataModelRelation<any> } = {};\n _resource: ODataResource<T> | null = null;\n _annotations!: ODataEntityAnnotations;\n _reset: boolean = false;\n _reparent: boolean = false;\n _silent: boolean = false;\n _meta: ODataModelOptions<T>;\n // Events\n events$ = new EventEmitter<ODataModelEvent<T>>();\n\n constructor(\n data: Partial<T> | { [name: string]: any } = {},\n {\n parent,\n resource,\n annots,\n reset = false,\n }: {\n parent?: [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ];\n resource?: ODataResource<T>;\n annots?: ODataEntityAnnotations;\n reset?: boolean;\n } = {}\n ) {\n const Klass = this.constructor as typeof ODataModel;\n if (Klass.meta === undefined)\n throw new Error(`Can't create model without metadata`);\n this._meta = Klass.meta;\n this._meta.bind(this, { parent, resource, annots });\n\n // Client Id\n (<any>this)[this._meta.cid] =\n (<any>data)[this._meta.cid] ||\n Strings.uniqueId(`${Klass.meta.schema.name.toLowerCase()}-`);\n\n let attrs = this.annots().attributes<T>(data, 'full');\n let defaults = this.defaults();\n\n this.assign(Objects.merge(defaults, attrs), { reset });\n }\n\n //#region Resources\n resource():\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T> {\n return ODataModelOptions.resource<T>(this) as\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T>;\n }\n\n navigationProperty<N>(\n name: keyof T | string\n ): ODataNavigationPropertyResource<N> {\n const field = this._meta.field(name);\n if (field === undefined || !field.navigation)\n throw Error(`Can't find navigation property ${name}`);\n\n const resource = this.resource();\n if (!(resource instanceof ODataEntityResource) || !resource.hasKey())\n throw Error(\"Can't get navigation without ODataEntityResource with key\");\n\n return field.resourceFactory<T, N>(\n resource\n ) as ODataNavigationPropertyResource<N>;\n }\n\n property<N>(name: string): ODataPropertyResource<N> {\n const field = this._meta.field(name);\n if (field === undefined || field.navigation)\n throw Error(`Can't find property ${name}`);\n\n const resource = this.resource();\n if (!(resource instanceof ODataEntityResource) || !resource.hasKey())\n throw Error(\"Can't get property without ODataEntityResource with key\");\n\n return field.resourceFactory<T, N>(resource) as ODataPropertyResource<N>;\n }\n\n attach(\n resource:\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T>\n ) {\n return this._meta.attach(this, resource);\n }\n //#endregion\n\n schema() {\n return this._meta.schema;\n }\n\n annots() {\n return this._annotations;\n }\n\n key({\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}):\n | EntityKey<T>\n | { [name: string]: any }\n | undefined {\n return this._meta.resolveKey(this, { field_mapping, resolve });\n }\n\n isNew() {\n return this.key() === undefined;\n }\n\n isParentOf(\n child: ODataModel<any> | ODataCollection<any, ODataModel<any>>\n ): boolean {\n return (\n child !== this &&\n ODataModelOptions.chain(child).some((p) => p[0] === this)\n );\n }\n\n referential(\n field: ODataModelField<any>,\n {\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}\n ): { [name: string]: any } | undefined {\n return this._meta.resolveReferential(this, field, {\n field_mapping,\n resolve,\n });\n }\n\n referenced(\n field: ODataModelField<any>,\n {\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}\n ): { [name: string]: any } | undefined {\n return this._meta.resolveReferenced(this, field, {\n field_mapping,\n resolve,\n });\n }\n\n // Validation\n _errors?: { [key: string]: any };\n validate({\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}) {\n return this._meta.validate(this, { method, navigation });\n }\n\n isValid({\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}): boolean {\n this._errors = this.validate({ method, navigation });\n if (this._errors !== undefined)\n this.events$.emit(\n new ODataModelEvent('invalid', {\n model: this,\n value: this._errors,\n options: { method },\n })\n );\n return this._errors === undefined;\n }\n\n defaults() {\n return this._meta.defaults() || {};\n }\n\n toEntity({\n client_id = false,\n include_navigation = false,\n include_concurrency = false,\n include_computed = false,\n include_key = true,\n include_non_field = false,\n changes_only = false,\n field_mapping = false,\n chain = [],\n }: {\n client_id?: boolean;\n include_navigation?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_key?: boolean;\n include_non_field?: boolean;\n changes_only?: boolean;\n field_mapping?: boolean;\n chain?: (ODataModel<any> | ODataCollection<any, ODataModel<any>>)[];\n } = {}): T | { [name: string]: any } {\n return this._meta.toEntity(this, {\n client_id,\n include_navigation,\n include_concurrency,\n include_computed,\n include_key,\n include_non_field,\n changes_only,\n field_mapping,\n chain,\n });\n }\n\n toJSON() {\n return this.toEntity();\n }\n\n attributes({\n changes_only = false,\n include_concurrency = false,\n include_computed = false,\n include_non_field = false,\n field_mapping = false,\n }: {\n changes_only?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_non_field?: boolean;\n field_mapping?: boolean;\n } = {}): { [name: string]: any } {\n return this._meta.attributes(this, {\n changes_only,\n include_concurrency,\n include_computed,\n include_non_field,\n field_mapping,\n });\n }\n\n set(path: string | string[], value: any) {\n const pathArray = (\n Types.isArray(path) ? path : (path as string).match(/([^[.\\]])+/g)\n ) as any[];\n if (pathArray.length === 0) return undefined;\n if (pathArray.length > 1) {\n const model = (<any>this)[pathArray[0]];\n return model.set(pathArray.slice(1), value);\n }\n if (pathArray.length === 1) {\n return ((<any>this)[pathArray[0]] = value);\n }\n }\n\n get(path: string | string[]): any {\n const pathArray = (\n Types.isArray(path) ? path : (path as string).match(/([^[.\\]])+/g)\n ) as any[];\n if (pathArray.length === 0) return undefined;\n const value = (<any>this)[pathArray[0]];\n if (\n pathArray.length > 1 &&\n (value instanceof ODataModel || value instanceof ODataCollection)\n ) {\n return value.get(pathArray.slice(1));\n }\n return value;\n }\n\n reset({\n path,\n silent = false,\n }: { path?: string | string[]; silent?: boolean } = {}) {\n const pathArray: string[] = (\n path === undefined\n ? []\n : Types.isArray(path)\n ? path\n : (path as string).match(/([^[.\\]])+/g)\n ) as any[];\n const name = pathArray[0];\n const value = name !== undefined ? (<any>this)[name] : undefined;\n if (\n ODataModelOptions.isModel(value) ||\n ODataModelOptions.isCollection(value)\n ) {\n value.reset({ path: pathArray.slice(1), silent });\n } else {\n this._meta.reset(this, { name: pathArray[0], silent });\n }\n }\n\n assign(\n entity: Partial<T> | { [name: string]: any },\n {\n reset = false,\n reparent = false,\n silent = false,\n }: { reset?: boolean; reparent?: boolean; silent?: boolean } = {}\n ) {\n return this._meta.assign(this, entity, { reset, silent, reparent });\n }\n\n clone<M extends ODataModel<T>>() {\n let Ctor = <typeof ODataModel>this.constructor;\n return new Ctor(this.toEntity(INCLUDE_SHALLOW), {\n resource: this.resource() as ODataResource<T>,\n annots: this.annots(),\n }) as M;\n }\n\n private _request(obs$: Observable<ODataEntity<any>>): Observable<this> {\n this.events$.emit(\n new ODataModelEvent('request', {\n model: this,\n options: { observable: obs$ },\n })\n );\n return obs$.pipe(\n map(({ entity, annots }) => {\n this._annotations = annots;\n this.assign(annots.attributes<T>(entity || {}, 'full'), {\n reset: true,\n });\n this.events$.emit(\n new ODataModelEvent('sync', {\n model: this,\n options: { entity, annots },\n })\n );\n return this;\n })\n );\n }\n\n fetch({\n ...options\n }: ODataOptions & {\n options?: ODataOptions;\n } = {}): Observable<this> {\n let resource = this.resource();\n if (resource === undefined)\n return throwError('fetch: Resource is undefined');\n\n let obs$: Observable<ODataEntity<T>>;\n if (resource instanceof ODataEntityResource) {\n if (!resource.hasKey())\n return throwError(\"fetch: Can't fetch model without key\");\n obs$ = resource.fetch(options);\n } else if (resource instanceof ODataNavigationPropertyResource) {\n obs$ = resource.fetch({ responseType: 'entity', ...options });\n } else {\n obs$ = (resource as ODataPropertyResource<T>).fetch({\n responseType: 'entity',\n ...options,\n });\n }\n return this._request(obs$);\n }\n\n save({\n method,\n navigation = false,\n validate = true,\n ...options\n }: ODataOptions & {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n validate?: boolean;\n options?: ODataOptions;\n } = {}): Observable<this> {\n let resource = this.resource();\n if (resource === undefined)\n return throwError('save: Resource is undefined');\n if (\n !(\n resource instanceof ODataEntityResource ||\n resource instanceof ODataNavigationPropertyResource\n )\n )\n return throwError(\n 'save: Resource type ODataEntityResource/ODataNavigationPropertyResource needed'\n );\n\n // Resolve method and resource key\n if (method === undefined && this.schema().isCompoundKey())\n return throwError(\n 'save: Composite key require a specific method, use create/update/modify'\n );\n method = method || (!resource.hasKey() ? 'create' : 'update');\n if (\n resource instanceof ODataEntityResource &&\n (method === 'update' || method === 'modify') &&\n !resource.hasKey()\n )\n return throwError('save: Update/Patch require entity key');\n if (\n resource instanceof ODataNavigationPropertyResource ||\n method === 'create'\n )\n resource.clearKey();\n\n let obs$: Observable<ODataEntity<any>>;\n if (!validate || this.isValid({ method, navigation })) {\n const _entity = this.toEntity({\n changes_only: method === 'modify',\n field_mapping: true,\n include_concurrency: true,\n include_navigation: navigation,\n }) as T;\n obs$ = (\n method === 'create'\n ? resource.create(_entity, options)\n : method === 'modify'\n ? resource.modify(_entity, { etag: this.annots().etag, ...options })\n : resource.update(_entity, { etag: this.annots().etag, ...options })\n ).pipe(\n map(({ entity, annots }) => ({ entity: entity || _entity, annots }))\n );\n } else {\n obs$ = throwError(this._errors);\n }\n return this._request(obs$);\n }\n\n destroy({\n ...options\n }: ODataOptions & {\n options?: ODataOptions;\n } = {}): Observable<this> {\n let resource = this.resource();\n if (resource === undefined)\n return throwError('destroy: Resource is undefined');\n if (\n !(\n resource instanceof ODataEntityResource ||\n resource instanceof ODataNavigationPropertyResource\n )\n )\n return throwError(\n 'destroy: Resource type ODataEntityResource/ODataNavigationPropertyResource needed'\n );\n if (!resource.hasKey())\n return throwError(\"destroy: Can't destroy model without key\");\n\n const _entity = this.toEntity({ field_mapping: true }) as T;\n const obs$ = resource\n .destroy({ etag: this.annots().etag, ...options })\n .pipe(\n map(({ entity, annots }) => ({ entity: entity || _entity, annots }))\n );\n return this._request(obs$).pipe(\n tap(() =>\n this.events$.emit(new ODataModelEvent('destroy', { model: this }))\n )\n );\n }\n\n /**\n * Create an execution context for change the internal query of a resource\n * @param func Function to execute\n */\n query(func: (q: ODataQueryOptionsHandler<T>) => void) {\n return this._meta.query(this, this.resource(), func) as this;\n }\n\n /**\n * Perform a check on the internal state of the model and return true if the model is changed.\n * @param include_navigation Check in navigation properties\n * @returns true if the model has changed, false otherwise\n */\n hasChanged({\n include_navigation = false,\n }: { include_navigation?: boolean } = {}) {\n return this._meta.hasChanged(this, { include_navigation });\n }\n\n /**\n * Create an execution context for a given function, where the model is bound to its entity endpoint\n * @param ctx Context function\n * @returns The result of the context\n */\n asEntity<R>(ctx: (model: this) => R): R {\n return this._meta.asEntity(this, ctx);\n }\n\n callFunction<P, R>(\n name: string,\n params: P | null,\n responseType: 'property' | 'model' | 'collection' | 'none',\n { ...options }: {} & ODataQueryArgumentsOptions<R> = {}\n ): Observable<R | ODataModel<R> | ODataCollection<R, ODataModel<R>> | null> {\n const resource = this.resource();\n if (!(resource instanceof ODataEntityResource) || !resource.hasKey())\n return throwError(\n \"Can't call function without ODataEntityResource with key\"\n );\n\n const func = resource.function<P, R>(name).query((q) => q.apply(options));\n switch (responseType) {\n case 'property':\n return func.callProperty(params, options);\n case 'model':\n return func.callModel(params, options);\n case 'collection':\n return func.callCollection(params, options);\n default:\n return func.call(params, { responseType, ...options });\n }\n }\n\n callAction<P, R>(\n name: string,\n params: P | null,\n responseType: 'property' | 'model' | 'collection' | 'none',\n { ...options }: {} & ODataQueryArgumentsOptions<R> = {}\n ): Observable<R | ODataModel<R> | ODataCollection<R, ODataModel<R>> | null> {\n const resource = this.resource();\n if (!(resource instanceof ODataEntityResource) || !resource.hasKey())\n return throwError(\n \"Can't call action without ODataEntityResource with key\"\n );\n\n const action = resource.action<P, R>(name).query((q) => q.apply(options));\n switch (responseType) {\n case 'property':\n return action.callProperty(params, options);\n case 'model':\n return action.callModel(params, options);\n case 'collection':\n return action.callCollection(params, options);\n default:\n return action.call(params, { responseType, ...options });\n }\n }\n\n // Cast\n cast<S>(type: string): ODataModel<S> {\n const resource = this.resource();\n if (!(resource instanceof ODataEntityResource))\n throw new Error(\n `Can't cast to derived model without ODataEntityResource`\n );\n\n return resource\n .cast<S>(type)\n .asModel(this.toEntity(INCLUDE_DEEP), { annots: this.annots() });\n }\n\n fetchNavigationProperty<S>(\n name: keyof T | string,\n responseType: 'model' | 'collection',\n { ...options }: {} & ODataQueryArgumentsOptions<S> = {}\n ): Observable<ODataModel<S> | ODataCollection<S, ODataModel<S>> | null> {\n const nav = this.navigationProperty<S>(\n name\n ) as ODataNavigationPropertyResource<S>;\n nav.query((q) => q.apply(options));\n switch (responseType) {\n case 'model':\n return nav.fetchModel(options);\n case 'collection':\n return nav.fetchCollection(options);\n }\n }\n\n // Get Value\n getValue<P>(\n name: keyof T | string,\n options?: ODataOptions\n ): Observable<P | ODataModel<P> | ODataCollection<P, ODataModel<P>> | null> {\n const field = this._meta.field(name);\n if (field === undefined || field.navigation)\n throw Error(`Can't find property ${name}`);\n\n let value = (this as any)[name] as\n | P\n | ODataModel<P>\n | ODataCollection<P, ODataModel<P>>;\n if (value === undefined) {\n const prop = field.resourceFactory(\n this.resource()\n ) as ODataPropertyResource<P>;\n return field.collection\n ? prop\n .fetchCollection(options)\n .pipe(tap((c) => this.assign({ [name]: c }, { silent: true })))\n : field.isStructuredType()\n ? prop\n .fetchModel(options)\n .pipe(tap((c) => this.assign({ [name]: c }, { silent: true })))\n : prop\n .fetchProperty(options)\n .pipe(tap((c) => this.assign({ [name]: c }, { silent: true })));\n }\n return of(value as P);\n }\n\n // Set Reference\n setReference<N>(\n name: keyof T | string,\n model: ODataModel<N> | ODataCollection<N, ODataModel<N>> | null,\n options?: ODataOptions\n ): Observable<this> {\n const reference = (\n this.navigationProperty<N>(name) as ODataNavigationPropertyResource<N>\n ).reference();\n\n const etag = this.annots().etag;\n let obs$ = NEVER as Observable<any>;\n if (model instanceof ODataModel) {\n obs$ = reference.set(\n model._meta.entityResource(model) as ODataEntityResource<N>,\n { etag, ...options }\n );\n } else if (model instanceof ODataCollection) {\n obs$ = forkJoin(\n model\n .models()\n .map((m) =>\n reference.add(\n m._meta.entityResource(m) as ODataEntityResource<N>,\n options\n )\n )\n );\n } else if (model === null) {\n obs$ = reference.unset({ etag, ...options });\n }\n this.events$.emit(\n new ODataModelEvent('request', {\n model: this,\n options: { observable: obs$ },\n })\n );\n return obs$.pipe(\n map((model) => {\n this.assign({ [name]: model });\n this.events$.emit(new ODataModelEvent('sync', { model: this }));\n return this;\n })\n );\n }\n\n getReference<P>(\n name: keyof T | string\n ): ODataModel<P> | ODataCollection<P, ODataModel<P>> {\n const field = this._meta.field(name);\n if (field === undefined || !field.navigation)\n throw Error(`Can't find navigation property ${name}`);\n\n let model = (this as any)[name] as\n | ODataModel<P>\n | ODataCollection<P, ODataModel<P>>;\n if (model === undefined) {\n const value = field.collection ? [] : this.referenced(field);\n model = field.modelCollectionFactory<T, P>({ parent: this, value });\n (this as any)[name] = model;\n }\n return model;\n }\n\n // Model functions\n equals(other: ODataModel<T>) {\n const thisKey = this.key();\n const otherKey = other.key();\n return (\n this === other ||\n (typeof this === typeof other &&\n ((<any>this)[this._meta.cid] === (<any>other)[this._meta.cid] ||\n (thisKey !== undefined &&\n otherKey !== undefined &&\n Types.isEqual(thisKey, otherKey))))\n );\n }\n\n get [Symbol.toStringTag]() {\n return 'Model';\n }\n\n collection() {\n return this._parent !== null &&\n ODataModelOptions.isCollection(this._parent[0])\n ? (this._parent[0] as ODataCollection<T, ODataModel<T>>)\n : undefined;\n }\n\n next(): ODataModel<T> | undefined {\n return this.collection()?.next(this);\n }\n\n prev(): ODataModel<T> | undefined {\n return this.collection()?.prev(this);\n }\n}\n\nexport const RESERVED_FIELD_NAMES = Object.getOwnPropertyNames(\n ODataModel.prototype\n);\n","import { HttpEvent, HttpEventType } from '@angular/common/http';\nimport { NEVER, Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\nimport { ODataCache, ODataInMemoryCache } from './cache/index';\nimport { DEFAULT_VERSION } from './constants';\nimport {\n ModelOptions,\n ODataCollection,\n ODataModel,\n ODataModelOptions,\n} from './models/index';\nimport { ODataApiOptions } from './options';\nimport {\n ODataActionResource,\n ODataBatchResource,\n ODataEntityResource,\n ODataEntitySetResource,\n ODataFunctionResource,\n ODataMetadataResource,\n ODataNavigationPropertyResource,\n ODataPathSegments,\n ODataQueryOptions,\n ODataRequest,\n ODataResponse,\n ODataSegment,\n ODataSingletonResource,\n} from './resources/index';\nimport {\n EDM_PARSERS,\n ODataCallable,\n ODataEntitySet,\n ODataEnumType,\n ODataSchema,\n ODataStructuredType,\n} from './schema';\nimport { ODataEntityService } from './services/entity';\nimport {\n ApiConfig,\n ApiOptions,\n NONE_PARSER,\n Parser,\n PathSegmentNames,\n} from './types';\n\n/**\n * Api abstraction for consuming OData services.\n */\nexport class ODataApi {\n requester?: (request: ODataRequest<any>) => Observable<any>;\n serviceRootUrl: string;\n metadataUrl: string;\n name?: string;\n version: string;\n default: boolean;\n creation: Date;\n // Options\n options: ODataApiOptions;\n // Cache\n cache!: ODataCache;\n // Error Handler\n errorHandler?: (error: any, caught: Observable<any>) => Observable<never>;\n // Base Parsers\n parsers: { [type: string]: Parser<any> };\n // Schemas\n schemas: ODataSchema[];\n\n constructor(config: ApiConfig) {\n this.serviceRootUrl = config.serviceRootUrl;\n if (this.serviceRootUrl.indexOf('?') != -1)\n throw new Error(\n \"The 'serviceRootUrl' should not contain query string. Please use 'params' to add extra parameters\"\n );\n if (!this.serviceRootUrl.endsWith('/')) this.serviceRootUrl += '/';\n this.metadataUrl = `${this.serviceRootUrl}$metadata`;\n this.name = config.name;\n this.version = config.version || DEFAULT_VERSION;\n this.default = config.default || false;\n this.creation = config.creation || new Date();\n this.options = new ODataApiOptions(\n Object.assign(<ApiOptions>{ version: this.version }, config.options || {})\n );\n\n this.cache = (config.cache as ODataCache) || new ODataInMemoryCache();\n this.errorHandler = config.errorHandler;\n\n this.parsers = config.parsers || EDM_PARSERS;\n\n this.schemas = (config.schemas || []).map(\n (schema) => new ODataSchema(schema, this)\n );\n }\n\n configure(\n settings: {\n requester?: (request: ODataRequest<any>) => Observable<any>;\n } = {}\n ) {\n this.requester = settings.requester;\n this.schemas.forEach((schema) => {\n schema.configure({\n parserForType: (type: string) => this.parserForType(type),\n findOptionsForType: (type: string) => this.findOptionsForType(type),\n });\n });\n }\n\n fromJSON<P, R>(json: {\n segments: ODataSegment[];\n options: { [name: string]: any };\n }): ODataActionResource<P, R> | ODataFunctionResource<P, R>;\n fromJSON<E>(json: {\n segments: ODataSegment[];\n options: { [name: string]: any };\n }):\n | ODataEntityResource<E>\n | ODataEntitySetResource<E>\n | ODataNavigationPropertyResource<E>\n | ODataSingletonResource<E>;\n fromJSON(json: {\n segments: ODataSegment[];\n options: { [name: string]: any };\n }) {\n const segments = new ODataPathSegments(json.segments);\n const query = new ODataQueryOptions(json.options);\n switch (segments.last()?.name as PathSegmentNames) {\n case PathSegmentNames.entitySet:\n if (segments.last()?.hasKey()) {\n return new ODataEntityResource(this, { segments, query });\n } else {\n return new ODataEntitySetResource(this, { segments, query });\n }\n case PathSegmentNames.navigationProperty:\n return new ODataNavigationPropertyResource(this, { segments, query });\n case PathSegmentNames.singleton:\n return new ODataSingletonResource(this, { segments, query });\n case PathSegmentNames.action:\n return new ODataActionResource(this, { segments, query });\n case PathSegmentNames.function:\n return new ODataFunctionResource(this, { segments, query });\n }\n throw new Error('No Resource for json');\n }\n\n /**\n * Build a metadata resource.\n * @returns ODataMetadataResource\n */\n metadata(): ODataMetadataResource {\n return ODataMetadataResource.factory(this);\n }\n\n /**\n * Build a batch resource.\n * @returns ODataBatchResource\n */\n batch(): ODataBatchResource {\n return ODataBatchResource.factory(this);\n }\n\n /**\n * Build a singleton resource.\n * @param path Name of the singleton\n * @returns\n */\n singleton<T>(path: string) {\n const entitySet = this.findEntitySetByName(path);\n const schema =\n entitySet !== undefined\n ? this.findStructuredTypeForType<T>(entitySet.entityType)\n : undefined;\n return ODataSingletonResource.factory<T>(this, { path, schema });\n }\n\n /**\n * Build an entity set resource.\n * @param path Name of the entity set\n * @returns\n */\n entitySet<T>(path: string): ODataEntitySetResource<T> {\n const entitySet = this.findEntitySetByName(path);\n const schema =\n entitySet !== undefined\n ? this.findStructuredTypeForType<T>(entitySet.entityType)\n : undefined;\n return ODataEntitySetResource.factory<T>(this, { path, schema });\n }\n\n /**\n * Unbound Action\n * @param {string} path?\n * @returns ODataActionResource\n */\n action<P, R>(path: string): ODataActionResource<P, R> {\n const schema = this.findCallableForType<R>(path);\n return ODataActionResource.factory<P, R>(this, { path, schema });\n }\n\n /**\n * Unbound Function\n * @param {string} path?\n * @returns ODataFunctionResource\n */\n function<P, R>(path: string): ODataFunctionResource<P, R> {\n const schema = this.findCallableForType<R>(path);\n return ODataFunctionResource.factory<P, R>(this, { path, schema });\n }\n\n request(req: ODataRequest<any>): Observable<any> {\n let res$ = this.requester !== undefined ? this.requester(req) : NEVER;\n res$ = res$.pipe(\n map((res: HttpEvent<any>) =>\n res.type === HttpEventType.Response\n ? ODataResponse.fromHttpResponse<any>(req, res)\n : res\n )\n );\n\n if (this.errorHandler !== undefined)\n res$ = res$.pipe(catchError(this.errorHandler));\n\n return req.observe === 'response'\n ? this.cache.handleRequest(req, res$)\n : res$;\n }\n\n //# region Find by Type\n // Memoize\n private memo: {\n forType: {\n enum: { [type: string]: ODataEnumType<any> | undefined };\n structured: { [type: string]: ODataStructuredType<any> | undefined };\n callable: { [key: string]: ODataCallable<any> | undefined };\n entitySet: { [type: string]: ODataEntitySet | undefined };\n parser: { [type: string]: Parser<any> };\n options: { [type: string]: ODataModelOptions<any> | undefined };\n };\n byName: {\n enum: { [type: string]: ODataEnumType<any> | undefined };\n structured: { [type: string]: ODataStructuredType<any> | undefined };\n callable: { [key: string]: ODataCallable<any> | undefined };\n entitySet: { [type: string]: ODataEntitySet | undefined };\n };\n } = {\n forType: {\n enum: {},\n structured: {},\n callable: {},\n entitySet: {},\n parser: {},\n options: {},\n },\n byName: { enum: {}, structured: {}, callable: {}, entitySet: {} },\n };\n\n private findSchemaForType(type: string) {\n const schemas = this.schemas.filter((s) => s.isNamespaceOf(type));\n if (schemas.length === 0) return undefined;\n if (schemas.length === 1) return schemas[0];\n return schemas\n .sort((s1, s2) => s1.namespace.length - s2.namespace.length)\n .pop();\n }\n\n public findEnumTypeForType<T>(type: string) {\n if (!(type in this.memo.forType.enum))\n this.memo.forType.enum[type] =\n this.findSchemaForType(type)?.findEnumTypeForType<T>(type);\n return this.memo.forType.enum[type] as ODataEnumType<T> | undefined;\n }\n\n public findStructuredTypeForType<T>(type: string) {\n if (!(type in this.memo.forType.structured))\n this.memo.forType.structured[type] =\n this.findSchemaForType(type)?.findStructuredTypeForType<T>(type);\n return this.memo.forType.structured[type] as\n | ODataStructuredType<T>\n | undefined;\n }\n\n public findCallableForType<T>(type: string, bindingType?: string) {\n const key = bindingType !== undefined ? `${bindingType}/${type}` : type;\n if (!(key in this.memo.forType.callable))\n this.memo.forType.callable[key] = this.findSchemaForType(\n type\n )?.findCallableForType<T>(type, bindingType);\n return this.memo.forType.callable[key] as ODataCallable<T> | undefined;\n }\n\n public findEntitySetForType(type: string) {\n if (!(type in this.memo.forType.entitySet))\n this.memo.forType.entitySet[type] =\n this.findSchemaForType(type)?.findEntitySetForType(type);\n return this.memo.forType.entitySet[type] as ODataEntitySet | undefined;\n }\n\n public findModelForType(type: string) {\n return this.findStructuredTypeForType<any>(type)?.model;\n }\n\n public modelForType(type: string) {\n let Model = this.findModelForType(type);\n if (Model === undefined) {\n // Build Ad-hoc model\n let schema = this.findStructuredTypeForType<any>(type);\n if (schema === undefined) throw Error(`No schema for ${type}`);\n Model = class extends ODataModel<any> {} as typeof ODataModel;\n // Build Meta\n Model.buildMeta({ schema });\n // Configure\n Model.meta.configure({\n findOptionsForType: (type: string) => this.findOptionsForType(type),\n options: this.options,\n });\n // Store New Model for next time\n schema.model = Model;\n }\n return Model;\n }\n\n public findCollectionForType(type: string) {\n return this.findStructuredTypeForType<any>(type)?.collection;\n }\n\n public collectionForType(type: string) {\n let Collection = this.findCollectionForType(type);\n if (Collection === undefined) {\n let schema = this.findStructuredTypeForType<any>(type);\n if (schema === undefined) throw Error('');\n Collection = class extends ODataCollection<\n any,\n ODataModel<any>\n > {} as typeof ODataCollection;\n Collection.model = this.modelForType(type);\n // Store New Collection for next time\n schema.collection = Collection;\n }\n return Collection;\n }\n\n public findServiceForType(type: string) {\n return this.findEntitySetForType(type)?.service as\n | typeof ODataEntityService\n | undefined;\n }\n\n public findEntitySetForEntityType(entityType: string) {\n if (!(entityType in this.memo.forType.entitySet))\n this.memo.forType.entitySet[entityType] = this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.entitySets],\n <ODataEntitySet[]>[]\n )\n .find((e) => e.entityType === entityType);\n return this.memo.forType.entitySet[entityType] as\n | ODataEntitySet\n | undefined;\n }\n\n public findServiceForEntityType(entityType: string) {\n return this.findEntitySetForEntityType(entityType)?.service as\n | typeof ODataEntityService\n | undefined;\n }\n\n public findEnumTypeByName<T>(name: string) {\n if (!(name in this.memo.byName.enum))\n this.memo.byName.enum[name] = this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.enums],\n <ODataEnumType<T>[]>[]\n )\n .find((e) => e.name === name);\n return this.memo.byName.enum[name] as ODataEnumType<T> | undefined;\n }\n\n public findStructuredTypeByName<T>(name: string) {\n if (!(name in this.memo.byName.structured))\n this.memo.byName.structured[name] = this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.entities],\n <ODataStructuredType<T>[]>[]\n )\n .find((e) => e.name === name);\n return this.memo.byName.structured[name] as\n | ODataStructuredType<T>\n | undefined;\n }\n\n public findCallableByName<T>(name: string, bindingType?: string) {\n const key = bindingType !== undefined ? `${bindingType}/${name}` : name;\n if (!(key in this.memo.byName.callable))\n this.memo.byName.callable[key] = this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.callables],\n <ODataCallable<T>[]>[]\n )\n .find(\n (c) =>\n c.name === name &&\n (bindingType === undefined || c.binding()?.type === bindingType)\n );\n return this.memo.byName.callable[key] as ODataCallable<T> | undefined;\n }\n\n public findEntitySetByName(name: string) {\n if (!(name in this.memo.byName.entitySet))\n this.memo.byName.entitySet[name] = this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.entitySets],\n <ODataEntitySet[]>[]\n )\n .find((e) => e.name === name);\n return this.memo.byName.entitySet[name] as ODataEntitySet | undefined;\n }\n\n public findModelByName(name: string) {\n return this.findStructuredTypeByName<any>(name)?.model as\n | typeof ODataModel\n | undefined;\n }\n\n public findCollectionByName(name: string) {\n return this.findStructuredTypeByName<any>(name)?.collection as\n | typeof ODataCollection\n | undefined;\n }\n\n public findServiceByName(name: string) {\n return this.findEntitySetByName(name)?.service as\n | typeof ODataEntityService\n | undefined;\n }\n\n public parserForType<T>(type: string, bindingType?: string) {\n const key = bindingType !== undefined ? `${bindingType}/${type}` : type;\n if (!(key in this.memo.forType.parser)) {\n if (type in this.parsers) {\n // Edm, Base Parsers\n this.memo.forType.parser[key] = this.parsers[type] as Parser<T>;\n } else if (!type.startsWith('Edm.')) {\n // EnumType, ComplexType and EntityType Parsers\n let value =\n this.findCallableForType<T>(type, bindingType) ||\n this.findEnumTypeForType<T>(type) ||\n this.findStructuredTypeForType<T>(type);\n this.memo.forType.parser[key] = value?.parser as Parser<T>;\n } else {\n // None Parser\n this.memo.forType.parser[key] = NONE_PARSER;\n }\n }\n return this.memo.forType.parser[key] as Parser<T>;\n }\n\n public findOptionsForType<T>(type: string) {\n // Strucutred Options\n if (!(type in this.memo.forType.options)) {\n let st = this.findStructuredTypeForType<T>(type);\n this.memo.forType.options[type] =\n st !== undefined && st.model !== undefined && st.model?.meta !== null\n ? st.model.meta\n : undefined;\n }\n return this.memo.forType.options[type] as ODataModelOptions<T> | undefined;\n }\n}\n","import { Observable } from 'rxjs';\nimport { ODataApi } from './api';\nimport { ODataCollection, ODataModel } from './models';\nimport { ODataRequest } from './resources';\nimport {\n ODataCallable,\n ODataEntitySet,\n ODataEnumType,\n ODataStructuredType,\n} from './schema';\nimport { ODataEntityService } from './services/entity';\nimport { ApiConfig, Parser } from './types';\n\nexport class ODataSettings {\n apis: ODataApi[];\n constructor(...configs: ApiConfig[]) {\n this.apis = configs.map((config) => new ODataApi(config));\n if (this.apis.length > 1) {\n if (this.apis.some((c) => c.name === undefined))\n throw new Error('Multiple APIs: Needs configuration names');\n if (this.apis.filter((c) => c.default).length > 1)\n throw new Error('Multiple APIs: Needs only one default api');\n }\n // If not default setup first config as default api\n if (this.apis.every((c) => !c.default)) this.apis[0].default = true;\n }\n\n configure(settings: {\n requester?: (request: ODataRequest<any>) => Observable<any>;\n }) {\n this.apis.forEach((api) => api.configure(settings));\n }\n\n public defaultApi() {\n return this.apis.find((c) => c.default) as ODataApi;\n }\n public findApiByName(name: string) {\n return this.apis.find((c) => c.name === name);\n }\n public apiByName(name: string) {\n const api = this.findApiByName(name);\n if (api === undefined) throw new Error(`No API for name: ${name}`);\n return api;\n }\n public findApiForTypes(types: string[]) {\n return this.apis.find((c) =>\n c.schemas.some((s) => types.some((type) => s.isNamespaceOf(type)))\n );\n }\n public findApiForType(type: string) {\n return this.findApiForTypes([type]);\n }\n public apiForType(type: string) {\n const api = this.findApiForType(type);\n if (api === undefined) throw new Error(`No API for type: ${type}`);\n return api;\n }\n\n //#region Configs shortcuts\n public enumTypeForType<T>(type: string) {\n let values = this.apis\n .map((api) => api.findEnumTypeForType<T>(type))\n .filter((e) => e);\n if (values.length === 0) throw Error(`No Enum for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataEnumType<T>;\n }\n\n public structuredTypeForType<T>(type: string) {\n let values = this.apis\n .map((api) => api.findStructuredTypeForType<T>(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Structured for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataStructuredType<T>;\n }\n\n public callableForType<T>(type: string, bindingType?: string) {\n let values = this.apis\n .map((api) => api.findCallableForType<T>(type, bindingType))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Callable for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataCallable<T>;\n }\n\n public entitySetForType(type: string) {\n let values = this.apis\n .map((api) => api.findEntitySetForType(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No EntitySet for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataEntitySet;\n }\n\n public parserForType<T>(type: string) {\n let values = this.apis\n .map((api) => api.parserForType<T>(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Parser for type ${type} was found`);\n if (!type.startsWith('Edm.') && values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as Parser<T>;\n }\n\n public modelForType(type: string) {\n let values = this.apis\n .map((api) => api.findModelForType(type))\n .filter((e) => e);\n if (values.length === 0) throw Error(`No Model for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataModel;\n }\n\n public collectionForType(type: string) {\n let values = this.apis\n .map((api) => api.findCollectionForType(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Collection for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataCollection;\n }\n\n public serviceForType(type: string) {\n let values = this.apis\n .map((api) => api.findServiceForType(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Service for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataEntityService;\n }\n public serviceForEntityType(type: string) {\n let values = this.apis\n .map((api) => api.findServiceForEntityType(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Service for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataEntityService;\n }\n\n public enumTypeByName<T>(name: string) {\n let values = this.apis\n .map((api) => api.findEnumTypeByName<T>(name))\n .filter((e) => e);\n if (values.length === 0) throw Error(`No Enum for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataEnumType<T>;\n }\n\n public structuredTypeByName<T>(name: string) {\n let values = this.apis\n .map((api) => api.findStructuredTypeByName<T>(name))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Structured for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple Structured: More than one value was found');\n return values[0] as ODataStructuredType<T>;\n }\n\n public callableByName<T>(name: string, bindingType?: string) {\n let values = this.apis\n .map((api) => api.findCallableByName<T>(name, bindingType))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Callable for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple Callable: More than one value was found');\n return values[0] as ODataCallable<T>;\n }\n\n public entitySetByName(name: string) {\n let values = this.apis\n .map((api) => api.findEntitySetByName(name))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No EntitySet for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple EntitySet: More than one value was found');\n return values[0] as ODataEntitySet;\n }\n\n public modelByName(name: string) {\n let values = this.apis\n .map((api) => api.findModelByName(name))\n .filter((e) => e);\n if (values.length === 0) throw Error(`No Model for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataModel;\n }\n\n public collectionByName(name: string) {\n let values = this.apis\n .map((api) => api.findCollectionByName(name))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Collection for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataCollection;\n }\n public serviceByName(name: string) {\n let values = this.apis\n .map((api) => api.findServiceByName(name))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Service for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataEntityService;\n }\n //#endregion\n}\n","import {\n HttpClient,\n HttpEvent,\n HttpHeaders,\n HttpParams,\n HttpResponse,\n} from '@angular/common/http';\nimport { Injectable, Injector } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from './api';\nimport { ODataCollection, ODataModel } from './models/index';\nimport {\n ODataActionResource,\n ODataBatchResource,\n ODataEntityResource,\n ODataEntitySetResource,\n ODataFunctionResource,\n ODataMetadataResource,\n ODataNavigationPropertyResource,\n ODataRequest,\n ODataResource,\n ODataResponse,\n ODataSegment,\n ODataSingletonResource,\n} from './resources/index';\nimport { ODataEntityService } from './services/entity';\nimport { ODataSettings } from './settings';\n\nfunction addBody<T>(\n options: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n },\n body: T | null\n): any {\n return {\n body,\n etag: options.etag,\n apiName: options.apiName,\n fetchPolicy: options.fetchPolicy,\n headers: options.headers,\n observe: options.observe,\n params: options.params,\n reportProgress: options.reportProgress,\n responseType: options.responseType,\n withCredentials: options.withCredentials,\n };\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ODataClient {\n constructor(\n private http: HttpClient,\n private settings: ODataSettings,\n private injector: Injector\n ) {\n this.settings.configure({\n requester: (req: ODataRequest<any>): Observable<any> =>\n this.http.request(req.method, `${req.url}`, {\n body: req.body,\n headers: req.headers,\n observe: req.observe,\n params: req.params,\n reportProgress: req.reportProgress,\n responseType: req.responseType,\n withCredentials: req.withCredentials,\n }),\n });\n }\n\n //#region Resolve Building Blocks\n /**\n * Resolve the api for the given value.\n * Where value is: string type or an string name or an instance of resource.\n * @param value The value to resolve.\n * @returns The api for the value.\n */\n apiFor(value?: ODataResource<any> | string): ODataApi {\n let api: ODataApi | undefined = undefined;\n if (value instanceof ODataResource)\n api = this.settings.findApiForTypes(value.types());\n else if (typeof value === 'string')\n api =\n this.settings.findApiByName(value) ||\n this.settings.findApiForType(value);\n return api || this.settings.defaultApi();\n }\n\n /**\n * Resolve the parser for the given string type.\n * @param type The string type of the parser.\n * @returns The parser for the given type.\n */\n parserForType<T>(type: string) {\n return this.settings.parserForType<T>(type);\n }\n\n /**\n * Resolve the enum type for the given string type.\n * @param type The string type of the enum type.\n * @returns The enum type for the given type.\n */\n enumTypeForType<T>(type: string) {\n return this.settings.enumTypeForType<T>(type);\n }\n\n /**\n * Resolve the structured type for the given string type.\n * @param type The string type of the structured type.\n * @returns The structured type for the given type.\n */\n structuredTypeForType<T>(type: string) {\n return this.settings.structuredTypeForType<T>(type);\n }\n\n /**\n * Resolve the callable for the given string type.\n * @param type The string type of the callable.\n * @returns The callable for the given type.\n */\n callableForType<T>(type: string) {\n return this.settings.callableForType<T>(type);\n }\n\n /**\n * Resolve the entity set for the given string type.\n * @param type The string type of the entity set.\n * @returns The entity set for the given type.\n */\n entitySetForType(type: string) {\n return this.settings.entitySetForType(type);\n }\n\n /**\n * Resolve the model for the given string type.\n * @param type The string type of the model.\n * @returns The model for the given type.\n */\n modelForType(type: string): typeof ODataModel {\n return this.settings.modelForType(type);\n }\n\n /**\n * Resolve the collection for the given string type.\n * @param type The string type of the collection.\n * @returns The collection for the given type.\n */\n collectionForType(type: string): typeof ODataCollection {\n return this.settings.collectionForType(type);\n }\n\n /**\n * Resolve the service for the given string type.\n * @param type The string type of the service.\n * @returns The service for the given type.\n */\n serviceForType(type: string): ODataEntityService<any> {\n return this.injector.get(this.settings.serviceForType(type));\n }\n\n /**\n * Resolve the service for the given string entity type.\n * @param type The string entity type binding to the service.\n * @returns The service for the given entity type.\n */\n serviceForEntityType(type: string): ODataEntityService<any> {\n return this.injector.get(this.settings.serviceForEntityType(type));\n }\n\n enumTypeByName<T>(name: string) {\n return this.settings.enumTypeByName<T>(name);\n }\n structuredTypeByName<T>(name: string) {\n return this.settings.structuredTypeByName<T>(name);\n }\n callableByName<T>(name: string) {\n return this.settings.callableByName<T>(name);\n }\n entitySetByName(name: string) {\n return this.settings.entitySetByName(name);\n }\n modelByName(name: string): typeof ODataModel {\n return this.settings.modelByName(name);\n }\n collectionByName(name: string): typeof ODataCollection {\n return this.settings.collectionByName(name);\n }\n serviceByName(name: string): ODataEntityService<any> {\n return this.injector.get(this.settings.serviceByName(name));\n }\n //#endregion\n\n //#region API Resource Proxy Methods\n fromJSON<E>(\n json: { segments: ODataSegment[]; options: { [name: string]: any } },\n apiNameOrType?: string\n ):\n | ODataEntityResource<E>\n | ODataEntitySetResource<E>\n | ODataNavigationPropertyResource<E>\n | ODataSingletonResource<E>;\n fromJSON(\n json: { segments: ODataSegment[]; options: { [name: string]: any } },\n apiNameOrType?: string\n ) {\n return this.apiFor(apiNameOrType).fromJSON<any>(json);\n }\n\n // Requests\n /**\n * Build a resource for the metadata.\n * @param apiName The name of the API.\n * @returns The metadata resource.\n */\n metadata(apiName?: string): ODataMetadataResource {\n return this.apiFor(apiName).metadata();\n }\n\n /**\n * Build a resource for the batch.\n * @param apiName The name of the API.\n * @returns The batch resource.\n */\n batch(apiName?: string): ODataBatchResource {\n return this.apiFor(apiName).batch();\n }\n\n /**\n * Build a resource for the singleton.\n * @param path The full path to the singleton.\n * @param apiNameOrType The name of the API or the type of the singleton.\n * @returns The singleton resource.\n */\n singleton<T>(path: string, apiNameOrType?: string) {\n return this.apiFor(apiNameOrType).singleton<T>(path);\n }\n\n /**\n * Build a resource for the entity set.\n * @param path The full path to the entity set.\n * @param apiNameOrType The name of the API or the type of the entity set.\n * @returns The entity set resource.\n */\n entitySet<T>(\n path: string,\n apiNameOrType?: string\n ): ODataEntitySetResource<T> {\n return this.apiFor(apiNameOrType).entitySet<T>(path);\n }\n\n /**\n * Build a resource for unbound action.\n * @param path The full path to the action.\n * @param apiNameOrType The name of the API or the type of the entity.\n * @returns The unbound action resource.\n */\n action<P, R>(\n path: string,\n apiNameOrType?: string\n ): ODataActionResource<P, R> {\n return this.apiFor(apiNameOrType).action<P, R>(path);\n }\n\n /**\n * Build a resource for unbound function.\n * @param path The full path to the function.\n * @param apiNameOrType The name of the API or the type of the callable.\n * @returns The unbound function resource.\n */\n function<P, R>(\n path: string,\n apiNameOrType?: string\n ): ODataFunctionResource<P, R> {\n return this.apiFor(apiNameOrType).function<P, R>(path);\n }\n //#endregion\n\n // Request headers, get, post, put, patch... etc\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n params?: HttpParams | { [param: string]: string | string[] };\n observe: 'events';\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n reportProgress?: boolean;\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<any>>;\n\n request<R>(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n reportProgress?: boolean;\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<R>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n reportProgress?: boolean;\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n request<R>(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n reportProgress?: boolean;\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<R>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n reportProgress?: boolean;\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n request<R>(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n reportProgress?: boolean;\n withCredentials?: boolean;\n }\n ): Observable<R>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options?: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n params?: HttpParams | { [param: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n }\n ): Observable<any>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n }\n ): Observable<any> {\n let api = options.apiName\n ? this.settings.apiByName(options.apiName)\n : resource.api;\n if (!api)\n throw new Error(\n `The types: '[${resource\n .types()\n .join(', ')}]' does not belongs to any known configuration`\n );\n\n const request = new ODataRequest({\n method,\n api,\n resource,\n body: options.body,\n observe: options.observe === 'events' ? 'events' : 'response',\n etag: options.etag,\n headers: options.headers,\n reportProgress: options.reportProgress,\n params: options.params,\n responseType: options.responseType,\n fetchPolicy: options.fetchPolicy,\n withCredentials: options.withCredentials,\n });\n\n return api\n .request(request)\n .pipe(\n map((res: any) =>\n options.observe === undefined || options.observe === 'body'\n ? res.body\n : res\n )\n );\n }\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n delete<T>(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n delete<T>(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n delete<T>(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n delete(\n resource: ODataResource<any>,\n options: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('DELETE', resource, addBody<any>(options, null));\n }\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n get<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n get<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n get(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n get<T>(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('GET', resource, options as any);\n }\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n head<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n head<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n head(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n head<T>(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('HEAD', resource, options as any);\n }\n\n jsonp(\n resource: ODataResource<any>,\n callbackParam: string\n ): Observable<Object>;\n\n jsonp<T>(resource: ODataResource<any>, callbackParam: string): Observable<T>;\n\n jsonp<T>(resource: ODataResource<any>, callbackParam: string): Observable<T> {\n return this.request<any>('JSONP', resource, {\n body: null,\n params: new HttpParams().append(callbackParam, 'JSONP_CALLBACK'),\n observe: 'body',\n responseType: 'json',\n });\n }\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n options<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n options<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n options(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n options<T>(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('OPTIONS', resource, options as any);\n }\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n patch<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n patch<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n patch<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('PATCH', resource, addBody(options, body));\n }\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n post<T>(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n post<T>(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n post<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('POST', resource, addBody(options, body));\n }\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n put<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n put<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n put<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('PUT', resource, addBody(options, body));\n }\n}\n","import { ApiConfig } from './types';\nimport { InjectionToken } from '@angular/core';\n\nexport const ODATA_CONFIGURATIONS = new InjectionToken<ApiConfig>(\n 'odata.configuraions'\n);\n","import { Observable } from 'rxjs';\nimport { ODataClient } from '../client';\nimport {\n ODataActionResource,\n ODataEntities,\n ODataEntity,\n ODataFunctionResource,\n ODataNavigationPropertyResource,\n ODataProperty,\n ODataQueryArgumentsOptions,\n} from '../resources';\n\nexport abstract class ODataBaseService {\n constructor(\n protected client: ODataClient,\n protected name: string,\n protected apiNameOrEntityType?: string\n ) {}\n\n get api() {\n return this.client.apiFor(this.apiNameOrEntityType);\n }\n\n protected callFunction<P, R>(\n params: P | null,\n resource: ODataFunctionResource<P, R>,\n responseType: 'entity',\n options?: ODataQueryArgumentsOptions<R>\n ): Observable<ODataEntity<R>>;\n protected callFunction<P, R>(\n params: P | null,\n resource: ODataFunctionResource<P, R>,\n responseType: 'entities',\n options?: ODataQueryArgumentsOptions<R>\n ): Observable<ODataEntities<R>>;\n protected callFunction<P, R>(\n params: P | null,\n resource: ODataFunctionResource<P, R>,\n responseType: 'property',\n options?: ODataQueryArgumentsOptions<R>\n ): Observable<ODataProperty<R>>;\n protected callFunction<P, R>(\n params: P | null,\n resource: ODataFunctionResource<P, R>,\n responseType: 'none',\n options?: ODataQueryArgumentsOptions<R>\n ): Observable<null>;\n protected callFunction<P, R>(\n params: P | null,\n resource: ODataFunctionResource<P, R>,\n responseType: 'property' | 'entity' | 'entities' | 'none',\n options: ODataQueryArgumentsOptions<R> = {}\n ): Observable<any> {\n resource.query((q) => q.apply(options));\n return resource.call(params, {\n responseType: responseType as any,\n ...options,\n });\n }\n\n protected callAction<P, R>(\n params: P | null,\n resource: ODataActionResource<P, R>,\n responseType: 'entity',\n options?: ODataQueryArgumentsOptions<R>\n ): Observable<ODataEntity<R>>;\n protected callAction<P, R>(\n params: P | null,\n resource: ODataActionResource<P, R>,\n responseType: 'entities',\n options?: ODataQueryArgumentsOptions<R>\n ): Observable<ODataEntities<R>>;\n protected callAction<P, R>(\n params: P | null,\n resource: ODataActionResource<P, R>,\n responseType: 'property',\n options?: ODataQueryArgumentsOptions<R>\n ): Observable<ODataProperty<R>>;\n protected callAction<P, R>(\n params: P | null,\n resource: ODataActionResource<P, R>,\n responseType: 'none',\n options?: ODataQueryArgumentsOptions<R>\n ): Observable<null>;\n protected callAction<P, R>(\n params: P | null,\n resource: ODataActionResource<P, R>,\n responseType: 'property' | 'entity' | 'entities' | 'none',\n options: ODataQueryArgumentsOptions<R> = {}\n ): Observable<any> {\n resource.query((q) => q.apply(options));\n return resource.call(params, {\n responseType: responseType as any,\n ...options,\n });\n }\n\n protected fetchNavigationProperty<S>(\n resource: ODataNavigationPropertyResource<S>,\n responseType: 'entity',\n options?: ODataQueryArgumentsOptions<S>\n ): Observable<ODataEntity<S>>;\n protected fetchNavigationProperty<S>(\n resource: ODataNavigationPropertyResource<S>,\n responseType: 'entities',\n options?: ODataQueryArgumentsOptions<S>\n ): Observable<ODataEntities<S>>;\n protected fetchNavigationProperty<S>(\n resource: ODataNavigationPropertyResource<S>,\n responseType: 'entity' | 'entities',\n options: ODataQueryArgumentsOptions<S> = {}\n ): Observable<any> {\n resource.query((q) => q.apply(options));\n return resource.fetch({ responseType: responseType as any, ...options });\n }\n}\n","import { ODataModel } from '../models/model';\nimport { EntityKey, ODataResource } from '../resources';\nimport { ODataBaseService } from './base';\n\nexport abstract class ODataEntityService<T> extends ODataBaseService {\n public abstract entity(key?: EntityKey<T>): ODataResource<T>;\n public abstract attach<M extends ODataModel<T>>(value: M): void;\n\n /**\n * The schema for the structured type.\n */\n get structuredTypeSchema() {\n return this.apiNameOrEntityType !== undefined\n ? this.api.findStructuredTypeForType<T>(this.apiNameOrEntityType)\n : undefined;\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { ODataCollection } from '../models/collection';\nimport { ODataModel } from '../models/model';\nimport {\n EntityKey,\n ODataEntities,\n ODataEntity,\n ODataEntityResource,\n ODataEntitySetResource,\n ODataOptions,\n} from '../resources';\nimport { ODataEntityService } from './entity';\n\nexport class ODataEntitySetService<T> extends ODataEntityService<T> {\n /**\n * Get the entity set resource for this service.\n */\n public entities(): ODataEntitySetResource<T> {\n return this.client.entitySet<T>(this.name, this.apiNameOrEntityType);\n }\n\n /**\n * Get the entity resource for this service.\n * @param key The entity key.\n */\n public entity(key?: EntityKey<T>): ODataEntityResource<T> {\n return this.entities().entity(key);\n }\n\n /**\n * Attach an existing model to this service.\n * @param model The model to attach.\n */\n public attach<M extends ODataModel<T>>(model: M): void;\n public attach<C extends ODataCollection<T, ODataModel<T>>>(model: C): void;\n public attach(model: any): void {\n if (model instanceof ODataModel) {\n model.attach(this.entities().entity());\n } else if (model instanceof ODataCollection) {\n model.attach(this.entities());\n }\n }\n\n /**\n * The schema for the entity set.\n */\n get entitySetSchema() {\n return this.api.findEntitySetByName(this.name);\n }\n\n /**\n * Get all entities from the entity set.\n * @param options The options for the request.\n */\n public fetchAll(options?: ODataOptions): Observable<T[]> {\n return this.entities().fetchAll(options);\n }\n\n /**\n * Get entities from the entity set.\n * @param withCount Get the count of the entities.\n * @param options The options for the request.\n */\n public fetchMany(\n options?: ODataOptions & { withCount?: boolean }\n ): Observable<ODataEntities<T>> {\n return this.entities().fetch(options);\n }\n\n /**\n * Get an entity from the entity set.\n * @param key The entity key.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public fetchOne(\n key: EntityKey<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n return this.entity(key).fetch(options);\n }\n\n /**\n * Create an entity in the entity set.\n * @param attrs The attributes for the entity.\n * @param options The options for the request.\n */\n public create(\n attrs: Partial<T>,\n options?: ODataOptions\n ): Observable<ODataEntity<T>> {\n return this.entities().create(attrs, options);\n }\n\n /**\n * Update an entity in the entity set.\n * @param key The entity key.\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public update(\n key: EntityKey<T>,\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n const res = this.entity(key);\n if (!res.hasKey()) return throwError('Resource without key');\n return res.update(attrs, options);\n }\n\n /**\n * Patch an entity in the entity set.\n * @param key The entity key.\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public modify(\n key: EntityKey<T>,\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n const res = this.entity(key);\n if (!res.hasKey()) return throwError('Resource without key');\n return res.modify(attrs, options);\n }\n\n /**\n * Delete an entity in the entity set.\n * @param key The entity key.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public destroy(\n key: EntityKey<T>,\n options?: ODataOptions & { etag?: string }\n ) {\n const res = this.entity(key);\n if (!res.hasKey()) return throwError('Resource without key');\n return res.destroy(options);\n }\n\n //#region Shortcuts\n /**\n * Get or create an entity in the entity set.\n * @param key The entity key.\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public fetchOrCreate(\n key: EntityKey<T>,\n attrs: Partial<T>,\n { etag, ...options }: { etag?: string } & ODataOptions = {}\n ): Observable<ODataEntity<T>> {\n return this.fetchOne(key, { etag, ...options }).pipe(\n catchError((error: HttpErrorResponse) => {\n if (error.status === 404) return this.create(attrs, options);\n else return throwError(error);\n })\n );\n }\n\n /**\n * Save an entity in the entity set.\n * @param attrs The attributes for the entity.\n * @param method The method to use.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public save(\n attrs: Partial<T>,\n {\n etag,\n method,\n ...options\n }: {\n etag?: string;\n method?: 'create' | 'update' | 'modify';\n } & ODataOptions = {}\n ) {\n let schema = this.structuredTypeSchema;\n if (method === undefined && schema !== undefined && schema.isCompoundKey())\n return throwError(\n 'Composite key require a specific method, use create/update/patch'\n );\n let key = schema && schema.resolveKey(attrs);\n if (method === undefined) method = key !== undefined ? 'update' : 'create';\n if ((method === 'update' || method === 'modify') && key === undefined)\n return throwError(\"Can't update/patch entity without key\");\n return method === 'create'\n ? this.create(attrs, options)\n : method === 'modify'\n ? this.modify(key, attrs, { etag, ...options })\n : this.update(key, attrs, { etag, ...options });\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport type { ODataModel } from '../models/model';\nimport type {\n ODataEntity,\n ODataOptions,\n ODataSingletonResource,\n} from '../resources';\nimport { ODataEntityService } from './entity';\n\n/**\n * OData Singleton Service\n * www.odata.org/getting-started/advanced-tutorial/#singleton\n */\nexport class ODataSingletonService<T> extends ODataEntityService<T> {\n /**\n * Get the entity resource for this service.\n * @param key The entity key.\n */\n public entity(): ODataSingletonResource<T> {\n return this.client.singleton(this.name, this.apiNameOrEntityType);\n }\n\n /**\n * Attach an existing model to this service.\n * @param model The model to attach.\n */\n public attach<M extends ODataModel<T>>(model: M) {\n model.attach(this.entity());\n }\n\n /**\n * The schema for the singleton.\n */\n get singletonSchema() {\n return this.api.findEntitySetByName(this.name);\n }\n\n /**\n * Update the singleton entity\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public update(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n const res = this.entity();\n return res.update(attrs, options);\n }\n\n /**\n * Patch the singleton entity\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public patch(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n const res = this.entity();\n return res.modify(attrs, options);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ODataClient } from '../client';\nimport { ODataEntitySetService } from './entity-set';\nimport { ODataSingletonService } from './singleton';\n\n@Injectable()\nexport class ODataServiceFactory {\n constructor(protected client: ODataClient) {}\n\n /**\n * Factory method to create an entity set service.\n * @param entitySetName Name of the entity set.\n * @param apiNameOrEntityType Name of the API or the type of the entity.\n */\n entitySet<T>(\n entitySetName: string,\n apiNameOrEntityType?: string\n ): ODataEntitySetService<T> {\n return new (class extends ODataEntitySetService<T> {})(\n this.client,\n entitySetName,\n apiNameOrEntityType\n );\n }\n\n /** Factory method to create a singleton service.\n * @param singletonName Name of the singleton.\n * @param apiNameOrEntityType Name of the API or the type of the entity.\n */\n singleton<T>(\n singletonName: string,\n apiNameOrEntityType?: string\n ): ODataSingletonService<T> {\n return new (class extends ODataSingletonService<T> {})(\n this.client,\n singletonName,\n apiNameOrEntityType\n );\n }\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ODataClient } from './client';\nimport { ODataServiceFactory } from './services/index';\nimport { ODataSettings } from './settings';\nimport { ODATA_CONFIGURATIONS } from './tokens';\nimport { ApiConfig } from './types';\n\nexport function createSettings(configs: ApiConfig[]) {\n return new ODataSettings(...configs);\n}\n\n@NgModule({\n imports: [HttpClientModule],\n providers: [ODataClient, ODataServiceFactory],\n})\nexport class ODataModule {\n public static forRoot(\n ...configs: ApiConfig[]\n ): ModuleWithProviders<ODataModule> {\n return {\n ngModule: ODataModule,\n providers: [\n { provide: ODATA_CONFIGURATIONS, useValue: configs },\n {\n provide: ODataSettings,\n useFactory: createSettings,\n deps: [ODATA_CONFIGURATIONS],\n },\n ODataClient,\n ODataServiceFactory,\n ],\n };\n }\n}\n","/*\n * Public API Surface of angular-odata\n */\n\nexport * from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Field"],"mappings":"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"}