{"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/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/schema/parsers/enum-type.ts","../../../projects/angular-odata/src/lib/helper.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/singleton.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/query/expressions/count.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/filter.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/search.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/apply.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/orderby.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/select.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/expand.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/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/resources/resource.ts","../../../projects/angular-odata/src/lib/resources/types/action.ts","../../../projects/angular-odata/src/lib/utils/arrays.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/metadata/csdl/csdl-annotation.ts","../../../projects/angular-odata/src/lib/metadata/csdl/csdl-reference.ts","../../../projects/angular-odata/src/lib/metadata/csdl/csdl-type-definition.ts","../../../projects/angular-odata/src/lib/metadata/csdl/csdl-enum-type.ts","../../../projects/angular-odata/src/lib/metadata/csdl/csdl-structural-property.ts","../../../projects/angular-odata/src/lib/metadata/csdl/csdl-structured-type.ts","../../../projects/angular-odata/src/lib/metadata/csdl/csdl-function-action.ts","../../../projects/angular-odata/src/lib/metadata/csdl/csdl-navigation-property-binding.ts","../../../projects/angular-odata/src/lib/metadata/csdl/csdl-entity-set.ts","../../../projects/angular-odata/src/lib/metadata/csdl/csdl-singleton.ts","../../../projects/angular-odata/src/lib/metadata/csdl/csdl-entity-container.ts","../../../projects/angular-odata/src/lib/metadata/csdl/csdl-schema.ts","../../../projects/angular-odata/src/lib/metadata/metadata.ts","../../../projects/angular-odata/src/lib/metadata/parser.ts","../../../projects/angular-odata/src/lib/resources/types/metadata.ts","../../../projects/angular-odata/src/lib/resources/types/singleton.ts","../../../projects/angular-odata/src/lib/annotations.ts","../../../projects/angular-odata/src/lib/resources/options.ts","../../../projects/angular-odata/src/lib/resources/response.ts","../../../projects/angular-odata/src/lib/cache/storage.ts","../../../projects/angular-odata/src/lib/models/collection.ts","../../../projects/angular-odata/src/lib/models/model.ts","../../../projects/angular-odata/src/lib/models/options.ts","../../../projects/angular-odata/src/lib/options.ts","../../../projects/angular-odata/src/lib/api.ts","../../../projects/angular-odata/src/lib/settings.ts","../../../projects/angular-odata/src/lib/loaders.ts","../../../projects/angular-odata/src/lib/client.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 { Observable } from 'rxjs';\nimport { ODataMetadata } from './metadata';\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 PathSegment {\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 QueryOption {\n  select = 'select',\n  expand = 'expand',\n  compute = 'compute',\n  apply = 'apply',\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  levels = 'levels',\n  count = 'count',\n}\nexport enum EdmType {\n  //Edm.Guid 16-byte (128-bit) unique identifier\n  Guid = 'Edm.Guid',\n  //Edm.Int16 Signed 16-bit integer\n  Int16 = 'Edm.Int16',\n  //Edm.String Sequence of UTF-8 characters\n  String = 'Edm.String',\n  //Edm.Boolean Binary-valued logic\n  Boolean = 'Edm.Boolean',\n  //Edm.Byte Unsigned 8-bit integer\n  Byte = 'Edm.Byte',\n  //Edm.SByte Signed 8-bit integer\n  SByte = 'Edm.SByte',\n  //Edm.Int32 Signed 16-bit integer\n  Int32 = 'Edm.Int32',\n  //Edm.Int64 Signed 16-bit integer\n  Int64 = 'Edm.Int64',\n  //Edm.Date Date without a time-zone offset\n  Date = 'Edm.Date',\n  //Edm.TimeOfDay Clock time 00:00-23:59:59.999999999999\n  TimeOfDay = 'Edm.TimeOfDay',\n  //Edm.DateTimeOffset Date and time with a time-zone offset, no leap seconds\n  DateTimeOffset = 'Edm.DateTimeOffset',\n  //Edm.Duration Signed duration in days, hours, minutes, and (sub)seconds\n  Duration = 'Edm.Duration',\n  //Edm.Decimal Numeric values with fixed precision and scale\n  Decimal = 'Edm.Decimal',\n  //Edm.Double IEEE 754 binary64 floating-point number (15-17 decimal digits)\n  Double = 'Edm.Double',\n  //Edm.Single IEEE 754 binary32 floating-point number (6-9 decimal digits)\n  Single = 'Edm.Single',\n  //Edm.Binary Binary data\n  Binary = 'Edm.Binary',\n  //Edm.Stream Binary data stream\n  Stream = 'Edm.Stream',\n  //Edm.Geography Abstract base type for all Geography types\n  Geography = 'Edm.Geography',\n  //Edm.GeographyPoint A point in a round-earth coordinate system\n  GeographyPoint = 'Edm.GeographyPoint',\n  //Edm.GeographyLineString Line string in a round-earth coordinate system\n  GeographyLineString = 'Edm.GeographyLineString',\n  //Edm.GeographyPolygon Polygon in a round-earth coordinate system\n  GeographyPolygon = 'Edm.GeographyPolygon',\n  //Edm.GeographyMultiPoint Collection of points in a round-earth coordinate system\n  GeographyMultiPoint = 'Edm.GeographyMultiPoint',\n  //Edm.GeographyMultiLineString Collection of line strings in a round-earth coordinate system\n  GeographyMultiLineString = 'Edm.GeographyMultiLineString',\n  //Edm.GeographyMultiPolygon Collection of polygons in a round-earth coordinate system\n  GeographyMultiPolygon = 'Edm.GeographyMultiPolygon',\n  //Edm.GeographyCollection Collection of arbitrary Geography values\n  GeographyCollection = 'Edm.GeographyCollection',\n  //Edm.Geometry Abstract base type for all Geometry types\n  Geometry = 'Edm.Geometry',\n  //Edm.GeometryPoint Point in a flat-earth coordinate system\n  GeometryPoint = 'Edm.GeometryPoint',\n  //Edm.GeometryLineString Line string in a flat-earth coordinate system\n  GeometryLineString = 'Edm.GeometryLineString',\n  //Edm.GeometryPolygon Polygon in a flat-earth coordinate system\n  GeometryPolygon = 'Edm.GeometryPolygon',\n  //Edm.GeometryMultiPoint Collection of points in a flat-earth coordinate system\n  GeometryMultiPoint = 'Edm.GeometryMultiPoint',\n  //Edm.GeometryMultiLineString Collection of line strings in a flat-earth coordinate system\n  GeometryMultiLineString = 'Edm.GeometryMultiLineString',\n  //Edm.GeometryMultiPolygon Collection of polygons in a flat-earth coordinate system\n  GeometryMultiPolygon = 'Edm.GeometryMultiPolygon',\n  //Edm.GeometryCollection Collection of arbitrary Geometry values\n  GeometryCollection = 'Edm.GeometryCollection',\n}\n\nexport enum JsonType {\n  string = 'string',\n  number = 'number',\n  integer = 'integer',\n  object = 'object',\n  array = 'array',\n  boolean = 'boolean',\n  null = 'null',\n}\n\nexport interface ApiOptions {\n  version?: ODataVersion;\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?: QueryOption[];\n  stringAsEnum?: boolean;\n  //https://github.com/OData/WebApi/issues/1974\n  //https://github.com/OData/WebApi/issues/1647\n  deleteRefBy?: 'path' | 'id';\n  //https://github.com/OData/AspNetCoreOData/issues/171\n  nonParenthesisForEmptyParameterFunction?: boolean;\n  jsonBatchFormat?: boolean;\n  relativeUrls?: boolean;\n}\n\nexport interface ParserOptions {\n  version?: ODataVersion;\n  exponentialDecimals?: boolean;\n  metadata?: ODataMetadataType;\n  ieee754Compatible?: boolean;\n  streaming?: boolean;\n  stringAsEnum?: boolean;\n  deleteRefBy?: 'path' | 'id';\n  nonParenthesisForEmptyParameterFunction?: boolean;\n}\n\nexport interface ResponseOptions extends ParserOptions {\n  cacheability?: CacheCacheability;\n  maxAge?: number;\n}\n\nexport interface StructuredTypeFieldOptions extends ParserOptions {\n  field: StructuredTypeFieldConfig;\n}\n\nexport interface Parser<T> {\n  // Deserialize value/s from request body.\n  deserialize(\n    value: any,\n    options?: ParserOptions | StructuredTypeFieldOptions,\n  ): T;\n  // Serialize value/s for request body.\n  serialize(\n    value: any,\n    options?: ParserOptions | StructuredTypeFieldOptions,\n  ): any;\n  //Encode value/s for URL parameter or query-string.\n  encode(value: any, options?: ParserOptions | StructuredTypeFieldOptions): any;\n}\n\nexport interface FieldParser<T> extends Parser<T> {\n  nullable?: boolean;\n  default?: any;\n  maxLength?: number;\n  precision?: number;\n  scale?: number | 'variable';\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  metadataUrl?: 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  references?: ReferenceConfig[];\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 ReferenceConfig = {\n  uri: string;\n  includes?: string;\n  annotations?: AnnotationConfig[];\n  enums?: EnumTypeConfig[];\n  entities?: StructuredTypeConfig[];\n  callables?: CallableConfig[];\n  containers?: EntityContainerConfig[];\n};\nexport type SchemaConfig = {\n  namespace: string;\n  alias?: string;\n  annotations?: AnnotationConfig[];\n  enums?: EnumTypeConfig[];\n  entities?: StructuredTypeConfig[];\n  callables?: CallableConfig[];\n  containers?: EntityContainerConfig[];\n};\n\nexport type EntityContainerConfig = {\n  name: string;\n  annotations?: AnnotationConfig[];\n  entitySets?: EntitySetConfig[];\n  singletons?: SingletonConfig[];\n};\n\nexport type EnumTypeFieldConfig = {\n  value: number;\n  annotations?: AnnotationConfig[];\n};\n\nexport type EnumTypeConfig = {\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 | 'variable';\n  referentials?: { property: string; referencedProperty: string }[];\n  referential?: string;\n  referenced?: string;\n};\n\nexport type StructuredTypeConfig = {\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?: { [name: string]: StructuredTypeFieldConfig };\n};\n\nexport type ParameterConfig = {\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]: ParameterConfig };\n  return?: { type: string; collection?: boolean };\n};\n\nexport type EntitySetConfig = {\n  name: string;\n  entityType: string;\n  service: { new (...params: any[]): any };\n  annotations?: AnnotationConfig[];\n};\n\nexport type SingletonConfig = {\n  name: string;\n  type: 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 HTTP11 = 'HTTP/1.1';\nexport const ACCEPT = 'Accept';\nexport const PREFER = 'Prefer';\nexport const CACHE_CONTROL = 'Cache-Control';\nexport const CACHE_CONTROL_HEADERS = [\n  CACHE_CONTROL,\n  CACHE_CONTROL.toLowerCase(),\n];\nexport const ODATA_VERSION = 'OData-Version';\nexport const ODATA_VERSION_HEADERS = [\n  ODATA_VERSION,\n  ODATA_VERSION.toLowerCase(),\n  'dataserviceversion',\n];\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 ETAG_HEADER = 'ETag';\nexport const ETAG_HEADERS = [ETAG_HEADER, ETAG_HEADER.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 APPLICATION_XHTML = 'application/xhtml+xml';\nexport const APPLICATION_XML = 'application/xml';\nexport const TEXT_PLAIN = 'text/plain';\nexport const CONTENT_TYPE_ANY = '*/*';\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_METADATA = 'minimal';\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';\nexport const EVENT_SPLITTER = /\\s+/;\n\n// Standard vocabularies for annotating OData services\n// https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Core.V1.md\n\nexport const COMPUTED = /.*Computed$/;\nexport const OPTIMISTIC_CONCURRENCY = /.*OptimisticConcurrency$/;\nexport const DESCRIPTION = /.*Description$/;\nexport const LONG_DESCRIPTION = /.*LongDescription$/;\nexport const OPTIONARL_PARAMETER = /.*OptionalParameter$/;\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, PathSegment } from '../types';\n\n/**\n * A cache entry that holds a payload, a last read time, and a timeout for the entry.\n * @param payload The payload to cache.\n * @param lastRead The last read time.\n * @param timeout The timeout.\n * @param tags Some tags to identify the entry.\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  /**\n   * Using the resource on the request build an array of string to identify the scope of the request\n   * @param req The request with the resource to build the scope\n   * @returns Array of string to identify the scope of the request\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 === PathSegment.entitySet)\n          acc = [...acc, s.path() as string];\n        return acc;\n      },\n      ['request'],\n    );\n  }\n\n  /**\n   * Using the odata context on the response build an array of string to identify the tags of the response\n   * @param res The response to build the tags\n   * @returns Array of string to identify the tags of the response\n   */\n  tags(res: ODataResponse<any>): string[] {\n    const tags = [];\n    const context = res.context;\n    if (context.entitySet) {\n      tags.push(\n        context.key\n          ? `${context.entitySet}(${context.key})`\n          : context.entitySet,\n      );\n    }\n    if (context.type) tags.push(context.type);\n    return tags;\n  }\n\n  /**\n   * Build an entry from a payload and some options\n   * @param payload The payload to store in the cache\n   * @param timeout The timeout for the entry\n   * @param tags The tags for the entry\n   * @returns The entry to store in the cache\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  /**\n   * Build a key from store an entry in the cache\n   * @param names The names of the entry\n   * @returns The key for the entry\n   */\n  buildKey(names: string[]): string {\n    return names.join(CACHE_KEY_SEPARATOR);\n  }\n\n  /**\n   * Put some payload in the cache\n   * @param name The name for the entry\n   * @param payload The payload to store in the cache\n   * @param timeout The timeout for the entry\n   * @param scope The scope for the entry\n   * @param tags The tags for the entry\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  /**\n   * Return the payload from the cache if it exists and is not expired\n   * @param name The name of the entry\n   * @param scope The scope of the entry\n   * @returns The payload of the entry\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  /**\n   * Remove all cache entries that are matching with the given options\n   * @param options The options to forget\n   */\n  forget({\n    name,\n    scope = [],\n    tags = [],\n  }: { name?: string; scope?: string[]; tags?: string[] } = {}) {\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  /**\n   * Remove all cache entries\n   */\n  flush() {\n    this.entries = new Map<string, ODataCacheEntry<any>>();\n  }\n\n  /**\n   * Check if the entry is expired\n   * @param entry The cache entry\n   * @returns Boolean indicating if the entry is expired\n   */\n  isExpired(entry: ODataCacheEntry<any>) {\n    return entry.lastRead < Date.now() - (entry.timeout || this.timeout) * 1000;\n  }\n\n  /**\n   * Using the request, handle the fetching of the response\n   * @param req The request to fetch\n   * @param res$ Observable of the response\n   * @returns\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(() => new Error('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 { 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  /**\n   * Store the response in the cache\n   * @param req The request with the resource to store the response\n   * @param res The response to store in the cache\n   */\n  putResponse(req: ODataRequest<any>, res: ODataResponse<any>) {\n    let scope = this.scope(req);\n    let tags = this.tags(res);\n    this.put(req.cacheKey, res, {\n      timeout: res.options.maxAge,\n      scope,\n      tags,\n    });\n  }\n\n  /**\n   * Restore the response from the cache\n   * @param req The request with the resource to get the response\n   * @returns The response from the cache\n   */\n  getResponse(req: ODataRequest<any>): ODataResponse<any> | undefined {\n    let scope = this.scope(req);\n    return this.get(req.cacheKey, { 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 AggregateType =\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> =\n  | keyof T\n  | [keyof T | string, 'asc' | 'desc']\n  | NestedOrderBy<T>;\nexport type NestedOrderBy<T> = {\n  [P in keyof T]?: T[P] extends Array<infer E> ? OrderBy<E> : OrderBy<T[P]>;\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  skip?: number;\n  levels?: number | 'max';\n  count?: boolean | Filter<T>;\n  expand?: Expand<T>;\n};\n\nexport type Transform<T> = {\n  aggregate?: AggregateType | Array<AggregateType>;\n  filter?: Filter<T>;\n  groupBy?: GroupByType<T>;\n};\nexport type GroupByType<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;\n\nexport const isRawType = (value: any) =>\n  isQueryCustomType(value) &&\n  (value as QueryCustomType).type === QueryCustomTypes.Raw;\n\nexport type QueryOptions<T> = ExpandOptions<T> & {\n  search: string;\n  apply: string;\n  transform: { [name: string]: any } | { [name: string]: any }[];\n  compute: string;\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  compute,\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    compute,\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  apply,\n  transform,\n  compute,\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  // Select\n  if (select) {\n    query.$select = isRawType(select)\n      ? (select as unknown as QueryCustomType).value\n      : Array.isArray(select)\n        ? select.join(',')\n        : select;\n  }\n\n  // Compute\n  if (compute) {\n    query.$compute = isRawType(compute)\n      ? (compute as unknown as QueryCustomType).value\n      : Array.isArray(compute)\n        ? compute.join(',')\n        : compute;\n  }\n\n  // Search\n  if (search) {\n    query.$search = search;\n  }\n\n  // Skiptoken\n  if (skiptoken) {\n    query.$skiptoken = skiptoken;\n  }\n\n  // Format\n  if (format) {\n    query.$format = format;\n  }\n\n  // Filter\n  if (filter || typeof count === 'object') {\n    query.$filter = buildFilter(typeof count === 'object' ? count : filter, {\n      aliases,\n      escape,\n    });\n  }\n\n  // Transform\n  if (transform) {\n    query.$apply = buildTransforms(transform, { aliases, escape });\n  }\n\n  // Apply\n  if (apply) {\n    query.$apply = query.$apply\n      ? query.$apply + '/' + buildApply(apply, { aliases, escape })\n      : buildApply(apply, { aliases, escape });\n  }\n\n  // Expand\n  if (expand) {\n    query.$expand = buildExpand(expand, { aliases, escape });\n  }\n\n  // OrderBy\n  if (orderBy) {\n    query.$orderby = buildOrderBy(orderBy);\n  }\n\n  // Count\n  if (isRawType(count)) {\n    query.$count = (count as QueryCustomType).value;\n  } else if (typeof count === 'boolean') {\n    query.$count = true;\n  } else if (count) {\n    path += '/$count';\n  }\n\n  // Top\n  if (isRawType(top)) {\n    query.$top = (top as unknown as QueryCustomType).value;\n  } else if (typeof top === 'number') {\n    query.$top = top;\n  }\n\n  // Skip\n  if (isRawType(skip)) {\n    query.$top = (skip as unknown as QueryCustomType).value;\n  } else 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}(${funcArgs})`;\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 (isRawType(filter)) {\n      // Use raw query custom filter string\n      filterExpr = (filter as QueryCustomType).value;\n    } else 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  {\n    aliases,\n    escape = false,\n  }: { 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  {\n    aliases,\n    escape = false,\n  }: { aliases?: QueryCustomType[]; escape?: boolean },\n): string {\n  if (isRawType(expands)) {\n    return (expands as QueryCustomType).value;\n  } else 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            case 'skip':\n              value = `${(expands as NestedExpandOptions<any>)[key]}`;\n              if (isRawType(value))\n                value = (value as unknown as QueryCustomType).value;\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  {\n    aliases,\n    escape = false,\n  }: { 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: AggregateType | AggregateType[]) {\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: GroupByType<T>,\n  {\n    aliases,\n    escape = false,\n  }: { 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 (isRawType(orderBy)) {\n    return (orderBy as QueryCustomType).value;\n  } else 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 as string}`)\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 as string}`;\n}\n\nfunction buildApply(\n  apply: any,\n  {\n    aliases,\n    escape = false,\n  }: { aliases?: QueryCustomType[]; escape?: boolean },\n) {\n  const applyArray = Array.isArray(apply) ? apply : [apply];\n  return applyArray\n    .map((v) => normalizeValue(v, { aliases, escape }))\n    .join('/');\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 extends { [name: string]: any }>(enums: E): string[] {\n    return Object.values<string>(enums).filter((v) => typeof v === 'string');\n  },\n\n  values<E extends { [name: string]: any }>(enums: E): number[] {\n    return Object.values<number>(enums).filter((v) => typeof v === 'number');\n  },\n\n  toValue<E extends { [name: string]: any }>(\n    enums: E,\n    value: any,\n  ): number | undefined {\n    if (value in enums) return typeof value === 'string' ? enums[value] : value;\n    return undefined;\n  },\n\n  toValues<E extends { [name: string]: any }>(enums: E, value: any): number[] {\n    if (typeof value === 'number') {\n      return this.values(enums).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 enums)) {\n      return value.map((o) => this.toValue(enums, o) as number);\n    }\n    return [];\n  },\n\n  toName<E extends { [name: string]: any }>(\n    enums: E,\n    value: any,\n  ): string | undefined {\n    if (value in enums) return typeof value === 'number' ? enums[value] : value;\n    return undefined;\n  },\n\n  toNames<E extends { [name: string]: any }>(enums: E, value: any): string[] {\n    if (typeof value === 'number') {\n      return this.values(enums)\n        .filter((v) => (value & v) === v)\n        .map((v) => this.toName(enums, v) as string);\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 enums)) {\n      return value.map((o) => this.toName(enums, o) as string);\n    }\n    return [];\n  },\n\n  toFlags<E extends { [name: string]: any }>(enums: E, value: any): string[] {\n    if (typeof value === 'number') {\n      return this.values(enums)\n        .filter((v) => v !== 0 && (value & v) === v)\n        .map((v) => this.toName(enums, v) as string);\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 enums)) {\n      return value\n        .filter((v) => enums[v])\n        .map((v) => this.toName(enums, v) 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) {\n    return typeof value === 'object' && value !== null;\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  isMap(value: any): boolean {\n    return this.rawType(value) === 'Map';\n  },\n\n  isEmpty(value: any): boolean {\n    return (\n      value === undefined ||\n      value === null ||\n      (typeof value === 'string' && !value.length) ||\n      (value instanceof Date && isNaN(value.valueOf())) ||\n      (Types.isMap(value) && !value.size) ||\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.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: (\n      | HttpParams\n      | {\n          [param: string]:\n            | string\n            | number\n            | boolean\n            | ReadonlyArray<string | number | boolean>;\n        }\n    )[]\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(line: string): {\n    status: string;\n    code: number;\n    message: string;\n  } {\n    const chunks = line.split(' ');\n    return {\n      status: chunks[0],\n      code: parseInt(chunks[1], 10),\n      message: chunks.slice(2).join(' '),\n    };\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: { [attr: string]: any }, 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: { [attr: string]: any }, 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: { [attr: string]: any }, 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: { [attr: string]: any }, 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: { [attr: string]: any }, source: { [attr: string]: any }) {\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    const type = Types.rawType(key);\n    if (['number', 'string'].indexOf(type) !== -1) return key;\n    if (type !== 'Map' && type !== 'Object') {\n      return undefined;\n    }\n    const values =\n      type === 'Map' ? Array.from(key.values()) : Object.values(key);\n    if (values.length === 1 && single) {\n      // Single primitive key value\n      key = values[0];\n      return !Types.isEmpty(key) ? key : undefined;\n    } else if (values.some((v) => v === undefined)) {\n      // Compose key, needs all values\n      return undefined;\n    } else {\n      const obj = type === 'Map' ? Object.fromEntries(key) : key;\n      return !Types.isEmpty(obj) ? obj : undefined;\n    }\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    if ('clone' in target) {\n      // target is a cloneable object\n      return target.clone();\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({\n    prefix,\n    suffix,\n  }: { 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.substring(0, index)]: param.substring(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 { Parser, ParserOptions } from '../../../types';\nimport { Types } from '../../../utils';\nimport { 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    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  }): string;\n\n  abstract clone(): Expression<T>;\n\n  children() {\n    return this._children;\n  }\n\n  length() {\n    return this._children.length;\n  }\n\n  toJson() {\n    return {\n      $type: Types.rawType(this),\n      children: this._children.map((c) => c.toJson()),\n    };\n  }\n  resolve(parser: any) {\n    return parser;\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, Parser } 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(element: ODataSchemaElement): boolean {\n    const names = [`${this.schema.namespace}.${this.name}`];\n    if (this.schema.alias) names.push(`${this.schema.alias}.${this.name}`);\n    return names.includes(element.type());\n  }\n\n  /**\n   * Returns a boolean indicating if the structured type is a subtype 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(element: ODataSchemaElement): boolean {\n    if (this.isTypeOf(element)) return true;\n    return false;\n  }\n\n  /**\n   * Returns a boolean indicating if the structured type is a supertype 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  isSupertypeOf(element: ODataSchemaElement): boolean {\n    if (this.isTypeOf(element)) return true;\n    return false;\n  }\n}\n\nexport class ODataParserSchemaElement<\n  E,\n  P extends Parser<E>,\n> extends ODataSchemaElement {\n  parser: P;\n  constructor(\n    config: { annotations?: AnnotationConfig[]; name: string },\n    schema: ODataSchema,\n    parser: P,\n  ) {\n    super(config, schema);\n    this.parser = parser;\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, isRawType } from '../../resources/query';\nimport { EdmType, FieldParser, 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): FieldParser<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) => (!isRawType(v) ? _e(v, options) : v))\n      : !isRawType(value)\n        ? _e(value, options)\n        : value;\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]: FieldParser<any> } = {\n  //Edm.Guid 16-byte (128-bit) unique identifier\n  [EdmType.Guid]: EdmParser<string>(Identity, Identity, (v: string) => raw(v)),\n  //Edm.Int16 Signed 16-bit integer\n  [EdmType.Int16]: EdmParser<number>(toNumber, toNumber, toNumber),\n  //Edm.String Sequence of UTF-8 characters\n  [EdmType.String]: EdmParser<string>(toString, toString, toString),\n  //Edm.Boolean Binary-valued logic\n  [EdmType.Boolean]: EdmParser<boolean>(toBoolean, toBoolean, toBoolean),\n  //Edm.Byte Unsigned 8-bit integer\n  [EdmType.Byte]: EdmParser<number>(toNumber, toNumber, toNumber),\n  //Edm.SByte Signed 8-bit integer\n  [EdmType.SByte]: EdmParser<number>(toNumber, toNumber, toNumber),\n  //Edm.Int32 Signed 16-bit integer\n  [EdmType.Int32]: EdmParser<number>(toNumber, toNumber, toNumber),\n  //Edm.Int64 Signed 16-bit integer\n  [EdmType.Int64]: EdmParser<number>(toNumber, toNumber, toNumber),\n  //Edm.Date Date without a time-zone offset\n  [EdmType.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) => raw(toDate(v).toISOString().substring(0, 10)),\n  ),\n  //Edm.TimeOfDay Clock time 00:00-23:59:59.999999999999\n  [EdmType.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) => raw(toDate(v).toISOString().substring(11, 23)),\n  ),\n  //Edm.DateTimeOffset Date and time with a time-zone offset, no leap seconds\n  [EdmType.DateTimeOffset]: EdmParser<Date>(\n    toDate,\n    (v: any) => toDate(v).toISOString(),\n    (v: any) => raw(toDate(v).toISOString()),\n  ),\n  //Edm.Duration Signed duration in days, hours, minutes, and (sub)seconds\n  [EdmType.Duration]: EdmParser<Duration>(\n    (v: any) => Durations.toDuration(v),\n    (v: Duration) => Durations.toString(v),\n    (v: Duration) => raw(Durations.toString(v)),\n  ),\n  //Edm.Decimal Numeric values with fixed precision and scale\n  [EdmType.Decimal]: EdmParser<number>(\n    toNumber,\n    (v: number, o: StructuredTypeFieldOptions) => {\n      if (o.ieee754Compatible) {\n        let vstr = v.toPrecision(o.field.precision);\n        if (typeof o.field.scale === 'number') {\n          vstr = parseFloat(vstr).toFixed(o.field.scale);\n        }\n        return vstr;\n      }\n      return v;\n    },\n    (v: number, o: StructuredTypeFieldOptions) => {\n      if (o.ieee754Compatible) {\n        let vstr = v.toPrecision(o.field.precision);\n        if (typeof o.field.scale === 'number') {\n          vstr = parseFloat(vstr).toFixed(o.field.scale);\n        }\n        return raw(vstr);\n      }\n      return v;\n    },\n  ),\n  //Edm.Double IEEE 754 binary64 floating-point number (15-17 decimal digits)\n  [EdmType.Double]: EdmParser<number>(\n    (v: any) => (v === 'INF' ? Infinity : (v as number)),\n    (v: number) => (v === Infinity ? 'INF' : v),\n    (v: number) => raw(v === Infinity ? 'INF' : v.toString()),\n  ),\n  //Edm.Single IEEE 754 binary32 floating-point number (6-9 decimal digits)\n  [EdmType.Single]: EdmParser<number>(\n    (v: any) => (v === 'INF' ? Infinity : (v as number)),\n    (v: number) => (v === Infinity ? 'INF' : v),\n    (v: number) => raw(v === Infinity ? 'INF' : v.toString()),\n  ),\n  //Edm.Binary Binary data\n  [EdmType.Binary]: EdmParser<ArrayBuffer>(\n    (v: string) => ArrayBuffers.toArrayBuffer(v),\n    (v: ArrayBuffer) => ArrayBuffers.toString(v),\n    (v: ArrayBuffer) => raw(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 { raw } from '../../resources/query';\nimport {\n  EnumTypeConfig,\n  EnumTypeFieldConfig,\n  ParserOptions,\n  FieldParser,\n  JsonType,\n} from '../../types';\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<E>\n  extends ODataAnnotatable\n  implements FieldParser<E>\n{\n  name: string;\n  namespace: string;\n  alias?: string;\n  flags?: boolean;\n  members: { [name: string]: number } | { [value: number]: string };\n  private _fields: ODataEnumTypeFieldParser[];\n  parserOptions?: ParserOptions;\n\n  constructor(config: EnumTypeConfig, 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  configure({ options }: { options: ParserOptions }) {\n    this.parserOptions = 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  fields(namesValue?: string | number | number[]): ODataEnumTypeFieldParser[] {\n    if (namesValue === undefined) return [...this._fields];\n    if (Array.isArray(namesValue))\n      return [...this._fields.filter((f) => namesValue.includes(f.value))];\n    if (typeof namesValue === 'number') {\n      return [\n        ...this._fields.filter(\n          (f) =>\n            (this.flags && Boolean((<any>f.value) & (<any>namesValue))) ||\n            f.value === namesValue,\n        ),\n      ];\n    }\n    if (typeof namesValue === 'string') {\n      const names = namesValue.split(',').map((o) => o.trim());\n      return this._fields.filter((f) => names.includes(f.name));\n    }\n    return [];\n  }\n\n  field(nameValue: string | number) {\n    const field = this.fields().find(\n      (f) => f.name === nameValue || f.value === nameValue,\n    );\n    //Throw error if not found\n    //if (field === undefined)\n    //  throw new Error(`${this.name} has no field for ${nameValue}`);\n    return field;\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<R>(mapper: (field: ODataEnumTypeFieldParser) => R) {\n    return this.fields().map(mapper);\n  }\n\n  // Deserialize\n  deserialize(value: string, options?: ParserOptions): E {\n    // string -> number\n    const parserOptions = { ...this.parserOptions, ...options };\n    if (this.flags) {\n      return this.fields(value).reduce((acc, f) => acc | f.value, 0) as E;\n    } else {\n      return this.field(value)?.value as E;\n    }\n  }\n\n  // Serialize\n  serialize(value: number, options?: ParserOptions): string | undefined {\n    // Enum are string | number\n    // string | number -> string\n    const parserOptions = { ...this.parserOptions, ...options };\n    if (this.flags) {\n      let names = this.fields(value).map((f) => f.name);\n      if (names.length === 0) names = [`${value}`];\n      return !parserOptions?.stringAsEnum\n        ? `${this.namespace}.${this.name}'${names.join(', ')}'`\n        : names.join(', ');\n    } else {\n      let name = this.field(value)?.name;\n      if (name === undefined) name = `${value}`;\n      return !parserOptions?.stringAsEnum\n        ? `${this.namespace}.${this.name}'${name}'`\n        : name;\n    }\n  }\n\n  //Encode\n  encode(value: number, options?: ParserOptions): any {\n    const parserOptions = { ...this.parserOptions, ...options };\n    const serialized = this.serialize(value, parserOptions);\n    if (serialized === undefined) return undefined;\n    return parserOptions?.stringAsEnum\n      ? raw(`'${serialized}'`)\n      : raw(serialized);\n  }\n\n  // Json Schema\n  toJsonSchema() {\n    return this.flags\n      ? {\n          title: this.name,\n          type: JsonType.array,\n          items: {\n            type: JsonType.integer,\n          },\n        }\n      : {\n          type: JsonType.integer,\n          enum: this._fields.map((f) => f.value),\n        };\n  }\n\n  validate(\n    value: 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 fields = this.fields(value);\n      return value && fields.length === 0 ? ['mismatch'] : undefined;\n    } else {\n      return this.fields(value).length !== 1 ? ['mismatch'] : undefined;\n    }\n  }\n\n  unpack(value: string | number): number[] {\n    return this.fields(value).map((f) => f.value);\n  }\n\n  pack(value: string | number | number[]): number {\n    return this.fields(value).reduce((acc, v) => acc | v.value, 0) as any;\n  }\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_TYPE: string;\n  ODATA_COUNT: string;\n  ODATA_ETAG: string;\n  ODATA_CONTEXT: string;\n  ODATA_MEDIA_ETAG: string;\n  ODATA_NEXTLINK: string;\n  ODATA_DEFERRED: string;\n  ODATA_ANNOTATION: string;\n\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 }): Map<string, any>;\n  attributes(value: { [name: string]: any }, metadata: ODataMetadataType): any;\n\n  context(annots: Map<string, any> | { [name: string]: any }): ODataContext;\n  id(annots: Map<string, any> | { [name: string]: any }): string | undefined;\n  etag(annots: Map<string, any> | { [name: string]: any }): string | undefined;\n  type(annots: Map<string, any> | { [name: string]: any }): string | undefined;\n  count(annots: Map<string, any>): number | undefined;\n  functions(annots: Map<string, any>): Map<string, any>;\n  properties<T>(annots: Map<string, any>): Map<keyof T, Map<string, any>>;\n  mediaEtag(annots: Map<string, any>): string | undefined;\n  metadataEtag(annots: Map<string, any>): string | undefined;\n  nextLink(annots: Map<string, any>): string | undefined;\n  readLink(annots: Map<string, any>): string | undefined;\n  mediaReadLink(annots: Map<string, any>): string | undefined;\n  editLink(annots: Map<string, any>): string | undefined;\n  mediaEditLink(annots: Map<string, any>): string | undefined;\n  mediaContentType(annots: Map<string, any>): string | undefined;\n  deltaLink(annots: Map<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(annots: Map<string, any>) {\n    const funcs = new Map<string, any>();\n    [...annots.keys()]\n      .filter((key) => key.startsWith(this.ODATA_FUNCTION_PREFIX))\n      .forEach((key) =>\n        funcs.set(\n          key.substring(this.ODATA_FUNCTION_PREFIX.length),\n          annots.get(key),\n        ),\n      );\n    return funcs;\n  },\n  properties(annots: Map<string, any>) {\n    const props = new Map<string, Map<string, any>>();\n    [...annots.keys()]\n      .filter((key) => key.indexOf(this.ODATA_ANNOTATION_PREFIX) > 0)\n      .forEach((key) => {\n        let name = key.substring(0, key.indexOf(this.ODATA_ANNOTATION_PREFIX));\n        let prop = props.has(name) ? props.get(name)! : new Map<string, any>();\n        prop.set(\n          key.substring(key.indexOf(this.ODATA_ANNOTATION_PREFIX)),\n          annots.get(key),\n        );\n        props.set(name, prop);\n      });\n    return props;\n  },\n  id(annots: Map<string, any> | { [name: string]: any }) {\n    return annots instanceof Map\n      ? annots.get(this.ODATA_ID)\n      : annots[this.ODATA_ID];\n  },\n  etag(annots: Map<string, any> | { [name: string]: any }) {\n    return annots instanceof Map\n      ? annots.get(this.ODATA_ETAG)\n      : annots[this.ODATA_ETAG];\n  },\n  type(annots: Map<string, any> | { [name: string]: any }) {\n    let type =\n      annots instanceof Map\n        ? annots.get(this.ODATA_TYPE)\n        : annots[this.ODATA_TYPE];\n    if (!type) return undefined;\n    type = type.substring(1);\n    const matches = COLLECTION.exec(type);\n    if (matches)\n      return matches[1].indexOf('.') === -1 ? `Edm.${matches[1]}` : matches[1];\n    return type;\n  },\n  mediaEtag(annots: Map<string, any>) {\n    return annots.has(this.ODATA_MEDIA_ETAG)\n      ? decodeURIComponent(annots.get(this.ODATA_MEDIA_ETAG) as string)\n      : undefined;\n  },\n  metadataEtag(annots: Map<string, any>) {\n    return annots.has(this.ODATA_METADATA_ETAG)\n      ? decodeURIComponent(annots.get(this.ODATA_METADATA_ETAG) as string)\n      : undefined;\n  },\n  count(annots: Map<string, any>) {\n    return annots.has(this.ODATA_COUNT)\n      ? Number(annots.get(this.ODATA_COUNT))\n      : undefined;\n  },\n  annotations(value: { [name: string]: any }) {\n    const annots = new Map<string, any>();\n    Object.entries(value)\n      .filter(\n        ([key]) =>\n          key.indexOf(this.ODATA_ANNOTATION_PREFIX) !== -1 ||\n          key.startsWith(this.ODATA_FUNCTION_PREFIX),\n      )\n      .forEach(([key, value]) => annots.set(key, value));\n    return annots;\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(annots: Map<string, any>) {\n    return annots.has(this.ODATA_NEXTLINK)\n      ? decodeURIComponent(annots.get(this.ODATA_NEXTLINK) as string)\n      : undefined;\n  },\n  readLink(annots: Map<string, any>) {\n    return annots.has(this.ODATA_READLINK)\n      ? decodeURIComponent(annots.get(this.ODATA_READLINK) as string)\n      : undefined;\n  },\n  mediaReadLink(annots: Map<string, any>) {\n    return annots.has(this.ODATA_MEDIA_READLINK)\n      ? decodeURIComponent(annots.get(this.ODATA_MEDIA_READLINK) as string)\n      : undefined;\n  },\n  editLink(annots: Map<string, any>) {\n    return annots.has(this.ODATA_EDITLINK)\n      ? decodeURIComponent(annots.get(this.ODATA_EDITLINK) as string)\n      : undefined;\n  },\n  mediaEditLink(annots: Map<string, any>) {\n    return annots.has(this.ODATA_MEDIA_EDITLINK)\n      ? decodeURIComponent(annots.get(this.ODATA_MEDIA_EDITLINK) as string)\n      : undefined;\n  },\n  deltaLink(annots: Map<string, any>) {\n    return annots.has(this.ODATA_DELTALINK)\n      ? decodeURIComponent(annots.get(this.ODATA_DELTALINK) as string)\n      : undefined;\n  },\n  mediaContentType(annots: Map<string, any>) {\n    return annots.has(this.ODATA_MEDIA_CONTENTTYPE)\n      ? decodeURIComponent(annots.get(this.ODATA_MEDIA_CONTENTTYPE) as string)\n      : undefined;\n  },\n};\n\nexport const ODataHelper = {\n  //#region Version 4.0\n  [VERSION_4_0]: <ODataVersionHelper>{\n    ...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.delta\n    ODATA_DELTA: '@odata.delta',\n    //odata.remove\n    ODATA_REMOVE: '@odata.remove',\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(annots: Map<string, any> | { [name: string]: any }) {\n      let ctx: ODataContext = {};\n      const str =\n        annots instanceof Map\n          ? annots.get(this.ODATA_CONTEXT)\n          : annots[this.ODATA_CONTEXT];\n      if (typeof str === 'string') {\n        let index = str.indexOf('$metadata');\n        ctx.serviceRootUrl = str.substring(0, index);\n        index = str.indexOf('#');\n        ctx.metadataUrl = str.substring(0, index);\n        const parts = str.substring(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>{\n    ...ODataVersionBaseHelper,\n    ODATA_ANNOTATION_PREFIX: 'odata.',\n    ODATA_FUNCTION_PREFIX: '',\n    ODATA_ID: 'odata.id',\n    ODATA_DELTA: 'odata.delta',\n    ODATA_REMOVE: 'odata.remove',\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(annots: Map<string, any> | { [name: string]: any }) {\n      let ctx: ODataContext = {};\n      const str =\n        annots instanceof Map\n          ? annots.get(this.ODATA_CONTEXT)\n          : annots[this.ODATA_CONTEXT];\n      if (typeof str === 'string') {\n        let index = str.indexOf('$metadata');\n        ctx.serviceRootUrl = str.substring(0, index);\n        index = str.indexOf('#');\n        ctx.metadataUrl = str.substring(0, index);\n        const parts = str.substring(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>{\n    ...ODataVersionBaseHelper,\n    ODATA_ID: 'id',\n    ODATA_DELTA: 'delta',\n    ODATA_REMOVE: 'remove',\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      const annots = new Map<string, any>();\n      if (this.ODATA_ANNOTATION in value) {\n        Object.entries(value[this.ODATA_ANNOTATION]).forEach(([key, value]) =>\n          annots.set(key, value),\n        );\n      }\n      return annots;\n    },\n    context(annots: Map<string, any> | { [name: string]: any }) {\n      let ctx: ODataContext = {};\n      return ctx;\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  COMPUTED,\n  DEFAULT_VERSION,\n  DESCRIPTION,\n  LONG_DESCRIPTION,\n} from '../../constants';\nimport { ODataHelper } from '../../helper';\nimport { raw } from '../../resources/query';\nimport {\n  NONE_PARSER,\n  ParserOptions,\n  Parser,\n  StructuredTypeConfig,\n  StructuredTypeFieldConfig,\n  StructuredTypeFieldOptions,\n  FieldParser,\n  EdmType,\n  JsonType as JsonSchemaType,\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 FieldParser<T>\n{\n  name: string;\n  private structured: ODataStructuredTypeParser<any>;\n  type: string | EdmType;\n  private parser: Parser<T>;\n  collection: boolean;\n  navigation: boolean;\n  nullable?: boolean;\n  default?: any;\n  maxLength?: number;\n  precision?: number;\n  scale?: number | 'variable';\n  referentials: ODataReferential[];\n  parserOptions?: ParserOptions;\n\n  constructor(\n    name: string,\n    structured: ODataStructuredTypeParser<any>,\n    field: StructuredTypeFieldConfig,\n  ) {\n    super(field);\n    this.name = name;\n    this.structured = structured;\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 ?? 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.structuredType().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.enumType().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?: ParserOptions,\n  ): any {\n    const type =\n      options !== undefined && Types.isPlainObject(value)\n        ? ODataHelper[options?.version || DEFAULT_VERSION].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?: ParserOptions): T {\n    const parserOptions = { ...this.parserOptions, ...options };\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?: ParserOptions,\n  ): any {\n    const type =\n      options !== undefined && Types.isPlainObject(value)\n        ? ODataHelper[options?.version || DEFAULT_VERSION].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?: ParserOptions): any {\n    const parserOptions = { ...this.parserOptions, ...options };\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?: ParserOptions): string {\n    const parserOptions = { ...this.parserOptions, ...options };\n    return this.parser.encode(value, {\n      field: this,\n      ...parserOptions,\n    } as StructuredTypeFieldOptions);\n  }\n  //#endregion\n\n  configure({\n    options,\n    parserForType,\n  }: {\n    options: ParserOptions;\n    parserForType: (type: string) => Parser<any>;\n  }) {\n    this.parserOptions = 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: JsonSchemaType.object } as any);\n\n    switch (this.type) {\n      case EdmType.String:\n        schema.type = JsonSchemaType.string;\n        break;\n      case EdmType.Guid:\n        schema.type = JsonSchemaType.string;\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        break;\n      case EdmType.Binary:\n        schema.type = JsonSchemaType.string;\n        schema.contentEncoding = 'base64';\n        break;\n      case EdmType.Date:\n        schema.type = JsonSchemaType.string;\n        schema.format = 'date';\n        break;\n      case EdmType.TimeOfDay:\n        schema.type = JsonSchemaType.string;\n        schema.format = 'time';\n        break;\n      case EdmType.DateTimeOffset:\n        schema.type = JsonSchemaType.string;\n        schema.format = 'date-time';\n        break;\n      case EdmType.Duration:\n        schema.type = JsonSchemaType.string;\n        schema.format = 'duration';\n        break;\n      case EdmType.Byte:\n      case EdmType.SByte:\n      case EdmType.Int16:\n      case EdmType.Int32:\n      case EdmType.Int64:\n        //TODO: Range\n        schema.type = JsonSchemaType.integer;\n        break;\n      case EdmType.Single:\n      case EdmType.Double:\n      case EdmType.Decimal:\n        schema.type = JsonSchemaType.number;\n        break;\n      case EdmType.Boolean:\n        schema.type = JsonSchemaType.boolean;\n        break;\n    }\n    if (this.maxLength) schema.maxLength = this.maxLength;\n    if (this.default) schema.default = this.default;\n    if (this.nullable) schema.type = [schema.type, JsonSchemaType.null];\n    if (this.collection)\n      schema = {\n        type: JsonSchemaType.array,\n        items: schema,\n        additionalItems: false,\n      };\n    return schema;\n  }\n  //#endregion\n\n  isKey() {\n    return this.structured\n      .keys({ include_parents: true })\n      .some((k) => k.name === this.name);\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  enumType() {\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  structuredType() {\n    if (!this.isStructuredType())\n      throw new Error('Field are not StrucuturedType');\n    return this.parser as ODataStructuredTypeParser<T>;\n  }\n\n  field<F>(name: string) {\n    if (this.isStructuredType())\n      return (this.parser as ODataStructuredTypeParser<T>).field<F>(\n        name as keyof T,\n      );\n    throw new Error(\n      `The field ${this.name} is not related to a StructuredType`,\n    );\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  private _keys?: ODataEntityTypeKey[];\n  private _fields: ODataStructuredTypeFieldParser<any>[] = [];\n  parserOptions?: ParserOptions;\n\n  constructor(config: StructuredTypeConfig, namespace: string, alias?: string) {\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    Object.entries<StructuredTypeFieldConfig>(\n      (config.fields ?? {}) as { [P in keyof T]: StructuredTypeFieldConfig },\n    ).forEach(([name, config]) => this.addField(name, config));\n  }\n\n  addField<F>(\n    name: string,\n    config: StructuredTypeFieldConfig,\n  ): ODataStructuredTypeFieldParser<F> {\n    const field = new ODataStructuredTypeFieldParser<F>(name, this, config);\n    this._fields.push(field);\n    return field;\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  isSupertypeOf(type: string): boolean {\n    return (\n      this.isTypeOf(type) || this.children.some((c) => c.isSupertypeOf(type))\n    );\n  }\n\n  isOpenType() {\n    return this.open;\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?: ParserOptions): T {\n    const parserOptions = { ...this.parserOptions, ...options };\n    const fields = this.fields({\n      include_navigation: true,\n      include_parents: true,\n    }).filter(\n      (f) =>\n        f.name in value &&\n        value[f.name] !== undefined &&\n        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: Partial<T>, options?: ParserOptions): any {\n    const parserOptions = { ...this.parserOptions, ...options };\n    const fields = this.fields({\n      include_navigation: true,\n      include_parents: true,\n    }).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?: ParserOptions): any {\n    const parserOptions = { ...this.parserOptions, ...options };\n    return raw(JSON.stringify(this.serialize(value, parserOptions)));\n  }\n\n  configure({\n    options,\n    parserForType,\n  }: {\n    options: ParserOptions;\n    parserForType: (type: string) => Parser<any>;\n  }) {\n    this.parserOptions = 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({ options, parserForType }));\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._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,\n  }: {\n    include_parents: boolean;\n  }): ODataEntityTypeKey[] {\n    return [\n      ...(include_parents && this.parent !== undefined\n        ? this.parent.keys({ include_parents })\n        : []),\n      ...(this._keys || []),\n    ];\n  }\n\n  isEntityType(): boolean {\n    return (\n      this._keys !== undefined ||\n      (this.parent !== undefined && this.parent.isEntityType())\n    );\n  }\n\n  isComplexType(): boolean {\n    return !this.isEntityType();\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  field<F>(name: keyof T): ODataStructuredTypeFieldParser<F> {\n    let field = this.fields({\n      include_parents: true,\n      include_navigation: true,\n    }).find((field: ODataStructuredTypeFieldParser<F>) => field.name === name);\n    //Throw error if not found\n    if (field === undefined)\n      throw new Error(`${this.name} has no field named ${String(name)}`);\n    return field;\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_id = true,\n      include_key = true,\n      include_parents = true,\n      include_navigation = false,\n      include_computed = false,\n      include_etag = true,\n      options,\n    }: {\n      include_id?: boolean;\n      include_key?: boolean;\n      include_parents?: boolean;\n      include_navigation?: boolean;\n      include_computed?: boolean;\n      include_etag?: boolean;\n      options?: ParserOptions;\n    } = {},\n  ): Partial<T> {\n    const parserOptions = options ?? this.parserOptions;\n    let fields = this.fields({ include_parents, include_navigation });\n    if (!include_key) {\n      fields = fields.filter((f) => !f.isKey());\n    }\n    if (!include_computed) {\n      fields = fields.filter(\n        (f) =>\n          !f.annotatedValue<boolean>(COMPUTED) || (f.isKey() && include_key),\n      );\n    }\n    return Object.keys(attrs)\n      .filter(\n        (key) =>\n          fields.some((f) => f.name === key) ||\n          (key ==\n            ODataHelper[parserOptions?.version || DEFAULT_VERSION].ODATA_ETAG &&\n            include_etag) ||\n          (key ==\n            ODataHelper[parserOptions?.version || DEFAULT_VERSION].ODATA_ID &&\n            include_id),\n      )\n      .reduce((acc, key) => Object.assign(acc, { [key]: attrs[key] }), {});\n  }\n\n  resolveKey(\n    value: any,\n    {\n      resolve = true,\n      single = true,\n    }: { resolve?: boolean; single?: boolean } = {},\n  ): any {\n    const keyTypes = this.keys({ include_parents: true });\n    const key = new Map<string, any>();\n    for (var kt of keyTypes) {\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 kt.name.split('/')) {\n        if (structured === undefined) break;\n        field = structured\n          .fields({ include_navigation: false, include_parents: true })\n          .find((f: ODataStructuredTypeFieldParser<any>) => f.name === name);\n        if (field !== undefined) {\n          v = Types.isPlainObject(v) ? v[field.name] : v;\n          structured = field.isStructuredType()\n            ? field.structuredType()\n            : undefined;\n        }\n      }\n      if (field !== undefined && v !== undefined) {\n        key.set(kt.alias || field.name, field.encode(v));\n      }\n    }\n    if (key.size === 0) return undefined;\n    return resolve\n      ? Objects.resolveKey(key, { single })\n      : Object.fromEntries(key);\n  }\n\n  defaults(): { [name: string]: any } {\n    let fields = this.fields({\n      include_navigation: false,\n      include_parents: true,\n    }).filter((f) => f.default !== undefined || f.isStructuredType());\n    return {\n      ...fields.reduce((acc, f) => {\n        let value: any = f.isStructuredType()\n          ? f.structuredType().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 = {\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: JsonSchemaType.object,\n      properties: {},\n      required: [],\n    };\n    const fields = this.fields({\n      include_navigation: true,\n      include_parents: true,\n    }).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 = {} as { [name: string]: any };\n    const fields = this.fields({\n      include_navigation: true,\n      include_parents: true,\n    }).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 {\n  CallableConfig,\n  NONE_PARSER,\n  ParserOptions,\n  ParameterConfig,\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  parserOptions?: ParserOptions;\n\n  constructor(name: string, parameter: ParameterConfig) {\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?: ParserOptions): any {\n    const parserOptions = { ...this.parserOptions, ...options };\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?: ParserOptions): string {\n    const parserOptions = { ...this.parserOptions, ...options };\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    options,\n    parserForType,\n  }: {\n    options: ParserOptions;\n    parserForType: (type: string) => Parser<any>;\n  }) {\n    this.parserOptions = 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  enumType() {\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  structuredType() {\n    if (!this.isStructuredType())\n      throw new Error('Field are not StrucuturedType');\n    return this.parser as ODataStructuredTypeParser<T>;\n  }\n\n  field<F>(name: string) {\n    if (this.isStructuredType())\n      return (this.parser as ODataStructuredTypeParser<T>).field<F>(\n        name as keyof T,\n      );\n    throw new Error(\n      `The field ${this.name} is not related to a StructuredType`,\n    );\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  parserOptions?: ParserOptions;\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 ParameterConfig),\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?: ParserOptions): R {\n    const parserOptions = { ...this.parserOptions, ...options };\n    return this.parser.deserialize(value, parserOptions);\n  }\n\n  // Serialize\n  serialize(params: any, options?: ParserOptions): any {\n    const parserOptions = { ...this.parserOptions, ...options };\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?: ParserOptions): any {\n    const parserOptions = { ...this.parserOptions, ...options };\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    options,\n    parserForType,\n  }: {\n    options: ParserOptions;\n    parserForType: (type: string) => Parser<any>;\n  }) {\n    this.parserOptions = options;\n    if (this.return)\n      this.parser = parserForType(this.return.type) ?? NONE_PARSER;\n    this.parameters.forEach((p) => p.configure({ options, parserForType }));\n  }\n\n  binding() {\n    return this.parameters.find((p) => p.name === CALLABLE_BINDING_PARAMETER);\n  }\n\n  returnType() {\n    return this.return?.type;\n  }\n}\n","import { CallableConfig, ParserOptions } from '../types';\nimport { ODataParserSchemaElement } from './element';\nimport { ODataCallableParser } from './parsers';\nimport { ODataSchema } from './schema';\n\nexport class ODataCallable<R> extends ODataParserSchemaElement<\n  R,\n  ODataCallableParser<R>\n> {\n  entitySetPath?: string;\n  bound?: boolean;\n  composable?: boolean;\n\n  constructor(config: CallableConfig, schema: ODataSchema) {\n    super(\n      config,\n      schema,\n      new ODataCallableParser(config, schema.namespace, schema.alias),\n    );\n    this.entitySetPath = config.entitySetPath;\n    this.bound = config.bound;\n    this.composable = config.composable;\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.findEntitySet(this.parser.return.type)?.name || this.name\n        : this.name;\n    return path;\n  }\n\n  configure({ options }: { options: ParserOptions }) {\n    this.parser.configure({\n      options,\n      parserForType: (t: string) => this.api.parserForType(t),\n    });\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?: ParserOptions): 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?: ParserOptions): 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?: ParserOptions): 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  returnType() {\n    return this.parser.returnType();\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 { SingletonConfig } from '../types';\nimport { ODataSchemaElement } from './element';\nimport { ODataSchema } from './schema';\n\nexport class ODataSingleton extends ODataSchemaElement {\n  singletonType: string;\n  service: { new (...params: any[]): any };\n  constructor(config: SingletonConfig, schema: ODataSchema) {\n    super(config, schema);\n    this.singletonType = config.type;\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';\nimport { ODataSingleton } from './singleton';\n\nexport class ODataEntityContainer extends ODataSchemaElement {\n  entitySets: ODataEntitySet[];\n  singletons: ODataSingleton[];\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    this.singletons = (config.singletons ?? []).map(\n      (config) => new ODataSingleton(config, schema),\n    );\n  }\n}\n","import { EnumTypeConfig, ParserOptions } from '../types';\nimport { ODataParserSchemaElement } from './element';\nimport { ODataEnumTypeFieldParser, ODataEnumTypeParser } from './parsers';\nimport { ODataSchema } from './schema';\n\nexport class ODataEnumType<E> extends ODataParserSchemaElement<\n  E,\n  ODataEnumTypeParser<E>\n> {\n  members: { [name: string]: number } | { [value: number]: string };\n  constructor(config: EnumTypeConfig, schema: ODataSchema) {\n    super(\n      config,\n      schema,\n      new ODataEnumTypeParser<E>(config, schema.namespace, schema.alias),\n    );\n    this.members = config.members;\n  }\n\n  configure({ options }: { options: ParserOptions }) {\n    this.parser.configure({ options });\n  }\n\n  /**\n   * Returns the fields of the enum type.\n   * @returns The fields of the enum type.\n   */\n  fields(namesValue?: string | number): ODataEnumTypeFieldParser[] {\n    return this.parser.fields(namesValue);\n  }\n\n  /**\n   * Find a field by name or value.\n   * @param enu The name or value of the field\n   * @returns The field with the given name or value\n   */\n  field(nameValue: string | number) {\n    return this.parser.field(nameValue);\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.parser.mapFields(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?: ParserOptions): 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: number, options?: ParserOptions): 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: number, options?: ParserOptions): any {\n    return this.parser.encode(value, options);\n  }\n\n  unpack(value: string | number) {\n    return this.parser.unpack(value);\n  }\n\n  pack(value: string | number | number[]) {\n    return this.parser.pack(value);\n  }\n}\n","import { ODataCollection } from '../models/collection';\nimport { ODataModel } from '../models/model';\nimport {\n  ParserOptions,\n  StructuredTypeConfig,\n  StructuredTypeFieldConfig,\n} from '../types';\nimport { ODataParserSchemaElement } from './element';\nimport {\n  JsonSchemaOptions,\n  ODataEntityTypeKey,\n  ODataStructuredTypeFieldParser,\n  ODataStructuredTypeParser,\n} from './parsers';\nimport { ODataSchema } from './schema';\n\nexport class ODataStructuredType<T> extends ODataParserSchemaElement<\n  T,\n  ODataStructuredTypeParser<T>\n> {\n  base?: string;\n  parent?: ODataStructuredType<any>;\n  children: ODataStructuredType<any>[] = [];\n  model?: typeof ODataModel;\n  collection?: typeof ODataCollection;\n\n  constructor(config: StructuredTypeConfig, schema: ODataSchema) {\n    super(\n      config,\n      schema,\n      new ODataStructuredTypeParser(config, schema.namespace, schema.alias),\n    );\n    this.base = config.base;\n    this.model = config.model as typeof ODataModel;\n    this.collection = config.collection as typeof ODataCollection;\n  }\n\n  configure({ options }: { options: ParserOptions }) {\n    if (this.base) {\n      const parent = this.api.findStructuredType(\n        this.base,\n      ) as ODataStructuredType<any>;\n      parent.children.push(this);\n      this.parent = parent;\n    }\n    this.parser.configure({\n      options,\n      parserForType: (t: string) => this.api.parserForType(t),\n    });\n    if (this.model !== undefined) {\n      this.model.meta = this.api.optionsForType<T>(this.type(), {\n        config: this.model.options,\n        structuredType: this,\n      })!;\n      if (this.model.meta !== undefined) {\n        // Configure\n        this.model.meta.configure({ options });\n      }\n      if (this.collection !== undefined) {\n        this.collection.model = this.model;\n      }\n    }\n  }\n\n  /**\n   * Returns a boolean indicating if the structured type is a subtype 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 is a supertype 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 isSupertypeOf(schema: ODataStructuredType<any>): boolean {\n    return (\n      super.isSupertypeOf(schema) ||\n      this.children.some((c) => c.isSupertypeOf(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  isOpenType() {\n    return this.parser.isOpenType();\n  }\n\n  isEntityType() {\n    return this.parser.isEntityType();\n  }\n\n  isComplexType() {\n    return this.parser.isComplexType();\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  field<F>(name: keyof T) {\n    return this.parser.field<F>(name);\n  }\n\n  addField<F>(\n    name: string,\n    config: StructuredTypeFieldConfig,\n  ): ODataStructuredTypeFieldParser<F> {\n    return this.parser.addField(name, config);\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  findChildSchema(\n    predicate: (p: ODataStructuredType<any>) => boolean,\n  ): ODataStructuredType<any> | undefined {\n    if (predicate(this)) return this;\n    let match: ODataStructuredType<any> | undefined;\n    for (let ch of this.children) {\n      match = ch.findChildSchema(predicate);\n      if (match !== undefined) break;\n    }\n    return match;\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  findParentSchemaForField<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   * 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_id = true,\n      include_key = true,\n      include_parents = true,\n      include_navigation = false,\n      include_computed = false,\n      include_etag = true,\n    }: {\n      include_id?: boolean;\n      include_key?: boolean;\n      include_parents?: boolean;\n      include_navigation?: boolean;\n      include_computed?: boolean;\n      include_etag?: boolean;\n    } = {},\n  ): Partial<T> {\n    return this.parser.pick(attrs, {\n      include_id,\n      include_key,\n      include_etag,\n      include_navigation,\n      include_computed,\n      include_parents,\n      options: this.api.options,\n    });\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?: ParserOptions): 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?: ParserOptions): 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?: ParserOptions): any {\n    return this.parser.encode(value, options);\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 this.parser.fields({ include_navigation, include_parents });\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 this.parser.keys({ include_parents });\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 { ParserOptions, SchemaConfig, StructuredTypeConfig } 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 { ODataSingleton } from './singleton';\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  get singletons() {\n    return this.containers.reduce(\n      (acc, container) => [...acc, ...container.singletons],\n      [] as ODataSingleton[],\n    );\n  }\n\n  //#region Find for Type\n  public createStructuredType<T>(config: StructuredTypeConfig) {\n    const entity = new ODataStructuredType<T>(config, this);\n    entity.configure({ options: this.api.options.parserOptions });\n    this.entities.push(entity);\n    return entity;\n  }\n  //#endregion\n\n  configure({ options }: { options: ParserOptions }) {\n    // Configure Enums\n    this.enums.forEach((enu) => enu.configure({ options }));\n    // Configure Entities\n    this.entities.forEach((structured) => structured.configure({ options }));\n    // Configure callables\n    this.callables.forEach((callable) => callable.configure({ options }));\n  }\n}\n","import { Parser, ParserOptions, QueryOption } from '../../../types';\nimport { Objects, Types } from '../../../utils';\nimport { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport { FilterExpression, FilterExpressionBuilder } from './filter';\nimport {\n  render,\n  FieldFactory,\n  Renderable,\n  RenderableFactory,\n  resolve,\n} from './syntax';\n\nexport class CountField<T> implements Renderable {\n  constructor(\n    protected field: any,\n    private values: { [name: string]: any } = {},\n  ) {}\n\n  get [Symbol.toStringTag]() {\n    return 'CountField';\n  }\n\n  toJson() {\n    return {\n      field: this.field.toJson(),\n    };\n  }\n\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  }): string {\n    const params: { [name: string]: string } = [\n      QueryOption.filter,\n      QueryOption.search,\n    ]\n      .filter((key) => !Types.isEmpty(this.values[key]))\n      .reduce((acc, key) => {\n        let value: any = this.values[key];\n        if (Types.rawType(value).endsWith('Expression')) {\n          value = (value as Expression<T>).render({\n            aliases,\n            prefix,\n            escape,\n            parser: resolve([this.field], parser),\n            options,\n          });\n        }\n        return Object.assign(acc, { [key]: value });\n      }, {});\n    let count = `${render(this.field, {\n      aliases,\n      escape,\n      prefix,\n      parser,\n      options,\n    })}/$count`;\n    if (!Types.isEmpty(params)) {\n      count = `${count}(${Object.keys(params)\n        .map((key) => `$${key}=${params[key]}`)\n        .join(';')})`;\n    }\n    return count;\n  }\n\n  filter(\n    opts: (\n      builder: FilterExpressionBuilder<T>,\n      current?: FilterExpression<T>,\n    ) => FilterExpression<T>,\n  ) {\n    return this.option(\n      QueryOption.filter,\n      FilterExpression.factory<T>(opts, this.values[QueryOption.filter]),\n    );\n  }\n\n  clone() {\n    const values = Object.keys(this.values).reduce(\n      (acc, key) =>\n        Object.assign(acc, { [key]: Objects.clone(this.values[key]) }),\n      {},\n    );\n    return new CountField<T>(this.field.clone(), values);\n  }\n\n  resolve(parser: any) {\n    return this.field.resolve(parser);\n  }\n\n  // Option Handler\n  private option<O>(name: QueryOption, opts?: O) {\n    if (opts !== undefined) this.values[name] = opts;\n    return this.values[name];\n  }\n}\n\nexport type CountExpressionBuilder<T> = {\n  t: Required<T>;\n  e: () => CountExpression<T>;\n};\nexport class CountExpression<T> extends Expression<T> {\n  constructor({\n    children,\n  }: {\n    children?: Renderable[];\n  } = {}) {\n    super({ children });\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'CountExpression';\n  }\n\n  static factory<T>(\n    opts: (\n      builder: CountExpressionBuilder<T>,\n      current?: CountExpression<T>,\n    ) => CountExpression<T>,\n    current?: CountExpression<T>,\n  ): CountExpression<T> {\n    return opts(\n      {\n        t: FieldFactory<Required<T>>(),\n        e: () => new CountExpression<T>(),\n      },\n      current,\n    ) as CountExpression<T>;\n  }\n\n  private _add(node: Renderable): CountExpression<any> {\n    this._children.push(node);\n    return this;\n  }\n\n  override toJson() {\n    const json = super.toJson();\n    return Object.assign(json, {});\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): CountExpression<T> {\n    return new CountExpression<T>({\n      children: json['children'].map((c: any) => RenderableFactory(c)),\n    });\n  }\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  } = {}): string {\n    let content = this._children\n      .map((n) => n.render({ aliases, escape, prefix, parser, options }))\n      .join(`,`);\n    return content;\n  }\n\n  clone() {\n    return new CountExpression<T>({\n      children: this._children.map((c) => c.clone()),\n    });\n  }\n\n  field<F>(\n    field: F[],\n    opts?: (e: { t: F; f: CountField<F> }) => CountExpression<F>,\n  ): CountExpression<F> {\n    let countField = new CountField<F>(field);\n    if (opts !== undefined)\n      opts({\n        t: FieldFactory<Required<F>>(),\n        f: countField,\n      });\n    return this._add(countField);\n  }\n}\n","import { Parser, ParserOptions } from '../../../types';\nimport { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport { CountExpression, CountField } from './count';\nimport {\n  FieldFactory,\n  functions,\n  Normalize,\n  ODataFunctions,\n  ODataOperators,\n  operators,\n  Renderable,\n  RenderableFactory,\n  syntax,\n} from './syntax';\n\nexport type FilterConnector = 'and' | 'or';\n\nexport type FilterExpressionBuilder<T> = {\n  t: Required<T>;\n  e: (connector?: FilterConnector) => FilterExpression<T>;\n  o: ODataOperators<T>;\n  f: ODataFunctions<T>;\n};\nexport class FilterExpression<F> extends Expression<F> {\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  get [Symbol.toStringTag]() {\n    return 'FilterExpression';\n  }\n\n  static factory<T>(\n    opts: (\n      builder: FilterExpressionBuilder<T>,\n      current?: FilterExpression<T>,\n    ) => FilterExpression<T>,\n    current?: FilterExpression<T>,\n  ): FilterExpression<T> {\n    return opts(\n      {\n        e: (connector: FilterConnector = 'and') =>\n          new FilterExpression<T>({ connector }),\n        t: FieldFactory<Required<T>>(),\n        o: operators as ODataOperators<T>,\n        f: functions as ODataFunctions<T>,\n      },\n      current,\n    ) as FilterExpression<T>;\n  }\n\n  override toJson() {\n    const json = super.toJson();\n    return Object.assign(json, {\n      connector: this._connector,\n      negated: this._negated,\n    });\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): FilterExpression<T> {\n    return new FilterExpression<T>({\n      children: json['children'].map((c: any) => RenderableFactory(c)),\n      connector: json['connector'],\n      negated: json['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    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<any>;\n    options?: ParserOptions;\n  } = {}): string {\n    let content = this._children\n      .map((n) => n.render({ aliases, escape, prefix, parser, options }))\n      .join(` ${this._connector} `);\n    if (this._negated) {\n      content = `not (${content})`;\n    }\n    return content;\n  }\n\n  clone() {\n    return new FilterExpression<F>({\n      children: this._children.map((c) => c.clone()),\n      connector: this._connector,\n      negated: this._negated,\n    });\n  }\n\n  private _add(\n    node: Renderable,\n    connector?: FilterConnector,\n  ): FilterExpression<F> {\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<F>({\n            children: this._children,\n            connector: this._connector,\n            negated: this._negated,\n          });\n          if (exp.length() > 1) {\n            children.push(syntax.group(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(syntax.group(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          ? syntax.group(node)\n          : node,\n      );\n    }\n    return this;\n  }\n\n  or(exp: FilterExpression<F>): FilterExpression<F> {\n    return this._add(exp, 'or');\n  }\n\n  and(exp: FilterExpression<F>): FilterExpression<F> {\n    return this._add(exp, 'and');\n  }\n\n  not(exp: FilterExpression<F>): FilterExpression<F> {\n    const notExp = new FilterExpression<F>({\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: Normalize = 'right') {\n    return this._add(operators.eq(left, right, normalize));\n  }\n\n  ne(left: any, right: any, normalize: Normalize = 'right') {\n    return this._add(operators.ne(left, right, normalize));\n  }\n\n  gt(left: any, right: any, normalize: Normalize = 'right') {\n    return this._add(operators.gt(left, right, normalize));\n  }\n\n  ge(left: any, right: any, normalize: Normalize = 'right') {\n    return this._add(operators.ge(left, right, normalize));\n  }\n\n  lt(left: any, right: any, normalize: Normalize = 'right') {\n    return this._add(operators.lt(left, right, normalize));\n  }\n\n  le(left: any, right: any, normalize: Normalize = 'right') {\n    return this._add(operators.le(left, right, normalize));\n  }\n\n  has(left: any, right: any, normalize: Normalize = 'right') {\n    return this._add(operators.has(left, right, normalize));\n  }\n\n  in(left: any, right: any, normalize: Normalize = 'right') {\n    return this._add(operators.in(left, right, normalize));\n  }\n\n  contains(left: any, right: any, normalize: Normalize = 'right') {\n    return this._add(functions.contains(left, right, normalize));\n  }\n\n  startsWith(left: any, right: any, normalize: Normalize = 'right') {\n    return this._add(functions.startsWith(left, right, normalize));\n  }\n\n  endsWith(left: any, right: any, normalize: Normalize = 'right') {\n    return this._add(functions.endsWith(left, right, normalize));\n  }\n\n  any<N>(\n    left: N[],\n    opts?: (e: {\n      e: (connector?: FilterConnector) => FilterExpression<N>;\n      t: N;\n      o: ODataOperators<N>;\n      f: ODataFunctions<N>;\n    }) => FilterExpression<N>,\n    alias?: string,\n  ): FilterExpression<F> {\n    let exp = undefined;\n    if (opts !== undefined) {\n      exp = opts({\n        t: FieldFactory<Required<N>>(),\n        o: operators as ODataOperators<N>,\n        f: functions as ODataFunctions<N>,\n        e: (connector: FilterConnector = 'and') =>\n          new FilterExpression<N>({ connector }),\n      }) as FilterExpression<N>;\n    }\n    return this._add(syntax.any(left, exp, alias));\n  }\n\n  all<N>(\n    left: N[],\n    opts?: (e: {\n      t: N;\n      e: (connector?: FilterConnector) => FilterExpression<N>;\n      o: ODataOperators<N>;\n      f: ODataFunctions<N>;\n    }) => FilterExpression<N>,\n    alias?: string,\n  ): FilterExpression<F> {\n    let exp = undefined;\n    if (opts !== undefined) {\n      exp = opts({\n        t: FieldFactory<Required<N>>(),\n        o: operators as ODataOperators<N>,\n        f: functions as ODataFunctions<N>,\n        e: (connector: FilterConnector = 'and') =>\n          new FilterExpression<N>({ connector }),\n      }) as FilterExpression<N>;\n    }\n    return this._add(syntax.all(left, exp, alias));\n  }\n\n  count<N>(\n    left: N[],\n    opts?: (e: { t: N; f: CountField<N> }) => CountExpression<N>,\n  ): FilterExpression<F> {\n    return this._add(new CountExpression<N>().field(left, opts));\n  }\n\n  isof(type: string): FilterExpression<F>;\n  isof(left: F, type: string): FilterExpression<F>;\n  isof(left: any, type?: string): FilterExpression<F> {\n    return this._add(syntax.isof(left, type));\n  }\n}\n","import { Parser, ParserOptions } from '../../../types';\nimport { Types } from '../../../utils';\nimport { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport { render, syntax, Renderable, RenderableFactory } 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      $type: Types.rawType(this),\n      value: this.value,\n    };\n  }\n\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<any>;\n    options?: ParserOptions;\n  }): string {\n    return `${render(this.value, {\n      aliases,\n      escape,\n      prefix,\n      parser,\n      options,\n    })}`;\n  }\n\n  clone() {\n    return new SearchTerm(this.value);\n  }\n  resolve(parser: any) {\n    return parser;\n  }\n}\n\nexport type SearchExpressionBuilder<T> = {\n  e: (connector?: SearchConnector) => SearchExpression<T>;\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  get [Symbol.toStringTag]() {\n    return 'SearchExpression';\n  }\n\n  static factory<T>(\n    opts: (\n      builder: SearchExpressionBuilder<T>,\n      current?: SearchExpression<T>,\n    ) => SearchExpression<T>,\n    current?: SearchExpression<T>,\n  ): SearchExpression<T> {\n    return opts(\n      {\n        e: (connector: SearchConnector = 'AND') =>\n          new SearchExpression<T>({ connector }),\n      },\n      current,\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(syntax.group(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(syntax.group(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          ? syntax.group(node)\n          : node,\n      );\n    }\n    return this;\n  }\n\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  } = {}): string {\n    let content = this._children\n      .map((n) => n.render({ aliases, escape, prefix, parser, options }))\n      .join(` ${this._connector} `);\n    return content;\n  }\n\n  clone() {\n    return new SearchExpression<T>({\n      children: this._children.map((c) => c.clone()),\n      connector: this._connector,\n      negated: this._negated,\n    });\n  }\n\n  override toJson() {\n    const json = super.toJson();\n    return Object.assign(json, {\n      connector: this._connector,\n      negated: this._negated,\n    });\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): SearchExpression<T> {\n    return new SearchExpression<T>({\n      children: json['children'].map((c: any) => RenderableFactory(c)),\n      connector: json['connector'],\n      negated: json['negated'],\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 { Parser, ParserOptions } from '../../../types';\nimport { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport { FilterConnector, FilterExpression } from './filter';\nimport { SearchConnector, SearchExpression } from './search';\nimport {\n  FieldFactory,\n  functions,\n  ODataFunctions,\n  ODataOperators,\n  operators,\n  syntax,\n  transformations,\n  Renderable,\n  RenderableFactory,\n  AggregateMethod,\n} from './syntax';\n\nexport class GroupByTransformations<T> extends Expression<T> {\n  protected methods: (AggregateMethod | string)[];\n  protected aliases: string[];\n  constructor({\n    children,\n    methods,\n    aliases,\n  }: {\n    children?: Renderable[];\n    methods?: (AggregateMethod | string)[];\n    aliases?: string[];\n  } = {}) {\n    super({ children });\n    this.methods = methods || [];\n    this.aliases = aliases || [];\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'GroupByTransformations';\n  }\n\n  override toJson() {\n    const json = super.toJson();\n    return Object.assign(json, {\n      methods: this.methods,\n      aliases: this.aliases,\n    });\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): GroupByTransformations<T> {\n    return new GroupByTransformations<T>({\n      children: json['children'].map((c: any) =>\n        typeof c !== 'string' ? RenderableFactory(c) : c,\n      ),\n      methods: json['methods'],\n      aliases: json['aliases'],\n    });\n  }\n\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  } = {}): string {\n    const children = this._children.map((n) =>\n      typeof n !== 'string'\n        ? n.render({ aliases, escape, prefix, parser, options })\n        : n,\n    );\n    return `aggregate(${children\n      .map((child, index) =>\n        !child\n          ? `${this.methods[index]} as ${this.aliases[index]}`\n          : `${child} with ${this.methods[index]} as ${this.aliases[index]}`,\n      )\n      .join(',')})`;\n  }\n\n  clone() {\n    return new GroupByTransformations<T>({\n      children: this._children.map((c) =>\n        typeof c !== 'string' ? c.clone() : c,\n      ),\n      methods: this.methods,\n      aliases: this.aliases,\n    });\n  }\n\n  private _add(\n    node: Renderable,\n    method: AggregateMethod | string,\n    alias: string,\n  ): GroupByTransformations<T> {\n    this._children.push(node);\n    this.methods.push(method);\n    this.aliases.push(alias);\n    return this;\n  }\n\n  aggregate(\n    value: any,\n    method: AggregateMethod | string,\n    alias: string,\n  ): GroupByTransformations<T> {\n    return this._add(value, method, alias);\n  }\n\n  sum(value: any, alias: string): GroupByTransformations<T> {\n    return this.aggregate(value, 'sum', alias);\n  }\n\n  min(value: any, alias: string): GroupByTransformations<T> {\n    return this.aggregate(value, 'min', alias);\n  }\n\n  max(value: any, alias: string): GroupByTransformations<T> {\n    return this.aggregate(value, 'max', alias);\n  }\n\n  average(value: any, alias: string): GroupByTransformations<T> {\n    return this.aggregate(value, 'average', alias);\n  }\n  countdistinct(value: any, alias: string): GroupByTransformations<T> {\n    return this.aggregate(value, 'countdistinct', alias);\n  }\n\n  count(alias: string): GroupByTransformations<T> {\n    return this.aggregate('' as any, '$count', alias);\n  }\n}\n\nexport type ApplyExpressionBuilder<T> = {\n  t: Required<T>;\n  e: () => ApplyExpression<T>;\n};\nexport class ApplyExpression<T> extends Expression<T> {\n  constructor({\n    children,\n  }: {\n    children?: Renderable[];\n  } = {}) {\n    super({ children });\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'ApplyExpression';\n  }\n\n  static factory<T>(\n    opts: (\n      builder: ApplyExpressionBuilder<T>,\n      current?: ApplyExpression<T>,\n    ) => ApplyExpression<T>,\n    current?: ApplyExpression<T>,\n  ): ApplyExpression<T> {\n    return opts(\n      {\n        t: FieldFactory<Required<T>>(),\n        e: () => new ApplyExpression<T>(),\n      },\n      current,\n    ) as ApplyExpression<T>;\n  }\n\n  override toJson() {\n    const json = super.toJson();\n    return Object.assign(json, {});\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): ApplyExpression<T> {\n    return new ApplyExpression<T>({\n      children: json['children'].map((c: any) => RenderableFactory(c)),\n    });\n  }\n\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  } = {}): string {\n    return this._children\n      .map((n) => n.render({ aliases, escape, prefix, parser, options }))\n      .join('/');\n  }\n\n  clone() {\n    return new ApplyExpression<T>({\n      children: this._children.map((c) => c.clone()),\n    });\n  }\n\n  private _add(node: Renderable): ApplyExpression<T> {\n    this._children.push(node);\n    return this;\n  }\n\n  aggregate(\n    value: any,\n    method: AggregateMethod,\n    alias: string,\n  ): ApplyExpression<T> {\n    return this._add(syntax.aggregate(value, method, alias));\n  }\n\n  //topcount\n  topCount(\n    opts: (e: { o: ODataOperators<T>; f: ODataFunctions<T> }) => Renderable,\n  ): ApplyExpression<T> {\n    const node = opts({\n      o: operators as ODataOperators<T>,\n      f: functions as ODataFunctions<T>,\n    });\n    return this._add(node);\n  }\n\n  //topsum\n  topSum(\n    opts: (e: { o: ODataOperators<T>; f: ODataFunctions<T> }) => Renderable,\n  ): ApplyExpression<T> {\n    const node = opts({\n      o: operators as ODataOperators<T>,\n      f: functions as ODataFunctions<T>,\n    });\n    return this._add(node);\n  }\n\n  //toppercent\n  topPercent(\n    opts: (e: { o: ODataOperators<T>; f: ODataFunctions<T> }) => Renderable,\n  ): ApplyExpression<T> {\n    const node = opts({\n      o: operators as ODataOperators<T>,\n      f: functions as ODataFunctions<T>,\n    });\n    return this._add(node);\n  }\n\n  //bottomcount\n  bottomCount(\n    opts: (e: { o: ODataOperators<T>; f: ODataFunctions<T> }) => Renderable,\n  ): ApplyExpression<T> {\n    const node = opts({\n      o: operators as ODataOperators<T>,\n      f: functions as ODataFunctions<T>,\n    });\n    return this._add(node);\n  }\n\n  //bottomsum\n  bottomSum(\n    opts: (e: { o: ODataOperators<T>; f: ODataFunctions<T> }) => Renderable,\n  ): ApplyExpression<T> {\n    const node = opts({\n      o: operators as ODataOperators<T>,\n      f: functions as ODataFunctions<T>,\n    });\n    return this._add(node);\n  }\n\n  //bottompercent\n  bottomPercent(\n    opts: (e: { o: ODataOperators<T>; f: ODataFunctions<T> }) => Renderable,\n  ): ApplyExpression<T> {\n    const node = opts({\n      o: operators as ODataOperators<T>,\n      f: functions as ODataFunctions<T>,\n    });\n    return this._add(node);\n  }\n\n  identity(\n    opts: (e: { o: ODataOperators<T>; f: ODataFunctions<T> }) => Renderable,\n  ): ApplyExpression<T> {\n    const node = opts({\n      o: operators as ODataOperators<T>,\n      f: functions as ODataFunctions<T>,\n    });\n    return this._add(node);\n  }\n\n  concat(\n    opts: (e: { o: ODataOperators<T>; f: ODataFunctions<T> }) => Renderable,\n  ): ApplyExpression<T> {\n    const node = opts({\n      o: operators as ODataOperators<T>,\n      f: functions as ODataFunctions<T>,\n    });\n    return this._add(node);\n  }\n\n  //groupby\n  groupBy(\n    props: (e: { rollup: (f: any) => any }) => any | any[],\n    opts?: (e: GroupByTransformations<T>) => GroupByTransformations<T>,\n  ): ApplyExpression<T> {\n    let properties = props({ rollup: (e: any) => syntax.rollup(e) });\n    properties = Array.isArray(properties) ? properties : [properties];\n    const transformations =\n      opts !== undefined ? opts(new GroupByTransformations()) : undefined;\n    return this._add(syntax.groupby(properties, transformations));\n  }\n\n  //filter\n  filter(\n    opts: (e: {\n      t: T;\n      e: (connector?: FilterConnector) => FilterExpression<T>;\n      o: ODataOperators<T>;\n      f: ODataFunctions<T>;\n    }) => FilterExpression<T>,\n  ) {\n    const exp = opts({\n      t: FieldFactory<Required<T>>(),\n      o: operators as ODataOperators<T>,\n      f: functions as ODataFunctions<T>,\n      e: (connector: FilterConnector = 'and') =>\n        new FilterExpression<T>({ connector }),\n    }) as FilterExpression<T>;\n    return this._add(transformations.filter(exp));\n  }\n\n  /*\n  orderBy(\n    opts: (\n      builder: OrderByExpressionBuilder<T>,\n      current?: OrderByExpression<T>\n    ) => OrderByExpression<T>,\n    current?: OrderByExpression<T>\n  ) {\n    const exp = opts(\n      {\n        t: FieldFactory<Required<T>>(),\n        e: () => new OrderByExpression<T>(),\n      },\n      current\n    ) as OrderByExpression<T>;\n    return this._add(transformations.orderby(exp));\n  }\n  */\n\n  //expand\n  expand(\n    opts: (e: { o: ODataOperators<T>; f: ODataFunctions<T> }) => Renderable,\n  ): ApplyExpression<T> {\n    const node = opts({\n      o: operators as ODataOperators<T>,\n      f: functions as ODataFunctions<T>,\n    });\n    return this._add(node);\n  }\n\n  //search\n  search(\n    opts: (e: {\n      t: T;\n      e: (connector?: SearchConnector) => SearchExpression<T>;\n      o: ODataOperators<T>;\n      f: ODataFunctions<T>;\n    }) => SearchExpression<T>,\n  ) {\n    const exp = opts({\n      t: FieldFactory<Required<T>>(),\n      o: operators as ODataOperators<T>,\n      f: functions as ODataFunctions<T>,\n      e: (connector: SearchConnector = 'AND') =>\n        new SearchExpression<T>({ connector }),\n    }) as SearchExpression<T>;\n    return this._add(transformations.search(exp));\n  }\n\n  //compute\n  compute(\n    opts: (e: { o: ODataOperators<T>; f: ODataFunctions<T> }) => Renderable,\n  ): ApplyExpression<T> {\n    const node = opts({\n      o: operators as ODataOperators<T>,\n      f: functions as ODataFunctions<T>,\n    });\n    return this._add(node);\n  }\n\n  /*\n  skip(\n    total: number\n  ): ApplyExpression<T> {\n    return this._add(transformations.skip(total));\n  }\n\n  top(\n    total: number\n  ): ApplyExpression<T> {\n    return this._add(transformations.top(total));\n  }\n  */\n}\n","import { Parser, ParserOptions } from '../../../types';\nimport { Types } from '../../../utils';\nimport { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport { render, FieldFactory, Renderable, RenderableFactory } from './syntax';\n\nexport type OrderAttribute = 'asc' | 'desc';\nexport class OrderByField implements Renderable {\n  constructor(\n    protected field: Renderable,\n    protected order: OrderAttribute,\n  ) {}\n\n  get [Symbol.toStringTag]() {\n    return 'OrderByField';\n  }\n\n  toJson() {\n    return {\n      $type: Types.rawType(this),\n      field: this.field.toJson(),\n      order: this.order,\n    };\n  }\n\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<any>;\n    options?: ParserOptions;\n  }): string {\n    return `${render(this.field, {\n      aliases,\n      escape,\n      prefix,\n      parser,\n      options,\n    })} ${this.order}`;\n  }\n\n  clone() {\n    return new OrderByField(\n      typeof this.field !== 'string' ? this.field.clone() : this.field,\n      this.order,\n    );\n  }\n  resolve(parser: any) {\n    return parser;\n  }\n}\n\nexport type OrderByExpressionBuilder<T> = {\n  t: Required<T>;\n  e: () => OrderByExpression<T>;\n};\n\nexport class OrderByExpression<T> extends Expression<T> {\n  constructor({\n    children,\n  }: {\n    children?: Renderable[];\n  } = {}) {\n    super({ children });\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'OrderByExpression';\n  }\n\n  static factory<T>(\n    opts: (\n      builder: OrderByExpressionBuilder<T>,\n      current?: OrderByExpression<T>,\n    ) => OrderByExpression<T>,\n    current?: OrderByExpression<T>,\n  ): OrderByExpression<T> {\n    return opts(\n      {\n        t: FieldFactory<Required<T>>(),\n        e: () => new OrderByExpression<T>(),\n      },\n      current,\n    ) as OrderByExpression<T>;\n  }\n\n  private _add(node: Renderable): OrderByExpression<T> {\n    this._children.push(node);\n    return this;\n  }\n\n  override toJson() {\n    const json = super.toJson();\n    return Object.assign(json, {});\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): OrderByExpression<T> {\n    return new OrderByExpression<T>({\n      children: json['children'].map((c: any) => RenderableFactory(c)),\n    });\n  }\n\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  } = {}): string {\n    let content = this._children\n      .map((n) => n.render({ aliases, escape, prefix, parser, options }))\n      .join(`,`);\n    return content;\n  }\n\n  clone() {\n    return new OrderByExpression<T>({\n      children: this._children.map((c) => c.clone()),\n    });\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 { Parser, ParserOptions } from '../../../types';\nimport { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport { FieldFactory, Renderable, RenderableFactory } from './syntax';\n\nexport type SelectExpressionBuilder<T> = {\n  t: Required<T>;\n  e: () => SelectExpression<T>;\n};\nexport class SelectExpression<T> extends Expression<T> {\n  constructor({\n    children,\n  }: {\n    children?: Renderable[];\n  } = {}) {\n    super({ children });\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'SelectExpression';\n  }\n\n  static factory<T>(\n    opts: (\n      builder: SelectExpressionBuilder<T>,\n      current?: SelectExpression<T>,\n    ) => SelectExpression<T>,\n    current?: SelectExpression<T>,\n  ): SelectExpression<T> {\n    return opts(\n      {\n        t: FieldFactory<Required<T>>(),\n        e: () => new SelectExpression<T>(),\n      },\n      current,\n    ) as SelectExpression<T>;\n  }\n\n  override toJson() {\n    const json = super.toJson();\n    return Object.assign(json, {});\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): SelectExpression<T> {\n    return new SelectExpression<T>({\n      children: json['children'].map((c: any) => RenderableFactory(c)),\n    });\n  }\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  } = {}): string {\n    return this._children\n      .map((n) =>\n        typeof n === 'string'\n          ? n\n          : n.render({ aliases, escape, prefix, parser, options }),\n      )\n      .join(',');\n  }\n\n  clone() {\n    return new SelectExpression<T>({\n      children: this._children.map((c) => c.clone()),\n    });\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  fields(...fields: any[]): SelectExpression<T> {\n    fields.forEach((f) => this._add(f));\n    return this;\n  }\n}\n","import { Parser, ParserOptions, QueryOption } from '../../../types';\nimport { Objects, Types } from '../../../utils';\nimport { QueryCustomType, Unpacked } from '../builder';\nimport { Expression } from './base';\nimport { ComputeExpression, ComputeExpressionBuilder } from './compute';\nimport { FilterExpression, FilterExpressionBuilder } from './filter';\nimport { OrderByExpression, OrderByExpressionBuilder } from './orderby';\nimport { SearchExpression, SearchExpressionBuilder } from './search';\nimport { SelectExpression, SelectExpressionBuilder } from './select';\nimport {\n  FieldFactory,\n  render,\n  Renderable,\n  RenderableFactory,\n  resolve,\n} from './syntax';\n\nexport class ExpandField<T> implements Renderable {\n  constructor(\n    protected field: any,\n    private values: { [name: string]: any } = {},\n  ) {}\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    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  }): string {\n    parser = resolve([this.field], parser);\n    const params: { [name: string]: string } = [\n      QueryOption.select,\n      QueryOption.expand,\n      QueryOption.filter,\n      QueryOption.search,\n      QueryOption.orderBy,\n      QueryOption.compute,\n      QueryOption.skip,\n      QueryOption.top,\n      QueryOption.count,\n      QueryOption.levels,\n    ]\n      .filter((key) => !Types.isEmpty(this.values[key]))\n      .reduce((acc, key) => {\n        let value: any = this.values[key];\n        if (Types.rawType(value).endsWith('Expression')) {\n          value = (value as Expression<T>).render({\n            aliases,\n            prefix,\n            escape,\n            parser,\n            options,\n          });\n        }\n        return Object.assign(acc, { [key]: value });\n      }, {});\n    let expand = `${render(this.field, {\n      aliases,\n      escape,\n      prefix,\n      parser,\n      options,\n    })}`;\n    if (!Types.isEmpty(params)) {\n      expand = `${expand}(${Object.keys(params)\n        .map((key) => `$${key}=${params[key]}`)\n        .join(';')})`;\n    }\n    return expand;\n  }\n\n  clone() {\n    const values = Object.keys(this.values).reduce(\n      (acc, key) =>\n        Object.assign(acc, { [key]: Objects.clone(this.values[key]) }),\n      {},\n    );\n    return new ExpandField<T>(\n      typeof this.field === 'string' ? this.field : this.field.clone(),\n      values,\n    );\n  }\n\n  resolve(parser: any) {\n    return parser;\n  }\n\n  select(\n    opts: (\n      builder: SelectExpressionBuilder<T>,\n      current?: SelectExpression<T>,\n    ) => SelectExpression<T>,\n  ): SelectExpression<T> {\n    return this.option(\n      QueryOption.select,\n      SelectExpression.factory<T>(opts, this.values[QueryOption.select]),\n    );\n  }\n\n  expand(\n    opts: (\n      builder: ExpandExpressionBuilder<T>,\n      current?: ExpandExpression<T>,\n    ) => ExpandExpression<T>,\n  ) {\n    return this.option(\n      QueryOption.expand,\n      ExpandExpression.factory<T>(opts, this.values[QueryOption.expand]),\n    );\n  }\n\n  filter(\n    opts: (\n      builder: FilterExpressionBuilder<T>,\n      current?: FilterExpression<T>,\n    ) => FilterExpression<T>,\n  ) {\n    return this.option(\n      QueryOption.filter,\n      FilterExpression.factory<T>(opts, this.values[QueryOption.filter]),\n    );\n  }\n\n  search(opts: (builder: SearchExpressionBuilder<T>) => SearchExpression<T>) {\n    return this.option(\n      QueryOption.search,\n      SearchExpression.factory<T>(opts, this.values[QueryOption.search]),\n    );\n  }\n\n  orderBy(\n    opts: (\n      builder: OrderByExpressionBuilder<T>,\n      current?: OrderByExpression<T>,\n    ) => OrderByExpression<T>,\n  ) {\n    return this.option(\n      QueryOption.orderBy,\n      OrderByExpression.factory<T>(opts, this.values[QueryOption.orderBy]),\n    );\n  }\n\n  compute(\n    opts: (\n      builder: ComputeExpressionBuilder<T>,\n      current?: ComputeExpression<T>,\n    ) => ComputeExpression<T>,\n  ) {\n    return this.option(\n      QueryOption.compute,\n      ComputeExpression.factory<T>(opts, this.values[QueryOption.compute]),\n    );\n  }\n\n  skip(n: number) {\n    return this.option<number>(QueryOption.skip, n);\n  }\n\n  top(n: number) {\n    return this.option<number>(QueryOption.top, n);\n  }\n\n  levels(n: number | 'max') {\n    return this.option<number | 'max'>(QueryOption.levels, n);\n  }\n\n  count() {\n    return this.option<boolean>(QueryOption.count, true);\n  }\n\n  // Option Handler\n  private option<O>(name: QueryOption, opts?: O) {\n    if (opts !== undefined) this.values[name] = opts;\n    return this.values[name] as O;\n  }\n}\n\nexport type ExpandExpressionBuilder<T> = {\n  t: Required<T>;\n  e: () => ExpandExpression<T>;\n};\nexport class ExpandExpression<T> extends Expression<T> {\n  constructor({\n    children,\n  }: {\n    children?: Renderable[];\n  } = {}) {\n    super({ children });\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'ExpandExpression';\n  }\n\n  static factory<T>(\n    opts: (\n      builder: ExpandExpressionBuilder<T>,\n      current?: ExpandExpression<T>,\n    ) => ExpandExpression<T>,\n    current?: ExpandExpression<T>,\n  ): ExpandExpression<T> {\n    return opts(\n      {\n        t: FieldFactory<Required<T>>(),\n        e: () => new ExpandExpression<T>(),\n      },\n      current,\n    ) as ExpandExpression<T>;\n  }\n\n  override toJson() {\n    const json = super.toJson();\n    return Object.assign(json, {});\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): ExpandExpression<T> {\n    return new ExpandExpression<T>({\n      children: json['children'].map((c: any) => RenderableFactory(c)),\n    });\n  }\n\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  } = {}): string {\n    return this._children\n      .map((n) => n.render({ aliases, escape, prefix, parser, options }))\n      .join(',');\n  }\n\n  clone() {\n    return new ExpandExpression<T>({\n      children: this._children.map((c) => c.clone()),\n    });\n  }\n\n  private _add(node: Renderable): ExpandExpression<T> {\n    this._children.push(node);\n    return this;\n  }\n\n  field<F>(\n    field: F,\n    opts?: (e: ExpandField<Unpacked<F>>) => void,\n  ): ExpandExpression<T> {\n    let node = new ExpandField<Unpacked<F>>(field);\n    if (opts !== undefined) opts(node);\n    return this._add(node);\n  }\n}\n","import { ODataStructuredTypeFieldParser } from '../../../schema';\nimport { Parser, ParserOptions } from '../../../types';\nimport { Objects, Types } from '../../../utils';\nimport { QueryCustomType } from '../builder';\nimport { normalizeValue } from '../builder';\nimport { ApplyExpression, GroupByTransformations } from './apply';\nimport { ComputeExpression } from './compute';\nimport { CountExpression } from './count';\nimport { ExpandExpression } from './expand';\nimport { FilterExpression } from './filter';\nimport { OrderByExpression } from './orderby';\nimport { SearchExpression } from './search';\nimport { SelectExpression } from './select';\n\nexport type Normalize = 'all' | 'right' | 'left' | 'none';\n\nexport interface Renderable {\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<any>;\n    options?: ParserOptions;\n  }): string;\n  toJson(): any;\n  clone(): any;\n  resolve(parser: any): any;\n}\n\nexport const FieldFactory = <T extends object>(\n  names: (string | Renderable)[] = [],\n): any =>\n  new Proxy({ _names: names } as T, {\n    get(target: T, key: string | symbol) {\n      let names = (target as any)['_names'] as (string | Renderable)[];\n      if (key === 'render') {\n        return ({\n          aliases,\n          escape,\n          prefix,\n          parser,\n          options,\n        }: {\n          aliases?: QueryCustomType[];\n          escape?: boolean;\n          prefix?: string;\n          parser?: Parser<T>;\n          options?: ParserOptions;\n        }) => {\n          let values = names.map((n: any) =>\n            render(n, { aliases, escape, prefix, parser, options }),\n          );\n          if (prefix && (names.length === 0 || typeof names[0] === 'string')) {\n            values = [prefix, ...values];\n          }\n          return values.join('/');\n        };\n      } else if (key === 'clone') {\n        return () => FieldFactory([...names]);\n      } else if (key === 'isField') {\n        return () => true;\n      } else if (key === 'toJson') {\n        return () => ({\n          $type: 'Field',\n          names: names,\n        });\n      } else if (key === 'resolve') {\n        return (parser: any) =>\n          names.reduce(\n            (acc: any, name: string | Renderable) =>\n              typeof name === 'string'\n                ? acc?.field(name)\n                : name?.resolve(parser),\n            parser,\n          );\n      } else {\n        return FieldFactory([...names, key as string]);\n      }\n    },\n\n    has(target: T, key: string): any {\n      return (\n        ['toJson', 'isField', 'clone', 'render', 'resolve'].includes(key) ||\n        key in target\n      );\n    },\n  });\n\nexport const RenderableFactory = (value: any): Renderable => {\n  if (Types.isPlainObject(value) && '$type' in value) {\n    switch (value.$type) {\n      case 'SelectExpression':\n        return SelectExpression.fromJson(value);\n      case 'ExpandExpression':\n        return ExpandExpression.fromJson(value);\n      case 'ComputeExpression':\n        return ComputeExpression.fromJson(value);\n      case 'ApplyExpression':\n        return ApplyExpression.fromJson(value);\n      case 'FilterExpression':\n        return FilterExpression.fromJson(value);\n      case 'OrderByExpression':\n        return OrderByExpression.fromJson(value);\n      case 'SearchExpression':\n        return SearchExpression.fromJson(value);\n      case 'CountExpression':\n        return CountExpression.fromJson(value);\n      case 'GroupByTransformations':\n        return GroupByTransformations.fromJson(value);\n      case 'Function':\n        return Function.fromJson(value);\n      case 'Operator':\n        return Operator.fromJson(value);\n      case 'Grouping':\n        return Grouping.fromJson(value);\n      case 'Aggregate':\n        return Aggregate.fromJson(value);\n      case 'GroupBy':\n        return GroupBy.fromJson(value);\n      case 'Lambda':\n        return Lambda.fromJson(value);\n      case 'Type':\n        return Type.fromJson(value);\n      case 'Field':\n        return FieldFactory(value['names']);\n      default:\n        return value;\n    }\n  }\n  return value;\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    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    normalize?: boolean;\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<any>;\n    options?: ParserOptions;\n  } = {},\n): string | number | boolean | null {\n  if (Types.isFunction(value)) {\n    return render(value(syntax), {\n      aliases,\n      normalize,\n      prefix,\n      parser,\n      options,\n    });\n  }\n  if (Types.isObject(value) && 'render' in value) {\n    return render(value.render({ aliases, escape, prefix, parser, options }), {\n      aliases,\n      normalize,\n      escape,\n      prefix,\n      parser,\n      options,\n    });\n  }\n  return normalize ? normalizeValue(value, { aliases, escape }) : value;\n}\n\nexport function resolve(values: any, parser?: Parser<any>) {\n  if (parser !== undefined) {\n    let fields = values.filter(\n      (v: any) => Types.isObject(v) && 'isField' in v && v.isField(),\n    );\n    if (fields.length === 1 && Types.isObject(parser) && 'field' in parser) {\n      return fields[0].resolve(parser);\n    }\n  }\n  return parser;\n}\n\nexport function encode(\n  values: any,\n  parser?: Parser<any>,\n  options?: ParserOptions,\n) {\n  if (parser !== undefined) {\n    return values.map((v: any) => {\n      if (Types.isArray(v)) return encode(v, parser, options);\n      if (Types.isObject(v) || v == null) return v;\n      try {\n        return parser.encode(v, options);\n      } catch {\n        return v;\n      }\n    });\n  }\n  return values;\n}\n\nexport class Function<T> implements Renderable {\n  constructor(\n    protected name: string,\n    protected values: any[],\n    protected normalize: Normalize,\n    protected escape: boolean = false,\n  ) {}\n\n  get [Symbol.toStringTag]() {\n    return 'Function';\n  }\n\n  toJson() {\n    return {\n      $type: Types.rawType(this),\n      name: this.name,\n      values: this.values.map((v) =>\n        Types.isObject(v) && 'toJson' in v ? v.toJson() : v,\n      ),\n      normalize: this.normalize,\n    };\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): Function<T> {\n    return new Function<T>(\n      json['name'],\n      json['values'].map((v: any) => RenderableFactory(v)),\n      json['normalize'],\n      json['escape'],\n    );\n  }\n\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  }): string {\n    parser = resolve(this.values, parser);\n    let [left, ...values] = encode(this.values, parser, options);\n\n    left = render(left, {\n      aliases,\n      escape,\n      prefix,\n      parser,\n      normalize: this.normalize === 'all' || this.normalize === 'left',\n      options,\n    });\n    const params = [\n      left,\n      ...values.map((v: any) =>\n        render(v, {\n          aliases,\n          escape,\n          prefix,\n          parser,\n          normalize: this.normalize === 'all' || this.normalize === 'right',\n          options,\n        }),\n      ),\n    ];\n    return `${this.name}(${params.join(', ')})`;\n  }\n\n  clone() {\n    return new Function<T>(\n      this.name,\n      this.values.map((v) => Objects.clone(v)),\n      this.normalize,\n      this.escape,\n    );\n  }\n\n  resolve(parser: any) {\n    return parser;\n  }\n}\n\nexport class StringAndCollectionFunctions<T> {\n  concat(left: any, right: any, normalize: Normalize = 'right') {\n    return new Function<T>('concat', [left, right], normalize);\n  }\n\n  contains(left: any, right: any, normalize: Normalize = 'right') {\n    return new Function<T>('contains', [left, right], normalize);\n  }\n\n  endsWith(left: any, right: any, normalize: Normalize = 'right') {\n    return new Function<T>('endswith', [left, right], normalize);\n  }\n\n  indexOf(left: any, right: any, normalize: Normalize = 'right') {\n    return new Function<T>('indexof', [left, right], normalize);\n  }\n\n  length(left: any, normalize: Normalize = 'right') {\n    return new Function<T>('length', [left], normalize);\n  }\n\n  startsWith(left: any, right: any, normalize: Normalize = 'right') {\n    return new Function<T>('startswith', [left, right], normalize);\n  }\n\n  subString(\n    left: any,\n    right: number,\n    length?: number,\n    normalize: Normalize = 'none',\n  ) {\n    let values = [left, right];\n    if (length !== undefined) {\n      values.push(length);\n    }\n    return new Function<T>('substring', values, normalize);\n  }\n}\n\nexport class CollectionFunctions<T> {\n  hasSubset(left: T, right: any, normalize: Normalize = 'none') {\n    return new Function<T>('hassubset', [left, right], normalize);\n  }\n  hasSubsequence(left: T, right: any, normalize: Normalize = 'none') {\n    return new Function<T>('hassubsequence', [left, right], normalize);\n  }\n}\n\nexport class StringFunctions<T> {\n  matchesPattern(\n    left: any | string,\n    pattern: string,\n    normalize: Normalize = 'none',\n  ) {\n    return new Function<T>('matchesPattern', [left, pattern], normalize);\n  }\n  toLower(left: any, normalize: Normalize = 'none') {\n    return new Function<T>('tolower', [left], normalize);\n  }\n  toUpper(left: any, normalize: Normalize = 'none') {\n    return new Function<T>('toupper', [left], normalize);\n  }\n  trim(left: any, normalize: Normalize = 'none') {\n    return new Function<T>('trim', [left], normalize);\n  }\n}\n\nexport class DateAndTimeFunctions<T> {\n  date(left: any, normalize: Normalize = 'none') {\n    return new Function<T>('date', [left], normalize);\n  }\n  day(left: any, normalize: Normalize = 'none') {\n    return new Function<T>('day', [left], normalize);\n  }\n  fractionalseconds(left: any, normalize: Normalize = 'none') {\n    return new Function<T>('fractionalseconds', [left], normalize);\n  }\n  hour(left: any, normalize: Normalize = 'none') {\n    return new Function<T>('hour', [left], normalize);\n  }\n  maxdatetime(left: any, normalize: Normalize = 'none') {\n    return new Function<T>('maxdatetime', [left], normalize);\n  }\n  mindatetime(left: any, normalize: Normalize = 'none') {\n    return new Function<T>('mindatetime', [left], normalize);\n  }\n  minute(left: any, normalize: Normalize = 'none') {\n    return new Function<T>('minute', [left], normalize);\n  }\n  month(left: any, normalize: Normalize = 'none') {\n    return new Function<T>('month', [left], normalize);\n  }\n  now() {\n    return new Function<T>('now', [], 'none');\n  }\n  second(left: any, normalize: Normalize = 'none') {\n    return new Function<T>('second', [left], normalize);\n  }\n  time(left: any, normalize: Normalize = 'none') {\n    return new Function<T>('time', [left], normalize);\n  }\n  totaloffsetminutes(left: any, normalize: Normalize = 'none') {\n    return new Function<T>('totaloffsetminutes', [left], normalize);\n  }\n  totalseconds(left: any, normalize: Normalize = 'none') {\n    return new Function<T>('totalseconds', [left], normalize);\n  }\n  year(left: any, normalize: Normalize = 'none') {\n    return new Function<T>('year', [left], normalize);\n  }\n}\n\nexport class ArithmeticFunctions<T> {\n  ceiling(left: T | string, normalize: Normalize = 'none') {\n    return new Function<T>('ceiling', [left], normalize);\n  }\n  floor(left: T | string, normalize: Normalize = 'none') {\n    return new Function<T>('floor', [left], normalize);\n  }\n  round(left: T | string, normalize: Normalize = 'none') {\n    return new Function<T>('round', [left], normalize);\n  }\n}\n\nexport class TypeFunctions<T> {\n  cast<N>(left: T | string, type?: string): N {\n    return FieldFactory<Required<N>>([\n      type !== undefined\n        ? new Type<T>('cast', type, left)\n        : new Type<T>('cast', left as string),\n    ]);\n  }\n\n  isof(left: T | string, type?: string) {\n    return type !== undefined\n      ? new Type<T>('isof', type, left)\n      : new Type<T>('isof', left as string);\n  }\n}\n\nexport class GeoFunctions<T> {\n  geoDistance(left: T, right: string, normalize: Normalize = 'right') {\n    return new Function<T>('geo.distance', [left, right], normalize);\n  }\n  geoIntersects(left: T, right: string, normalize: Normalize = 'right') {\n    return new Function<T>('geo.intersects', [left, right], normalize);\n  }\n  geoLength(left: T, normalize: Normalize = 'none') {\n    return new Function<T>('geo.length', [left], normalize);\n  }\n}\n\nexport class ConditionalFunctions<T> {\n  case(left: T | string, right: any, normalize: Normalize = 'none') {\n    return new Function<T>('case', [left, right], normalize);\n  }\n}\n\nexport class Operator<T> implements Renderable {\n  constructor(\n    protected op: string,\n    protected values: any[],\n    protected normalize: Normalize,\n  ) {}\n\n  get [Symbol.toStringTag]() {\n    return 'Operator';\n  }\n\n  toJson() {\n    return {\n      $type: Types.rawType(this),\n      op: this.op,\n      values: this.values.map((v) =>\n        Types.isObject(v) && 'toJson' in v ? v.toJson() : v,\n      ),\n      normalize: this.normalize,\n    };\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): Operator<T> {\n    return new Operator<T>(\n      json['op'],\n      json['values'].map((v: any) => RenderableFactory(v)),\n      json['normalize'],\n    );\n  }\n\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  }): string {\n    parser = resolve(this.values, parser);\n    let [left, right] = encode(this.values, parser, options);\n\n    left = render(left, {\n      aliases,\n      escape,\n      prefix,\n      parser,\n      normalize: this.normalize === 'all' || this.normalize === 'left',\n      options,\n    });\n    if (right !== undefined) {\n      right = Array.isArray(right)\n        ? `(${right\n            .map((v) =>\n              render(v, {\n                aliases,\n                escape,\n                prefix,\n                parser,\n                normalize:\n                  this.normalize === 'all' || this.normalize === 'right',\n                options,\n              }),\n            )\n            .join(',')})`\n        : render(right, {\n            aliases,\n            escape,\n            prefix,\n            parser,\n            normalize: this.normalize === 'all' || this.normalize === 'right',\n            options,\n          });\n      return `${left} ${this.op} ${right}`;\n    }\n    return `${this.op}(${left})`;\n  }\n\n  clone() {\n    return new Operator(\n      this.op,\n      this.values.map((v) => Objects.clone(v)),\n      this.normalize,\n    );\n  }\n  resolve(parser: any) {\n    return parser;\n  }\n}\n\nexport class LogicalOperators<T> {\n  eq(left: any, right: any, normalize: Normalize = 'right') {\n    return new Operator('eq', [left, right], normalize);\n  }\n  ne(left: any, right: any, normalize: Normalize = 'right') {\n    return new Operator('ne', [left, right], normalize);\n  }\n  gt(left: any, right: any, normalize: Normalize = 'right') {\n    return new Operator('gt', [left, right], normalize);\n  }\n  ge(left: any, right: any, normalize: Normalize = 'right') {\n    return new Operator('ge', [left, right], normalize);\n  }\n  lt(left: any, right: any, normalize: Normalize = 'right') {\n    return new Operator('lt', [left, right], normalize);\n  }\n  le(left: any, right: any, normalize: Normalize = 'right') {\n    return new Operator('le', [left, right], normalize);\n  }\n  /*\n  and(left: any, right: any, normalize: Normalize = 'right') {\n    return new Operator('and', [left, right], normalize);\n  }\n  or(left: any, right: any, normalize: Normalize = 'right') {\n    return new Operator('or', [left, right], normalize);\n  }\n  */\n  not(left: any, normalize: Normalize = 'none') {\n    return new Operator<T>('not', [left], normalize);\n  }\n  has(left: any, right: any, normalize: Normalize = 'right') {\n    return new Operator('has', [left, right], normalize);\n  }\n  in(left: any, right: any, normalize: Normalize = 'right') {\n    return new Operator('in', [left, right], normalize);\n  }\n}\n\nexport class ArithmeticOperators<T> {\n  add(left: any, right: any, normalize: Normalize = 'right') {\n    return new Operator<T>('add', [left, right], normalize);\n  }\n  sub(left: any, right: any, normalize: Normalize = 'right') {\n    return new Operator('sub', [left, right], normalize);\n  }\n  mul(left: any, right: any, normalize: Normalize = 'right') {\n    return new Operator('mul', [left, right], normalize);\n  }\n  div(left: any, right: any, normalize: Normalize = 'right') {\n    return new Operator('div', [left, right], normalize);\n  }\n  mod(left: any, right: any, normalize: Normalize = 'right') {\n    return new Operator('mod', [left, right], normalize);\n  }\n  neg(value: any, normalize: Normalize = 'right') {\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      $type: Types.rawType(this),\n      group: this.group.toJson(),\n    };\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): Grouping<T> {\n    return new Grouping<T>(json['group'].map((v: any) => RenderableFactory(v)));\n  }\n\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  }): string {\n    return `(${render(this.group, {\n      aliases,\n      escape,\n      prefix,\n      parser,\n      options,\n    })})`;\n  }\n\n  clone() {\n    return new Grouping(Objects.clone(this.group));\n  }\n  resolve(parser: any) {\n    return parser;\n  }\n}\n\nexport class GroupingOperators<T> {\n  group(value: any) {\n    return new Grouping<T>(value);\n  }\n  rollup(...values: any) {\n    return new Function<T>('rollup', values, 'none');\n  }\n}\n\nexport type AggregateMethod =\n  | 'sum'\n  | 'min'\n  | 'max'\n  | 'average'\n  | 'countdistinct'; //, or with custom aggregation methods;\n\nexport class Aggregate<T> implements Renderable {\n  constructor(\n    protected value: Renderable,\n    protected method: AggregateMethod,\n    protected alias: string,\n  ) {}\n\n  get [Symbol.toStringTag]() {\n    return 'Aggregate';\n  }\n\n  toJson() {\n    return {\n      $type: Types.rawType(this),\n      value: this.value.toJson(),\n      method: this.method,\n      alias: this.alias,\n    };\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): Aggregate<T> {\n    return new Aggregate<T>(\n      RenderableFactory(json['value']),\n      json['method'],\n      json['alias'],\n    );\n  }\n\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  }): string {\n    return `aggregate(${render(this.value, {\n      aliases,\n      escape,\n      prefix,\n      parser,\n      options,\n    })} with ${this.method} as ${this.alias})`;\n  }\n\n  clone() {\n    return new Aggregate(Objects.clone(this.value), this.method, this.alias);\n  }\n  resolve(parser: any) {\n    return parser;\n  }\n}\n\nexport class GroupBy<T> implements Renderable {\n  constructor(\n    protected properties: Renderable[],\n    protected transformations?: Renderable,\n  ) {}\n\n  get [Symbol.toStringTag]() {\n    return 'GroupBy';\n  }\n\n  toJson() {\n    return {\n      $type: Types.rawType(this),\n      properties: this.properties.map((p) => p.toJson()),\n      transformations: this.transformations?.toJson(),\n    };\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): GroupBy<T> {\n    return new GroupBy<T>(\n      json['properties'].map((p: any) => RenderableFactory(p)),\n      RenderableFactory(json['transformations']),\n    );\n  }\n\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  }): string {\n    const properties = this.properties\n      .map((p) =>\n        render(p, {\n          aliases,\n          escape,\n          prefix,\n          parser,\n          options,\n        }),\n      )\n      .join(',');\n    const transformations = this.transformations\n      ? ', ' +\n        render(this.transformations, {\n          aliases,\n          escape,\n          prefix,\n          parser,\n          options,\n        })\n      : '';\n    return `groupby((${properties})${transformations})`;\n  }\n\n  clone() {\n    return new GroupBy(\n      Objects.clone(this.properties),\n      Objects.clone(this.transformations),\n    );\n  }\n  resolve(parser: any) {\n    return parser;\n  }\n}\n\nexport class Transformations<T> {\n  aggregate(value: Renderable, method: AggregateMethod, alias: string) {\n    return new Aggregate<T>(value, method, alias);\n  }\n  groupby(properties: Renderable[], options?: Renderable) {\n    return new GroupBy<T>(properties, options);\n  }\n  topCount(value: number, field: Renderable, normalize: Normalize = 'none') {\n    return new Function<T>('topcount', [value, field], normalize);\n  }\n\n  topSum(value: number, field: Renderable, normalize: Normalize = 'none') {\n    return new Function<T>('topsum', [value, field], normalize);\n  }\n  topPercent(value: number, field: Renderable, normalize: Normalize = 'none') {\n    return new Function<T>('toppercent', [value, field], normalize);\n  }\n\n  bottomCount(value: number, field: Renderable, normalize: Normalize = 'none') {\n    return new Function<T>('bottomcount', [value, field], normalize);\n  }\n\n  bottomSum(value: number, field: Renderable, normalize: Normalize = 'none') {\n    return new Function<T>('bottomsum', [value, field], normalize);\n  }\n\n  bottomPercent(\n    value: number,\n    field: Renderable,\n    normalize: Normalize = 'none',\n  ) {\n    return new Function<T>('bottompercent', [value, field], normalize);\n  }\n\n  identity() {\n    return new Function<T>('identity', [], 'none');\n  }\n  search(value: any, normalize: Normalize = 'none') {\n    return new Function<T>('search', [value], normalize);\n  }\n  filter(value: any, normalize: Normalize = 'none') {\n    return new Function<T>('filter', [value], normalize);\n  }\n\n  skip(value: number, normalize: Normalize = 'none') {\n    return new Function<T>('top', [value], normalize);\n  }\n\n  top(value: number, normalize: Normalize = 'none') {\n    return new Function<T>('top', [value], normalize);\n  }\n\n  orderby(value: any, normalize: Normalize = 'none') {\n    return new Function<T>('filter', [value], normalize);\n  }\n}\n\nexport class Type<T> implements Renderable {\n  constructor(\n    protected name: string,\n    protected type: string,\n    protected value?: any,\n  ) {}\n  get [Symbol.toStringTag]() {\n    return 'Type';\n  }\n\n  toJson() {\n    return {\n      $type: Types.rawType(this),\n      name: this.name,\n      type: this.type,\n      value: this.value,\n    };\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): Type<T> {\n    return new Type<T>(\n      json['name'],\n      json['type'],\n      RenderableFactory(json['value']),\n    );\n  }\n\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  }): string {\n    let value;\n    if (this.value) {\n      parser = resolve([this.value], parser);\n      let [left, right] = encode([this.value], parser, options);\n\n      value = render(left, { aliases, escape, prefix, parser, options });\n    }\n    return value\n      ? `${this.name}(${value}, '${this.type}')`\n      : `${this.name}('${this.type}')`;\n  }\n\n  clone() {\n    return new Type(this.name, this.type, Objects.clone(this.value));\n  }\n\n  resolve(parser: any) {\n    parser =\n      parser instanceof ODataStructuredTypeFieldParser &&\n      parser.isStructuredType()\n        ? parser.structuredType()\n        : parser;\n    return parser?.findChildParser((p: any) => p.isTypeOf(this.type));\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      $type: Types.rawType(this),\n      op: this.op,\n      values: this.values.map((v) =>\n        Types.isObject(v) && 'toJson' in v ? v.toJson() : v,\n      ),\n      alias: this.alias,\n    };\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): Lambda<T> {\n    return new Lambda<T>(\n      json['op'],\n      json['values'].map((v: any) => RenderableFactory(v)),\n      json['alias'],\n    );\n  }\n\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  }): string {\n    parser = resolve(this.values, parser);\n    let [left, right] = encode(this.values, parser, options);\n\n    left = render(left, { aliases, escape, prefix, parser });\n    if (right) {\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        options,\n        parser,\n      })})`;\n    } else {\n      return `${left}/${this.op}()`;\n    }\n  }\n\n  clone() {\n    return new Lambda(\n      this.op,\n      this.values.map((v) => Objects.clone(v)),\n      this.alias,\n    );\n  }\n  resolve(parser: any) {\n    return parser;\n  }\n}\n\nexport class LambdaOperators<T> {\n  any(left: T, right: any, alias?: string) {\n    return new Lambda('any', [left, right], alias);\n  }\n\n  all(left: T, right: any, alias?: string) {\n    return new Lambda('all', [left, right], 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 ODataTransformations<T> {}\nexport interface ODataTransformations<T> extends Transformations<T> {}\n\napplyMixins(ODataTransformations, [Transformations]);\nexport const transformations: ODataTransformations<any> =\n  new ODataTransformations<any>();\n\nexport class ODataSyntax<T> {}\nexport interface ODataSyntax<T>\n  extends ODataOperators<T>,\n    ODataFunctions<T>,\n    ODataTransformations<T> {}\napplyMixins(ODataSyntax, [\n  ODataOperators,\n  ODataFunctions,\n  ODataTransformations,\n]);\n\nexport const syntax: ODataSyntax<any> = new ODataSyntax<any>();\n","import { Parser, ParserOptions } from '../../../types';\nimport { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport {\n  FieldFactory,\n  functions,\n  ODataFunctions,\n  ODataOperators,\n  operators,\n  Renderable,\n  RenderableFactory,\n} from './syntax';\n\nexport type ComputeExpressionBuilder<T> = {\n  t: Required<T>;\n  e: () => ComputeExpression<T>;\n};\nexport class ComputeExpression<T> extends Expression<T> {\n  protected 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  get [Symbol.toStringTag]() {\n    return 'ComputeExpression';\n  }\n\n  static factory<T>(\n    opts: (\n      builder: ComputeExpressionBuilder<T>,\n      current?: ComputeExpression<T>,\n    ) => ComputeExpression<T>,\n    current?: ComputeExpression<T>,\n  ): ComputeExpression<T> {\n    return opts(\n      {\n        t: FieldFactory<Required<T>>(),\n        e: () => new ComputeExpression<T>(),\n      },\n      current,\n    ) as ComputeExpression<T>;\n  }\n\n  override toJson() {\n    const json = super.toJson();\n    return Object.assign(json, {\n      names: this.names,\n    });\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): ComputeExpression<T> {\n    return new ComputeExpression<T>({\n      children: json['children'].map((c: any) => RenderableFactory(c)),\n      names: json['names'],\n    });\n  }\n\n  render({\n    aliases,\n    escape,\n    prefix,\n    parser,\n    options,\n  }: {\n    aliases?: QueryCustomType[];\n    escape?: boolean;\n    prefix?: string;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  } = {}): string {\n    const children = this._children.map((n) =>\n      n.render({ aliases, escape, prefix, parser, options }),\n    );\n    return this.names\n      .map((name, index) => `${children[index]} as ${name}`)\n      .join(',');\n  }\n\n  clone() {\n    return new ComputeExpression<T>({\n      children: this._children.map((c) => c.clone()),\n      names: [...this.names],\n    });\n  }\n\n  private _add(name: string, node: Renderable): ComputeExpression<any> {\n    this.names.push(name);\n    this._children.push(node);\n    return this;\n  }\n\n  field<T>(\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 { ODataStructuredType } from '../../schema';\nimport { Parser, QueryOption } from '../../types';\nimport { Objects, Types } from '../../utils';\nimport {\n  alias,\n  Expand,\n  Filter,\n  OrderBy,\n  Select,\n  Transform,\n  normalizeValue,\n  raw,\n  duration,\n  binary,\n} from './builder';\nimport {\n  ComputeExpression,\n  ComputeExpressionBuilder,\n  FilterExpression,\n  FilterExpressionBuilder,\n  OrderByExpression,\n  OrderByExpressionBuilder,\n  SearchExpression,\n  SearchExpressionBuilder,\n  ExpandExpression,\n  ExpandExpressionBuilder,\n  SelectExpression,\n  SelectExpressionBuilder,\n  ApplyExpression,\n  ApplyExpressionBuilder,\n} from './expressions';\nimport {\n  ODataQueryArguments,\n  ODataQueryOptions,\n  pathAndParamsFromQueryOptions,\n} from './options';\n\nexport class ODataQueryOptionHandler<T> {\n  constructor(\n    private o: Map<QueryOption, any>,\n    private n: QueryOption,\n  ) {}\n\n  /**\n   * The name of the managed odata query option.\n   */\n  get name() {\n    return this.n;\n  }\n\n  /**\n   * Converts the managed odata query option to a json object.\n   * @returns {any}\n   */\n  toJson() {\n    return this.o.get(this.n);\n  }\n\n  /**\n   * Returns a boolean indicating if the managed odata query option is empty.\n   * @returns True if the managed odata query option is empty.\n   */\n  empty() {\n    return Types.isEmpty(this.o.get(this.n));\n  }\n\n  //#region Primitive Value\n  /**\n   * Get or Set the value of the managed odata query option.\n   * @param v The value to set.\n   * @returns\n   */\n  value(v?: any) {\n    if (v !== undefined) this.o.set(this.n, v);\n    return this.o.get(this.n);\n  }\n  //#endregion\n\n  //#region Array Value\n  private assertArray(): any[] {\n    if (!Types.isArray(this.o.get(this.n)))\n      this.o.set(this.n, this.o.has(this.n) ? [this.o.get(this.n)] : []);\n    return this.o.get(this.n);\n  }\n\n  /**\n   * Push value to the managed odata query option.\n   * @param value Value to push\n   */\n  push(value: any) {\n    this.assertArray().push(value);\n  }\n\n  /**\n   * Remove value from the managed odata query option.\n   * @param value Value to remove\n   */\n  remove(value: any) {\n    this.o.set(\n      this.n,\n      this.assertArray().filter((v) => v !== value),\n    );\n    // If only one and not is array... down to value\n    if (\n      this.o.get(this.n).length === 1 &&\n      !Types.isArray(this.o.get(this.n)[0])\n    )\n      this.o.set(this.n, this.o.get(this.n)[0]);\n  }\n\n  /**\n   * Return value at index of the managed odata query option.\n   * @param index Index of the value\n   * @returns The value\n   */\n  at(index: number) {\n    return this.assertArray()[index];\n  }\n\n  some(predicate: (value: any) => boolean) {\n    return this.assertArray().some(predicate);\n  }\n\n  every(predicate: (value: any) => boolean) {\n    return this.assertArray().every(predicate);\n  }\n\n  find(predicate: (value: any) => boolean) {\n    return this.assertArray().find(predicate);\n  }\n  //#endregion\n\n  //#region HashMap Value\n  private assertObject(create: boolean): { [name: string]: any } {\n    if (\n      !Types.isArray(this.o.get(this.n)) &&\n      Types.isPlainObject(this.o.get(this.n))\n    ) {\n      return this.o.get(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  /**\n   * Set the value for path in the managed odata query option.\n   * @param path Path for set the value\n   * @param value Value to set\n   */\n  set(path: string, value: any) {\n    let obj = this.assertObject(true);\n    Objects.set(obj, path, value);\n  }\n\n  /**\n   * Get the value for path from the managed odata query option.\n   * @param path The path from get the value\n   * @param def Default if not found\n   * @returns\n   */\n  get(path: string, def?: any): any {\n    let obj = this.assertObject(false) || {};\n    return Objects.get(obj, path, def);\n  }\n\n  /**\n   * Unset the value for path in the managed odata query option.\n   * @param path\n   */\n  unset(path: string) {\n    let obj = this.assertObject(true);\n    Objects.unset(obj, path);\n\n    if (Types.isArray(this.o.get(this.n))) {\n      this.o.set(\n        this.n,\n        this.o.get(this.n).filter((v: any) => !Types.isEmpty(v)),\n      );\n      if (this.o.get(this.n).length === 1)\n        this.o.set(this.n, this.o.get(this.n)[0]);\n    }\n  }\n\n  /**\n   * Test if the managed odata query option has the value.\n   * @param path The path fot test if the value is set\n   * @returns Boolean indicating if the value is set\n   */\n  has(path: string) {\n    let obj = this.assertObject(false) || {};\n    return Objects.has(obj, path);\n  }\n\n  /**\n   * Merge values from object into the managed odata query option.\n   * @param values Object to merge\n   * @returns\n   */\n  assign(values: { [attr: string]: any }) {\n    let obj = this.assertObject(true);\n    return Objects.merge(obj, values);\n  }\n  //#endregion\n\n  /**\n   * Clear the managed odata query option.\n   */\n  clear() {\n    this.o.delete(this.n);\n  }\n  toString({\n    escape,\n    parser,\n  }: { escape?: boolean; parser?: Parser<T> } = {}): string {\n    const [_, params] = pathAndParamsFromQueryOptions(\n      new Map<QueryOption, any>([[this.n, this.o.get(this.n)]]),\n      { escape, parser },\n    );\n    return params[`$${this.n}`];\n  }\n}\n\nexport class ODataQueryOptionsHandler<T> {\n  constructor(protected options: ODataQueryOptions<T>) {}\n\n  /**\n   * Create a raw odata value\n   * @param value The value to raw\n   * @returns The raw value\n   */\n  raw(value: any) {\n    return raw(value);\n  }\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  /**\n   * Create a duration odata value\n   * @param value The value to duration\n   * @returns The duration value\n   */\n  duration(value: any) {\n    return duration(value);\n  }\n\n  /**\n   * Create a binary odata value\n   * @param value The value to binary\n   * @returns The binary value\n   */\n  binary(value: any) {\n    return binary(value);\n  }\n\n  /**\n   * Normalize the given value to a valid odata value\n   * @param value The value to normalize\n   * @returns The normalized value\n   */\n  normalize(value: any) {\n    return normalizeValue(value);\n  }\n\n  /**\n   * Build and return a handler for modifying the $select option.\n   * If opts is given then set te value as new value for $select.\n   * @param opts Select<T> value or builder function for SelectExpression<T>\n   */\n  select(\n    opts: (\n      builder: SelectExpressionBuilder<T>,\n      current?: SelectExpression<T>,\n    ) => 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        QueryOption.select,\n        SelectExpression.factory(\n          opts,\n          this.options.expression(QueryOption.select),\n        ),\n      );\n    }\n    return this.options.option<Select<T>>(QueryOption.select, opts);\n  }\n\n  /**\n   * Build and return a handler for modifying the $expand option.\n   * If opts is given then set te value as new value for $expand.\n   * @param opts Expand<T> value or builder function for ExpandExpression<T>\n   */\n  expand(\n    opts: (\n      builder: ExpandExpressionBuilder<T>,\n      current?: ExpandExpression<T>,\n    ) => 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        QueryOption.expand,\n        ExpandExpression.factory(\n          opts,\n          this.options.expression(QueryOption.expand),\n        ),\n      );\n    }\n    return this.options.option<Expand<T>>(QueryOption.expand, opts);\n  }\n\n  /**\n   * Build and return a handler for modifying the $compute option.\n   * If opts is given then set te value as new value for $compute.\n   * @link https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_SystemQueryOptioncompute\n   * @param opts string value or builder function for ComputeExpression<T>\n   */\n  compute(\n    opts: (\n      builder: ComputeExpressionBuilder<T>,\n      current?: ComputeExpression<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        QueryOption.compute,\n        ComputeExpression.factory(\n          opts,\n          this.options.expression(QueryOption.compute),\n        ),\n      );\n    }\n    return this.options.option<string>(QueryOption.compute, opts);\n  }\n\n  /**\n   * Build and return a handler for modifying the $apply option.\n   * If opts is given then set te value as new value for $compute.\n   * @link http://docs.oasis-open.org/odata/odata-data-aggregation-ext/v4.0/cs02/odata-data-aggregation-ext-v4.0-cs02.html\n   * @param opts string value or builder function for ApplyExpression<T>\n   */\n  apply(\n    opts: (\n      builder: ApplyExpressionBuilder<T>,\n      current?: ApplyExpression<T>,\n    ) => ApplyExpression<T>,\n  ): ApplyExpression<T>;\n  apply(opts: string): ODataQueryOptionHandler<T>;\n  apply(): ODataQueryOptionHandler<T>;\n  apply(opts?: any): any {\n    if (Types.isFunction(opts)) {\n      return this.options.expression(\n        QueryOption.apply,\n        ApplyExpression.factory(\n          opts,\n          this.options.expression(QueryOption.apply),\n        ),\n      );\n    }\n    return this.options.option<string>(QueryOption.apply, opts);\n  }\n\n  /**\n   * Build and return a handler for modifying the $format option.\n   * If opts is given then set te value as new value for $format.\n   * @link https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_SystemQueryOptionformat\n   * @param opts string value for format\n   */\n  format(opts: string): ODataQueryOptionHandler<T>;\n  format(): ODataQueryOptionHandler<T>;\n  format(opts?: string): any {\n    return this.options.option<string>(QueryOption.format, opts);\n  }\n\n  /**\n   * Build and return a handler for modifying the $transform option.\n   * If opts is given then set te value as new value for $transform.\n   * @param opts string value for transform\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>>(QueryOption.transform, opts);\n  }\n\n  /**\n   * Build and return a handler for modifying the $search option.\n   * If opts is given then set te value as new value for $search.\n   * @param opts string value or builder function for SearchExpression<T>\n   */\n  search(\n    opts: (\n      builder: SearchExpressionBuilder<T>,\n      current?: 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        QueryOption.search,\n        SearchExpression.factory(\n          opts,\n          this.options.expression(QueryOption.search),\n        ),\n      );\n    }\n    return this.options.option<string>(QueryOption.search, opts);\n  }\n\n  /**\n   * Build and return a handler for modifying the $filter option.\n   * If opts is given then set te value as new value for $filter.\n   * @param opts Filter<T> value or builder function for FilterExpression<T>\n   */\n  filter(\n    opts: (\n      builder: FilterExpressionBuilder<T>,\n      current?: FilterExpression<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        QueryOption.filter,\n        FilterExpression.factory(\n          opts,\n          this.options.expression(QueryOption.filter),\n        ),\n      );\n    }\n    return this.options.option<Filter<T>>(QueryOption.filter, opts);\n  }\n\n  /**\n   * Build and return a handler for modifying the $orderby option.\n   * If opts is given then set te value as new value for $orderby.\n   * @param opts OrderBy<T> value or builder function for OrderByExpression<T>\n   */\n  orderBy(\n    opts: (\n      builder: OrderByExpressionBuilder<T>,\n      current?: OrderByExpression<T>,\n    ) => 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.option(\n        QueryOption.orderBy,\n        OrderByExpression.factory(\n          opts,\n          this.options.expression(QueryOption.orderBy),\n        ),\n      );\n    }\n    return this.options.option<OrderBy<T>>(QueryOption.orderBy, opts);\n  }\n\n  /**\n   * Build and return a handler for modifying the $top option.\n   * If opts is given then set te value as new value for $top.\n   * @param opts number value\n   */\n  top(opts: number): ODataQueryOptionHandler<T>;\n  top(): ODataQueryOptionHandler<T>;\n  top(opts?: number): any {\n    return this.options.option<number>(QueryOption.top, opts);\n  }\n\n  /**\n   * Build and return a handler for modifying the $skip option.\n   * If opts is given then set te value as new value for $skip.\n   * @param opts number value\n   */\n  skip(opts: number): ODataQueryOptionHandler<T>;\n  skip(): ODataQueryOptionHandler<T>;\n  skip(opts?: number): any {\n    return this.options.option<number>(QueryOption.skip, opts);\n  }\n\n  /**\n   * Build and return a handler for modifying the $skiptoken option.\n   * If opts is given then set te value as new value for $skiptoken.\n   * @param opts string value\n   */\n  skiptoken(opts: string): ODataQueryOptionHandler<T>;\n  skiptoken(): ODataQueryOptionHandler<T>;\n  skiptoken(opts?: string): any {\n    return this.options.option<string>(QueryOption.skiptoken, opts);\n  }\n\n  remove(...keys: QueryOption[]) {\n    this.options.remove(...keys);\n  }\n\n  keep(...keys: QueryOption[]) {\n    this.options.keep(...keys);\n  }\n\n  /**\n   * Shortcut for set $top, $skip, $skiptoken.\n   * @param param0 skip or top or skiptoken\n   */\n  paging({\n    skip,\n    skiptoken,\n    top,\n  }: {\n    skip?: number | null;\n    skiptoken?: string | null;\n    top?: number | null;\n  } = {}) {\n    if (skiptoken !== undefined) {\n      if (skiptoken !== null) {\n        this.skiptoken(skiptoken);\n      } else {\n        this.remove(QueryOption.skiptoken);\n      }\n    }\n    if (skip !== undefined) {\n      if (skip !== null) {\n        this.skip(skip);\n      } else {\n        this.remove(QueryOption.skip);\n      }\n    }\n    if (top !== undefined) {\n      if (top !== null) {\n        this.top(top);\n      } else {\n        this.remove(QueryOption.top);\n      }\n    }\n  }\n\n  /**\n   * Shortcut for clear pagination by unset $top, $skip, $skiptoken.\n   */\n  removePaging() {\n    this.remove(QueryOption.skip, QueryOption.top, QueryOption.skiptoken);\n  }\n\n  /**\n   * Shortcut for clear query.\n   */\n  clear() {\n    this.options.clear();\n  }\n\n  /**\n   * Store the query options from the current query.\n   */\n  store() {\n    return this.options.toQueryArguments();\n  }\n\n  /**\n   * Restore the given query options to the current query.\n   * @param options The query to be applied.\n   */\n  restore(options: ODataQueryArguments<T>) {\n    if (options.select !== undefined) {\n      if (options.select instanceof SelectExpression) {\n        this.options.expression(\n          QueryOption.select,\n          options.select as SelectExpression<T>,\n        );\n      } else if (options.select !== null) {\n        this.options.option(QueryOption.select, options.select);\n      } else {\n        this.options.remove(QueryOption.select);\n      }\n    }\n    if (options.expand !== undefined) {\n      if (options.expand instanceof ExpandExpression) {\n        this.options.expression(\n          QueryOption.expand,\n          options.expand as ExpandExpression<T>,\n        );\n      } else if (options.expand !== null) {\n        this.options.option(QueryOption.expand, options.expand);\n      } else {\n        this.options.remove(QueryOption.expand);\n      }\n    }\n    if (options.compute !== undefined) {\n      if (options.compute instanceof ComputeExpression) {\n        this.options.expression(\n          QueryOption.compute,\n          options.compute as ComputeExpression<T>,\n        );\n      } else if (options.compute !== null) {\n        this.options.option(QueryOption.compute, options.compute);\n      } else {\n        this.options.remove(QueryOption.compute);\n      }\n    }\n    if (options.apply !== undefined) {\n      if (options.apply instanceof ApplyExpression) {\n        this.options.expression(\n          QueryOption.apply,\n          options.apply as ApplyExpression<T>,\n        );\n      } else if (options.apply !== null) {\n        this.options.option(QueryOption.apply, options.apply);\n      } else {\n        this.options.remove(QueryOption.apply);\n      }\n    }\n    if (options.transform !== undefined) {\n      if (options.transform !== null) {\n        this.options.option(QueryOption.transform, options.transform);\n      } else {\n        this.options.remove(QueryOption.transform);\n      }\n    }\n    if (options.search !== undefined) {\n      if (options.search instanceof SearchExpression) {\n        this.options.expression(\n          QueryOption.search,\n          options.search as SearchExpression<T>,\n        );\n      } else if (options.search !== null) {\n        this.options.option(QueryOption.search, options.search);\n      } else {\n        this.options.remove(QueryOption.search);\n      }\n    }\n    if (options.filter !== undefined) {\n      if (options.filter instanceof FilterExpression) {\n        this.options.expression(\n          QueryOption.filter,\n          options.filter as FilterExpression<T>,\n        );\n      } else if (options.filter !== null) {\n        this.options.option(QueryOption.filter, options.filter);\n      } else {\n        this.options.remove(QueryOption.filter);\n      }\n    }\n    if (options.orderBy !== undefined) {\n      if (options.orderBy instanceof OrderByExpression) {\n        this.options.expression(\n          QueryOption.orderBy,\n          options.orderBy as OrderByExpression<T>,\n        );\n      } else if (options.orderBy !== null) {\n        this.options.option(QueryOption.orderBy, options.orderBy);\n      } else {\n        this.options.remove(QueryOption.orderBy);\n      }\n    }\n    this.paging(options);\n  }\n\n  toJson() {\n    return this.options.toJson();\n  }\n\n  fromJson(json: { [name: string]: any }) {\n    this.options.fromJson(json);\n  }\n\n  toString({\n    escape,\n    parser,\n  }: { escape?: boolean; parser?: Parser<T> } = {}): string {\n    return this.options.toString({ escape, parser });\n  }\n}\n","import { Parser, ParserOptions, QueryOption } from '../../types';\nimport { Objects, Types } from '../../utils';\nimport {\n  buildPathAndQuery,\n  Expand,\n  Filter,\n  OrderBy,\n  QueryCustomType,\n  raw,\n  Select,\n  Transform,\n} from './builder';\nimport {\n  ComputeExpression,\n  Expression,\n  FilterExpression,\n  OrderByExpression,\n  RenderableFactory,\n  SearchExpression,\n} from './expressions';\nimport { ApplyExpression } from './expressions/apply';\nimport { ExpandExpression } from './expressions/expand';\nimport { SelectExpression } from './expressions/select';\nimport { ODataQueryOptionHandler } from './handlers';\n\nexport type ODataQueryArguments<T> = {\n  [QueryOption.select]?: Select<T> | SelectExpression<T> | null;\n  [QueryOption.expand]?: Expand<T> | ExpandExpression<T> | null;\n  [QueryOption.compute]?: string | ComputeExpression<T> | null;\n  [QueryOption.apply]?: string | ApplyExpression<T> | null;\n  [QueryOption.filter]?: Filter<T> | FilterExpression<T> | null;\n  [QueryOption.search]?: string | SearchExpression<T> | null;\n  [QueryOption.transform]?: Transform<T> | null;\n  [QueryOption.orderBy]?: OrderBy<T> | OrderByExpression<T> | null;\n  [QueryOption.top]?: number | null;\n  [QueryOption.skip]?: number | null;\n  [QueryOption.skiptoken]?: string | null;\n  [QueryOption.format]?: string | null;\n  [QueryOption.levels]?: number | 'max' | null;\n  [QueryOption.count]?: boolean | null;\n};\n\n// Create a path and params tuple from the query options\nexport const pathAndParamsFromQueryOptions = <T>(\n  values: Map<QueryOption, any>,\n  {\n    escape,\n    parser,\n    options,\n  }: { escape?: boolean; parser?: Parser<T>; options?: ParserOptions } = {},\n): [string, { [name: string]: any }] => {\n  const aliases: QueryCustomType[] = [];\n  const queryOptions = [\n    QueryOption.select,\n    QueryOption.filter,\n    QueryOption.search,\n    QueryOption.compute,\n    QueryOption.apply,\n    QueryOption.transform,\n    QueryOption.orderBy,\n    QueryOption.top,\n    QueryOption.skip,\n    QueryOption.skiptoken,\n    QueryOption.expand,\n    QueryOption.format,\n    QueryOption.levels,\n    QueryOption.count,\n  ]\n    .filter((key) => values.has(key) && !Types.isEmpty(values.get(key)))\n    .reduce((acc, key) => {\n      let value = values.get(key);\n      if (\n        Types.rawType(value).endsWith('Expression') ||\n        (Types.isArray(value) &&\n          value.some((v: any) => Types.rawType(v).endsWith('Expression')))\n      ) {\n        value = Types.isArray(value)\n          ? value.map((v: Expression<T>) =>\n              Types.rawType(v).endsWith('Expression')\n                ? raw(v.render({ aliases, escape, parser, options }))\n                : v,\n            )\n          : raw(\n              (value as Expression<T>).render({\n                aliases,\n                escape,\n                parser,\n                options,\n              }),\n            );\n      }\n      return Object.assign(acc, { [key]: value });\n    }, {});\n  return buildPathAndQuery<any>({ ...queryOptions, aliases, escape });\n};\n\nexport class ODataQueryOptions<T> {\n  private _values: Map<QueryOption, any>;\n\n  constructor(values?: Map<QueryOption, any>) {\n    this._values = values ?? new Map<QueryOption, any>();\n  }\n\n  pathAndParams({\n    escape,\n    parser,\n    options,\n  }: {\n    escape?: boolean;\n    parser?: Parser<T>;\n    options?: ParserOptions;\n  } = {}): [string, { [name: string]: any }] {\n    return pathAndParamsFromQueryOptions<T>(this._values, {\n      escape,\n      parser,\n      options,\n    });\n  }\n\n  toString({\n    escape,\n    parser,\n  }: { escape?: boolean; parser?: Parser<T> } = {}): string {\n    const [path, params] = this.pathAndParams({ escape, parser });\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 [...this._values.keys()].reduce((acc, key) => {\n      let value = this._values.get(key);\n      value = 'toJson' in value ? value.toJson() : value;\n      return Object.assign(acc, { [key]: value });\n    }, {});\n  }\n\n  fromJson<T>(json: { [name: string]: any }): this {\n    Object.entries(json || {}).forEach(([key, value]) => {\n      this._values.set(key as QueryOption, RenderableFactory(value));\n    });\n    return this;\n  }\n\n  static fromJson<T>(json: { [name: string]: any }): ODataQueryOptions<T> {\n    const entries = Object.entries(json || {}).map(([key, value]) => [\n      key,\n      RenderableFactory(value),\n    ]) as [QueryOption, any][];\n    new Map(entries);\n    return new ODataQueryOptions<T>(new Map(entries));\n  }\n\n  toQueryArguments(): ODataQueryArguments<T> {\n    return {\n      select: this._values.get(QueryOption.select) ?? null,\n      expand: this._values.get(QueryOption.expand) ?? null,\n      transform: this._values.get(QueryOption.transform) ?? null,\n      compute: this._values.get(QueryOption.compute) ?? null,\n      apply: this._values.get(QueryOption.apply) ?? null,\n      search: this._values.get(QueryOption.search) ?? null,\n      filter: this._values.get(QueryOption.filter) ?? null,\n      orderBy: this._values.get(QueryOption.orderBy) ?? null,\n      top: this._values.get(QueryOption.top) ?? null,\n      skip: this._values.get(QueryOption.skip) ?? null,\n      skiptoken: this._values.get(QueryOption.skiptoken) ?? null,\n      levels: this._values.get(QueryOption.levels) ?? null,\n      count: this._values.get(QueryOption.count) ?? null,\n    } as ODataQueryArguments<T>;\n  }\n\n  clone<O>() {\n    return new ODataQueryOptions<O>(Objects.clone(this._values));\n  }\n\n  // Set Renderable\n  expression(key: QueryOption, exp?: Expression<T>) {\n    if (exp !== undefined) this._values.set(key, exp);\n    return this._values.get(key);\n  }\n\n  // Option Handler\n  option<O>(key: QueryOption, opts?: O) {\n    if (opts !== undefined) this._values.set(key, opts);\n    return new ODataQueryOptionHandler<O>(this._values, key);\n  }\n\n  // Query Options tools\n  has(key: QueryOption) {\n    return this._values.has(key);\n  }\n\n  remove(...keys: QueryOption[]) {\n    for (let key of this._values.keys()) {\n      if (keys.includes(key)) this._values.delete(key);\n    }\n  }\n\n  keep(...keys: QueryOption[]) {\n    for (let key of this._values.keys()) {\n      if (!keys.includes(key)) this._values.delete(key);\n    }\n  }\n\n  // Clear\n  clear() {\n    this._values.clear();\n  }\n}\n","import { PathSegment } from '../../types';\nimport { Types } from '../../utils';\nimport { EntityKey } from '../resource';\nimport { ODataPathSegments, ODataSegment } from './segments';\n\nexport class SegmentHandler {\n  constructor(private segment: ODataSegment) {}\n  get name() {\n    return this.segment.name;\n  }\n  outgoingType(value?: string) {\n    if (value !== undefined) this.segment.outgoingType = value;\n    return this.segment.outgoingType;\n  }\n  incomingType(value?: string) {\n    if (value !== undefined) this.segment.incomingType = value;\n    return this.segment.incomingType;\n  }\n  bindingType(value?: string) {\n    if (value !== undefined) this.segment.bindingType = value;\n    return this.segment.bindingType;\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(PathSegment.entitySet);\n  }\n  singleton() {\n    return this.segments.get(PathSegment.singleton);\n  }\n  action() {\n    return this.segments.get(PathSegment.action);\n  }\n  function() {\n    return this.segments.get(PathSegment.function);\n  }\n  keys(values?: (EntityKey<T> | undefined)[]) {\n    return this.segments.keys(values);\n  }\n  property() {\n    return this.segments.get(PathSegment.property);\n  }\n  navigationProperty() {\n    return this.segments.get(PathSegment.navigationProperty);\n  }\n}\n","import { PATH_SEPARATOR } from '../../constants';\nimport { Parser, ParserOptions, PathSegment } 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: PathSegment;\n  path: string;\n  outgoingType?: string;\n  incomingType?: string;\n  bindingType?: string;\n  key?: any;\n  parameters?: any;\n};\n\nfunction pathSegmentsBuilder(\n  segment: ODataSegment,\n  escape: boolean = false,\n  parser?: Parser<any>,\n  options?: ParserOptions,\n): [string, { [name: string]: any }] {\n  if (segment.name === PathSegment.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    // HACK: Remove parenthesis\n    if (\n      path.endsWith('()') &&\n      options?.nonParenthesisForEmptyParameterFunction\n    ) {\n      path = path.substring(0, path.length - 2);\n    }\n\n    return [path, params];\n  } else {\n    //TODO: Parser key\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 const pathAndParamsFromSegments = (\n  segments: ODataSegment[],\n  {\n    escape,\n    parser,\n    options,\n  }: {\n    escape?: boolean;\n    parser?: Parser<any>;\n    options?: ParserOptions;\n  } = {},\n): [string, { [name: string]: any }] => {\n  const result = segments.reduce(\n    (acc, segment) => {\n      const [path, params] = pathSegmentsBuilder(\n        segment,\n        escape,\n        parser,\n        options,\n      );\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\nexport class ODataPathSegments {\n  private _segments: ODataSegment[];\n\n  constructor(segments?: ODataSegment[]) {\n    this._segments = segments || [];\n  }\n\n  pathAndParams({\n    escape,\n    parser,\n    options,\n  }: {\n    escape?: boolean;\n    parser?: Parser<any>;\n    options?: ParserOptions;\n  } = {}): [string, { [name: string]: any }] {\n    return pathAndParamsFromSegments(this._segments, {\n      escape,\n      parser,\n      options,\n    });\n  }\n\n  types({ key = false }: { key?: boolean } = {}): string[] {\n    return this.segments({ key })\n      .map((s) => s.outgoingType())\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({ escape }: { escape?: boolean } = {}): string {\n    const [path, params] = this.pathAndParams({ escape });\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.incomingType !== undefined) json.incomingType = s.incomingType;\n      if (s.outgoingType !== undefined) json.outgoingType = s.outgoingType;\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  static fromJson(json: { [name: string]: any }[]): ODataPathSegments {\n    return new ODataPathSegments(\n      json.map((s: any) => ({\n        name: s.name,\n        path: s.path,\n        type: s.type,\n        key: s.key,\n        parameters: s.parameters,\n      })),\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            PathSegment.entitySet,\n            PathSegment.navigationProperty,\n            PathSegment.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 { HttpContext, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { ODataApi } from '../api';\nimport {\n  $BATCH,\n  $QUERY,\n  ACCEPT,\n  APPLICATION_JSON,\n  CONTENT_TYPE_ANY,\n  IF_MATCH_HEADER,\n  IF_NONE_MATCH_HEADER,\n  PREFER,\n  TEXT_PLAIN,\n} from '../constants';\nimport { FetchPolicy, ParserOptions, QueryOption } from '../types';\nimport { Http, Types } from '../utils';\nimport { ODataResource } from './resource';\nimport { ODataOptions } from './types';\n\nexport class ODataRequest<T> {\n  readonly api: ODataApi;\n  readonly observe: 'events' | 'response';\n  readonly context?: HttpContext;\n  readonly reportProgress?: boolean;\n  readonly withCredentials?: boolean;\n  readonly bodyQueryOptions: QueryOption[];\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\n  constructor(init: {\n    method: string;\n    api: ODataApi;\n    resource: ODataResource<T>;\n    body: any;\n    observe: 'events' | 'response';\n    context?: HttpContext;\n    etag?: string;\n    headers?: HttpHeaders | { [header: string]: string | string[] };\n    reportProgress?: boolean;\n    params?:\n      | HttpParams\n      | {\n          [param: string]:\n            | string\n            | number\n            | boolean\n            | ReadonlyArray<string | number | boolean>;\n        };\n    responseType?:\n      | 'arraybuffer'\n      | 'blob'\n      | 'json'\n      | 'text'\n      | 'value'\n      | 'property'\n      | 'entity'\n      | 'entities';\n    fetchPolicy?: FetchPolicy;\n    parserOptions?: ParserOptions;\n    withCredentials?: boolean;\n    bodyQueryOptions?: QueryOption[];\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    this.context = init.context;\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)\n      this._body = this.resource.serialize(this._body, init.parserOptions);\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      ...(this.api.options.bodyQueryOptions || []),\n      ...(init.bodyQueryOptions || []),\n    ];\n\n    // The Path and Params from resource\n    const [resourcePath, resourceParams] = this.resource.pathAndParams(\n      init.parserOptions,\n    );\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        `${CONTENT_TYPE_ANY}`,\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    // Omit Null Values\n    if (\n      this.api.options.prefer?.omitNullValues === true &&\n      ['GET'].indexOf(this._method) !== -1\n    )\n      prefer.push(`omit-values=nulls`);\n    // Continue on Error\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\n  static factory(\n    api: ODataApi,\n    method: string,\n    resource: ODataResource<any>,\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      observe: 'events' | 'response';\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n    },\n  ) {\n    const apiOptions = 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    return new ODataRequest({\n      method,\n      etag,\n      api,\n      resource,\n      params,\n      context: options.context,\n      body: options.body,\n      observe: options.observe,\n      headers: options.headers,\n      reportProgress: options.reportProgress,\n      responseType: options.responseType,\n      fetchPolicy: options.fetchPolicy,\n      parserOptions: options.parserOptions,\n      withCredentials: options.withCredentials,\n      bodyQueryOptions: options.bodyQueryOptions,\n    });\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.isQueryBody() ? `${this._path}/${$QUERY}` : this._path;\n  }\n\n  get method() {\n    return this.isQueryBody() ? 'POST' : this._method;\n  }\n\n  get body() {\n    return this.isQueryBody()\n      ? Http.splitHttpParams(\n          this._params,\n          this.bodyQueryOptions.map((name) => `$${name}`),\n        )[1].toString()\n      : this._body;\n  }\n\n  get params() {\n    return this.isQueryBody()\n      ? Http.splitHttpParams(\n          this._params,\n          this.bodyQueryOptions.map((name) => `$${name}`),\n        )[0]\n      : this._params;\n  }\n\n  get headers() {\n    return this.isQueryBody()\n      ? Http.mergeHttpHeaders(this._headers, { CONTENT_TYPE: TEXT_PLAIN })\n      : this._headers;\n  }\n\n  get pathWithParams() {\n    return this.params.keys().length > 0\n      ? `${this.path}?${this.params}`\n      : this.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  get cacheKey() {\n    return this._params.keys().length > 0\n      ? `${this._path}?${this._params}`\n      : this._path;\n  }\n\n  isQueryBody() {\n    return (\n      this._method === 'GET' &&\n      this.bodyQueryOptions.length > 0 &&\n      this.bodyQueryOptions.some((name) => this._params.has(`$${name}`))\n    );\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 { Observable } from 'rxjs';\nimport { ODataApi } from '../api';\nimport {\n  DEFAULT_VERSION,\n  PARAM_SEPARATOR,\n  QUERY_SEPARATOR,\n  VALUE_SEPARATOR,\n} from '../constants';\nimport { ODataHelper } from '../helper';\nimport { ModelInterface, ODataCollection, ODataModel } from '../models';\nimport { ODataStructuredType } from '../schema';\nimport {\n  ParserOptions,\n  Parser,\n  QueryOption,\n  PathSegment,\n  StructuredTypeFieldConfig,\n} from '../types';\nimport { Objects, Strings, Types } from '../utils';\nimport { ODataPathSegments, ODataPathSegmentsHandler } from './path';\nimport {\n  isQueryCustomType,\n  ODataQueryOptions,\n  ODataQueryOptionsHandler,\n} from './query';\nimport {\n  ApplyExpression,\n  ApplyExpressionBuilder,\n  QueryCustomType,\n} from './query';\nimport { ODataOptions } from './types';\nimport {\n  ODataEntitiesAnnotations,\n  ODataEntityAnnotations,\n} from '../annotations';\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  protected pathSegments: ODataPathSegments;\n  protected queryOptions: ODataQueryOptions<T>;\n  constructor(\n    api: ODataApi,\n    {\n      segments,\n      query,\n    }: {\n      segments?: ODataPathSegments;\n      query?: ODataQueryOptions<T>;\n    } = {},\n  ) {\n    this.api = api;\n    this.pathSegments = segments ?? new ODataPathSegments();\n    this.queryOptions = query ?? new ODataQueryOptions();\n  }\n\n  /**\n   * @returns string The outgoing type of the resource\n   */\n  outgoingType() {\n    return this.pathSegments.last()?.outgoingType();\n  }\n\n  /**\n   * @returns string The incoming type of the resource\n   */\n  incomingType() {\n    return this.pathSegments.last()?.incomingType();\n  }\n\n  /**\n   * @returns string The binding type of the resource\n   */\n  bindingType() {\n    return this.pathSegments.last()?.bindingType();\n  }\n\n  /**\n   * @returns string All covered types of the resource\n   */\n  types(): string[] {\n    return this.pathSegments.types();\n  }\n\n  callable() {\n    const type = this.outgoingType() ?? this.incomingType();\n    return type !== undefined ? this.api.callable<T>(type) : undefined;\n  }\n\n  enumType() {\n    const type = this.outgoingType() ?? this.incomingType();\n    return type !== undefined ? this.api.enumType<T>(type) : undefined;\n  }\n\n  structuredType() {\n    const type = this.outgoingType() ?? this.incomingType();\n    return type !== undefined ? this.api.structuredType<T>(type) : undefined;\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  hasEntityKey() {\n    return Boolean(this.pathSegments.get(PathSegment.entitySet)?.hasKey());\n  }\n\n  clearKey() {\n    return this.pathSegments.last({ key: true })?.clearKey();\n  }\n\n  //#region Models\n  asModel(\n    entity?: Partial<T> | { [name: string]: any },\n  ): ODataModel<T> & ModelInterface<T>;\n  asModel(\n    entity: Partial<T> | { [name: string]: any },\n    {\n      reset,\n      annots,\n      ModelType,\n    }: {\n      reset?: boolean;\n      annots?: ODataEntityAnnotations<T>;\n      ModelType?: typeof ODataModel;\n    },\n  ): ODataModel<T> & ModelInterface<T>;\n  asModel<M extends ODataModel<T>>(\n    entity?: Partial<T> | { [name: string]: any },\n  ): M;\n  asModel<M extends ODataModel<T>>(\n    entity: Partial<T> | { [name: string]: any },\n    {\n      reset,\n      annots,\n      ModelType,\n    }: {\n      reset?: boolean;\n      annots?: ODataEntityAnnotations<T>;\n      ModelType?: typeof ODataModel;\n    },\n  ): M;\n  asModel(\n    entity?: Partial<T> | { [name: string]: any },\n    {\n      reset,\n      annots,\n      ModelType,\n    }: {\n      reset?: boolean;\n      annots?: ODataEntityAnnotations<T>;\n      ModelType?: typeof ODataModel;\n    } = {},\n  ) {\n    reset ??= annots !== undefined;\n    let resource: ODataResource<T> = this as ODataResource<T>;\n    const type = annots?.type ?? this.incomingType();\n    if (type === undefined) throw Error(`No type for model`);\n    if (ModelType === undefined) ModelType = 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.restore(this.queryOptions.toQueryArguments()));\n    }\n    return new ModelType(entity, { resource, annots, reset });\n  }\n\n  asCollection(\n    entities?: Partial<T>[] | { [name: string]: any }[],\n  ): ODataCollection<T, ODataModel<T> & ModelInterface<T>>;\n  asCollection(\n    entities: Partial<T>[] | { [name: string]: any }[],\n    {\n      reset,\n      annots,\n      CollectionType,\n    }: {\n      reset?: boolean;\n      annots?: ODataEntitiesAnnotations<T>;\n      CollectionType?: typeof ODataCollection;\n    },\n  ): ODataCollection<T, ODataModel<T> & ModelInterface<T>>;\n  asCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n    entities?: Partial<T>[] | { [name: string]: any }[],\n  ): C;\n  asCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n    entities: Partial<T>[] | { [name: string]: any }[],\n    {\n      reset,\n      annots,\n      CollectionType,\n    }: {\n      reset?: boolean;\n      annots?: ODataEntitiesAnnotations<T>;\n      CollectionType?: typeof ODataCollection;\n    },\n  ): C;\n  asCollection(\n    entities?: Partial<T>[] | { [name: string]: any }[],\n    {\n      reset,\n      annots,\n      CollectionType,\n    }: {\n      reset?: boolean;\n      annots?: ODataEntitiesAnnotations<T>;\n      CollectionType?: typeof ODataCollection;\n    } = {},\n  ) {\n    reset ??= annots !== undefined;\n    let resource: ODataResource<T> = this as ODataResource<T>;\n    const type = annots?.type ?? this.incomingType();\n    if (type === undefined) throw Error(`No type for collection`);\n    if (CollectionType === undefined)\n      CollectionType = this.api.collectionForType(type);\n    let entitySet = annots?.entitySet;\n    if (entitySet !== undefined) {\n      resource = this.api.entitySet<T>(entitySet);\n      resource.query((q) => q.restore(this.queryOptions.toQueryArguments()));\n    }\n    return new CollectionType(entities, { resource, annots, reset });\n  }\n  //#endregion\n\n  isTypeOf(other: ODataResource<any>) {\n    const thisStructured = this.structuredType();\n    const otherStructured = other.structuredType();\n    return (\n      thisStructured !== undefined &&\n      otherStructured !== undefined &&\n      thisStructured.isTypeOf(otherStructured)\n    );\n  }\n\n  isSubtypeOf(other: ODataResource<any>) {\n    const thisStructured = this.structuredType();\n    const otherStructured = other.structuredType();\n    return (\n      thisStructured !== undefined &&\n      otherStructured !== undefined &&\n      thisStructured.isSubtypeOf(otherStructured)\n    );\n  }\n\n  isSupertypeOf(other: ODataResource<any>) {\n    const thisStructured = this.structuredType();\n    const otherStructured = other.structuredType();\n    return (\n      thisStructured !== undefined &&\n      otherStructured !== undefined &&\n      thisStructured.isSupertypeOf(otherStructured)\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(\n    { escape, ...options }: ParserOptions & { escape?: boolean } = {\n      escape: false,\n    },\n  ): [string, { [name: string]: any }] {\n    const type = this.outgoingType();\n    const parser =\n      type !== undefined ? this.api.parserForType<T>(type) : undefined;\n    const [spath, sparams] = this.pathSegments.pathAndParams({\n      escape,\n      parser,\n      options,\n    });\n    const [, qparams] = this.queryOptions.pathAndParams({\n      escape,\n      parser,\n      options,\n    });\n\n    return [spath, { ...sparams, ...qparams }];\n  }\n\n  endpointUrl({\n    escape = false,\n    params = true,\n    ...options\n  }: ParserOptions & { escape?: boolean; params?: boolean } = {}): string {\n    let [path, qparams] = this.pathAndParams({ escape, ...options });\n    if (params && !Types.isEmpty(qparams)) {\n      path = `${path}${QUERY_SEPARATOR}${Object.entries(qparams)\n        .map((e) => `${e[0]}${VALUE_SEPARATOR}${e[1]}`)\n        .join(PARAM_SEPARATOR)}`;\n    }\n    return `${this.api.serviceRootUrl}${path}`;\n  }\n\n  toString(\n    { escape, ...options }: ParserOptions & { escape?: boolean } = {\n      escape: false,\n    },\n  ): string {\n    let [path, params] = this.pathAndParams({ escape, ...options });\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(): ODataResource<T> {\n    const Ctor = this.constructor as typeof ODataResource;\n    return new Ctor(this.api, {\n      segments: this.cloneSegments(),\n      query: this.cloneQuery<T>(),\n    });\n  }\n\n  private __parser(\n    value: any,\n    options?: ParserOptions,\n    resourceType?: string,\n    bindingType?: string,\n  ): Parser<T> | undefined {\n    const dataType =\n      options !== undefined && Types.isPlainObject(value)\n        ? ODataHelper[options.version ?? DEFAULT_VERSION].type(value)\n        : undefined;\n    if (dataType !== undefined) {\n      // Parser from data type\n      return this.api.parserForType<T>(dataType);\n    } else if (resourceType !== undefined) {\n      // Parser from resource type\n      return this.api.parserForType<T>(resourceType, bindingType);\n    }\n    return undefined;\n  }\n\n  deserialize(value: any, options?: ParserOptions): any {\n    const resourceType = this.incomingType();\n    const bindingType = this.bindingType();\n    const _d = (value: any, options?: ParserOptions) => {\n      const parser = this.__parser(value, options, resourceType, bindingType);\n      return parser !== undefined ? parser.deserialize(value, options) : value;\n    };\n    return Array.isArray(value)\n      ? value.map((v) => _d(v, options))\n      : _d(value, options);\n  }\n\n  serialize(value: any, options?: ParserOptions): any {\n    const resourceType = this.outgoingType();\n    const bindingType = this.bindingType();\n    const _s = (value: any, options?: ParserOptions) => {\n      const parser = this.__parser(value, options, resourceType, bindingType);\n      return parser !== undefined ? parser.serialize(value, options) : value;\n    };\n    return Array.isArray(value)\n      ? value.map((v) => _s(v, options))\n      : _s(value, options);\n  }\n\n  encode(value: any, options?: ParserOptions): any {\n    const resourceType = this.outgoingType();\n    const bindingType = this.bindingType();\n    const _e = (value: any, options?: ParserOptions) => {\n      const parser = this.__parser(value, options, resourceType, bindingType);\n      return parser !== undefined ? parser.encode(value, options) : value;\n    };\n    return Array.isArray(value)\n      ? value.map((v) => _e(v, options))\n      : _e(value, 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    return this;\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(\n    f: (q: ODataPathSegmentsHandler<T>, s?: ODataStructuredType<T>) => void,\n  ) {\n    const type = this.outgoingType();\n    f(\n      new ODataPathSegmentsHandler<T>(this.pathSegments),\n      type !== undefined ? this.api.structuredType<T>(type) : undefined,\n    );\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(\n    f: (q: ODataQueryOptionsHandler<T>, s?: ODataStructuredType<T>) => void,\n  ) {\n    const type = this.outgoingType();\n    f(\n      new ODataQueryOptionsHandler<T>(this.queryOptions),\n      type !== undefined ? this.api.structuredType<T>(type) : undefined,\n    );\n    return this;\n  }\n\n  transform<R>(\n    opts: (\n      builder: ApplyExpressionBuilder<T>,\n      current?: ApplyExpression<T>,\n    ) => ApplyExpression<T>,\n    {\n      type,\n      fields,\n    }: {\n      type?: string;\n      fields?: { [name: string]: StructuredTypeFieldConfig };\n    } = {},\n  ): ODataResource<R> {\n    if (type === undefined) {\n      type = Strings.uniqueId({ prefix: 'Transformation', suffix: 'Type' });\n    }\n\n    // Resolve Structured Type\n    let structuredType = this.api.findStructuredType<R>(type);\n    if (structuredType === undefined) {\n      // Resolve Schema\n      let schema = this.api.findSchema(type);\n      if (schema === undefined) {\n        const namespace =\n          type.substring(0, type.lastIndexOf('.')) ?? this.api.name!;\n        schema = this.api.createSchema({ namespace });\n      }\n      const name = type.substring(type.lastIndexOf('.'));\n      structuredType = schema.createStructuredType({ name, fields });\n    }\n\n    // Segments\n    const segments = this.cloneSegments();\n    segments.last()?.incomingType(structuredType.type());\n\n    // Query\n    const query = this.cloneQuery<any>();\n    const handler = new ODataQueryOptionsHandler<T>(query);\n    handler.apply(opts);\n\n    const Ctor = this.constructor as typeof ODataResource;\n    return new Ctor(this.api, {\n      segments,\n      query,\n    });\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    const type = this.outgoingType();\n    const structured =\n      type !== undefined ? this.api.structuredType<T>(type) : undefined;\n    return ODataResource.resolveKey<T>(value, structured);\n  }\n  //#endregion\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?: QueryOption[];\n    } = {},\n  ): Observable<any> {\n    return this.api.request<T>('GET', this, 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.api.request<T>('POST', this, { 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.api.request<T>('PUT', this, { 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.api.request<T>('PATCH', this, { 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.api.request<T>('DELETE', this, options);\n  }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataCollection, ODataModel } from '../../models';\nimport { PathSegment } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataResource } from '../resource';\nimport {\n  ODataEntitiesOptions,\n  ODataEntityOptions,\n  ODataOptions,\n  ODataPropertyOptions,\n} from './options';\nimport { ODataEntities, ODataEntity, ODataProperty } from '../response';\n\nexport class ODataActionResource<P, R> extends ODataResource<R> {\n  //#region Factory\n  static factory<P, R>(\n    api: ODataApi,\n    {\n      path,\n      outgoingType,\n      incomingType,\n      bindingType,\n      segments,\n    }: {\n      path: string;\n      outgoingType?: string;\n      incomingType?: string;\n      bindingType?: string;\n      segments?: ODataPathSegments;\n    },\n  ) {\n    segments = segments ?? new ODataPathSegments();\n\n    const segment = segments.add(PathSegment.action, path);\n    if (outgoingType !== undefined) {\n      segment.outgoingType(outgoingType);\n    }\n    if (incomingType !== undefined) {\n      segment.incomingType(incomingType);\n    }\n    if (bindingType !== undefined) {\n      segment.bindingType(bindingType);\n    }\n    return new ODataActionResource<P, R>(api, { segments });\n  }\n\n  static fromResource<P, R>(resource: ODataResource<any>, path: string) {\n    const baseType = resource.outgoingType();\n    const callable = resource.api.findCallable<R>(path, baseType);\n\n    const outgoingType = callable?.type();\n    const bindingType = callable?.binding()?.type;\n    const incomingType = callable?.returnType();\n\n    const action = ODataActionResource.factory<P, R>(resource.api, {\n      path,\n      outgoingType,\n      bindingType,\n      incomingType,\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.findEntitySet(bindingType);\n      if (entitySet !== undefined) {\n        action.segment((s) => s.entitySet().path(entitySet!.name));\n      }\n    }\n\n    return action;\n  }\n\n  override clone(): ODataActionResource<P, R> {\n    return super.clone() as ODataActionResource<P, R>;\n  }\n  //#endregion\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(\n    params: P | null,\n    options?: { alias?: boolean; responseType?: 'blob' } & ODataOptions,\n  ): Observable<Blob>;\n  call(\n    params: P | null,\n    options?: { alias?: boolean; responseType?: 'arraybuffer' } & ODataOptions,\n  ): Observable<ArrayBuffer>;\n  call(\n    params: P | null,\n    options?: { alias?: boolean; responseType?: 'none' } & ODataOptions,\n  ): Observable<null>;\n  call(\n    params: P | null,\n    options: ODataEntityOptions &\n      ODataEntitiesOptions &\n      ODataPropertyOptions = {},\n  ): Observable<any> {\n    return this.clone().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(params: P | null, options: ODataOptions = {}) {\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(params: P | null, options: ODataOptions = {}) {\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(\n    params: P | null,\n    options: ODataOptions & { ModelType?: typeof ODataModel } = {},\n  ) {\n    return this.call(params, { responseType: 'entity', ...options }).pipe(\n      map(({ entity, annots }) =>\n        entity\n          ? this.asModel(entity, { annots, ModelType: options?.ModelType })\n          : 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(params: P | null, options: ODataOptions = {}) {\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(\n    params: P | null,\n    options: ODataOptions & { CollectionType?: typeof ODataCollection } = {},\n  ) {\n    return this.call(params, { responseType: 'entities', ...options }).pipe(\n      map(({ entities, annots }) =>\n        entities\n          ? this.asCollection(entities, {\n              annots,\n              CollectionType: options?.CollectionType,\n            })\n          : null,\n      ),\n    );\n  }\n  //#endregion\n\n  callArraybuffer(\n    params: P | null,\n    { alias, ...options }: { alias?: boolean } & ODataOptions = {},\n  ) {\n    return this.call(params, {\n      responseType: 'arraybuffer',\n      alias,\n      ...options,\n    });\n  }\n\n  callBlob(\n    params: P | null,\n    { alias, ...options }: { alias?: boolean } & ODataOptions = {},\n  ) {\n    return this.call(params, { responseType: 'blob', alias, ...options });\n  }\n}\n","export const Arrays = {\n  // Zip arrays\n  // Example\n  //   Arrays.zip([1, 2, 3, 4, 5, 6], ['a', 'b', 'c', 'd', 'e', 'f'])\n  //   => [[1, 'a'], [2, 'b'], [3, 'c'], [4, 'd'], [5, 'e'], [6, 'f']]\n  zip: (...arrays: any[][]) => {\n    return arrays[0].map((_: any, i: number) =>\n      arrays.map((array: any[]) => array[i]),\n    );\n  },\n};\n","import {\n  HttpErrorResponse,\n  HttpHeaders,\n  HttpResponse,\n  HttpResponseBase,\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { map, 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 { PathSegment } from '../../types';\nimport { Arrays } from '../../utils/arrays';\nimport { Http } from '../../utils/http';\nimport { Strings } from '../../utils/strings';\nimport { ODataPathSegments } from '../path';\nimport { ODataRequest } from '../request';\nimport { ODataResource } from '../resource';\nimport { ODataOptions } from './options';\nimport { ODataApiOptions } from '../../options';\nimport { ODataResponse } from '../response';\n\nexport class ODataBatchRequest<T> extends Subject<HttpResponseBase> {\n  id: string;\n  group: string;\n  constructor(public request: ODataRequest<any>) {\n    super();\n    this.id = Strings.uniqueId({ prefix: 'r' });\n    this.group = Strings.uniqueId({ prefix: 'g' });\n  }\n\n  override toString() {\n    return this.toLegacy();\n  }\n\n  toLegacy({ relativeUrls }: { relativeUrls?: boolean } = {}): string {\n    //TODO: Relative or Absolute url ?\n    let res = [\n      `${this.request.method} ${\n        relativeUrls ? this.request.pathWithParams : this.request.urlWithParams\n      } ${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    if (this.request.method === 'GET' || this.request.method === 'DELETE') {\n      res.push(NEWLINE);\n    } else {\n      res.push(`${NEWLINE}${JSON.stringify(this.request.body)}`);\n    }\n\n    return res.join(NEWLINE);\n  }\n\n  toJson({ relativeUrls }: { relativeUrls?: boolean } = {}) {\n    let res: { [name: string]: any } = {\n      id: this.id,\n      method: this.request.method,\n      url: relativeUrls\n        ? this.request.pathWithParams\n        : this.request.urlWithParams,\n      //'atomicityGroup': this.group\n      //\"dependsOn\": [\"g1\", \"g2\", \"r2\"]\n    };\n    if (this.request.headers instanceof HttpHeaders) {\n      let headers = this.request.headers;\n      res['headers'] = headers\n        .keys()\n        .map((key) => `${key}: ${(headers.getAll(key) || []).join(',')}`);\n    }\n    if (!(this.request.method === 'GET' || this.request.method === 'DELETE')) {\n      res['body'] = this.request.body;\n    }\n\n    return res;\n  }\n\n  onLoad(response: HttpResponseBase) {\n    if (response.ok) {\n      this.next(response);\n      this.complete();\n    } else {\n      // An unsuccessful request is delivered on the error channel.\n      this.error(response as HttpErrorResponse);\n    }\n  }\n\n  onError(response: HttpErrorResponse) {\n    this.error(response);\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  private _responses: HttpResponseBase[] | null = null;\n  responses() {\n    return this._responses;\n  }\n\n  //#region Factory\n  static factory(api: ODataApi) {\n    let segments = new ODataPathSegments();\n    segments.add(PathSegment.batch, $BATCH);\n    return new ODataBatchResource(api, { segments });\n  }\n\n  override clone(): ODataBatchResource {\n    const batch = super.clone() as ODataBatchResource;\n    batch._requests = [...this._requests];\n    return batch;\n  }\n  //#endregion\n\n  private storeRequester() {\n    const current = this.api.requester;\n    // Switch to the batch requester\n    this.api.requester = (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>) | undefined,\n  ) {\n    this.api.requester = 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) => R): R {\n    // Store original requester\n    var handler = this.storeRequester();\n    // Execute the context\n    const result = ctx(this);\n    // Restore original requester\n    this.restoreRequester(handler);\n\n    return result;\n  }\n\n  send(options?: ODataOptions): Observable<ODataResponse<any>> {\n    if (this.api.options.jsonBatchFormat) {\n      return this.sendJson(options);\n    } else {\n      return this.sendLegacy(options);\n    }\n  }\n\n  private sendJson(options?: ODataOptions): Observable<ODataResponse<Object>> {\n    const headers = Http.mergeHttpHeaders((options && options.headers) || {}, {\n      [ODATA_VERSION]: VERSION_4_0,\n    });\n    return this.api\n      .request<object>('POST', this, {\n        body: ODataBatchResource.buildJsonBody(\n          this._requests,\n          this.api.options,\n        ),\n        responseType: 'json',\n        observe: 'response',\n        headers: headers,\n        params: options ? options.params : undefined,\n        withCredentials: options ? options.withCredentials : undefined,\n      })\n      .pipe(\n        map((response: ODataResponse<Object>) => {\n          if (this._responses == null) {\n            this._responses = [];\n          }\n          this._responses = [\n            ...this._responses,\n            ...ODataBatchResource.parseJsonResponse(this._requests, response),\n          ];\n          //HACK: tuple[1] === undefined\n          Arrays.zip(this._requests, this._responses).forEach((tuple) => {\n            if (!tuple[0].isStopped && tuple[1]) tuple[0].onLoad(tuple[1]);\n          });\n          return response;\n        }),\n      );\n  }\n\n  private sendLegacy(\n    options?: ODataOptions,\n  ): Observable<ODataResponse<string>> {\n    const bound = Strings.uniqueId({ prefix: BATCH_PREFIX });\n    const headers = Http.mergeHttpHeaders((options && options.headers) || {}, {\n      [ODATA_VERSION]: VERSION_4_0,\n      [CONTENT_TYPE]: MULTIPART_MIXED_BOUNDARY + bound,\n      [ACCEPT]: MULTIPART_MIXED,\n    });\n    return this.api\n      .request<ODataResponse<string>>('POST', this, {\n        body: ODataBatchResource.buildLegacyBody(\n          bound,\n          this._requests,\n          this.api.options,\n        ),\n        responseType: 'text',\n        observe: 'response',\n        headers: headers,\n        params: options ? options.params : undefined,\n        withCredentials: options ? options.withCredentials : undefined,\n      })\n      .pipe(\n        map((response: ODataResponse<string>) => {\n          if (this._responses == null) {\n            this._responses = [];\n          }\n          this._responses = [\n            ...this._responses,\n            ...ODataBatchResource.parseLegacyResponse(this._requests, response),\n          ];\n          Arrays.zip(this._requests, this._responses).forEach((tuple) => {\n            if (!tuple[0].isStopped && tuple[1]) tuple[0].onLoad(tuple[1]);\n          });\n          return 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) => R,\n    options?: ODataOptions,\n  ): Observable<[R, ODataResponse<string>]> {\n    let result = this.add(ctx);\n    return this.send(options).pipe(map((response) => [result, response]));\n  }\n\n  body() {\n    return ODataBatchResource.buildLegacyBody(\n      Strings.uniqueId({ prefix: BATCH_PREFIX }),\n      this._requests,\n      this.api.options,\n    );\n  }\n\n  json() {\n    return ODataBatchResource.buildJsonBody(this._requests, this.api.options);\n  }\n\n  static buildLegacyBody(\n    batchBoundary: string,\n    requests: ODataBatchRequest<any>[],\n    options: ODataApiOptions,\n  ): string {\n    let res = [];\n    let changesetBoundary: string | null = null;\n    let changesetId = 1;\n\n    for (const request of requests) {\n      // if method is GET and there is a changeset boundary open then close it\n      if (request.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 (request.request.method !== 'GET') {\n        if (changesetBoundary === null) {\n          changesetBoundary = Strings.uniqueId({ prefix: 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 (request.request.method !== 'GET') {\n        res.push(`${CONTENT_ID}: ${changesetId++}`);\n      }\n\n      res.push(NEWLINE);\n      res.push(`${request.toLegacy(options)}`);\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 buildJsonBody(\n    requests: ODataBatchRequest<any>[],\n    options: ODataApiOptions,\n  ): Object {\n    return {\n      requests: requests.map((request) => request.toJson(options)),\n    };\n  }\n\n  static parseLegacyResponse(\n    requests: ODataBatchRequest<any>[],\n    response: ODataResponse<string>,\n  ): HttpResponseBase[] {\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    return chunks.map((chunk: string[], index: number) => {\n      let request = requests[index].request;\n      let { code, message } = Http.parseResponseStatus(chunk[0]);\n      chunk = chunk.slice(1);\n\n      let headers: HttpHeaders = new HttpHeaders();\n      var index = 1;\n      for (; index < chunk.length; index++) {\n        const batchBodyLine: string = chunk[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 < chunk.length; index++) {\n        body += chunk[index];\n      }\n\n      if (code === 0) {\n        code = !!body ? 200 : 0;\n      }\n\n      let ok = code >= 200 && code < 300;\n      if (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      return ok\n        ? new HttpResponse<any>({\n            body,\n            headers,\n            status: code,\n            statusText: message,\n            url: request.urlWithParams,\n          })\n        : new HttpErrorResponse({\n            // The error in this case is the response body (error from the server).\n            error: body,\n            headers,\n            status: code,\n            statusText: message,\n            url: request.urlWithParams,\n          });\n    });\n  }\n\n  static parseJsonResponse(\n    requests: ODataBatchRequest<any>[],\n    response: ODataResponse<any>,\n  ): HttpResponseBase[] {\n    const responses: Object[] =\n      (response.body ? response.body : {})['responses'] ?? [];\n\n    return responses.map((response: any, index: number) => {\n      let request = requests[index].request;\n      let code = response['status'];\n\n      let headers: HttpHeaders = new HttpHeaders(response['headers']);\n      let body: string | { error: any; text: string } = response['body'];\n      if (code === 0) {\n        code = !!body ? 200 : 0;\n      }\n\n      let ok = code >= 200 && code < 300;\n      if (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      return ok\n        ? new HttpResponse<any>({\n            body,\n            headers,\n            status: code,\n            url: request.urlWithParams,\n          })\n        : new HttpErrorResponse({\n            // The error in this case is the response body (error from the server).\n            error: body,\n            headers,\n            status: code,\n            url: request.urlWithParams,\n          });\n    });\n  }\n}\n","import { Observable } from 'rxjs';\nimport { ODataApi } from '../../api';\nimport { $COUNT } from '../../constants';\nimport { EdmType, PathSegment, QueryOption } 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    const currentType = segments.last()?.outgoingType();\n    const segment = segments.add(PathSegment.count, $COUNT);\n    segment.outgoingType(currentType);\n    segment.incomingType(EdmType.Int32);\n    query?.keep(QueryOption.filter, QueryOption.search);\n    return new ODataCountResource<T>(api, { segments, query });\n  }\n\n  override clone(): ODataCountResource<T> {\n    return super.clone() as ODataCountResource<T>;\n  }\n  //#endregion\n\n  //#region Requests\n  protected override get(options?: ODataOptions): Observable<any> {\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 { PathSegment } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataResource } from '../resource';\nimport {\n  ODataEntitiesOptions,\n  ODataEntityOptions,\n  ODataOptions,\n  ODataPropertyOptions,\n} from './options';\nimport { ODataEntities, ODataEntity, ODataProperty } from '../response';\n\nexport class ODataFunctionResource<P, R> extends ODataResource<R> {\n  //#region Factory\n  static factory<P, R>(\n    api: ODataApi,\n    {\n      path,\n      outgoingType,\n      incomingType,\n      bindingType,\n      segments,\n    }: {\n      path: string;\n      outgoingType?: string;\n      incomingType?: string;\n      bindingType?: string;\n      segments?: ODataPathSegments;\n    },\n  ) {\n    segments = segments ?? new ODataPathSegments();\n\n    const segment = segments.add(PathSegment.function, path);\n    if (outgoingType !== undefined) {\n      segment.outgoingType(outgoingType);\n    }\n    if (incomingType !== undefined) {\n      segment.incomingType(incomingType);\n    }\n    if (bindingType !== undefined) {\n      segment.bindingType(bindingType);\n    }\n    return new ODataFunctionResource<P, R>(api, { segments });\n  }\n\n  static fromResource<P, R>(resource: ODataResource<any>, path: string) {\n    const baseType = resource.outgoingType();\n    const callable = resource.api.findCallable<R>(path, baseType);\n\n    const outgoingType = callable?.type();\n    const bindingType = callable?.binding()?.type;\n    const incomingType = callable?.returnType();\n\n    const func = ODataFunctionResource.factory<P, R>(resource.api, {\n      path,\n      outgoingType,\n      bindingType,\n      incomingType,\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.findEntitySet(bindingType);\n      if (entitySet !== undefined) {\n        func.segment((s) => s.entitySet().path(entitySet!.name));\n      }\n    }\n\n    return func;\n  }\n\n  override clone(): ODataFunctionResource<P, R> {\n    return super.clone() as ODataFunctionResource<P, R>;\n  }\n  //#endregion\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().segment((s) => s.function().parameters<P>(parameters));\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; responseType?: 'blob' } & ODataOptions,\n  ): Observable<Blob>;\n  call(\n    params: P | null,\n    options?: { alias?: boolean; responseType?: 'arraybuffer' } & ODataOptions,\n  ): Observable<ArrayBuffer>;\n  call(\n    params: P | null,\n    options?: { alias?: boolean; responseType?: 'none' } & ODataOptions,\n  ): Observable<null>;\n  call(\n    params: P | null,\n    {\n      alias,\n      ...options\n    }: {\n      alias?: boolean;\n      responseType?: 'blob' | 'arraybuffer';\n    } & ODataEntityOptions &\n      ODataEntitiesOptions &\n      ODataPropertyOptions = {},\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(\n    params: P | null,\n    {\n      alias,\n      ModelType,\n      ...options\n    }: ODataOptions & { alias?: boolean; ModelType?: typeof ODataModel } = {},\n  ) {\n    return this.call(params, {\n      responseType: 'entity',\n      alias,\n      ...options,\n    }).pipe(\n      map(({ entity, annots }) =>\n        entity ? this.asModel(entity, { annots, ModelType }) : 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(\n    params: P | null,\n    {\n      alias,\n      CollectionType,\n      ...options\n    }: {\n      alias?: boolean;\n      CollectionType?: typeof ODataCollection;\n    } & ODataOptions = {},\n  ) {\n    return this.call(params, {\n      responseType: 'entities',\n      alias,\n      ...options,\n    }).pipe(\n      map(({ entities, annots }) =>\n        entities\n          ? this.asCollection(entities, { annots, CollectionType })\n          : null,\n      ),\n    );\n  }\n  //#endregion\n\n  callArraybuffer(\n    params: P | null,\n    { alias, ...options }: { alias?: boolean } & ODataOptions = {},\n  ): Observable<ArrayBuffer> {\n    return this.call(params, {\n      responseType: 'arraybuffer',\n      alias,\n      ...options,\n    });\n  }\n\n  callBlob(\n    params: P | null,\n    { alias, ...options }: { alias?: boolean } & ODataOptions = {},\n  ): Observable<Blob> {\n    return this.call(params, { responseType: 'blob', alias, ...options });\n  }\n}\n","import { Observable } from 'rxjs';\nimport { ODataApi } from '../../api';\nimport { $VALUE } from '../../constants';\nimport { PathSegment } 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(PathSegment.value, $VALUE);\n    return new ODataMediaResource(api, { segments, query });\n  }\n\n  override clone(): ODataMediaResource {\n    return super.clone() as ODataMediaResource;\n  }\n  //#endregion\n\n  //#region Requests\n  protected override get(\n    options: { responseType: 'arraybuffer' | 'blob' } & ODataOptions,\n  ): Observable<any> {\n    return super.get(options);\n  }\n\n  protected override put(\n    data: ArrayBuffer | Blob,\n    options: ODataOptions = {},\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 = {},\n  ): Observable<any> {\n    return this.put(data, options);\n  }\n\n  uploadArrayBuffer(\n    data: ArrayBuffer,\n    contentType: string,\n    options: ODataOptions = {},\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(data: Blob, options: ODataOptions = {}): 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 { PathSegment } from '../../types';\nimport { ODataPathSegments } from '../path';\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      segments,\n    }: {\n      segments: ODataPathSegments;\n    },\n  ) {\n    const currentType = segments.last()?.outgoingType();\n    const segment = segments.add(PathSegment.value, $VALUE);\n    segment.incomingType(currentType);\n    return new ODataValueResource<V>(api, { segments });\n  }\n\n  static fromResource<V>(resource: ODataResource<any>) {\n    const baseType = resource.outgoingType();\n    let baseSchema =\n      baseType !== undefined\n        ? resource.api.structuredType<any>(baseType)\n        : undefined;\n    const value = ODataValueResource.factory<V>(resource.api, {\n      segments: resource.cloneSegments(),\n    });\n\n    // Switch entitySet to binding type if available\n    if (baseSchema !== undefined && baseSchema.type() !== baseType) {\n      let entitySet = resource.api.findEntitySet(baseSchema.type());\n      if (entitySet !== undefined) {\n        value.segment((s) => s.entitySet().path(entitySet!.name));\n      }\n    }\n\n    return value;\n  }\n  override clone(): ODataValueResource<T> {\n    return super.clone() as ODataValueResource<T>;\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 { expand, map, reduce } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport type { ModelInterface, ODataCollection, ODataModel } from '../../models';\nimport {\n  PathSegment,\n  QueryOption,\n  StructuredTypeFieldConfig,\n} from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ApplyExpression, ApplyExpressionBuilder } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity, ODataProperty } from '../response';\nimport {\n  ODataEntitiesOptions,\n  ODataEntityOptions,\n  ODataOptions,\n  ODataPropertyOptions,\n} from './options';\nimport { ODataValueResource } from './value';\nimport { ODataCountResource } from './count';\nimport { ODataEntitiesAnnotations } from '../../annotations';\n\nexport class ODataPropertyResource<T> extends ODataResource<T> {\n  //#region Factory\n  static factory<P>(\n    api: ODataApi,\n    {\n      path,\n      type,\n      segments,\n    }: {\n      path: string;\n      type?: string;\n      segments: ODataPathSegments;\n    },\n  ) {\n    const segment = segments.add(PathSegment.property, path);\n    if (type !== undefined) {\n      segment.outgoingType(type);\n      segment.incomingType(type);\n    }\n    return new ODataPropertyResource<P>(api, {\n      segments,\n    });\n  }\n\n  static fromResource<N>(resource: ODataResource<any>, path: string) {\n    const baseType = resource.outgoingType();\n    let baseSchema =\n      baseType !== undefined\n        ? resource.api.structuredType<any>(baseType)\n        : undefined;\n    let fieldType: string | undefined;\n    if (baseSchema !== undefined) {\n      const field = baseSchema.field<N>(path);\n      fieldType = field?.type;\n      baseSchema =\n        field !== undefined\n          ? baseSchema.findParentSchemaForField<N>(field)\n          : undefined;\n    }\n\n    const property = ODataPropertyResource.factory<N>(resource.api, {\n      path,\n      type: fieldType,\n      segments: resource.cloneSegments(),\n    });\n\n    // Switch entitySet to binding type if available\n    if (baseSchema !== undefined && baseSchema.type() !== baseType) {\n      let entitySet = resource.api.findEntitySet(baseSchema.type());\n      if (entitySet !== undefined) {\n        property.segment((s) => s.entitySet().path(entitySet!.name));\n      }\n    }\n\n    return property;\n  }\n  override clone(): ODataPropertyResource<T> {\n    return super.clone() as ODataPropertyResource<T>;\n  }\n\n  override transform<R>(\n    opts: (\n      builder: ApplyExpressionBuilder<T>,\n      current?: ApplyExpression<T>,\n    ) => ApplyExpression<T>,\n    {\n      type,\n      fields,\n    }: {\n      type?: string;\n      fields?: { [name: string]: StructuredTypeFieldConfig };\n    } = {},\n  ): ODataPropertyResource<R> {\n    return super.transform<R>(opts, {\n      type,\n      fields,\n    }) as ODataPropertyResource<R>;\n  }\n  //#endregion\n\n  key(value: any) {\n    const property = this.clone();\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();\n    const types = this.pathSegments.types({ key: true });\n    const keys = values.map((value, index) =>\n      ODataResource.resolveKey(\n        value,\n        this.api.findStructuredType<T>(types[index]),\n      ),\n    );\n    property.segment((s) => s.keys(keys));\n    return property;\n  }\n\n  value() {\n    return ODataValueResource.fromResource<T>(this);\n  }\n\n  count() {\n    return ODataCountResource.factory<T>(this.api, {\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.field<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    return ODataPropertyResource.fromResource<P>(this, path);\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(options?: ODataEntityOptions): 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 = {},\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(options: ODataOptions = {}): 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(options: ODataOptions = {}): 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(\n    options?: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\n      ModelType?: typeof ODataModel;\n    },\n  ): Observable<(ODataModel<T> & ModelInterface<T>) | null>;\n  fetchModel<M extends ODataModel<T>>(\n    options?: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\n      ModelType?: typeof ODataModel;\n    },\n  ): Observable<M | null>;\n  fetchModel(\n    options: ODataOptions & {\n      ModelType?: typeof ODataModel;\n    } = {},\n  ) {\n    return this.fetch({ responseType: 'entity', ...options }).pipe(\n      map(({ entity, annots }) =>\n        entity\n          ? this.asModel(entity, { annots, ModelType: options?.ModelType })\n          : 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(\n    options?: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n      CollectionType?: typeof ODataCollection;\n    },\n  ): Observable<ODataCollection<T, ODataModel<T> & ModelInterface<T>> | null>;\n  fetchCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n    options?: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n      CollectionType?: typeof ODataCollection;\n    },\n  ): Observable<C | null>;\n  fetchCollection(\n    options: ODataOptions & {\n      withCount?: boolean;\n      CollectionType?: typeof ODataCollection;\n    } = {},\n  ) {\n    return this.fetch({ responseType: 'entities', ...options }).pipe(\n      map(({ entities, annots }) =>\n        entities\n          ? this.asCollection(entities, {\n              annots,\n              CollectionType: options?.CollectionType,\n            })\n          : null,\n      ),\n    );\n  }\n\n  fetchOne(\n    options?: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n    },\n  ): Observable<{ entity: T | null; annots: ODataEntitiesAnnotations<T> }> {\n    let res = this.clone();\n    res.query((q) => q.top(1));\n    return res.fetch({ responseType: 'entities', ...options }).pipe(\n      map(({ entities, annots }) => ({\n        entity: entities !== null && entities.length === 1 ? entities[0] : null,\n        annots,\n      })),\n    );\n  }\n\n  fetchMany(\n    top: number,\n    options?: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n    },\n  ): Observable<{ entities: T[]; annots: ODataEntitiesAnnotations<T> }> {\n    let res = this.clone();\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({ top }).pipe(\n      expand(({ annots }) =>\n        annots.skip || annots.skiptoken ? fetch(annots) : EMPTY,\n      ),\n      map(({ entities, annots }) => ({ entities: entities || [], annots })),\n      reduce((acc, { entities, annots }) => ({\n        entities: [...(acc.entities || []), ...(entities || [])],\n        annots: acc.annots.union(annots),\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      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n    } = {},\n  ): Observable<{ entities: T[]; annots: ODataEntitiesAnnotations<T> }> {\n    let res = this.clone();\n    // Clean Paging\n    res.query((q) => q.removePaging());\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 }) =>\n        annots.skip || annots.skiptoken ? fetch(annots) : EMPTY,\n      ),\n      map(({ entities, annots }) => ({ entities: entities || [], annots })),\n      reduce((acc, { entities, annots }) => ({\n        entities: [...(acc.entities || []), ...(entities || [])],\n        annots: acc.annots.union(annots),\n      })),\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 { PathSegment, QueryOption } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity } from '../response';\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    { segments }: { segments: ODataPathSegments },\n  ) {\n    segments.add(PathSegment.reference, $REF);\n    return new ODataReferenceResource<P>(api, { segments });\n  }\n\n  override clone(): ODataReferenceResource<T> {\n    return super.clone() as ODataReferenceResource<T>;\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(\n      { [ODATA_ID]: target.endpointUrl({ params: false }) },\n      options,\n    );\n  }\n\n  protected override put(\n    target: ODataEntityResource<any>,\n    options?: ODataOptions,\n  ): Observable<any> {\n    return super.put(\n      { [ODATA_ID]: target.endpointUrl({ params: false }) },\n      options,\n    );\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({ params: 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,\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): 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      bodyQueryOptions?: QueryOption[];\n    },\n  ): Observable<ODataEntity<T>>;\n  fetch(\n    options?: ODataEntitiesOptions & {\n      bodyQueryOptions?: QueryOption[];\n    },\n  ): Observable<ODataEntities<T>>;\n  fetch(\n    options: ODataEntityOptions &\n      ODataEntitiesOptions & {\n        bodyQueryOptions?: QueryOption[];\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      bodyQueryOptions?: QueryOption[];\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?: QueryOption[];\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, throwError } from 'rxjs';\nimport { expand, map, reduce } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport type { ModelInterface, ODataCollection, ODataModel } from '../../models';\nimport {\n  PathSegment,\n  QueryOption,\n  StructuredTypeFieldConfig,\n} from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ApplyExpression, ApplyExpressionBuilder } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity } from '../response';\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';\nimport { ODataEntitiesAnnotations } from '../../annotations';\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      segments,\n    }: {\n      path: string;\n      type?: string;\n      segments: ODataPathSegments;\n    },\n  ) {\n    const segment = segments.add(PathSegment.navigationProperty, path);\n    if (type !== undefined) {\n      segment.outgoingType(type);\n      segment.incomingType(type);\n    }\n    return new ODataNavigationPropertyResource<N>(api, {\n      segments,\n    });\n  }\n\n  static fromResource<N>(resource: ODataResource<any>, path: string) {\n    const baseType = resource.outgoingType();\n    let baseSchema =\n      baseType !== undefined\n        ? resource.api.structuredType<any>(baseType)\n        : undefined;\n    let fieldType: string | undefined;\n    if (baseSchema !== undefined) {\n      const field = baseSchema.field<N>(path);\n      fieldType = field?.type;\n      baseSchema =\n        field !== undefined\n          ? baseSchema.findParentSchemaForField<N>(field)\n          : undefined;\n    }\n\n    const navigation = ODataNavigationPropertyResource.factory<N>(\n      resource.api,\n      {\n        path,\n        type: fieldType,\n        segments: resource.cloneSegments(),\n      },\n    );\n\n    // Switch entitySet to binding type if available\n    if (baseSchema !== undefined && baseSchema.type() !== baseType) {\n      let entitySet = resource.api.findEntitySet(baseSchema.type());\n      if (entitySet !== undefined) {\n        navigation.segment((s) => s.entitySet().path(entitySet!.name));\n      }\n    }\n\n    return navigation;\n  }\n\n  override clone(): ODataNavigationPropertyResource<T> {\n    return super.clone() as ODataNavigationPropertyResource<T>;\n  }\n\n  override transform<R>(\n    opts: (\n      builder: ApplyExpressionBuilder<T>,\n      current?: ApplyExpression<T>,\n    ) => ApplyExpression<T>,\n    {\n      type,\n      fields,\n    }: {\n      type?: string;\n      fields?: { [name: string]: StructuredTypeFieldConfig };\n    } = {},\n  ): ODataNavigationPropertyResource<R> {\n    return super.transform<R>(opts, {\n      type,\n      fields,\n    }) as ODataNavigationPropertyResource<R>;\n  }\n  //#endregion\n\n  key(value: any) {\n    const navigation = this.clone();\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();\n    const types = this.pathSegments.types({ key: true });\n    const keys = values.map((value, index) =>\n      ODataResource.resolveKey(\n        value,\n        this.api.findStructuredType<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 thisType = this.incomingType();\n    const baseSchema =\n      thisType !== undefined ? this.api.structuredType(thisType) : undefined;\n    const castSchema = this.api.findStructuredType<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(PathSegment.type, type).incomingType(type);\n    return new ODataNavigationPropertyResource<C>(this.api, {\n      segments,\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 = {},\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 = {},\n  ): Observable<ODataEntity<T>> {\n    return super.patch(attrs, { responseType: 'entity', ...options });\n  }\n\n  protected override delete(options: ODataOptions = {}): Observable<any> {\n    return super.delete({ responseType: 'entity', ...options });\n  }\n\n  protected override get(\n    options: ODataEntityOptions &\n      ODataEntitiesOptions & {\n        bodyQueryOptions?: QueryOption[];\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   * @returns The updated entity with the annotations\n   */\n  update(\n    attrs: Partial<T>,\n    options?: ODataOptions,\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   * @returns The modified entity with the annotations\n   */\n  modify(\n    attrs: Partial<T>,\n    options?: ODataOptions,\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   * @returns An observable of the destroy\n   */\n  destroy(options?: ODataOptions): 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      bodyQueryOptions?: QueryOption[];\n    },\n  ): Observable<ODataEntity<T>>;\n  fetch(\n    options?: ODataEntitiesOptions & {\n      bodyQueryOptions?: QueryOption[];\n    },\n  ): Observable<ODataEntities<T>>;\n  fetch(\n    options: ODataEntityOptions &\n      ODataEntitiesOptions & {\n        bodyQueryOptions?: QueryOption[];\n      } = {},\n  ): Observable<any> {\n    if (!this.hasEntityKey())\n      return throwError(\n        () => new Error('fetch: Navigation resource without entity key'),\n      );\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      bodyQueryOptions?: QueryOption[];\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(\n    options?: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\n      ModelType?: typeof ODataModel;\n    },\n  ): Observable<(ODataModel<T> & ModelInterface<T>) | null>;\n  fetchModel<M extends ODataModel<T>>(\n    options?: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\n      ModelType?: typeof ODataModel;\n    },\n  ): Observable<M | null>;\n  fetchModel(\n    options: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\n      ModelType?: typeof ODataModel;\n    } = {},\n  ) {\n    return this.fetch({ responseType: 'entity', ...options }).pipe(\n      map(({ entity, annots }) =>\n        entity\n          ? this.asModel(entity, { annots, ModelType: options?.ModelType })\n          : 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?: QueryOption[];\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(\n    options?: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n      CollectionType?: typeof ODataCollection;\n    },\n  ): Observable<ODataCollection<T, ODataModel<T> & ModelInterface<T>> | null>;\n  fetchCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n    options?: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n      CollectionType?: typeof ODataCollection;\n    },\n  ): Observable<C | null>;\n  fetchCollection(\n    options: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n      CollectionType?: typeof ODataCollection;\n    } = {},\n  ) {\n    return this.fetch({ responseType: 'entities', ...options }).pipe(\n      map(({ entities, annots }) =>\n        entities\n          ? this.asCollection(entities, {\n              annots,\n              CollectionType: options?.CollectionType,\n            })\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      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n    } = {},\n  ): Observable<{ entities: T[]; annots: ODataEntitiesAnnotations<T> }> {\n    let res = this.clone();\n    // Clean Paging\n    res.query((q) => q.removePaging());\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 }) =>\n        annots.skip || annots.skiptoken ? fetch(annots) : EMPTY,\n      ),\n      map(({ entities, annots }) => ({ entities: entities || [], annots })),\n      reduce((acc, { entities, annots }) => ({\n        entities: [...(acc.entities || []), ...(entities || [])],\n        annots: acc.annots.union(annots),\n      })),\n    );\n  }\n  //#endregion\n\n  fetchMany(\n    top: number,\n    options?: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n    },\n  ): Observable<{ entities: T[]; annots: ODataEntitiesAnnotations<T> }> {\n    let res = this.clone();\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({ top }).pipe(\n      expand(({ annots }) =>\n        annots.skip || annots.skiptoken ? fetch(annots) : EMPTY,\n      ),\n      map(({ entities, annots }) => ({ entities: entities || [], annots })),\n      reduce((acc, { entities, annots }) => ({\n        entities: [...(acc.entities || []), ...(entities || [])],\n        annots: acc.annots.union(annots),\n      })),\n    );\n  }\n\n  fetchOne(\n    options?: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n    },\n  ): Observable<{ entity: T | null; annots: ODataEntitiesAnnotations<T> }> {\n    const res = this.clone();\n    res.query((q) => q.top(1));\n    return res.fetch({ responseType: 'entities', ...options }).pipe(\n      map(({ entities, annots }) => ({\n        entity: entities !== null && entities.length === 1 ? entities[0] : null,\n        annots,\n      })),\n    );\n  }\n}\n","import { Observable, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ModelInterface, ODataModel } from '../../models';\nimport { PathSegment, QueryOption } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntity } from '../response';\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      segments,\n      query,\n    }: {\n      segments: ODataPathSegments;\n      query?: ODataQueryOptions<E>;\n    },\n  ) {\n    query?.keep(QueryOption.expand, QueryOption.select, QueryOption.format);\n    return new ODataEntityResource<E>(api, { segments, query });\n  }\n  override clone(): ODataEntityResource<T> {\n    return super.clone() as ODataEntityResource<T>;\n  }\n  //#endregion\n\n  key(value: any) {\n    const entity = this.clone();\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();\n    const types = this.pathSegments.types({ key: true });\n    const keys = values.map((value, index) =>\n      ODataResource.resolveKey(\n        value,\n        this.api.findStructuredType<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 thisType = this.incomingType();\n    const baseSchema =\n      thisType !== undefined ? this.api.structuredType(thisType) : undefined;\n    // Downcast\n    const castSchema = baseSchema?.findChildSchema((s) => s.type() === type);\n    if (\n      castSchema !== undefined &&\n      baseSchema !== undefined &&\n      !castSchema.isSubtypeOf(baseSchema)\n    )\n      throw new Error(`cast: Cannot cast to ${type}`);\n    const segments = this.cloneSegments();\n    segments.add(PathSegment.type, type).incomingType(type);\n    return new ODataEntityResource<C>(this.api, {\n      segments,\n      query: this.cloneQuery<C>(),\n    });\n  }\n\n  //#region Requests\n  protected override post(\n    attrs: Partial<T>,\n    options: ODataOptions = {},\n  ): Observable<any> {\n    return super.post(attrs, { responseType: 'entity', ...options });\n  }\n\n  protected override put(\n    attrs: Partial<T>,\n    options: ODataOptions = {},\n  ): Observable<any> {\n    return super.put(attrs, { responseType: 'entity', ...options });\n  }\n\n  protected override patch(\n    attrs: Partial<T>,\n    options: ODataOptions = {},\n  ): Observable<any> {\n    return super.patch(attrs, { responseType: 'entity', ...options });\n  }\n\n  protected override delete(options: ODataOptions = {}): Observable<any> {\n    return super.delete({ responseType: 'entity', ...options });\n  }\n\n  protected override get(\n    options: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\n    } = {},\n  ): Observable<any> {\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,\n  ): Observable<ODataEntity<T>> {\n    return this.put(attrs, options);\n  }\n\n  modify(\n    attrs: Partial<T>,\n    options?: ODataOptions,\n  ): Observable<ODataEntity<T>> {\n    return this.patch(attrs, options);\n  }\n\n  destroy(options?: ODataOptions): Observable<any> {\n    return this.delete(options);\n  }\n\n  fetch(\n    options?: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\n    },\n  ): Observable<ODataEntity<T>> {\n    if (!this.hasKey())\n      return throwError(() => new Error('fetch: Entity resource without key'));\n    return this.get(options);\n  }\n\n  fetchEntity(\n    options?: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\n    },\n  ): Observable<T | null> {\n    return this.fetch(options).pipe(map(({ entity }) => entity));\n  }\n\n  fetchModel(\n    options?: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\n      ModelType?: typeof ODataModel;\n    },\n  ): Observable<(ODataModel<T> & ModelInterface<T>) | null>;\n  fetchModel<M extends ODataModel<T>>(\n    options?: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\n      ModelType?: typeof ODataModel;\n    },\n  ): Observable<M | null>;\n  fetchModel(\n    options?: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\n      ModelType?: typeof ODataModel;\n    },\n  ) {\n    return this.fetch(options).pipe(\n      map(({ entity, annots }) =>\n        entity\n          ? this.asModel(entity, { annots, ModelType: options?.ModelType })\n          : null,\n      ),\n    );\n  }\n  //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { EMPTY } from 'rxjs';\nimport { expand, map, reduce } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport type { ModelInterface, ODataCollection, ODataModel } from '../../models';\nimport {\n  PathSegment,\n  QueryOption,\n  StructuredTypeFieldConfig,\n} from '../../types';\nimport { ODataPathSegments } from '../path';\nimport {\n  ApplyExpression,\n  ApplyExpressionBuilder,\n  ODataQueryOptions,\n} from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataActionResource } from './action';\nimport { ODataCountResource } from './count';\nimport { ODataEntityResource } from './entity';\nimport { ODataFunctionResource } from './function';\nimport { ODataOptions } from './options';\nimport { ODataEntities, ODataEntity } from '../response';\n\nexport class ODataEntitySetResource<T> extends ODataResource<T> {\n  //#region Factory\n  static factory<E>(\n    api: ODataApi,\n    {\n      path,\n      type,\n      query,\n    }: {\n      path: string;\n      type?: string;\n      query?: ODataQueryOptions<E>;\n    },\n  ) {\n    const segments = new ODataPathSegments();\n    const segment = segments.add(PathSegment.entitySet, path);\n    if (type !== undefined) {\n      segment.outgoingType(type);\n      segment.incomingType(type);\n    }\n    return new ODataEntitySetResource<E>(api, { segments, query });\n  }\n\n  override clone(): ODataEntitySetResource<T> {\n    return super.clone() as ODataEntitySetResource<T>;\n  }\n\n  override transform<R>(\n    opts: (\n      builder: ApplyExpressionBuilder<T>,\n      current?: ApplyExpression<T>,\n    ) => ApplyExpression<T>,\n    {\n      type,\n      fields,\n    }: {\n      type?: string;\n      fields?: { [name: string]: StructuredTypeFieldConfig };\n    } = {},\n  ): ODataEntitySetResource<R> {\n    return super.transform<R>(opts, {\n      type,\n      fields,\n    }) as ODataEntitySetResource<R>;\n  }\n  //#endregion\n\n  entity(key?: any) {\n    const entity = ODataEntityResource.factory<T>(this.api, {\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): ODataActionResource<P, R> {\n    return ODataActionResource.fromResource<P, R>(this, path);\n  }\n\n  function<P, R>(path: string): ODataFunctionResource<P, R> {\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 thisType = this.incomingType();\n    const baseSchema =\n      thisType !== undefined ? this.api.structuredType(thisType) : undefined;\n    const castSchema = this.api.findStructuredType<C>(type);\n    if (\n      castSchema !== undefined &&\n      baseSchema !== undefined &&\n      !castSchema.isSubtypeOf(baseSchema)\n    )\n      throw new Error(`cast: Cannot cast to ${type}`);\n    const segments = this.cloneSegments();\n    segments.add(PathSegment.type, type).incomingType(type);\n    return new ODataEntitySetResource<C>(this.api, {\n      segments,\n      query: this.cloneQuery<C>(),\n    });\n  }\n\n  //#region Requests\n  protected override post(\n    attrs: Partial<T>,\n    options?: ODataOptions,\n  ): Observable<any> {\n    return super.post(attrs, { responseType: 'entity', ...options });\n  }\n\n  protected override get(\n    options: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n    } = {},\n  ): Observable<any> {\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?: QueryOption[];\n    },\n  ): Observable<ODataEntities<T>> {\n    return this.get(options);\n  }\n\n  fetchAll(\n    options?: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n    },\n  ) {\n    const res = this.clone();\n    // Clean Paging\n    res.query((q) => q.removePaging());\n    const fetch = (opts?: {\n      skip?: number;\n      skiptoken?: string;\n      top?: number;\n    }): Observable<ODataEntities<any>> => {\n      if (opts) {\n        res.query((q) => q.paging(opts));\n      }\n      return res.fetch(options);\n    };\n    return fetch().pipe(\n      expand(({ annots }) =>\n        annots.skip || annots.skiptoken ? fetch(annots) : EMPTY,\n      ),\n      map(({ entities, annots }) => ({ entities: entities ?? [], annots })),\n      reduce((acc, { entities, annots }) => ({\n        entities: [...(acc.entities ?? []), ...(entities ?? [])],\n        annots: acc.annots.union(annots),\n      })),\n    );\n  }\n\n  fetchMany(\n    top: number,\n    options?: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n    },\n  ) {\n    const res = this.clone();\n    const 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({ top }).pipe(\n      expand(({ annots }) =>\n        annots.skip || annots.skiptoken ? fetch(annots) : EMPTY,\n      ),\n      map(({ entities, annots }) => ({ entities: entities ?? [], annots })),\n      reduce((acc, { entities, annots }) => ({\n        entities: [...(acc.entities ?? []), ...(entities ?? [])],\n        annots: acc.annots.union(annots),\n      })),\n    );\n  }\n\n  fetchOne(\n    options?: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n    },\n  ) {\n    const res = this.clone();\n    res.query((q) => q.top(1));\n    return res.fetch(options).pipe(\n      map(({ entities, annots }) => ({\n        entity: entities !== null && entities.length === 1 ? entities[0] : null,\n        annots,\n      })),\n    );\n  }\n\n  fetchEntities(\n    options?: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n    },\n  ) {\n    return this.fetch(options).pipe(map(({ entities }) => entities));\n  }\n\n  fetchCollection(\n    options?: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n      CollectionType?: typeof ODataCollection;\n    },\n  ): Observable<ODataCollection<T, ODataModel<T> & ModelInterface<T>> | null>;\n  fetchCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n    options?: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n      CollectionType?: typeof ODataCollection;\n    },\n  ): Observable<C | null>;\n  fetchCollection(\n    options?: ODataOptions & {\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n      CollectionType?: typeof ODataCollection;\n    },\n  ) {\n    return this.fetch(options).pipe(\n      map(({ entities, annots }) =>\n        entities\n          ? this.asCollection(entities, {\n              annots,\n              CollectionType: options?.CollectionType,\n            })\n          : null,\n      ),\n    );\n  }\n  //#endregion\n}\n","import { AnnotationConfig } from '../../types';\nimport type { CsdlSchema } from './csdl-schema';\n\nexport class CsdlAnnotable {\n  Annotation?: CsdlAnnotation[];\n  constructor({ Annotation }: { Annotation?: any[] }) {\n    this.Annotation = Annotation?.map((a) => new CsdlAnnotation(a));\n  }\n\n  toJson() {\n    const json: { [key: string]: any } = {};\n    if (Array.isArray(this.Annotation) && this.Annotation.length > 0) {\n      json['Annotation'] = this.Annotation.map((a) => a.toJson());\n    }\n    return json;\n  }\n\n  toConfig() {\n    const config: { [key: string]: any } = {};\n    if (this.Annotation) {\n      config['annotations'] = this.Annotation.map((a) => a.toConfig());\n    }\n    return config;\n  }\n}\n\nexport class CsdlAnnotations extends CsdlAnnotable {\n  Target: string;\n  Qualifier?: string;\n  constructor(\n    private schema: CsdlSchema,\n    {\n      Target,\n      Qualifier,\n      Annotation,\n    }: {\n      Target: string;\n      Qualifier?: string;\n      Annotation: any[];\n    },\n  ) {\n    super({ Annotation });\n    this.Target = Target;\n    this.Qualifier = Qualifier;\n  }\n\n  override toJson() {\n    const json: { [key: string]: any } = {\n      ...super.toJson(),\n      Target: this.Target,\n    };\n    if (this.Qualifier !== undefined) {\n      json['Qualifier'] = this.Qualifier;\n    }\n    return json;\n  }\n\n  override toConfig(): AnnotationConfig[] {\n    return (this.Annotation ?? []).map((a) => a.toConfig());\n  }\n}\n\nexport class CsdlAnnotation {\n  Term: string;\n  String?: string;\n  Bool?: boolean;\n  Int?: number;\n  Collection?: CsdlCollection[];\n  Record?: CsdlRecord[];\n  EnumMember?: CsdlEnumMember[];\n  constructor({\n    Term,\n    String,\n    Bool,\n    Int,\n    Collection,\n    Record,\n    EnumMember,\n  }: {\n    Term: string;\n    String?: string;\n    Bool?: boolean;\n    Int?: number;\n    Collection?: any[];\n    Record?: any[];\n    EnumMember?: any[];\n  }) {\n    this.Term = Term;\n    this.String = String;\n    this.Bool = Bool;\n    this.Int = Int;\n    this.Collection = Collection?.map((a) => new CsdlCollection(a));\n    this.Record = Record?.map((a) => new CsdlRecord(a));\n    this.EnumMember = EnumMember?.map((a) => new CsdlEnumMember(a));\n  }\n\n  toJson() {\n    const json: { [key: string]: any } = { Term: this.Term };\n    if (this.String !== undefined) {\n      json['String'] = this.String;\n    }\n    if (this.Bool !== undefined) {\n      json['Bool'] = this.Bool;\n    }\n    if (this.Int !== undefined) {\n      json['Int'] = this.Int;\n    }\n    if (Array.isArray(this.Collection) && this.Collection.length > 0) {\n      json['Collection'] = this.Collection.map((m) => m.toJson());\n    }\n    if (Array.isArray(this.Record) && this.Record.length > 0) {\n      json['Record'] = this.Record.map((m) => m.toJson());\n    }\n    if (Array.isArray(this.EnumMember) && this.EnumMember.length > 0) {\n      json['EnumMember'] = this.EnumMember.map((m) => m.toJson());\n    }\n    return json;\n  }\n\n  toConfig(): AnnotationConfig {\n    return {\n      term: this.Term,\n      string: this.String,\n      bool: this.Bool,\n      int: this.Int,\n    } as AnnotationConfig;\n  }\n}\n\nexport class CsdlTerm {\n  Name: string;\n  Type: string;\n  BaseTerm?: string;\n  DefaultValue?: string;\n  AppliesTo?: string;\n  Nullable?: boolean;\n  MaxLength?: number;\n  Precision?: number;\n  Scale?: number;\n  SRID?: string;\n  String?: string;\n  Bool?: boolean;\n  Int?: number;\n  constructor(\n    private schema: CsdlSchema,\n    {\n      Name,\n      Type,\n      BaseTerm,\n      DefaultValue,\n      AppliesTo,\n      Nullable,\n      MaxLength,\n      Precision,\n      Scale,\n      SRID,\n      String,\n      Bool,\n      Int,\n    }: {\n      Name: string;\n      Type: string;\n      BaseTerm?: string;\n      DefaultValue?: string;\n      AppliesTo?: string;\n      Nullable?: boolean;\n      MaxLength?: number;\n      Precision?: number;\n      Scale?: number;\n      SRID?: string;\n      String?: string;\n      Bool?: boolean;\n      Int?: number;\n    },\n  ) {\n    this.Name = Name;\n    this.Type = Type;\n    this.BaseTerm = BaseTerm;\n    this.DefaultValue = DefaultValue;\n    this.AppliesTo = AppliesTo;\n    this.Nullable = Nullable;\n    this.MaxLength = MaxLength;\n    this.Precision = Precision;\n    this.Scale = Scale;\n    this.SRID = SRID;\n    this.String = String;\n    this.Bool = Bool;\n    this.Int = Int;\n  }\n\n  toJson() {\n    const json: { [key: string]: any } = { Name: this.Name, Type: this.Type };\n    if (this.BaseTerm !== undefined) {\n      json['BaseTerm'] = this.BaseTerm;\n    }\n    if (this.DefaultValue !== undefined) {\n      json['DefaultValue'] = this.DefaultValue;\n    }\n    if (this.AppliesTo !== undefined) {\n      json['AppliesTo'] = this.AppliesTo;\n    }\n    if (this.Nullable !== undefined) {\n      json['Nullable'] = this.Nullable;\n    }\n    if (this.MaxLength !== undefined) {\n      json['MaxLength'] = this.MaxLength;\n    }\n    if (this.Precision !== undefined) {\n      json['Precision'] = this.Precision;\n    }\n    if (this.Scale !== undefined) {\n      json['Scale'] = this.Scale;\n    }\n    if (this.SRID !== undefined) {\n      json['SRID'] = this.SRID;\n    }\n    if (this.String !== undefined) {\n      json['String'] = this.String;\n    }\n    if (this.Bool !== undefined) {\n      json['Bool'] = this.Bool;\n    }\n    if (this.Int !== undefined) {\n      json['Int'] = this.Int;\n    }\n    return json;\n  }\n}\n\nexport class CsdlCollection {\n  String: CsdlString[];\n  Record: CsdlRecord[];\n  PropertyPath: CsdlPropertyPath[];\n  NavigationPropertyPath: CsdlNavigationPropertyPath[];\n  constructor({\n    String,\n    Record,\n    PropertyPath,\n    NavigationPropertyPath,\n  }: {\n    String: any[];\n    Record: any[];\n    PropertyPath: any[];\n    NavigationPropertyPath: any[];\n  }) {\n    this.String = String?.map((a) => new CsdlString(a));\n    this.Record = Record?.map((a) => new CsdlRecord(a));\n    this.PropertyPath = PropertyPath?.map((a) => new CsdlPropertyPath(a));\n    this.NavigationPropertyPath = NavigationPropertyPath?.map(\n      (a) => new CsdlNavigationPropertyPath(a),\n    );\n  }\n\n  toJson() {\n    const json: { [key: string]: any } = {};\n    if (Array.isArray(this.String) && this.String.length > 0) {\n      json['String'] = this.String.map((s) => s.toJson());\n    }\n    if (Array.isArray(this.Record) && this.Record.length > 0) {\n      json['Record'] = this.Record.map((r) => r.toJson());\n    }\n    if (Array.isArray(this.PropertyPath) && this.PropertyPath.length > 0) {\n      json['PropertyPath'] = this.PropertyPath.map((p) => p.toJson());\n    }\n    if (\n      Array.isArray(this.NavigationPropertyPath) &&\n      this.NavigationPropertyPath.length > 0\n    ) {\n      json['NavigationPropertyPath'] = this.NavigationPropertyPath.map((p) =>\n        p.toJson(),\n      );\n    }\n    return json;\n  }\n}\n\nexport class CsdlRecord {\n  PropertyValue: CsdlPropertyValue[];\n  constructor({ PropertyValue }: { PropertyValue: any[] }) {\n    this.PropertyValue = PropertyValue?.map((a) => new CsdlPropertyValue(a));\n  }\n\n  toJson() {\n    const json: { [key: string]: any } = {};\n    if (Array.isArray(this.PropertyValue) && this.PropertyValue.length > 0) {\n      json['PropertyValue'] = this.PropertyValue.map((p) => p.toJson());\n    }\n    return json;\n  }\n}\n\nexport class CsdlPropertyValue {\n  Name: string;\n  String?: string;\n  Date?: Date;\n  EnumMember?: CsdlEnumMember[];\n  constructor({\n    Name,\n    String,\n    Date,\n    EnumMember,\n  }: {\n    Name: string;\n    String?: string;\n    Date?: Date;\n    EnumMember?: any[];\n  }) {\n    this.Name = Name;\n    this.String = String;\n    this.Date = Date;\n    this.EnumMember = EnumMember?.map((a) => new CsdlEnumMember(a));\n  }\n\n  toJson() {\n    const json: { [key: string]: any } = { Name: this.Name };\n    if (this.String !== undefined) {\n      json['String'] = this.String;\n    }\n    if (this.Date !== undefined) {\n      json['Date'] = this.Date;\n    }\n    if (Array.isArray(this.EnumMember) && this.EnumMember.length > 0) {\n      json['EnumMember'] = this.EnumMember.map((m) => m.toJson());\n    }\n    return json;\n  }\n}\n\nexport class CsdlEnumMember {\n  TextContent: string;\n  constructor({ TextContent }: { TextContent: string }) {\n    this.TextContent = TextContent;\n  }\n\n  toJson() {\n    return {\n      TextContent: this.TextContent,\n    };\n  }\n}\n\nexport class CsdlString {\n  TextContent: string;\n  constructor({ TextContent }: { TextContent: string }) {\n    this.TextContent = TextContent;\n  }\n\n  toJson() {\n    return {\n      TextContent: this.TextContent,\n    };\n  }\n}\n\nexport class CsdlPropertyPath {\n  TextContent: string;\n  constructor({ TextContent }: { TextContent: string }) {\n    this.TextContent = TextContent;\n  }\n\n  toJson() {\n    return {\n      TextContent: this.TextContent,\n    };\n  }\n}\n\nexport class CsdlNavigationPropertyPath {\n  TextContent: string;\n  constructor({ TextContent }: { TextContent: string }) {\n    this.TextContent = TextContent;\n  }\n\n  toJson() {\n    return {\n      TextContent: this.TextContent,\n    };\n  }\n}\n","import { ReferenceConfig } from '../../types';\nimport { CsdlAnnotable } from './csdl-annotation';\n\nexport class CsdlReference extends CsdlAnnotable {\n  Uri: string;\n  Include?: CsdlInclude[];\n  IncludeAnnotations?: CsdlIncludeAnnotations[];\n  constructor({\n    Uri,\n    Include,\n    IncludeAnnotations,\n    Annotation,\n  }: {\n    Uri: string;\n    Include?: any[];\n    IncludeAnnotations?: any[];\n    Annotation?: any[];\n  }) {\n    super({ Annotation });\n    this.Uri = Uri;\n    this.Include = Include?.map((i) => new CsdlInclude(i));\n    this.IncludeAnnotations = IncludeAnnotations?.map(\n      (i) => new CsdlIncludeAnnotations(i),\n    );\n  }\n\n  override toJson() {\n    const json: { [key: string]: any } = { ...super.toJson(), Uri: this.Uri };\n    if (Array.isArray(this.Include) && this.Include.length > 0) {\n      json['Include'] = this.Include.map((i) => i.toJson());\n    }\n    if (\n      Array.isArray(this.IncludeAnnotations) &&\n      this.IncludeAnnotations.length > 0\n    ) {\n      json['IncludeAnnotations'] = this.IncludeAnnotations.map((i) =>\n        i.toJson(),\n      );\n    }\n    return json;\n  }\n\n  override toConfig(base?: Partial<ReferenceConfig>) {\n    return {\n      ...super.toConfig(),\n      uri: this.Uri,\n      includes: this.Include?.map((i) => i.toConfig()),\n      includeAnnotations: this.IncludeAnnotations?.map((i) => i.toConfig()),\n    } as ReferenceConfig;\n  }\n}\n\nexport class CsdlInclude {\n  Namespace: string;\n  Alias?: string;\n  constructor({ Namespace, Alias }: { Namespace: string; Alias?: string }) {\n    this.Namespace = Namespace;\n    this.Alias = Alias;\n  }\n\n  toJson() {\n    return {\n      Namespace: this.Namespace,\n      Alias: this.Alias,\n    };\n  }\n\n  toConfig() {\n    return {\n      namespace: this.Namespace,\n      alias: this.Alias,\n    };\n  }\n}\n\nexport class CsdlIncludeAnnotations {\n  TermNamespace: string;\n  Qualifier?: string;\n  TargetNamespace?: string;\n  constructor({\n    TermNamespace,\n    Qualifier,\n    TargetNamespace,\n  }: {\n    TermNamespace: string;\n    Qualifier?: string;\n    TargetNamespace?: string;\n  }) {\n    this.TermNamespace = TermNamespace;\n    this.Qualifier = Qualifier;\n    this.TargetNamespace = TargetNamespace;\n  }\n\n  toJson() {\n    return {\n      TermNamespace: this.TermNamespace,\n      Qualifier: this.Qualifier,\n      TargetNamespace: this.TargetNamespace,\n    };\n  }\n\n  toConfig() {\n    return {\n      termNamespace: this.TermNamespace,\n      qualifier: this.Qualifier,\n      targetNamespace: this.TargetNamespace,\n    };\n  }\n}\n","import { CsdlAnnotable, CsdlAnnotation } from './csdl-annotation';\nimport type { CsdlSchema } from './csdl-schema';\n\nexport class CsdlTypeDefinition extends CsdlAnnotable {\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\n  constructor(\n    private schema: CsdlSchema,\n    {\n      Name,\n      UnderlayingType,\n      MaxLength,\n      Precision,\n      Scale,\n      Unicode,\n      SRID,\n      Annotation,\n    }: {\n      Name: string;\n      UnderlayingType: string;\n      MaxLength?: number;\n      Precision?: number;\n      Scale?: number;\n      Unicode?: boolean;\n      SRID?: string;\n      Annotation?: CsdlAnnotation[];\n    },\n  ) {\n    super({ Annotation });\n    this.Name = Name;\n    this.UnderlayingType = UnderlayingType;\n    this.MaxLength = MaxLength;\n    this.Precision = Precision;\n    this.Scale = Scale;\n    this.Unicode = Unicode;\n    this.SRID = SRID;\n  }\n\n  override toJson() {\n    const json: { [key: string]: any } = {\n      ...super.toJson(),\n      Name: this.Name,\n      UnderlayingType: this.UnderlayingType,\n    };\n    if (this.MaxLength !== undefined) {\n      json['MaxLength'] = this.MaxLength;\n    }\n    if (this.Precision !== undefined) {\n      json['Precision'] = this.Precision;\n    }\n    if (this.Scale !== undefined) {\n      json['Scale'] = this.Scale;\n    }\n    if (this.Unicode !== undefined) {\n      json['Unicode'] = this.Unicode;\n    }\n    if (this.SRID !== undefined) {\n      json['SRID'] = this.SRID;\n    }\n    return json;\n  }\n}\n","import { EnumTypeConfig, EnumTypeFieldConfig } from '../../types';\nimport { CsdlAnnotable } from './csdl-annotation';\nimport type { CsdlSchema } from './csdl-schema';\n\nexport class CsdlEnumType extends CsdlAnnotable {\n  Name: string;\n  Member: CsdlMember[];\n  UnderlyingType?: string;\n  IsFlags?: boolean;\n  constructor(\n    private schema: CsdlSchema,\n    {\n      Name,\n      Member,\n      UnderlyingType,\n      IsFlags,\n      Annotation,\n    }: {\n      Name: string;\n      Member: any[];\n      UnderlyingType?: string;\n      IsFlags?: boolean;\n      Annotation?: any[];\n    },\n  ) {\n    super({ Annotation });\n    this.Name = Name;\n    this.Member = Member.map((m) => new CsdlMember(m));\n    this.UnderlyingType = UnderlyingType;\n    this.IsFlags = IsFlags;\n  }\n\n  override toJson() {\n    const json: { [key: string]: any } = {\n      ...super.toJson(),\n      Name: this.Name,\n      Member: this.Member.map((m) => m.toJson()),\n    };\n    if (this.UnderlyingType !== undefined) {\n      json['UnderlyingType'] = this.UnderlyingType;\n    }\n    if (this.IsFlags !== undefined) {\n      json['IsFlags'] = this.IsFlags;\n    }\n    return json;\n  }\n\n  name() {\n    return `${this.Name}`;\n  }\n\n  namespace() {\n    return `${this.schema.Namespace}`;\n  }\n\n  fullName() {\n    return `${this.schema.Namespace}.${this.Name}`;\n  }\n\n  override toConfig(base?: Partial<EnumTypeConfig>): EnumTypeConfig {\n    return {\n      ...super.toConfig(),\n      name: this.Name,\n      fields: this.Member.reduce(\n        (acc, m) => ({\n          ...acc,\n          [m.Name]: m.toConfig(),\n        }),\n        {},\n      ),\n      flags: this.IsFlags,\n    } as EnumTypeConfig;\n  }\n}\n\nexport class CsdlMember extends CsdlAnnotable {\n  Name: string;\n  Value?: number;\n  constructor({\n    Name,\n    Value,\n    Annotation,\n  }: {\n    Name: string;\n    Value?: number;\n    Annotation?: any[];\n  }) {\n    super({ Annotation });\n    this.Name = Name;\n    this.Value = Value;\n  }\n\n  override toJson() {\n    const json: { [key: string]: any } = { ...super.toJson(), Name: this.Name };\n    if (this.Value !== undefined) {\n      json['Value'] = this.Value;\n    }\n    return json;\n  }\n\n  override toConfig(base?: Partial<EnumTypeFieldConfig>): EnumTypeFieldConfig {\n    const config: { [key: string]: any } = {\n      ...super.toConfig(),\n      value: this.Value,\n    };\n    return config as EnumTypeFieldConfig;\n  }\n}\n","import { StructuredTypeFieldConfig } from '../../types';\nimport { CsdlAnnotable } from './csdl-annotation';\n\nexport abstract class CsdlStructuralProperty extends CsdlAnnotable {\n  Name: string;\n  Type: string;\n  Collection: boolean;\n  Nullable?: boolean;\n\n  constructor({\n    Name,\n    Type,\n    Nullable,\n    Annotation,\n  }: {\n    Name: string;\n    Type: string;\n    Nullable?: boolean;\n    Annotation?: any[];\n  }) {\n    super({ Annotation });\n    this.Name = Name;\n    this.Nullable = Nullable;\n    this.Collection = Type.startsWith('Collection(');\n    this.Type = this.Collection ? Type.substring(11, Type.length - 1) : Type;\n  }\n\n  override toJson() {\n    return {\n      ...super.toJson(),\n      Name: this.Name,\n      Type: this.Collection ? `Collection(${this.Type})` : this.Type,\n      Nullable: this.Nullable,\n    } as { [key: string]: any };\n  }\n}\n\nexport class CsdlProperty extends CsdlStructuralProperty {\n  MaxLength?: number;\n  Precision?: number;\n  Scale?: number;\n  Unicode?: boolean;\n  SRID?: string;\n  DefaultValue?: string;\n\n  constructor({\n    Name,\n    Type,\n    Nullable,\n    MaxLength,\n    Precision,\n    Scale,\n    Unicode,\n    SRID,\n    DefaultValue,\n    Annotation,\n  }: {\n    Name: string;\n    Type: string;\n    Nullable?: boolean;\n    MaxLength?: number;\n    Precision?: number;\n    Scale?: number;\n    Unicode?: boolean;\n    SRID?: string;\n    DefaultValue?: string;\n    Annotation?: any[];\n  }) {\n    super({ Name, Type, Nullable, Annotation });\n    this.MaxLength = MaxLength;\n    this.Precision = Precision;\n    this.Scale = Scale;\n    this.Unicode = Unicode;\n    this.SRID = SRID;\n    this.DefaultValue = DefaultValue;\n  }\n\n  override toJson() {\n    const json: { [key: string]: any } = { ...super.toJson() };\n    if (this.MaxLength !== undefined) {\n      json['MaxLength'] = this.MaxLength;\n    }\n    if (this.Precision !== undefined) {\n      json['Precision'] = this.Precision;\n    }\n    if (this.Scale !== undefined) {\n      json['Scale'] = this.Scale;\n    }\n    if (this.Unicode !== undefined) {\n      json['Unicode'] = this.Unicode;\n    }\n    if (this.SRID !== undefined) {\n      json['SRID'] = this.SRID;\n    }\n    if (this.DefaultValue !== undefined) {\n      json['DefaultValue'] = this.DefaultValue;\n    }\n    return json;\n  }\n\n  override toConfig() {\n    return {\n      ...super.toConfig(),\n      name: this.Name,\n      type: this.Type,\n      default: this.DefaultValue,\n      maxLength: this.MaxLength,\n      collection: this.Collection,\n      nullable: this.Nullable,\n      navigation: false,\n      precision: this.Precision,\n      scale: this.Scale,\n    } as StructuredTypeFieldConfig & { name: string };\n  }\n}\n\nexport class CsdlNavigationProperty extends CsdlStructuralProperty {\n  public Partner?: string;\n  public ContainsTarget?: boolean;\n  public ReferentialConstraints?: CsdlReferentialConstraint[];\n  public OnDelete?: CsdlOnDelete;\n\n  constructor({\n    Name,\n    Type,\n    Nullable,\n    Partner,\n    ContainsTarget,\n    ReferentialConstraints,\n    OnDelete,\n    Annotation,\n  }: {\n    Name: string;\n    Type: string;\n    Nullable?: boolean;\n    Partner?: string;\n    ContainsTarget?: boolean;\n    ReferentialConstraints?: any[];\n    OnDelete?: any;\n    Annotation?: any[];\n  }) {\n    super({ Name, Type, Nullable, Annotation });\n    this.Partner = Partner;\n    this.ContainsTarget = ContainsTarget;\n    this.ReferentialConstraints = ReferentialConstraints?.map(\n      (r) => new CsdlReferentialConstraint(r),\n    );\n    this.OnDelete = OnDelete ? new CsdlOnDelete(OnDelete) : undefined;\n  }\n\n  override toJson() {\n    const json: { [key: string]: any } = { ...super.toJson() };\n    if (this.Partner !== undefined) {\n      json['Partner'] = this.Partner;\n    }\n    if (this.ContainsTarget !== undefined) {\n      json['ContainsTarget'] = this.ContainsTarget;\n    }\n    if (\n      Array.isArray(this.ReferentialConstraints) &&\n      this.ReferentialConstraints.length > 0\n    ) {\n      json['ReferentialConstraints'] = this.ReferentialConstraints.map((r) =>\n        r.toJson(),\n      );\n    }\n    if (this.OnDelete !== undefined) {\n      json['OnDelete'] = this.OnDelete;\n    }\n    return json;\n  }\n\n  override toConfig() {\n    return {\n      ...super.toConfig(),\n      name: this.Name,\n      type: this.Type,\n      collection: this.Collection,\n      nullable: this.Nullable,\n      navigation: true,\n      referentials: this.ReferentialConstraints?.map((r) => ({\n        property: r.Property,\n        referencedProperty: r.ReferencedProperty,\n      })),\n    } as StructuredTypeFieldConfig & { name: string };\n  }\n}\n\nexport class CsdlReferentialConstraint {\n  Property: string;\n  ReferencedProperty: string;\n\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  toJson() {\n    return {\n      Property: this.Property,\n      ReferencedProperty: this.ReferencedProperty,\n    };\n  }\n}\n\nexport class CsdlOnDelete {\n  Action: string;\n\n  constructor({ Action }: { Action: string }) {\n    this.Action = Action;\n  }\n\n  toJson() {\n    return {\n      Action: this.Action,\n    };\n  }\n}\n","import { StructuredTypeConfig } from '../../types';\nimport { CsdlAnnotable } from './csdl-annotation';\nimport {\n  CsdlProperty,\n  CsdlNavigationProperty,\n} from './csdl-structural-property';\nimport type { CsdlSchema } from './csdl-schema';\n\nexport class CsdlStructuredType extends CsdlAnnotable {\n  Name: string;\n  Property?: CsdlProperty[];\n  NavigationProperty?: CsdlNavigationProperty[];\n  BaseType?: string;\n  OpenType?: boolean;\n  Abstract?: boolean;\n\n  constructor(\n    private schema: CsdlSchema,\n    {\n      Name,\n      Property,\n      NavigationProperty,\n      BaseType,\n      OpenType,\n      Abstract,\n      Annotation,\n    }: {\n      Name: string;\n      Property?: any[];\n      NavigationProperty?: any[];\n      BaseType?: string;\n      OpenType?: boolean;\n      Abstract?: boolean;\n      Annotation?: any[];\n    },\n  ) {\n    super({ Annotation });\n    this.Name = Name;\n    this.Property = Property?.map((p) => new CsdlProperty(p));\n    this.NavigationProperty = NavigationProperty?.map(\n      (n) => new CsdlNavigationProperty(n),\n    );\n    this.BaseType = BaseType;\n    this.OpenType = OpenType;\n    this.Abstract = Abstract;\n  }\n\n  override toJson() {\n    const json: { [key: string]: any } = { ...super.toJson(), Name: this.Name };\n    if (Array.isArray(this.Property) && this.Property.length > 0) {\n      json['Property'] = this.Property.map((p) => p.toJson());\n    }\n    if (\n      Array.isArray(this.NavigationProperty) &&\n      this.NavigationProperty.length > 0\n    ) {\n      json['NavigationProperty'] = this.NavigationProperty.map((n) =>\n        n.toJson(),\n      );\n    }\n    if (this.BaseType !== undefined) {\n      json['BaseType'] = this.BaseType;\n    }\n    if (this.OpenType !== undefined) {\n      json['OpenType'] = this.OpenType;\n    }\n    if (this.Abstract !== undefined) {\n      json['Abstract'] = this.Abstract;\n    }\n    return json;\n  }\n\n  name() {\n    return `${this.Name}`;\n  }\n\n  namespace() {\n    return `${this.schema.Namespace}`;\n  }\n\n  fullName() {\n    return `${this.schema.Namespace}.${this.Name}`;\n  }\n}\n\nexport class CsdlComplexType extends CsdlStructuredType {\n  constructor(\n    schema: CsdlSchema,\n    {\n      Name,\n      Property,\n      NavigationProperty,\n      BaseType,\n      OpenType,\n      Abstract,\n      Annotation,\n    }: {\n      Name: string;\n      Property?: any[];\n      NavigationProperty?: any[];\n      BaseType?: string;\n      OpenType?: boolean;\n      Abstract?: boolean;\n      Annotation?: any[];\n    },\n  ) {\n    super(schema, {\n      Name,\n      Property,\n      NavigationProperty,\n      BaseType,\n      OpenType,\n      Abstract,\n      Annotation,\n    });\n  }\n\n  override toJson() {\n    return {\n      ...super.toJson(),\n    };\n  }\n\n  override toConfig(\n    base?: Partial<StructuredTypeConfig>,\n  ): StructuredTypeConfig {\n    return {\n      ...super.toConfig(),\n      name: this.Name,\n      base: this.BaseType,\n      open: base?.open ?? this.OpenType,\n      model: base?.model,\n      collection: base?.collection,\n      fields: [\n        ...(this.Property ?? []).map((t) => t.toConfig()),\n        ...(this.NavigationProperty ?? []).map((t) => t.toConfig()),\n      ].reduce((acc, p) => Object.assign(acc, { [p.name]: p }), {}),\n    } as StructuredTypeConfig;\n  }\n}\n\nexport class CsdlEntityType extends CsdlStructuredType {\n  Key?: CsdlKey;\n  HasStream?: boolean;\n\n  constructor(\n    schema: CsdlSchema,\n    {\n      Name,\n      Key,\n      Property,\n      NavigationProperty,\n      BaseType,\n      OpenType,\n      Abstract,\n      HasStream,\n      Annotation,\n    }: {\n      Name: string;\n      Key?: any;\n      Property?: any[];\n      NavigationProperty?: any[];\n      BaseType?: string;\n      OpenType?: boolean;\n      Abstract?: boolean;\n      HasStream?: boolean;\n      Annotation?: any[];\n    },\n  ) {\n    super(schema, {\n      Name,\n      Property,\n      NavigationProperty,\n      BaseType,\n      OpenType,\n      Abstract,\n      Annotation,\n    });\n    this.Key = Key ? new CsdlKey(Key) : undefined;\n    this.HasStream = HasStream;\n  }\n\n  override toJson() {\n    const json: { [key: string]: any } = { ...super.toJson() };\n    if (this.Key !== undefined) {\n      json['Key'] = this.Key.toJson();\n    }\n    if (this.HasStream !== undefined) {\n      json['HasStream'] = this.HasStream;\n    }\n    return json;\n  }\n\n  override toConfig(\n    base?: Partial<StructuredTypeConfig>,\n  ): StructuredTypeConfig {\n    return {\n      ...super.toConfig(),\n      name: this.Name,\n      base: this.BaseType,\n      open: base?.open ?? this.OpenType,\n      model: base?.model,\n      collection: base?.collection,\n      keys: this.Key?.toConfig(),\n      fields: [\n        ...(this.Property ?? []).map((t) => t.toConfig()),\n        ...(this.NavigationProperty ?? []).map((t) => t.toConfig()),\n      ].reduce((acc, p) => Object.assign(acc, { [p.name]: p }), {}),\n    } as StructuredTypeConfig;\n  }\n}\n\nexport class CsdlKey {\n  PropertyRef: CsdlPropertyRef[];\n\n  constructor({ PropertyRef }: { PropertyRef: any[] }) {\n    this.PropertyRef = PropertyRef?.map((p) => new CsdlPropertyRef(p));\n  }\n\n  toJson() {\n    return {\n      PropertyRef: this.PropertyRef?.map((p) => p.toJson()),\n    };\n  }\n\n  toConfig() {\n    return this.PropertyRef?.map((t) => t.toConfig());\n  }\n}\n\nexport class CsdlPropertyRef {\n  Name: string;\n  Alias?: string;\n\n  constructor({ Name, Alias }: { Name: string; Alias?: string }) {\n    this.Name = Name;\n    this.Alias = Alias;\n  }\n\n  toJson() {\n    return {\n      Name: this.Name,\n      Alias: this.Alias,\n    };\n  }\n\n  toConfig(): { name: string; alias?: string } {\n    return {\n      name: this.Name,\n      alias: this.Alias,\n    };\n  }\n}\n","import { CallableConfig, ParameterConfig } from '../../types';\nimport { CsdlAnnotable } from './csdl-annotation';\nimport type { CsdlEntityContainer } from './csdl-entity-container';\nimport type { CsdlSchema } from './csdl-schema';\n\nexport const BINDING_PARAMETER_NAME: string = 'bindingParameter';\n\nexport class CsdlCallable {\n  Name: string;\n  ReturnType?: CsdlReturnType;\n  IsBound?: boolean;\n  EntitySetPath?: string;\n  Parameter?: CsdlParameter[];\n\n  constructor(\n    private schema: CsdlSchema,\n    {\n      Name,\n      ReturnType,\n      IsBound,\n      EntitySetPath,\n      Parameter,\n    }: {\n      Name: string;\n      ReturnType?: any;\n      IsBound?: boolean;\n      EntitySetPath?: string;\n      Parameter?: any[];\n    },\n  ) {\n    this.Name = Name;\n    this.ReturnType = ReturnType ? new CsdlReturnType(ReturnType) : undefined;\n    this.IsBound = IsBound;\n    this.EntitySetPath = EntitySetPath;\n    this.Parameter = Parameter?.map((p) => new CsdlParameter(p));\n  }\n\n  toJson() {\n    const json: { [key: string]: any } = {\n      Name: this.Name,\n    };\n    if (this.ReturnType !== undefined) {\n      json['ReturnType'] = this.ReturnType.toJson();\n    }\n    if (this.IsBound !== undefined) {\n      json['IsBound'] = this.IsBound;\n    }\n    if (this.EntitySetPath !== undefined) {\n      json['EntitySetPath'] = this.EntitySetPath;\n    }\n    if (Array.isArray(this.Parameter) && this.Parameter.length > 0) {\n      json['Parameter'] = this.Parameter.map((p) => p.toJson());\n    }\n    return json;\n  }\n\n  name() {\n    return `${this.Name}`;\n  }\n  namespace() {\n    return `${this.schema.Namespace}`;\n  }\n  fullName() {\n    return `${this.namespace()}.${this.Name}`;\n  }\n}\nexport class CsdlFunction extends CsdlCallable {\n  IsComposable?: boolean;\n\n  constructor(\n    schema: CsdlSchema,\n    {\n      Name,\n      ReturnType,\n      IsBound,\n      EntitySetPath,\n      IsComposable,\n      Parameter,\n    }: {\n      Name: string;\n      ReturnType: any;\n      IsBound?: boolean;\n      EntitySetPath?: string;\n      IsComposable?: boolean;\n      Parameter?: any[];\n    },\n  ) {\n    super(schema, { Name, ReturnType, IsBound, EntitySetPath, Parameter });\n    this.IsComposable = IsComposable;\n  }\n\n  override toJson() {\n    return {\n      ...super.toJson(),\n      IsComposable: this.IsComposable,\n    };\n  }\n\n  toConfig(base?: Partial<CallableConfig>): CallableConfig {\n    return {\n      name: this.Name,\n      entitySetPath: this.EntitySetPath,\n      bound: this.IsBound,\n      composable: this.IsComposable,\n      parameters: this.Parameter?.map((p) => p.toConfig()),\n      return: this.ReturnType?.toConfig(),\n    } as CallableConfig;\n  }\n}\n\nexport class CsdlAction extends CsdlCallable {\n  constructor(\n    schema: CsdlSchema,\n    {\n      Name,\n      ReturnType,\n      IsBound,\n      EntitySetPath,\n      Parameter,\n    }: {\n      Name: string;\n      ReturnType?: any;\n      IsBound?: boolean;\n      EntitySetPath?: string;\n      Parameter?: any[];\n    },\n  ) {\n    super(schema, { Name, ReturnType, IsBound, EntitySetPath, Parameter });\n  }\n\n  override toJson() {\n    return {\n      ...super.toJson(),\n    };\n  }\n\n  toConfig(base?: Partial<CallableConfig>): CallableConfig {\n    return {\n      name: this.Name,\n      entitySetPath: this.EntitySetPath,\n      bound: this.IsBound,\n      parameters: this.Parameter?.map((p) => p.toConfig()),\n      return: this.ReturnType?.toConfig(),\n    } as CallableConfig;\n  }\n}\n\nexport class CsdlFunctionImport {\n  Name: string;\n  FunctionName: string;\n  EntitySet?: string;\n  IncludeInServiceDocument?: boolean;\n\n  constructor(\n    private container: CsdlEntityContainer,\n    {\n      Name,\n      FunctionName,\n      EntitySet,\n      IncludeInServiceDocument,\n    }: {\n      Name: string;\n      FunctionName: string;\n      EntitySet?: string;\n      IncludeInServiceDocument?: boolean;\n    },\n  ) {\n    this.Name = Name;\n    this.FunctionName = FunctionName;\n    this.EntitySet = EntitySet;\n    this.IncludeInServiceDocument = IncludeInServiceDocument;\n  }\n\n  toJson() {\n    return {\n      Name: this.Name,\n      FunctionName: this.FunctionName,\n      EntitySet: this.EntitySet,\n      IncludeInServiceDocument: this.IncludeInServiceDocument,\n    };\n  }\n}\n\nexport class CsdlActionImport {\n  Name: string;\n  Action: string;\n  EntitySet?: string;\n\n  constructor(\n    private container: CsdlEntityContainer,\n    {\n      Name,\n      Action,\n      EntitySet,\n    }: {\n      Name: string;\n      Action: string;\n      EntitySet?: string;\n    },\n  ) {\n    this.Name = Name;\n    this.Action = Action;\n    this.EntitySet = EntitySet;\n  }\n\n  toJson() {\n    return {\n      Name: this.Name,\n      Action: this.Action,\n      EntitySet: this.EntitySet,\n    };\n  }\n}\n\nexport class CsdlParameter extends CsdlAnnotable {\n  Name: string;\n  Type: string;\n  Collection: boolean;\n  Nullable?: boolean;\n  MaxLength?: number;\n  Precision?: number;\n  Scale?: number;\n  SRID?: string;\n\n  constructor({\n    Name,\n    Type,\n    Nullable,\n    MaxLength,\n    Precision,\n    Scale,\n    SRID,\n    Annotation,\n  }: {\n    Name: string;\n    Type: string;\n    Nullable?: boolean;\n    MaxLength?: number;\n    Precision?: number;\n    Scale?: number;\n    SRID?: string;\n    Annotation?: any[];\n  }) {\n    super({ Annotation });\n    this.Name = Name;\n    this.Collection = Type.startsWith('Collection(');\n    this.Type = this.Collection ? Type.substring(11, Type.length - 1) : Type;\n    this.Nullable = Nullable;\n    this.MaxLength = MaxLength;\n    this.Precision = Precision;\n    this.Scale = Scale;\n    this.SRID = SRID;\n  }\n\n  override toJson() {\n    return {\n      ...super.toJson(),\n      Name: this.Name,\n      Type: this.Collection ? `Collection(${this.Type})` : this.Type,\n      Nullable: this.Nullable,\n      MaxLength: this.MaxLength,\n      Precision: this.Precision,\n      Scale: this.Scale,\n      SRID: this.SRID,\n    };\n  }\n\n  override toConfig(): ParameterConfig {\n    return {\n      ...super.toConfig(),\n      type: this.Type,\n      nullable: this.Nullable,\n      collection: false,\n    };\n  }\n}\n\nexport class CsdlReturnType {\n  Type: string;\n  Collection: boolean;\n  Nullable?: boolean;\n  MaxLength?: number;\n  Precision?: number;\n  Scale?: number;\n  SRID?: string;\n\n  constructor({\n    Type,\n    Nullable,\n    MaxLength,\n    Precision,\n    Scale,\n    SRID,\n  }: {\n    Type: string;\n    Nullable?: boolean;\n    MaxLength?: number;\n    Precision?: number;\n    Scale?: number;\n    SRID?: string;\n  }) {\n    this.Collection = Type.startsWith('Collection(');\n    this.Type = this.Collection ? Type.substring(11, Type.length - 1) : Type;\n    this.Nullable = Nullable;\n    this.MaxLength = MaxLength;\n    this.Precision = Precision;\n    this.Scale = Scale;\n    this.SRID = SRID;\n  }\n\n  toJson() {\n    return {\n      Type: this.Collection ? `Collection(${this.Type})` : this.Type,\n      Nullable: this.Nullable,\n      MaxLength: this.MaxLength,\n      Precision: this.Precision,\n      Scale: this.Scale,\n      SRID: this.SRID,\n    };\n  }\n\n  toConfig(): { type: string; collection?: boolean | undefined } | undefined {\n    return {\n      type: this.Type,\n      collection: false,\n    };\n  }\n}\n","export class CsdlNavigationPropertyBinding {\n  Path: string;\n  Target: string;\n\n  constructor({ Path, Target }: { Path: string; Target: string }) {\n    this.Path = Path;\n    this.Target = Target;\n  }\n\n  toJson() {\n    return {\n      Path: this.Path,\n      Target: this.Target,\n    };\n  }\n}\n","import { EntitySetConfig } from '../../types';\nimport { CsdlAnnotable } from './csdl-annotation';\nimport type { CsdlEntityContainer } from './csdl-entity-container';\nimport { CsdlNavigationPropertyBinding } from './csdl-navigation-property-binding';\n\nexport class CsdlEntitySet extends CsdlAnnotable {\n  public Name: string;\n  public EntityType: string;\n  public NavigationPropertyBinding?: CsdlNavigationPropertyBinding[];\n  public IncludeInServiceDocument?: boolean;\n\n  constructor(\n    private container: CsdlEntityContainer,\n    {\n      Name,\n      EntityType,\n      NavigationPropertyBinding,\n      IncludeInServiceDocument,\n      Annotation,\n    }: {\n      Name: string;\n      EntityType: string;\n      NavigationPropertyBinding?: any[];\n      IncludeInServiceDocument?: boolean;\n      Annotation?: any[];\n    },\n  ) {\n    super({ Annotation });\n\n    this.Name = Name;\n    this.EntityType = EntityType;\n    this.NavigationPropertyBinding = NavigationPropertyBinding?.map(\n      (n) => new CsdlNavigationPropertyBinding(n),\n    );\n    this.IncludeInServiceDocument = IncludeInServiceDocument;\n  }\n\n  override toJson() {\n    const json: { [key: string]: any } = {\n      ...super.toJson(),\n      Name: this.Name,\n      EntityType: this.EntityType,\n    };\n    if (\n      Array.isArray(this.NavigationPropertyBinding) &&\n      this.NavigationPropertyBinding.length > 0\n    ) {\n      json['NavigationPropertyBinding'] = this.NavigationPropertyBinding.map(\n        (n) => n.toJson(),\n      );\n    }\n    if (this.IncludeInServiceDocument !== undefined) {\n      json['IncludeInServiceDocument'] = this.IncludeInServiceDocument;\n    }\n    return json;\n  }\n\n  name() {\n    return `${this.Name}`;\n  }\n\n  namespace() {\n    return `${this.container.namespace()}`;\n  }\n\n  fullName() {\n    return `${this.container.namespace()}.${this.Name}`;\n  }\n\n  override toConfig(): EntitySetConfig {\n    return {\n      ...super.toConfig(),\n      name: this.Name,\n      entityType: this.EntityType,\n      service: {},\n    } as EntitySetConfig;\n  }\n}\n","import { CsdlAnnotable } from './csdl-annotation';\nimport type { CsdlEntityContainer } from './csdl-entity-container';\nimport { CsdlNavigationPropertyBinding } from './csdl-navigation-property-binding';\n\nexport class CsdlSingleton extends CsdlAnnotable {\n  Name: string;\n  Type: string;\n  NavigationPropertyBindings?: CsdlNavigationPropertyBinding[];\n\n  constructor(\n    private container: CsdlEntityContainer,\n    {\n      Name,\n      Type,\n      NavigationPropertyBindings,\n      Annotation,\n    }: {\n      Name: string;\n      Type: string;\n      NavigationPropertyBindings?: any[];\n      Annotation?: any[];\n    },\n  ) {\n    super({ Annotation });\n    this.Name = Name;\n    this.Type = Type;\n    this.NavigationPropertyBindings = NavigationPropertyBindings?.map(\n      (n) => new CsdlNavigationPropertyBinding(n),\n    );\n  }\n\n  override toJson() {\n    const json: { [key: string]: any } = {\n      ...super.toJson(),\n      Name: this.Name,\n      Type: this.Type,\n    };\n    if (\n      Array.isArray(this.NavigationPropertyBindings) &&\n      this.NavigationPropertyBindings.length > 0\n    ) {\n      json['NavigationPropertyBindings'] = this.NavigationPropertyBindings.map(\n        (n) => n.toJson(),\n      );\n    }\n    return json;\n  }\n\n  name() {\n    return `${this.Name}`;\n  }\n\n  namespace() {\n    return `${this.container.namespace()}`;\n  }\n\n  fullName() {\n    return `${this.container.namespace()}.${this.Name}`;\n  }\n}\n","import { CsdlEntitySet } from './csdl-entity-set';\nimport { CsdlSingleton } from './csdl-singleton';\nimport { CsdlFunctionImport, CsdlActionImport } from './csdl-function-action';\nimport { CsdlAnnotable } from './csdl-annotation';\nimport type { CsdlSchema } from './csdl-schema';\nimport { EntityContainerConfig } from '../../types';\n\nexport class CsdlEntityContainer extends CsdlAnnotable {\n  public Name: string;\n  public Extend?: string;\n  public EntitySet?: CsdlEntitySet[];\n  public Singleton?: CsdlSingleton[];\n  public FunctionImport?: CsdlFunctionImport[];\n  public ActionImport?: CsdlActionImport[];\n\n  constructor(\n    private schema: CsdlSchema,\n    {\n      Name,\n      Extend,\n      EntitySet,\n      Singleton,\n      FunctionImport,\n      ActionImport,\n      Annotation,\n    }: {\n      Name: string;\n      Extend?: string;\n      EntitySet?: any[];\n      Singleton?: any[];\n      FunctionImport?: any[];\n      ActionImport?: any[];\n      Annotation?: any[];\n    },\n  ) {\n    super({ Annotation });\n\n    this.Name = Name;\n    this.Extend = Extend;\n    this.EntitySet = EntitySet?.map((e) => new CsdlEntitySet(this, e));\n    this.Singleton = Singleton?.map((s) => new CsdlSingleton(this, s));\n    this.FunctionImport = FunctionImport?.map(\n      (f) => new CsdlFunctionImport(this, f),\n    );\n    this.ActionImport = ActionImport?.map((a) => new CsdlActionImport(this, a));\n  }\n\n  override toJson() {\n    const json: { [key: string]: any } = { ...super.toJson() };\n    if (this.Extend !== undefined) {\n      json['Extend'] = this.Extend;\n    }\n    if (Array.isArray(this.EntitySet) && this.EntitySet.length > 0) {\n      json['EntitySet'] = this.EntitySet.map((a) => a.toJson());\n    }\n    if (Array.isArray(this.Singleton) && this.Singleton.length > 0) {\n      json['Singleton'] = this.Singleton.map((a) => a.toJson());\n    }\n    if (Array.isArray(this.FunctionImport) && this.FunctionImport.length > 0) {\n      json['FunctionImport'] = this.FunctionImport.map((a) => a.toJson());\n    }\n    if (Array.isArray(this.ActionImport) && this.ActionImport.length > 0) {\n      json['ActionImport'] = this.ActionImport.map((a) => a.toJson());\n    }\n    return json;\n  }\n\n  name() {\n    return `${this.Name}`;\n  }\n\n  namespace() {\n    return `${this.schema.Namespace}`;\n  }\n\n  fullName() {\n    return `${this.schema.Namespace}.${this.Name}`;\n  }\n\n  override toConfig(\n    base?: Partial<EntityContainerConfig>,\n  ): EntityContainerConfig {\n    return {\n      ...super.toConfig(),\n      name: this.Name,\n      entitySets: this.EntitySet?.map((t) => t.toConfig()),\n    };\n  }\n}\n","import { CsdlTerm, CsdlAnnotations } 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';\nimport { SchemaConfig } from '../../types';\n\nexport class CsdlSchema {\n  Namespace: string;\n  Alias?: string;\n  EnumType?: CsdlEnumType[];\n  ComplexType?: CsdlComplexType[];\n  EntityType?: CsdlEntityType[];\n  Function?: CsdlFunction[];\n  Action?: CsdlAction[];\n  EntityContainer?: CsdlEntityContainer[];\n  TypeDefinition?: CsdlTypeDefinition[];\n  Term?: CsdlTerm[];\n  Annotations?: CsdlAnnotations[];\n  constructor({\n    Namespace,\n    Alias,\n    EnumType,\n    ComplexType,\n    EntityType,\n    Function,\n    Action,\n    EntityContainer,\n    TypeDefinition,\n    Term,\n    Annotations,\n  }: {\n    Namespace: string;\n    Alias?: string;\n    EnumType?: any[];\n    ComplexType?: any[];\n    EntityType?: any[];\n    Function?: any[];\n    Action?: any[];\n    EntityContainer?: any[];\n    TypeDefinition?: any[];\n    Term?: any[];\n    Annotations?: any[];\n  }) {\n    this.Namespace = Namespace;\n    this.Alias = Alias;\n    this.EnumType = EnumType?.map((e) => new CsdlEnumType(this, e));\n    this.ComplexType = ComplexType?.map((c) => new CsdlComplexType(this, c));\n    this.EntityType = EntityType?.map((e) => new CsdlEntityType(this, e));\n    this.Function = Function?.map((f) => new CsdlFunction(this, f));\n    this.Action = Action?.map((a) => new CsdlAction(this, a));\n    this.EntityContainer = EntityContainer?.map(\n      (e) => new CsdlEntityContainer(this, e),\n    );\n    this.TypeDefinition = TypeDefinition?.map(\n      (t) => new CsdlTypeDefinition(this, t),\n    );\n    this.Term = Term?.map((t) => new CsdlTerm(this, t));\n    this.Annotations = Annotations?.map((a) => new CsdlAnnotations(this, a));\n  }\n\n  toJson() {\n    const json: { [key: string]: any } = {\n      Namespace: this.Namespace,\n    };\n    if (this.Alias !== undefined) {\n      json['Alias'] = this.Alias;\n    }\n    if (\n      Array.isArray(this.EntityContainer) &&\n      this.EntityContainer.length > 0\n    ) {\n      json['EntityContainer'] = this.EntityContainer.map((a) => a.toJson());\n    }\n    if (Array.isArray(this.EntityType) && this.EntityType.length > 0) {\n      json['EntityType'] = this.EntityType.map((a) => a.toJson());\n    }\n    if (Array.isArray(this.ComplexType) && this.ComplexType.length > 0) {\n      json['ComplexType'] = this.ComplexType.map((a) => a.toJson());\n    }\n    if (Array.isArray(this.EnumType) && this.EnumType.length > 0) {\n      json['EnumType'] = this.EnumType.map((a) => a.toJson());\n    }\n    if (Array.isArray(this.TypeDefinition) && this.TypeDefinition.length > 0) {\n      json['TypeDefinition'] = this.TypeDefinition.map((a) => a.toJson());\n    }\n    if (Array.isArray(this.Term) && this.Term.length > 0) {\n      json['Term'] = this.Term.map((a) => a.toJson());\n    }\n    if (Array.isArray(this.Annotations) && this.Annotations.length > 0) {\n      json['Annotations'] = this.Annotations.map((a) => a.toJson());\n    }\n    if (Array.isArray(this.Action) && this.Action.length > 0) {\n      json['Action'] = this.Action.map((a) => a.toJson());\n    }\n    if (Array.isArray(this.Function) && this.Function.length > 0) {\n      json['Function'] = this.Function.map((a) => a.toJson());\n    }\n    return json;\n  }\n\n  toConfig(base?: Partial<SchemaConfig>): SchemaConfig {\n    return {\n      namespace: this.Namespace,\n      alias: base?.alias ?? this.Alias,\n      annotations: this.Annotations?.map((t) => t.toConfig()),\n      enums: this.EnumType?.map((t) =>\n        t.toConfig(base?.enums?.find((cs) => cs.name === t.Name)),\n      ),\n      entities: [\n        ...(this.ComplexType ?? []).map((t) =>\n          t.toConfig(base?.entities?.find((cs) => cs.name === t.Name)),\n        ),\n        ...(this.EntityType ?? []).map((t) =>\n          t.toConfig(base?.entities?.find((cs) => cs.name === t.Name)),\n        ),\n      ],\n      callables: [\n        ...(this.Function ?? []).map((t) =>\n          t.toConfig(base?.callables?.find((cs) => cs.name === t.Name)),\n        ),\n        ...(this.Action ?? []).map((t) =>\n          t.toConfig(base?.callables?.find((cs) => cs.name === t.Name)),\n        ),\n      ],\n      containers: this.EntityContainer?.map((t) =>\n        t.toConfig(base?.containers?.find((cs) => cs.name === t.Name)),\n      ),\n    } as SchemaConfig;\n  }\n}\n","import { CsdlAction, CsdlFunction } from './csdl/csdl-function-action';\nimport { CsdlReference } from './csdl/csdl-reference';\nimport { CsdlSchema } from './csdl/csdl-schema';\nimport { ApiConfig, ODataVersion } from '../types';\n\nexport class ODataMetadata {\n  Version: string;\n  References: CsdlReference[];\n  Schemas: CsdlSchema[];\n  constructor(Version: string, References: any[], Schemas: any[]) {\n    this.Version = Version;\n    this.References = References?.map((r) => new CsdlReference(r));\n    this.Schemas = Schemas?.map((s) => new CsdlSchema(s));\n  }\n\n  toConfig(base?: Partial<ApiConfig>): ApiConfig {\n    return {\n      ...base,\n      version: base?.version ?? (this.Version as ODataVersion),\n      schemas: (this.Schemas ?? []).map((ms) =>\n        ms.toConfig(base?.schemas?.find((cs) => cs.namespace === ms.Namespace)),\n      ),\n      references: (this.References ?? []).map((mr) =>\n        mr.toConfig(base?.references?.find((cs) => cs.uri === mr.Uri)),\n      ),\n    } as ApiConfig;\n  }\n\n  toJson() {\n    return {\n      Version: this.Version,\n      References: this.References.map((r) => r.toJson()),\n      Schemas: this.Schemas.map((s) => s.toJson()),\n    };\n  }\n\n  functions() {\n    return this.Schemas.reduce((acc, s) => {\n      return [...acc, ...(s.Function ?? [])];\n    }, [] as CsdlFunction[]);\n  }\n\n  actions() {\n    return this.Schemas.reduce((acc, s) => {\n      return [...acc, ...(s.Action ?? [])];\n    }, [] as CsdlAction[]);\n  }\n\n  static fromJson(json: any): ODataMetadata {\n    return new ODataMetadata(json.Version, json.References, json.Schemas);\n  }\n}\n","import { CsdlReference } from './csdl/csdl-reference';\n\nimport { CsdlSchema } from './csdl/csdl-schema';\nimport { VERSION_4_0 } from '../constants';\nimport { ODataMetadata } from './metadata';\n\nenum FieldType {\n  ATTRIBUTE,\n  TAG,\n}\n\nclass Field {\n  constructor(\n    public name: string,\n    public fieldType: FieldType,\n  ) {}\n}\n\nexport class ODataMetadataParser {\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_COLLECTION = 'Collection';\n  private static readonly TAG_RECORD = 'Record';\n  private static readonly TAG_STRING = 'String';\n  private static readonly TAG_ENUM_MEMBER = 'EnumMember';\n  private static readonly TAG_PROPERTY_VALUE = 'PropertyValue';\n  private static readonly TAG_PROPERTY_PATH = 'PropertyPath';\n  private static readonly TAG_NAVIGATION_PROPERTY_PATH =\n    'NavigationPropertyPath';\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_STRING = 'String';\n  private static readonly ATTRIBUTE_DATE = 'Date';\n  private static readonly ATTRIBUTE_BOOL = 'Bool';\n  private static readonly ATTRIBUTE_INT = 'Int';\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 document: Document;\n\n  constructor(xml: string) {\n    try {\n      const parser: DOMParser = new DOMParser();\n      this.document = parser.parseFromString(xml, 'text/xml');\n\n      this.checkVersion(document);\n    } catch (error) {\n      throw new Error('Unable to parse metadata, ' + error);\n    }\n  }\n\n  metadata() {\n    const version = this.getFieldValueByAttribute(\n      new Field(ODataMetadataParser.ATTRIBUTE_VERSION, FieldType.ATTRIBUTE),\n      this.document.documentElement.attributes,\n    );\n\n    const references = this.getObjects(\n      this.document.documentElement,\n      ODataMetadataParser.TAG_REFERENCE,\n      [\n        new Field(ODataMetadataParser.ATTRIBUTE_URI, FieldType.ATTRIBUTE),\n        new Field(ODataMetadataParser.TAG_INCLUDE, FieldType.TAG),\n        new Field(ODataMetadataParser.TAG_INCLUDE_ANNOTATIONS, FieldType.TAG),\n        new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG),\n      ],\n    );\n\n    const dataServices: Element =\n      this.document.documentElement.getElementsByTagName(\n        ODataMetadataParser.TAG_DATA_SERVICES,\n      )[0];\n    const schemas = this.getObjects(\n      dataServices,\n      ODataMetadataParser.TAG_SCHEMA,\n      [\n        new Field(ODataMetadataParser.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE),\n        new Field(ODataMetadataParser.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),\n        new Field(ODataMetadataParser.TAG_ENUM_TYPE, FieldType.TAG),\n        new Field(ODataMetadataParser.TAG_COMPLEX_TYPE, FieldType.TAG),\n        new Field(ODataMetadataParser.TAG_ENTITY_TYPE, FieldType.TAG),\n        new Field(ODataMetadataParser.TAG_FUNCTION, FieldType.TAG),\n        new Field(ODataMetadataParser.TAG_ACTION, FieldType.TAG),\n        new Field(ODataMetadataParser.TAG_ENTITY_CONTAINER, FieldType.TAG),\n        new Field(ODataMetadataParser.TAG_TYPE_DEFINITION, FieldType.TAG),\n        new Field(ODataMetadataParser.TAG_TERM, FieldType.TAG),\n        new Field(ODataMetadataParser.TAG_ANNOTATIONS, FieldType.TAG),\n      ],\n    );\n\n    return new ODataMetadata(version, references, schemas);\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      fieldValues['TextContent'] = element.textContent;\n      switch (tag) {\n        case ODataMetadataParser.TAG_REFERENCE:\n        case ODataMetadataParser.TAG_INCLUDE:\n        case ODataMetadataParser.TAG_INCLUDE_ANNOTATIONS:\n        case ODataMetadataParser.TAG_TERM:\n        case ODataMetadataParser.TAG_ANNOTATIONS:\n        case ODataMetadataParser.TAG_COLLECTION:\n        case ODataMetadataParser.TAG_RECORD:\n        case ODataMetadataParser.TAG_STRING:\n        case ODataMetadataParser.TAG_ENUM_MEMBER:\n        case ODataMetadataParser.TAG_PROPERTY_VALUE:\n        case ODataMetadataParser.TAG_PROPERTY_PATH:\n        case ODataMetadataParser.TAG_NAVIGATION_PROPERTY_PATH:\n        case ODataMetadataParser.TAG_ANNOTATION:\n        case ODataMetadataParser.TAG_SCHEMA:\n        case ODataMetadataParser.TAG_ENUM_TYPE:\n        case ODataMetadataParser.TAG_COMPLEX_TYPE:\n        case ODataMetadataParser.TAG_ENTITY_TYPE:\n        case ODataMetadataParser.TAG_FUNCTION:\n        case ODataMetadataParser.TAG_MEMBER:\n        case ODataMetadataParser.TAG_PROPERTY:\n        case ODataMetadataParser.TAG_PROPERTY_REF:\n        case ODataMetadataParser.TAG_NAVIGATION_PROPERTY:\n        case ODataMetadataParser.TAG_REFERENTIAL_CONSTRAINT:\n        case ODataMetadataParser.TAG_PARAMETER:\n        case ODataMetadataParser.TAG_ACTION:\n        case ODataMetadataParser.TAG_ENTITY_SET:\n        case ODataMetadataParser.TAG_SINGLETON:\n        case ODataMetadataParser.TAG_FUNCTION_IMPORT:\n        case ODataMetadataParser.TAG_ACTION_IMPORT:\n        case ODataMetadataParser.TAG_NAVIGATION_PROPERTY_BINDING:\n        case ODataMetadataParser.TAG_TYPE_DEFINITION:\n        case ODataMetadataParser.TAG_ENTITY_CONTAINER:\n          objects.push(fieldValues);\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      fieldValues['TextContent'] = element.textContent;\n      switch (tag) {\n        case ODataMetadataParser.TAG_KEY:\n        case ODataMetadataParser.TAG_RETURN_TYPE:\n        case ODataMetadataParser.TAG_ON_DELETE:\n          return fieldValues;\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  ): { [name: string]: any } {\n    const fieldValues: { [name: string]: any } = {};\n\n    for (const field of fields) {\n      if (field.fieldType === FieldType.TAG) {\n        fieldValues[field.name] = this.getFieldValueByTag(field, element);\n      } else if (field.fieldType === FieldType.ATTRIBUTE) {\n        fieldValues[field.name] = this.getFieldValueByAttribute(\n          field,\n          attributes,\n        );\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 ODataMetadataParser.ATTRIBUTE_VERSION:\n      case ODataMetadataParser.ATTRIBUTE_URI:\n      case ODataMetadataParser.ATTRIBUTE_NAMESPACE:\n      case ODataMetadataParser.ATTRIBUTE_ALIAS:\n      case ODataMetadataParser.ATTRIBUTE_TERM_NAMESPACE:\n      case ODataMetadataParser.ATTRIBUTE_TERM:\n      case ODataMetadataParser.ATTRIBUTE_QUALIFIER:\n      case ODataMetadataParser.ATTRIBUTE_STRING:\n      case ODataMetadataParser.ATTRIBUTE_BOOL:\n      case ODataMetadataParser.ATTRIBUTE_INT:\n      case ODataMetadataParser.ATTRIBUTE_TARGET_NAMESPACE:\n      case ODataMetadataParser.ATTRIBUTE_NAME:\n      case ODataMetadataParser.ATTRIBUTE_TYPE:\n      case ODataMetadataParser.ATTRIBUTE_SRID:\n      case ODataMetadataParser.ATTRIBUTE_DEFAULT_VALUE:\n      case ODataMetadataParser.ATTRIBUTE_PARTNER:\n      case ODataMetadataParser.ATTRIBUTE_PROPERTY:\n      case ODataMetadataParser.ATTRIBUTE_REFERENCED_PROPERTY:\n      case ODataMetadataParser.ATTRIBUTE_BASE_TYPE:\n      case ODataMetadataParser.ATTRIBUTE_ENTITY_SET_PATH:\n      case ODataMetadataParser.ATTRIBUTE_ENTITY_TYPE:\n      case ODataMetadataParser.ATTRIBUTE_PATH:\n      case ODataMetadataParser.ATTRIBUTE_TARGET:\n      case ODataMetadataParser.ATTRIBUTE_FUNCTION:\n      case ODataMetadataParser.ATTRIBUTE_ACTION:\n      case ODataMetadataParser.ATTRIBUTE_ENTITY_SET:\n      case ODataMetadataParser.ATTRIBUTE_UNDERLYING_TYPE:\n      case ODataMetadataParser.ATTRIBUTE_EXTENDS:\n      case ODataMetadataParser.ATTRIBUTE_BASE_TERM:\n      case ODataMetadataParser.ATTRIBUTE_APPLIES_TO:\n        return this.getAttributeValue(attributes, field.name);\n      case ODataMetadataParser.ATTRIBUTE_NULLABLE:\n      case ODataMetadataParser.ATTRIBUTE_UNICODE:\n      case ODataMetadataParser.ATTRIBUTE_OPEN_TYPE:\n      case ODataMetadataParser.ATTRIBUTE_HAS_STREAM:\n      case ODataMetadataParser.ATTRIBUTE_IS_BOUND:\n      case ODataMetadataParser.ATTRIBUTE_IS_COMPOSABLE:\n      case ODataMetadataParser.ATTRIBUTE_CONTAINS_TARGET:\n      case ODataMetadataParser.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT:\n      case ODataMetadataParser.ATTRIBUTE_ABSTRACT:\n      case ODataMetadataParser.ATTRIBUTE_IS_FLAGS:\n        return this.propertyValueToBoolean(\n          this.getAttributeValue(attributes, field.name),\n        );\n      case ODataMetadataParser.ATTRIBUTE_VALUE:\n      case ODataMetadataParser.ATTRIBUTE_MAX_LENGTH:\n      case ODataMetadataParser.ATTRIBUTE_PRECISION:\n      case ODataMetadataParser.ATTRIBUTE_SCALE:\n        return this.propertyValueToNumber(\n          this.getAttributeValue(attributes, field.name),\n        );\n      case ODataMetadataParser.ATTRIBUTE_DATE:\n        return this.propertyValueToDate(\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 ODataMetadataParser.TAG_INCLUDE:\n        return this.getObjects(element, field.name, [\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_NAMESPACE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(ODataMetadataParser.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),\n        ]);\n      case ODataMetadataParser.TAG_INCLUDE_ANNOTATIONS:\n        return this.getObjects(element, field.name, [\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_TERM_NAMESPACE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_QUALIFIER,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_TARGET_NAMESPACE,\n            FieldType.ATTRIBUTE,\n          ),\n        ]);\n      case ODataMetadataParser.TAG_TERM:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_BASE_TERM,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_DEFAULT_VALUE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_APPLIES_TO,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_NULLABLE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_MAX_LENGTH,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_PRECISION,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(ODataMetadataParser.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_STRING, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_BOOL, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_INT, FieldType.ATTRIBUTE),\n        ]);\n      case ODataMetadataParser.TAG_ANNOTATIONS:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_QUALIFIER,\n            FieldType.ATTRIBUTE,\n          ),\n        ]);\n      case ODataMetadataParser.TAG_ANNOTATION:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_TERM, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_STRING, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_BOOL, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_INT, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.TAG_COLLECTION, FieldType.TAG),\n          new Field(ODataMetadataParser.TAG_RECORD, FieldType.TAG),\n          new Field(ODataMetadataParser.TAG_ENUM_MEMBER, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_COLLECTION:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.TAG_STRING, FieldType.TAG),\n          new Field(ODataMetadataParser.TAG_RECORD, FieldType.TAG),\n          new Field(ODataMetadataParser.TAG_PROPERTY_PATH, FieldType.TAG),\n          new Field(\n            ODataMetadataParser.TAG_NAVIGATION_PROPERTY_PATH,\n            FieldType.TAG,\n          ),\n        ]);\n      case ODataMetadataParser.TAG_RECORD:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.TAG_PROPERTY_VALUE, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_STRING:\n        return this.getObjects(element, field.name, []);\n      case ODataMetadataParser.TAG_ENUM_MEMBER:\n        return this.getObjects(element, field.name, []);\n      case ODataMetadataParser.TAG_PROPERTY_VALUE:\n        return this.getObjects(element, field.name, [\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_PROPERTY,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(ODataMetadataParser.ATTRIBUTE_STRING, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_DATE, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.TAG_ENUM_MEMBER, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_PROPERTY_PATH:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.TAG_PROPERTY_VALUE, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_NAVIGATION_PROPERTY_PATH:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.TAG_PROPERTY_VALUE, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_ENUM_TYPE:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.TAG_MEMBER, FieldType.TAG),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_UNDERLYING_TYPE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_IS_FLAGS,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_COMPLEX_TYPE:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.TAG_PROPERTY, FieldType.TAG),\n          new Field(ODataMetadataParser.TAG_NAVIGATION_PROPERTY, FieldType.TAG),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_BASE_TYPE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_OPEN_TYPE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_ABSTRACT,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_ENTITY_TYPE:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.TAG_KEY, FieldType.TAG),\n          new Field(ODataMetadataParser.TAG_PROPERTY, FieldType.TAG),\n          new Field(ODataMetadataParser.TAG_NAVIGATION_PROPERTY, FieldType.TAG),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_BASE_TYPE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_OPEN_TYPE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_ABSTRACT,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_HAS_STREAM,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_FUNCTION:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.TAG_RETURN_TYPE, FieldType.TAG),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_IS_BOUND,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_ENTITY_SET_PATH,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_IS_COMPOSABLE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(ODataMetadataParser.TAG_PARAMETER, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_MEMBER:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_VALUE, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_PROPERTY:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_NULLABLE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_MAX_LENGTH,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_PRECISION,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(ODataMetadataParser.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_DEFAULT_VALUE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_KEY:\n        return this.getObject(element, field.name, [\n          new Field(ODataMetadataParser.TAG_PROPERTY_REF, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_PROPERTY_REF:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),\n        ]);\n      case ODataMetadataParser.TAG_NAVIGATION_PROPERTY:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_NULLABLE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(ODataMetadataParser.ATTRIBUTE_PARTNER, FieldType.ATTRIBUTE),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_CONTAINS_TARGET,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.TAG_REFERENTIAL_CONSTRAINT,\n            FieldType.TAG,\n          ),\n          new Field(ODataMetadataParser.TAG_ON_DELETE, FieldType.TAG),\n          new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_REFERENTIAL_CONSTRAINT:\n        return this.getObjects(element, field.name, [\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_PROPERTY,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_REFERENCED_PROPERTY,\n            FieldType.ATTRIBUTE,\n          ),\n        ]);\n      case ODataMetadataParser.TAG_ON_DELETE:\n        return this.getObject(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE),\n        ]);\n      case ODataMetadataParser.TAG_PARAMETER:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_NULLABLE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_MAX_LENGTH,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_PRECISION,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(ODataMetadataParser.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_RETURN_TYPE:\n        return this.getObject(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_NULLABLE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_MAX_LENGTH,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_PRECISION,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(ODataMetadataParser.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n        ]);\n      case ODataMetadataParser.TAG_ACTION:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.TAG_RETURN_TYPE, FieldType.TAG),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_IS_BOUND,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_ENTITY_SET_PATH,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(ODataMetadataParser.TAG_PARAMETER, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_ENTITY_CONTAINER:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_EXTENDS, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.TAG_ENTITY_SET, FieldType.TAG),\n          new Field(ODataMetadataParser.TAG_SINGLETON, FieldType.TAG),\n          new Field(ODataMetadataParser.TAG_FUNCTION_IMPORT, FieldType.TAG),\n          new Field(ODataMetadataParser.TAG_ACTION_IMPORT, FieldType.TAG),\n          new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_ENTITY_SET:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_ENTITY_TYPE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.TAG_NAVIGATION_PROPERTY_BINDING,\n            FieldType.TAG,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_SINGLETON:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n          new Field(\n            ODataMetadataParser.TAG_NAVIGATION_PROPERTY_BINDING,\n            FieldType.TAG,\n          ),\n          new Field(ODataMetadataParser.TAG_ANNOTATION, FieldType.TAG),\n        ]);\n      case ODataMetadataParser.TAG_FUNCTION_IMPORT:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_FUNCTION,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_ENTITY_SET,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT,\n            FieldType.ATTRIBUTE,\n          ),\n        ]);\n      case ODataMetadataParser.TAG_ACTION_IMPORT:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_ENTITY_SET,\n            FieldType.ATTRIBUTE,\n          ),\n        ]);\n      case ODataMetadataParser.TAG_NAVIGATION_PROPERTY_BINDING:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_PATH, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE),\n        ]);\n      case ODataMetadataParser.TAG_TYPE_DEFINITION:\n        return this.getObjects(element, field.name, [\n          new Field(ODataMetadataParser.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_UNDERLYING_TYPE,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_MAX_LENGTH,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(\n            ODataMetadataParser.ATTRIBUTE_PRECISION,\n            FieldType.ATTRIBUTE,\n          ),\n          new Field(ODataMetadataParser.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n          new Field(ODataMetadataParser.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  protected propertyValueToDate(attributeValue?: string) {\n    return attributeValue !== undefined ? new Date(attributeValue) : undefined;\n  }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { $METADATA, ACCEPT, APPLICATION_XML } from '../../constants';\nimport { PathSegment } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataResource } from '../resource';\nimport { ODataOptions } from './options';\nimport { ODataMetadata } from '../../metadata/metadata';\nimport { ODataMetadataParser } from '../../metadata';\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(PathSegment.metadata, $METADATA);\n    return new ODataMetadataResource(api, segments);\n  }\n\n  override clone(): ODataMetadataResource {\n    return super.clone() as ODataMetadataResource;\n  }\n  //#endregion\n\n  //#region Requests\n  protected override get(options?: ODataOptions): Observable<any> {\n    return super.get({\n      responseType: 'text',\n      ...options,\n      headers: { [ACCEPT]: APPLICATION_XML },\n    });\n  }\n  //#endregion\n\n  //#region Shortcuts\n  fetch(options?: ODataOptions): Observable<ODataMetadata> {\n    return this.get(options).pipe(\n      map((body: any) => new ODataMetadataParser(body).metadata()),\n    );\n  }\n  //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ModelInterface, ODataModel } from '../../models';\nimport { PathSegment, QueryOption } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataResource } from '../resource';\nimport { ODataEntity } from '../response';\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      type,\n    }: {\n      path: string;\n      type?: string;\n    },\n  ) {\n    const segments = new ODataPathSegments();\n    const segment = segments.add(PathSegment.singleton, path);\n    if (type !== undefined) {\n      segment.outgoingType(type);\n      segment.incomingType(type);\n    }\n    return new ODataSingletonResource<S>(api, { segments });\n  }\n  override clone(): ODataSingletonResource<T> {\n    return super.clone() as ODataSingletonResource<T>;\n  }\n  //#endregion\n\n  key(value: any) {\n    const singleton = this.clone();\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();\n    const types = this.pathSegments.types({ key: true });\n    const keys = values.map((value, index) =>\n      ODataResource.resolveKey(\n        value,\n        this.api.findStructuredType<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<any> {\n    return super.post(attrs, { responseType: 'entity', ...options });\n  }\n\n  protected override put(\n    attrs: Partial<T>,\n    options: ODataOptions = {},\n  ): Observable<any> {\n    return super.put(attrs, { responseType: 'entity', ...options });\n  }\n\n  protected override patch(\n    attrs: Partial<T>,\n    options: ODataOptions = {},\n  ): Observable<any> {\n    return super.patch(attrs, { responseType: 'entity', ...options });\n  }\n\n  protected override delete(options: ODataOptions = {}): Observable<any> {\n    return super.delete({ responseType: 'entity', ...options });\n  }\n\n  protected override get(\n    options: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\n    } = {},\n  ): Observable<any> {\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,\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,\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): Observable<any> {\n    return this.delete(options);\n  }\n\n  /**\n   * Fetch an existing entity.\n   * @param options The options for the request.\n   * @returns Observable of the entity with the annotations.\n   */\n  fetch(\n    options?: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\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   * @returns Observable of the entity.\n   */\n  fetchEntity(\n    options?: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\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   * @returns Observable of the entity.\n   */\n  fetchModel(\n    options?: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\n      ModelType?: typeof ODataModel;\n    },\n  ): Observable<(ODataModel<T> & ModelInterface<T>) | null>;\n  fetchModel<M extends ODataModel<T>>(\n    options?: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\n      ModelType?: typeof ODataModel;\n    },\n  ): Observable<M | null>;\n  fetchModel(\n    options?: ODataOptions & {\n      bodyQueryOptions?: QueryOption[];\n      ModelType?: typeof ODataModel;\n    },\n  ) {\n    return this.fetch(options).pipe(\n      map(({ entity, annots }) =>\n        entity\n          ? this.asModel(entity, { annots, ModelType: options?.ModelType })\n          : null,\n      ),\n    );\n  }\n  //#endregion\n}\n","import { ODataContext, ODataVersionHelper } from './helper';\n\nimport { ODataMetadataType } from './types';\n\nexport abstract class ODataAnnotations<T> {\n  constructor(\n    public helper: ODataVersionHelper,\n    protected annotations: Map<string, any> = new Map<string, any>(),\n    protected context?: ODataContext,\n  ) {}\n\n  attributes(\n    data: { [name: string]: any },\n    metadata: ODataMetadataType,\n  ): Partial<T> {\n    return this.helper.attributes(data, metadata) as Partial<T>;\n  }\n\n  update(data: { [name: string]: any }) {\n    this.annotations = new Map<string, any>([\n      ...this.annotations,\n      ...this.helper.annotations(data),\n    ]);\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 union(other: ODataAnnotations<any>): ODataAnnotations<any>;\n  abstract clone(): ODataAnnotations<any>;\n  abstract data(data: { [name: string]: any }): { [name: string]: any };\n}\n\nexport class ODataPropertyAnnotations<T> extends ODataAnnotations<T> {\n  union(other: ODataPropertyAnnotations<any>): ODataPropertyAnnotations<any> {\n    return new ODataPropertyAnnotations<any>(\n      this.helper,\n      new Map<string, any>([...this.annotations, ...other.annotations]),\n      Object.assign({}, this.context, other.context),\n    );\n  }\n\n  clone(): ODataPropertyAnnotations<any> {\n    return new ODataPropertyAnnotations<any>(\n      this.helper,\n      new Map(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<T> extends ODataAnnotations<T> {\n  union(other: ODataEntityAnnotations<any>): ODataEntityAnnotations<any> {\n    return new ODataEntityAnnotations<any>(\n      this.helper,\n      new Map<string, any>([...this.annotations, ...other.annotations]),\n      Object.assign({}, this.context, other.context),\n    );\n  }\n\n  clone(): ODataEntityAnnotations<any> {\n    return new ODataEntityAnnotations<any>(\n      this.helper,\n      new Map(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?: Map<keyof T, Map<string, any>>;\n  get properties() {\n    if (this._properties === undefined) {\n      this._properties = this.helper.properties<T>(this.annotations);\n    }\n    return this._properties;\n  }\n\n  property<F>(name: keyof T, type: 'collection'): ODataEntitiesAnnotations<F>;\n  property<F>(name: keyof T, type: 'single'): ODataEntityAnnotations<F>;\n  property<F>(\n    name: keyof T,\n    type: 'single' | 'collection',\n  ): ODataEntityAnnotations<F> | ODataEntitiesAnnotations<F> {\n    const props = this.properties.get(name);\n    return type === 'collection'\n      ? new ODataEntitiesAnnotations<F>(this.helper, props)\n      : new ODataEntityAnnotations<F>(this.helper, props);\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<T> extends ODataAnnotations<T> {\n  union(other: ODataEntitiesAnnotations<any>): ODataEntitiesAnnotations<any> {\n    return new ODataEntitiesAnnotations<any>(\n      this.helper,\n      new Map<string, any>([...this.annotations, ...other.annotations]),\n      Object.assign({}, this.context, other.context),\n    );\n  }\n\n  clone(): ODataEntitiesAnnotations<any> {\n    return new ODataEntitiesAnnotations<any>(\n      this.helper,\n      new Map(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(\n      /[&?]{1}\\$skiptoken=([\\d\\w\\s'\\-]+)/,\n    );\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\n  function(name: string) {\n    return this.functions[name];\n  }\n\n  entity(): ODataEntityAnnotations<T> {\n    return new ODataEntityAnnotations<T>(this.helper, this.annotations);\n  }\n}\n","import {\n  CacheCacheability,\n  ODataMetadataType,\n  ODataVersion,\n  ParserOptions,\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  ieee754Compatible?: boolean;\n  // Location\n  location?: string;\n  // Cache\n  cacheability?: 'public' | 'private' | 'no-cache' | 'no-store';\n  maxAge?: number;\n\n  constructor(config: ParserOptions) {\n    this.version = config.version || DEFAULT_VERSION;\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  setPreferenceApplied(preference: string) {\n    preference.split(',').forEach((prefer) => {\n      // TODO: resolve preference\n    });\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 {\n  APPLICATION_JSON,\n  ODATA_VERSION_HEADERS,\n  CONTENT_TYPE,\n  CACHE_CONTROL,\n  LOCATION_HEADER,\n  ETAG_HEADERS,\n  ODATA_ENTITYID_HEADERS,\n  PREFERENCE_APPLIED,\n} from '../constants';\nimport { ODataApi } from '../api';\nimport { ODataRequest } from './request';\nimport { Http } from '../utils/http';\nimport { ODataContext } from '../helper';\nimport { ODataResponseOptions } from './options';\n\nexport type ODataEntity<T> = {\n  entity: T | null;\n  annots: ODataEntityAnnotations<T>;\n};\n\nexport type ODataEntities<T> = {\n  entities: T[] | null;\n  annots: ODataEntitiesAnnotations<T>;\n};\n\nexport type ODataProperty<T> = {\n  property: T | null;\n  annots: ODataPropertyAnnotations<T>;\n};\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.parserOptions);\n      const contentType = this.headers.get(CONTENT_TYPE);\n      if (contentType && contentType.includes(APPLICATION_JSON)) {\n        const features = contentType\n          .split(',')\n          .find((p) => p.startsWith(APPLICATION_JSON)) as string;\n        this._options.setFeatures(features);\n      }\n      const headerKey = Http.resolveHeaderKey(\n        this.headers,\n        ODATA_VERSION_HEADERS,\n      );\n      if (headerKey) {\n        const version = (this.headers.get(headerKey) || '').replace(\n          /\\;/g,\n          '',\n        ) as '2.0' | '3.0' | '4.0';\n        this._options.setVersion(version);\n      }\n\n      const preferenceApplied = this.headers.get(PREFERENCE_APPLIED);\n      if (preferenceApplied) {\n        this._options.setPreferenceApplied(preferenceApplied);\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?: Map<string, any>;\n  get annotations(): Map<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) this._annotations.set(options.helper.ODATA_ETAG, etag);\n      }\n      key = Http.resolveHeaderKey(this.headers, ODATA_ENTITYID_HEADERS);\n      if (key) {\n        const entityId = this.headers.get(key);\n        if (entityId) this._annotations.set(options.helper.ODATA_ID, 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<T>(\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<T>(\n      options.helper,\n      this.annotations,\n      this.context,\n    );\n    let entities = payload ? annots.data(payload) : null;\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<T>(\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(\n            data as { [name: string]: any },\n            this.api.options.stripMetadata,\n          )\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","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  /**\n   * Store the cache in the storage\n   */\n  store() {\n    this.storage.setItem(\n      this.name,\n      JSON.stringify(Array.from(this.entries.entries())),\n    );\n  }\n\n  /**\n   * Restore the cache from the storage\n   */\n  restore() {\n    this.entries = new Map<string, ODataCacheEntry<any>>(\n      JSON.parse(this.storage.getItem(this.name) || '[]'),\n    );\n  }\n\n  /**\n   * Flush the cache and clean the storage\n   */\n  override flush() {\n    super.flush();\n    this.store();\n  }\n\n  /**\n   * Store the response in the cache\n   * @param req The request with the resource to store the response\n   * @param res The response to store in the cache\n   */\n  putResponse(req: ODataRequest<any>, res: ODataResponse<any>) {\n    const scope = this.scope(req);\n    const tags = this.tags(res);\n    this.put<ResponseJson>(req.cacheKey, res.toJson(), {\n      timeout: res.options.maxAge,\n      scope,\n      tags,\n    });\n  }\n\n  /**\n   * Restore the response from the cache\n   * @param req The request with the resource to get the response\n   * @returns The response from the cache\n   */\n  getResponse(req: ODataRequest<any>): ODataResponse<any> | undefined {\n    const scope = this.scope(req);\n    const data = this.get<ResponseJson>(req.cacheKey, { scope });\n\n    return data !== undefined ? ODataResponse.fromJson(req, data) : undefined;\n  }\n}\n","import { forkJoin, Observable, of, throwError } from 'rxjs';\nimport { defaultIfEmpty, finalize, map, switchMap } from 'rxjs/operators';\nimport { DEFAULT_VERSION } from '../constants';\nimport { ODataHelper } from '../helper';\nimport {\n  ODataActionOptions,\n  ODataEntityResource,\n  ODataEntitySetResource,\n  ODataFunctionOptions,\n  ODataNavigationPropertyResource,\n  ODataOptions,\n  ODataPropertyResource,\n  ODataQueryOptionsHandler,\n  ODataResource,\n} from '../resources';\nimport { ODataStructuredType } from '../schema/structured-type';\nimport { Types } from '../utils/types';\nimport { ODataModel } from './model';\nimport {\n  INCLUDE_DEEP,\n  ModelFieldOptions,\n  ODataModelEntry,\n  ODataModelEvent,\n  ODataModelEventEmitter,\n  ODataModelEventType,\n  ODataModelField,\n  ODataModelOptions,\n  ODataModelState,\n} from './options';\nimport {\n  ODataEntitiesAnnotations,\n  ODataEntityAnnotations,\n} from '../annotations';\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  _resources: {\n    parent:\n      | [\n          ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n          ODataModelField<any> | null,\n        ]\n      | null;\n    resource:\n      | ODataEntitySetResource<T>\n      | ODataNavigationPropertyResource<T>\n      | ODataPropertyResource<T>\n      | null;\n  }[] = [];\n  _annotations!: ODataEntitiesAnnotations<T>;\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$: ODataModelEventEmitter<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> | null;\n      annots?: ODataEntitiesAnnotations<T>;\n      model?: typeof ODataModel;\n      reset?: boolean;\n    } = {},\n  ) {\n    const Klass = this.constructor as typeof ODataCollection;\n    if (!model && Klass.model !== null) model = Klass.model;\n    if (!model) throw new Error('Collection: Collection need model');\n\n    this._model = model;\n\n    // Events\n    this.events$ = new ODataModelEventEmitter<T>({ collection: this });\n    this.events$.subscribe((e) => model!.meta.events$.emit(e));\n\n    // Parent\n    if (parent !== undefined) {\n      this._parent = parent;\n    }\n\n    // Resource\n    if (this._parent === null && !resource)\n      resource = this._model.meta.collectionResourceFactory() as\n        | ODataEntitySetResource<T>\n        | ODataPropertyResource<T>\n        | ODataNavigationPropertyResource<T>\n        | undefined;\n    if (resource) {\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        ODataHelper[resource?.api?.options.version || 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    | null {\n    return ODataModelOptions.resource<T>(this) as\n      | ODataEntitySetResource<T>\n      | ODataNavigationPropertyResource<T>\n      | ODataPropertyResource<T>\n      | null;\n  }\n\n  pushResource(\n    resource:\n      | ODataEntitySetResource<T>\n      | ODataNavigationPropertyResource<T>\n      | ODataPropertyResource<T>\n      | null,\n  ) {\n    // Push current parent and resource\n    this._resources.push({ parent: this._parent, resource: this._resource });\n    // Replace parent and resource\n    this._parent = null;\n    this._resource = resource;\n  }\n\n  popResource() {\n    // Pop parent and resource\n    const pop = this._resources.pop();\n    if (pop !== undefined) {\n      const current = { parent: this._parent, resource: this._resource };\n      this._parent = pop.parent;\n      this._resource = pop.resource;\n      return current;\n    }\n    return undefined;\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.outgoingType() !== resource.outgoingType() &&\n      !this._resource.isSubtypeOf(resource)\n    )\n      throw new Error(\n        `attach: Can't reattach ${this._resource.outgoingType()} to ${resource.outgoingType()}`,\n      );\n\n    this._entries.forEach(({ model }) => {\n      const modelResource = this._model.meta.modelResourceFactory(\n        resource.cloneQuery<T>(),\n      ) as ODataEntityResource<T>;\n      if (modelResource !== undefined) model.attach(modelResource);\n    });\n\n    const current = this._resource;\n    if (current === null || !current.isEqualTo(resource)) {\n      this._resource = resource;\n      this.events$.trigger(ODataModelEventType.Attach, {\n        previous: current,\n        value: resource,\n      });\n    }\n  }\n  withResource<R>(\n    resource:\n      | ODataEntitySetResource<T>\n      | ODataNavigationPropertyResource<T>\n      | ODataPropertyResource<T>\n      | null,\n    ctx: (collection: this) => R,\n  ): R {\n    // Push\n    this.pushResource(resource);\n    // Execute\n    const result = ctx(this);\n    if (result instanceof Observable) {\n      return (result as any).pipe(finalize(() => this.popResource()));\n    } else {\n      // Pop\n      this.popResource();\n      return result;\n    }\n  }\n\n  asEntitySet<R>(ctx: (collection: this) => R): R {\n    // Build new resource\n    const resource = this._model.meta.collectionResourceFactory(\n      this._resource?.cloneQuery<T>(),\n    ) as\n      | ODataEntitySetResource<T>\n      | ODataNavigationPropertyResource<T>\n      | ODataPropertyResource<T>;\n    return this.withResource(resource, ctx);\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 annots = new ODataEntityAnnotations(this._annotations.helper);\n    annots.update(data);\n\n    if (annots?.type !== undefined && Model.meta !== null) {\n      const schema = Model.meta.findChildOptions((o) =>\n        o.isTypeOf(annots.type as string),\n      )?.structuredType;\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_id = false,\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_id?: boolean;\n    include_non_field?: boolean;\n    changes_only?: boolean;\n    field_mapping?: boolean;\n    chain?: (ODataModel<any> | ODataCollection<any, ODataModel<any>>)[];\n  } = {}): (Partial<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_id,\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(INCLUDE_DEEP);\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    return new (<typeof ODataCollection>this.constructor)(\n      this.toEntities(INCLUDE_DEEP),\n      {\n        resource: this.resource(),\n        annots: this.annots(),\n      },\n    ) as C;\n  }\n\n  private _request<T, R>(\n    obs$: Observable<T>,\n    mapCallback: (response: T) => R,\n  ): Observable<R> {\n    this.events$.trigger(ODataModelEventType.Request, {\n      options: { observable: obs$ },\n    });\n    return obs$.pipe(\n      map((response) => mapCallback(response)),\n      finalize(() => this.events$.trigger(ODataModelEventType.Sync)),\n    );\n  }\n\n  fetch({\n    add,\n    merge,\n    remove,\n    withCount,\n    ...options\n  }: ODataOptions & {\n    add?: boolean;\n    merge?: boolean;\n    remove?: boolean;\n    withCount?: boolean;\n  } = {}): Observable<M[]> {\n    const resource = this.resource();\n    if (!resource)\n      return throwError(() => new Error('fetch: Resource is null'));\n\n    const obs$ =\n      resource instanceof ODataEntitySetResource\n        ? resource.fetch({ withCount, ...options })\n        : resource.fetch({\n            responseType: 'entities',\n            withCount,\n            ...options,\n          });\n\n    return this._request(obs$, ({ entities, annots }) => {\n      this._annotations = annots;\n      return entities !== null\n        ? this.assign(entities, {\n            reset: true,\n            add: add ?? true,\n            merge: merge ?? true,\n            remove: remove ?? true,\n          })\n        : [];\n    });\n  }\n\n  fetchAll({\n    add,\n    merge,\n    remove,\n    withCount,\n    ...options\n  }: ODataOptions & {\n    add?: boolean;\n    merge?: boolean;\n    remove?: boolean;\n    withCount?: boolean;\n  } = {}): Observable<M[]> {\n    const resource = this.resource();\n    if (!resource)\n      return throwError(() => new Error('fetchAll: Resource is null'));\n\n    const obs$ = resource.fetchAll({ withCount, ...options });\n\n    return this._request(obs$, ({ entities, annots }) => {\n      this._annotations = annots;\n      return entities !== null\n        ? this.assign(entities, {\n            reset: true,\n            add: add ?? true,\n            merge: merge ?? true,\n            remove: remove ?? true,\n          })\n        : [];\n    });\n  }\n\n  fetchMany(\n    top: number,\n    {\n      add,\n      merge,\n      remove,\n      withCount,\n      ...options\n    }: ODataOptions & {\n      add?: boolean;\n      merge?: boolean;\n      remove?: boolean;\n      withCount?: boolean;\n    } = {},\n  ): Observable<M[]> {\n    const resource = this.resource();\n    if (!resource)\n      return throwError(() => new Error('fetchMany: Resource is null'));\n\n    resource.query((q) =>\n      remove || this.length == 0 ? q.skip().clear() : q.skip(this.length),\n    );\n\n    const obs$ = resource.fetchMany(top, { withCount, ...options });\n\n    return this._request(obs$, ({ entities, annots }) => {\n      this._annotations = annots;\n      return entities !== null\n        ? this.assign(entities, {\n            reset: true,\n            add: add ?? true,\n            merge: merge ?? true,\n            remove: remove ?? false,\n          })\n        : [];\n    });\n  }\n\n  fetchOne({\n    add,\n    merge,\n    remove,\n    withCount,\n    ...options\n  }: ODataOptions & {\n    add?: boolean;\n    merge?: boolean;\n    remove?: boolean;\n    withCount?: boolean;\n  } = {}) {\n    const resource = this.resource();\n    if (!resource)\n      return throwError(() => new Error('fetchOne: Resource is null'));\n\n    resource.query((q) =>\n      remove || this.length == 0 ? q.skip().clear() : q.skip(this.length),\n    );\n\n    const obs$ = resource.fetchOne({ withCount, ...options });\n\n    return this._request(obs$, ({ entity, annots }) => {\n      this._annotations = annots;\n      return entity !== null\n        ? this.assign([entity], {\n            reset: true,\n            add: add ?? true,\n            merge: merge ?? true,\n            remove: remove ?? false,\n          })[0]\n        : null;\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<M[]> {\n    const resource = this.resource();\n    if (resource instanceof ODataPropertyResource)\n      return throwError(\n        () => new Error('save: Resource is ODataPropertyResource'),\n      );\n\n    const toDestroyEntity: M[] = [];\n    const toRemoveReference: M[] = [];\n    const toDestroyContained: M[] = [];\n    const toCreateEntity: M[] = [];\n    const toAddReference: M[] = [];\n    const toCreateContained: M[] = [];\n    const toUpdateEntity: M[] = [];\n    const 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    const obs$ = forkJoin([\n      ...toDestroyEntity.map((m) => m.asEntity((e) => e.destroy(options))),\n      ...toRemoveReference.map((m) =>\n        (this._model.meta.api.options.deleteRefBy === 'path'\n          ? (resource as ODataNavigationPropertyResource<T>).key(m.key())\n          : (resource as ODataNavigationPropertyResource<T>)\n        )\n          .reference()\n          .remove(\n            this._model.meta.api.options.deleteRefBy === 'id'\n              ? (m.asEntity((e) => e.resource()) as ODataEntityResource<T>)\n              : undefined,\n            options,\n          ),\n      ),\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) =>\n        (resource as ODataNavigationPropertyResource<T>)\n          .reference()\n          .add(\n            m.asEntity((e) => e.resource()) as ODataEntityResource<T>,\n            options,\n          ),\n      ),\n      ...toCreateContained.map((m) => m.save({ method: 'create', ...options })),\n      ...toUpdateEntity.map((m) =>\n        m.asEntity((e) => e.save({ method, ...options })),\n      ),\n      ...toUpdateContained.map((m) => m.save({ method, ...options })),\n    ]).pipe(defaultIfEmpty(null));\n    return this._request(obs$, () => {\n      this._entries = this._entries\n        .filter((entry) => entry.state !== ODataModelState.Removed)\n        .map((entry) => ({ ...entry, state: ODataModelState.Unchanged }));\n      return this.models();\n    });\n  }\n\n  private _addServer(model: M, options?: ODataOptions): Observable<M> {\n    const resource = this.resource();\n    if (resource instanceof ODataNavigationPropertyResource) {\n      if (!model.isNew()) {\n        // Add Reference\n        return resource\n          .reference()\n          .add(\n            model.asEntity((e) => e.resource()) as ODataEntityResource<T>,\n            options,\n          )\n          .pipe(map(() => model));\n      } else {\n        // Create Contained\n        return resource.create(model.toEntity() as Partial<T>, options).pipe(\n          map(({ entity }) => {\n            if (entity) {\n              model.assign(entity);\n            }\n            return model;\n          }),\n        );\n      }\n    } else if (resource instanceof ODataEntitySetResource) {\n      return model.asEntity((e) => e.save({ method: 'create', ...options }));\n    } else {\n      return of(model);\n    }\n  }\n\n  private _addModel(\n    model: M,\n    {\n      silent = false,\n      reset = false,\n      reparent = false,\n      merge = false,\n      position,\n    }: {\n      silent?: boolean;\n      reset?: boolean;\n      reparent?: boolean;\n      merge?: boolean;\n      position?: number;\n    } = {},\n  ): M {\n    let entry = this._findEntry(model);\n    if (entry !== undefined && entry.state !== ODataModelState.Removed) {\n      if (merge) {\n        entry.model.assign(model.toEntity(INCLUDE_DEEP) as T);\n      }\n      return entry.model;\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\n    // Subscribe\n    this._link(entry);\n\n    // If position is undefined and the collection is sorted, find the right position\n    if (position === undefined && this._sortBy !== null) {\n      for (let index = 0; index < this._entries.length; index++) {\n        if (this._compare(model, this._entries[index], this._sortBy, 0) < 0) {\n          position = index;\n          break;\n        }\n      }\n    }\n\n    // Now add\n    if (position !== undefined) this._entries.splice(position, 0, entry);\n    else this._entries.push(entry);\n\n    if (!silent) {\n      model.events$.trigger(ODataModelEventType.Add, {\n        collection: this,\n        options: { index: position },\n      });\n    }\n\n    return entry.model;\n  }\n\n  add(\n    model: M,\n    {\n      silent = false,\n      reparent = false,\n      server = true,\n      merge = false,\n      position,\n      reset,\n    }: {\n      silent?: boolean;\n      reparent?: boolean;\n      server?: boolean;\n      merge?: boolean;\n      position?: number;\n      reset?: boolean;\n    } = {},\n  ): Observable<M> {\n    const _addModel = (m: M, reset: boolean) =>\n      this._addModel(m, { silent, position, merge, reparent, reset });\n    return server\n      ? this._request(this._addServer(model), (model) =>\n          _addModel(model, reset ?? true),\n        )\n      : of(_addModel(model, reset ?? false));\n  }\n\n  private _removeServer(model: M, options?: ODataOptions): Observable<M> {\n    let resource = this.resource();\n    if (resource instanceof ODataNavigationPropertyResource) {\n      if (!model.isNew()) {\n        // Remove Reference\n        const target =\n          this._model.meta.api.options.deleteRefBy === 'id'\n            ? (model.asEntity((e) => e.resource()) 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      } else {\n        // Remove Contained\n        return resource.destroy(options).pipe(map(() => model));\n      }\n    } else if (resource instanceof ODataEntitySetResource) {\n      return model.asEntity((e) => e.destroy(options));\n    } else {\n      return of(model);\n    }\n  }\n\n  private _removeModel(\n    model: M,\n    {\n      silent = false,\n      reset = false,\n    }: { silent?: boolean; reset?: boolean } = {},\n  ): M {\n    const entry = this._findEntry(model);\n    if (entry === undefined || entry.state === ODataModelState.Removed) {\n      return model;\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\n    // Trigger Event\n    if (!silent) {\n      model.events$.trigger(ODataModelEventType.Remove, {\n        collection: this,\n        options: { index: index },\n      });\n    }\n\n    this._unlink(entry);\n    return entry.model;\n  }\n\n  remove(\n    model: M,\n    {\n      silent = false,\n      server = true,\n      reset,\n    }: { silent?: boolean; server?: boolean; reset?: boolean } = {},\n  ): Observable<M> {\n    const _removeModel = (m: M, reset: boolean) =>\n      this._removeModel(m, { silent, reset });\n    return server\n      ? this._request(this._removeServer(model), (model) =>\n          _removeModel(model, reset ?? true),\n        )\n      : of(_removeModel(model, reset ?? false));\n  }\n\n  private _moveModel(model: M, position: number): M {\n    const entry = this._findEntry(model);\n    if (entry === undefined || entry.state === ODataModelState.Removed) {\n      return model;\n    }\n\n    // Now remove\n    const index = this._entries.indexOf(entry);\n    this._entries.splice(index, 1);\n    this._entries.splice(position, 0, entry);\n\n    return entry.model;\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, {}: {} & ModelFieldOptions) {\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      const models = this.models();\n      const index = Number(pathArray[0]);\n      models[index] = value;\n      this.assign(models, { reparent: true });\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 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  has(path: number | string | string[]): boolean {\n    const pathArray = (\n      Types.isArray(path) ? path : `${path}`.match(/([^[.\\]])+/g)\n    ) as any[];\n    if (pathArray.length === 0) return false;\n    const value = this.models()[Number(pathArray[0])];\n    if (pathArray.length > 1 && ODataModelOptions.isModel(value)) {\n      return value.has(pathArray.slice(1));\n    }\n    return value !== undefined;\n  }\n\n  reset({\n    path,\n    silent = false,\n  }: { path?: string | string[]; silent?: boolean } = {}) {\n    let toAdd: ODataModelEntry<T, M>[] = [];\n    let toChange: ODataModelEntry<T, M>[] = [];\n    let toRemove: ODataModelEntry<T, M>[] = [];\n\n    if (path !== undefined) {\n      // Reset by path\n      const pathArray = (\n        Types.isArray(path) ? path : `${path}`.match(/([^[.\\]])+/g)\n      ) as any[];\n      const index = Number(pathArray[0]);\n      if (!Number.isNaN(index)) {\n        const model = this.models()[index];\n        if (ODataModelOptions.isModel(model)) {\n          const entry = this._findEntry(model) as ODataModelEntry<T, M>;\n          if (\n            entry.state === ODataModelState.Unchanged &&\n            entry.model.hasChanged()\n          ) {\n            toChange = [entry];\n          }\n          path = pathArray.slice(1);\n        }\n      }\n    } else {\n      // Reset all\n      toAdd = this._entries.filter((e) => e.state === ODataModelState.Removed);\n      toChange = this._entries.filter(\n        (e) => e.state === ODataModelState.Unchanged && e.model.hasChanged(),\n      );\n      toRemove = this._entries.filter((e) => e.state === ODataModelState.Added);\n    }\n\n    toRemove.forEach((entry) => {\n      this._removeModel(entry.model, { silent });\n    });\n    toAdd.forEach((entry) => {\n      this._addModel(entry.model, { silent });\n    });\n    toChange.forEach((entry) => {\n      entry.model.reset({ path, silent });\n      entry.state = ODataModelState.Unchanged;\n    });\n    if (\n      !silent &&\n      (toAdd.length > 0 || toRemove.length > 0 || toChange.length > 0)\n    ) {\n      this.events$.trigger(ODataModelEventType.Reset, {\n        options: {\n          added: toAdd.map((e) => e.model),\n          removed: toRemove.map((e) => e.model),\n          changed: toChange.map((e) => e.model),\n        },\n      });\n    }\n  }\n\n  clear({ silent = false }: { silent?: boolean } = {}) {\n    const toRemove: M[] = this.models();\n    toRemove.forEach((m) => {\n      this._removeModel(m, { silent });\n    });\n    this._entries = [];\n    if (!silent) {\n      this.events$.trigger(ODataModelEventType.Update, {\n        options: { removed: toRemove },\n      });\n    }\n  }\n\n  assign(\n    objects: Partial<T>[] | { [name: string]: any }[] | M[],\n    {\n      add = true,\n      merge = true,\n      remove = true,\n      reset = false,\n      reparent = false,\n      silent = false,\n    }: {\n      add?: boolean;\n      merge?: boolean;\n      remove?: boolean;\n      reset?: boolean;\n      reparent?: boolean;\n      silent?: boolean;\n    } = {},\n  ) {\n    const offset = remove ? 0 : this.length;\n\n    const models: M[] = [];\n    const toAdd: M[] = [];\n    const toMerge: M[] = [];\n    const toRemove: M[] = [];\n    objects.forEach((obj, index) => {\n      const model = ODataModelOptions.isModel(obj)\n        ? (obj as M)\n        : (this.modelFactory(obj as Partial<T> | { [name: string]: any }, {\n            reset,\n          }) as M);\n      const position = index + offset;\n      // Try find entry\n      const entry = this._findEntry(model);\n\n      if (merge && entry !== undefined) {\n        if (entry.model !== model) {\n          entry.model.assign(\n            model.toEntity({\n              client_id: true,\n              ...INCLUDE_DEEP,\n            }) as { [name: string]: any },\n            { add, merge, remove, reset, silent },\n          );\n          // Model Change?\n          if (entry.model.hasChanged()) toMerge.push(entry.model);\n        }\n        if (reset) entry.state = ODataModelState.Unchanged;\n        if (!models.includes(entry.model)) {\n          models.push(entry.model);\n        }\n      } else if (add) {\n        // Add\n        toAdd.push(model);\n        this._addModel(model, { silent, reset, reparent, position });\n        models.push(model);\n      }\n    });\n\n    if (remove) {\n      [...this._entries].forEach((entry) => {\n        const model = entry.model;\n        if (!models.includes(model)) {\n          this._removeModel(model, { silent, reset });\n          toRemove.push(model);\n        }\n      });\n    }\n\n    if (\n      this.models()\n        .slice(offset)\n        .some((m, i) => m !== models[i])\n    ) {\n      models.forEach((m, i) => this._moveModel(m, i));\n      this.events$.trigger(ODataModelEventType.Sort);\n    }\n\n    if (\n      !silent &&\n      (toAdd.length > 0 || toRemove.length > 0 || toMerge.length > 0)\n    ) {\n      this.events$.trigger(\n        reset ? ODataModelEventType.Reset : ODataModelEventType.Update,\n        {\n          options: {\n            added: toAdd,\n            removed: toRemove,\n            merged: toMerge,\n          },\n        },\n      );\n    }\n    return models;\n  }\n\n  query(\n    ctx: (q: ODataQueryOptionsHandler<T>, s?: ODataStructuredType<T>) => void,\n  ) {\n    const resource = this.resource();\n    if (resource) {\n      resource.query(ctx);\n      this.attach(resource);\n    }\n    return this;\n  }\n\n  callFunction<P, R>(\n    name: string,\n    params: P | null,\n    responseType: 'property' | 'model' | 'collection' | 'none',\n    options: ODataFunctionOptions<R> = {},\n  ): Observable<R | ODataModel<R> | ODataCollection<R, ODataModel<R>> | null> {\n    const resource = this.resource();\n    if (!(resource instanceof ODataEntitySetResource))\n      return throwError(\n        () =>\n          new Error(\n            \"callFunction: Can't call function without ODataEntitySetResource\",\n          ),\n      );\n\n    const func = resource.function<P, R>(name).query((q) => q.restore(options));\n    switch (responseType) {\n      case 'property':\n        return this._request(\n          func.callProperty(params, options),\n          (resp) => resp,\n        );\n      case 'model':\n        return this._request(func.callModel(params, options), (resp) => resp);\n      case 'collection':\n        return this._request(\n          func.callCollection(params, options),\n          (resp) => resp,\n        );\n      default:\n        return this._request(\n          func.call(params, { responseType, ...options }),\n          (resp) => resp,\n        );\n    }\n  }\n\n  callAction<P, R>(\n    name: string,\n    params: P | null,\n    responseType: 'property' | 'model' | 'collection' | 'none',\n    options: ODataActionOptions<R> = {},\n  ): Observable<R | ODataModel<R> | ODataCollection<R, ODataModel<R>> | null> {\n    const resource = this.resource();\n    if (!(resource instanceof ODataEntitySetResource)) {\n      return throwError(\n        () =>\n          new Error(\n            `callAction: Can't call action without ODataEntitySetResource`,\n          ),\n      );\n    }\n    const action = resource.action<P, R>(name).query((q) => q.restore(options));\n    switch (responseType) {\n      case 'property':\n        return this._request(\n          action.callProperty(params, options),\n          (resp) => resp,\n        );\n      case 'model':\n        return this._request(action.callModel(params, options), (resp) => resp);\n      case 'collection':\n        return this._request(\n          action.callCollection(params, options),\n          (resp) => resp,\n        );\n      default:\n        return this._request(\n          action.call(params, { responseType, ...options }),\n          (resp) => resp,\n        );\n    }\n  }\n\n  private _unlink(entry: ODataModelEntry<T, M>) {\n    if (entry.subscription) {\n      entry.subscription.unsubscribe();\n      entry.subscription = undefined;\n    }\n  }\n\n  private _link(entry: ODataModelEntry<T, M>) {\n    if (entry.subscription) {\n      throw new Error('Collection: Subscription already exists');\n    }\n    entry.subscription = entry.model.events$.subscribe(\n      (event: ODataModelEvent<T>) => {\n        if (event.canContinueWith(this)) {\n          if (event.model === entry.model) {\n            if (event.type === ODataModelEventType.Destroy) {\n              this._removeModel(entry.model, { reset: true });\n            } else if (\n              event.type === ODataModelEventType.Change &&\n              event.options?.key\n            ) {\n              entry.key = entry.model.key();\n            }\n          }\n\n          const index =\n            event.options?.index ?? this.models().indexOf(entry.model);\n          this.events$.emit(event.push(this, index));\n        }\n      },\n    );\n  }\n\n  private _findEntry(model: ODataModel<T>) {\n    return this._entries.find(\n      (entry) =>\n        (entry.key !== undefined &&\n          model.key() !== undefined &&\n          Types.isEqual(entry.key, model.key())) ||\n        entry.model.equals(model),\n    );\n  }\n\n  // Collection functions\n  equals(other: ODataCollection<T, ODataModel<T>>): boolean {\n    return this === other;\n  }\n\n  get [Symbol.toStringTag]() {\n    return 'Collection';\n  }\n\n  public [Symbol.iterator]() {\n    let pointer = 0;\n    const models = this.models();\n    return {\n      next(): IteratorResult<M> {\n        return {\n          done: pointer === models.length,\n          value: models[pointer++],\n        };\n      },\n    } as Iterator<M>;\n  }\n\n  filter(\n    predicate: (value: M, index: number, array: M[]) => unknown,\n    thisArg?: any,\n  ): M[] {\n    return this.models().filter(predicate, thisArg);\n  }\n\n  map<U>(\n    callbackfn: (value: M, index: number, array: M[]) => U,\n    thisArg?: any,\n  ): U[] {\n    return this.models().map(callbackfn, thisArg);\n  }\n\n  find(\n    predicate: (value: M, index: number, obj: M[]) => unknown,\n  ): M | undefined {\n    return this.models().find(predicate);\n  }\n\n  reduce<U>(\n    callbackfn: (\n      previousValue: U,\n      currentValue: M,\n      currentIndex: number,\n      array: M[],\n    ) => U,\n    initialValue: U,\n  ): U {\n    return this.models().reduce(callbackfn, initialValue);\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  includes(model: M, start: number = 0) {\n    return this.some((m, i) => i >= start && 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 ? -1 : models.indexOf(m);\n  }\n\n  forEach(\n    predicate: (value: M, index: number, array: M[]) => void,\n    thisArg?: any,\n  ): void {\n    return this.models().forEach(predicate, thisArg);\n  }\n\n  isEmpty() {\n    // Local length == 0 and if exist remote count is 0 or undefined\n    return this.length === 0 && !this.annots().count;\n  }\n\n  //#region Sort\n  private _compare(\n    e1: ODataModelEntry<T, M> | M,\n    e2: ODataModelEntry<T, M> | M,\n    by: { field: string | keyof T; order?: 1 | -1; comparator?: (a: any, b: any) => number }[],\n    index: number,\n  ): number {\n    const m1 = ODataModelOptions.isModel(e1)\n      ? (e1 as M)\n      : (e1 as ODataModelEntry<T, M>).model;\n    const m2 = ODataModelOptions.isModel(e2)\n      ? (e2 as M)\n      : (e2 as ODataModelEntry<T, M>).model;\n    const value1 = m1.get(by[index].field as string);\n    const 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) && value1.localeCompare && value1 != value2)\n      result = value1.localeCompare(value2);\n    else if (value1 == value2)\n      return by.length - 1 > index ? this._compare(e1, e2, by, index + 1) : 0;\n    else if (by[index]!.comparator !== undefined)\n      result = by[index].comparator!(value1 as T, value2 as T);\n    else {\n      result = value1 < value2 ? -1 : 1;\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; comparator?: (a: any, b: any) => number }[],\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$.trigger(ODataModelEventType.Sort);\n    }\n  }\n  //#endregion\n}\n","import { forkJoin, NEVER, Observable, throwError } from 'rxjs';\nimport { finalize, map } from 'rxjs/operators';\nimport {\n  EntityKey,\n  ODataActionOptions,\n  ODataEntityResource,\n  ODataFunctionOptions,\n  ODataNavigationPropertyResource,\n  ODataOptions,\n  ODataPropertyResource,\n  ODataQueryArguments,\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  ModelOptions,\n  ODataModelField,\n  ODataModelOptions,\n  ODataModelAttribute,\n  ODataModelEventType,\n  ODataModelEventEmitter,\n  ModelFieldOptions,\n  ModelInterface,\n} from './options';\nimport { EdmType, ParserOptions } from '../types';\nimport { ODataEntityAnnotations } from '../annotations';\nimport { ODataEntity } from '../resources/response';\n\nexport class ODataModel<T> {\n  // Properties\n  static options: ModelOptions;\n  static meta: ODataModelOptions<any>;\n  // Parent\n  _parent:\n    | [\n        ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n        ODataModelField<any> | null,\n      ]\n    | null = null;\n  _resource: ODataResource<T> | null = null;\n  _resources: {\n    parent:\n      | [\n          ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n          ODataModelField<any> | null,\n        ]\n      | null;\n    resource: ODataResource<T> | null;\n  }[] = [];\n  _attributes: Map<string, ODataModelAttribute<any>> = new Map<\n    string,\n    ODataModelAttribute<any>\n  >();\n  _annotations!: ODataEntityAnnotations<T>;\n  _meta: ODataModelOptions<any>;\n  // Events\n  events$: ODataModelEventEmitter<T>;\n\n  static buildMetaOptions<T>({\n    config,\n    structuredType,\n  }: {\n    config?: ModelOptions;\n    structuredType: ODataStructuredType<T>;\n  }) {\n    if (config === undefined) {\n      const fields = structuredType\n        .fields({ include_navigation: true, include_parents: true })\n        .reduce((acc, field) => {\n          let name = field.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: field.name,\n              default: field.default,\n              required: !field.nullable,\n            },\n          });\n        }, {});\n      config = {\n        fields: new Map<string, ModelFieldOptions>(Object.entries(fields)),\n      };\n    }\n    return new ODataModelOptions<T>({ config, structuredType });\n  }\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> | null;\n      annots?: ODataEntityAnnotations<T>;\n      reset?: boolean;\n    } = {},\n  ) {\n    const Klass = this.constructor as typeof ODataModel;\n    if (Klass.meta === undefined)\n      throw new Error(`Model: Can't create model without metadata`);\n    this._meta = Klass.meta;\n    this.events$ = new ODataModelEventEmitter<T>({ model: this });\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({\n        prefix: `${Klass.meta.structuredType.name.toLowerCase()}-`,\n      });\n\n    if (!reset)\n      data = Objects.merge(\n        this.defaults(),\n        data as { [name: string]: any },\n      ) as Partial<T>;\n\n    this.assign(data, { reset });\n  }\n\n  //#region Resources\n  resource():\n    | ODataEntityResource<T>\n    | ODataNavigationPropertyResource<T>\n    | ODataPropertyResource<T>\n    | ODataSingletonResource<T>\n    | null {\n    return ODataModelOptions.resource<T>(this) as\n      | ODataEntityResource<T>\n      | ODataNavigationPropertyResource<T>\n      | ODataPropertyResource<T>\n      | ODataSingletonResource<T>\n      | null;\n  }\n\n  pushResource(\n    resource:\n      | ODataEntityResource<T>\n      | ODataNavigationPropertyResource<T>\n      | ODataPropertyResource<T>\n      | ODataSingletonResource<T>\n      | null,\n  ) {\n    // Push current parent and resource\n    this._resources.push({ parent: this._parent, resource: this._resource });\n    // Replace parent and resource\n    this._parent = null;\n    this._resource = resource;\n  }\n\n  popResource() {\n    // Pop parent and resource\n    const pop = this._resources.pop();\n    if (pop !== undefined) {\n      const current = { parent: this._parent, resource: this._resource };\n      this._parent = pop.parent;\n      this._resource = pop.resource;\n      return current;\n    }\n    return undefined;\n  }\n\n  navigationProperty<N>(\n    name: keyof T | string,\n  ): ODataNavigationPropertyResource<N> {\n    const field = this._meta.findField<N>(name);\n    if (!field || !field.navigation)\n      throw Error(\n        `navigationProperty: Can't find navigation property ${name as string}`,\n      );\n\n    const resource = this.resource();\n    if (!(resource instanceof ODataEntityResource) || !resource.hasKey())\n      throw Error(\n        \"navigationProperty: Can't get navigation without ODataEntityResource with key\",\n      );\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.findField<N>(name);\n    if (!field || field.navigation)\n      throw Error(`property: Can't find property ${name}`);\n\n    const resource = this.resource();\n    if (!(resource instanceof ODataEntityResource) || !resource.hasKey())\n      throw Error(\n        \"property: Can't get property without ODataEntityResource with key\",\n      );\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    this._meta.attach(this, resource);\n  }\n  //#endregion\n\n  schema() {\n    return this._meta.structuredType;\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  isOpenModel() {\n    return this._meta.isOpenType();\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    attr: ODataModelAttribute<any> | ODataModelField<any>,\n    {\n      field_mapping = false,\n      resolve = true,\n    }: { field_mapping?: boolean; resolve?: boolean } = {},\n  ): { [name: string]: any } | null | undefined {\n    return this._meta.resolveReferential(this, attr, {\n      field_mapping,\n      resolve,\n    });\n  }\n\n  referenced(\n    attr: ODataModelAttribute<any> | ODataModelField<any>,\n    {\n      field_mapping = false,\n      resolve = true,\n    }: { field_mapping?: boolean; resolve?: boolean } = {},\n  ): { [name: string]: any } | null | undefined {\n    return this._meta.resolveReferenced(this, attr, {\n      field_mapping,\n      resolve,\n    });\n  }\n\n  // Validation\n  _errors?: { [name: 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$.trigger(ODataModelEventType.Invalid, {\n        value: this._errors,\n        options: { method },\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_id = false,\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_id?: 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_id,\n      include_non_field,\n      changes_only,\n      field_mapping,\n      chain,\n    });\n  }\n\n  toJson() {\n    return this.toEntity(INCLUDE_DEEP);\n  }\n\n  set(\n    path: keyof T | string | string[],\n    value: any,\n    { type }: { type?: EdmType | string } = {},\n  ) {\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 this._meta.set(this, pathArray[0], value, { type });\n    }\n  }\n\n  get(path: keyof T | 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 = this._meta.get<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  has(path: keyof T | string | string[]): boolean {\n    const pathArray = (\n      Types.isArray(path) ? path : (path as string).match(/([^[.\\]])+/g)\n    ) as any[];\n    if (pathArray.length === 0) return false;\n    const value = this._meta.get<any>(this, pathArray[0]);\n    if (\n      pathArray.length > 1 &&\n      (value instanceof ODataModel || value instanceof ODataCollection)\n    ) {\n      return value.has(pathArray.slice(1));\n    }\n    return value !== undefined;\n  }\n\n  reset({\n    path,\n    silent = false,\n  }: { path?: keyof T | 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  clear({ silent = false }: { silent?: boolean } = {}) {\n    this._attributes.clear();\n    if (!silent) {\n      this.events$.trigger(ODataModelEventType.Update);\n    }\n  }\n\n  assign(\n    entity: Partial<T> | { [name: string]: any },\n    {\n      add = true,\n      merge = true,\n      remove = true,\n      reset = false,\n      reparent = false,\n      silent = false,\n    }: {\n      add?: boolean;\n      merge?: boolean;\n      remove?: boolean;\n      reset?: boolean;\n      reparent?: boolean;\n      silent?: boolean;\n    } = {},\n  ) {\n    return this._meta.assign(this, entity, {\n      add,\n      merge,\n      remove,\n      reset,\n      silent,\n      reparent,\n    }) as this;\n  }\n\n  clone<M extends ODataModel<T>>() {\n    return new (<typeof ODataModel>this.constructor)(\n      this.toEntity(INCLUDE_DEEP),\n      {\n        resource: this.resource() as ODataResource<T>,\n        annots: this.annots(),\n      },\n    ) as M;\n  }\n\n  private _request<T, R>(\n    obs$: Observable<T>,\n    mapCallback: (response: T) => R,\n  ): Observable<R> {\n    this.events$.trigger(ODataModelEventType.Request, {\n      options: { observable: obs$ },\n    });\n    return obs$.pipe(\n      map((response) => mapCallback(response)),\n      finalize(() => this.events$.trigger(ODataModelEventType.Sync)),\n    );\n  }\n\n  fetch({\n    ...options\n  }: ODataOptions & {\n    options?: ODataOptions;\n  } = {}): Observable<this> {\n    const resource = this.resource();\n    if (!resource)\n      return throwError(() => new Error('fetch: Resource is null'));\n\n    let obs$: Observable<ODataEntity<T>>;\n    if (resource instanceof ODataEntityResource) {\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$, ({ entity, annots }) => {\n      this._annotations = annots;\n      return this.assign(entity ?? {}, { reset: true });\n    });\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    const resource = this.resource();\n    if (!resource) return throwError(() => new Error('save: Resource is null'));\n    if (\n      !(\n        resource instanceof ODataEntityResource ||\n        resource instanceof ODataNavigationPropertyResource\n      )\n    )\n      return throwError(\n        () =>\n          new Error(\n            'save: Resource type ODataEntityResource/ODataNavigationPropertyResource needed',\n          ),\n      );\n\n    // Resolve method and resource key\n    if (method === undefined && this.schema().isCompoundKey())\n      return throwError(\n        () =>\n          new Error(\n            'save: Composite key require a specific method, use create/update/modify',\n          ),\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(\n        () => new Error('save: Update/Patch require entity key'),\n      );\n    if (\n      resource instanceof ODataNavigationPropertyResource ||\n      method === 'create'\n    )\n      resource.clearKey();\n\n    if (validate && !this.isValid({ method, navigation })) {\n      return throwError(() => new Error('save: Validation errors'));\n    }\n    const _entity = this.toEntity({\n      changes_only: method === 'modify',\n      field_mapping: true,\n      include_concurrency: true,\n      include_navigation: navigation,\n    });\n    const obs$ =\n      method === 'create'\n        ? resource.create(_entity as T, options)\n        : method === 'modify'\n          ? resource.modify(_entity as T, {\n              etag: this.annots().etag,\n              ...options,\n            })\n          : resource.update(_entity as T, {\n              etag: this.annots().etag,\n              ...options,\n            });\n    return this._request(obs$, ({ entity, annots }) => {\n      this._annotations = annots;\n      return this.assign(entity ?? (_entity as { [name: string]: any }), {\n        reset: true,\n      });\n    });\n  }\n\n  destroy({\n    ...options\n  }: ODataOptions & {\n    options?: ODataOptions;\n  } = {}) {\n    const resource = this.resource();\n    if (!resource)\n      return throwError(() => new Error('destroy: Resource is null'));\n\n    if (\n      !(\n        resource instanceof ODataEntityResource ||\n        resource instanceof ODataNavigationPropertyResource\n      )\n    )\n      return throwError(\n        () =>\n          new Error(\n            'destroy: Resource type ODataEntityResource/ODataNavigationPropertyResource needed',\n          ),\n      );\n    if (!resource.hasKey())\n      return throwError(\n        () => new Error(\"destroy: Can't destroy model without key\"),\n      );\n\n    const obs$ = resource.destroy({ etag: this.annots().etag, ...options });\n    return this._request(obs$, (resp) => {\n      this.events$.trigger(ODataModelEventType.Destroy);\n      return resp;\n    });\n  }\n\n  /**\n   * Create an execution context for change the internal query of a resource\n   * @param ctx Function to execute\n   */\n  query(\n    ctx: (q: ODataQueryOptionsHandler<T>, s?: ODataStructuredType<T>) => void,\n  ): this {\n    const resource = this.resource();\n    return resource ? (this._meta.query(this, resource, ctx) as this) : 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  encode<E>(name: keyof T, options?: ParserOptions) {\n    const value = (<any>this)[name];\n    if (value === undefined) return undefined;\n    const field = this._meta.findField<E>(name);\n    return field ? field.encode(value, options) : value;\n  }\n\n  isNew() {\n    return !this._meta.hasKey(this);\n  }\n\n  withResource<R>(resource: any, ctx: (model: this) => R): R {\n    return this._meta.withResource(this, resource, ctx);\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  //#region Callables\n  callFunction<P, R>(\n    name: string,\n    params: P | null,\n    responseType:\n      | 'property'\n      | 'model'\n      | 'collection'\n      | 'none'\n      | 'blob'\n      | 'arraybuffer',\n    options: ODataFunctionOptions<R> = {},\n  ): Observable<\n    | R\n    | ODataModel<R>\n    | ODataCollection<R, ODataModel<R>>\n    | null\n    | Blob\n    | ArrayBuffer\n  > {\n    const resource = this.resource();\n    if (!(resource instanceof ODataEntityResource) || !resource.hasKey())\n      return throwError(\n        () =>\n          new Error(\n            \"callFunction: Can't call function without ODataEntityResource with key\",\n          ),\n      );\n\n    const func = resource.function<P, R>(name).query((q) => q.restore(options));\n    switch (responseType) {\n      case 'property':\n        return this._request(\n          func.callProperty(params, options),\n          (resp) => resp,\n        );\n      case 'model':\n        return this._request(func.callModel(params, options), (resp) => resp);\n      case 'collection':\n        return this._request(\n          func.callCollection(params, options),\n          (resp) => resp,\n        );\n      case 'blob':\n        return this._request(func.callBlob(params, options), (resp) => resp);\n      case 'arraybuffer':\n        return this._request(\n          func.callArraybuffer(params, options),\n          (resp) => resp,\n        );\n      default:\n        return this._request(\n          func.call(params, { responseType, ...options }),\n          (resp) => resp,\n        );\n    }\n  }\n\n  callAction<P, R>(\n    name: string,\n    params: P | null,\n    responseType?:\n      | 'property'\n      | 'model'\n      | 'collection'\n      | 'none'\n      | 'blob'\n      | 'arraybuffer',\n    { ...options }: {} & ODataActionOptions<R> = {},\n  ): Observable<\n    | R\n    | ODataModel<R>\n    | ODataCollection<R, ODataModel<R>>\n    | null\n    | Blob\n    | ArrayBuffer\n  > {\n    const resource = this.resource();\n    if (!(resource instanceof ODataEntityResource) || !resource.hasKey())\n      return throwError(\n        () =>\n          new Error(\n            \"callAction: Can't call action without ODataEntityResource with key\",\n          ),\n      );\n\n    const action = resource.action<P, R>(name).query((q) => q.restore(options));\n    switch (responseType) {\n      case 'property':\n        return this._request(\n          action.callProperty(params, options),\n          (resp) => resp,\n        );\n      case 'model':\n        return this._request(action.callModel(params, options), (resp) => resp);\n      case 'collection':\n        return this._request(\n          action.callCollection(params, options),\n          (resp) => resp,\n        );\n      case 'blob':\n        return this._request(action.callBlob(params, options), (resp) => resp);\n      case 'arraybuffer':\n        return this._request(\n          action.callArraybuffer(params, options),\n          (resp) => resp,\n        );\n      default:\n        return this._request(\n          action.call(params, { responseType, ...options }),\n          (resp) => resp,\n        );\n    }\n  }\n  //#endregion\n\n  // Cast\n  cast<S>(\n    type: string,\n    ModelType?: typeof ODataModel,\n  ): ODataModel<T> & ModelInterface<T>;\n  cast<S, M extends ODataModel<S>>(\n    type: string,\n    ModelType?: typeof ODataModel,\n  ): M;\n  cast<S>(type: string, ModelType?: typeof ODataModel) {\n    //: ODataModel<S> {\n    const resource = this.resource();\n    if (!(resource instanceof ODataEntityResource))\n      throw new Error(\n        `cast: Can't cast to derived model without ODataEntityResource`,\n      );\n\n    return resource\n      .cast<S>(type)\n      .asModel(this.toEntity(INCLUDE_DEEP) as { [name: string]: any }, {\n        annots: this.annots() as any,\n        ModelType,\n      });\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.restore(options));\n    switch (responseType) {\n      case 'model':\n        return nav.fetchModel(options);\n      case 'collection':\n        return nav.fetchCollection(options);\n    }\n  }\n\n  fetchAttribute<P>(\n    name: keyof T,\n    options: ODataQueryArgumentsOptions<P> = {},\n  ): Observable<P | ODataModel<P> | ODataCollection<P, ODataModel<P>> | null> {\n    const field = this._meta.findField<P>(name);\n    if (!field)\n      throw Error(`fetchAttribute: Can't find attribute ${name as string}`);\n\n    if (field.isStructuredType() && field.collection) {\n      const collection = field.collectionFactory<P>({ parent: this });\n      collection.query((q) => q.restore(options as ODataQueryArguments<P>));\n      return this._request(collection.fetch(options), () => {\n        this.assign({ [name]: collection });\n        return collection;\n      });\n    } else if (field.isStructuredType()) {\n      const model = field.modelFactory<P>({ parent: this });\n      model.query((q) => q.restore(options as ODataQueryArguments<P>));\n      return this._request(model.fetch(options), () => {\n        this.assign({ [name]: model });\n        return model;\n      });\n    } else {\n      const prop = field.resourceFactory<T, P>(\n        this.resource()!,\n      ) as ODataPropertyResource<P>;\n      prop.query((q) => q.restore(options as ODataQueryArguments<P>));\n      return this._request(prop.fetchProperty(options), (resp) => {\n        this.assign({ [name]: resp });\n        return resp;\n      });\n    }\n  }\n\n  /*\n  getAttribute<P>(\n    name: keyof T,\n  ): (P extends (infer U)[] ? ODataCollection<U, ODataModel<U> & ModelInterface<U>> :\n      P extends ArrayBufferLike ? ArrayBuffer :\n      P extends Date ? Date :\n      P extends object ? ODataModel<P> & ModelInterface<P> : P ) | null;\n  getAttribute<M extends ODataModel<keyof T>>(\n    name: keyof T,\n  ): M | null;\n  getAttribute<C extends ODataCollection<keyof T, ODataModel<keyof T>>>(\n    name: keyof T,\n  ): C | null;\n  getAttribute<P>(\n    name: keyof T,\n  ) {\n  */\n  getAttribute<P>(\n    name: keyof T | string,\n  ): P | ODataModel<P> | ODataCollection<P, ODataModel<P>> | null {\n    const field = this._meta.findField<P>(name);\n    if (!field)\n      throw Error(`getAttribute: Can't find attribute ${name as string}`);\n\n    let model = (this as any)[name] as\n      | P\n      | ODataModel<P>\n      | ODataCollection<P, ODataModel<P>>\n      | null;\n    if (field.isStructuredType() && model === undefined) {\n      if (field.collection) {\n        model = field.collectionFactory({ parent: this });\n      } else {\n        const ref = field.navigation\n          ? (this.referenced(field) as P)\n          : undefined;\n        model =\n          ref === null\n            ? null\n            : field.modelFactory({ parent: this, value: ref });\n      }\n      (this as any)[name] = model;\n    }\n    return model;\n  }\n\n  setAttribute<N>(\n    name: keyof T,\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.asEntity((e) => e.resource()) 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.asEntity((e) => e.resource()) as ODataEntityResource<N>,\n              options,\n            ),\n          ),\n      );\n    } else if (model === null) {\n      obs$ = reference.unset({ etag, ...options });\n    }\n    return this._request(obs$, (model) => this.assign({ [name]: model }));\n  }\n\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.asEntity((e) => e.resource()) 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.asEntity((e) => e.resource()) as ODataEntityResource<N>,\n              options,\n            ),\n          ),\n      );\n    } else if (model === null) {\n      obs$ = reference.unset({ etag, ...options });\n    }\n    return this._request(obs$, (model) => this.assign({ [name]: model }));\n  }\n\n  //#region Model Identity\n  get [Symbol.toStringTag]() {\n    return 'Model';\n  }\n  equals(other: ODataModel<T>): boolean {\n    if (this === other) return true;\n    if (typeof this !== typeof other) return false;\n    const meta = this._meta;\n    const thisCid = (<any>this)[meta.cid];\n    const otherCid = (<any>other)[meta.cid];\n    if (\n      thisCid !== undefined &&\n      otherCid !== undefined &&\n      Types.isEqual(thisCid, otherCid)\n    )\n      return true;\n    if (meta.isEntityType()) {\n      const thisKey = this.key();\n      const otherKey = other.key();\n      if (\n        thisKey !== undefined &&\n        otherKey !== undefined &&\n        Types.isEqual(thisKey, otherKey)\n      )\n        return true;\n    } else if (meta.isComplexType()) {\n      const thisJson = this.toJson();\n      const otherJson = other.toJson();\n      if (Types.isEqual(thisJson, otherJson)) return true;\n    }\n    return false;\n  }\n  //#endregion\n\n  //#region Collection Tools\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  //#endregion\n}\n\nconst RESERVED_FIELD_NAMES = Object.getOwnPropertyNames(ODataModel.prototype);\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  EVENT_SPLITTER,\n} from '../constants';\nimport { ODataHelper } from '../helper';\nimport {\n  EntityKey,\n  ODataQueryOptions,\n  ODataQueryOptionsHandler,\n  ODataResource,\n  ODataSingletonResource,\n} from '../resources';\nimport {\n  ODataEntityResource,\n  ODataEntitySetResource,\n  ODataNavigationPropertyResource,\n  ODataPropertyResource,\n} from '../resources';\nimport {\n  ODataEntitySet,\n  ODataEnumType,\n  ODataStructuredType,\n  ODataStructuredTypeFieldParser,\n} from '../schema';\nimport { EdmType, ParserOptions } from '../types';\nimport { Objects, Types } from '../utils';\nimport { ODataCollection } from './collection';\nimport { ODataModel } from './model';\nimport { EventEmitter } from '@angular/core';\nimport {\n  ODataEntitiesAnnotations,\n  ODataEntityAnnotations,\n} from '../annotations';\n\nexport enum ODataModelEventType {\n  Change = 'change',\n  Reset = 'reset',\n  Update = 'update',\n  Sort = 'sort',\n  Destroy = 'destroy',\n  Add = 'add',\n  Remove = 'remove',\n  Invalid = 'invalid',\n  Request = 'request',\n  Sync = 'sync',\n  Attach = 'attach',\n}\n\nexport class ODataModelEvent<T> {\n  type: ODataModelEventType | string;\n  value?: any;\n  previous?: any;\n  options?: any;\n\n  constructor(\n    type: ODataModelEventType | string,\n    {\n      model,\n      collection,\n      previous,\n      value,\n      attr,\n      options,\n      bubbles,\n      chain,\n    }: {\n      model?: ODataModel<T>;\n      collection?: ODataCollection<T, ODataModel<T>>;\n      attr?: ODataModelAttribute<any> | number;\n      previous?: any;\n      value?: any;\n      options?: any;\n      bubbles?: boolean;\n      chain?: [\n        ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n        ODataModelAttribute<any> | number | null,\n      ][];\n    } = {},\n  ) {\n    this.type = type;\n    this.model = model;\n    this.collection = collection;\n    this.previous = previous;\n    this.value = value;\n    this.options = options;\n    this.chain = chain ?? [\n      [\n        (this.model || this.collection) as\n          | ODataModel<any>\n          | ODataCollection<any, ODataModel<any>>,\n        attr || null,\n      ],\n    ];\n    this.bubbles = bubbles ?? BUBBLES.indexOf(this.type) !== -1;\n  }\n\n  chain: [\n    ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n    ODataModelAttribute<any> | number | null,\n  ][];\n\n  push(\n    model: ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n    attr: ODataModelAttribute<any> | number,\n  ) {\n    return new ODataModelEvent<any>(this.type, {\n      model: this.model ?? (model instanceof ODataModel ? model : undefined),\n      collection:\n        this.collection ??\n        (model instanceof ODataCollection\n          ? (model as ODataCollection<any, ODataModel<any>>)\n          : undefined),\n      previous: this.previous,\n      value: this.value,\n      options: {\n        ...this.options,\n        index: attr instanceof ODataModelAttribute ? attr.name : attr,\n      },\n      bubbles: this.bubbles,\n      chain: [[model, attr], ...this.chain],\n    });\n  }\n\n  bubbles: boolean;\n  stopPropagation() {\n    this.bubbles = false;\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  canContinueWith(self: ODataModel<T> | ODataCollection<T, ODataModel<T>>) {\n    return this.bubbles && !this.visited(self);\n  }\n\n  get path() {\n    return this.chain\n      .map(([, attr], index) =>\n        typeof attr === 'number'\n          ? `[${attr}]`\n          : attr instanceof ODataModelAttribute\n            ? index === 0\n              ? attr.name\n              : `.${attr.name}`\n            : '',\n      )\n      .join('');\n  }\n\n  //Reference to the model which the event was dispatched\n  model?: ODataModel<T>;\n  //Identifies the current model for the event\n  get currentModel(): ODataModel<any> | undefined {\n    const link = this.chain.find((c) => ODataModelOptions.isModel(c[0]));\n    return link !== undefined ? (link[0] as ODataModel<any>) : undefined;\n  }\n\n  //Reference to the collection which the event was dispatched\n  collection?: ODataCollection<T, ODataModel<T>>;\n  //Identifies the current collection for the event\n  get currentCollection(): ODataCollection<any, ODataModel<any>> | undefined {\n    const link = this.chain.find((c) => ODataModelOptions.isCollection(c[0]));\n    return link !== undefined\n      ? (link[0] as ODataCollection<any, ODataModel<any>>)\n      : undefined;\n  }\n}\n\nexport class ODataModelEventEmitter<T> extends EventEmitter<\n  ODataModelEvent<T>\n> {\n  model?: ODataModel<T>;\n  collection?: ODataCollection<T, ODataModel<T>>;\n\n  constructor({\n    model,\n    collection,\n  }: {\n    model?: ODataModel<T>;\n    collection?: ODataCollection<T, ODataModel<T>>;\n  } = {}) {\n    super();\n    this.model = model;\n    this.collection = collection;\n  }\n\n  trigger(\n    type: ODataModelEventType | string,\n    {\n      collection,\n      previous,\n      value,\n      attr,\n      options,\n      bubbles,\n    }: {\n      collection?: ODataCollection<T, ODataModel<T>>;\n      attr?: ODataModelAttribute<any> | number;\n      previous?: any;\n      value?: any;\n      options?: any;\n      bubbles?: boolean;\n    } = {},\n  ) {\n    const _trigger = (name: string) =>\n      this.emit(\n        new ODataModelEvent(name, {\n          model: this.model,\n          collection: collection ?? this.collection,\n          previous,\n          value,\n          attr,\n          options,\n          bubbles,\n        }),\n      );\n    if (type && EVENT_SPLITTER.test(type)) {\n      for (const name of type.split(EVENT_SPLITTER)) {\n        _trigger(name);\n      }\n    } else {\n      _trigger(type);\n    }\n  }\n}\n\nexport const BUBBLES: (ODataModelEventType | string)[] = [\n  ODataModelEventType.Change,\n  ODataModelEventType.Reset,\n  ODataModelEventType.Update,\n  ODataModelEventType.Destroy,\n  ODataModelEventType.Add,\n  ODataModelEventType.Remove,\n];\n\nexport const INCLUDE_SHALLOW = {\n  include_concurrency: true,\n  include_computed: true,\n  include_key: true,\n  include_id: false,\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 ModelInterface<T> = {\n  [P in keyof T]: T[P] extends (infer U)[]\n    ? ODataCollection<U, ODataModel<U> & ModelInterface<U>>\n    : T[P] extends object\n      ? ODataModel<T[P]> & ModelInterface<T[P]>\n      : T[P];\n};\n\nexport type ModelOptions = {\n  cid?: string;\n  fields: Map<string, ModelFieldOptions>;\n};\n\nexport type ModelFieldOptions = {\n  field?: string;\n  parser?: ODataStructuredTypeFieldParser<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};\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 = {\n        fields: new Map<string, ModelFieldOptions>(),\n      } 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 = {\n        fields: new Map<string, ModelFieldOptions>(),\n      } as ModelOptions;\n    options.field = name ?? key;\n    Klass.options.fields.set(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  optionsForType?: (type: string) => ODataModelOptions<any> | undefined;\n  modelForType?: (t: string) => typeof ODataModel<any> | undefined;\n  collectionForType?: (\n    t: string,\n  ) => typeof ODataCollection<any, ODataModel<any>> | undefined;\n  enumForType?: (t: string) => ODataEnumType<F> | undefined;\n  structuredForType?: (t: string) => ODataStructuredType<F> | undefined;\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  parserOptions?: ParserOptions;\n\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 type() {\n    return this.parser.type;\n  }\n\n  get navigation() {\n    return this.parser.navigation;\n  }\n\n  get collection() {\n    return this.parser.collection;\n  }\n\n  annotatedValue<T>(term: string | RegExp) {\n    return this.parser.annotatedValue<T>(term);\n  }\n\n  configure({\n    optionsForType,\n    modelForType,\n    collectionForType,\n    enumForType,\n    structuredForType,\n    concurrency,\n    options,\n  }: {\n    optionsForType: (type: string) => ODataModelOptions<any> | undefined;\n    modelForType: (t: string) => typeof ODataModel<any> | undefined;\n    collectionForType: (\n      t: string,\n    ) => typeof ODataCollection<any, any> | undefined;\n    enumForType: (t: string) => ODataEnumType<any> | undefined;\n    structuredForType: (t: string) => ODataStructuredType<any> | undefined;\n    concurrency: boolean;\n    options: ParserOptions;\n  }) {\n    this.optionsForType = optionsForType;\n    this.modelForType = modelForType;\n    this.collectionForType = collectionForType;\n    this.enumForType = enumForType;\n    this.structuredForType = structuredForType;\n    this.parserOptions = options;\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  structuredType() {\n    const structuredType = this.structuredForType\n      ? this.structuredForType(this.type)\n      : undefined;\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  enumType() {\n    const enumType = this.enumForType ? this.enumForType(this.type) : undefined;\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    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      const 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    const meta = this.optionsForType\n      ? this.optionsForType(this.type)\n      : undefined;\n    return this.isStructuredType() && meta !== undefined\n      ? meta.defaults()\n      : this.default;\n  }\n\n  deserialize(value: any, options?: ParserOptions): F {\n    const parserOptions = options ?? this.parserOptions;\n    return this.parser.deserialize(value, parserOptions);\n  }\n\n  serialize(value: F, options?: ParserOptions): any {\n    const parserOptions = options ?? this.parserOptions;\n    return this.parser.serialize(value, parserOptions);\n  }\n\n  encode(value: F, options?: ParserOptions): any {\n    const parserOptions = options ?? this.parserOptions;\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<T, F>(\n    base: ODataEntityAnnotations<T>,\n  ): ODataEntityAnnotations<F> | ODataEntitiesAnnotations<F> {\n    return this.parser.collection\n      ? base.property(this.parser.name as keyof T, 'collection')\n      : base.property(this.parser.name as keyof T, 'single');\n  }\n\n  modelFactory<F>({\n    parent,\n    value,\n    reset,\n  }: {\n    parent: ODataModel<any>;\n    value?: Partial<F> | { [name: string]: any };\n    reset?: boolean;\n  }): ODataModel<F> {\n    // Model\n    const annots = this.annotationsFactory(\n      parent.annots(),\n    ) as ODataEntityAnnotations<F>;\n    let Model = this.modelForType ? this.modelForType(this.type) : undefined;\n    if (Model === undefined) throw Error(`No Model type for ${this.name}`);\n    if (value !== undefined) {\n      annots.update(value);\n    }\n\n    if (annots?.type !== undefined && Model.meta !== null) {\n      const meta = Model.meta.findChildOptions((o) =>\n        o.isTypeOf(annots.type as string),\n      )?.structuredType;\n      if (meta !== undefined && meta.model !== undefined)\n        // Change to child model\n        Model = meta.model;\n    }\n\n    return new Model((value || {}) as Partial<F> | { [name: string]: any }, {\n      annots,\n      reset,\n      parent: [parent, this],\n    }) as ODataModel<F>;\n  }\n\n  collectionFactory<F>({\n    parent,\n    value,\n    reset,\n  }: {\n    parent: ODataModel<any>;\n    value?: Partial<F>[] | { [name: string]: any }[];\n    reset?: boolean;\n  }): ODataCollection<F, ODataModel<F>> {\n    // Collection Factory\n    const annots = this.annotationsFactory(\n      parent.annots(),\n    ) as ODataEntitiesAnnotations<F>;\n    const Collection = this.collectionForType\n      ? this.collectionForType(this.type)\n      : undefined;\n    if (Collection === undefined)\n      throw Error(`No Collection type for ${this.name}`);\n    return new Collection(\n      (value || []) as Partial<F>[] | { [name: string]: any }[],\n      {\n        annots: annots,\n        reset,\n        parent: [parent, this],\n      },\n    ) as ODataCollection<F, ODataModel<F>>;\n  }\n}\n\nexport class ODataModelAttribute<T> {\n  private state: ODataModelState = ODataModelState.Unchanged;\n  private value?: T | ODataModel<T> | ODataCollection<T, ODataModel<T>> | null;\n  private change?: T | ODataModel<T> | ODataCollection<T, ODataModel<T>> | null;\n  private subscription?: Subscription;\n  events$ = new ODataModelEventEmitter<T>();\n\n  constructor(\n    private _model: ODataModel<any>,\n    private _field: ODataModelField<T>,\n  ) {}\n\n  get type() {\n    return this._field.type;\n  }\n\n  get navigation() {\n    return this._field.navigation;\n  }\n\n  get computed() {\n    return this._field.annotatedValue<boolean>(COMPUTED);\n  }\n\n  get concurrency() {\n    return Boolean(this._field.concurrency);\n  }\n\n  get referentials() {\n    return this._field.referentials;\n  }\n\n  get options() {\n    return this._field.options;\n  }\n\n  get name() {\n    return this._field.name;\n  }\n\n  get fieldName() {\n    return this._field.field;\n  }\n\n  get():\n    | T\n    | ODataModel<T>\n    | ODataCollection<T, ODataModel<T>>\n    | null\n    | undefined {\n    return this.state === ODataModelState.Changed ? this.change : this.value;\n  }\n\n  set(\n    value:\n      | T\n      | ODataModel<T>\n      | ODataCollection<T, ODataModel<T>>\n      | null\n      | undefined,\n    reset: boolean = false,\n    reparent: boolean = false,\n  ) {\n    const current = this.get();\n\n    if (\n      ODataModelOptions.isModel(current) ||\n      ODataModelOptions.isCollection(current)\n    )\n      this.unlink(\n        current as ODataModel<T> | ODataCollection<T, ODataModel<T>>,\n        //this.value !== current\n      );\n\n    const changed =\n      ODataModelOptions.isModel(current) && ODataModelOptions.isModel(value)\n        ? !(current as ODataModel<T>).equals(value as ODataModel<T>)\n        : ODataModelOptions.isCollection(current) &&\n            ODataModelOptions.isCollection(value)\n          ? !(current as ODataCollection<T, ODataModel<T>>).equals(\n              value as ODataCollection<T, ODataModel<T>>,\n            )\n          : !Types.isEqual(current, value);\n    if (reset) {\n      this.value = value;\n      this.state = ODataModelState.Unchanged;\n    } else if (Types.isEqual(value, this.value)) {\n      this.state = ODataModelState.Unchanged;\n    } else if (changed) {\n      this.change = value;\n      this.state = ODataModelState.Changed;\n    }\n    if (\n      ODataModelOptions.isModel(value) ||\n      ODataModelOptions.isCollection(value)\n    ) {\n      this.link(\n        value as ODataModel<T> | ODataCollection<T, ODataModel<T>>,\n        reparent,\n      );\n    }\n    return changed;\n  }\n\n  isChanged({\n    include_navigation = false,\n  }: { include_navigation?: boolean } = {}): boolean {\n    const current = this.get();\n    return (\n      this.state === ODataModelState.Changed ||\n      ((ODataModelOptions.isModel(current) ||\n        ODataModelOptions.isCollection(current)) &&\n        (\n          current as ODataModel<T> | ODataCollection<T, ODataModel<T>>\n        ).hasChanged({ include_navigation }))\n    );\n  }\n\n  reset() {\n    if (\n      ODataModelOptions.isModel(this.change) ||\n      ODataModelOptions.isCollection(this.change)\n    )\n      this.unlink(\n        this.change as ODataModel<T> | ODataCollection<T, ODataModel<T>>,\n      );\n    this.state = ODataModelState.Unchanged;\n    if (\n      ODataModelOptions.isModel(this.value) ||\n      ODataModelOptions.isCollection(this.value)\n    )\n      this.link(\n        this.value as ODataModel<T> | ODataCollection<T, ODataModel<T>>,\n      );\n  }\n\n  private link(\n    value: ODataModel<T> | ODataCollection<T, ODataModel<T>>,\n    reparent: boolean = false,\n  ) {\n    this.subscription = value.events$.subscribe((e) => this.events$.emit(e));\n    if (reparent) {\n      value._parent = [this._model, this._field];\n    }\n  }\n\n  private unlink(\n    value: ODataModel<T> | ODataCollection<T, ODataModel<T>>,\n    reparent: boolean = false,\n  ) {\n    this.subscription?.unsubscribe();\n    this.subscription = undefined;\n    if (reparent) {\n      value._parent = null;\n    }\n  }\n}\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  private _fields: ODataModelField<any>[] = [];\n  structuredType: ODataStructuredType<T>;\n  entitySet?: ODataEntitySet;\n  // Hierarchy\n  parent?: ODataModelOptions<any>;\n  children: ODataModelOptions<any>[] = [];\n  events$ = new ODataModelEventEmitter<T>();\n\n  constructor({\n    config,\n    structuredType,\n  }: {\n    config: ModelOptions;\n    structuredType: ODataStructuredType<T>;\n  }) {\n    this.name = structuredType.name;\n    this.base = structuredType.base;\n    this.structuredType = structuredType;\n    this.cid = config?.cid ?? CID_FIELD_NAME;\n    config.fields.forEach((value, key) => this.addField<any>(key, value));\n  }\n\n  get api() {\n    return this.structuredType.api;\n  }\n\n  type({ alias = false }: { alias?: boolean } = {}) {\n    return this.structuredType.type({ alias });\n  }\n\n  isOpenType() {\n    return this.structuredType.isOpenType();\n  }\n\n  isEntityType() {\n    return this.structuredType.isEntityType();\n  }\n\n  isComplexType() {\n    return this.structuredType.isComplexType();\n  }\n\n  isTypeOf(type: string) {\n    return this.structuredType.type() === type;\n  }\n\n  isModelFor(entity: T | { [name: string]: any }) {\n    // Resolve By Type\n    const type = this.api.options.helper.type(\n      entity as { [name: string]: any },\n    );\n    if (type && this.isTypeOf(type)) return true;\n    // Resolve By fields\n    const keys = Object.keys(entity as { [name: string]: any });\n    const names = this.fields({\n      include_navigation: true,\n      include_parents: true,\n    }).map((f) => f.name);\n    return keys.every((key) => names.includes(key));\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 (const ch of this.children) {\n      match = ch.findChildOptions(predicate);\n      if (match !== undefined) break;\n    }\n    return match;\n  }\n\n  configure({ options }: { options: ParserOptions }) {\n    if (this.base) {\n      const parent = this.api.optionsForType(\n        this.base,\n      ) 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      const concurrency = concurrencyFields.indexOf(field.field) !== -1;\n      field.configure({\n        optionsForType: (t: string) => this.api.optionsForType(t),\n        modelForType: (t: string) => this.api.modelForType(t),\n        collectionForType: (t: string) => this.api.collectionForType(t),\n        enumForType: (t: string) => this.api.findEnumType(t),\n        structuredForType: (t: string) => this.api.findStructuredType(t),\n        concurrency,\n        options,\n      });\n    });\n  }\n\n  fields({\n    include_navigation,\n    include_parents,\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    const field = this.findField<F>(name);\n    //Throw error if not found\n    if (!field) throw new Error(`No field with name ${name as string}`);\n    return field as ODataModelField<F>;\n  }\n\n  findField<F>(\n    name: keyof T | string,\n    { reset }: { reset?: boolean } = {},\n  ): ODataModelField<F> | undefined {\n    return this.fields({\n      include_parents: true,\n      include_navigation: true,\n    }).find(\n      (modelField: ODataModelField<F>) =>\n        (reset && modelField.field === name) || modelField.name === name,\n    ) as ODataModelField<F> | undefined;\n  }\n\n  addField<F>(name: string, options: ModelFieldOptions) {\n    const { field, parser, ...opts } = options;\n    if (field === undefined || name === undefined)\n      throw new Error('Model Properties need name and field');\n    const fieldParser =\n      parser ?? this.structuredType.field<F>(field as keyof T);\n    if (fieldParser === undefined)\n      throw new Error(`No parser for ${field} with name = ${name}`);\n    const modelField = new ODataModelField<F>(this, {\n      name,\n      field,\n      parser: fieldParser,\n      ...opts,\n    });\n    this._fields.push(modelField);\n    return modelField;\n  }\n\n  tsToEdm: Record<string, EdmType> = {\n    string: EdmType.String,\n    number: EdmType.Int32,\n    bigint: EdmType.Int64,\n    boolean: EdmType.Boolean,\n  };\n  private modelFieldFactory<F>(\n    self: ODataModel<T>,\n    name: string,\n    type: EdmType | string,\n  ) {\n    const structuredFieldParser = this.structuredType.addField<F>(name, {\n      type,\n    });\n    structuredFieldParser.configure({\n      parserForType: (type: EdmType | string) => this.api.parserForType(type),\n      options: this.api.options,\n    });\n    const modelField = this.addField<F>(name, {\n      field: name,\n      parser: structuredFieldParser,\n    });\n    modelField.configure({\n      optionsForType: (t: string) => this.api.optionsForType(t),\n      modelForType: (t: string) => this.api.modelForType(t),\n      collectionForType: (t: string) => this.api.collectionForType(t),\n      enumForType: (t: string) => this.api.findEnumType(t),\n      structuredForType: (t: string) => this.api.findStructuredType(t),\n      options: this.api.options,\n      concurrency: false,\n    });\n    Object.defineProperty(self, modelField.name, {\n      configurable: true,\n      get: () => this.get(self, modelField as ODataModelField<any>),\n      set: (value: any) =>\n        this.set(self, modelField as ODataModelField<any>, value),\n    });\n    return modelField;\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.outgoingType() !== self._resource.outgoingType() &&\n      !self._resource.isSubtypeOf(resource)\n    )\n      throw new Error(\n        `Can't attach ${resource.outgoingType()} to ${self._resource.outgoingType()}`,\n      );\n\n    const current = self._resource;\n    if (current === null || !current.isEqualTo(resource)) {\n      self._resource = resource;\n      self.events$.trigger(ODataModelEventType.Attach, {\n        previous: current,\n        value: resource,\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> | null {\n    let resource: ODataResource<any> | null = null;\n    let prevField: ODataModelField<any> | null = null;\n    for (const [model, field] of ODataModelOptions.chain(child)) {\n      resource = resource || (model._resource as ODataResource<T>);\n      if (resource === null) break;\n      if (\n        ODataModelOptions.isModel(model) &&\n        (prevField === null || prevField.collection)\n      ) {\n        const m = model as ODataModel<any>;\n        // Resolve subtype if collection not is from field\n        // FIXME\n        /*\n        if (field === null) {\n          const r = m._meta.modelResourceFactory(resource.cloneQuery<T>());\n          if (r !== null && !r.isTypeOf(resource) && r.isSubtypeOf(resource)) {\n            resource = r;\n          }\n        }\n        */\n        // Resolve key\n        const mKey = m.key({ field_mapping: true }) as EntityKey<any>;\n        if (mKey !== undefined) {\n          resource =\n            resource instanceof ODataEntitySetResource\n              ? resource.entity(mKey)\n              : (resource as ODataEntityResource<T>).key(mKey);\n        }\n      }\n      prevField = field;\n      if (field === null && model._resource !== null) {\n        // Apply the query from model to new resource\n        model._resource.query((qs) =>\n          resource?.query((qd) => qd.restore(qs.store())),\n        );\n      } else if (field !== null) {\n        resource = field.resourceFactory<any, any>(resource);\n      }\n    }\n    return resource;\n  }\n\n  collectionResourceFactory(\n    query?: ODataQueryOptions<T>,\n  ):\n    | ODataEntitySetResource<T>\n    | ODataNavigationPropertyResource<T>\n    | ODataPropertyResource<T>\n    | null {\n    if (this.entitySet === undefined) return null;\n    return ODataEntitySetResource.factory<T>(this.api, {\n      path: this.entitySet.name,\n      type: this.entitySet.entityType,\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    | null {\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      | null;\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> | null;\n      annots?: ODataEntityAnnotations<T>;\n    } = {},\n  ) {\n    // Events\n    self.events$.subscribe((e) => this.events$.emit(e));\n\n    // Parent\n    if (parent !== undefined) {\n      self._parent = parent;\n    }\n\n    // Resource\n    if (self._parent === null && resource === undefined)\n      resource = this.modelResourceFactory();\n    if (resource) {\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    // Fields\n    this.fields({\n      include_navigation: true,\n      include_parents: true,\n    }).forEach((field) => {\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>, s?: ODataStructuredType<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      single = true,\n    }: { field_mapping?: boolean; resolve?: boolean; single?: boolean } = {},\n  ): EntityKey<T> | { [name: string]: any } | undefined {\n    const keyTypes = this.structuredType.keys({ include_parents: true });\n    const key = new Map<string, any>();\n    for (const kt of keyTypes) {\n      let v = value as any;\n      let options = this as ODataModelOptions<any> | undefined;\n      let field: ODataModelField<any> | undefined;\n      for (const name of kt.name.split('/')) {\n        if (options === undefined) break;\n        field = options\n          .fields({ include_navigation: false, 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 = this.api.optionsForType(field.type);\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.set(name, v);\n    }\n    if (key.size === 0) return undefined;\n    return resolve\n      ? Objects.resolveKey(key, { single })\n      : Object.fromEntries(key);\n  }\n\n  resolveReferential(\n    value: ODataModel<T> | T | { [name: string]: any } | null,\n    attr: ODataModelAttribute<any> | ODataModelField<any>,\n    {\n      field_mapping = false,\n      resolve = true,\n      single = false,\n    }: { field_mapping?: boolean; resolve?: boolean; single?: boolean } = {},\n  ): { [name: string]: any } | null | undefined {\n    const referential = new Map<string, any>();\n    for (const ref of attr.referentials) {\n      const from = this.fields({\n        include_navigation: false,\n        include_parents: true,\n      }).find((p: any) => p.field === ref.referencedProperty);\n      const to = attr.options\n        .fields({ include_navigation: false, include_parents: true })\n        .find((field: ODataModelField<any>) => field.field === ref.property);\n      if (from !== undefined && to !== undefined) {\n        const name = field_mapping ? to.field : to.name;\n        referential.set(name, value && (value as any)[from.name]);\n      }\n    }\n    if (referential.size === 0) return undefined;\n    if (referential.size === 1 && Array.from(referential.values())[0] === null)\n      return null;\n    return resolve\n      ? Objects.resolveKey(referential, { single })\n      : Object.fromEntries(referential);\n  }\n\n  resolveReferenced(\n    value: ODataModel<T> | T | { [name: string]: any } | null,\n    attr: ODataModelAttribute<any> | ODataModelField<any>,\n    {\n      field_mapping = false,\n      resolve = true,\n      single = false,\n    }: { field_mapping?: boolean; resolve?: boolean; single?: boolean } = {},\n  ): { [name: string]: any } | null | undefined {\n    const referenced = new Map<string, any>();\n    for (const ref of attr.referentials) {\n      const from = this.fields({\n        include_navigation: false,\n        include_parents: true,\n      }).find((field: ODataModelField<any>) => field.field === ref.property);\n      const meta = this.api.optionsForType<any>(attr.type);\n      const to = meta\n        ?.fields({ include_navigation: false, include_parents: true })\n        .find(\n          (field: ODataModelField<any>) =>\n            field.field === ref.referencedProperty,\n        );\n      if (from !== undefined && to !== undefined) {\n        const name = field_mapping ? to.field : to.name;\n        referenced.set(name, value && (value as any)[from.name]);\n      }\n    }\n    if (referenced.size === 0) return undefined;\n    if (referenced.size === 1 && Array.from(referenced.values())[0] === null)\n      return null;\n    return resolve\n      ? Objects.resolveKey(referenced, { single })\n      : Object.fromEntries(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      const value = (self as any)[field.name];\n      const 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({\n      include_navigation: false,\n      include_parents: true,\n    }).reduce((acc, field) => {\n      const 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 [...self._attributes.values()]\n      .filter((attr) => !attr.navigation || include_navigation)\n      .some((attr) => attr.isChanged({ include_navigation }));\n  }\n\n  hasKey(self: ODataModel<T>) {\n    return this.resolveKey(self) !== undefined;\n  }\n\n  withResource<R, M extends ODataModel<T>>(\n    self: M,\n    resource:\n      | ODataEntityResource<T>\n      | ODataPropertyResource<T>\n      | ODataNavigationPropertyResource<T>\n      | ODataSingletonResource<T>\n      | null,\n    ctx: (model: M) => R,\n  ): R {\n    // Push\n    self.pushResource(resource);\n    // Execute function\n    const result = ctx(self);\n    if (result instanceof Observable) {\n      return (result as any).pipe(\n        finalize(() => {\n          // Pop\n          self.popResource();\n        }),\n      );\n    } else {\n      // Pop\n      self.popResource();\n      return result;\n    }\n  }\n  asEntity<R, M extends ODataModel<T>>(self: M, ctx: (model: M) => R): R {\n    // Clone query from him or parent\n    let query = self._resource?.cloneQuery<T>();\n    if (\n      query === undefined &&\n      self._parent &&\n      self._parent[0] instanceof ODataCollection\n    )\n      query = self._parent[0]._resource?.cloneQuery<T>();\n    // Build new resource\n    const resource = this.modelResourceFactory(query);\n    return this.withResource(self, resource, ctx);\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_id = false,\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_id?: 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 entity: any = [...self._attributes.values()]\n      .filter(\n        // Chain\n        (attr) => chain.every((c) => c !== attr.get()),\n      )\n      .filter(\n        // Changes only\n        (attr) =>\n          !changes_only ||\n          (changes_only && attr.isChanged({ include_navigation })),\n      )\n      .filter(\n        (attr) =>\n          // Navigation\n          (include_navigation && attr.navigation && attr.get() !== null) ||\n          !attr.navigation,\n      )\n      .reduce((acc, attr) => {\n        const name = field_mapping ? attr.fieldName : attr.name;\n        let value: any = attr.get();\n        const computed = attr.computed;\n        const navigation = attr.navigation;\n        const concurrency = attr.concurrency;\n        if (ODataModelOptions.isModel(value)) {\n          value = (value as ODataModel<any>).toEntity({\n            client_id,\n            include_navigation,\n            include_concurrency,\n            include_computed,\n            include_non_field,\n            field_mapping,\n            changes_only: changes_only && !!navigation,\n            include_key: include_key && !!navigation,\n            include_id: include_id && !!navigation,\n            chain: [self, ...chain],\n          });\n        } else if (ODataModelOptions.isCollection(value)) {\n          value = (value as ODataCollection<any, ODataModel<any>>).toEntities({\n            client_id,\n            include_navigation,\n            include_concurrency,\n            include_computed,\n            include_non_field,\n            field_mapping,\n            changes_only: changes_only && !!navigation,\n            include_key: include_key && !!navigation,\n            include_id: include_id && !!navigation,\n            chain: [self, ...chain],\n          });\n        }\n        if (include_concurrency && concurrency) {\n          return Object.assign(acc, { [name]: value });\n        } else if (include_computed && computed) {\n          return Object.assign(acc, { [name]: value });\n        } else if (changes_only && attr.isChanged()) {\n          return Object.assign(acc, { [name]: value });\n        } else if (!changes_only && !concurrency && !computed) {\n          return Object.assign(acc, { [name]: value });\n        }\n        return acc;\n      }, {});\n\n    if (include_non_field) {\n      const names = Object.keys(entity);\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      entity = { ...entity, ...nonFieldAttrs };\n    }\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 id\n    if (include_id) {\n      self.asEntity((e) => {\n        const resource = e.resource();\n        if (resource)\n          entity[this.api.options.helper.ODATA_ID] = `${resource.clearQuery()}`;\n      });\n    }\n\n    // Add type\n    if (\n      self._parent !== null &&\n      ((ODataModelOptions.isModel(self._parent[0]) &&\n        self._parent[1] !== null &&\n        this.api.optionsForType(self._parent[1].type) !== self._meta) ||\n        (ODataModelOptions.isCollection(self._parent[0]) &&\n          (self._parent[0] as ODataCollection<any, ODataModel<any>>)._model\n            .meta !== self._meta))\n    ) {\n      entity[this.api.options.helper.ODATA_TYPE] =\n        `#${this.structuredType.type()}`;\n    }\n\n    return entity as T | { [name: string]: any };\n  }\n\n  reset(\n    self: ODataModel<T>,\n    { name, silent = false }: { name?: string; silent?: boolean } = {},\n  ) {\n    let changes: string[] = [];\n    if (name !== undefined) {\n      // Reset value\n      const attribute = self._attributes.get(name);\n      if (\n        attribute !== undefined &&\n        attribute.isChanged({ include_navigation: true })\n      ) {\n        attribute.reset();\n        changes = [name];\n      } else if (attribute?.isChanged()) {\n        attribute.reset();\n        changes = [name];\n      }\n    } else {\n      // reset all\n      changes = [...self._attributes.keys()];\n      //self._changes.clear();\n      self._attributes.forEach((attr, key) => {\n        if (attr.isChanged({ include_navigation: true })) {\n          attr.reset();\n          changes.push(key);\n        }\n      });\n    }\n    if (!silent && changes.length > 0) {\n      self.events$.trigger(ODataModelEventType.Reset, { options: { changes } });\n    }\n  }\n\n  assign(\n    self: ODataModel<T>,\n    entity: Partial<T> | { [name: string]: any },\n    {\n      add = true,\n      merge = true,\n      remove = true,\n      reset = false,\n      reparent = false,\n      silent = false,\n    }: {\n      add?: boolean;\n      merge?: boolean;\n      remove?: boolean;\n      reset?: boolean;\n      reparent?: boolean;\n      silent?: boolean;\n    } = {},\n  ) {\n    const changes: string[] = [];\n\n    // Update annotations\n    self.annots().update(entity);\n    // Update attributes\n    const attrs = self.annots().attributes(entity, 'full');\n    Object.entries(attrs)\n      .filter(([, value]) => value !== undefined) // Filter undefined\n      .forEach(([key, value]) => {\n        const field = this.findField(key, { reset });\n\n        if (field !== undefined || this.isOpenType()) {\n          // Delegated to private setter\n          if (\n            this.set(self, field ?? key, value, {\n              add,\n              merge,\n              remove,\n              reset,\n              reparent,\n              silent,\n            })\n          ) {\n            changes.push(field?.name ?? key);\n          }\n        } else {\n          // Basic assignment\n          const current = (<any>self)[key];\n          (<any>self)[key] = value;\n          if (current !== value) changes.push(key);\n        }\n      });\n\n    if (!silent && changes.length > 0) {\n      self.events$.trigger(\n        reset ? ODataModelEventType.Reset : ODataModelEventType.Update,\n        { options: { changes } },\n      );\n    }\n    return self;\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  get<F>(\n    self: ODataModel<T>,\n    field: ODataModelField<F> | string,\n  ): F | ODataModel<F> | ODataCollection<F, ODataModel<F>> | null | undefined {\n    const attr = self._attributes.get(\n      field instanceof ODataModelField ? field.name : field,\n    );\n    if (attr !== undefined) {\n      const value = attr.get();\n      if (\n        (attr.navigation && value === null) ||\n        ODataModelOptions.isModel(value)\n      ) {\n        // Check for reference\n        const referenced = this.resolveReferenced(self, attr, {\n          resolve: false,\n        });\n        if (value !== null && referenced !== null && referenced !== undefined) {\n          (value as ODataModel<F>).assign(referenced as Partial<F>, {\n            silent: true,\n          });\n        } else if (value !== null && referenced === null) {\n          // New value is null\n          (attr as ODataModelAttribute<F>).set(null);\n        } else if (value === null && referenced !== null) {\n          // New value is undefined\n          (attr as ODataModelAttribute<F>).set(undefined);\n        }\n      }\n      return value;\n    } else if (\n      typeof field === 'string' &&\n      !field.startsWith('_') &&\n      !field.endsWith('$')\n    ) {\n      return (self as any)[field];\n    }\n    return undefined;\n  }\n\n  set<F>(\n    self: ODataModel<T>,\n    field: ODataModelField<F> | 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    {\n      add,\n      merge,\n      remove,\n      reset,\n      reparent,\n      silent,\n      type,\n    }: {\n      add?: boolean;\n      merge?: boolean;\n      remove?: boolean;\n      reset?: boolean;\n      reparent?: boolean;\n      silent?: boolean;\n      type?: EdmType | string;\n    } = {},\n  ): boolean {\n    let modelField =\n      field instanceof ODataModelField ? field : this.findField<F>(field);\n    if (\n      modelField === undefined &&\n      this.isOpenType() &&\n      typeof field === 'string'\n    ) {\n      type = type ?? this.tsToEdm[typeof value] ?? EdmType.String;\n      modelField = this.modelFieldFactory<F>(self, field, type);\n    }\n    if (modelField === undefined)\n      throw new Error(`No field with name ${field as string}`);\n\n    let changed = false;\n    let attr = self._attributes.get(modelField.name);\n\n    // Ensures that the attribute exists\n    if (attr === undefined) {\n      attr = new ODataModelAttribute(self, modelField);\n      this._link(self, attr);\n      self._attributes.set(modelField.name, attr);\n    }\n\n    const current = attr.get();\n\n    if (modelField.isStructuredType()) {\n      if (value === null) {\n        // New value is null\n        changed = attr.set(value as null, reset, reparent);\n      } else if (ODataModelOptions.isCollection(current)) {\n        // Current is collection\n        const currentCollection = current as ODataCollection<F, ODataModel<F>>;\n        if (ODataModelOptions.isCollection(value)) {\n          // New value is collection\n          changed = attr.set(\n            value as ODataCollection<F, ODataModel<F>>,\n            reset,\n            reparent,\n          );\n        } else if (Types.isArray(value)) {\n          // New value is array\n          currentCollection._annotations = modelField.annotationsFactory(\n            self.annots(),\n          ) as ODataEntitiesAnnotations<F>;\n          currentCollection.assign(\n            value as Partial<T>[] | { [name: string]: any }[],\n            {\n              add,\n              merge,\n              remove,\n              reset,\n              reparent,\n              silent,\n            },\n          );\n          changed = currentCollection.hasChanged();\n        }\n      } else if (ODataModelOptions.isModel(current)) {\n        // Current is model\n        const currentModel = current as ODataModel<F>;\n        if (ODataModelOptions.isModel(value)) {\n          // New value is model\n          changed = attr.set(value as ODataModel<F>, reset, reparent);\n        } else if (Types.isPlainObject(value)) {\n          currentModel._annotations = modelField.annotationsFactory(\n            self.annots(),\n          ) as ODataEntityAnnotations<F>;\n          currentModel.assign(value as F | { [name: string]: any }, {\n            add,\n            merge,\n            remove,\n            reset,\n            reparent,\n            silent,\n          });\n          changed = currentModel.hasChanged();\n        }\n      } else {\n        // Current is null or undefined\n        // create new model/collection for given value\n        changed = attr.set(\n          ODataModelOptions.isCollection(value) ||\n            ODataModelOptions.isModel(value)\n            ? (value as ODataModel<F> | ODataCollection<F, ODataModel<F>>)\n            : modelField.collection\n              ? modelField.collectionFactory<F>({\n                  parent: self,\n                  value: value as F[] | { [name: string]: any }[],\n                  reset: reset,\n                })\n              : modelField.modelFactory<F>({\n                  parent: self,\n                  value: value,\n                  reset: reset,\n                }),\n          reset,\n          reparent,\n        );\n      }\n\n      // Resolve referentials\n      if (!ODataModelOptions.isCollection(attr.get())) {\n        const meta = this.api.optionsForType<F>(modelField.type);\n        const ref = meta?.resolveReferential(attr.get(), attr, {\n          resolve: false,\n        });\n        if (ref !== null && ref !== undefined) {\n          Object.assign(self, ref);\n        }\n      }\n    } else {\n      changed = attr.set(value, reset, reparent);\n    }\n\n    if (!silent && changed) {\n      self.events$.trigger(ODataModelEventType.Change, {\n        attr,\n        value,\n        previous: current,\n        options: { key: modelField.isKey() },\n      });\n    }\n\n    return changed;\n  }\n\n  private _link<F>(self: ODataModel<T>, attr: ODataModelAttribute<F>) {\n    attr.events$.subscribe((event: ODataModelEvent<any>) => {\n      if (event.canContinueWith(self)) {\n        if (event.model === attr.get()) {\n          if (\n            event.type === ODataModelEventType.Change &&\n            attr.navigation &&\n            event.options?.key\n          ) {\n            const ref = (attr.get() as ODataModel<any>).referential(attr);\n            if (ref !== null && ref !== undefined) {\n              Object.assign(self, ref);\n            }\n          }\n        }\n\n        self.events$.emit(event.push(self, attr));\n      }\n    });\n  }\n}\n","import {\n  ApiOptions,\n  FetchPolicy,\n  ODataMetadataType,\n  ODataVersion,\n  ParserOptions,\n  QueryOption,\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 {\n  /**\n   * Default OData version\n   */\n  version: ODataVersion;\n  /**\n   * Send enum as string in the request\n   */\n  stringAsEnum: boolean;\n  /**\n   * Delete reference by path or by id\n   */\n  deleteRefBy: 'path' | 'id';\n  /**\n   * No use parenthesis for empty parameters functions\n   */\n  nonParenthesisForEmptyParameterFunction: boolean;\n  /**\n   * Strip metadata from the response\n   */\n  stripMetadata: ODataMetadataType;\n  /**\n   * Use JSON Batch Format\n   */\n  jsonBatchFormat: boolean;\n  /**\n   * Relative urls\n   * http://docs.oasis-open.org/odata/odata-json-format/v4.0/cs01/odata-json-format-v4.0-cs01.html#_Toc365464682\n   */\n  relativeUrls: boolean;\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: QueryOption[];\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     * @link https://devblogs.microsoft.com/odata/extension-omit-null-value-properties-in-asp-net-core-odata/\n     */\n    omitNullValues?: boolean;\n  };\n\n  constructor(config: ApiOptions) {\n    this.version = config.version || DEFAULT_VERSION;\n    this.stringAsEnum = config.stringAsEnum || false;\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    this.nonParenthesisForEmptyParameterFunction =\n      config.nonParenthesisForEmptyParameterFunction ?? false;\n    this.jsonBatchFormat = config.jsonBatchFormat ?? false;\n    this.relativeUrls = config.relativeUrls ?? true;\n  }\n\n  get parserOptions(): ParserOptions {\n    return {\n      version: this.version,\n      stringAsEnum: this.stringAsEnum,\n      deleteRefBy: this.deleteRefBy,\n      nonParenthesisForEmptyParameterFunction:\n        this.nonParenthesisForEmptyParameterFunction,\n      ...this.accept,\n    };\n  }\n\n  get helper() {\n    return ODataHelper[this.version];\n  }\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';\nimport { DEFAULT_VERSION } from './constants';\nimport {\n  ModelOptions,\n  ODataCollection,\n  ODataModel,\n  ODataModelOptions,\n} from './models';\nimport { ODataApiOptions } from './options';\nimport { ODataOptions, ODataResource, ODataSegment } from './resources';\nimport {\n  ODataQueryOptions,\n  ODataPathSegments,\n  ODataRequest,\n  ODataResponse,\n  ODataBatchResource,\n  ODataMetadataResource,\n  ODataActionResource,\n  ODataFunctionResource,\n  ODataEntityResource,\n  ODataEntitySetResource,\n  ODataSingletonResource,\n  ODataNavigationPropertyResource,\n} from './resources';\nimport {\n  EDM_PARSERS,\n  ODataCallable,\n  ODataEntitySet,\n  ODataEnumType,\n  ODataSchema,\n  ODataSingleton,\n  ODataStructuredType,\n} from './schema';\nimport {\n  ApiConfig,\n  ApiOptions,\n  EdmType,\n  NONE_PARSER,\n  ODataVersion,\n  Parser,\n  PathSegment,\n  QueryOption,\n  SchemaConfig,\n} from './types';\nimport { ODataMetadata } from './metadata/metadata';\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: ODataVersion;\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: Map<string, Parser<any>>;\n  // Schemas\n  schemas: ODataSchema[];\n\n  constructor(config: ApiConfig) {\n    this.serviceRootUrl = config.serviceRootUrl;\n    if (this.serviceRootUrl.includes('?'))\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 = config.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      ...config.options,\n      version: this.version,\n    });\n\n    this.cache = (config.cache as ODataCache) ?? new ODataInMemoryCache();\n    this.errorHandler = config.errorHandler;\n    this.parsers = new Map(Object.entries(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        options: this.options.parserOptions,\n      });\n    });\n  }\n\n  populate(metadata: ODataMetadata) {\n    const config = metadata.toConfig();\n    this.version = config.version ?? DEFAULT_VERSION;\n    const schemas = (config.schemas ?? []).map(\n      (schema) => new ODataSchema(schema, this),\n    );\n    this.schemas = [...this.schemas, ...schemas];\n    schemas.forEach((schema) => {\n      schema.configure({\n        options: this.options.parserOptions,\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 = ODataPathSegments.fromJson(json.segments);\n    const query = ODataQueryOptions.fromJson<any>(json.options);\n    switch (segments.last()?.name as PathSegment) {\n      case PathSegment.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 PathSegment.navigationProperty:\n        return new ODataNavigationPropertyResource(this, { segments, query });\n      case PathSegment.singleton:\n        return new ODataSingletonResource(this, { segments, query });\n      case PathSegment.action:\n        return new ODataActionResource(this, { segments, query });\n      case PathSegment.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>(name: string) {\n    const singleton = this.findSingleton(name);\n    return ODataSingletonResource.factory<T>(this, {\n      path: singleton?.name ?? name,\n      type: singleton?.singletonType,\n    });\n  }\n\n  /**\n   * Build an entity set resource.\n   * @param path Name of the entity set\n   * @returns\n   */\n  entitySet<T>(name: string): ODataEntitySetResource<T> {\n    const entitySet = this.findEntitySet(name);\n    return ODataEntitySetResource.factory<T>(this, {\n      path: entitySet?.name ?? name,\n      type: entitySet?.entityType,\n    });\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 callable = this.findCallable<R>(path);\n    return ODataActionResource.factory<P, R>(this, {\n      path,\n      outgoingType: callable?.type(),\n      incomingType: callable?.returnType(),\n    });\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 callable = this.findCallable<R>(path);\n    return ODataFunctionResource.factory<P, R>(this, {\n      path,\n      outgoingType: callable?.type(),\n      incomingType: callable?.returnType(),\n    });\n  }\n\n  callable<T>(type: string) {\n    return this.findCallable<T>(type);\n  }\n\n  enumType<T>(type: string) {\n    return this.findEnumType<T>(type);\n  }\n\n  structuredType<T>(type: string) {\n    return this.findStructuredType<T>(type);\n  }\n\n  //request(req: ODataRequest<any>): Observable<any> {\n  request<T>(\n    method: string,\n    resource: ODataResource<any>,\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      observe?: 'body' | 'events' | 'response';\n      withCount?: boolean;\n      bodyQueryOptions?: QueryOption[];\n    },\n  ): Observable<any> {\n    let req = ODataRequest.factory(this, method, resource, {\n      body: options.body,\n      etag: options.etag,\n      context: options.context,\n      headers: options.headers,\n      params: options.params,\n      responseType: options.responseType,\n      observe: (options.observe === 'events' ? 'events' : 'response') as\n        | 'events'\n        | 'response',\n      withCount: options.withCount,\n      bodyQueryOptions: options.bodyQueryOptions,\n      reportProgress: options.reportProgress,\n      fetchPolicy: options.fetchPolicy,\n      parserOptions: options.parserOptions,\n      withCredentials: options.withCredentials,\n    });\n\n    let res$ = this.requester !== undefined ? this.requester(req) : NEVER;\n\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    if (options.observe === 'events') {\n      return res$;\n    }\n\n    res$ = this.cache.handleRequest(req, res$);\n\n    switch (options.observe || 'body') {\n      case 'body':\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      case 'response':\n        // The response stream was requested directly, so return it.\n        return res$;\n      default:\n        // Guard against new future observe types being added.\n        throw new Error(\n          `Unreachable: unhandled observe type ${options.observe}}`,\n        );\n    }\n  }\n\n  //# region Find by Type\n  // Memoize\n  private memo: {\n    enumTypes: Map<string, ODataEnumType<any> | undefined>;\n    structuredTypes: Map<string, ODataStructuredType<any> | undefined>;\n    callables: Map<string, ODataCallable<any> | undefined>;\n    entitySets: Map<string, ODataEntitySet | undefined>;\n    singletons: Map<string, ODataSingleton | undefined>;\n    parsers: Map<string, Parser<any>>;\n    options: Map<string, ODataModelOptions<any> | undefined>;\n  } = {\n    enumTypes: new Map<string, ODataEnumType<any> | undefined>(),\n    structuredTypes: new Map<string, ODataStructuredType<any> | undefined>(),\n    callables: new Map<string, ODataCallable<any> | undefined>(),\n    entitySets: new Map<string, ODataEntitySet | undefined>(),\n    singletons: new Map<string, ODataSingleton | undefined>(),\n    parsers: new Map<string, Parser<any>>(),\n    options: new Map<string, ODataModelOptions<any> | undefined>(),\n  };\n\n  public createSchema(config: SchemaConfig) {\n    const schema = new ODataSchema(config, this);\n    schema.configure({\n      options: this.options.parserOptions,\n    });\n    this.schemas.push(schema);\n    return schema;\n  }\n\n  public findSchema(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  //#region EnumTypes\n  public findEnumType<T>(value: string) {\n    if (this.memo.enumTypes.has(value)) {\n      return this.memo.enumTypes.get(value) as ODataEnumType<T> | undefined;\n    }\n    const enumTypes = this.schemas.reduce(\n      (acc, schema) => [...acc, ...schema.enums],\n      <ODataEnumType<T>[]>[],\n    );\n    let enumType = enumTypes.find((e) => e.type() === value);\n    enumType = enumType ?? enumTypes.find((e) => e.name === value);\n    this.memo.enumTypes.set(value, enumType);\n    return enumType;\n  }\n  //#endregion\n\n  //#region StructuredTypes\n  public findStructuredType<T>(value: string) {\n    if (this.memo.structuredTypes.has(value)) {\n      return this.memo.structuredTypes.get(value) as\n        | ODataStructuredType<T>\n        | undefined;\n    }\n    const structuredTypes = this.schemas.reduce(\n      (acc, schema) => [...acc, ...schema.entities],\n      <ODataStructuredType<T>[]>[],\n    );\n    let structuredType = structuredTypes.find((e) => e.type() === value);\n    structuredType =\n      structuredType ?? structuredTypes.find((e) => e.name === value);\n    this.memo.structuredTypes.set(value, structuredType);\n    return structuredType;\n  }\n  //#endregion\n\n  //#region Callables\n  public findCallable<R>(value: string, bindingType?: string) {\n    const key = bindingType !== undefined ? `${bindingType}/${value}` : value;\n    if (this.memo.callables.has(key)) {\n      return this.memo.callables.get(key) as ODataCallable<R> | undefined;\n    }\n\n    const bindingStructuredType =\n      bindingType !== undefined\n        ? this.findStructuredType<any>(bindingType)\n        : undefined;\n    const callables = this.schemas.reduce(\n      (acc, schema) => [...acc, ...schema.callables],\n      <ODataCallable<R>[]>[],\n    );\n    let callable = callables.find((c) => {\n      const isCallableType = c.type() == value;\n      const callableBindingType = c.binding()?.type;\n      const callableBindingStructuredType =\n        callableBindingType !== undefined\n          ? this.findStructuredType(callableBindingType)\n          : undefined;\n\n      return (\n        isCallableType &&\n        (!bindingStructuredType ||\n          (callableBindingStructuredType &&\n            bindingStructuredType.isSubtypeOf(callableBindingStructuredType)))\n      );\n    });\n    callable =\n      callable ??\n      callables.find((c) => {\n        const isCallableType = c.name == value;\n        const callableBindingType = c.binding()?.type;\n        const callableBindingStructuredType =\n          callableBindingType !== undefined\n            ? this.findStructuredType(callableBindingType)\n            : undefined;\n\n        return (\n          isCallableType &&\n          (!bindingStructuredType ||\n            (callableBindingStructuredType &&\n              bindingStructuredType.isSubtypeOf(callableBindingStructuredType)))\n        );\n      });\n\n    this.memo.callables.set(key, callable);\n    return callable;\n  }\n  //#endregion\n\n  //#region EntitySets\n  public findEntitySet(value: string) {\n    if (this.memo.entitySets.has(value)) {\n      return this.memo.entitySets.get(value) as ODataEntitySet | undefined;\n    }\n    const entitySets = this.schemas.reduce(\n      (acc, schema) => [...acc, ...schema.entitySets],\n      <ODataEntitySet[]>[],\n    );\n    let entitySet = entitySets.find((e) => e.type() === value);\n    entitySet = entitySet ?? entitySets.find((e) => e.name === value);\n    this.memo.entitySets.set(value, entitySet);\n    return entitySet;\n  }\n  //#endregion\n\n  //#region Singletons\n  public findSingleton(value: string) {\n    if (this.memo.singletons.has(value)) {\n      return this.memo.singletons.get(value) as ODataSingleton | undefined;\n    }\n    const singletons = this.schemas.reduce(\n      (acc, schema) => [...acc, ...schema.singletons],\n      <ODataSingleton[]>[],\n    );\n    let singleton = singletons.find((e) => e.type() === value);\n    singleton = singleton ?? singletons.find((e) => e.name === value);\n    this.memo.singletons.set(value, singleton);\n    return singleton;\n  }\n  //#endregion\n\n  public findModel(type: string) {\n    return this.findStructuredType<any>(type)?.model;\n  }\n\n  public createModel(structured: ODataStructuredType<any>) {\n    if (structured.model !== undefined) return structured.model;\n    // Build Ad-hoc model\n    const Model = class extends ODataModel<any> {} as typeof ODataModel;\n    // Build Meta\n    Model.meta = this.optionsForType(structured.type(), {\n      structuredType: structured,\n    })!;\n    if (Model.meta !== undefined) {\n      // Configure\n      Model.meta.configure({\n        options: this.options.parserOptions,\n      });\n    }\n    // Store New Model for next time\n    structured.model = Model;\n    return Model;\n  }\n\n  public modelForType(type: string) {\n    let Model = this.findModel(type);\n    if (Model === undefined) {\n      const structured = this.findStructuredType<any>(type);\n      if (structured === undefined)\n        throw Error(`No structured type for ${type}`);\n      Model = this.createModel(structured);\n    }\n    return Model;\n  }\n\n  public findCollection(type: string) {\n    return this.findStructuredType<any>(type)?.collection;\n  }\n\n  public createCollection(\n    structured: ODataStructuredType<any>,\n    model?: typeof ODataModel<any>,\n  ) {\n    if (structured.collection !== undefined) return structured.collection;\n    if (model === undefined) model = this.createModel(structured);\n    const Collection = class extends ODataCollection<any, ODataModel<any>> {\n      static override model = model!;\n    } as typeof ODataCollection;\n    structured.collection = Collection;\n    return Collection;\n  }\n\n  public collectionForType(type: string) {\n    let Collection = this.findCollection(type);\n    if (Collection === undefined) {\n      const structured = this.findStructuredType<any>(type);\n      if (structured === undefined)\n        throw Error(`No structured type for ${type}`);\n      const Model = this.modelForType(type);\n      Collection = this.createCollection(structured, Model);\n    }\n    return Collection;\n  }\n\n  public findEntitySetForEntityType(entityType: string) {\n    if (this.memo.entitySets.has(entityType)) {\n      return this.memo.entitySets.get(entityType) as ODataEntitySet | undefined;\n    }\n    const entitySet = this.schemas\n      .reduce(\n        (acc, schema) => [...acc, ...schema.entitySets],\n        <ODataEntitySet[]>[],\n      )\n      .find((e) => e.entityType === entityType);\n    this.memo.entitySets.set(entityType, entitySet);\n    return entitySet;\n  }\n\n  public parserForType<T>(type: string | EdmType, bindingType?: string) {\n    const key = bindingType !== undefined ? `${bindingType}/${type}` : type;\n    if (this.memo.parsers.has(key)) {\n      return this.memo.parsers.get(key) as Parser<T>;\n    }\n    // None Parser by default\n    let parser: Parser<T> = NONE_PARSER;\n    if (this.parsers.has(type)) {\n      // Edm, Base Parsers\n      parser = this.parsers.get(type) as Parser<T>;\n    } else if (!type.startsWith('Edm.')) {\n      // Callable, EnumType, StructuredType (ComplexType and EntityType) Parsers\n      let value =\n        this.findCallable<T>(type, bindingType) ??\n        this.findEnumType<T>(type) ??\n        this.findStructuredType<T>(type);\n      parser = value?.parser as Parser<T>;\n    }\n    // Set Parser for next time\n    this.memo.parsers.set(key, parser);\n    return parser;\n  }\n\n  public optionsForType<T>(\n    type: string,\n    {\n      structuredType,\n      config,\n    }: { structuredType?: ODataStructuredType<T>; config?: ModelOptions } = {},\n  ) {\n    // Strucutred Options\n    if (this.memo.options.has(type)) {\n      return this.memo.options.get(type) as ODataModelOptions<T> | undefined;\n    }\n\n    let meta: ODataModelOptions<T> | undefined = undefined;\n    if (!type.startsWith('Edm.')) {\n      structuredType = this.findStructuredType<T>(type) ?? structuredType;\n      if (structuredType !== undefined) {\n        meta = ODataModel.buildMetaOptions({ config, structuredType });\n      }\n    }\n    // Set Options for next time\n    this.memo.options.set(type, meta);\n    return meta;\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 { ApiConfig, EdmType, 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\n  public findApiByName(name: string) {\n    return this.apis.find((c) => c.name === name);\n  }\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\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\n  public findApiForType(type: string) {\n    return this.findApiForTypes([type]);\n  }\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.findEnumType<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.findStructuredType<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.findCallable<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.findEntitySet(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 | EdmType) {\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.map((api) => api.findModel(type)).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.findCollection(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  //#endregion\n}\n","import { Observable, forkJoin, map, of } from 'rxjs';\nimport { ApiConfig } from './types';\nimport { ODataMetadataParser } from './metadata';\n\nexport abstract class ODataConfigLoader {\n  abstract loadConfigs(): Observable<ApiConfig[]>;\n}\n\nexport class ODataConfigSyncLoader implements ODataConfigLoader {\n  constructor(private readonly passedConfigs: ApiConfig | ApiConfig[]) {}\n\n  loadConfigs(): Observable<ApiConfig[]> {\n    return Array.isArray(this.passedConfigs)\n      ? of(this.passedConfigs)\n      : of([this.passedConfigs]);\n  }\n}\n\nexport class ODataConfigAsyncLoader implements ODataConfigLoader {\n  constructor(\n    private readonly configs$:\n      | Observable<ApiConfig>[]\n      | Observable<ApiConfig | ApiConfig[]>,\n  ) {}\n\n  loadConfigs(): Observable<ApiConfig[]> {\n    return Array.isArray(this.configs$)\n      ? forkJoin(this.configs$)\n      : (this.configs$ as Observable<ApiConfig | ApiConfig[]>).pipe(\n          map((value) =>\n            Array.isArray(value)\n              ? (value as ApiConfig[])\n              : ([value] as ApiConfig[]),\n          ),\n        );\n  }\n}\n\nexport class ODataMetadataLoader implements ODataConfigLoader {\n  constructor(\n    private readonly sources$: Observable<string | string[]>,\n    private readonly baseConfigs: ApiConfig | ApiConfig[],\n  ) {}\n\n  loadConfigs(): Observable<ApiConfig[]> {\n    const configs = Array.isArray(this.baseConfigs)\n      ? this.baseConfigs\n      : [this.baseConfigs];\n    return this.sources$.pipe(\n      map((source) =>\n        (Array.isArray(source) ? source : [source]).map((m, i) =>\n          new ODataMetadataParser(m).metadata().toConfig(configs[i] ?? {}),\n        ),\n      ),\n    );\n  }\n}\n","import { HttpClient, HttpEvent, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ODataApi } from './api';\nimport { ODataConfigLoader } from './loaders';\nimport { ODataCollection, ODataModel } from './models/index';\nimport {\n  ODataActionResource,\n  ODataBatchResource,\n  ODataEntityResource,\n  ODataEntitySetResource,\n  ODataFunctionResource,\n  ODataMetadataResource,\n  ODataNavigationPropertyResource,\n  ODataOptions,\n  ODataRequest,\n  ODataResource,\n  ODataResponse,\n  ODataSegment,\n  ODataSingletonResource,\n} from './resources/index';\nimport { ODataSettings } from './settings';\n\nfunction addBody<T>(\n  options: ODataOptions & {\n    observe?: 'body' | 'events' | 'response';\n    responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n  },\n  body: T | null,\n): any {\n  return {\n    body,\n    etag: options.etag,\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()\nexport class ODataClient {\n  settings?: ODataSettings;\n  constructor(\n    private http: HttpClient,\n    private loader: ODataConfigLoader,\n  ) {\n    this.loader.loadConfigs().subscribe((configs) => {\n      this.settings = new ODataSettings(configs);\n      this.settings.configure({\n        requester: (req: ODataRequest<any>): Observable<any> =>\n          this.http.request(req.method, `${req.url}`, {\n            body: req.body,\n            context: req.context,\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\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  defaultApi() {\n    return 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  //#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: ODataOptions & {\n      body: any | null;\n      observe?: 'body';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<ArrayBuffer>;\n\n  request(\n    method: string,\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      body: any | null;\n      observe?: 'body';\n      responseType: 'blob';\n    },\n  ): Observable<Blob>;\n\n  request(\n    method: string,\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      body: any | null;\n      observe?: 'body';\n      responseType: 'text';\n    },\n  ): Observable<string>;\n\n  request(\n    method: string,\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      body: any | null;\n      observe: 'events';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  request(\n    method: string,\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      body: any | null;\n      observe: 'events';\n      responseType: 'blob';\n    },\n  ): Observable<HttpEvent<Blob>>;\n\n  request(\n    method: string,\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      body: any | null;\n      observe: 'events';\n      responseType: 'text';\n    },\n  ): Observable<HttpEvent<string>>;\n\n  request(\n    method: string,\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      body: any | null;\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<any>>;\n\n  request<R>(\n    method: string,\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      body: any | null;\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<R>>;\n\n  request(\n    method: string,\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      body: any | null;\n      observe: 'response';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<ODataResponse<ArrayBuffer>>;\n\n  request(\n    method: string,\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      body: any | null;\n      observe: 'response';\n      responseType: 'blob';\n    },\n  ): Observable<ODataResponse<Blob>>;\n\n  request(\n    method: string,\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      body: any | null;\n      observe: 'response';\n      responseType: 'text';\n    },\n  ): Observable<ODataResponse<string>>;\n\n  request(\n    method: string,\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      body: any | null;\n      observe: 'response';\n      responseType?: 'json';\n    },\n  ): Observable<ODataResponse<Object>>;\n\n  request<R>(\n    method: string,\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      body: any | null;\n      observe: 'response';\n      responseType?: 'json';\n    },\n  ): Observable<ODataResponse<R>>;\n\n  request(\n    method: string,\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      body: any | null;\n      observe?: 'body';\n      responseType?: 'json';\n    },\n  ): Observable<Object>;\n\n  request<R>(\n    method: string,\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      body: any | null;\n      observe?: 'body';\n      responseType?: 'json';\n    },\n  ): Observable<R>;\n\n  request(\n    method: string,\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      body: any | null;\n      observe?: 'body' | 'events' | 'response';\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n    },\n  ): Observable<any> {\n    let api = this.apiFor(resource);\n\n    return api.request(method, resource, options);\n  }\n\n  delete(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<ArrayBuffer>;\n\n  delete(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType: 'blob';\n    },\n  ): Observable<Blob>;\n\n  delete(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType: 'text';\n    },\n  ): Observable<string>;\n\n  delete(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  delete(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'blob';\n    },\n  ): Observable<HttpEvent<Blob>>;\n\n  delete(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'text';\n    },\n  ): Observable<HttpEvent<string>>;\n\n  delete(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<Object>>;\n\n  delete<T>(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<T>>;\n\n  delete(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<ODataResponse<ArrayBuffer>>;\n\n  delete(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'blob';\n    },\n  ): Observable<ODataResponse<Blob>>;\n\n  delete(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'text';\n    },\n  ): Observable<ODataResponse<string>>;\n\n  delete(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType?: 'json';\n    },\n  ): Observable<ODataResponse<Object>>;\n\n  delete<T>(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType?: 'json';\n    },\n  ): Observable<ODataResponse<T>>;\n\n  delete(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType?: 'json';\n    },\n  ): Observable<Object>;\n\n  delete<T>(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType?: 'json';\n    },\n  ): Observable<T>;\n\n  delete(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body' | 'events' | 'response';\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\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: ODataOptions & {\n      observe?: 'body';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<ArrayBuffer>;\n\n  get(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType: 'blob';\n    },\n  ): Observable<Blob>;\n\n  get(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType: 'text';\n    },\n  ): Observable<string>;\n\n  get(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  get(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'blob';\n    },\n  ): Observable<HttpEvent<Blob>>;\n\n  get(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'text';\n    },\n  ): Observable<HttpEvent<string>>;\n\n  get(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<Object>>;\n\n  get<T>(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<T>>;\n\n  get(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<ODataResponse<ArrayBuffer>>;\n\n  get(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'blob';\n    },\n  ): Observable<ODataResponse<Blob>>;\n\n  get(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'text';\n    },\n  ): Observable<ODataResponse<string>>;\n\n  get(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType?: 'json';\n    },\n  ): Observable<ODataResponse<Object>>;\n\n  get<T>(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType?: 'json';\n    },\n  ): Observable<ODataResponse<T>>;\n\n  get(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType?: 'json';\n    },\n  ): Observable<Object>;\n\n  get<T>(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType?: 'json';\n    },\n  ): Observable<T>;\n\n  get(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body' | 'events' | 'response';\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n    } = {},\n  ): Observable<any> {\n    return this.request<any>('GET', resource, options as any);\n  }\n\n  head(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<ArrayBuffer>;\n\n  head(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType: 'blob';\n    },\n  ): Observable<Blob>;\n\n  head(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType: 'text';\n    },\n  ): Observable<string>;\n\n  head(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  head(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'blob';\n    },\n  ): Observable<HttpEvent<Blob>>;\n\n  head(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'text';\n    },\n  ): Observable<HttpEvent<string>>;\n\n  head(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<Object>>;\n\n  head<T>(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<T>>;\n\n  head(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<ODataResponse<ArrayBuffer>>;\n\n  head(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'blob';\n    },\n  ): Observable<ODataResponse<Blob>>;\n\n  head(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'text';\n    },\n  ): Observable<ODataResponse<string>>;\n\n  head(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType?: 'json';\n    },\n  ): Observable<ODataResponse<Object>>;\n\n  head<T>(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType?: 'json';\n    },\n  ): Observable<ODataResponse<T>>;\n\n  head(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType?: 'json';\n    },\n  ): Observable<Object>;\n\n  head<T>(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType?: 'json';\n    },\n  ): Observable<T>;\n\n  head(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body' | 'events' | 'response';\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\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: ODataOptions & {\n      observe?: 'body';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<ArrayBuffer>;\n\n  options(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType: 'blob';\n    },\n  ): Observable<Blob>;\n\n  options(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType: 'text';\n    },\n  ): Observable<string>;\n\n  options(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  options(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'blob';\n    },\n  ): Observable<HttpEvent<Blob>>;\n\n  options(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'text';\n    },\n  ): Observable<HttpEvent<string>>;\n\n  options(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<Object>>;\n\n  options(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<Object>>;\n\n  options<T>(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<T>>;\n\n  options(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<ODataResponse<ArrayBuffer>>;\n\n  options(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'blob';\n    },\n  ): Observable<ODataResponse<Blob>>;\n\n  options(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'text';\n    },\n  ): Observable<ODataResponse<string>>;\n\n  options(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType?: 'json';\n    },\n  ): Observable<ODataResponse<Object>>;\n\n  options<T>(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType?: 'json';\n    },\n  ): Observable<ODataResponse<T>>;\n\n  options(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType?: 'json';\n    },\n  ): Observable<Object>;\n\n  options<T>(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType?: 'json';\n    },\n  ): Observable<T>;\n\n  options(\n    resource: ODataResource<any>,\n    options: ODataOptions & {\n      observe?: 'body' | 'events' | 'response';\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\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: ODataOptions & {\n      observe?: 'body';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<ArrayBuffer>;\n\n  patch(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType: 'blob';\n    },\n  ): Observable<Blob>;\n\n  patch(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType: 'text';\n    },\n  ): Observable<string>;\n\n  patch(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  patch(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'blob';\n    },\n  ): Observable<HttpEvent<Blob>>;\n\n  patch(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'text';\n    },\n  ): Observable<HttpEvent<string>>;\n\n  patch(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<Object>>;\n\n  patch<T>(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<T>>;\n\n  patch(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<ODataResponse<ArrayBuffer>>;\n\n  patch(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'blob';\n    },\n  ): Observable<ODataResponse<Blob>>;\n\n  patch(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'text';\n    },\n  ): Observable<ODataResponse<string>>;\n\n  patch(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType?: 'json';\n    },\n  ): Observable<ODataResponse<Object>>;\n\n  patch<T>(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType?: 'json';\n    },\n  ): Observable<ODataResponse<T>>;\n\n  patch(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType?: 'json';\n    },\n  ): Observable<Object>;\n\n  patch<T>(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType?: 'json';\n    },\n  ): Observable<T>;\n\n  patch(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe?: 'body' | 'events' | 'response';\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\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: ODataOptions & {\n      observe?: 'body';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<ArrayBuffer>;\n\n  post(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType: 'blob';\n    },\n  ): Observable<Blob>;\n\n  post(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType: 'text';\n    },\n  ): Observable<string>;\n\n  post(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  post(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'blob';\n    },\n  ): Observable<HttpEvent<Blob>>;\n\n  post(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'text';\n    },\n  ): Observable<HttpEvent<string>>;\n\n  post(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<Object>>;\n\n  post<T>(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<T>>;\n\n  post(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<ODataResponse<ArrayBuffer>>;\n\n  post(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'blob';\n    },\n  ): Observable<ODataResponse<Blob>>;\n\n  post(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'text';\n    },\n  ): Observable<ODataResponse<string>>;\n\n  post(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType?: 'json';\n    },\n  ): Observable<ODataResponse<Object>>;\n\n  post<T>(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType?: 'json';\n    },\n  ): Observable<ODataResponse<T>>;\n\n  post(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType?: 'json';\n    },\n  ): Observable<Object>;\n\n  post<T>(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType?: 'json';\n    },\n  ): Observable<T>;\n\n  post(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe?: 'body' | 'events' | 'response';\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\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: ODataOptions & {\n      observe?: 'body';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<ArrayBuffer>;\n\n  put(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType: 'blob';\n    },\n  ): Observable<Blob>;\n\n  put(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType: 'text';\n    },\n  ): Observable<string>;\n\n  put(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<HttpEvent<ArrayBuffer>>;\n\n  put(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'blob';\n    },\n  ): Observable<HttpEvent<Blob>>;\n\n  put(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType: 'text';\n    },\n  ): Observable<HttpEvent<string>>;\n\n  put(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<Object>>;\n\n  put<T>(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'events';\n      responseType?: 'json';\n    },\n  ): Observable<HttpEvent<T>>;\n\n  put(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'arraybuffer';\n    },\n  ): Observable<ODataResponse<ArrayBuffer>>;\n\n  put(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'blob';\n    },\n  ): Observable<ODataResponse<Blob>>;\n\n  put(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType: 'text';\n    },\n  ): Observable<ODataResponse<string>>;\n\n  put(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType?: 'json';\n    },\n  ): Observable<ODataResponse<Object>>;\n\n  put<T>(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe: 'response';\n      responseType?: 'json';\n    },\n  ): Observable<ODataResponse<T>>;\n\n  put(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType?: 'json';\n    },\n  ): Observable<Object>;\n\n  put<T>(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe?: 'body';\n      responseType?: 'json';\n    },\n  ): Observable<T>;\n\n  put(\n    resource: ODataResource<any>,\n    body: any | null,\n    options: ODataOptions & {\n      observe?: 'body' | 'events' | 'response';\n      responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n    } = {},\n  ): Observable<any> {\n    return this.request<any>('PUT', resource, addBody(options, body));\n  }\n}\n","import { Observable } from 'rxjs';\nimport { ODataClient } from '../client';\nimport {\n  ODataActionOptions,\n  ODataActionResource,\n  ODataEntities,\n  ODataEntity,\n  ODataFunctionOptions,\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?: ODataFunctionOptions<R>,\n  ): Observable<ODataEntity<R>>;\n  protected callFunction<P, R>(\n    params: P | null,\n    resource: ODataFunctionResource<P, R>,\n    responseType: 'entities',\n    options?: ODataFunctionOptions<R>,\n  ): Observable<ODataEntities<R>>;\n  protected callFunction<P, R>(\n    params: P | null,\n    resource: ODataFunctionResource<P, R>,\n    responseType: 'property',\n    options?: ODataFunctionOptions<R>,\n  ): Observable<ODataProperty<R>>;\n  protected callFunction<P, R>(\n    params: P | null,\n    resource: ODataFunctionResource<P, R>,\n    responseType: 'none',\n    options?: ODataFunctionOptions<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: ODataFunctionOptions<R> = {},\n  ): Observable<any> {\n    resource.query((q) => q.restore(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?: ODataActionOptions<R>,\n  ): Observable<ODataEntity<R>>;\n  protected callAction<P, R>(\n    params: P | null,\n    resource: ODataActionResource<P, R>,\n    responseType: 'entities',\n    options?: ODataActionOptions<R>,\n  ): Observable<ODataEntities<R>>;\n  protected callAction<P, R>(\n    params: P | null,\n    resource: ODataActionResource<P, R>,\n    responseType: 'property',\n    options?: ODataActionOptions<R>,\n  ): Observable<ODataProperty<R>>;\n  protected callAction<P, R>(\n    params: P | null,\n    resource: ODataActionResource<P, R>,\n    responseType: 'none',\n    options?: ODataActionOptions<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: ODataActionOptions<R> = {},\n  ): Observable<any> {\n    resource.query((q) => q.restore(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.restore(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.findStructuredType<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  ODataEntity,\n  ODataEntityResource,\n  ODataEntitySetResource,\n  ODataOptions,\n} from '../resources';\nimport { ODataEntityService } from './entity';\n\nexport class ODataEntitySetService<T> extends ODataEntityService<T> {\n  static Model?: typeof ODataModel;\n  static Collection?: typeof ODataCollection;\n\n  model(entity?: Partial<T>, reset?: boolean) {\n    const Service = this.constructor as typeof ODataEntitySetService;\n    return this.entity().asModel((entity ?? {}) as Partial<T>, {\n      reset,\n      ModelType: Service.Model,\n    });\n  }\n\n  collection(entities?: Partial<T>[], reset?: boolean) {\n    const Service = this.constructor as typeof ODataEntitySetService;\n    return this.entities().asCollection((entities ?? []) as Partial<T>[], {\n      reset,\n      CollectionType: Service.Collection,\n    });\n  }\n\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.findEntitySet(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) {\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    top: number,\n    options?: ODataOptions & { withCount?: boolean },\n  ) {\n    return this.entities().fetchMany(top, 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(options?: ODataOptions & { etag?: string }) {\n    return this.entities().fetchOne(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())\n      return throwError(() => new Error('update: 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())\n      return throwError(() => new Error('modify: 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())\n      return throwError(() => new Error('destroy: 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.entity(key)\n      .fetch({ etag, ...options })\n      .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        () =>\n          new Error(\n            'save: Composite key require a specific method, use create/update/patch',\n          ),\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(\n        () => new Error(\"save: Can't update/patch entity without key\"),\n      );\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 { ODataModel } from '../models/model';\nimport {\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  static Model?: typeof ODataModel;\n  model(entity?: Partial<T>) {\n    const Service = this.constructor as typeof ODataSingletonService;\n    return this.entity().asModel((entity ?? {}) as Partial<T>, {\n      ModelType: Service.Model,\n    });\n  }\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.findEntitySet(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';\nimport { ODataCollection, ODataModel } from '../models';\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    options: {\n      Model?: { new (...params: any[]): ODataModel<T> };\n      Collection?: {\n        new (...params: any[]): ODataCollection<T, ODataModel<T>>;\n      };\n    } = {},\n  ): ODataEntitySetService<T> {\n    const Service = class extends ODataEntitySetService<T> {\n      Model = options?.Model;\n      Collection = options?.Collection;\n    };\n    return new Service(this.client, entitySetName, apiNameOrEntityType);\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    options: { Model?: { new (...params: any[]): ODataModel<T> } } = {},\n  ): ODataSingletonService<T> {\n    const Service = class extends ODataSingletonService<T> {\n      Model = options?.Model;\n    };\n    return new Service(this.client, singletonName, apiNameOrEntityType);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport {\n  EnvironmentProviders,\n  InjectionToken,\n  ModuleWithProviders,\n  NgModule,\n  Provider,\n  makeEnvironmentProviders,\n} from '@angular/core';\nimport { ODataClient } from './client';\nimport { ODataConfigLoader, ODataConfigSyncLoader } from './loaders';\nimport { ODataServiceFactory } from './services/index';\nimport { ApiConfig } from './types';\n\nexport interface PassedInitialConfig {\n  config?: ApiConfig | ApiConfig[];\n  loader?: Provider;\n}\n\nexport const ODATA_CONFIG = new InjectionToken<ApiConfig>('odata.config');\n\nexport function createSyncLoader(passedConfig: PassedInitialConfig) {\n  return new ODataConfigSyncLoader(passedConfig.config!);\n}\n\n// Standalone version\nexport function provideODataClient(\n  passedConfig: PassedInitialConfig,\n): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    { provide: ODATA_CONFIG, useValue: passedConfig },\n    passedConfig?.loader ?? {\n      provide: ODataConfigLoader,\n      useFactory: createSyncLoader,\n      deps: [ODATA_CONFIG],\n    },\n    ODataClient,\n    ODataServiceFactory,\n  ]);\n}\n\n// Module version\n@NgModule({\n  imports: [CommonModule, HttpClientModule],\n  providers: [ODataClient, ODataServiceFactory],\n})\nexport class ODataModule {\n  static forRoot(\n    passedConfig: PassedInitialConfig,\n  ): ModuleWithProviders<ODataModule> {\n    return {\n      ngModule: ODataModule,\n      providers: [\n        // Make the ODATA_CONFIG available through injection\n        { provide: ODATA_CONFIG, useValue: passedConfig },\n\n        // Create the loader: Either the one getting passed or a sync one\n        passedConfig?.loader ?? {\n          provide: ODataConfigLoader,\n          useFactory: createSyncLoader,\n          deps: [ODATA_CONFIG],\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":["JsonSchemaType","map","i2.ODataConfigLoader","i1.ODataClient"],"mappings":"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"}