angular-odata 0.122.0 → 0.124.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/api.mjs +373 -0
- package/esm2022/lib/cache/cache.mjs +175 -0
- package/{esm2020 → esm2022}/lib/cache/storage.mjs +1 -1
- package/esm2022/lib/client.mjs +252 -0
- package/{esm2020 → esm2022}/lib/helper.mjs +1 -1
- package/{esm2020 → esm2022}/lib/loaders.mjs +1 -1
- package/esm2022/lib/models/collection.mjs +865 -0
- package/esm2022/lib/models/model.mjs +535 -0
- package/esm2022/lib/models/options.mjs +1117 -0
- package/{esm2020 → esm2022}/lib/module.mjs +5 -5
- package/esm2022/lib/resources/path/segments.mjs +124 -0
- package/esm2022/lib/resources/query/builder.mjs +624 -0
- package/esm2022/lib/resources/query/expressions/base.mjs +20 -0
- package/esm2022/lib/resources/query/expressions/compute.mjs +39 -0
- package/esm2022/lib/resources/query/expressions/count.mjs +99 -0
- package/esm2022/lib/resources/query/expressions/expand.mjs +125 -0
- package/esm2022/lib/resources/query/expressions/filter.mjs +161 -0
- package/esm2022/lib/resources/query/expressions/orderby.mjs +56 -0
- package/esm2022/lib/resources/query/expressions/search.mjs +122 -0
- package/esm2022/lib/resources/query/expressions/select.mjs +31 -0
- package/esm2022/lib/resources/query/expressions/syntax.mjs +444 -0
- package/{esm2020 → esm2022}/lib/resources/query/handlers.mjs +1 -1
- package/esm2022/lib/resources/query/options.mjs +115 -0
- package/{esm2020 → esm2022}/lib/resources/request.mjs +1 -1
- package/esm2022/lib/resources/resource.mjs +257 -0
- package/{esm2020 → esm2022}/lib/resources/responses/annotations.mjs +1 -1
- package/esm2022/lib/resources/responses/csdl/csdl-annotation.mjs +33 -0
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-entity-container.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-entity-set.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-enum-type.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-function-action.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-reference.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-schema.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-singleton.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-structural-property.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-structured-type.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-type-definition.mjs +1 -1
- package/esm2022/lib/resources/responses/metadata.mjs +547 -0
- package/{esm2020 → esm2022}/lib/resources/responses/response.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/action.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/batch.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/count.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/entity-set.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/entity.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/function.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/media.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/navigation-property.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/property.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/reference.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/singleton.mjs +1 -1
- package/{esm2020 → esm2022}/lib/resources/types/value.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/annotation.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/callable.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/element.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/entity-container.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/enum-type.mjs +1 -1
- package/{esm2020 → esm2022}/lib/schema/parsers/callable.mjs +1 -1
- package/esm2022/lib/schema/parsers/edm.mjs +99 -0
- package/{esm2020 → esm2022}/lib/schema/parsers/enum-type.mjs +2 -2
- package/esm2022/lib/schema/parsers/structured-type.mjs +502 -0
- package/{esm2020 → esm2022}/lib/schema/schema.mjs +1 -1
- package/esm2022/lib/schema/structured-type.mjs +207 -0
- package/esm2022/lib/services/base.mjs +29 -0
- package/{esm2020 → esm2022}/lib/services/entity-set.mjs +1 -1
- package/{esm2020 → esm2022}/lib/services/factory.mjs +4 -4
- package/{esm2020 → esm2022}/lib/services/singleton.mjs +1 -1
- package/{esm2020 → esm2022}/lib/settings.mjs +1 -1
- package/{esm2020 → esm2022}/lib/types.mjs +1 -1
- package/{esm2020 → esm2022}/lib/utils/arrays.mjs +1 -1
- package/{esm2020 → esm2022}/lib/utils/durations.mjs +1 -1
- package/esm2022/lib/utils/enums.mjs +61 -0
- package/{esm2020 → esm2022}/lib/utils/http.mjs +1 -1
- package/{esm2020 → esm2022}/lib/utils/objects.mjs +1 -1
- package/{esm2020 → esm2022}/lib/utils/odata.mjs +1 -1
- package/esm2022/lib/utils/types.mjs +136 -0
- package/{fesm2020 → fesm2022}/angular-odata.mjs +544 -373
- package/fesm2022/angular-odata.mjs.map +1 -0
- package/lib/helper.d.ts +1 -1
- package/lib/models/model.d.ts +4 -2
- package/lib/models/options.d.ts +7 -8
- package/lib/resources/path/segments.d.ts +15 -6
- package/lib/resources/query/builder.d.ts +21 -20
- package/lib/resources/query/expressions/base.d.ts +6 -4
- package/lib/resources/query/expressions/compute.d.ts +10 -8
- package/lib/resources/query/expressions/count.d.ts +14 -11
- package/lib/resources/query/expressions/expand.d.ts +23 -19
- package/lib/resources/query/expressions/filter.d.ts +22 -20
- package/lib/resources/query/expressions/orderby.d.ts +12 -9
- package/lib/resources/query/expressions/search.d.ts +12 -9
- package/lib/resources/query/expressions/select.d.ts +9 -7
- package/lib/resources/query/expressions/syntax.d.ts +75 -71
- package/lib/resources/query/handlers.d.ts +2 -2
- package/lib/resources/query/options.d.ts +15 -6
- package/lib/resources/resource.d.ts +2 -2
- package/lib/resources/responses/types.d.ts +3 -3
- package/lib/resources/types/options.d.ts +7 -7
- package/lib/schema/parsers/structured-type.d.ts +8 -5
- package/lib/schema/structured-type.d.ts +2 -1
- package/lib/types.d.ts +15 -15
- package/lib/utils/durations.d.ts +1 -1
- package/lib/utils/enums.d.ts +3 -0
- package/lib/utils/types.d.ts +1 -0
- package/package.json +9 -15
- package/esm2020/lib/api.mjs +0 -373
- package/esm2020/lib/cache/cache.mjs +0 -173
- package/esm2020/lib/client.mjs +0 -252
- package/esm2020/lib/models/collection.mjs +0 -861
- package/esm2020/lib/models/model.mjs +0 -507
- package/esm2020/lib/models/options.mjs +0 -1110
- package/esm2020/lib/resources/path/segments.mjs +0 -124
- package/esm2020/lib/resources/query/builder.mjs +0 -588
- package/esm2020/lib/resources/query/expressions/base.mjs +0 -20
- package/esm2020/lib/resources/query/expressions/compute.mjs +0 -39
- package/esm2020/lib/resources/query/expressions/count.mjs +0 -89
- package/esm2020/lib/resources/query/expressions/expand.mjs +0 -115
- package/esm2020/lib/resources/query/expressions/filter.mjs +0 -161
- package/esm2020/lib/resources/query/expressions/orderby.mjs +0 -56
- package/esm2020/lib/resources/query/expressions/search.mjs +0 -122
- package/esm2020/lib/resources/query/expressions/select.mjs +0 -31
- package/esm2020/lib/resources/query/expressions/syntax.mjs +0 -409
- package/esm2020/lib/resources/query/options.mjs +0 -115
- package/esm2020/lib/resources/resource.mjs +0 -251
- package/esm2020/lib/resources/responses/csdl/csdl-annotation.mjs +0 -33
- package/esm2020/lib/resources/responses/metadata.mjs +0 -547
- package/esm2020/lib/schema/parsers/edm.mjs +0 -104
- package/esm2020/lib/schema/parsers/structured-type.mjs +0 -490
- package/esm2020/lib/schema/structured-type.mjs +0 -202
- package/esm2020/lib/services/base.mjs +0 -29
- package/esm2020/lib/utils/enums.mjs +0 -45
- package/esm2020/lib/utils/types.mjs +0 -133
- package/fesm2015/angular-odata.mjs +0 -11811
- package/fesm2015/angular-odata.mjs.map +0 -1
- package/fesm2020/angular-odata.mjs.map +0 -1
- /package/{esm2020 → esm2022}/angular-odata.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/cache/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/cache/memory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/path/handlers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/path/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/query/expressions/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/query/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/responses/types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/metadata.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/resources/types/options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/entity-set.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/schema/parsers/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/entity.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/services/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/arraybuffers.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/dates.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/strings.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/urls.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"angular-odata.mjs","sources":["../../../projects/angular-odata/src/lib/types.ts","../../../projects/angular-odata/src/lib/constants.ts","../../../projects/angular-odata/src/lib/cache/cache.ts","../../../projects/angular-odata/src/lib/cache/memory.ts","../../../projects/angular-odata/src/lib/resources/query/builder.ts","../../../projects/angular-odata/src/lib/utils/dates.ts","../../../projects/angular-odata/src/lib/utils/durations.ts","../../../projects/angular-odata/src/lib/utils/enums.ts","../../../projects/angular-odata/src/lib/utils/types.ts","../../../projects/angular-odata/src/lib/utils/http.ts","../../../projects/angular-odata/src/lib/utils/objects.ts","../../../projects/angular-odata/src/lib/utils/odata.ts","../../../projects/angular-odata/src/lib/utils/strings.ts","../../../projects/angular-odata/src/lib/utils/urls.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/base.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/syntax.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/compute.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/count.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/filter.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/orderby.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/search.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/select.ts","../../../projects/angular-odata/src/lib/resources/query/expressions/expand.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/helper.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/schema/parsers/structured-type.ts","../../../projects/angular-odata/src/lib/schema/parsers/callable.ts","../../../projects/angular-odata/src/lib/schema/callable.ts","../../../projects/angular-odata/src/lib/schema/entity-set.ts","../../../projects/angular-odata/src/lib/schema/entity-container.ts","../../../projects/angular-odata/src/lib/schema/enum-type.ts","../../../projects/angular-odata/src/lib/schema/structured-type.ts","../../../projects/angular-odata/src/lib/schema/schema.ts","../../../projects/angular-odata/src/lib/resources/resource.ts","../../../projects/angular-odata/src/lib/resources/types/action.ts","../../../projects/angular-odata/src/lib/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/resources/responses/annotations.ts","../../../projects/angular-odata/src/lib/resources/responses/options.ts","../../../projects/angular-odata/src/lib/resources/responses/response.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-function-action.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-annotation.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-structured-type.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-enum-type.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-reference.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-structural-property.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-entity-container.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-entity-set.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-navigation-property-binding.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-schema.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-singleton.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-type-definition.ts","../../../projects/angular-odata/src/lib/resources/responses/metadata.ts","../../../projects/angular-odata/src/lib/resources/types/metadata.ts","../../../projects/angular-odata/src/lib/resources/types/singleton.ts","../../../projects/angular-odata/src/lib/cache/storage.ts","../../../projects/angular-odata/src/lib/models/options.ts","../../../projects/angular-odata/src/lib/models/collection.ts","../../../projects/angular-odata/src/lib/models/model.ts","../../../projects/angular-odata/src/lib/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';\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 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 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}\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 name?: string;\n version?: ODataVersion;\n default?: boolean;\n creation?: Date;\n cache?: Cache;\n errorHandler?: (error: any, caught: Observable<any>) => Observable<never>;\n options?: ApiOptions;\n parsers?: { [type: string]: Parser<any> };\n schemas?: SchemaConfig[];\n};\nexport type AnnotationConfig = {\n term: string;\n string?: string;\n bool?: boolean;\n int?: number;\n permissions?: string[];\n properties?: string[];\n};\nexport type SchemaConfig = {\n namespace: string;\n alias?: string;\n annotations?: AnnotationConfig[];\n enums?: EnumTypeConfig<any>[];\n entities?: StructuredTypeConfig<any>[];\n callables?: CallableConfig[];\n containers?: EntityContainerConfig[];\n};\n\nexport type EntityContainerConfig = {\n name: string;\n annotations?: AnnotationConfig[];\n entitySets?: EntitySetConfig[];\n};\n\nexport type EnumTypeFieldConfig<E> = {\n value: E;\n annotations?: AnnotationConfig[];\n};\n\nexport type EnumTypeConfig<E> = {\n name: string;\n flags?: boolean;\n annotations?: AnnotationConfig[];\n members: { [name: string]: E } | { [value: number]: string };\n fields: { [member: string]: EnumTypeFieldConfig<E> };\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<T> = {\n name: string;\n base?: string;\n open?: boolean;\n model?: { new (...params: any[]): any };\n collection?: { new (...params: any[]): any };\n annotations?: AnnotationConfig[];\n keys?: { name: string; alias?: string }[];\n fields: { [P in keyof T]?: StructuredTypeFieldConfig };\n};\n\nexport type Parameter = {\n type: string;\n nullable?: boolean;\n collection?: boolean;\n};\n\nexport type CallableConfig = {\n name: string;\n entitySetPath?: string;\n bound?: boolean;\n composable?: boolean;\n parameters?: { [name: string]: Parameter };\n return?: { type: string; collection?: boolean };\n};\nexport type EntitySetConfig = {\n name: string;\n entityType: string;\n service: { new (...params: any[]): any };\n annotations?: AnnotationConfig[];\n};\n//#endregion\n","export const $ID = '$id';\nexport const ODATA_ID = '@odata.id';\n\n// SEGMENTS\nexport const $METADATA = '$metadata';\nexport const $BATCH = '$batch';\nexport const $REF = '$ref';\nexport const $VALUE = '$value';\nexport const $COUNT = '$count';\nexport const $QUERY = '$query';\nexport const $INLINECOUNT = '$inlinecount';\n\n// HTTP HEADERS\nexport const IF_MATCH_HEADER = 'If-Match';\nexport const IF_NONE_MATCH_HEADER = 'If-None-Match';\nexport const CONTENT_TYPE = 'Content-Type';\nexport const 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 TEXT_PLAIN = 'text/plain';\nexport const MULTIPART_MIXED = 'multipart/mixed';\nexport const MULTIPART_MIXED_BOUNDARY = 'multipart/mixed;boundary=';\nexport const CONTENT_TRANSFER_ENCODING = 'Content-Transfer-Encoding';\nexport const CONTENT_ID = 'Content-ID';\nexport const MAX_AGE = 'max-age';\n\n// VERSIONS\nexport const VERSION_4_0 = '4.0';\nexport const VERSION_3_0 = '3.0';\nexport const VERSION_2_0 = '2.0';\nexport const DEFAULT_VERSION = VERSION_4_0;\n\nexport const BINARY = 'binary';\nexport const BOUNDARY_PREFIX_SUFFIX = '--';\nexport const BATCH_PREFIX = 'batch_';\nexport const CHANGESET_PREFIX = 'changeset_';\nexport const DEFAULT_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';\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 ? `${context.entitySet}(${context.key})` : 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 type { ODataRequest, ODataResponse } from '../resources';\nimport { ODataCache } from './cache';\n\nexport class ODataInMemoryCache extends ODataCache {\n constructor({ timeout }: { timeout?: number } = {}) {\n super({ timeout });\n }\n\n /**\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 Aggregate =\n | string\n | { [propertyName: string]: { with: StandardAggregateMethods; as: string } };\n\n// OrderBy\n\nexport type OrderBy<T> = OrderByType<T> | OrderByType<T>[];\nexport type OrderByType<T> = string | OrderByObject<T>;\nexport type OrderByObject<T> =\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?: Aggregate | Array<Aggregate>;\n filter?: Filter<T>;\n groupBy?: GroupBy<T>;\n};\nexport type GroupBy<T> = {\n properties: Array<keyof T>;\n transform?: Transform<T>;\n};\n\nexport enum QueryCustomTypes {\n Raw,\n Alias,\n Duration,\n Binary,\n}\n\nexport type QueryCustomType = {\n type: QueryCustomTypes;\n value: any;\n name?: string;\n};\nexport type Value = string | Date | number | boolean | QueryCustomType;\n\n//https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_QueryOptions\nexport const raw = (value: string): QueryCustomType => ({\n type: QueryCustomTypes.Raw,\n value,\n});\nexport const alias = (value: any, name?: string): QueryCustomType => ({\n type: QueryCustomTypes.Alias,\n value,\n name,\n});\nexport const duration = (value: string): QueryCustomType => ({\n type: QueryCustomTypes.Duration,\n value,\n});\nexport const binary = (value: string): QueryCustomType => ({\n type: QueryCustomTypes.Binary,\n value,\n});\nexport const isQueryCustomType = (value: any) =>\n typeof value === 'object' &&\n 'type' in value &&\n value.type in QueryCustomTypes;\nexport type QueryOptions<T> = ExpandOptions<T> & {\n search: string;\n transform: { [name: string]: any } | { [name: string]: any }[];\n skip: number;\n skiptoken: string;\n key: string | number | { [name: string]: any };\n count: boolean | Filter<T>;\n action: string;\n func: string | { [functionName: string]: { [parameterName: string]: any } };\n format: string;\n aliases: QueryCustomType[];\n escape: boolean;\n};\n\nexport const ITEM_ROOT = '';\n\nexport default function <T>({\n select,\n search,\n skiptoken,\n format,\n top,\n skip,\n filter,\n transform,\n orderBy,\n key,\n count,\n expand,\n action,\n func,\n aliases,\n escape,\n}: Partial<QueryOptions<T>> = {}) {\n const [path, params] = buildPathAndQuery({\n select,\n search,\n skiptoken,\n format,\n top,\n skip,\n filter,\n transform,\n orderBy,\n key,\n count,\n expand,\n action,\n func,\n aliases,\n escape,\n });\n\n return buildUrl(path, params);\n}\n\nexport function buildPathAndQuery<T>({\n select,\n search,\n skiptoken,\n format,\n top,\n skip,\n filter,\n transform,\n orderBy,\n key,\n count,\n expand,\n action,\n func,\n aliases,\n escape,\n}: Partial<QueryOptions<T>> = {}): [string, { [name: string]: any }] {\n let path: string = '';\n aliases = aliases || [];\n\n const query: any = {};\n\n // key is not (null, undefined)\n if (key != undefined) {\n path += `(${normalizeValue(key as Value, { aliases, escape })})`;\n }\n\n if (select) {\n query.$select = Array.isArray(select) ? select.join(',') : select;\n }\n\n if (search) {\n query.$search = search;\n }\n\n if (skiptoken) {\n query.$skiptoken = skiptoken;\n }\n\n if (format) {\n query.$format = format;\n }\n\n if (filter || typeof count === 'object') {\n query.$filter = buildFilter(typeof count === 'object' ? count : filter, {\n aliases,\n escape,\n });\n }\n\n if (transform) {\n query.$apply = buildTransforms(transform, { aliases, escape });\n }\n\n if (expand) {\n query.$expand = buildExpand(expand, { aliases, escape });\n }\n\n if (orderBy) {\n query.$orderby = buildOrderBy(orderBy);\n }\n\n if (count) {\n if (typeof count === 'boolean') {\n query.$count = true;\n } else {\n path += '/$count';\n }\n }\n\n if (typeof top === 'number') {\n query.$top = top;\n }\n\n if (typeof skip === 'number') {\n query.$skip = skip;\n }\n\n if (action) {\n path += `/${action}`;\n }\n\n if (func) {\n if (typeof func === 'string') {\n path += `/${func}()`;\n } else if (typeof func === 'object') {\n const [funcName] = Object.keys(func);\n const funcArgs = normalizeValue(func[funcName] as Value, {\n aliases,\n escape,\n });\n\n path += `/${funcName}(${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 (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 { aliases, escape = false }: { aliases?: QueryCustomType[]; escape?: boolean }\n): string {\n if (typeof expands === 'number') {\n return expands as any;\n } else if (typeof expands === 'string') {\n if (expands.indexOf('/') === -1) {\n return expands;\n }\n\n // Change `Foo/Bar/Baz` to `Foo($expand=Bar($expand=Baz))`\n return expands\n .split('/')\n .reverse()\n .reduce((results, item, index, arr) => {\n if (index === 0) {\n // Inner-most item\n return `$expand=${item}`;\n } else if (index === arr.length - 1) {\n // Outer-most item, don't add `$expand=` prefix (added above)\n return `${item}(${results})`;\n } else {\n // Other items\n return `$expand=${item}(${results})`;\n }\n }, '');\n } else if (Array.isArray(expands)) {\n return `${(expands as Array<NestedExpandOptions<any>>)\n .map((e) => buildExpand(e, { aliases, escape }))\n .join(',')}`;\n } else if (typeof expands === 'object') {\n const expandKeys = Object.keys(expands);\n\n if (\n expandKeys.some(\n (key) => SUPPORTED_EXPAND_PROPERTIES.indexOf(key.toLowerCase()) !== -1\n )\n ) {\n return expandKeys\n .map((key) => {\n let value;\n switch (key) {\n case 'filter':\n value = buildFilter((expands as NestedExpandOptions<any>)[key], {\n aliases,\n escape,\n });\n break;\n case 'orderBy':\n value = buildOrderBy(\n (expands as NestedExpandOptions<any>)[key] as OrderBy<T>\n );\n break;\n case 'levels':\n case 'count':\n case 'top':\n case 'skip':\n value = `${(expands as NestedExpandOptions<any>)[key]}`;\n break;\n default:\n value = buildExpand(\n (expands as NestedExpandOptions<any>)[key] as Expand<T>,\n { aliases, escape }\n );\n }\n return `$${key.toLowerCase()}=${value}`;\n })\n .join(';');\n } else {\n return expandKeys\n .map((key) => {\n const builtExpand = buildExpand(\n (expands as NestedExpandOptions<any>)[\n key\n ] as NestedExpandOptions<any>,\n { aliases, escape }\n );\n return builtExpand ? `${key}(${builtExpand})` : key;\n })\n .join(',');\n }\n }\n return '';\n}\n\nfunction buildTransforms<T>(\n transforms: Transform<T> | Transform<T>[],\n { aliases, escape = false }: { aliases?: QueryCustomType[]; escape?: boolean }\n) {\n // Wrap single object an array for simplified processing\n const transformsArray = Array.isArray(transforms) ? transforms : [transforms];\n\n const transformsResult = transformsArray.reduce(\n (result: string[], transform) => {\n const { aggregate, filter, groupBy, ...rest } = transform;\n\n // TODO: support as many of the following:\n // topcount, topsum, toppercent,\n // bottomsum, bottomcount, bottompercent,\n // identity, concat, expand, search, compute, isdefined\n const unsupportedKeys = Object.keys(rest);\n if (unsupportedKeys.length) {\n throw new Error(`Unsupported transform(s): ${unsupportedKeys}`);\n }\n\n if (aggregate) {\n result.push(`aggregate(${buildAggregate(aggregate)})`);\n }\n if (filter) {\n const builtFilter = buildFilter(filter, { aliases, escape });\n if (builtFilter) {\n result.push(\n `filter(${buildFilter(builtFilter, { aliases, escape })})`\n );\n }\n }\n if (groupBy) {\n result.push(`groupby(${buildGroupBy(groupBy, { aliases, escape })})`);\n }\n\n return result;\n },\n []\n );\n\n return transformsResult.join('/') || undefined;\n}\n\nfunction buildAggregate(aggregate: Aggregate | Aggregate[]) {\n // Wrap single object in an array for simplified processing\n const aggregateArray = Array.isArray(aggregate) ? aggregate : [aggregate];\n\n return aggregateArray\n .map((aggregateItem) => {\n return typeof aggregateItem === 'string'\n ? aggregateItem\n : Object.keys(aggregateItem).map((aggregateKey) => {\n const aggregateValue = aggregateItem[aggregateKey];\n\n // TODO: Are these always required? Can/should we default them if so?\n if (!aggregateValue.with) {\n throw new Error(`'with' property required for '${aggregateKey}'`);\n }\n if (!aggregateValue.as) {\n throw new Error(`'as' property required for '${aggregateKey}'`);\n }\n\n return `${aggregateKey} with ${aggregateValue.with} as ${aggregateValue.as}`;\n });\n })\n .join(',');\n}\n\nfunction buildGroupBy<T>(\n groupBy: GroupBy<T>,\n { aliases, escape = false }: { aliases?: QueryCustomType[]; escape?: boolean }\n) {\n if (!groupBy.properties) {\n throw new Error(`'properties' property required for groupBy`);\n }\n\n let result = `(${groupBy.properties.join(',')})`;\n\n if (groupBy.transform) {\n result += `,${buildTransforms(groupBy.transform, { aliases, escape })}`;\n }\n\n return result;\n}\n\nfunction buildOrderBy<T>(orderBy: OrderBy<T>, prefix: string = ''): string {\n if (Array.isArray(orderBy)) {\n return (orderBy as OrderByObject<T>[])\n .map((value) =>\n Array.isArray(value) &&\n value.length === 2 &&\n ['asc', 'desc'].indexOf(value[1]) !== -1\n ? value.join(' ')\n : value\n )\n .map((v) => `${prefix}${v 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 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 { [key: string]: any }>(enums: E): string[] {\n return Object.values<string>(enums).filter((v) => typeof v === 'string');\n },\n\n values<E extends { [key: string]: any }>(enums: E): number[] {\n return Object.values<number>(enums).filter((v) => typeof v === 'number');\n },\n\n toValue<E extends { [key: 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 { [key: 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 { [key: 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 { [key: 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","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 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(statusLine: string): {\n status: string;\n code: number;\n message: string;\n } {\n const status = statusLine.split(' ')[0];\n const code = parseInt(statusLine.split(' ')[1], 10);\n const message = statusLine.split(' ')[2];\n return { status, code, message };\n },\n\n boundaryDelimiter(contentType: string): string {\n const contentTypeParts: string[] = contentType.split(';');\n if (contentTypeParts.length === 2) {\n const boundary: string = contentType.split(';')[1].trim();\n const boundaryDelimiter: string =\n BOUNDARY_PREFIX_SUFFIX + boundary.split('=')[1];\n return boundaryDelimiter;\n } else {\n return '';\n }\n },\n\n boundaryEnd(boundaryDelimiter: string): string {\n if (!boundaryDelimiter.length) {\n return '';\n }\n const boundaryEnd: string = boundaryDelimiter + BOUNDARY_PREFIX_SUFFIX;\n return boundaryEnd;\n },\n};\n","import { Types } from './types';\n\nfunction forEach(array: any[], iteratee: (value: any, index: number) => void) {\n let index = -1;\n const length = array.length;\n while (++index < length) {\n iteratee(array[index], index);\n }\n return array;\n}\n\nexport const Objects = {\n set(obj: { [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 type { QueryCustomType } from '../builder';\nimport { Renderable } from './syntax';\n\nexport abstract class Expression<T> implements Renderable {\n protected _children: Renderable[];\n constructor({\n children,\n }: {\n children?: Renderable[];\n } = {}) {\n this._children = children || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'Expression';\n }\n\n abstract render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[] | undefined;\n escape?: boolean | undefined;\n prefix?: string | undefined;\n }): string;\n\n 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 children: this._children.map((c) => c.toJSON()),\n };\n }\n}\n","import { Objects, Types } from '../../../utils';\nimport type { QueryCustomType } from '../builder';\nimport { normalizeValue } from '../builder';\n\nexport interface Renderable {\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string;\n toString(): string;\n toJSON(): any;\n clone(): any;\n}\n\nexport class Field<T extends object> implements ProxyHandler<T> {\n constructor(public name: string = '') {}\n\n static factory<T extends object>(name: string = '') {\n return new Proxy({ _name: name } as T, new Field<T>());\n }\n\n get(target: T, key: string | symbol): any {\n let name = (target as any)['_name'];\n if (key === 'render') {\n return ({ prefix }: { prefix?: string }) =>\n prefix ? `${prefix}/${name}` : name;\n } else if (key === 'clone') {\n return () => Field.factory(name);\n } else if (key === Symbol.toStringTag) {\n return () => 'Field';\n } else if (key === 'toJSON') {\n return () => ({\n $type: Types.rawType(this),\n name: name,\n });\n } else {\n name = name ? `${name}/${key as string}` : key;\n return new Proxy({ _name: name } as any, this);\n }\n }\n\n has(target: T, key: string): any {\n return ['toJSON', 'clone', 'render'].includes(key) || key in target;\n }\n}\n\nfunction applyMixins(derivedCtor: any, constructors: any[]) {\n constructors.forEach((baseCtor) => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\n Object.defineProperty(\n derivedCtor.prototype,\n name,\n Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||\n Object.create(null)\n );\n });\n });\n}\n\nexport function render(\n value: any,\n {\n aliases,\n normalize,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n normalize?: boolean;\n escape?: boolean;\n prefix?: string;\n } = {}\n): string | number | boolean | null {\n if (typeof value === 'function') {\n return render(value(syntax), { aliases, normalize, prefix });\n }\n if (\n typeof value === 'object' &&\n value !== null &&\n value.render !== undefined\n ) {\n return render(value.render({ aliases, escape, prefix }), {\n aliases,\n normalize,\n escape,\n prefix,\n });\n }\n return normalize ? normalizeValue(value, { aliases, escape }) : value;\n}\n\nexport class Function<T> implements Renderable {\n constructor(\n protected name: string,\n protected values: any[],\n protected normalize: boolean = true,\n protected escape: boolean = false\n ) {}\n\n get [Symbol.toStringTag]() {\n return 'Function';\n }\n\n toJSON() {\n return {\n $type: Types.rawType(this),\n name: this.name,\n values: this.values,\n normalize: this.normalize,\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n let [field, ...values] = this.values;\n\n field = render(field, { aliases, escape, prefix });\n const params = [\n field,\n ...values.map((v) =>\n render(v, { aliases, escape, prefix, normalize: this.normalize })\n ),\n ];\n return `${this.name}(${params.join(', ')})`;\n }\n\n 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\nexport class StringAndCollectionFunctions<T> {\n concat(field: any, value: any, normalize?: boolean) {\n return new Function<T>('concat', [field, value], normalize);\n }\n\n contains(field: any, value: any, normalize?: boolean) {\n return new Function<T>('contains', [field, value], normalize);\n }\n\n endsWith(field: any, value: any, normalize?: boolean) {\n return new Function<T>('endswith', [field, value], normalize);\n }\n\n indexOf(field: any, value: any, normalize?: boolean) {\n return new Function<T>('indexof', [field, value], normalize);\n }\n\n length(value: any, normalize?: boolean) {\n return new Function<T>('length', [value], normalize);\n }\n\n startsWith(field: any, value: any, normalize?: boolean) {\n return new Function<T>('startswith', [field, value], normalize);\n }\n\n subString(field: any, start: number, length?: number) {\n let values = [field, start];\n if (length !== undefined) {\n values.push(length);\n }\n return new Function<T>('substring', values);\n }\n}\n\nexport class CollectionFunctions<T> {\n hasSubset(s1: T, s2: any) {\n return new Function<T>('hassubset', [s1, s2]);\n }\n hasSubsequence(s1: T, s2: any) {\n return new Function<T>('hassubsequence', [s1, s2]);\n }\n}\n\nexport class StringFunctions<T> {\n matchesPattern(value: T | string, pattern: string) {\n return new Function<T>('matchesPattern', [value, pattern]);\n }\n toLower(value: T) {\n return new Function<T>('tolower', [value]);\n }\n toUpper(value: T) {\n return new Function<T>('toupper', [value]);\n }\n trim(value: T) {\n return new Function<T>('trim', [value]);\n }\n}\n\nexport class DateAndTimeFunctions<T> {\n date(value: any) {\n return new Function<T>('date', [value]);\n }\n day(value: any) {\n return new Function<T>('day', [value]);\n }\n fractionalseconds(value: any) {\n return new Function<T>('fractionalseconds', [value]);\n }\n hour(value: any) {\n return new Function<T>('hour', [value]);\n }\n maxdatetime(value: any) {\n return new Function<T>('maxdatetime', [value]);\n }\n mindatetime(value: any) {\n return new Function<T>('mindatetime', [value]);\n }\n minute(value: any) {\n return new Function<T>('minute', [value]);\n }\n month(value: any) {\n return new Function<T>('month', [value]);\n }\n now() {\n return new Function<T>('now', []);\n }\n second(value: any) {\n return new Function<T>('second', [value]);\n }\n time(value: any) {\n return new Function<T>('time', [value]);\n }\n totaloffsetminutes(value: any) {\n return new Function<T>('totaloffsetminutes', [value]);\n }\n totalseconds(value: any) {\n return new Function<T>('totalseconds', [value]);\n }\n year(value: any) {\n return new Function<T>('year', [value]);\n }\n}\n\nexport class ArithmeticFunctions<T> {\n ceiling(value: T | string) {\n return new Function<T>('ceiling', [value]);\n }\n floor(value: T | string) {\n return new Function<T>('floor', [value]);\n }\n round(value: T | string) {\n return new Function<T>('round', [value]);\n }\n}\n\nexport class TypeFunctions<T> {\n cast(value: T | string, type?: string) {\n return new Function<T>('cast', [value, type]);\n }\n\n isof(value: T | string, type?: string) {\n return new Function<T>('isof', [value, type]);\n }\n}\n\nexport class GeoFunctions<T> {\n geoDistance(value: T, point: string, normalize?: boolean) {\n return new Function<T>('geo.distance', [value, point], normalize);\n }\n geoIntersects(value: T, polygon: string, normalize?: boolean) {\n return new Function<T>('geo.intersects', [value, polygon], normalize);\n }\n geoLength(line: T, normalize?: boolean) {\n return new Function<T>('geo.length', [line], normalize);\n }\n}\n\nexport class ConditionalFunctions<T> {\n case(condition: T | string, value: any) {\n return new Function<T>('case', [condition, value]);\n }\n}\n\nexport class Operator<T> implements Renderable {\n constructor(\n protected op: string,\n protected values: any[],\n protected normalize: boolean = true\n ) {}\n\n get [Symbol.toStringTag]() {\n return 'Operator';\n }\n\n toJSON() {\n return {\n $type: Types.rawType(this),\n op: this.op,\n values: this.values,\n normalize: this.normalize,\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n let [left, right] = this.values;\n\n left = render(left, { aliases, escape, prefix });\n if (right !== undefined) {\n right = Array.isArray(right)\n ? `(${right\n .map((v) =>\n render(v, {\n aliases,\n escape,\n prefix,\n normalize: this.normalize,\n })\n )\n .join(',')})`\n : render(right, {\n aliases,\n escape,\n prefix,\n normalize: this.normalize,\n });\n return `${left} ${this.op} ${right}`;\n }\n return `${this.op}(${left})`;\n }\n\n clone() {\n return new Operator(\n this.op,\n this.values.map((v) => Objects.clone(v)),\n this.normalize\n );\n }\n}\n\nexport class LogicalOperators<T> {\n eq(left: any, right: any, normalize?: boolean) {\n return new Operator('eq', [left, right], normalize);\n }\n ne(left: any, right: any, normalize?: boolean) {\n return new Operator('ne', [left, right], normalize);\n }\n gt(left: any, right: any, normalize?: boolean) {\n return new Operator('gt', [left, right], normalize);\n }\n ge(left: any, right: any, normalize?: boolean) {\n return new Operator('ge', [left, right], normalize);\n }\n lt(left: any, right: any, normalize?: boolean) {\n return new Operator('lt', [left, right], normalize);\n }\n le(left: any, right: any, normalize?: boolean) {\n return new Operator('le', [left, right], normalize);\n }\n /*\n and(left: any, right: any, normalize?: boolean) {\n return new Operator('and', [left, right], normalize);\n }\n or(left: any, right: any, normalize?: boolean) {\n return new Operator('or', [left, right], normalize);\n }\n */\n not(value: any, normalize?: boolean) {\n return new Operator<T>('not', [value], normalize);\n }\n has(left: any, right: any, normalize?: boolean) {\n return new Operator('has', [left, right], normalize);\n }\n in(left: any, right: any, normalize?: boolean) {\n return new Operator('in', [left, right], normalize);\n }\n}\n\nexport class ArithmeticOperators<T> {\n add(left: any, right: any, normalize?: boolean) {\n return new Operator<T>('add', [left, right], normalize);\n }\n sub(left: any, right: any, normalize?: boolean) {\n return new Operator('sub', [left, right], normalize);\n }\n mul(left: any, right: any, normalize?: boolean) {\n return new Operator('mul', [left, right], normalize);\n }\n div(left: any, right: any, normalize?: boolean) {\n return new Operator('div', [left, right], normalize);\n }\n mod(left: any, right: any, normalize?: boolean) {\n return new Operator('mod', [left, right], normalize);\n }\n neg(value: any, normalize?: boolean) {\n return new Operator('-', [value], normalize);\n }\n}\n\nexport class Grouping<T> implements Renderable {\n constructor(protected group: Renderable) {}\n\n get [Symbol.toStringTag]() {\n return 'Grouping';\n }\n\n toJSON() {\n return {\n $type: Types.rawType(this),\n group: this.group.toJSON(),\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n return `(${render(this.group, { aliases, escape, prefix })})`;\n }\n\n clone() {\n return new Grouping(Objects.clone(this.group));\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,\n alias: this.alias,\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n let [left, right] = this.values;\n\n left = render(left, { aliases, escape, prefix });\n 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 })})`;\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}\n\nexport class LambdaOperators<T> {\n any(field: T, value: any, alias?: string) {\n return new Lambda('any', [field, value], alias);\n }\n\n all(field: T, value: any, alias?: string) {\n return new Lambda('all', [field, value], alias);\n }\n}\n\nexport class ODataOperators<T> {}\nexport interface ODataOperators<T>\n extends LogicalOperators<T>,\n ArithmeticOperators<T>,\n LambdaOperators<T> {}\n\napplyMixins(ODataOperators, [\n LogicalOperators,\n ArithmeticOperators,\n LambdaOperators,\n]);\nexport const operators: ODataOperators<any> = new ODataOperators<any>();\n\nexport class ODataFunctions<T> {}\nexport interface ODataFunctions<T>\n extends StringAndCollectionFunctions<T>,\n CollectionFunctions<T>,\n StringFunctions<T>,\n DateAndTimeFunctions<T>,\n ArithmeticFunctions<T>,\n TypeFunctions<T>,\n GeoFunctions<T>,\n ConditionalFunctions<T> {}\n\napplyMixins(ODataFunctions, [\n StringAndCollectionFunctions,\n CollectionFunctions,\n StringFunctions,\n DateAndTimeFunctions,\n ArithmeticFunctions,\n TypeFunctions,\n GeoFunctions,\n ConditionalFunctions,\n]);\nexport const functions: ODataFunctions<any> = new ODataFunctions<any>();\n\nexport class ODataSyntax<T> {}\nexport interface ODataSyntax<T> extends ODataOperators<T>, ODataFunctions<T> {}\napplyMixins(ODataSyntax, [ODataOperators, ODataFunctions]);\n\nexport const syntax: ODataSyntax<any> = new ODataSyntax<any>();\n","import type { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport {\n Field,\n functions,\n ODataFunctions,\n ODataOperators,\n operators,\n Renderable,\n} from './syntax';\n\nexport type ComputeExpressionBuilder<T> = {\n t: Required<Readonly<T>>;\n e: () => ComputeExpression<T>;\n};\nexport class ComputeExpression<T> extends Expression<T> {\n names: string[];\n constructor({\n children,\n names,\n }: {\n children?: Renderable[];\n names?: string[];\n } = {}) {\n super({ children });\n this.names = names || [];\n }\n\n static compute<T extends object>(\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: Field.factory<Readonly<Required<T>>>(),\n e: () => new ComputeExpression<T>(),\n },\n current\n ) as ComputeExpression<T>;\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[] | undefined;\n escape?: boolean | undefined;\n prefix?: string | undefined;\n } = {}): string {\n let children = this._children.map((n) =>\n n.render({ aliases, escape, prefix })\n );\n return this.names\n .map((name, index) => `${children[index]} as ${name}`)\n .join(',');\n }\n\n clone() {\n return new ComputeExpression({\n children: this._children.map((c) => c.clone()),\n names: [...this.names],\n });\n }\n\n private _add(name: string, node: Renderable): ComputeExpression<T> {\n this.names.push(name);\n this._children.push(node);\n return this;\n }\n\n field<T extends object>(\n name: string,\n opts: (e: { o: ODataOperators<T>; f: ODataFunctions<T> }) => Renderable\n ): ComputeExpression<T> {\n const node = opts({\n o: operators as ODataOperators<T>,\n f: functions as ODataFunctions<T>,\n });\n return this._add(name, node);\n }\n}\n","import { QueryOption } from '../../../types';\nimport { Objects, Types } from '../../../utils';\nimport type { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport { FilterExpression, FilterExpressionBuilder } from './filter';\nimport { render, Field, Renderable } from './syntax';\n\nexport class CountField<T extends object> 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 }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n const params: { [key: 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({ aliases, prefix, escape });\n }\n return Object.assign(acc, { [key]: value });\n }, {});\n let count = `${render(this.field, { aliases, escape, prefix })}/$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.filter<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(this.field.clone(), values);\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: Readonly<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 static count<T extends object>(\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: Field.factory<Readonly<Required<T>>>(),\n e: () => new CountExpression<T>(),\n },\n current\n ) as CountExpression<T>;\n }\n\n private _add(node: Renderable): CountExpression<T> {\n this._children.push(node);\n return this;\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[] | undefined;\n escape?: boolean | undefined;\n prefix?: string | undefined;\n } = {}): string {\n let content = this._children\n .map((n) => n.render({ aliases, escape, prefix }))\n .join(`,`);\n return content;\n }\n\n clone() {\n return new CountExpression({\n children: this._children.map((c) => c.clone()),\n });\n }\n\n field<F extends Object>(\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: Field.factory<Readonly<Required<F>>>(),\n f: countField,\n });\n return this._add(countField);\n }\n}\n","import type { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport { CountExpression, CountField } from './count';\nimport {\n Field,\n functions,\n Grouping,\n ODataFunctions,\n ODataOperators,\n operators,\n Renderable,\n syntax,\n} from './syntax';\n\nexport type FilterConnector = 'and' | 'or';\n\nexport type FilterExpressionBuilder<T> = {\n t: Readonly<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 static filter<T extends object>(\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 t: Field.factory<Readonly<Required<T>>>(),\n e: (connector: FilterConnector = 'and') =>\n new FilterExpression<T>({ connector }),\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 return {\n children: this._children.map((c) => c.toJSON()),\n connector: this._connector,\n negated: this._negated,\n };\n }\n\n connector() {\n return this._connector;\n }\n\n negated() {\n return this._negated;\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n } = {}): string {\n let content = this._children\n .map((n) => n.render({ aliases, escape, prefix }))\n .join(` ${this._connector} `);\n if (this._negated) {\n content = `not (${content})`;\n }\n return content;\n }\n\n clone() {\n return new FilterExpression({\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(new Grouping(exp));\n } else {\n children.push(exp);\n }\n }\n }\n if (\n node instanceof FilterExpression &&\n (node.connector() === connector || node.length() === 1)\n ) {\n children = [...children, ...node.children()];\n } else {\n children.push(new Grouping(node));\n }\n this._connector = connector;\n this._children = children;\n } else if (\n node instanceof FilterExpression &&\n !node.negated() &&\n (node.connector() === connector || node.length() === 1)\n ) {\n this._children = [...this._children, ...node.children()];\n } else {\n this._children.push(\n node instanceof FilterExpression && !node.negated()\n ? new Grouping(node)\n : node\n );\n }\n return this;\n }\n\n or(exp: FilterExpression<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?: boolean) {\n return this._add(operators.eq(left, right, normalize));\n }\n\n ne(left: any, right: any, normalize?: boolean) {\n return this._add(operators.ne(left, right, normalize));\n }\n\n gt(left: any, right: any, normalize?: boolean) {\n return this._add(operators.gt(left, right, normalize));\n }\n\n ge(left: any, right: any, normalize?: boolean) {\n return this._add(operators.ge(left, right, normalize));\n }\n\n lt(left: any, right: any, normalize?: boolean) {\n return this._add(operators.lt(left, right, normalize));\n }\n\n le(left: any, right: any, normalize?: boolean) {\n return this._add(operators.le(left, right, normalize));\n }\n\n has(left: any, right: any, normalize?: boolean) {\n return this._add(operators.has(left, right, normalize));\n }\n\n in(left: any, right: any, normalize?: boolean) {\n return this._add(operators.in(left, right, normalize));\n }\n\n contains(left: any, right: any, normalize?: boolean) {\n return this._add(functions.contains(left, right, normalize));\n }\n\n startsWith(left: any, right: any, normalize?: boolean) {\n return this._add(functions.startsWith(left, right, normalize));\n }\n\n endsWith(left: any, right: any, normalize?: boolean) {\n return this._add(functions.endsWith(left, right, normalize));\n }\n\n any<N extends object>(\n left: N[],\n opts?: (e: {\n e: (connector?: FilterConnector) => FilterExpression<N>;\n t: N;\n }) => FilterExpression<N>,\n alias?: string\n ): FilterExpression<F> {\n let exp = undefined;\n if (opts !== undefined) {\n exp = opts({\n t: Field.factory<Readonly<Required<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 extends object>(\n left: N[],\n opts: (e: {\n t: N;\n e: (connector?: FilterConnector) => FilterExpression<N>;\n }) => FilterExpression<N>,\n alias?: string\n ): FilterExpression<F> {\n const exp = opts({\n t: Field.factory<Readonly<Required<N>>>(),\n e: (connector: FilterConnector = 'and') =>\n new FilterExpression<N>({ connector }),\n }) as FilterExpression<N>;\n return this._add(syntax.all(left, exp, alias));\n }\n\n count<N extends object>(\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 type { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport { render, Field, Renderable } from './syntax';\n\nexport class OrderByField implements Renderable {\n constructor(protected field: Renderable, protected order: 'asc' | 'desc') {}\n\n get [Symbol.toStringTag]() {\n return 'OrderByField';\n }\n\n toJSON() {\n return {\n field: this.field.toJSON(),\n order: this.order,\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n return `${render(this.field, { aliases, escape, prefix })} ${this.order}`;\n }\n\n clone() {\n return new OrderByField(this.field.clone(), this.order);\n }\n}\n\nexport type OrderByExpressionBuilder<T> = {\n t: Readonly<Required<T>>;\n e: () => OrderByExpression<T>;\n};\nexport class OrderByExpression<T> extends Expression<T> {\n constructor({\n children,\n }: {\n children?: Renderable[];\n } = {}) {\n super({ children });\n }\n\n static orderBy<T extends object>(\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: Field.factory<Readonly<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 render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[] | undefined;\n escape?: boolean | undefined;\n prefix?: string | undefined;\n } = {}): string {\n let content = this._children\n .map((n) => n.render({ aliases, escape, prefix }))\n .join(`,`);\n return content;\n }\n\n clone() {\n return new OrderByExpression({\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 { Types } from '../../../utils';\nimport type { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport { render, Grouping, Renderable } from './syntax';\n\nexport type SearchConnector = 'AND' | 'OR';\n\nexport class SearchTerm implements Renderable {\n constructor(protected value: string) {}\n\n get [Symbol.toStringTag]() {\n return 'SearchTerm';\n }\n\n toJSON() {\n return {\n $type: Types.rawType(this),\n value: this.value,\n };\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n return `${render(this.value, { aliases, escape, prefix })}`;\n }\n\n clone() {\n return new SearchTerm(this.value);\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 static search<T extends object>(\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(new Grouping(exp));\n } else {\n children.push(exp);\n }\n }\n }\n if (\n node instanceof SearchExpression &&\n (node.connector() === connector || node.length() === 1)\n ) {\n children = [...children, ...node.children()];\n } else {\n children.push(new Grouping(node));\n }\n this._connector = connector;\n this._children = children;\n } else if (\n node instanceof SearchExpression &&\n !node.negated() &&\n (node.connector() === connector || node.length() === 1)\n ) {\n this._children = [...this._children, ...node.children()];\n } else {\n this._children.push(\n node instanceof SearchExpression && !node.negated()\n ? new Grouping(node)\n : node\n );\n }\n return this;\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[] | undefined;\n escape?: boolean | undefined;\n prefix?: string | undefined;\n } = {}): string {\n let content = this._children\n .map((n) => n.render({ aliases, escape, prefix }))\n .join(` ${this._connector} `);\n return content;\n }\n\n clone() {\n return new SearchExpression({\n children: this._children.map((c) => c.clone()),\n connector: this._connector,\n negated: this._negated,\n });\n }\n\n override toJSON() {\n return {\n children: this._children.map((c) => c.toJSON()),\n connector: this._connector,\n negated: this._negated,\n };\n }\n\n connector() {\n return this._connector;\n }\n\n negated() {\n return this._negated;\n }\n\n or(exp: SearchExpression<T>): SearchExpression<T> {\n return this._add(exp, 'OR');\n }\n\n and(exp: SearchExpression<T>): SearchExpression<T> {\n return this._add(exp, 'AND');\n }\n\n not(exp: SearchExpression<T>): SearchExpression<T> {\n const notExp = new SearchExpression<T>({\n children: exp.children(),\n connector: exp.connector(),\n negated: true,\n });\n\n return this._add(notExp, this._connector);\n }\n\n term(value: any) {\n return this._add(new SearchTerm(value));\n }\n}\n","import type { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport { Field, Renderable } from './syntax';\n\nexport type SelectExpressionBuilder<T> = {\n t: Readonly<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 static select<T extends object>(\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: Field.factory<Readonly<Required<T>>>(),\n e: () => new SelectExpression<T>(),\n },\n current\n ) as SelectExpression<T>;\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[] | undefined;\n escape?: boolean | undefined;\n prefix?: string | undefined;\n } = {}): string {\n return this._children\n .map((n) => n.render({ aliases, escape, prefix }))\n .join(',');\n }\n\n clone() {\n return new SelectExpression({\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","import { QueryOption } from '../../../types';\nimport { Objects, Types } from '../../../utils';\nimport type { QueryCustomType } from '../builder';\nimport { Expression } from './base';\nimport { FilterExpression, FilterExpressionBuilder } from './filter';\nimport { OrderByExpression, OrderByExpressionBuilder } from './orderby';\nimport { SearchExpression, SearchExpressionBuilder } from './search';\nimport { SelectExpression, SelectExpressionBuilder } from './select';\nimport { Field, render, Renderable } 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 }: {\n aliases?: QueryCustomType[];\n escape?: boolean;\n prefix?: string;\n }): string {\n const params: { [key: string]: string } = [\n QueryOption.select,\n QueryOption.expand,\n QueryOption.filter,\n QueryOption.search,\n QueryOption.orderBy,\n QueryOption.skip,\n QueryOption.top,\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({ aliases, prefix, escape });\n }\n return Object.assign(acc, { [key]: value });\n }, {});\n let expand = `${render(this.field, { aliases, escape, prefix })}`;\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(this.field.clone(), values);\n }\n\n select<T extends object>(\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.select<T>(opts, this.values[QueryOption.select])\n );\n }\n\n expand<T extends object>(\n opts: (\n builder: ExpandExpressionBuilder<T>,\n current?: ExpandExpression<T>\n ) => ExpandExpression<T>\n ) {\n return this.option(\n QueryOption.expand,\n ExpandExpression.expand<T>(opts, this.values[QueryOption.expand])\n );\n }\n\n filter<T extends object>(\n opts: (\n builder: FilterExpressionBuilder<T>,\n current?: FilterExpression<T>\n ) => FilterExpression<T>\n ) {\n return this.option(\n QueryOption.filter,\n FilterExpression.filter<T>(opts, this.values[QueryOption.filter])\n );\n }\n\n search<T extends object>(\n opts: (builder: SearchExpressionBuilder<T>) => SearchExpression<T>\n ) {\n return this.option(\n QueryOption.search,\n SearchExpression.search<T>(opts, this.values[QueryOption.search])\n );\n }\n\n orderBy<T extends object>(\n opts: (\n builder: OrderByExpressionBuilder<T>,\n current?: OrderByExpression<T>\n ) => OrderByExpression<T>\n ) {\n return this.option(\n QueryOption.orderBy,\n OrderByExpression.orderBy<T>(opts, this.values[QueryOption.orderBy])\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 // 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 ExpandExpressionBuilder<T> = {\n t: Readonly<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 static expand<T extends object>(\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: Field.factory<Readonly<Required<T>>>(),\n e: () => new ExpandExpression<T>(),\n },\n current\n ) as ExpandExpression<T>;\n }\n\n render({\n aliases,\n escape,\n prefix,\n }: {\n aliases?: QueryCustomType[] | undefined;\n escape?: boolean | undefined;\n prefix?: string | undefined;\n } = {}): string {\n return this._children\n .map((n) => n.render({ aliases, escape, prefix }))\n .join(',');\n }\n\n clone() {\n return new ExpandExpression({\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>(field: F, opts?: (e: ExpandField<F>) => void): ExpandExpression<F> {\n let node = new ExpandField<F>(field);\n if (opts !== undefined) opts(node);\n return this._add(node);\n }\n}\n","import { 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} from './expressions';\nimport type { ODataQueryArguments, ODataQueryOptions } from './options';\n\nexport class ODataQueryOptionHandler<T> {\n constructor(private o: Map<QueryOption, any>, private n: QueryOption) {}\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}\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(opts: SelectExpressionBuilder<T>): 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.select(\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(opts: ExpandExpressionBuilder<T>): 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.expand(\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.compute(\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 $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.search(\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.filter(\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.orderBy(\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 /**\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.options.remove(QueryOption.skiptoken);\n }\n }\n if (skip !== undefined) {\n if (skip !== null) {\n this.skip(skip);\n } else {\n this.options.remove(QueryOption.skip);\n }\n }\n if (top !== undefined) {\n if (top !== null) {\n this.top(top);\n } else {\n this.options.remove(QueryOption.top);\n }\n }\n }\n\n /**\n * Shortcut for clear pagination by unset $top, $skip, $skiptoken.\n */\n clearPaging() {\n this.options.remove(QueryOption.skip);\n this.options.remove(QueryOption.top);\n this.options.remove(QueryOption.skiptoken);\n }\n\n /**\n * Shortcut for clear query.\n */\n clear() {\n this.options.clear();\n }\n\n /**\n * Retrun the query.\n */\n query() {\n return this.options.toQueryArguments();\n }\n\n /**\n * Apply the given query options to the current query.\n * @param query The query to be applied.\n */\n apply(query: ODataQueryArguments<T>) {\n if (query.select !== undefined) {\n if (query.select instanceof SelectExpression) {\n this.options.expression(\n QueryOption.select,\n query.select as SelectExpression<T>\n );\n } else if (query.select !== null) {\n this.options.option(QueryOption.select, query.select);\n } else {\n this.options.remove(QueryOption.select);\n }\n }\n if (query.expand !== undefined) {\n if (query.expand instanceof ExpandExpression) {\n this.options.expression(\n QueryOption.expand,\n query.expand as ExpandExpression<T>\n );\n } else if (query.expand !== null) {\n this.options.option(QueryOption.expand, query.expand);\n } else {\n this.options.remove(QueryOption.expand);\n }\n }\n if (query.compute !== undefined) {\n if (query.compute instanceof ComputeExpression) {\n this.options.expression(\n QueryOption.compute,\n query.compute as ComputeExpression<T>\n );\n } else if (query.compute !== null) {\n this.options.option(QueryOption.compute, query.compute);\n } else {\n this.options.remove(QueryOption.compute);\n }\n }\n if (query.transform !== undefined) {\n if (query.transform !== null) {\n this.options.option(QueryOption.transform, query.transform);\n } else {\n this.options.remove(QueryOption.transform);\n }\n }\n if (query.search !== undefined) {\n if (query.search instanceof SearchExpression) {\n this.options.expression(\n QueryOption.search,\n query.search as SearchExpression<T>\n );\n } else if (query.search !== null) {\n this.options.option(QueryOption.search, query.search);\n } else {\n this.options.remove(QueryOption.search);\n }\n }\n if (query.filter !== undefined) {\n if (query.filter instanceof FilterExpression) {\n this.options.expression(\n QueryOption.filter,\n query.filter as FilterExpression<T>\n );\n } else if (query.filter !== null) {\n this.options.option(QueryOption.filter, query.filter);\n } else {\n this.options.remove(QueryOption.filter);\n }\n }\n if (query.orderBy !== undefined) {\n if (query.orderBy instanceof OrderByExpression) {\n this.options.expression(\n QueryOption.orderBy,\n query.orderBy as OrderByExpression<T>\n );\n } else if (query.orderBy !== null) {\n this.options.option(QueryOption.orderBy, query.orderBy);\n } else {\n this.options.remove(QueryOption.orderBy);\n }\n }\n this.paging(query);\n }\n}\n","import { QueryOption } from '../../types';\nimport { Objects, Types } from '../../utils';\nimport {\n buildPathAndQuery,\n Expand,\n Filter,\n OrderBy,\n QueryCustomType,\n Select,\n Transform,\n} from './builder';\nimport {\n ComputeExpression,\n Expression,\n FilterExpression,\n OrderByExpression,\n SearchExpression,\n} from './expressions';\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.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\nexport class ODataQueryOptions<T> {\n values: Map<QueryOption, any>;\n\n constructor(values?: Map<QueryOption, any> | { [name: string]: any }) {\n this.values =\n values instanceof Map\n ? values\n : new Map(Object.entries(values || {}) as Array<[QueryOption, any]>);\n }\n\n // Params\n pathAndParams(escape: boolean = false): [string, { [name: string]: any }] {\n let aliases: QueryCustomType[] = [];\n let options = [\n QueryOption.select,\n QueryOption.filter,\n QueryOption.search,\n QueryOption.compute,\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) => !Types.isEmpty(this.values.get(key)))\n .reduce((acc, key) => {\n let value = this.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 ? v.render({ aliases })\n : v\n )\n : (value as Expression<T>).render({ aliases });\n }\n return Object.assign(acc, { [key]: value });\n }, {});\n\n return buildPathAndQuery<any>({ ...options, aliases, escape });\n }\n\n toString(): string {\n const [path, params] = this.pathAndParams();\n return (\n path +\n Object.entries(params)\n .filter(([, value]) => !Types.isEmpty(value))\n .map(([key, value]) => `${key}=${value}`)\n .join('&')\n );\n }\n\n toJSON() {\n return [...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 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 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 [...this.values.keys()]\n .filter((k) => keys.indexOf(k) !== -1)\n .forEach((key) => {\n this.values.delete(key);\n });\n }\n\n keep(...keys: QueryOption[]) {\n [...this.values.keys()]\n .filter((k) => keys.indexOf(k) === -1)\n .forEach((key) => {\n 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 type { ODataPathSegments, ODataSegment } from './segments';\n\nexport class SegmentHandler {\n constructor(private segment: ODataSegment) {}\n get name() {\n return this.segment.name;\n }\n type(value?: string) {\n if (value !== undefined) this.segment.type = value;\n return this.segment.type;\n }\n path(value?: string) {\n if (value !== undefined) this.segment.path = value;\n return this.segment.path;\n }\n key<T>(value?: EntityKey<T>) {\n if (value !== undefined) this.segment.key = value;\n return this.segment.key as EntityKey<T>;\n }\n hasKey() {\n return !Types.isEmpty(this.segment.key);\n }\n clearKey() {\n delete this.segment.key;\n }\n parameters<T>(value?: T) {\n if (value !== undefined) this.segment.parameters = value;\n return this.segment.parameters as T;\n }\n hasParameters() {\n return !Types.isEmpty(this.segment.parameters);\n }\n clearParameters() {\n delete this.segment.parameters;\n }\n}\n\nexport class ODataPathSegmentsHandler<T> {\n constructor(protected segments: ODataPathSegments) {}\n entitySet() {\n return this.segments.get(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 { 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 type?: string;\n key?: any;\n parameters?: any;\n};\n\nfunction pathSegmentsBuilder(\n segment: ODataSegment,\n escape: boolean = false\n): [string, { [name: string]: any }] {\n if (segment.name === 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 return [path, params];\n } else {\n let key = segment.key;\n // HACK: Check guid string\n if (\n typeof key === 'string' &&\n /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(\n key\n )\n ) {\n key = raw(key);\n }\n let [path, params] = key ? buildPathAndQuery({ key, escape }) : ['', {}];\n return [segment.path + path, params];\n }\n}\n\nexport class ODataPathSegments {\n private _segments: ODataSegment[];\n\n constructor(segments?: ODataSegment[]) {\n this._segments = segments || [];\n }\n\n pathAndParams(escape: boolean = false): [string, { [name: string]: any }] {\n const result = this._segments.reduce(\n (acc, segment) => {\n const [path, params] = pathSegmentsBuilder(segment, escape);\n acc.paths.push(path);\n acc.params = Object.assign(acc.params, params);\n return acc;\n },\n { paths: [] as string[], params: {} as { [name: string]: any } }\n );\n return [result.paths.join(PATH_SEPARATOR), result.params];\n }\n\n types({ key = false }: { key?: boolean } = {}): string[] {\n return this.segments({ key })\n .map((s) => s.type())\n .filter((t) => t !== undefined) as string[];\n }\n\n keys(values?: (EntityKey<any> | undefined)[]) {\n const segments = this.segments({ key: true });\n if (values !== undefined) {\n segments.forEach((segment, index) => {\n const key = values[index];\n if (key === undefined) {\n segment.clearKey();\n } else {\n segment.key(key);\n }\n });\n }\n return segments.map((s) => s.key() as EntityKey<any> | undefined);\n }\n\n toString(): string {\n const [path, params] = this.pathAndParams();\n return (\n path +\n Object.entries(params)\n .filter(([, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('&')\n );\n }\n\n toJSON() {\n return this._segments.map((s) => {\n let json = {\n name: s.name as string,\n path: s.path,\n } as any;\n if (s.type !== undefined) json.type = s.type;\n if (s.key !== undefined) json.key = s.key;\n if (s.parameters !== undefined) json.parameters = s.parameters;\n return json;\n });\n }\n\n clone() {\n const segments = Objects.clone(this._segments);\n return new ODataPathSegments(segments);\n }\n\n find(predicate: (segment: ODataSegment) => boolean) {\n //Backward Find\n return [...this._segments].reverse().find(predicate);\n }\n\n segments({ key = false }: { key?: boolean } = {}) {\n let segments = [...this._segments];\n if (key)\n segments = segments.filter(\n (s) =>\n [\n 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 IF_MATCH_HEADER,\n IF_NONE_MATCH_HEADER,\n PREFER,\n TEXT_PLAIN,\n} from '../constants';\nimport { 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?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\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) this._body = this.resource.serialize(this._body);\n\n this.withCredentials =\n init.withCredentials === undefined\n ? this.api.options.withCredentials\n : init.withCredentials;\n this.fetchPolicy = init.fetchPolicy || this.api.options.fetchPolicy;\n this.bodyQueryOptions = [\n ...(this.api.options.bodyQueryOptions || []),\n ...(init.bodyQueryOptions || []),\n ];\n\n // The Path and Params from resource\n const [resourcePath, resourceParams] = this.resource.pathAndParams();\n this._path = resourcePath;\n\n //#region Headers\n const customHeaders: { [name: string]: string | string[] } = {};\n if (typeof init.etag === 'string') {\n if (\n this.api.options.etag.ifMatch &&\n ['PUT', 'PATCH', 'DELETE'].indexOf(this._method) !== -1\n )\n customHeaders[IF_MATCH_HEADER] = init.etag;\n else if (\n this.api.options.etag.ifNoneMatch &&\n ['GET'].indexOf(this._method) !== -1\n )\n customHeaders[IF_NONE_MATCH_HEADER] = init.etag;\n }\n\n const accept = [];\n // Metadata\n if (this.api.options.accept?.metadata !== undefined)\n accept.push(`odata.metadata=${this.api.options.accept?.metadata}`);\n // IEEE754\n if (this.api.options.accept?.ieee754Compatible !== undefined)\n accept.push(\n `IEEE754Compatible=${this.api.options.accept?.ieee754Compatible}`\n );\n // streaming\n if (this.api.options.accept?.streaming !== undefined)\n accept.push(`streaming=${this.api.options.accept?.streaming}`);\n // ExponentialDecimals\n if (this.api.options.accept?.exponentialDecimals !== undefined)\n accept.push(\n `ExponentialDecimals=${this.api.options.accept?.exponentialDecimals}`\n );\n if (accept.length > 0)\n customHeaders[ACCEPT] = [\n `application/json;${accept.join(';')}`,\n 'text/plain',\n '*/*',\n ];\n\n const prefer = [];\n // Return\n if (\n this.api.options.prefer?.return !== undefined &&\n ['POST', 'PUT', 'PATCH'].indexOf(this._method) !== -1\n )\n prefer.push(`return=${this.api.options.prefer?.return}`);\n // MaxPageSize\n if (\n this.api.options.prefer?.maxPageSize !== undefined &&\n ['GET'].indexOf(this._method) !== -1\n )\n prefer.push(`odata.maxpagesize=${this.api.options.prefer?.maxPageSize}`);\n // Annotations\n if (\n this.api.options.prefer?.includeAnnotations !== undefined &&\n ['GET'].indexOf(this._method) !== -1\n )\n prefer.push(\n `odata.include-annotations=${this.api.options.prefer?.includeAnnotations}`\n );\n // 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 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 {\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: { [key: string]: any }): any;\n entities(value: { [key: string]: any }): any;\n property(value: { [key: string]: any }): any;\n annotations(value: { [key: string]: any }): Map<string, any>;\n attributes(value: { [key: string]: any }, metadata: ODataMetadataType): any;\n\n context(annots: Map<string, any> | { [key: string]: any }): ODataContext;\n id(annots: Map<string, any> | { [key: string]: any }): string | undefined;\n etag(annots: Map<string, any> | { [key: string]: any }): string | undefined;\n type(annots: Map<string, any> | { [key: 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(): { [key: string]: string };\n}\n\nconst ODataVersionBaseHelper = <any>{\n entity(data: { [key: string]: any }) {\n return data;\n },\n entities(data: { [key: string]: any }) {\n return data[this.VALUE];\n },\n property(data: { [key: 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> | { [key: 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> | { [key: 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> | { [key: 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: { [key: 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: { [key: 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 {[key: string]: any} or targeted property if the type of the {[key: string]: any} or targeted property cannot be heuristically determined\n ODATA_TYPE: '@odata.type',\n //odata.nextLink: the next link of a collection with partial results\n ODATA_NEXTLINK: '@odata.nextLink',\n //odata.deltaLink: the delta link for obtaining changes to the result, if requested\n ODATA_DELTALINK: '@odata.deltaLink',\n //odata.readLink: the link used to read the entity, if the edit link cannot be used to read the entity\n ODATA_READLINK: '@odata.readLink',\n //odata.editLink: the link used to edit/update the entity, if the entity is updatable and the odata.id does not represent a URL that can be used to edit the entity\n ODATA_EDITLINK: '@odata.editLink',\n //odata.associationLink: the link used to describe the relationship between this entity and related entities\n ODATA_ASSOCIATIONLINK: '@odata.associationLink',\n //odata.navigationLink: the link used to retrieve the values of a navigation property\n ODATA_NAVIGATIONLINK: '@odata.navigationLink',\n //Media entities and stream properties may in addition contain the following annotations:\n //odata.mediaEtag: the ETag of the stream, as appropriate\n ODATA_MEDIA_ETAG: '@odata.mediaEtag',\n //odata.mediaContentType: the content type of the stream\n ODATA_MEDIA_CONTENTTYPE: '@odata.mediaContentType',\n //odata.mediaReadLink: the link used to read the stream\n ODATA_MEDIA_READLINK: '@odata.mediaReadLink',\n //odata.mediaEditLink: the link used to edit/update the stream\n ODATA_MEDIA_EDITLINK: '@odata.mediaEditLink',\n //http://nb-mdp-dev01:57970/$metadata#recursos/$entity\n //http://nb-mdp-dev01:57970/$metadata#categorias\n //http://nb-mdp-dev01:57970/$metadata#juzgados\n //http://nb-mdp-dev01:57970/$metadata#Collection(SIU.Recursos.RecursoEntry)\n //http://nb-mdp-dev01:57970/$metadata#categorias/$entity\n //http://nb-mdp-dev01:57970/$metadata#categorias(children(children(children(children(children(children(children(children(children(children()))))))))))/$entity\n //http://nb-mdp-dev01:57970/$metadata#recursos/SIU.Documentos.Documento/$entity\n //http://nb-mdp-dev01:57970/$metadata#SIU.Api.Infrastructure.Storage.Backend.SiuUrls\n context(annots: Map<string, any> | { [key: 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_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> | { [key: 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_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: { [key: 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> | { [key: string]: any }) {\n let ctx: ODataContext = {};\n return ctx;\n },\n attributes(value: { [key: string]: any }, metadata: ODataMetadataType) {\n return value;\n },\n countParam() {\n return { [$INLINECOUNT]: 'allpages' };\n },\n },\n //#endregion\n};\n","import { AnnotationConfig } from '../types';\n\nexport class ODataAnnotation {\n term: string;\n string?: string;\n bool?: boolean;\n int?: number;\n permissions?: string[];\n properties?: string[];\n\n constructor(annot: AnnotationConfig) {\n this.term = annot.term;\n Object.assign(this, annot);\n }\n}\n\nexport class ODataAnnotatable {\n annotations: ODataAnnotation[];\n constructor(config: { annotations?: AnnotationConfig[] }) {\n this.annotations = (config.annotations || []).map(\n (annot) => new ODataAnnotation(annot)\n );\n }\n\n /**\n * Find an annotation inside the annotatable.\n * @param predicate Function that returns true if the annotation match.\n * @returns The annotation that matches the predicate.\n */\n findAnnotation(predicate: (annot: ODataAnnotation) => boolean) {\n return this.annotations.find(predicate);\n }\n\n /**\n * Find an annotation inside the annotatable and return its value.\n * @param term The term of the annotation to find.\n * @returns The value of the annotation.\n */\n annotatedValue<T>(term: string | RegExp): T | undefined {\n const reg = term instanceof RegExp ? term : new RegExp(`^${term}$`);\n const annot = this.findAnnotation((a) => reg.test(a.term));\n if (!annot) {\n return undefined;\n }\n return (annot.string ||\n annot.bool ||\n annot.int ||\n annot.permissions ||\n annot.properties) as any;\n }\n}\n","import { AnnotationConfig } from '../types';\nimport { Strings } from '../utils';\nimport { ODataAnnotatable } from './annotation';\nimport { ODataSchema } from './schema';\n\nexport class ODataSchemaElement extends ODataAnnotatable {\n name: string;\n schema: ODataSchema;\n\n constructor(\n config: { annotations?: AnnotationConfig[]; name: string },\n schema: ODataSchema\n ) {\n super(config);\n this.schema = schema;\n this.name = config.name;\n }\n\n get api() {\n return this.schema.api;\n }\n\n /**\n * Create a nicer looking title.\n * Titleize is meant for creating pretty output.\n * @param term The term of the annotation to find.\n * @returns The titleized string.\n */\n titleize(term?: string | RegExp): string {\n return (term && this.annotatedValue(term)) || Strings.titleCase(this.name);\n }\n\n /**\n * Returns a full type of the structured type including the namespace/alias.\n * @param alias Use the alias of the namespace instead of the namespace.\n * @returns The string representation of the type.\n */\n type({ alias = false }: { alias?: boolean } = {}) {\n return `${alias ? this.schema.alias : this.schema.namespace}.${this.name}`;\n }\n\n /**\n * Returns a boolean indicating if the structured type is of the given type.\n * @param type String representation of the type\n * @returns True if the callable is type of the given type\n */\n isTypeOf(type: string): boolean {\n var names = [`${this.schema.namespace}.${this.name}`];\n if (this.schema.alias) names.push(`${this.schema.alias}.${this.name}`);\n return names.indexOf(type) !== -1;\n }\n\n /**\n * Returns a boolean indicating if the structured type is a 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(schema: ODataSchemaElement): boolean {\n if (this.isTypeOf(schema.type())) 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(schema: ODataSchemaElement): boolean {\n if (this.isTypeOf(schema.type())) return true;\n return false;\n }\n}\n","//https://github.com/niklasvh/base64-arraybuffer\nconst chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const ArrayBuffers = {\n toArrayBuffer(v: string): ArrayBuffer {\n var bufferLength = v.length * 0.75,\n len = v.length,\n i,\n p = 0,\n encoded1,\n encoded2,\n encoded3,\n encoded4;\n\n if (v[v.length - 1] === '=') {\n bufferLength--;\n if (v[v.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[v.charCodeAt(i)];\n encoded2 = lookup[v.charCodeAt(i + 1)];\n encoded3 = lookup[v.charCodeAt(i + 2)];\n encoded4 = lookup[v.charCodeAt(i + 3)];\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return arraybuffer;\n },\n toString(v: ArrayBuffer): string {\n var bytes = new Uint8Array(v),\n i,\n len = bytes.length,\n base64 = '';\n\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n },\n};\n","import { raw } from '../../resources/query';\nimport { 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) => _e(v, options))\n : _e(value, options);\n },\n});\n\nconst Identity = (v: any) => v;\nconst toNumber = (v: any) => Number(v);\nconst toString = (v: any) => v.toString();\nconst toBoolean = (v: any) => Boolean(v);\nconst toDate = (v: any) => new Date(v);\n\nexport const EDM_PARSERS: { [type: string]: 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 (v: any, o: StructuredTypeFieldOptions) => {\n if (typeof v === 'string' && o.ieee754Compatible) {\n return parseFloat(v);\n }\n return v;\n },\n (v: number, o: StructuredTypeFieldOptions) => {\n if (o.ieee754Compatible) {\n 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 Parser,\n FieldParser,\n} from '../../types';\nimport { Enums } from '../../utils';\nimport { ODataAnnotatable } from '../annotation';\n\nexport class ODataEnumTypeFieldParser<E> extends ODataAnnotatable {\n name: string;\n value: E;\n\n constructor(name: string, field: EnumTypeFieldConfig<E>) {\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]: E } | { [value: number]: string };\n private _fields: ODataEnumTypeFieldParser<E>[];\n parserOptions?: ParserOptions;\n\n constructor(config: EnumTypeConfig<E>, 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({\n options,\n parserForType,\n findOptionsForType,\n }: {\n options: ParserOptions;\n parserForType: (type: string) => Parser<any>;\n findOptionsForType: (type: string) => any;\n }) {\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(value?: E): ODataEnumTypeFieldParser<E>[] {\n return [\n ...this._fields.filter(\n (f) => value === undefined || Boolean((<any>f.value) & (<any>value))\n ),\n ];\n }\n\n field(nameValue: string | E) {\n let 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 named ${String(name)}`);\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<E>) => 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 Enums.toValues<any>(this.members, value).reduce(\n (acc, v) => acc | v,\n 0\n ) as any;\n } else {\n return Enums.toValue<any>(this.members, value) as any;\n }\n }\n\n // Serialize\n serialize(value: E, 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 = Enums.toNames(this.members, value);\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 = Enums.toName(this.members, value);\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: E, 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 let property = <any>{\n title: this.name,\n type: 'string',\n };\n property.enum = this._fields.map((f) => f.name);\n return property;\n }\n\n validate(\n member: string | number,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}\n ): string[] | undefined {\n if (this.flags) {\n let members = Enums.toValues(this.members, member);\n return members.some((member) => !(member in this.members))\n ? ['mismatch']\n : undefined;\n } else {\n return !(member in this.members) ? ['mismatch'] : undefined;\n }\n }\n\n unpack(value: E): number[] {\n return Enums.toValues(this.members, value);\n }\n\n pack(value: number[]): E {\n return Enums.toValues(this.members, value).reduce(\n (acc, v) => acc | v,\n 0\n ) as any;\n }\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} 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 structuredType: 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 structuredType: ODataStructuredTypeParser<any>,\n field: StructuredTypeFieldConfig\n ) {\n super(field);\n this.name = name;\n this.structuredType = structuredType;\n this.type = field.type;\n this.parser = NONE_PARSER;\n this.referentials = (field.referentials || []).map(\n (referential) => new ODataReferential(referential)\n );\n this.default = field.default;\n this.maxLength = field.maxLength;\n this.nullable = field.nullable ?? true;\n this.collection = Boolean(field.collection);\n this.navigation = Boolean(field.navigation);\n this.precision = field.precision;\n this.scale = field.scale;\n }\n\n validate(\n value: any,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}\n ):\n | { [name: string]: any }\n | { [name: string]: any }[]\n | string[]\n | undefined {\n let errors;\n if (this.collection && Array.isArray(value)) {\n errors = value.map((v) => this.validate(v, { method, navigation })) as {\n [name: string]: any[];\n }[];\n } else if (\n (this.isStructuredType() &&\n typeof value === 'object' &&\n value !== null) ||\n (this.navigation && value !== undefined)\n ) {\n errors =\n this.structured().validate(value, { method, navigation }) ||\n ({} as { [name: string]: any[] });\n } else if (\n this.isEnumType() &&\n (typeof value === 'string' || typeof value === 'number')\n ) {\n errors = this.enum().validate(value, { method, navigation });\n } else {\n // IsEdmType\n const computed = this.annotatedValue<boolean>(COMPUTED);\n errors = [];\n if (\n !this.nullable &&\n (value === null || (value === undefined && method !== 'modify')) && // Is null or undefined without patch?\n !(computed && method === 'create') // Not (Is Computed field and create) ?\n ) {\n errors.push(`required`);\n }\n if (\n this.maxLength !== undefined &&\n typeof value === 'string' &&\n value.length > this.maxLength\n ) {\n errors.push(`maxlength`);\n }\n }\n return !Types.isEmpty(errors) ? errors : undefined;\n }\n\n //#region Deserialize\n private parse(\n parser: ODataStructuredTypeParser<T>,\n value: any,\n options?: 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 findOptionsForType,\n }: {\n options: ParserOptions;\n parserForType: (type: string) => Parser<any>;\n findOptionsForType: (type: string) => 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: 'object' } as any);\n\n if (\n [\n EdmType.String,\n EdmType.Date,\n EdmType.TimeOfDay,\n EdmType.DateTimeOffset,\n EdmType.Guid,\n EdmType.Binary,\n ].indexOf(this.type as EdmType) !== -1\n ) {\n schema.type = 'string';\n if (this.type === EdmType.Date) schema.format = 'date';\n else if (this.type === EdmType.TimeOfDay) schema.format = 'time';\n else if (this.type === EdmType.DateTimeOffset)\n schema.format = 'date-time';\n else if (this.type === EdmType.Guid)\n schema.pattern =\n '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$';\n else if (this.type === EdmType.Binary) schema.contentEncoding = 'base64';\n else if (this.type === EdmType.String && this.maxLength)\n schema.maxLength = this.maxLength;\n } else if (\n [\n EdmType.Int64,\n EdmType.Int32,\n EdmType.Int16,\n EdmType.Byte,\n EdmType.SByte,\n ].indexOf(this.type as EdmType) !== -1\n ) {\n //TODO: Range\n schema.type = 'integer';\n } else if (\n [EdmType.Decimal, EdmType.Double].indexOf(this.type as EdmType) !== -1\n ) {\n schema.type = 'number';\n } else if ([EdmType.Boolean].indexOf(this.type as EdmType) !== -1) {\n schema.type = 'boolean';\n }\n if (this.default) schema.default = this.default;\n if (this.nullable) schema.type = [schema.type, 'null'];\n if (this.collection)\n schema = {\n type: 'array',\n items: schema,\n additionalItems: false,\n };\n return schema;\n }\n //#endregion\n\n isKey() {\n return (\n this.structuredType\n .keys({ include_parents: true })\n ?.find((k) => k.name === this.name) !== undefined\n );\n }\n\n hasReferentials() {\n return this.referentials.length !== 0;\n }\n\n isEdmType() {\n return this.type.startsWith('Edm.');\n }\n\n isEnumType() {\n return this.parser instanceof ODataEnumTypeParser;\n }\n\n enum() {\n if (!this.isEnumType()) throw new Error('Field are not EnumType');\n return this.parser as ODataEnumTypeParser<T>;\n }\n\n isStructuredType() {\n return this.parser instanceof ODataStructuredTypeParser;\n }\n\n structured() {\n if (!this.isStructuredType())\n throw new Error('Field are not StrucuturedType');\n return this.parser as ODataStructuredTypeParser<T>;\n }\n\n 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(\n config: StructuredTypeConfig<T>,\n namespace: string,\n alias?: string\n ) {\n super(config);\n this.name = config.name;\n this.base = config.base;\n this.open = config.open || false;\n this.namespace = namespace;\n this.alias = alias;\n if (Array.isArray(config.keys))\n this._keys = config.keys.map((key) => new ODataEntityTypeKey(key));\n 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 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 && value[f.name] !== undefined && value[f.name] !== null\n );\n return {\n ...value,\n ...fields.reduce(\n (acc, f) => ({\n ...acc,\n [f.name]: f.deserialize(value[f.name], parserOptions),\n }),\n {}\n ),\n };\n }\n\n // Serialize\n serialize(value: 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 findOptionsForType,\n }: {\n options: ParserOptions;\n parserForType: (type: string) => Parser<any>;\n findOptionsForType: (type: string) => 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) =>\n f.configure({ options, parserForType, findOptionsForType })\n );\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 /**\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_parents = true,\n include_navigation = false,\n include_etag = true,\n options,\n }: {\n include_parents?: boolean;\n include_navigation?: boolean;\n include_etag?: boolean;\n options?: ParserOptions;\n } = {}\n ): Partial<T> {\n const parserOptions = options || this.parserOptions;\n const names = this.fields({ include_parents, include_navigation }).map(\n (f) => f.name\n );\n return Object.keys(attrs)\n .filter(\n (key) =>\n names.indexOf(key) !== -1 ||\n (key ==\n ODataHelper[parserOptions?.version || DEFAULT_VERSION].ODATA_ETAG &&\n include_etag)\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.structured()\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.structured().defaults()\n : f.default;\n return Types.isEmpty(value) ? acc : { ...acc, [f.name]: value };\n }, {}),\n };\n }\n\n // Json Schema\n toJsonSchema(options: JsonSchemaOptions<T> = {}) {\n let schema: any = {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: `${this.namespace}.${this.name}`,\n title: this.titleize(DESCRIPTION),\n description: this.annotatedValue(LONG_DESCRIPTION),\n type: 'object',\n properties: {},\n required: [],\n };\n const fields = this.fields({\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 Parameter,\n Parser,\n} from '../../types';\nimport { ODataEnumTypeParser } from './enum-type';\nimport { ODataStructuredTypeParser } from './structured-type';\n\nexport class ODataParameterParser<T> {\n name: string;\n type: string;\n private parser: Parser<T>;\n collection?: boolean;\n nullable?: boolean;\n parserOptions?: ParserOptions;\n\n constructor(name: string, parameter: Parameter) {\n this.name = name;\n this.type = parameter.type;\n this.parser = NONE_PARSER;\n this.nullable = parameter.nullable;\n this.collection = parameter.collection;\n }\n\n serialize(value: T, options?: 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 findOptionsForType,\n }: {\n options: ParserOptions;\n parserForType: (type: string) => Parser<any>;\n findOptionsForType: (type: string) => 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 enum() {\n if (!this.isEnumType()) throw new Error('Field are not EnumType');\n return this.parser as ODataEnumTypeParser<T>;\n }\n\n isStructuredType() {\n return this.parser instanceof ODataStructuredTypeParser;\n }\n\n structured() {\n if (!this.isStructuredType())\n throw new Error('Field are not StrucuturedType');\n return this.parser as ODataStructuredTypeParser<T>;\n }\n\n 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 Parameter)\n );\n }\n\n isTypeOf(type: string) {\n var names = [`${this.namespace}.${this.name}`];\n if (this.alias) names.push(`${this.alias}.${this.name}`);\n return names.indexOf(type) !== -1;\n }\n\n // Deserialize\n deserialize(value: any, options?: 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 findOptionsForType,\n }: {\n options: ParserOptions;\n parserForType: (type: string) => Parser<any>;\n findOptionsForType: (type: string) => any;\n }) {\n this.parserOptions = options;\n if (this.return)\n this.parser = parserForType(this.return.type) || NONE_PARSER;\n this.parameters.forEach((p) =>\n p.configure({ options, parserForType, findOptionsForType })\n );\n }\n\n binding() {\n return this.parameters.find((p) => p.name === CALLABLE_BINDING_PARAMETER);\n }\n}\n","import { CallableConfig, ParserOptions, Parser } from '../types';\nimport { ODataSchemaElement } from './element';\nimport { ODataCallableParser } from './parsers';\nimport { ODataSchema } from './schema';\n\nexport class ODataCallable<R> extends ODataSchemaElement {\n entitySetPath?: string;\n bound?: boolean;\n composable?: boolean;\n parser: ODataCallableParser<R>;\n\n constructor(config: CallableConfig, schema: ODataSchema) {\n super(config, schema);\n this.entitySetPath = config.entitySetPath;\n this.bound = config.bound;\n this.composable = config.composable;\n this.parser = new ODataCallableParser(\n config,\n schema.namespace,\n schema.alias\n );\n }\n\n path() {\n let path: string;\n if (this.entitySetPath) path = this.entitySetPath;\n else if (this.bound) path = `${this.schema.namespace}.${this.name}`;\n else\n path = this.parser.return\n ? this.api.findEntitySetForType(this.parser.return.type)?.name ||\n this.name\n : this.name;\n return path;\n }\n\n configure({\n options,\n parserForType,\n findOptionsForType,\n }: {\n options: ParserOptions;\n parserForType: (type: string) => Parser<any>;\n findOptionsForType: (type: string) => any;\n }) {\n this.parser.configure({\n options,\n parserForType,\n findOptionsForType,\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","import { EntitySetConfig } from '../types';\nimport { ODataSchemaElement } from './element';\nimport { ODataSchema } from './schema';\n\nexport class ODataEntitySet extends ODataSchemaElement {\n entityType: string;\n service: { new (...params: any[]): any };\n constructor(config: EntitySetConfig, schema: ODataSchema) {\n super(config, schema);\n this.entityType = config.entityType;\n this.service = config.service;\n }\n}\n","import { EntityContainerConfig } from '../types';\nimport { ODataSchemaElement } from './element';\nimport { ODataEntitySet } from './entity-set';\nimport { ODataSchema } from './schema';\n\nexport class ODataEntityContainer extends ODataSchemaElement {\n entitySets: ODataEntitySet[];\n\n constructor(config: EntityContainerConfig, schema: ODataSchema) {\n super(config, schema);\n this.entitySets = (config.entitySets || []).map(\n (config) => new ODataEntitySet(config, schema)\n );\n }\n}\n","import { EnumTypeConfig, Parser, ParserOptions } from '../types';\nimport { ODataSchemaElement } from './element';\nimport { ODataEnumTypeFieldParser, ODataEnumTypeParser } from './parsers';\nimport { ODataSchema } from './schema';\n\nexport class ODataEnumType<E> extends ODataSchemaElement {\n parser: ODataEnumTypeParser<E>;\n members: { [name: string]: E } | { [value: number]: string };\n constructor(config: EnumTypeConfig<E>, schema: ODataSchema) {\n super(config, schema);\n this.members = config.members;\n this.parser = new ODataEnumTypeParser<E>(\n config,\n schema.namespace,\n schema.alias\n );\n }\n\n configure({\n options,\n parserForType,\n findOptionsForType,\n }: {\n options: ParserOptions;\n parserForType: (type: string) => Parser<any>;\n findOptionsForType: (type: string) => any;\n }) {\n this.parser.configure({ options, parserForType, findOptionsForType });\n }\n\n /**\n * Returns the fields of the enum type.\n * @returns The fields of the enum type.\n */\n fields(value?: E): ODataEnumTypeFieldParser<E>[] {\n return this.parser.fields(value);\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(enu: string | E) {\n return this.parser.field(enu);\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<E>) => 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: E, 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: E, options?: ParserOptions): any {\n return this.parser.encode(value, options);\n }\n\n unpack(value: E) {\n return this.parser.unpack(value);\n }\n\n pack(value: number[]) {\n return this.parser.pack(value);\n }\n}\n","import { ODataCollection } from '../models';\nimport { ODataModel } from '../models/model';\nimport {\n Parser,\n ParserOptions,\n StructuredTypeConfig,\n StructuredTypeFieldConfig,\n} from '../types';\nimport { ODataSchemaElement } from './element';\nimport {\n JsonSchemaOptions,\n ODataEntityTypeKey,\n ODataStructuredTypeFieldParser,\n ODataStructuredTypeParser,\n} from './parsers';\nimport { ODataSchema } from './schema';\n\nexport class ODataStructuredType<T> extends ODataSchemaElement {\n base?: string;\n open: boolean;\n parent?: ODataStructuredType<any>;\n children: ODataStructuredType<any>[] = [];\n model?: typeof ODataModel;\n collection?: typeof ODataCollection;\n parser: ODataStructuredTypeParser<T>;\n\n constructor(config: StructuredTypeConfig<T>, schema: ODataSchema) {\n super(config, schema);\n this.base = config.base;\n this.open = config.open || false;\n this.parser = new ODataStructuredTypeParser(\n config,\n schema.namespace,\n schema.alias\n );\n this.model = config.model as typeof ODataModel;\n this.collection = config.collection as typeof ODataCollection;\n if (this.model !== undefined) {\n const options = this.model.hasOwnProperty('options')\n ? this.model.options\n : { fields: {} };\n this.model.buildMeta<T>({ options, schema: this });\n }\n if (this.collection !== undefined) {\n this.collection.model = this.model;\n }\n }\n\n configure({\n options,\n parserForType,\n findOptionsForType,\n }: {\n options: ParserOptions;\n parserForType: (type: string) => Parser<any>;\n findOptionsForType: (type: string) => any;\n }) {\n if (this.base) {\n const parent = this.api.findStructuredTypeForType(\n this.base\n ) as ODataStructuredType<any>;\n parent.children.push(this);\n this.parent = parent;\n }\n this.parser.configure({\n options,\n parserForType,\n findOptionsForType,\n });\n if (this.model !== undefined && this.model.options !== null) {\n this.model.meta.configure({\n options,\n parserForType,\n findOptionsForType,\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.open;\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 /**\n * Find a parent schema of the structured type for the given field.\n * @param field Field that belongs to the structured type\n * @returns The schema of the field\n */\n findSchemaForField<E>(field: ODataStructuredTypeFieldParser<any>) {\n return this.findParentSchema(\n (p) =>\n p\n .fields({ include_parents: false, include_navigation: true })\n .find((f) => f === field) !== undefined\n ) as ODataStructuredType<E>;\n }\n\n /**\n * Picks the fields from attributes.\n * @param attrs\n * @param include_parents Include the parent fields\n * @param include_navigation Include the navigation fields\n * @param include_etag Include the etag field\n * @returns The picked fields\n */\n pick(\n attrs: { [name: string]: any },\n {\n include_parents = true,\n include_navigation = false,\n include_etag = true,\n }: {\n include_parents?: boolean;\n include_navigation?: boolean;\n include_etag?: boolean;\n } = {}\n ): Partial<T> {\n return this.parser.pick(attrs, {\n include_etag,\n include_navigation,\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 { Parser, ParserOptions, SchemaConfig } from '../types';\nimport { OData } from '../utils/odata';\nimport { ODataAnnotatable } from './annotation';\nimport { ODataCallable } from './callable';\nimport { ODataEntityContainer } from './entity-container';\nimport { ODataEntitySet } from './entity-set';\nimport { ODataEnumType } from './enum-type';\nimport { ODataStructuredType } from './structured-type';\n\nexport class ODataSchema extends ODataAnnotatable {\n api: ODataApi;\n namespace: string;\n alias?: string;\n enums: ODataEnumType<any>[];\n entities: ODataStructuredType<any>[];\n callables: ODataCallable<any>[];\n containers: ODataEntityContainer[];\n\n constructor(config: SchemaConfig, api: ODataApi) {\n super(config);\n this.api = api;\n this.namespace = config.namespace;\n this.alias = config.alias;\n this.enums = (config.enums || []).map(\n (config) => new ODataEnumType(config, this)\n );\n this.entities = (config.entities || []).map(\n (config) => new ODataStructuredType(config, this)\n );\n this.callables = OData.mergeCallableParameters(config.callables || []).map(\n (config) => new ODataCallable(config, this)\n );\n this.containers = (config.containers || []).map(\n (config) => new ODataEntityContainer(config, this)\n );\n }\n\n isNamespaceOf(type: string) {\n return (\n type.startsWith(this.namespace) ||\n (this.alias && type.startsWith(this.alias))\n );\n }\n\n get entitySets() {\n return this.containers.reduce(\n (acc, container) => [...acc, ...container.entitySets],\n [] as ODataEntitySet[]\n );\n }\n\n //#region Find for Type\n public findEnumTypeForType<T>(type: string) {\n return this.enums.find((e) => e.isTypeOf(type)) as\n | ODataEnumType<T>\n | undefined;\n }\n\n public findStructuredTypeForType<T>(type: string) {\n return this.entities.find((e) => e.isTypeOf(type)) as\n | ODataStructuredType<T>\n | undefined;\n }\n\n public findCallableForType<T>(type: string, bindingType?: string) {\n const bindingStructuredType =\n bindingType !== undefined\n ? this.api.findStructuredTypeForType<any>(bindingType)\n : undefined;\n return this.callables.find((c) => {\n const isCallableType = c.isTypeOf(type);\n const callableBindingType = c.binding()?.type;\n const callableBindingStructuredType =\n callableBindingType !== undefined\n ? this.api.findStructuredTypeForType(callableBindingType)\n : undefined;\n return (\n isCallableType &&\n (!bindingStructuredType ||\n (callableBindingStructuredType &&\n bindingStructuredType.isSubtypeOf(callableBindingStructuredType)))\n );\n }) as ODataCallable<T> | undefined;\n }\n\n public findEntitySetForType(type: string) {\n return this.entitySets.find((e) => e.isTypeOf(type));\n }\n //#endregion\n\n configure({\n options,\n parserForType,\n findOptionsForType,\n }: {\n options: ParserOptions;\n parserForType: (type: string) => Parser<any>;\n findOptionsForType: (type: string) => any;\n }) {\n // Configure Enums\n this.enums.forEach((enu) =>\n enu.configure({ options, parserForType, findOptionsForType })\n );\n // Configure Entities\n this.entities.forEach((config) =>\n config.configure({ options, parserForType, findOptionsForType })\n );\n // Configure callables\n this.callables.forEach((callable) =>\n callable.configure({ options, parserForType, findOptionsForType })\n );\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 { ODataCollection, ODataModel } from '../models';\nimport { ODataStructuredType } from '../schema';\nimport { ODataSchemaElement } from '../schema/element';\nimport { ParserOptions, Parser, QueryOption, PathSegment } from '../types';\nimport { Objects, Types } from '../utils/index';\nimport { ODataPathSegments, ODataPathSegmentsHandler } from './path';\nimport {\n isQueryCustomType,\n ODataQueryOptions,\n ODataQueryOptionsHandler,\n QueryCustomType,\n} from './query';\nimport {\n ODataEntitiesAnnotations,\n ODataEntityAnnotations,\n} from './responses/index';\nimport { ODataOptions } from './types';\n\nexport type EntityKey<T> =\n | {\n readonly [P in keyof T]?: T[P];\n }\n | QueryCustomType\n | string\n | number;\n\nexport class ODataResource<T> {\n // VARIABLES\n public api: ODataApi;\n public schema?: ODataSchemaElement;\n protected pathSegments: ODataPathSegments;\n protected queryOptions: ODataQueryOptions<T>;\n constructor(\n api: ODataApi,\n {\n segments,\n query,\n schema,\n }: {\n segments?: ODataPathSegments;\n query?: ODataQueryOptions<T>;\n schema?: ODataSchemaElement;\n } = {}\n ) {\n this.api = api;\n this.pathSegments = segments || new ODataPathSegments();\n this.queryOptions = query || new ODataQueryOptions();\n this.schema = schema;\n }\n\n /**\n * @returns string The type of the resource\n */\n type() {\n return this.pathSegments.last()?.type();\n }\n\n /**\n * @returns string The type of the return\n */\n returnType() {\n return this.pathSegments.last()?.type();\n }\n\n /**\n * @returns string All covered types of the resource\n */\n types(): string[] {\n return this.pathSegments.types();\n }\n\n /**\n * @returns boolean The resource has key ?\n */\n hasKey() {\n return Boolean(this.pathSegments.last({ key: true })?.hasKey());\n }\n\n 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<M extends ODataModel<T>>(\n entity?: Partial<T> | { [name: string]: any },\n { annots }: { annots?: ODataEntityAnnotations<T> } = {}\n ): M {\n const reset = annots !== undefined;\n let resource: ODataResource<T> = this as ODataResource<T>;\n const type = annots?.type || this.returnType();\n if (type === undefined) throw Error('');\n const 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.apply(this.queryOptions.toQueryArguments()));\n }\n return new ModelType(entity, { resource, annots, reset }) as M;\n }\n\n asCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n entities?: Partial<T>[] | { [name: string]: any }[],\n { annots }: { annots?: ODataEntitiesAnnotations<T> } = {}\n ): C {\n const reset = annots !== undefined;\n let resource: ODataResource<T> = this as ODataResource<T>;\n const type = annots?.type || this.returnType();\n if (type === undefined) throw Error('');\n const CollectionType = this.api.collectionForType(type);\n let path = annots?.entitySet;\n if (path !== undefined) {\n resource = this.api.entitySet<T>(path);\n resource.query((q) => q.apply(this.queryOptions.toQueryArguments()));\n }\n return new CollectionType(entities, { resource, annots, reset }) as C;\n }\n //#endregion\n\n isSubtypeOf(other: ODataResource<any>) {\n return (\n this.schema !== undefined &&\n other.schema !== undefined &&\n this.schema?.isSubtypeOf(other.schema)\n );\n }\n\n isSupertypeOf(other: ODataResource<any>) {\n return (\n this.schema !== undefined &&\n other.schema !== undefined &&\n this.schema?.isSupertypeOf(other.schema)\n );\n }\n\n isEqualTo(other: ODataResource<any>, test?: 'path' | 'params') {\n const [selfPath, selfParams] = this.pathAndParams();\n const [otherPath, otherParams] = other.pathAndParams();\n return test === 'path'\n ? otherPath === selfPath\n : test === 'params'\n ? Types.isEqual(selfParams, otherParams)\n : otherPath === selfPath && Types.isEqual(selfParams, otherParams);\n }\n\n pathAndParams(escape: boolean = false): [string, { [name: string]: any }] {\n const [spath, sparams] = this.pathSegments.pathAndParams(escape);\n const [, qparams] = this.queryOptions.pathAndParams(escape);\n\n return [spath, { ...sparams, ...qparams }];\n }\n\n endpointUrl(params: boolean = true) {\n if (params) {\n return `${this.api.serviceRootUrl}${this}`;\n } else {\n let [path] = this.pathAndParams();\n return `${this.api.serviceRootUrl}${path}`;\n }\n }\n\n toString(): string {\n let [path, params] = this.pathAndParams();\n let queryString = Object.entries(params)\n .map((e) => `${e[0]}${VALUE_SEPARATOR}${e[1]}`)\n .join(PARAM_SEPARATOR);\n return queryString ? `${path}${QUERY_SEPARATOR}${queryString}` : path;\n }\n\n clone(): ODataResource<T> {\n const Ctor = this.constructor as typeof ODataResource;\n return new Ctor(this.api, {\n schema: this.schema,\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n }\n\n private __parser(\n value: any,\n options?: ParserOptions,\n type?: 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 (this.schema !== undefined && 'parser' in this.schema) {\n // Parser from resource schema\n return (<any>this.schema).parser as Parser<T> | undefined;\n } else if (type !== undefined) {\n // Parser from resource type\n return this.api.parserForType<T>(type);\n }\n return undefined;\n }\n\n deserialize(value: any, options?: ParserOptions): any {\n const resourceType = this.returnType();\n const _d = (value: any, options?: ParserOptions) => {\n const parser = this.__parser(value, options, resourceType);\n return parser !== undefined && 'deserialize' in parser\n ? parser.deserialize(value, options)\n : value;\n };\n return Array.isArray(value)\n ? value.map((v) => _d(v, options))\n : _d(value, options);\n }\n\n serialize(value: any, options?: ParserOptions): any {\n const resourceType = this.type();\n const _s = (value: any, options?: ParserOptions) => {\n const parser = this.__parser(value, options, resourceType);\n return parser !== undefined && 'serialize' in parser\n ? parser.serialize(value, options)\n : value;\n };\n return Array.isArray(value)\n ? value.map((v) => _s(v, options))\n : _s(value, options);\n }\n\n encode(value: any, options?: ParserOptions): any {\n const resourceType = this.type();\n const _e = (value: any, options?: ParserOptions) => {\n const parser = this.__parser(value, options, resourceType);\n return parser !== undefined && 'encode' in parser\n ? parser.encode(value, options)\n : value;\n };\n return Array.isArray(value)\n ? value.map((v) => _e(v, options))\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 }\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 /*\n const type = this.type();\n const schema = type ? this.api.findStructuredTypeForType<T>(type) : undefined;\n */\n f(\n new ODataPathSegmentsHandler<T>(this.pathSegments),\n this.schema instanceof ODataStructuredType ? this.schema : 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 /*\n const type = this.returnType();\n const schema = type ? this.api.findStructuredTypeForType<T>(type) : undefined;\n */\n f(\n new ODataQueryOptionsHandler<T>(this.queryOptions),\n this.schema instanceof ODataStructuredType ? this.schema : undefined\n );\n return this;\n }\n\n static resolveKey<T>(\n value: any,\n schema?: ODataStructuredType<T>\n ): EntityKey<T> | undefined {\n if (isQueryCustomType(value)) {\n return value;\n } else if (Types.isPlainObject(value)) {\n return schema instanceof ODataStructuredType\n ? schema.resolveKey(value)\n : Objects.resolveKey(value);\n }\n return value as EntityKey<T> | undefined;\n }\n\n protected resolveKey(value: any): EntityKey<T> | undefined {\n return ODataResource.resolveKey<T>(\n value,\n this.schema as ODataStructuredType<T>\n );\n }\n //#endregion\n\n 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 { ODataCallable } from '../../schema/callable';\nimport { PathSegment } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity, ODataProperty } from '../responses';\nimport {\n ODataEntitiesOptions,\n ODataEntityOptions,\n ODataOptions,\n ODataPropertyOptions,\n} from './options';\n\nexport class ODataActionResource<P, R> extends ODataResource<R> {\n //#region Factory\n static factory<P, R>(\n api: ODataApi,\n {\n path,\n schema,\n segments,\n query,\n }: {\n path?: string;\n schema?: ODataCallable<R>;\n segments?: ODataPathSegments;\n query?: ODataQueryOptions<R>;\n }\n ) {\n segments = segments || new ODataPathSegments();\n path = schema !== undefined ? schema.path() : path;\n if (path === undefined)\n throw new Error(`ODataActionResource: path is required`);\n\n const segment = segments.add(PathSegment.action, path);\n if (schema !== undefined) segment.type(schema.type());\n return new ODataActionResource<P, R>(api, {\n segments,\n query,\n schema,\n });\n }\n\n static fromResource<P, R>(resource: ODataResource<any>, path: string) {\n const baseType = resource.type();\n const actionSchema = resource.api.findCallableForType<R>(path, baseType);\n const bindingType = actionSchema?.binding()?.type;\n\n const action = ODataActionResource.factory<P, R>(resource.api, {\n path,\n schema: actionSchema,\n segments: resource.cloneSegments(),\n });\n\n // Switch entitySet to binding type if available\n if (bindingType !== undefined && bindingType !== baseType) {\n let entitySet = resource.api.findEntitySetForType(bindingType);\n if (entitySet !== undefined) {\n action.segment((s) => s.entitySet().path(entitySet!.name));\n }\n }\n\n return action;\n }\n\n override clone(): ODataActionResource<P, R> {\n return super.clone() as ODataActionResource<P, R>;\n }\n //#endregion\n\n override returnType() {\n return this.schema instanceof ODataCallable\n ? this.schema.parser.return?.type\n : undefined;\n }\n\n //#region Requests\n protected override post(\n params: P | null,\n options?: ODataEntityOptions & ODataEntitiesOptions & ODataPropertyOptions\n ): Observable<any> {\n return super.post(params, options);\n }\n //#endregion\n\n //#region Shortcuts\n /**\n * Execute the action\n * @param params Parameters to be sent to the action\n * @param options Options for the request\n */\n call(\n params: P | null,\n options?: ODataEntityOptions\n ): Observable<ODataEntity<R>>;\n call(\n params: P | null,\n options?: ODataEntitiesOptions\n ): Observable<ODataEntities<R>>;\n call(\n params: P | null,\n options?: ODataPropertyOptions\n ): Observable<ODataProperty<R>>;\n call(\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(\n params: P | null,\n options: ODataOptions = {}\n ): Observable<R | null> {\n return this.call(params, { responseType: 'property', ...options }).pipe(\n map(({ property }) => property)\n );\n }\n\n /**\n * Execute the action and return the result as a entity\n * @param params Parameters for the action\n * @param options Options for the request\n * @returns Observable of the result of the action\n */\n callEntity(\n params: P | null,\n options: ODataOptions = {}\n ): Observable<R | null> {\n return this.call(params, { responseType: 'entity', ...options }).pipe(\n map(({ entity }) => entity)\n );\n }\n\n /**\n * Execute the action and return the result as a model\n * @param params Parameters for the action\n * @param options Options for the request\n * @returns Observable of the result of the action\n */\n callModel<M extends ODataModel<R>>(\n params: P | null,\n options: ODataOptions = {}\n ): Observable<M | null> {\n return this.call(params, { responseType: 'entity', ...options }).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots }) : null\n )\n );\n }\n\n /**\n * Execute the action and return the result as a entities\n * @param params Parameters for the action\n * @param options Options for the request\n * @returns Observable of the result of the action\n */\n callEntities(\n params: P | null,\n options: ODataOptions = {}\n ): Observable<R[] | null> {\n return this.call(params, { responseType: 'entities', ...options }).pipe(\n map(({ entities }) => entities)\n );\n }\n\n /**\n * Execute the action and return the result as a collection\n * @param params Parameters for the action\n * @param options Options for the request\n * @returns Observable of the result of the action\n */\n callCollection<M extends ODataModel<R>, C extends ODataCollection<R, M>>(\n params: P | null,\n options: ODataOptions = {}\n ): Observable<C | null> {\n return this.call(params, { responseType: 'entities', ...options }).pipe(\n map(({ entities, annots }) =>\n entities ? this.asCollection<M, C>(entities, { annots }) : 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","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 {\n concatMap,\n firstValueFrom,\n map,\n Observable,\n of,\n Subject,\n switchMap,\n} 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 { ODataResponse } from '../responses';\nimport { ODataOptions } from './options';\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() {\n //TODO: Relative or Absolute url ?\n let res = [\n `${this.request.method} ${this.request.pathWithParams} ${HTTP11}`,\n ];\n if (\n this.request.method === 'POST' ||\n this.request.method === 'PATCH' ||\n this.request.method === 'PUT'\n ) {\n res.push(`${CONTENT_TYPE}: ${APPLICATION_JSON}`);\n }\n\n if (this.request.headers instanceof HttpHeaders) {\n let headers = this.request.headers;\n res = [\n ...res,\n ...headers\n .keys()\n .map((key) => `${key}: ${(headers.getAll(key) || []).join(',')}`),\n ];\n }\n\n 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() {\n //TODO: Relative or Absolute url ?\n let res: { [name: string]: any } = {\n id: this.id,\n method: this.request.method,\n url: this.request.pathWithParams,\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(this._requests),\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 Arrays.zip(this._requests, this._responses).forEach((tuple) => {\n if (!tuple[0].isStopped) 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(bound, this._requests),\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[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 );\n }\n\n json() {\n return ODataBatchResource.buildJsonBody(this._requests);\n }\n\n static buildLegacyBody(\n batchBoundary: string,\n requests: ODataBatchRequest<any>[]\n ): string {\n let res = [];\n let changesetBoundary: string | null = null;\n let changesetId = 1;\n\n for (const 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()}`);\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(requests: ODataBatchRequest<any>[]): Object {\n return {\n requests: requests.map((request) => request.toJson()),\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 { 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 segments.add(PathSegment.count, $COUNT).type('Edm.Int32');\n query?.keep(QueryOption.filter, QueryOption.search);\n return new ODataCountResource<T>(api, { segments, query });\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 { ODataCallable } from '../../schema/callable';\nimport { PathSegment } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity, ODataProperty } from '../responses';\nimport {\n ODataEntitiesOptions,\n ODataEntityOptions,\n ODataOptions,\n ODataPropertyOptions,\n} from './options';\n\nexport class ODataFunctionResource<P, R> extends ODataResource<R> {\n //#region Factory\n static factory<P, R>(\n api: ODataApi,\n {\n path,\n schema,\n segments,\n query,\n }: {\n path?: string;\n schema?: ODataCallable<R>;\n segments?: ODataPathSegments;\n query?: ODataQueryOptions<R>;\n }\n ) {\n segments = segments || new ODataPathSegments();\n path = schema !== undefined ? schema.path() : path;\n if (path === undefined)\n throw new Error(`ODataActionResource: path is required`);\n\n const segment = segments.add(PathSegment.function, path);\n if (schema !== undefined) segment.type(schema.type());\n return new ODataFunctionResource<P, R>(api, {\n segments,\n query,\n schema,\n });\n }\n\n static fromResource<P, R>(resource: ODataResource<any>, path: string) {\n const baseType = resource.type();\n const schema = resource.api.findCallableForType<R>(path, baseType);\n const bindingType = schema?.binding()?.type;\n\n const func = ODataFunctionResource.factory<P, R>(resource.api, {\n path,\n schema,\n segments: resource.cloneSegments(),\n });\n\n // Switch entitySet to binding type if available\n if (bindingType !== undefined && bindingType !== baseType) {\n let entitySet = resource.api.findEntitySetForType(bindingType);\n if (entitySet !== undefined) {\n func.segment((s) => s.entitySet().path(entitySet!.name));\n }\n }\n\n return func;\n }\n\n override clone(): ODataFunctionResource<P, R> {\n return super.clone() as ODataFunctionResource<P, R>;\n }\n //#endregion\n\n override returnType() {\n return this.schema instanceof ODataCallable\n ? this.schema.parser.return?.type\n : undefined;\n }\n\n override pathAndParams(\n escape: boolean = false\n ): [string, { [name: string]: any }] {\n let [path, params] = super.pathAndParams(escape);\n\n if (\n path.endsWith('()') &&\n this.api.options.nonParenthesisForEmptyParameterFunction\n ) {\n path = path.substring(0, path.length - 2);\n }\n\n return [path, params];\n }\n\n parameters(params: P | null, { alias }: { alias?: boolean } = {}) {\n let parameters = params !== null ? this.encode(params) : null;\n if (alias && parameters !== null) {\n this.query((q) => {\n parameters = Object.entries(parameters).reduce((acc, [name, param]) => {\n return Object.assign(acc, { [name]: q.alias(param, name) });\n }, {});\n });\n }\n return this.clone().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<M extends ODataModel<R>>(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & ODataOptions = {}\n ): Observable<M | null> {\n return this.call(params, {\n responseType: 'entity',\n alias,\n ...options,\n }).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots }) : null\n )\n );\n }\n\n /**\n * Execute the function with the given parameters and return the result as a entities\n * @param params Parameters to be sent to the function\n * @param alias If true, the parameters will be send using aliases\n * @param options Options for the request\n * @returns Observable of the result of the function\n */\n callEntities(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & ODataOptions = {}\n ): Observable<R[] | null> {\n return this.call(params, {\n responseType: 'entities',\n alias,\n ...options,\n }).pipe(map(({ entities }) => entities));\n }\n\n /**\n * Execute the function with the given parameters and return the result as a collection\n * @param params Parameters to be sent to the function\n * @param alias If true, the parameters will be send using aliases\n * @param options Options for the request\n * @returns Observable of the result of the function\n */\n callCollection<M extends ODataModel<R>, C extends ODataCollection<R, M>>(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & ODataOptions = {}\n ): Observable<C | null> {\n return this.call(params, {\n responseType: 'entities',\n alias,\n ...options,\n }).pipe(\n map(({ entities, annots }) =>\n entities ? this.asCollection<M, C>(entities, { annots }) : 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 { ODataStructuredType } from '../../schema/structured-type';\nimport { PathSegment } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataOptions } from './options';\n\nexport class ODataValueResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<V>(\n api: ODataApi,\n {\n type,\n schema,\n segments,\n query,\n }: {\n type?: string;\n schema?: ODataStructuredType<V>;\n segments: ODataPathSegments;\n query?: ODataQueryOptions<V>;\n }\n ) {\n const baseType = type;\n const bindingType = schema?.type();\n\n const segment = segments.add(PathSegment.value, $VALUE);\n if (schema !== undefined) segment.type(schema.type());\n else if (type !== undefined) segment.type(type);\n\n query?.clear();\n const value = new ODataValueResource<V>(api, { segments, query, schema });\n\n // Switch entitySet to binding type if available\n if (bindingType !== undefined && bindingType !== baseType) {\n let entitySet = api.findEntitySetForType(bindingType);\n if (entitySet !== undefined) {\n value.segment((s) => s.entitySet().path(entitySet!.name));\n }\n }\n\n return value;\n }\n 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 { concatMap, expand, map, reduce, toArray } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataCollection, ODataModel } from '../../models';\nimport { ODataStructuredType } from '../../schema';\nimport { PathSegment, QueryOption } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport {\n ODataEntities,\n ODataEntitiesAnnotations,\n ODataEntity,\n ODataProperty,\n} from '../responses';\nimport {\n ODataEntitiesOptions,\n ODataEntityOptions,\n ODataOptions,\n ODataPropertyOptions,\n} from './options';\nimport { ODataValueResource } from './value';\n\nexport class ODataPropertyResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<P>(\n api: ODataApi,\n {\n path,\n type,\n schema,\n segments,\n query,\n }: {\n path: string;\n type?: string;\n schema?: ODataStructuredType<P>;\n segments: ODataPathSegments;\n query?: ODataQueryOptions<P>;\n }\n ) {\n const segment = segments.add(PathSegment.property, path);\n if (schema !== undefined) segment.type(schema.type());\n else if (type !== undefined) segment.type(type);\n\n query?.clear();\n return new ODataPropertyResource<P>(api, {\n segments,\n query,\n schema,\n });\n }\n\n static fromResource<N>(resource: ODataResource<any>, path: string) {\n const baseType = resource.type();\n let baseSchema = resource.schema as ODataStructuredType<any> | undefined;\n let fieldType: string | undefined;\n let fieldSchema: ODataStructuredType<N> | undefined;\n if (baseSchema !== undefined) {\n const field = baseSchema.field<N>(path);\n fieldType = field?.type;\n fieldSchema =\n fieldType !== undefined\n ? resource.api.findStructuredTypeForType(fieldType)\n : undefined;\n baseSchema =\n field !== undefined\n ? baseSchema.findSchemaForField<N>(field)\n : undefined;\n }\n\n const property = ODataPropertyResource.factory<N>(resource.api, {\n path,\n type: fieldType,\n schema: fieldSchema,\n segments: resource.cloneSegments(),\n query: resource.cloneQuery<N>(),\n });\n\n // Switch entitySet to binding type if available\n if (baseSchema !== undefined && baseSchema.type() !== baseType) {\n let entitySet = resource.api.findEntitySetForType(baseSchema.type());\n if (entitySet !== undefined) {\n property.segment((s) => s.entitySet().path(entitySet!.name));\n }\n }\n\n return property;\n }\n override clone(): ODataPropertyResource<T> {\n return super.clone() as ODataPropertyResource<T>;\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.findStructuredTypeForType<T>(types[index])\n )\n );\n property.segment((s) => s.keys(keys));\n return property;\n }\n\n value() {\n return ODataValueResource.factory<T>(this.api, {\n type: this.returnType(),\n schema: this.schema as ODataStructuredType<T>,\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n }\n\n /*\n navigationProperty<N>(path: string) {\n let schema: ODataStructuredType<N> | undefined;\n if (this.schema instanceof ODataStructuredType) {\n const field = this.schema.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 let type: string | undefined;\n let schema: ODataStructuredType<P> | undefined;\n if (this.schema instanceof ODataStructuredType) {\n const field = this.schema.field<any>(path as keyof T);\n type = field?.type;\n schema =\n field !== undefined\n ? this.schema.findSchemaForField<P>(field)\n : undefined;\n }\n return ODataPropertyResource.factory<P>(this.api, {\n path,\n type,\n schema,\n segments: this.cloneSegments(),\n query: this.cloneQuery<P>(),\n });\n }\n\n //#region Requests\n protected override get(\n options?: ODataEntityOptions & ODataEntitiesOptions & ODataPropertyOptions\n ): Observable<any> {\n return super.get(options);\n }\n //#endregion\n\n //#region Shortcuts\n /**\n * Fetch the property\n * @param options Options for the request\n * @return The entity / entities / property value\n */\n fetch(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<M extends ODataModel<T>>(\n options: ODataOptions = {}\n ): Observable<M | null> {\n return this.fetch({ responseType: 'entity', ...options }).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots }) : null\n )\n );\n }\n\n /**\n * Fetch the entities\n * @param options Options for the request\n * @returns The entities\n */\n fetchEntities(\n options: ODataOptions & { withCount?: boolean } = {}\n ): Observable<T[] | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities }) => entities)\n );\n }\n\n /**\n * Fetch the entities and return as collection\n * @param options Options for the request\n * @returns The collection\n */\n fetchCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n options: ODataOptions & { withCount?: boolean } = {}\n ): Observable<C | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities, annots }) =>\n entities ? this.asCollection<M, C>(entities, { annots }) : 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[0] || null : 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.clearPaging());\n let fetch = (opts?: {\n skip?: number;\n skiptoken?: string;\n top?: number;\n }): Observable<ODataEntities<T>> => {\n if (opts) {\n res.query((q) => q.paging(opts));\n }\n return res.fetch({ responseType: 'entities', ...options });\n };\n return fetch().pipe(\n expand(({ annots }) =>\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 { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity } from '../responses/types';\nimport { ODataEntityResource } from './entity';\nimport {\n ODataEntitiesOptions,\n ODataEntityOptions,\n ODataOptions,\n} from './options';\n\nexport class ODataReferenceResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<P>(\n api: ODataApi,\n {\n segments,\n query,\n }: { segments: ODataPathSegments; query?: ODataQueryOptions<P> }\n ) {\n segments.add(PathSegment.reference, $REF);\n query?.clear();\n return new ODataReferenceResource<P>(api, { segments, query });\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({ [ODATA_ID]: target.endpointUrl(false) }, options);\n }\n\n protected override put(\n target: ODataEntityResource<any>,\n options?: ODataOptions\n ): Observable<any> {\n return super.put({ [ODATA_ID]: target.endpointUrl(false) }, options);\n }\n\n protected override delete({\n etag,\n target,\n ...options\n }: {\n etag?: string;\n target?: ODataEntityResource<any>;\n } & ODataOptions = {}): Observable<any> {\n if (target) {\n options.params = { [$ID]: target.endpointUrl(false) };\n }\n return super.delete({ etag, ...options });\n }\n //#endregion\n\n //#region Shortcuts for collections\n /**\n * Add the given target to the collection.\n * @param target The target resource\n * @param options Options for the request\n * @returns Observable of the response\n */\n add(\n target: ODataEntityResource<any>,\n options?: ODataOptions\n ): Observable<any> {\n return this.post(target, options);\n }\n\n /**\n * Remove the given target from the collection.\n * @param target The target resource\n * @param options Options for the request\n * @returns Observable of the response\n */\n remove(\n target?: ODataEntityResource<any>,\n options?: ODataOptions\n ): Observable<any> {\n return this.delete({ target, ...options });\n }\n //#region\n\n //#region Shortcuts for single\n /**\n * Set the reference to the given target.\n * @param target The target resource\n * @param options Options for the request\n * @returns Observable of the response\n */\n set(\n target: ODataEntityResource<any>,\n options?: ODataOptions\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 { ODataCollection, ODataModel } from '../../models';\nimport { ODataStructuredType } from '../../schema';\nimport { PathSegment, QueryOption } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport {\n ODataEntities,\n ODataEntitiesAnnotations,\n ODataEntity,\n} from '../responses';\nimport { ODataCountResource } from './count';\nimport { ODataMediaResource } from './media';\nimport {\n ODataEntitiesOptions,\n ODataEntityOptions,\n ODataOptions,\n} from './options';\nimport { ODataPropertyResource } from './property';\nimport { ODataReferenceResource } from './reference';\n\n/**\n * OData Navigation Property Resource\n * https://www.odata.org/getting-started/advanced-tutorial/#containment\n * https://www.odata.org/getting-started/advanced-tutorial/#derived\n */\nexport class ODataNavigationPropertyResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<N>(\n api: ODataApi,\n {\n path,\n type,\n schema,\n segments,\n query,\n }: {\n path: string;\n type?: string;\n schema?: ODataStructuredType<N>;\n segments: ODataPathSegments;\n query?: ODataQueryOptions<N>;\n }\n ) {\n const segment = segments.add(PathSegment.navigationProperty, path);\n if (schema !== undefined) segment.type(schema.type());\n else if (type !== undefined) segment.type(type);\n query?.keep(QueryOption.format);\n return new ODataNavigationPropertyResource<N>(api, {\n segments,\n query,\n schema,\n });\n }\n\n static fromResource<N>(resource: ODataResource<any>, path: string) {\n const baseType = resource.type();\n let baseSchema = resource.schema as ODataStructuredType<any> | undefined;\n let fieldType: string | undefined;\n let fieldSchema: ODataStructuredType<N> | undefined;\n if (baseSchema !== undefined) {\n const field = baseSchema.field<N>(path);\n fieldType = field?.type;\n fieldSchema =\n fieldType !== undefined\n ? resource.api.findStructuredTypeForType(fieldType)\n : undefined;\n baseSchema =\n field !== undefined\n ? baseSchema.findSchemaForField<N>(field)\n : undefined;\n }\n\n const navigation = ODataNavigationPropertyResource.factory<N>(\n resource.api,\n {\n path,\n type: fieldType,\n schema: fieldSchema,\n segments: resource.cloneSegments(),\n query: resource.cloneQuery<N>(),\n }\n );\n\n // Switch entitySet to binding type if available\n if (baseSchema !== undefined && baseSchema.type() !== baseType) {\n let entitySet = resource.api.findEntitySetForType(baseSchema.type());\n if (entitySet !== undefined) {\n navigation.segment((s) => s.entitySet().path(entitySet!.name));\n }\n }\n\n return navigation;\n }\n override clone(): ODataNavigationPropertyResource<T> {\n return super.clone() as ODataNavigationPropertyResource<T>;\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.findStructuredTypeForType<T>(types[index])\n )\n );\n navigation.segment((s) => s.keys(keys));\n return navigation;\n }\n\n media() {\n return ODataMediaResource.factory<T>(this.api, {\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n }\n\n reference() {\n return ODataReferenceResource.factory<T>(this.api, {\n segments: this.cloneSegments(),\n });\n }\n\n navigationProperty<N>(path: string) {\n return ODataNavigationPropertyResource.fromResource<N>(this, path);\n }\n\n property<P>(path: string) {\n return ODataPropertyResource.fromResource<P>(this, path);\n }\n\n count() {\n return ODataCountResource.factory<T>(this.api, {\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n }\n\n cast<C>(type: string) {\n const baseSchema = this.schema as ODataStructuredType<T>;\n const castSchema = this.api.findStructuredTypeForType<C>(type);\n if (\n castSchema !== undefined &&\n baseSchema !== undefined &&\n !castSchema.isSubtypeOf(baseSchema)\n )\n throw new Error(`Cannot cast to ${type}`);\n const segments = this.cloneSegments();\n segments.add(PathSegment.type, type).type(type);\n return new ODataNavigationPropertyResource<C>(this.api, {\n segments,\n schema: castSchema,\n query: this.cloneQuery<C>(),\n });\n }\n\n //#region Requests\n protected override post(\n attrs: Partial<T>,\n options: ODataOptions = {}\n ): Observable<ODataEntity<T>> {\n return super.post(attrs, { responseType: 'entity', ...options });\n }\n\n protected override put(\n attrs: Partial<T>,\n options: ODataOptions = {}\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<M extends ODataModel<T>>(\n options: ODataOptions & {\n bodyQueryOptions?: QueryOption[];\n } = {}\n ): Observable<M | null> {\n return this.fetch({ responseType: 'entity', ...options }).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots }) : 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<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n options: ODataOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOption[];\n } = {}\n ): Observable<C | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities, annots }) =>\n entities ? this.asCollection<M, C>(entities, { annots }) : 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.clearPaging());\n let fetch = (opts?: {\n skip?: number;\n skiptoken?: string;\n top?: number;\n }): Observable<ODataEntities<T>> => {\n if (opts) {\n res.query((q) => q.paging(opts));\n }\n return res.fetch({ responseType: 'entities', ...options });\n };\n return fetch().pipe(\n expand(({ annots }) =>\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 return this.fetchMany(1, options).pipe(\n map(({ entities, annots }) => ({\n entity: 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 { ODataModel } from '../../models';\nimport { ODataStructuredType } from '../../schema/structured-type';\nimport { PathSegment, QueryOption } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntity } from '../responses/types';\nimport { ODataActionResource } from './action';\nimport { ODataFunctionResource } from './function';\nimport { ODataMediaResource } from './media';\nimport { ODataNavigationPropertyResource } from './navigation-property';\nimport { ODataOptions } from './options';\nimport { ODataPropertyResource } from './property';\n\nexport class ODataEntityResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<E>(\n api: ODataApi,\n {\n schema,\n segments,\n query,\n }: {\n schema?: ODataStructuredType<E>;\n segments: ODataPathSegments;\n query?: ODataQueryOptions<E>;\n }\n ) {\n query?.keep(QueryOption.expand, QueryOption.select, QueryOption.format);\n return new ODataEntityResource<E>(api, { segments, query, schema });\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.findStructuredTypeForType<T>(types[index])\n )\n );\n entity.segment((s) => s.keys(keys));\n return entity;\n }\n\n media() {\n return ODataMediaResource.factory<T>(this.api, {\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n }\n\n navigationProperty<N>(path: string) {\n return ODataNavigationPropertyResource.fromResource<N>(this, path);\n }\n\n property<P>(path: string) {\n return ODataPropertyResource.fromResource<P>(this, path);\n }\n\n action<P, R>(path: string) {\n return ODataActionResource.fromResource<P, R>(this, path);\n }\n\n function<P, R>(path: string) {\n return ODataFunctionResource.fromResource<P, R>(this, path);\n }\n\n cast<C>(type: string) {\n const baseSchema = this.schema as ODataStructuredType<T>;\n const castSchema = this.api.findStructuredTypeForType<C>(type);\n if (\n castSchema !== undefined &&\n baseSchema !== undefined &&\n !castSchema.isSubtypeOf(baseSchema)\n )\n throw new Error(`cast: Cannot cast to ${type}`);\n const segments = this.cloneSegments();\n segments.add(PathSegment.type, type).type(type);\n return new ODataEntityResource<C>(this.api, {\n segments,\n schema: castSchema,\n query: this.cloneQuery<C>(),\n });\n }\n\n //#region Requests\n protected override post(\n attrs: Partial<T>,\n options: ODataOptions = {}\n ): Observable<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<M extends ODataModel<T>>(\n options?: ODataOptions & {\n bodyQueryOptions?: QueryOption[];\n }\n ): Observable<M | null> {\n return this.fetch(options).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots }) : null\n )\n );\n }\n //#endregion\n}\n","import { concat, EMPTY, Observable } from 'rxjs';\nimport { concatMap, expand, map, reduce, toArray } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataCollection, ODataModel } from '../../models';\nimport { ODataStructuredType } from '../../schema/structured-type';\nimport { PathSegment, QueryOption } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport {\n ODataEntities,\n ODataEntitiesAnnotations,\n ODataEntity,\n} from '../responses';\nimport { ODataActionResource } from './action';\nimport { ODataCountResource } from './count';\nimport { ODataEntityResource } from './entity';\nimport { ODataFunctionResource } from './function';\nimport { ODataOptions } from './options';\n\nexport class ODataEntitySetResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<E>(\n api: ODataApi,\n {\n path,\n schema,\n query,\n }: {\n path: string;\n schema?: ODataStructuredType<E>;\n query?: ODataQueryOptions<E>;\n }\n ) {\n const segments = new ODataPathSegments();\n const segment = segments.add(PathSegment.entitySet, path);\n if (schema !== undefined) segment.type(schema.type());\n return new ODataEntitySetResource<E>(api, { segments, query, schema });\n }\n override clone(): ODataEntitySetResource<T> {\n return super.clone() as ODataEntitySetResource<T>;\n }\n //#endregion\n\n entity(key?: any) {\n const entity = ODataEntityResource.factory<T>(this.api, {\n schema: this.schema as ODataStructuredType<T>,\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n if (key !== undefined) {\n return entity.key(key);\n }\n return entity;\n }\n\n action<P, R>(path: string) {\n return ODataActionResource.fromResource<P, R>(this, path);\n }\n\n function<P, R>(path: string) {\n return ODataFunctionResource.fromResource<P, R>(this, path);\n }\n\n count() {\n return ODataCountResource.factory<T>(this.api, {\n segments: this.cloneSegments(),\n query: this.cloneQuery<T>(),\n });\n }\n\n cast<C>(type: string) {\n const baseSchema = this.schema as ODataStructuredType<T>;\n const castSchema = this.api.findStructuredTypeForType<C>(type);\n if (\n castSchema !== undefined &&\n baseSchema !== undefined &&\n !castSchema.isSubtypeOf(baseSchema)\n )\n throw new Error(`Cannot cast to ${type}`);\n const segments = this.cloneSegments();\n segments.add(PathSegment.type, type).type(type);\n return new ODataEntitySetResource<C>(this.api, {\n segments,\n schema: castSchema,\n query: this.cloneQuery<C>(),\n });\n }\n\n //#region Requests\n protected override post(\n attrs: Partial<T>,\n options?: ODataOptions\n ): Observable<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 ): Observable<{ entities: T[]; annots: ODataEntitiesAnnotations<T> }> {\n let res = this.clone();\n // Clean Paging\n res.query((q) => q.clearPaging());\n let fetch = (opts?: {\n skip?: number;\n skiptoken?: string;\n top?: number;\n }): Observable<ODataEntities<T>> => {\n if (opts) {\n res.query((q) => q.paging(opts));\n }\n return res.fetch(options);\n };\n return fetch().pipe(\n expand(({ annots }) =>\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 ): 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(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 return this.fetchMany(1, options).pipe(\n map(({ entities, annots }) => ({\n entity: 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 ): Observable<T[] | null> {\n return this.fetch(options).pipe(map(({ entities }) => entities));\n }\n\n fetchCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n options?: ODataOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOption[];\n }\n ): Observable<C | null> {\n return this.fetch(options).pipe(\n map(({ entities, annots }) =>\n entities ? this.asCollection<M, C>(entities, { annots }) : 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: { [key: string]: any },\n metadata: ODataMetadataType\n ): Partial<T> {\n return this.helper.attributes(data, metadata) as Partial<T>;\n }\n\n update(data: { [key: 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: { [key: string]: any }): { [key: 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: { [key: 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: { [key: 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?: { [key: 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: { [key: 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?: { [key: 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","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 { ODataEntities, ODataEntity, ODataProperty } from './types';\nimport {\n APPLICATION_JSON,\n ODATA_VERSION_HEADERS,\n CONTENT_TYPE,\n CACHE_CONTROL,\n LOCATION_HEADER,\n ETAG_HEADERS,\n ODATA_ENTITYID_HEADERS,\n PREFERENCE_APPLIED,\n} from '../../constants';\nimport { ODataApi } from '../../api';\nimport { ODataRequest } from '../request';\nimport { ODataResponseOptions } from './options';\nimport { Http } from '../../utils/http';\nimport { ODataContext } from '../../helper';\n\n/**\n * OData Response\n */\nexport class ODataResponse<T> extends HttpResponse<T> {\n readonly api: ODataApi;\n readonly resource: ODataResource<T>;\n\n constructor(init: {\n api: ODataApi;\n resource: ODataResource<T>;\n body: T | null;\n headers: HttpHeaders;\n status: number;\n statusText: string;\n url?: string;\n }) {\n super(init);\n this.api = init.api;\n this.resource = init.resource;\n }\n\n static fromHttpResponse<T>(req: ODataRequest<T>, res: HttpResponse<T>) {\n return new ODataResponse<T>({\n api: req.api,\n resource: req.resource,\n body: res.body,\n headers: res.headers,\n status: res.status,\n statusText: res.statusText,\n url: res.url || undefined,\n });\n }\n\n static fromJSON<T>(\n req: ODataRequest<T>,\n json: {\n body: T | null;\n headers: { [name: string]: string | string[] };\n status: number;\n statusText: string;\n url: string | null;\n }\n ) {\n return new ODataResponse<T>({\n api: req.api,\n resource: req.resource,\n body: json.body,\n headers: new HttpHeaders(json.headers),\n status: json.status,\n statusText: json.statusText,\n url: json.url || undefined,\n });\n }\n\n toJSON() {\n return {\n body: this.body,\n headers: this.headers\n .keys()\n .map((name) => ({ [name]: this.headers.getAll(name) || [] }))\n .reduce((acc, header) => Object.assign(acc, header), {}),\n status: this.status,\n statusText: this.statusText,\n url: this.url,\n };\n }\n\n private _options?: ODataResponseOptions;\n get options(): ODataResponseOptions {\n if (this._options === undefined) {\n this._options = new ODataResponseOptions(this.api.options.parserOptions);\n const contentType = this.headers.get(CONTENT_TYPE);\n if (contentType && contentType.indexOf(APPLICATION_JSON) !== -1) {\n const features = contentType\n .split(',')\n .find((p) => p.startsWith(APPLICATION_JSON)) as string;\n this._options.setFeatures(features);\n }\n const 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 { [key: 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","export class CsdlFunction {\n constructor(\n public name: string,\n public returnType: CsdlReturnType,\n public isBound?: boolean,\n public entitySetPath?: string,\n public isComposable?: boolean,\n public parameters?: CsdlParameter[]\n ) {}\n}\n\nexport class CsdlAction {\n constructor(\n public name: string,\n public returnType?: CsdlReturnType,\n public isBound?: boolean,\n public entitySetPath?: string,\n public parameters?: CsdlParameter[]\n ) {}\n}\n\nexport class CsdlFunctionImport {\n constructor(\n public name: string,\n public functionName: string,\n public entitySet?: string,\n public IncludeInServiceDocument?: boolean\n ) {}\n}\n\nexport class CsdlActionImport {\n constructor(\n public name: string,\n public action: string,\n public entitySet?: string\n ) {}\n}\n\nexport class CsdlParameter {\n constructor(\n public name: string,\n public type: string,\n public nullable?: boolean,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public srid?: string\n ) {}\n}\n\nexport class CsdlReturnType {\n constructor(\n public type: string,\n public nullable?: boolean,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public srid?: string\n ) {}\n}\n","export class CsdlAnnotable {\n constructor(public annotationList?: CsdlAnnotation[]) {}\n}\n\nexport class CsdlAnnotations extends CsdlAnnotable {\n constructor(\n public target: string,\n annotationList: CsdlAnnotation[],\n public qualifier?: string\n ) {\n super(annotationList);\n }\n}\n\nexport class CsdlAnnotation {\n constructor(public term: string, public qualifier?: string) {}\n}\n\nexport class CsdlTerm {\n constructor(\n public name: string,\n public type: string,\n public baseTerm?: string,\n public defaultValue?: string,\n public appliesTo?: string,\n public nullable?: boolean,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public srid?: string\n ) {}\n}\n","import {\n CsdlProperty,\n CsdlNavigationProperty,\n} from './csdl-structural-property';\n\nexport class CsdlStructuredType {\n constructor(\n public name: string,\n public properties?: CsdlProperty[],\n public navigationProperties?: CsdlNavigationProperty[],\n public baseType?: string,\n public openType?: boolean,\n public abstract?: boolean\n ) {}\n}\n\nexport class CsdlComplexType extends CsdlStructuredType {\n constructor(\n name: string,\n properties?: CsdlProperty[],\n navigationProperties?: CsdlNavigationProperty[],\n baseType?: string,\n openType?: boolean,\n abstract?: boolean\n ) {\n super(name, properties, navigationProperties, baseType, openType, abstract);\n }\n}\n\nexport class CsdlEntityType extends CsdlStructuredType {\n constructor(\n name: string,\n public key?: CsdlKey,\n properties?: CsdlProperty[],\n navigationProperties?: CsdlNavigationProperty[],\n baseType?: string,\n openType?: boolean,\n abstract?: boolean,\n public hasStream?: boolean\n ) {\n super(name, properties, navigationProperties, baseType, openType, abstract);\n }\n}\n\nexport class CsdlKey {\n constructor(public propertyRefs: CsdlPropertyRef[]) {}\n}\n\nexport class CsdlPropertyRef {\n constructor(public name: string, public alias?: string) {}\n}\n","export class CsdlEnumType {\n constructor(\n public name: string,\n public members: CsdlEnumMember[],\n public underlyingType?: string,\n public isFlags?: boolean\n ) {}\n}\n\nexport class CsdlEnumMember {\n constructor(public name: string, public value?: number) {}\n}\n","import { CsdlAnnotable, CsdlAnnotation } from './csdl-annotation';\n\nexport class CsdlReference extends CsdlAnnotable {\n constructor(\n public uri: string,\n public includes?: CsdlInclude[],\n public includeAnnotations?: CsdlIncludeAnnotations[],\n annotationList?: CsdlAnnotation[]\n ) {\n super(annotationList);\n }\n}\n\nexport class CsdlInclude {\n constructor(public namespace: string, public alias?: string) {}\n}\n\nexport class CsdlIncludeAnnotations {\n constructor(\n public termNamespace: string,\n public qualifier?: string,\n public targetNamespace?: string\n ) {}\n}\n","export abstract class CsdlStructuralProperty {\n constructor(\n public name: string,\n public type: string,\n public nullable?: boolean\n ) {}\n}\n\nexport class CsdlProperty extends CsdlStructuralProperty {\n constructor(\n name: string,\n type: string,\n nullable?: boolean,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public unicode?: boolean,\n public srid?: string,\n public defaultValue?: string\n ) {\n super(name, type, nullable);\n }\n}\n\nexport class CsdlNavigationProperty extends CsdlStructuralProperty {\n constructor(\n name: string,\n type: string,\n nullable?: boolean,\n public partner?: string,\n public containsTarget?: boolean,\n public referentialConstraints?: CsdlReferentialConstraint[],\n public onDelete?: CsdlOnDelete\n ) {\n super(name, type, nullable);\n }\n}\n\nexport class CsdlReferentialConstraint {\n constructor(public property: string, public referencedProperty: string) {}\n}\n\nexport class CsdlOnDelete {\n constructor(public action: string) {}\n}\n","import { CsdlEntitySet } from './csdl-entity-set';\nimport { CsdlSingleton } from './csdl-singleton';\nimport { CsdlFunctionImport, CsdlActionImport } from './csdl-function-action';\n\nexport class CsdlEntityContainer {\n constructor(\n public name: string,\n public extend?: string,\n public entitySets?: CsdlEntitySet[],\n public singletons?: CsdlSingleton[],\n public functionImports?: CsdlFunctionImport[],\n public actionImports?: CsdlActionImport[]\n ) {}\n}\n","import { CsdlNavigationPropertyBinding } from './csdl-navigation-property-binding';\n\nexport class CsdlEntitySet {\n constructor(\n public name: string,\n public entityType: string,\n public navigationPropertyBinding?: CsdlNavigationPropertyBinding[],\n public includeInServiceDocument?: boolean\n ) {}\n}\n","export class CsdlNavigationPropertyBinding {\n constructor(public path: string, public target: string) {}\n}\n","import {\n CsdlAnnotation,\n CsdlAnnotable,\n CsdlTerm,\n CsdlAnnotations,\n} from './csdl-annotation';\nimport { CsdlTypeDefinition } from './csdl-type-definition';\nimport { CsdlEnumType } from './csdl-enum-type';\nimport { CsdlEntityType, CsdlComplexType } from './csdl-structured-type';\nimport { CsdlFunction, CsdlAction } from './csdl-function-action';\nimport { CsdlEntityContainer } from './csdl-entity-container';\n\nexport class CsdlSchema extends CsdlAnnotable {\n constructor(\n public namespace: string,\n public alias?: string,\n public enumTypes?: CsdlEnumType[],\n public complexTypes?: CsdlComplexType[],\n public entityTypes?: CsdlEntityType[],\n public functions?: CsdlFunction[],\n public actions?: CsdlAction[],\n public entityContainer?: CsdlEntityContainer,\n public typeDefinitions?: CsdlTypeDefinition[],\n public terms?: CsdlTerm[],\n public annotationsList?: CsdlAnnotations[],\n annotationList?: CsdlAnnotation[]\n ) {\n super(annotationList);\n }\n}\n","import { CsdlNavigationPropertyBinding } from './csdl-navigation-property-binding';\n\nexport class CsdlSingleton {\n constructor(\n public name: string,\n public type: string,\n public navigationPropertyBindings?: CsdlNavigationPropertyBinding[]\n ) {}\n}\n","import { CsdlAnnotable, CsdlAnnotation } from './csdl-annotation';\n\nexport class CsdlTypeDefinition extends CsdlAnnotable {\n constructor(\n public name: string,\n public underlayingType: string,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public unicode?: boolean,\n public srid?: string,\n annotationList?: CsdlAnnotation[]\n ) {\n super(annotationList);\n }\n}\n","import {\n CsdlAction,\n CsdlActionImport,\n CsdlFunction,\n CsdlFunctionImport,\n CsdlParameter,\n CsdlReturnType,\n} from './csdl/csdl-function-action';\nimport {\n CsdlAnnotation,\n CsdlAnnotations,\n CsdlTerm,\n} from './csdl/csdl-annotation';\nimport {\n CsdlComplexType,\n CsdlEntityType,\n CsdlKey,\n CsdlPropertyRef,\n} from './csdl/csdl-structured-type';\nimport { CsdlEnumMember, CsdlEnumType } from './csdl/csdl-enum-type';\nimport {\n CsdlInclude,\n CsdlIncludeAnnotations,\n CsdlReference,\n} from './csdl/csdl-reference';\nimport {\n CsdlNavigationProperty,\n CsdlOnDelete,\n CsdlProperty,\n CsdlReferentialConstraint,\n} from './csdl/csdl-structural-property';\n\nimport { CsdlEntityContainer } from './csdl/csdl-entity-container';\nimport { CsdlEntitySet } from './csdl/csdl-entity-set';\nimport { CsdlNavigationPropertyBinding } from './csdl/csdl-navigation-property-binding';\nimport { CsdlSchema } from './csdl/csdl-schema';\nimport { CsdlSingleton } from './csdl/csdl-singleton';\nimport { CsdlTypeDefinition } from './csdl/csdl-type-definition';\nimport { VERSION_4_0 } from '../../constants';\n\nenum FieldType {\n ATTRIBUTE,\n TAG,\n}\n\nclass Field {\n constructor(public name: string, public fieldType: FieldType) {}\n}\n\nexport class ODataMetadata {\n // TAGS\n private static readonly TAG_EDMX = 'edmx:Edmx';\n private static readonly TAG_DATA_SERVICES = 'edmx:DataServices';\n private static readonly TAG_REFERENCE = 'edmx:Reference';\n private static readonly TAG_INCLUDE = 'edmx:Include';\n private static readonly TAG_INCLUDE_ANNOTATIONS = 'edmx:IncludeAnnotations';\n private static readonly TAG_TERM = 'Term';\n private static readonly TAG_ANNOTATIONS = 'Annotations';\n private static readonly TAG_ANNOTATION = 'Annotation';\n private static readonly TAG_SCHEMA = 'Schema';\n private static readonly TAG_ENUM_TYPE = 'EnumType';\n private static readonly TAG_MEMBER = 'Member';\n private static readonly TAG_COMPLEX_TYPE = 'ComplexType';\n private static readonly TAG_ENTITY_TYPE = 'EntityType';\n private static readonly TAG_PROPERTY = 'Property';\n private static readonly TAG_KEY = 'Key';\n private static readonly TAG_PROPERTY_REF = 'PropertyRef';\n private static readonly TAG_NAVIGATION_PROPERTY = 'NavigationProperty';\n private static readonly TAG_REFERENTIAL_CONSTRAINT = 'ReferentialConstraint';\n private static readonly TAG_ON_DELETE = 'OnDelete';\n private static readonly TAG_FUNCTION = 'Function';\n private static readonly TAG_RETURN_TYPE = 'ReturnType';\n private static readonly TAG_PARAMETER = 'Parameter';\n private static readonly TAG_ACTION = 'Action';\n private static readonly TAG_ENTITY_CONTAINER = 'EntityContainer';\n private static readonly TAG_ENTITY_SET = 'EntitySet';\n private static readonly TAG_SINGLETON = 'Singleton';\n private static readonly TAG_FUNCTION_IMPORT = 'FunctionImport';\n private static readonly TAG_ACTION_IMPORT = 'ActionImport';\n private static readonly TAG_NAVIGATION_PROPERTY_BINDING =\n 'NavigationPropertyBinding';\n private static readonly TAG_TYPE_DEFINITION = 'TypeDefinition';\n\n // ATTRIBUTES\n private static readonly ATTRIBUTE_VERSION = 'Version';\n private static readonly ATTRIBUTE_URI = 'Uri';\n private static readonly ATTRIBUTE_ALIAS = 'Alias';\n private static readonly ATTRIBUTE_NAMESPACE = 'Namespace';\n private static readonly ATTRIBUTE_TERM_NAMESPACE = 'TermNamespace';\n private static readonly ATTRIBUTE_QUALIFIER = 'Qualifier';\n private static readonly ATTRIBUTE_TARGET_NAMESPACE = 'TargetNamespace';\n private static readonly ATTRIBUTE_TERM = 'Term';\n private static readonly ATTRIBUTE_NAME = 'Name';\n private static readonly ATTRIBUTE_VALUE = 'Value';\n private static readonly ATTRIBUTE_BASE_TYPE = 'BaseType';\n private static readonly ATTRIBUTE_OPEN_TYPE = 'OpenType';\n private static readonly ATTRIBUTE_TYPE = 'Type';\n private static readonly ATTRIBUTE_NULLABLE = 'Nullable';\n private static readonly ATTRIBUTE_MAX_LENGTH = 'MaxLength';\n private static readonly ATTRIBUTE_PRECISION = 'Precision';\n private static readonly ATTRIBUTE_SCALE = 'Scale';\n private static readonly ATTRIBUTE_UNICODE = 'Unicode';\n private static readonly ATTRIBUTE_SRID = 'SRID';\n private static readonly ATTRIBUTE_DEFAULT_VALUE = 'DefaultValue';\n private static readonly ATTRIBUTE_PARTNER = 'Partner';\n private static readonly ATTRIBUTE_PROPERTY = 'Property';\n private static readonly ATTRIBUTE_REFERENCED_PROPERTY = 'ReferencedProperty';\n private static readonly ATTRIBUTE_HAS_STREAM = 'HasStream';\n private static readonly ATTRIBUTE_CONTAINS_TARGET = 'ContainsTarget';\n private static readonly ATTRIBUTE_IS_BOUND = 'IsBound';\n private static readonly ATTRIBUTE_ENTITY_SET_PATH = 'EntitySetPath';\n private static readonly ATTRIBUTE_IS_COMPOSABLE = 'IsComposable';\n private static readonly ATTRIBUTE_ENTITY_TYPE = 'EntityType';\n private static readonly ATTRIBUTE_PATH = 'Path';\n private static readonly ATTRIBUTE_TARGET = 'Target';\n private static readonly ATTRIBUTE_FUNCTION = 'Function';\n private static readonly ATTRIBUTE_ACTION = 'Action';\n private static readonly ATTRIBUTE_ENTITY_SET = 'EntitySet';\n private static readonly ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT =\n 'IncludeInServiceDocument';\n private static readonly ATTRIBUTE_ABSTRACT = 'Abstract';\n private static readonly ATTRIBUTE_UNDERLYING_TYPE = 'UnderlyingType';\n private static readonly ATTRIBUTE_IS_FLAGS = 'IsFlags';\n private static readonly ATTRIBUTE_EXTENDS = 'Extends';\n private static readonly ATTRIBUTE_BASE_TERM = 'BaseTerm';\n private static readonly ATTRIBUTE_APPLIES_TO = 'AppliesTo';\n\n public readonly version: string;\n public readonly references: CsdlReference[];\n public readonly schemas: CsdlSchema[];\n\n constructor(xml: string) {\n try {\n const parser: DOMParser = new DOMParser();\n const document: Document = parser.parseFromString(xml, 'text/xml');\n\n this.checkVersion(document);\n\n this.version = this.getFieldValueByAttribute(\n new Field(ODataMetadata.ATTRIBUTE_VERSION, FieldType.ATTRIBUTE),\n document.documentElement.attributes\n );\n\n this.references = this.getObjects(\n document.documentElement,\n ODataMetadata.TAG_REFERENCE,\n [\n new Field(ODataMetadata.ATTRIBUTE_URI, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_INCLUDE, FieldType.TAG),\n new Field(ODataMetadata.TAG_INCLUDE_ANNOTATIONS, FieldType.TAG),\n new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),\n ]\n );\n\n const dataServices: Element =\n document.documentElement.getElementsByTagName(\n ODataMetadata.TAG_DATA_SERVICES\n )[0];\n this.schemas = this.getObjects(dataServices, ODataMetadata.TAG_SCHEMA, [\n new Field(ODataMetadata.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_ENUM_TYPE, FieldType.TAG),\n new Field(ODataMetadata.TAG_COMPLEX_TYPE, FieldType.TAG),\n new Field(ODataMetadata.TAG_ENTITY_TYPE, FieldType.TAG),\n new Field(ODataMetadata.TAG_FUNCTION, FieldType.TAG),\n new Field(ODataMetadata.TAG_ACTION, FieldType.TAG),\n new Field(ODataMetadata.TAG_ENTITY_CONTAINER, FieldType.TAG),\n new Field(ODataMetadata.TAG_TYPE_DEFINITION, FieldType.TAG),\n new Field(ODataMetadata.TAG_TERM, FieldType.TAG),\n new Field(ODataMetadata.TAG_ANNOTATIONS, FieldType.TAG),\n new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),\n ]);\n } catch (error) {\n throw new Error('Unable to parse metadata, ' + error);\n }\n }\n\n protected checkVersion(document: Document) {\n // check version\n const attributes: NamedNodeMap = document.documentElement.attributes;\n if (!attributes) {\n throw new Error('OData version is not specified in the metadata');\n }\n const attr: Attr | null = attributes.getNamedItem('Version');\n if (attr === null) {\n throw new Error('OData version is not specified in the metadata');\n }\n const odataVersion = attr?.nodeValue;\n if (odataVersion !== VERSION_4_0) {\n throw new Error('OData version \"' + odataVersion + '\" is not supported');\n }\n }\n\n protected getObjects(\n parentElement: Element,\n tag: string,\n fieldNames: Field[]\n ): any[] {\n let objects: any[] = [];\n\n const children: HTMLCollection = parentElement.children;\n for (let index = 0; index < children.length; index++) {\n const element = children.item(index);\n\n if (!element || element.nodeName !== tag) {\n continue;\n }\n\n const attributes: NamedNodeMap = element.attributes;\n const fieldValues: any[] = this.getFieldValues(\n fieldNames,\n attributes,\n element\n );\n switch (tag) {\n case ODataMetadata.TAG_REFERENCE:\n objects.push(\n new CsdlReference(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3]\n )\n );\n break;\n case ODataMetadata.TAG_INCLUDE:\n objects.push(new CsdlInclude(fieldValues[0], fieldValues[1]));\n break;\n case ODataMetadata.TAG_INCLUDE_ANNOTATIONS:\n objects.push(\n new CsdlIncludeAnnotations(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2]\n )\n );\n break;\n case ODataMetadata.TAG_TERM:\n objects.push(\n new CsdlTerm(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7],\n fieldValues[8],\n fieldValues[9]\n )\n );\n break;\n case ODataMetadata.TAG_ANNOTATIONS:\n objects.push(\n new CsdlAnnotations(fieldValues[0], fieldValues[1], fieldValues[2])\n );\n break;\n case ODataMetadata.TAG_ANNOTATION:\n objects.push(new CsdlAnnotation(fieldValues[0], fieldValues[1]));\n break;\n case ODataMetadata.TAG_SCHEMA:\n objects.push(\n new CsdlSchema(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7],\n fieldValues[8],\n fieldValues[9],\n fieldValues[10],\n fieldValues[11]\n )\n );\n break;\n case ODataMetadata.TAG_ENUM_TYPE:\n objects.push(\n new CsdlEnumType(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3]\n )\n );\n break;\n case ODataMetadata.TAG_COMPLEX_TYPE:\n objects.push(\n new CsdlComplexType(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5]\n )\n );\n break;\n case ODataMetadata.TAG_ENTITY_TYPE:\n objects.push(\n new CsdlEntityType(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7]\n )\n );\n break;\n case ODataMetadata.TAG_FUNCTION:\n objects.push(\n new CsdlFunction(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5]\n )\n );\n break;\n case ODataMetadata.TAG_MEMBER:\n objects.push(new CsdlEnumMember(fieldValues[0], fieldValues[1]));\n break;\n case ODataMetadata.TAG_PROPERTY:\n objects.push(\n new CsdlProperty(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7],\n fieldValues[8]\n )\n );\n break;\n case ODataMetadata.TAG_PROPERTY_REF:\n objects.push(new CsdlPropertyRef(fieldValues[0], fieldValues[1]));\n break;\n case ODataMetadata.TAG_NAVIGATION_PROPERTY:\n objects.push(\n new CsdlNavigationProperty(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6]\n )\n );\n break;\n case ODataMetadata.TAG_REFERENTIAL_CONSTRAINT:\n objects.push(\n new CsdlReferentialConstraint(fieldValues[0], fieldValues[1])\n );\n break;\n case ODataMetadata.TAG_PARAMETER:\n objects.push(\n new CsdlParameter(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6]\n )\n );\n break;\n case ODataMetadata.TAG_ACTION:\n objects.push(\n new CsdlAction(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4]\n )\n );\n break;\n case ODataMetadata.TAG_ENTITY_SET:\n objects.push(\n new CsdlEntitySet(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3]\n )\n );\n break;\n case ODataMetadata.TAG_SINGLETON:\n objects.push(\n new CsdlSingleton(fieldValues[0], fieldValues[1], fieldValues[2])\n );\n break;\n case ODataMetadata.TAG_FUNCTION_IMPORT:\n objects.push(\n new CsdlFunctionImport(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3]\n )\n );\n break;\n case ODataMetadata.TAG_ACTION_IMPORT:\n objects.push(\n new CsdlActionImport(fieldValues[0], fieldValues[1], fieldValues[2])\n );\n break;\n case ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING:\n objects.push(\n new CsdlNavigationPropertyBinding(fieldValues[0], fieldValues[1])\n );\n break;\n case ODataMetadata.TAG_TYPE_DEFINITION:\n objects.push(\n new CsdlTypeDefinition(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7]\n )\n );\n break;\n default:\n throw new Error('Unknwon tag:' + tag);\n }\n }\n\n return objects;\n }\n\n protected getObject(\n parentElement: Element,\n tag: string,\n fieldNames: Field[]\n ): any {\n let object: any;\n\n const children: HTMLCollection = parentElement.children;\n let element: Element | undefined | null;\n for (let index = 0; index < children.length; index++) {\n if (children && children.item(index)?.nodeName === tag) {\n if (element !== undefined && element !== null) {\n throw new Error('Expected one ' + tag);\n }\n element = children.item(index);\n }\n }\n\n if (element !== undefined && element !== null) {\n const attributes: NamedNodeMap = element.attributes;\n const fieldValues: any[] = this.getFieldValues(\n fieldNames,\n attributes,\n element\n );\n switch (tag) {\n case ODataMetadata.TAG_KEY:\n object = new CsdlKey(fieldValues[0]);\n break;\n case ODataMetadata.TAG_RETURN_TYPE:\n object = new CsdlReturnType(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5]\n );\n break;\n case ODataMetadata.TAG_ENTITY_CONTAINER:\n object = new CsdlEntityContainer(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5]\n );\n break;\n case ODataMetadata.TAG_ON_DELETE:\n object = new CsdlOnDelete(fieldValues[0]);\n break;\n default:\n throw new Error('Unknwon tag:' + tag);\n }\n }\n\n return object;\n }\n\n protected getFieldValues(\n fields: Field[],\n attributes: NamedNodeMap,\n element: Element\n ): any[] {\n const fieldValues: any[] = [];\n\n for (const field of fields) {\n if (field.fieldType === FieldType.TAG) {\n fieldValues.push(this.getFieldValueByTag(field, element));\n } else if (field.fieldType === FieldType.ATTRIBUTE) {\n fieldValues.push(this.getFieldValueByAttribute(field, attributes));\n } else {\n throw new Error('Unknown field type: ' + field.fieldType);\n }\n }\n\n return fieldValues;\n }\n\n protected getFieldValueByAttribute(\n field: Field,\n attributes: NamedNodeMap\n ): any {\n switch (field.name) {\n case ODataMetadata.ATTRIBUTE_VERSION:\n case ODataMetadata.ATTRIBUTE_URI:\n case ODataMetadata.ATTRIBUTE_NAMESPACE:\n case ODataMetadata.ATTRIBUTE_ALIAS:\n case ODataMetadata.ATTRIBUTE_TERM_NAMESPACE:\n case ODataMetadata.ATTRIBUTE_TERM:\n case ODataMetadata.ATTRIBUTE_QUALIFIER:\n case ODataMetadata.ATTRIBUTE_TARGET_NAMESPACE:\n case ODataMetadata.ATTRIBUTE_NAME:\n case ODataMetadata.ATTRIBUTE_TYPE:\n case ODataMetadata.ATTRIBUTE_SRID:\n case ODataMetadata.ATTRIBUTE_DEFAULT_VALUE:\n case ODataMetadata.ATTRIBUTE_PARTNER:\n case ODataMetadata.ATTRIBUTE_PROPERTY:\n case ODataMetadata.ATTRIBUTE_REFERENCED_PROPERTY:\n case ODataMetadata.ATTRIBUTE_BASE_TYPE:\n case ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH:\n case ODataMetadata.ATTRIBUTE_ENTITY_TYPE:\n case ODataMetadata.ATTRIBUTE_PATH:\n case ODataMetadata.ATTRIBUTE_TARGET:\n case ODataMetadata.ATTRIBUTE_FUNCTION:\n case ODataMetadata.ATTRIBUTE_ACTION:\n case ODataMetadata.ATTRIBUTE_ENTITY_SET:\n case ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE:\n case ODataMetadata.ATTRIBUTE_EXTENDS:\n case ODataMetadata.ATTRIBUTE_BASE_TERM:\n case ODataMetadata.ATTRIBUTE_APPLIES_TO:\n return this.getAttributeValue(attributes, field.name);\n case ODataMetadata.ATTRIBUTE_NULLABLE:\n case ODataMetadata.ATTRIBUTE_UNICODE:\n case ODataMetadata.ATTRIBUTE_OPEN_TYPE:\n case ODataMetadata.ATTRIBUTE_HAS_STREAM:\n case ODataMetadata.ATTRIBUTE_IS_BOUND:\n case ODataMetadata.ATTRIBUTE_IS_COMPOSABLE:\n case ODataMetadata.ATTRIBUTE_CONTAINS_TARGET:\n case ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT:\n case ODataMetadata.ATTRIBUTE_ABSTRACT:\n case ODataMetadata.ATTRIBUTE_IS_FLAGS:\n return this.propertyValueToBoolean(\n this.getAttributeValue(attributes, field.name)\n );\n case ODataMetadata.ATTRIBUTE_VALUE:\n case ODataMetadata.ATTRIBUTE_MAX_LENGTH:\n case ODataMetadata.ATTRIBUTE_PRECISION:\n case ODataMetadata.ATTRIBUTE_SCALE:\n return this.propertyValueToNumber(\n this.getAttributeValue(attributes, field.name)\n );\n default:\n throw new Error('Unknwon attribute:' + field.name);\n }\n }\n\n protected getFieldValueByTag(field: Field, element: Element): any[] {\n switch (field.name) {\n case ODataMetadata.TAG_INCLUDE:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_INCLUDE_ANNOTATIONS:\n return this.getObjects(element, field.name, [\n new Field(\n ODataMetadata.ATTRIBUTE_TERM_NAMESPACE,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_TARGET_NAMESPACE,\n FieldType.ATTRIBUTE\n ),\n ]);\n case ODataMetadata.TAG_TERM:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_BASE_TERM, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_DEFAULT_VALUE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_APPLIES_TO, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ANNOTATIONS:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ANNOTATION:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_TERM, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ENUM_TYPE:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_MEMBER, FieldType.TAG),\n new Field(\n ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.ATTRIBUTE_IS_FLAGS, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_COMPLEX_TYPE:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_PROPERTY, FieldType.TAG),\n new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_BASE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_OPEN_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ABSTRACT, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ENTITY_TYPE:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_KEY, FieldType.TAG),\n new Field(ODataMetadata.TAG_PROPERTY, FieldType.TAG),\n new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_BASE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_OPEN_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_HAS_STREAM, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ABSTRACT, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_FUNCTION:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_RETURN_TYPE, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_IS_BOUND, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.ATTRIBUTE_IS_COMPOSABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_PARAMETER, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_MEMBER:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_VALUE, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_PROPERTY:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_DEFAULT_VALUE, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_KEY:\n return this.getObject(element, field.name, [\n new Field(ODataMetadata.TAG_PROPERTY_REF, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_PROPERTY_REF:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_NAVIGATION_PROPERTY:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PARTNER, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_CONTAINS_TARGET,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.TAG_REFERENTIAL_CONSTRAINT, FieldType.TAG),\n new Field(ODataMetadata.TAG_ON_DELETE, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_REFERENTIAL_CONSTRAINT:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_PROPERTY, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_REFERENCED_PROPERTY,\n FieldType.ATTRIBUTE\n ),\n ]);\n case ODataMetadata.TAG_ON_DELETE:\n return this.getObject(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_PARAMETER:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_RETURN_TYPE:\n return this.getObject(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ACTION:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_RETURN_TYPE, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_IS_BOUND, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.TAG_PARAMETER, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_ENTITY_CONTAINER:\n return this.getObject(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_EXTENDS, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_ENTITY_SET, FieldType.TAG),\n new Field(ODataMetadata.TAG_SINGLETON, FieldType.TAG),\n new Field(ODataMetadata.TAG_FUNCTION_IMPORT, FieldType.TAG),\n new Field(ODataMetadata.TAG_ACTION_IMPORT, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_ENTITY_SET:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ENTITY_TYPE, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING,\n FieldType.TAG\n ),\n new Field(\n ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT,\n FieldType.ATTRIBUTE\n ),\n ]);\n case ODataMetadata.TAG_SINGLETON:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING,\n FieldType.TAG\n ),\n ]);\n case ODataMetadata.TAG_FUNCTION_IMPORT:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_FUNCTION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT,\n FieldType.ATTRIBUTE\n ),\n ]);\n case ODataMetadata.TAG_ACTION_IMPORT:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_PATH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_TYPE_DEFINITION:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),\n ]);\n default:\n throw new Error('Unknwon tag:' + field.name);\n }\n }\n\n protected getAttributeValue(attributes: NamedNodeMap, attributeName: string) {\n const attribute: Attr | null = attributes.getNamedItem(attributeName);\n return attribute !== null && attribute.nodeValue\n ? attribute.nodeValue\n : undefined;\n }\n\n protected propertyValueToNumber(attributeValue?: string) {\n return attributeValue !== undefined ? Number(attributeValue) : undefined;\n }\n\n protected propertyValueToBoolean(attributeValue?: string) {\n return attributeValue !== undefined ? attributeValue === 'true' : false;\n }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { $METADATA } from '../../constants';\nimport { PathSegment } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataResource } from '../resource';\nimport { ODataMetadata } from '../responses';\nimport { ODataOptions } from './options';\n\nexport class ODataMetadataResource extends ODataResource<any> {\n constructor(api: ODataApi, segments?: ODataPathSegments) {\n super(api, { segments });\n }\n\n //#region Factory\n static factory(api: ODataApi) {\n let segments = new ODataPathSegments();\n segments.add(PathSegment.metadata, $METADATA);\n return new ODataMetadataResource(api, segments);\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({ responseType: 'text', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n fetch(options?: ODataOptions): Observable<ODataMetadata> {\n return this.get(options).pipe(map((body: any) => new ODataMetadata(body)));\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ODataApi } from '../../api';\nimport { ODataModel } from '../../models';\nimport { ODataStructuredType } from '../../schema';\nimport { PathSegment, QueryOption } from '../../types';\nimport { ODataPathSegments } from '../path';\nimport { ODataQueryOptions } from '../query';\nimport { ODataResource } from '../resource';\nimport { ODataEntity } from '../responses';\nimport { ODataActionResource } from './action';\nimport { ODataFunctionResource } from './function';\nimport { ODataNavigationPropertyResource } from './navigation-property';\nimport { ODataOptions } from './options';\nimport { ODataPropertyResource } from './property';\n\nexport class ODataSingletonResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<S>(\n api: ODataApi,\n {\n path,\n schema,\n query,\n }: {\n path: string;\n schema?: ODataStructuredType<S>;\n query?: ODataQueryOptions<S>;\n }\n ) {\n const segments = new ODataPathSegments();\n const segment = segments.add(PathSegment.singleton, path);\n if (schema !== undefined) segment.type(schema.type());\n return new ODataSingletonResource<S>(api, { segments, query, schema });\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.findStructuredTypeForType<T>(types[index])\n )\n );\n singleton.segment((s) => s.keys(keys));\n return singleton;\n }\n\n navigationProperty<N>(path: string) {\n return ODataNavigationPropertyResource.fromResource<N>(this, path);\n }\n\n property<P>(path: string) {\n return ODataPropertyResource.fromResource<P>(this, path);\n }\n\n action<P, R>(path: string) {\n return ODataActionResource.fromResource<P, R>(this, path);\n }\n\n function<P, R>(path: string) {\n return ODataFunctionResource.fromResource<P, R>(this, path);\n }\n\n //#region Requests\n protected override post(\n attrs: Partial<T>,\n options: ODataOptions = {}\n ): Observable<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<M extends ODataModel<T>>(\n options?: ODataOptions & {\n bodyQueryOptions?: QueryOption[];\n }\n ): Observable<M | null> {\n return this.fetch(options).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel<M>(entity, { annots }) : null\n )\n );\n }\n //#endregion\n}\n","import { ODataRequest, ODataResponse } from '../resources';\nimport { ODataCache, ODataCacheEntry } from './cache';\n\ninterface ResponseJson {\n body: any | null;\n headers: { [name: string]: string | string[] };\n status: number;\n statusText: string;\n url: string | null;\n}\n\nexport class ODataInStorageCache extends ODataCache {\n name: string;\n storage: Storage;\n\n constructor({\n name,\n storage = sessionStorage,\n timeout,\n }: {\n timeout?: number;\n name: string;\n storage?: Storage;\n }) {\n super({ timeout });\n this.name = name;\n this.storage = storage;\n this.restore();\n window.addEventListener('beforeunload', () => this.store());\n }\n\n /**\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 { Observable, Subscription } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\nimport {\n CID_FIELD_NAME,\n COMPUTED,\n DEFAULT_VERSION,\n OPTIMISTIC_CONCURRENCY,\n} from '../constants';\nimport { ODataHelper } from '../helper';\nimport {\n EntityKey,\n ODataEntitiesAnnotations,\n ODataEntityAnnotations,\n ODataEntityResource,\n ODataEntitySetResource,\n ODataNavigationPropertyResource,\n ODataPropertyResource,\n ODataQueryOptions,\n ODataQueryOptionsHandler,\n ODataResource,\n ODataSingletonResource,\n} from '../resources';\nimport {\n ODataEntitySet,\n ODataStructuredType,\n ODataStructuredTypeFieldParser,\n} from '../schema';\nimport { EdmType, Parser, ParserOptions } from '../types';\nimport { Objects, Types } from '../utils';\nimport { ODataCollection } from './collection';\nimport type { ODataModel } from './model';\nimport { EventEmitter } from '@angular/core';\n\nexport enum ODataModelEventType {\n Change = 'change',\n Reset = 'reset',\n Update = 'update',\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 name: ODataModelEventType;\n value?: any;\n previous?: any;\n options?: any;\n\n constructor(\n name: ODataModelEventType,\n {\n model,\n collection,\n previous,\n value,\n attr,\n options,\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 } = {}\n ) {\n this.name = name;\n this.model = model;\n this.collection = collection;\n this.previous = previous;\n this.value = value;\n this.options = options;\n this.chain = [\n [\n (this.collection || this.model) as\n | ODataModel<any>\n | ODataCollection<any, ODataModel<any>>,\n attr || null,\n ],\n ];\n }\n\n bubbling: boolean = true;\n stopPropagation() {\n this.bubbling = false;\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 let event = new ODataModelEvent(this.name, {\n model: this.model,\n collection: this.collection,\n previous: this.previous,\n value: this.value,\n options: this.options,\n });\n event.chain = [...this.chain];\n event.chain.splice(0, 0, [model, attr]);\n return event;\n }\n\n visited(model: ODataModel<any> | ODataCollection<any, ODataModel<any>>) {\n return (\n this.chain.some((c) => c[0] === model) &&\n this.chain[this.chain.length - 1][0] !== model\n );\n }\n\n get path() {\n return this.chain\n .map(([, field], index) =>\n typeof field === 'number'\n ? `[${field}]`\n : field instanceof ODataModelField\n ? index === 0\n ? field.name\n : `.${field.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 const BUBBLING = [\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};\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 Unchanged,\n}\n\nexport type ModelOptions = {\n cid?: string;\n fields: { [name: 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 = { fields: {} } as ModelOptions;\n Klass.options.cid = cid;\n return constructor;\n };\n}\n\nexport function ModelField({\n name,\n ...options\n}: { name?: string } & ModelFieldOptions = {}) {\n return (target: any, key: string): void => {\n const Klass = target.constructor;\n if (!Klass.hasOwnProperty('options'))\n Klass.options = { fields: {} } as ModelOptions;\n options.field = name || key;\n Klass.options.fields[key] = options;\n };\n}\n\nexport type ODataModelFieldOptions<F> = ModelFieldOptions & {\n name: string;\n field: string;\n parser: ODataStructuredTypeFieldParser<F>;\n};\n\nexport class ODataModelField<F> {\n name: string;\n field: string;\n parser: ODataStructuredTypeFieldParser<F>;\n options: ODataModelOptions<any>;\n meta?: ODataModelOptions<any>;\n default?: any;\n required: boolean;\n concurrency: boolean;\n maxLength?: number;\n minLength?: number;\n min?: number;\n max?: number;\n pattern?: RegExp;\n 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 api() {\n return this.options.api;\n }\n\n get type() {\n return this.parser.type;\n }\n\n get navigation() {\n return Boolean(this.parser.navigation);\n }\n\n get collection() {\n return Boolean(this.parser.collection);\n }\n\n annotatedValue<T>(term: string | RegExp) {\n return this.parser.annotatedValue<T>(term);\n }\n\n configure({\n findOptionsForType,\n concurrency,\n options,\n }: {\n findOptionsForType: (type: string) => ODataModelOptions<any> | undefined;\n concurrency: boolean;\n options: ParserOptions;\n }) {\n this.meta = findOptionsForType(this.parser.type);\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 structured() {\n let structuredType = this.api.findStructuredTypeForType<F>(\n this.parser.type\n );\n //Throw error if not found\n if (!structuredType)\n throw new Error(`Could not find structured type for ${this.parser.type}`);\n return structuredType;\n }\n\n isEnumType() {\n return this.parser.isEnumType();\n }\n\n enum() {\n let enumType = this.api.findEnumTypeForType<F>(this.parser.type);\n //Throw error if not found\n if (!enumType)\n throw new Error(`Could not find enum type for ${this.parser.type}`);\n return enumType;\n }\n\n validate(\n value: any,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}\n ) {\n if (ODataModelOptions.isModel(value)) {\n return !value.isValid({ method, navigation }) ? value._errors : undefined;\n } else if (ODataModelOptions.isCollection(value)) {\n return value\n .models()\n .some((m: ODataModel<any>) => !m.isValid({ method, navigation }))\n ? value.models().map((m: ODataModel<any>) => m._errors)\n : undefined;\n } else {\n const computed = this.annotatedValue<boolean>(COMPUTED);\n let errors = this.parser?.validate(value, { method, navigation }) || [];\n if (\n this.required &&\n (value === null || (value === undefined && method !== 'modify')) && // Is null or undefined without patch?\n !(computed && method === 'create') // Not (Is Computed field and create) ?\n ) {\n errors['push'](`required`);\n }\n if (\n this.maxLength !== undefined &&\n typeof value === 'string' &&\n value.length > this.maxLength\n ) {\n errors['push'](`maxlength`);\n }\n if (\n this.minLength !== undefined &&\n typeof value === 'string' &&\n value.length < this.minLength\n ) {\n errors['push'](`minlength`);\n }\n if (\n this.min !== undefined &&\n typeof value === 'number' &&\n value < this.min\n ) {\n errors['push'](`min`);\n }\n if (\n this.max !== undefined &&\n typeof value === 'number' &&\n value > this.max\n ) {\n errors['push'](`max`);\n }\n if (\n this.pattern !== undefined &&\n typeof value === 'string' &&\n !this.pattern.test(value)\n ) {\n errors['push'](`pattern`);\n }\n return !Types.isEmpty(errors) ? errors : undefined;\n }\n }\n\n defaults(): any {\n return this.isStructuredType() && this.meta !== undefined\n ? this.meta.defaults()\n : this.default;\n }\n\n deserialize(value: any, options?: 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 schemaFactory<T, F>(\n base: ODataStructuredType<T>\n ): ODataStructuredType<F> | undefined {\n return this.api.findStructuredTypeForType(this.parser.type);\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.api.modelForType(this.parser.type);\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 let schema = Model.meta.findChildOptions((o) =>\n o.isTypeOf(annots.type as string)\n )?.schema;\n if (schema !== undefined && schema.model !== undefined)\n // Change to child model\n Model = schema.model;\n }\n\n return new Model((value || {}) as Partial<F> | { [name: string]: any }, {\n annots,\n reset,\n parent: [parent, this],\n });\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.api.collectionForType(this.parser.type);\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 );\n }\n}\n\nexport class ODataModelAttribute<T> {\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 EventEmitter<ODataModelEvent<T>>();\n\n constructor(\n private _model: ODataModel<any>,\n private _field: ODataModelField<T>\n ) {}\n\n get navigation() {\n return Boolean(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 meta() {\n return this._field.meta;\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.change !== undefined ? 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.change = undefined;\n } else if (Types.isEqual(value, this.value)) {\n this.change = undefined;\n } else if (changed) {\n this.change = value;\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.change !== undefined ||\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.change = undefined;\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 open?: boolean;\n private _fields: ODataModelField<any>[] = [];\n schema: ODataStructuredType<T>;\n entitySet?: ODataEntitySet;\n // Hierarchy\n parent?: ODataModelOptions<any>;\n children: ODataModelOptions<any>[] = [];\n\n constructor({\n options,\n schema,\n }: {\n options: ModelOptions;\n schema: ODataStructuredType<T>;\n }) {\n this.name = schema.name;\n this.base = schema.base;\n this.open = schema.open;\n this.schema = schema;\n this.cid = options?.cid || CID_FIELD_NAME;\n Object.entries(options.fields).forEach(([name, options]) =>\n this.addField<any>(name, options)\n );\n }\n\n get api() {\n return this.schema.api;\n }\n\n type({ alias = false }: { alias?: boolean } = {}) {\n return this.schema.type({ alias });\n }\n\n isOpenType() {\n return this.schema.isOpenType();\n }\n\n isTypeOf(type: string) {\n return this.schema.isTypeOf(type);\n }\n\n isModelFor(entity: T | { [name: string]: any }) {\n // Resolve By Type\n let type = this.api.options.helper.type(entity as { [name: string]: any });\n if (type && this.isTypeOf(type)) return true;\n // Resolve By fields\n let keys = Object.keys(entity as { [name: string]: any });\n let 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 (let ch of this.children) {\n match = ch.findChildOptions(predicate);\n if (match !== undefined) break;\n }\n return match;\n }\n\n configure({\n options,\n parserForType,\n findOptionsForType,\n }: {\n options: ParserOptions;\n parserForType: (type: string) => Parser<any>;\n findOptionsForType: (type: string) => ODataModelOptions<any> | undefined;\n }) {\n if (this.base) {\n const parent = findOptionsForType(this.base) as ODataModelOptions<any>;\n parent.children.push(this);\n this.parent = parent;\n }\n this.entitySet = this.api.findEntitySetForEntityType(this.type());\n let concurrencyFields: string[] = [];\n if (this.entitySet !== undefined) {\n concurrencyFields =\n this.entitySet.annotatedValue<string[]>(OPTIMISTIC_CONCURRENCY) || [];\n }\n this._fields.forEach((field) => {\n let concurrency = concurrencyFields.indexOf(field.field) !== -1;\n field.configure({\n findOptionsForType,\n concurrency,\n options,\n });\n });\n }\n\n fields({\n include_navigation,\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 let field = this.findField<F>(name);\n //Throw error if not found\n if (field === undefined)\n throw new Error(`No field with name ${name as string}`);\n return field as ODataModelField<F>;\n }\n\n findField<F>(name: keyof T | string) {\n return this.fields({\n include_parents: true,\n include_navigation: true,\n }).find(\n (modelField: ODataModelField<F>) =>\n modelField.name === name || modelField.field === 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 = parser ?? this.schema.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: string | EdmType\n ) {\n const structuredFieldParser = this.schema.addField<F>(name, { type });\n structuredFieldParser.configure({\n findOptionsForType: (type: string) => this.api.findOptionsForType(type),\n parserForType: (type: string | EdmType) => 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 findOptionsForType: (type: string) => this.api.findOptionsForType(type),\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.type() !== self._resource.type() &&\n !self._resource.isSubtypeOf(resource)\n )\n throw new Error(\n `Can't attach ${resource.type()} to ${self._resource.type()}`\n );\n\n const current = self._resource;\n if (current === null || !current.isEqualTo(resource)) {\n self._resource = resource;\n self.events$.emit(\n new ODataModelEvent(ODataModelEventType.Attach, {\n model: self,\n previous: current,\n value: resource,\n })\n );\n }\n }\n\n //# region Resource\n static chain(\n child: ODataModel<any> | ODataCollection<any, ODataModel<any>>\n ): [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ][] {\n const chain = [] as any[];\n let tuple:\n | [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ]\n | null = [child, null];\n while (tuple !== null) {\n const parent = tuple as [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ];\n if (chain.some((p) => p[0] === parent[0])) break;\n chain.splice(0, 0, parent);\n tuple = tuple[0]._parent;\n }\n return chain;\n }\n\n static resource<T>(\n child: ODataModel<T> | ODataCollection<T, ODataModel<T>>\n ): ODataResource<T> {\n let resource: ODataResource<any> | null = null;\n let prevField: ODataModelField<any> | null = null;\n for (let [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 // Resolve key\n let modelKey = (model as ODataModel<any>).key({\n field_mapping: true,\n }) as EntityKey<any>;\n if (modelKey !== undefined)\n resource =\n resource instanceof ODataEntitySetResource\n ? resource.entity(modelKey)\n : (resource as ODataEntityResource<T>).key(modelKey);\n }\n prevField = field;\n if (field === null) {\n // Apply the query from model to new resource\n const query = model._resource?.cloneQuery<T>().toQueryArguments();\n if (query !== undefined) resource.query((q) => q.apply(query));\n continue;\n }\n resource = field.resourceFactory<any, any>(resource);\n }\n if (resource === null)\n throw new Error(`resource: Can't build resource for ${child}`);\n return resource;\n }\n\n collectionResourceFactory(\n query?: ODataQueryOptions<T>\n ):\n | ODataEntitySetResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | undefined {\n if (this.entitySet === undefined) return undefined;\n return ODataEntitySetResource.factory<T>(this.api, {\n path: this.entitySet.name,\n schema: this.schema,\n query,\n });\n }\n\n modelResourceFactory(\n query?: ODataQueryOptions<T>\n ):\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T>\n | undefined {\n const resource = this.collectionResourceFactory(query);\n if (resource instanceof ODataEntitySetResource) return resource.entity();\n return resource as\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T>\n | undefined;\n }\n\n entityResource(self: ODataModel<T>): ODataResource<T> {\n let resource = this.modelResourceFactory(\n self._resource !== null ? self._resource.cloneQuery() : undefined\n );\n if (resource === undefined)\n throw new Error(`entityResource: Can't build resource for ${self}`);\n const key = self.key({ field_mapping: true }) as EntityKey<T>;\n if (key !== undefined) return resource.key(key);\n return resource as ODataResource<T>;\n }\n //#endregion\n\n bind(\n self: ODataModel<T>,\n {\n parent,\n resource,\n annots,\n }: {\n parent?: [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ];\n resource?: ODataResource<T>;\n annots?: ODataEntityAnnotations<T>;\n } = {}\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 !== undefined) {\n this.attach(\n self,\n resource as\n | ODataEntityResource<T>\n | ODataPropertyResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataSingletonResource<T>\n );\n }\n\n // Annotations\n self._annotations =\n annots || new ODataEntityAnnotations(ODataHelper[DEFAULT_VERSION]);\n\n const fields = this.fields({\n include_navigation: true,\n include_parents: true,\n });\n for (let field of fields) {\n Object.defineProperty(self, field.name, {\n configurable: true,\n get: () => this.get(self, field as ODataModelField<any>),\n set: (value: any) =>\n this.set(self, field as ODataModelField<any>, value),\n });\n }\n }\n\n query(\n self: ODataModel<T>,\n resource:\n | ODataEntityResource<T>\n | ODataPropertyResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataSingletonResource<T>,\n func: (q: ODataQueryOptionsHandler<T>, 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.schema.keys({ include_parents: true });\n const key = new Map<string, any>();\n for (let kt of keyTypes) {\n let v = value as any;\n let options = this as ODataModelOptions<any>;\n let field: ODataModelField<any> | undefined;\n for (let name of kt.name.split('/')) {\n if (options === undefined) break;\n field = options\n .fields({ include_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 = field.meta as ODataModelOptions<any>;\n }\n }\n if (field === undefined) return undefined;\n let name = field_mapping ? field.field : field.name;\n if (kt.alias !== undefined) name = kt.alias;\n key.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 (let ref of attr.referentials) {\n let from = this.fields({\n include_navigation: false,\n include_parents: true,\n }).find((p: any) => p.field === ref.referencedProperty);\n let 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 let 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 (let ref of attr.referentials) {\n let from = this.fields({\n include_navigation: false,\n include_parents: true,\n }).find((field: ODataModelField<any>) => field.field === ref.property);\n let to = (attr.meta as ODataModelOptions<any>)\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 let 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 let value = (self as any)[field.name];\n let errs = field.validate(value, { method });\n return errs !== undefined\n ? Object.assign(acc, { [field.name]: errs })\n : acc;\n }, {});\n return !Types.isEmpty(errors) ? errors : undefined;\n }\n\n defaults(): T | { [name: string]: any } | undefined {\n const defs = this.fields({\n include_navigation: false,\n include_parents: true,\n }).reduce((acc, field) => {\n let value = field.defaults();\n return value !== undefined\n ? Object.assign(acc, { [field.name]: value })\n : acc;\n }, {});\n return !Types.isEmpty(defs) ? defs : undefined;\n }\n\n hasChanged(\n self: ODataModel<T>,\n { include_navigation = false }: { include_navigation?: boolean } = {}\n ): boolean {\n return [...self._attributes.values()]\n .filter((attr) => !attr.navigation || include_navigation)\n .some(\n (attr) =>\n (!include_navigation || attr.navigation) &&\n attr.isChanged({ include_navigation })\n );\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 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 // Build new resource\n const query = self._resource?.cloneQuery<T>();\n let resource = this.modelResourceFactory(query);\n if (resource === undefined)\n throw new Error('Model does not have associated Entity endpoint');\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_non_field = false,\n changes_only = false,\n field_mapping = false,\n chain = [],\n }: {\n client_id?: boolean;\n include_navigation?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_key?: boolean;\n include_non_field?: boolean;\n changes_only?: boolean;\n field_mapping?: boolean;\n chain?: (ODataModel<any> | ODataCollection<any, ODataModel<any>>)[];\n } = {}\n ): T | { [name: string]: any } {\n let 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 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 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 type\n if (\n self._parent !== null &&\n ((ODataModelOptions.isModel(self._parent[0]) &&\n (self._parent[1] as ODataModelField<any>).meta !== self._meta) ||\n (ODataModelOptions.isCollection(self._parent[0]) &&\n (self._parent[0] as ODataCollection<any, ODataModel<any>>)._model\n .meta !== self._meta))\n ) {\n entity[this.api.options.helper.ODATA_TYPE] = `#${this.schema.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$.emit(\n new ODataModelEvent(ODataModelEventType.Reset, {\n model: self,\n options: { changes },\n })\n );\n }\n }\n\n assign(\n self: ODataModel<T>,\n entity: Partial<T> | { [name: string]: any },\n {\n reset = false,\n reparent = false,\n silent = false,\n }: {\n reset?: boolean;\n reparent?: boolean;\n silent?: boolean;\n } = {}\n ) {\n self._reset = reset;\n self._reparent = reparent;\n self._silent = silent;\n\n const changes: string[] = [];\n\n // Apply entity\n const model = self as any;\n Object.entries(entity)\n .filter(([, value]) => value !== undefined) // Filter undefined\n .forEach(([key, value]) => {\n const field = this.fields({\n include_parents: true,\n include_navigation: true,\n }).find(\n (field: ODataModelField<any>) =>\n (self._reset && field.field === key) || field.name === key\n );\n\n if (field !== undefined) {\n // Delegated to private setter\n if (this.set(self, field, value)) {\n changes.push(field.name);\n }\n } else {\n // Basic assignment\n const current = model[key];\n model[key] = value;\n if (current !== value) changes.push(key);\n }\n });\n\n if ((!self._silent && changes.length > 0) || self._reset) {\n self.events$.emit(\n new ODataModelEvent(\n self._reset ? ODataModelEventType.Reset : ODataModelEventType.Update,\n {\n model: self,\n options: { changes },\n }\n )\n );\n }\n self._reset = false;\n self._reparent = false;\n self._silent = false;\n }\n\n static isModel(obj: any) {\n return Types.rawType(obj) === 'Model';\n }\n\n static isCollection(obj: any) {\n return Types.rawType(obj) === 'Collection';\n }\n\n private _updateCollection<F>(\n self: ODataModel<T>,\n field: ODataModelField<F>,\n collection: ODataCollection<F, ODataModel<F>>,\n value: Partial<T>[] | { [name: string]: any }[]\n ) {\n collection._annotations = field.annotationsFactory(\n self.annots()\n ) as ODataEntitiesAnnotations<F>;\n collection.assign(value as Partial<T>[] | { [name: string]: any }[], {\n reset: self._reset,\n reparent: self._reparent,\n silent: self._silent,\n });\n return collection.hasChanged();\n }\n\n private _updateModel<F>(\n self: ODataModel<T>,\n field: ODataModelField<F>,\n model: ODataModel<F>,\n value: F | { [name: string]: any }\n ) {\n model._annotations = field.annotationsFactory(\n self.annots()\n ) as ODataEntityAnnotations<F>;\n model.assign(value as F | { [name: string]: any }, {\n reset: self._reset,\n reparent: self._reparent,\n silent: self._silent,\n });\n return model.hasChanged();\n }\n\n 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 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 { type }: { type?: string } = {}\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] as EdmType) ?? '';\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, self._reset, self._reparent);\n } else if (ODataModelOptions.isCollection(current)) {\n // Current is collection\n let 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 self._reset,\n self._reparent\n );\n } else if (Types.isArray(value)) {\n // New value is array\n changed = this._updateCollection<F>(\n self,\n modelField,\n currentCollection,\n value as T[] | { [name: string]: any }[]\n );\n }\n } else if (ODataModelOptions.isModel(current)) {\n // Current is model\n let currentModel = current as ODataModel<F>;\n if (ODataModelOptions.isModel(value)) {\n // New value is model\n changed = attr.set(\n value as ODataModel<F>,\n self._reset,\n self._reparent\n );\n } else if (Types.isPlainObject(value)) {\n changed = this._updateModel<F>(\n self,\n modelField,\n currentModel,\n value as F | { [name: string]: any }\n );\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: self._reset,\n })\n : modelField.modelFactory<F>({\n parent: self,\n value: value,\n reset: self._reset,\n }),\n self._reset,\n self._reparent\n );\n }\n\n // Resolve referentials\n if (!ODataModelOptions.isCollection(attr.get())) {\n let ref = modelField.meta?.resolveReferential(attr.get(), attr);\n if (ref !== null && ref !== undefined) {\n Object.assign(self, ref);\n }\n }\n } else {\n changed = attr.set(value, self._reset, self._reparent);\n }\n\n if (!self._silent && changed) {\n self.events$.emit(\n new ODataModelEvent(ODataModelEventType.Change, {\n attr,\n model: self,\n value,\n previous: current,\n options: { key: modelField.isKey() },\n })\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 (\n BUBBLING.indexOf(event.name) !== -1 &&\n event.bubbling &&\n !event.visited(self)\n ) {\n if (event.model === attr.get()) {\n if (\n event.name === 'change' &&\n attr.navigation &&\n event.options?.key\n ) {\n let 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 { EventEmitter } from '@angular/core';\nimport { forkJoin, Observable, of, throwError } from 'rxjs';\nimport { finalize, map, switchMap } from 'rxjs/operators';\nimport { DEFAULT_VERSION } from '../constants';\nimport { ODataHelper } from '../helper';\nimport {\n EntityKey,\n ODataActionOptions,\n ODataEntities,\n ODataEntitiesAnnotations,\n ODataEntityAnnotations,\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 BUBBLING,\n INCLUDE_DEEP,\n INCLUDE_SHALLOW,\n ModelFieldOptions,\n ODataModelEntry,\n ODataModelEvent,\n ODataModelEventType,\n ODataModelField,\n ODataModelOptions,\n ODataModelState,\n} from './options';\n\nexport class ODataCollection<T, M extends ODataModel<T>>\n implements Iterable<M>\n{\n static model: typeof ODataModel | null = null;\n _parent:\n | [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ]\n | null = null;\n _resource:\n | ODataEntitySetResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | null = null;\n _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$ = new EventEmitter<ODataModelEvent<T>>();\n constructor(\n entities: Partial<T>[] | { [name: string]: any }[] = [],\n {\n parent,\n resource,\n annots,\n model,\n reset = false,\n }: {\n parent?: [ODataModel<any>, ODataModelField<any>];\n resource?: ODataResource<T>;\n annots?: ODataEntitiesAnnotations<T>;\n model?: typeof ODataModel;\n reset?: boolean;\n } = {}\n ) {\n const Klass = this.constructor as typeof ODataCollection;\n if (model === undefined && Klass.model !== null) model = Klass.model;\n if (model === undefined)\n throw new Error('Collection: Collection need model');\n this._model = model;\n\n // Parent\n if (parent !== undefined) {\n this._parent = parent;\n }\n\n // Resource\n if (this._parent === null && resource === undefined)\n resource = this._model.meta.collectionResourceFactory() as\n | ODataEntitySetResource<T>\n | ODataPropertyResource<T>\n | ODataNavigationPropertyResource<T>\n | undefined;\n if (resource !== undefined) {\n this.attach(\n resource as\n | ODataEntitySetResource<T>\n | ODataPropertyResource<T>\n | ODataNavigationPropertyResource<T>\n );\n }\n\n // Annotations\n this._annotations =\n annots ||\n new ODataEntitiesAnnotations(\n 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 return ODataModelOptions.resource<T>(this) as\n | ODataEntitySetResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>;\n }\n\n pushResource(\n resource:\n | ODataEntitySetResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\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.type() !== resource.type() &&\n !this._resource.isSubtypeOf(resource)\n )\n throw new Error(\n `attach: Can't reattach ${this._resource.type()} to ${resource.type()}`\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$.emit(\n new ODataModelEvent(ODataModelEventType.Attach, {\n collection: this,\n previous: current,\n value: resource,\n })\n );\n }\n }\n withResource<R>(\n resource:\n | ODataEntitySetResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>,\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 query = this._resource?.cloneQuery<T>();\n let resource = this._model.meta.collectionResourceFactory(query);\n if (resource === undefined)\n throw new Error(\n 'asEntitySet: Collection does not have associated EntitySet endpoint'\n );\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 let schema = Model.meta.findChildOptions((o) =>\n o.isTypeOf(annots.type as string)\n )?.schema;\n if (schema !== undefined && schema.model !== undefined)\n // Change to child model\n Model = schema.model;\n }\n\n return new Model(data, {\n annots,\n reset,\n parent: [this, null],\n }) as M;\n }\n\n toEntities({\n client_id = false,\n include_navigation = false,\n include_concurrency = false,\n include_computed = false,\n include_key = true,\n include_non_field = false,\n changes_only = false,\n field_mapping = false,\n chain = [],\n }: {\n client_id?: boolean;\n include_navigation?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_key?: boolean;\n include_non_field?: boolean;\n changes_only?: boolean;\n field_mapping?: boolean;\n chain?: (ODataModel<any> | ODataCollection<any, ODataModel<any>>)[];\n } = {}): (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_non_field,\n field_mapping,\n changes_only: changesOnly,\n chain: [this, ...chain],\n });\n });\n }\n\n toJSON() {\n return this.toEntities();\n }\n\n hasChanged({ include_navigation }: { include_navigation?: boolean } = {}) {\n return (\n this._entries.some((e) => e.state !== ODataModelState.Unchanged) ||\n this.models().some((m) => m.hasChanged({ include_navigation }))\n );\n }\n\n clone<C extends ODataCollection<T, M>>() {\n let Ctor = <typeof ODataCollection>this.constructor;\n return new Ctor(this.toEntities(INCLUDE_SHALLOW), {\n resource: this.resource(),\n annots: this.annots(),\n }) as C;\n }\n\n private _request(\n obs$: Observable<ODataEntities<any>>,\n { remove }: { remove?: boolean } = {}\n ): Observable<M[]> {\n this.events$.emit(\n new ODataModelEvent(ODataModelEventType.Request, {\n collection: this,\n options: { observable: obs$ },\n })\n );\n\n return obs$.pipe(\n map(({ entities, annots }) => {\n this._annotations = annots;\n const models = (entities || []).map(\n (entity) => this.modelFactory(entity, { reset: true }) as M\n ) as M[];\n this.assign(models, { reset: true, remove });\n this.events$.emit(\n new ODataModelEvent(ODataModelEventType.Sync, {\n collection: this,\n options: { models, entities, annots },\n })\n );\n return models;\n })\n );\n }\n\n fetch({\n withCount,\n remove,\n ...options\n }: ODataOptions & {\n remove?: boolean;\n withCount?: boolean;\n } = {}): Observable<M[]> {\n const resource = this.resource();\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$, { remove });\n }\n\n fetchAll({\n withCount,\n remove,\n ...options\n }: ODataOptions & {\n remove?: boolean;\n withCount?: boolean;\n } = {}): Observable<M[]> {\n const resource = this.resource();\n\n const obs$ = resource.fetchAll({ withCount, ...options });\n\n return this._request(obs$, { remove });\n }\n\n fetchMany(\n top: number,\n {\n withCount,\n remove,\n ...options\n }: ODataOptions & {\n remove?: boolean;\n withCount?: boolean;\n } = {}\n ): Observable<M[]> {\n const resource = this.resource();\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$, { remove: remove ?? false });\n }\n\n fetchOne({\n withCount,\n remove,\n ...options\n }: ODataOptions & {\n remove?: boolean;\n withCount?: boolean;\n } = {}) {\n return this.fetchMany(1, { withCount, remove, ...options }).pipe(\n map((models) => models[0])\n );\n }\n\n /**\n * Save all models in the collection\n * @param relModel The model is relationship\n * @param method The method to use\n * @param options HttpOptions\n */\n save({\n relModel = false,\n method,\n ...options\n }: ODataOptions & {\n relModel?: boolean;\n method?: 'update' | 'modify';\n } = {}): Observable<this> {\n const resource = this.resource();\n if (resource instanceof ODataPropertyResource)\n return throwError(\n () => new Error('save: Resource is ODataPropertyResource')\n );\n\n let toDestroyEntity: M[] = [];\n let toRemoveReference: M[] = [];\n let toDestroyContained: M[] = [];\n let toCreateEntity: M[] = [];\n let toAddReference: M[] = [];\n let toCreateContained: M[] = [];\n let toUpdateEntity: M[] = [];\n let toUpdateContained: M[] = [];\n\n this._entries.forEach(({ model, state }) => {\n if (state === ODataModelState.Removed) {\n if (relModel) {\n toDestroyEntity.push(model);\n } else if (!model.isNew()) {\n toRemoveReference.push(model);\n } else {\n toDestroyContained.push(model);\n }\n } else if (state === ODataModelState.Added) {\n if (relModel) {\n toCreateEntity.push(model);\n } else if (!model.isNew()) {\n toAddReference.push(model);\n } else {\n toCreateContained.push(model);\n }\n } else if (model.hasChanged()) {\n toUpdateEntity.push(model);\n }\n });\n if (\n toDestroyEntity.length > 0 ||\n toRemoveReference.length > 0 ||\n toDestroyContained.length > 0 ||\n toCreateEntity.length > 0 ||\n toAddReference.length > 0 ||\n toCreateContained.length > 0 ||\n toUpdateEntity.length > 0 ||\n toUpdateContained.length > 0\n ) {\n const obs$ = forkJoin([\n ...toDestroyEntity.map((m) => m.asEntity((e) => e.destroy(options))),\n ...toRemoveReference.map((m) => this.removeReference(m, options)),\n ...toDestroyContained.map((m) => m.destroy(options)),\n ...toCreateEntity.map((m) =>\n m.asEntity((e) => e.save({ method: 'create', ...options }))\n ),\n ...toAddReference.map((m) => this.addReference(m, options)),\n ...toCreateContained.map((m) =>\n m.save({ method: 'create', ...options })\n ),\n ...toUpdateEntity.map((m) =>\n m.asEntity((e) => e.save({ method, ...options }))\n ),\n ...toUpdateContained.map((m) => m.save({ method, ...options })),\n ]);\n this.events$.emit(\n new ODataModelEvent(ODataModelEventType.Request, {\n collection: this,\n options: { observable: obs$ },\n })\n );\n return obs$.pipe(\n map(() => {\n this._entries = this._entries\n .filter((entry) => entry.state !== ODataModelState.Removed)\n .map((entry) => ({ ...entry, state: ODataModelState.Unchanged }));\n this.events$.emit(\n new ODataModelEvent(ODataModelEventType.Sync, { collection: this })\n );\n return this;\n })\n );\n }\n return of(this);\n }\n\n private addReference(model: M, options?: ODataOptions): Observable<M> {\n const resource = this.resource();\n if (!model.isNew() && resource instanceof ODataNavigationPropertyResource) {\n return resource\n .reference()\n .add(\n model._meta.entityResource(model) as ODataEntityResource<T>,\n options\n )\n .pipe(map(() => model));\n }\n return of(model);\n }\n\n private _addModel(\n model: M,\n {\n silent = false,\n reset = false,\n reparent = false,\n merge = false,\n position = -1,\n }: {\n silent?: boolean;\n reset?: boolean;\n reparent?: boolean;\n merge?: boolean;\n position?: number;\n } = {}\n ): M {\n const key = model.key();\n let entry = this._findEntry({\n model,\n key,\n cid: (<any>model)[this._model.meta.cid],\n });\n if (entry !== undefined && entry.state !== ODataModelState.Removed) {\n if (merge) {\n entry.model.assign(model.toEntity() 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 // Subscribe\n this._link(entry);\n // Now add\n if (position >= 0) this._entries.splice(position, 0, entry);\n else this._entries.push(entry);\n\n if (!silent) {\n model.events$.emit(\n new ODataModelEvent(ODataModelEventType.Add, {\n model,\n collection: this,\n })\n );\n }\n return entry.model;\n }\n\n private addModel(\n model: M,\n {\n silent = false,\n reset = false,\n reparent = false,\n merge = false,\n position = -1,\n }: {\n silent?: boolean;\n reset?: boolean;\n reparent?: boolean;\n merge?: boolean;\n position?: number;\n } = {}\n ): M {\n if (position < 0) position = this._bisect(model);\n const added = this._addModel(model, {\n silent,\n reset,\n merge,\n position,\n reparent,\n });\n if (!silent && added !== undefined) {\n this.events$.emit(\n new ODataModelEvent(ODataModelEventType.Update, {\n collection: this,\n options: { added: [added], removed: [], merged: [] },\n })\n );\n }\n return added;\n }\n\n add(\n model: M,\n {\n silent = false,\n reparent = false,\n server = true,\n merge = false,\n position = -1,\n }: {\n silent?: boolean;\n reparent?: boolean;\n server?: boolean;\n merge?: boolean;\n position?: number;\n } = {}\n ): Observable<M> {\n if (server) {\n return this.addReference(model).pipe(\n map((model) => {\n return this.addModel(model, {\n silent,\n position,\n reparent,\n merge,\n reset: true,\n });\n })\n );\n } else {\n return of(this.addModel(model, { silent, position, merge, reparent }));\n }\n }\n\n private removeReference(model: M, options?: ODataOptions): Observable<M> {\n let resource = this.resource();\n if (!model.isNew() && resource instanceof ODataNavigationPropertyResource) {\n let target =\n this._model.meta.api.options.deleteRefBy === 'id'\n ? (model._meta.entityResource(model) as ODataEntityResource<T>)\n : undefined;\n if (this._model.meta.api.options.deleteRefBy === 'path') {\n resource = resource.key(model.key());\n }\n return resource\n .reference()\n .remove(target, options)\n .pipe(map(() => model));\n }\n return of(model);\n }\n\n private _removeModel(\n model: M,\n {\n silent = false,\n reset = false,\n }: { silent?: boolean; reset?: boolean } = {}\n ): M {\n const key = model.key();\n let entry = this._findEntry({\n model,\n key,\n cid: (<any>model)[this._model.meta.cid],\n });\n if (entry === undefined || entry.state === ODataModelState.Removed) {\n return model;\n }\n\n // Emit Event\n if (!silent)\n model.events$.emit(\n new ODataModelEvent(ODataModelEventType.Remove, {\n model,\n collection: this,\n })\n );\n\n // Now remove\n const index = this._entries.indexOf(entry);\n this._entries.splice(index, 1);\n if (!(reset || entry.state === ODataModelState.Added)) {\n // Move to end of array and mark as removed\n entry.state = ODataModelState.Removed;\n this._entries.push(entry);\n }\n this._unlink(entry);\n return entry.model;\n }\n\n private removeModel(\n model: M,\n {\n silent = false,\n reset = false,\n }: { silent?: boolean; reset?: boolean } = {}\n ): M {\n const removed = this._removeModel(model, { silent, reset });\n if (!silent && removed !== undefined) {\n this.events$.emit(\n new ODataModelEvent(ODataModelEventType.Update, {\n collection: this,\n options: { added: [], removed: [removed], merged: [] },\n })\n );\n }\n return removed;\n }\n\n remove(\n model: M,\n {\n silent = false,\n server = true,\n }: { silent?: boolean; server?: boolean } = {}\n ): Observable<M> {\n if (server) {\n return this.removeReference(model).pipe(\n map((model) => this.removeModel(model, { silent, reset: true }))\n );\n } else {\n return of(this.removeModel(model, { silent }));\n }\n }\n\n private _moveModel(model: M, position: number): M {\n const key = model.key();\n let entry = this._findEntry({\n model,\n key,\n cid: (<any>model)[this._model.meta.cid],\n });\n if (entry === undefined || entry.state === ODataModelState.Removed) {\n return 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 let toAdd: M[] = [];\n let toChange: M[] = [];\n let toRemove: M[] = [];\n let index = Number(pathArray[0]);\n const model = this.models()[index];\n const entry = this._findEntry({ model });\n if (entry !== undefined) {\n //TODO: Remove/Add or Merge?\n // Merge\n entry.model.assign(\n value.toEntity({ client_id: true, ...INCLUDE_DEEP })\n );\n if (entry.model.hasChanged()) toChange.push(model);\n } else {\n // Add\n this._addModel(value, { reparent: true });\n toAdd.push(model);\n }\n this.events$.emit(\n new ODataModelEvent(ODataModelEventType.Update, {\n collection: this,\n options: { added: toAdd, removed: toRemove, changed: toChange },\n })\n );\n return value;\n }\n }\n\n get(path: number): M | undefined;\n get(path: string | string[]): any;\n get(path: any): any {\n const 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$.emit(\n new ODataModelEvent(ODataModelEventType.Reset, {\n collection: this,\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\n clear({ silent = false }: { silent?: boolean } = {}) {\n let toRemove: M[] = this.models();\n toRemove.forEach((m) => {\n this._removeModel(m, { silent });\n });\n this._entries = [];\n if (!silent) {\n this.events$.emit(\n new ODataModelEvent(ODataModelEventType.Update, {\n collection: this,\n options: { removed: toRemove },\n })\n );\n }\n }\n\n assign(\n objects: Partial<T>[] | { [name: string]: any }[] | M[],\n {\n remove = true,\n reset = false,\n reparent = false,\n silent = false,\n }: {\n remove?: boolean;\n reset?: boolean;\n reparent?: boolean;\n silent?: boolean;\n } = {}\n ) {\n const Model = this._model;\n const offset = remove ? 0 : this.length;\n\n let toAdd: [M, number][] = [];\n let toChange: [M, number][] = [];\n let toRemove: [M, number][] = [];\n let toSort: [M, number][] = [];\n let modelMap: string[] = [];\n objects.forEach((obj, index) => {\n const isModel = ODataModelOptions.isModel(obj);\n const position = index + offset;\n const key =\n Model !== null && Model.meta ? Model.meta.resolveKey(obj) : undefined;\n const cid =\n Model.meta.cid in obj ? (<any>obj)[Model.meta.cid] : undefined;\n // Try find entry\n const entry = isModel\n ? this._findEntry({ model: obj as M }) // By Model\n : this._findEntry({ cid, key }); // By Cid or Key\n\n let model: M;\n if (entry !== undefined) {\n // Merge\n model = entry.model;\n if (model !== obj) {\n // Get entity from model\n if (isModel) {\n const entity = (obj as M).toEntity({\n client_id: true,\n ...INCLUDE_DEEP,\n });\n model.assign(entity, { reset, silent });\n } else {\n const helper = this._annotations.helper;\n const annots = new ODataEntityAnnotations<T>(\n helper,\n helper.annotations(obj)\n );\n const entity = annots.attributes(obj, 'full');\n model._annotations = annots;\n model.assign(entity, { reset, silent });\n }\n // Model Change?\n if (model.hasChanged()) toChange.push([model, position]);\n }\n // Has Sort or Index Change?\n if (toSort.length > 0 || position !== this.models().indexOf(model)) {\n toSort.push([model, position]);\n }\n } else {\n // Add\n model = isModel\n ? (obj as M)\n : this.modelFactory(obj as Partial<T> | { [name: string]: any });\n toAdd.push([model, position]);\n }\n modelMap.push((<any>model)[Model.meta.cid]);\n });\n\n if (remove) {\n this._entries.forEach((entry, position) => {\n if (modelMap.indexOf((<any>entry.model)[Model.meta.cid]) === -1)\n toRemove.push([entry.model, position]);\n });\n }\n\n // Apply remove, add and sort\n toRemove.forEach(([model, position]) => {\n this._removeModel(model, { silent, reset });\n });\n toAdd.forEach(([model, position]) => {\n this._addModel(model, { silent, reset, reparent, position });\n });\n toSort.forEach(([model, position]) => {\n this._moveModel(model, position);\n });\n\n if (\n (!silent &&\n (toAdd.length > 0 ||\n toRemove.length > 0 ||\n toChange.length > 0 ||\n toSort.length > 0)) ||\n reset\n ) {\n this._sortBy = null;\n this.events$.emit(\n new ODataModelEvent(\n reset ? ODataModelEventType.Reset : ODataModelEventType.Update,\n {\n collection: this,\n options: {\n added: toAdd,\n removed: toRemove,\n changed: toChange,\n sorted: toSort,\n },\n }\n )\n );\n }\n }\n\n query(\n ctx: (q: ODataQueryOptionsHandler<T>, s?: ODataStructuredType<T>) => void\n ) {\n const resource = this.resource();\n resource.query(ctx);\n this.attach(resource);\n return this;\n }\n\n callFunction<P, R>(\n name: string,\n params: P | null,\n responseType: 'property' | 'model' | 'collection' | 'none',\n { ...options }: {} & ODataFunctionOptions<R> = {}\n ): Observable<R | ODataModel<R> | ODataCollection<R, ODataModel<R>> | null> {\n const resource = this.resource();\n if (resource instanceof ODataEntitySetResource) {\n const func = resource.function<P, R>(name);\n func.query((q) => q.apply(options));\n switch (responseType) {\n case 'property':\n return func.callProperty(params, options);\n case 'model':\n return func.callModel(params, options);\n case 'collection':\n return func.callCollection(params, options);\n default:\n return func.call(params, { responseType, ...options });\n }\n }\n return throwError(\n () =>\n new Error(`callFunction: Can't function without ODataEntitySetResource`)\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(`callAction: Can't action without ODataEntitySetResource`)\n );\n }\n const action = resource.action<P, R>(name);\n action.query((q) => q.apply(options));\n switch (responseType) {\n case 'property':\n return action.callProperty(params, options);\n case 'model':\n return action.callModel(params, options);\n case 'collection':\n return action.callCollection(params, options);\n default:\n return action.call(params, { responseType, ...options });\n }\n }\n\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 (\n BUBBLING.indexOf(event.name) !== -1 &&\n event.bubbling &&\n !event.visited(this)\n ) {\n if (event.model === entry.model) {\n if (event.name === 'destroy') {\n this.removeModel(entry.model, { reset: true });\n } else if (event.name === 'change' && event.options?.key) {\n entry.key = entry.model.key();\n }\n }\n\n const index = this.models().indexOf(entry.model);\n this.events$.emit(event.push(this, index));\n }\n }\n );\n }\n\n private _findEntry({\n model,\n cid,\n key,\n }: {\n model?: ODataModel<T>;\n cid?: string;\n key?: EntityKey<T> | { [name: string]: any };\n } = {}) {\n return this._entries.find((entry) => {\n const byModel = model !== undefined && entry.model.equals(model);\n const byCid =\n cid !== undefined && (<any>entry.model)[this._model.meta.cid] === cid;\n const byKey =\n key !== undefined &&\n entry.key !== undefined &&\n Types.isEqual(entry.key, key);\n return byModel || byCid || byKey;\n });\n }\n\n // Collection functions\n equals(other: ODataCollection<T, ODataModel<T>>): 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 let models = this.models();\n return {\n next(): IteratorResult<M> {\n return {\n done: pointer === models.length,\n value: models[pointer++],\n };\n },\n };\n }\n\n filter(\n predicate: (value: M, index: number, array: M[]) => unknown,\n thisArg?: any\n ): M[] {\n return this.models().filter(predicate);\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 thisArg?: any\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 contains(model: M) {\n return this.some((m) => m.equals(model));\n }\n\n indexOf(model: M): number {\n const models = this.models();\n const m = models.find((m) => m.equals(model));\n return m === undefined ? -1 : models.indexOf(m);\n }\n\n isEmpty() {\n // Local length and if exists remote length\n return (\n this.length === 0 &&\n this.annots().count !== undefined &&\n this.annots().count === 0\n );\n }\n\n //#region Sort\n private _bisect(model: M) {\n let index = -1;\n if (this._sortBy !== null) {\n for (index = 0; index < this._entries.length; index++) {\n if (this._compare(model, this._entries[index], this._sortBy, 0) < 0) {\n return index;\n }\n }\n }\n return index;\n }\n\n private _compare(\n e1: ODataModelEntry<T, M> | M,\n e2: ODataModelEntry<T, M> | M,\n by: { field: string | keyof T; order?: 1 | -1 }[],\n index: number\n ): number {\n let m1 = ODataModelOptions.isModel(e1)\n ? (e1 as M)\n : (e1 as ODataModelEntry<T, M>).model;\n let m2 = ODataModelOptions.isModel(e2)\n ? (e2 as M)\n : (e2 as ODataModelEntry<T, M>).model;\n let value1 = m1.get(by[index].field as string);\n let value2 = m2.get(by[index].field as string);\n let result: number = 0;\n\n if (value1 == null && value2 != null) result = -1;\n else if (value1 != null && value2 == null) result = 1;\n else if (value1 == null && value2 == null) result = 0;\n else if (typeof value1 == 'string' || value1 instanceof String) {\n if (value1.localeCompare && value1 != value2) {\n return (by[index].order || 1) * value1.localeCompare(value2);\n }\n } else {\n result = value1 < value2 ? -1 : 1;\n }\n\n if (value1 == value2) {\n return by.length - 1 > index ? this._compare(e1, e2, by, index + 1) : 0;\n }\n\n return (by[index].order || 1) * result;\n }\n\n _sortBy: { field: string | keyof T; order?: 1 | -1 }[] | null = null;\n isSorted() {\n return this._sortBy !== null;\n }\n\n sort(\n by: { field: string | keyof T; order?: 1 | -1 }[],\n { silent }: { silent?: boolean } = {}\n ) {\n this._sortBy = by;\n this._entries = this._entries.sort(\n (e1: ODataModelEntry<T, M>, e2: ODataModelEntry<T, M>) =>\n this._compare(e1, e2, by, 0)\n );\n if (!silent) {\n this.events$.emit(\n new ODataModelEvent(ODataModelEventType.Update, {\n collection: this,\n })\n );\n }\n }\n //#endregion\n}\n","import { EventEmitter } from '@angular/core';\nimport { forkJoin, NEVER, Observable, of, throwError } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\nimport { DEFAULT_VERSION } from '../constants';\nimport { ODataHelper } from '../helper';\nimport {\n EntityKey,\n ODataActionOptions,\n ODataEntity,\n ODataEntityAnnotations,\n ODataEntityResource,\n ODataFunctionOptions,\n ODataNavigationPropertyResource,\n ODataOptions,\n ODataPropertyResource,\n ODataQueryArgumentsOptions,\n ODataQueryOptionsHandler,\n ODataResource,\n ODataSingletonResource,\n} from '../resources';\nimport { ODataStructuredType } from '../schema';\nimport { Objects, Strings, Types } from '../utils';\nimport { ODataCollection } from './collection';\nimport {\n INCLUDE_DEEP,\n INCLUDE_SHALLOW,\n ModelOptions,\n ODataModelEvent,\n ODataModelField,\n ODataModelOptions,\n ODataModelAttribute,\n ODataModelEventType,\n} from './options';\n\n// @dynamic\nexport class ODataModel<T> {\n // Properties\n static options: ModelOptions;\n static meta: ODataModelOptions<any>;\n static buildMeta<T>({\n options,\n schema,\n }: {\n options?: ModelOptions;\n schema: ODataStructuredType<T>;\n }) {\n if (options === undefined) {\n let fields = schema\n .fields({ include_navigation: true, include_parents: true })\n .reduce((acc, 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 options = { fields };\n }\n this.meta = new ODataModelOptions<T>({ options, schema });\n }\n // Parent\n _parent:\n | [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ]\n | null = null;\n _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> | null = null;\n _reset: boolean = false;\n _reparent: boolean = false;\n _silent: boolean = false;\n _meta: ODataModelOptions<any>;\n // Events\n events$ = new EventEmitter<ODataModelEvent<T>>();\n\n constructor(\n data: Partial<T> | { [name: string]: any } = {},\n {\n parent,\n resource,\n annots,\n reset = false,\n }: {\n parent?: [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ];\n resource?: ODataResource<T>;\n annots?: ODataEntityAnnotations<T>;\n reset?: boolean;\n } = {}\n ) {\n const Klass = this.constructor as typeof ODataModel;\n if (Klass.meta === undefined)\n throw new Error(`ODataModel: Can't create model without metadata`);\n this._meta = Klass.meta;\n this._meta.bind(this, { parent, resource, annots });\n\n // Client Id\n (<any>this)[this._meta.cid] =\n (<any>data)[this._meta.cid] ||\n Strings.uniqueId({ prefix: `${Klass.meta.schema.name.toLowerCase()}-` });\n\n let attrs = this.annots().attributes(data, 'full');\n let defaults = this.defaults();\n\n this.assign(Objects.merge(defaults, attrs as { [name: string]: any }), {\n reset,\n });\n }\n\n //#region Resources\n resource():\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T> {\n return ODataModelOptions.resource<T>(this) as\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T>;\n }\n\n pushResource(\n resource:\n | ODataEntityResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>\n | ODataSingletonResource<T>\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.field(name);\n if (field === undefined || !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.field(name);\n if (field === undefined || 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 return this._meta.attach(this, resource);\n }\n //#endregion\n\n schema() {\n return this._meta.schema;\n }\n\n annots() {\n return (\n this._annotations ??\n new ODataEntityAnnotations<T>(ODataHelper[DEFAULT_VERSION])\n );\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?: { [key: string]: any };\n validate({\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}) {\n return this._meta.validate(this, { method, navigation });\n }\n\n isValid({\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n } = {}): boolean {\n this._errors = this.validate({ method, navigation });\n if (this._errors !== undefined)\n this.events$.emit(\n new ODataModelEvent(ODataModelEventType.Invalid, {\n model: this,\n value: this._errors,\n options: { method },\n })\n );\n return this._errors === undefined;\n }\n\n defaults() {\n return this._meta.defaults() || {};\n }\n\n toEntity({\n client_id = false,\n include_navigation = false,\n include_concurrency = false,\n include_computed = false,\n include_key = true,\n include_non_field = false,\n changes_only = false,\n field_mapping = false,\n chain = [],\n }: {\n client_id?: boolean;\n include_navigation?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_key?: boolean;\n include_non_field?: boolean;\n changes_only?: boolean;\n field_mapping?: boolean;\n chain?: (ODataModel<any> | ODataCollection<any, ODataModel<any>>)[];\n } = {}): T | { [name: string]: any } {\n return this._meta.toEntity(this, {\n client_id,\n include_navigation,\n include_concurrency,\n include_computed,\n include_key,\n include_non_field,\n changes_only,\n field_mapping,\n chain,\n });\n }\n\n toJSON() {\n return this.toEntity();\n }\n\n set(path: string | string[], value: any, { type }: { type?: string } = {}) {\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: 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: 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?: 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 //this._changes.clear();\n //this._relations.clear();\n if (!silent) {\n this.events$.emit(\n new ODataModelEvent(ODataModelEventType.Update, {\n model: this,\n })\n );\n }\n }\n\n assign(\n entity: Partial<T> | { [name: string]: any },\n {\n reset = false,\n reparent = false,\n silent = false,\n }: {\n reset?: boolean;\n reparent?: boolean;\n silent?: boolean;\n } = {}\n ) {\n return this._meta.assign(this, entity, { reset, silent, reparent });\n }\n\n clone<M extends ODataModel<T>>() {\n let Ctor = <typeof ODataModel>this.constructor;\n return new Ctor(this.toEntity(INCLUDE_SHALLOW), {\n resource: this.resource() as ODataResource<T>,\n annots: this.annots(),\n }) as M;\n }\n\n private _request(obs$: Observable<ODataEntity<any>>): Observable<this> {\n this.events$.emit(\n new ODataModelEvent(ODataModelEventType.Request, {\n model: this,\n options: { observable: obs$ },\n })\n );\n return obs$.pipe(\n map(({ entity, annots }) => {\n this._annotations = annots;\n this.assign(annots.attributes(entity || {}, 'full'), {\n reset: true,\n });\n this.events$.emit(\n new ODataModelEvent(ODataModelEventType.Sync, {\n model: this,\n options: { entity, annots },\n })\n );\n return this;\n })\n );\n }\n\n fetch({\n ...options\n }: ODataOptions & {\n options?: ODataOptions;\n } = {}): Observable<this> {\n let resource = this.resource();\n if (resource === undefined)\n return throwError(() => new Error('fetch: Resource is undefined'));\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$);\n }\n\n save({\n method,\n navigation = false,\n validate = true,\n ...options\n }: ODataOptions & {\n method?: 'create' | 'update' | 'modify';\n navigation?: boolean;\n validate?: boolean;\n options?: ODataOptions;\n } = {}): Observable<this> {\n let resource = this.resource();\n if (resource === undefined)\n return throwError(() => new Error('save: Resource is undefined'));\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 }) as T;\n return this._request(\n (method === 'create'\n ? resource.create(_entity, options)\n : method === 'modify'\n ? resource.modify(_entity, { etag: this.annots().etag, ...options })\n : resource.update(_entity, { etag: this.annots().etag, ...options })\n ).pipe(\n map(({ entity, annots }) => ({ entity: entity || _entity, annots }))\n )\n );\n }\n\n destroy({\n ...options\n }: ODataOptions & {\n options?: ODataOptions;\n } = {}): Observable<this> {\n let resource = this.resource();\n if (resource === undefined)\n return throwError(() => new Error('destroy: Resource is undefined'));\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 _entity = this.toEntity({ field_mapping: true }) as T;\n const obs$ = resource\n .destroy({ etag: this.annots().etag, ...options })\n .pipe(\n map(({ entity, annots }) => ({ entity: entity || _entity, annots }))\n );\n return this._request(obs$).pipe(\n tap(() =>\n this.events$.emit(\n new ODataModelEvent(ODataModelEventType.Destroy, { model: this })\n )\n )\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 ) {\n return this._meta.query(this, this.resource(), ctx) as this;\n }\n\n /**\n * Perform a check on the internal state of the model and return true if the model is changed.\n * @param include_navigation Check in navigation properties\n * @returns true if the model has changed, false otherwise\n */\n hasChanged({\n include_navigation = false,\n }: { include_navigation?: boolean } = {}) {\n return this._meta.hasChanged(this, { include_navigation });\n }\n\n 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 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.apply(options));\n switch (responseType) {\n case 'property':\n return func.callProperty(params, options);\n case 'model':\n return func.callModel(params, options);\n case 'collection':\n return func.callCollection(params, options);\n case 'blob':\n return func.callBlob(params, options);\n case 'arraybuffer':\n return func.callArraybuffer(params, options);\n default:\n return func.call(params, { responseType, ...options });\n }\n }\n\n callAction<P, R>(\n name: string,\n params: P | null,\n responseType?:\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.apply(options));\n switch (responseType) {\n case 'property':\n return action.callProperty(params, options);\n case 'model':\n return action.callModel(params, options);\n case 'collection':\n return action.callCollection(params, options);\n case 'blob':\n return action.callBlob(params, options);\n case 'arraybuffer':\n return action.callArraybuffer(params, options);\n default:\n return action.call(params, { responseType, ...options });\n }\n }\n\n // Cast\n cast<S>(type: string) {\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 });\n }\n\n fetchNavigationProperty<S>(\n name: keyof T | string,\n responseType: 'model' | 'collection',\n { ...options }: {} & ODataQueryArgumentsOptions<S> = {}\n ): Observable<ODataModel<S> | ODataCollection<S, ODataModel<S>> | null> {\n const nav = this.navigationProperty<S>(\n name\n ) as ODataNavigationPropertyResource<S>;\n nav.query((q) => q.apply(options));\n switch (responseType) {\n case 'model':\n return nav.fetchModel(options);\n case 'collection':\n return nav.fetchCollection(options);\n }\n }\n\n // Get Value\n getValue<P>(\n name: keyof T | string,\n options?: ODataOptions\n ): Observable<P | ODataModel<P> | ODataCollection<P, ODataModel<P>> | null> {\n const field = this._meta.field(name);\n if (field === undefined || field.navigation)\n throw Error(`getValue: Can't find property ${name as string}`);\n\n let value = (this as any)[name] as\n | P\n | ODataModel<P>\n | ODataCollection<P, ODataModel<P>>;\n if (value === undefined) {\n const prop = field.resourceFactory(\n this.resource()\n ) as ODataPropertyResource<P>;\n return field.collection\n ? prop\n .fetchCollection(options)\n .pipe(tap((c) => this.assign({ [name]: c }, { silent: true })))\n : field.isStructuredType()\n ? prop\n .fetchModel(options)\n .pipe(tap((c) => this.assign({ [name]: c }, { silent: true })))\n : prop\n .fetchProperty(options)\n .pipe(tap((c) => this.assign({ [name]: c }, { silent: true })));\n }\n return of(value as P);\n }\n\n // Set Reference\n setReference<N>(\n name: keyof T | string,\n model: ODataModel<N> | ODataCollection<N, ODataModel<N>> | null,\n options?: ODataOptions\n ): Observable<this> {\n const reference = (\n this.navigationProperty<N>(name) as ODataNavigationPropertyResource<N>\n ).reference();\n\n const etag = this.annots().etag;\n let obs$ = NEVER as Observable<any>;\n if (model instanceof ODataModel) {\n obs$ = reference.set(\n model._meta.entityResource(model) as ODataEntityResource<N>,\n { etag, ...options }\n );\n } else if (model instanceof ODataCollection) {\n obs$ = forkJoin(\n model\n .models()\n .map((m) =>\n reference.add(\n m._meta.entityResource(m) as ODataEntityResource<N>,\n options\n )\n )\n );\n } else if (model === null) {\n obs$ = reference.unset({ etag, ...options });\n }\n this.events$.emit(\n new ODataModelEvent(ODataModelEventType.Request, {\n model: this,\n options: { observable: obs$ },\n })\n );\n return obs$.pipe(\n map((model) => {\n this.assign({ [name]: model });\n this.events$.emit(\n new ODataModelEvent(ODataModelEventType.Sync, { model: this })\n );\n return this;\n })\n );\n }\n\n getReference<P>(\n name: keyof T | string\n ): ODataModel<P> | ODataCollection<P, ODataModel<P>> | null {\n const field = this._meta.field<P>(name);\n if (field === undefined || !field.navigation)\n throw Error(\n `getReference: Can't find navigation property ${name as string}`\n );\n\n let model = (this as any)[name] as\n | ODataModel<P>\n | ODataCollection<P, ODataModel<P>>\n | null;\n if (model === null) return null;\n if (model === undefined) {\n if (field.collection) {\n model = field.collectionFactory({ parent: this });\n } else {\n const value = this.referenced(field) as P;\n model =\n value === null ? null : field.modelFactory({ parent: this, value });\n }\n (this as any)[name] = model;\n }\n return model;\n }\n\n // Model functions\n equals(other: ODataModel<T>): boolean {\n const thisKey = this.key();\n const otherKey = other.key();\n return (\n this === other ||\n (typeof this === typeof other &&\n ((<any>this)[this._meta.cid] === (<any>other)[this._meta.cid] ||\n (thisKey !== undefined &&\n otherKey !== undefined &&\n Types.isEqual(thisKey, otherKey))))\n );\n }\n\n get [Symbol.toStringTag]() {\n return 'Model';\n }\n\n collection() {\n return this._parent !== null &&\n ODataModelOptions.isCollection(this._parent[0])\n ? (this._parent[0] as ODataCollection<T, ODataModel<T>>)\n : undefined;\n }\n\n next(): ODataModel<T> | undefined {\n return this.collection()?.next(this);\n }\n\n prev(): ODataModel<T> | undefined {\n return this.collection()?.prev(this);\n }\n}\n\nexport const RESERVED_FIELD_NAMES = Object.getOwnPropertyNames(\n ODataModel.prototype\n);\n","import {\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 * 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 }\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/index';\nimport { DEFAULT_VERSION } from './constants';\nimport { ODataCollection, ODataModel, ODataModelOptions } from './models/index';\nimport { ODataApiOptions } from './options';\nimport {\n ODataActionResource,\n ODataBatchResource,\n ODataEntityResource,\n ODataEntitySetResource,\n ODataFunctionResource,\n ODataMetadataResource,\n ODataNavigationPropertyResource,\n ODataOptions,\n ODataPathSegments,\n ODataQueryOptions,\n ODataRequest,\n ODataResource,\n ODataResponse,\n ODataSegment,\n ODataSingletonResource,\n} from './resources/index';\nimport {\n EDM_PARSERS,\n ODataCallable,\n ODataEntitySet,\n ODataEnumType,\n ODataSchema,\n ODataStructuredType,\n} from './schema';\nimport { ODataEntityService } from './services/entity';\nimport {\n ApiConfig,\n ApiOptions,\n EdmType,\n NONE_PARSER,\n Parser,\n PathSegment,\n QueryOption,\n} from './types';\n\n/**\n * Api abstraction for consuming OData services.\n */\nexport class ODataApi {\n requester?: (request: ODataRequest<any>) => Observable<any>;\n serviceRootUrl: string;\n metadataUrl: string;\n name?: string;\n version: string;\n default: boolean;\n creation: Date;\n // Options\n options: ODataApiOptions;\n // Cache\n cache!: ODataCache;\n // Error Handler\n errorHandler?: (error: any, caught: Observable<any>) => Observable<never>;\n // Base Parsers\n parsers: Map<string, Parser<any>>;\n // Schemas\n schemas: ODataSchema[];\n\n constructor(config: ApiConfig) {\n this.serviceRootUrl = config.serviceRootUrl;\n if (this.serviceRootUrl.indexOf('?') != -1)\n throw new Error(\n \"The 'serviceRootUrl' should not contain query string. Please use 'params' to add extra parameters\"\n );\n if (!this.serviceRootUrl.endsWith('/')) this.serviceRootUrl += '/';\n this.metadataUrl = `${this.serviceRootUrl}$metadata`;\n this.name = config.name;\n this.version = config.version || DEFAULT_VERSION;\n this.default = config.default || false;\n this.creation = config.creation || new Date();\n this.options = new ODataApiOptions(\n Object.assign(<ApiOptions>{ version: this.version }, config.options || {})\n );\n\n this.cache = (config.cache as ODataCache) || new ODataInMemoryCache();\n this.errorHandler = config.errorHandler;\n\n this.parsers = 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 parserForType: (type: string | EdmType) => this.parserForType(type),\n findOptionsForType: (type: string) => this.findOptionsForType(type),\n });\n });\n }\n\n fromJSON<P, R>(json: {\n segments: ODataSegment[];\n options: { [name: string]: any };\n }): ODataActionResource<P, R> | ODataFunctionResource<P, R>;\n fromJSON<E>(json: {\n segments: ODataSegment[];\n options: { [name: string]: any };\n }):\n | ODataEntityResource<E>\n | ODataEntitySetResource<E>\n | ODataNavigationPropertyResource<E>\n | ODataSingletonResource<E>;\n fromJSON(json: {\n segments: ODataSegment[];\n options: { [name: string]: any };\n }) {\n const segments = new ODataPathSegments(json.segments);\n const query = new ODataQueryOptions(json.options);\n switch (segments.last()?.name as 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>(path: string) {\n const entitySet = this.findEntitySetByName(path);\n const schema =\n entitySet !== undefined\n ? this.findStructuredTypeForType<T>(entitySet.entityType)\n : undefined;\n return ODataSingletonResource.factory<T>(this, { path, schema });\n }\n\n /**\n * Build an entity set resource.\n * @param path Name of the entity set\n * @returns\n */\n entitySet<T>(path: string): ODataEntitySetResource<T> {\n const entitySet = this.findEntitySetByName(path);\n const schema =\n entitySet !== undefined\n ? this.findStructuredTypeForType<T>(entitySet.entityType)\n : undefined;\n return ODataEntitySetResource.factory<T>(this, { path, schema });\n }\n\n /**\n * Unbound Action\n * @param {string} path?\n * @returns ODataActionResource\n */\n action<P, R>(path: string): ODataActionResource<P, R> {\n const schema = this.findCallableForType<R>(path);\n return ODataActionResource.factory<P, R>(this, { path, schema });\n }\n\n /**\n * Unbound Function\n * @param {string} path?\n * @returns ODataFunctionResource\n */\n function<P, R>(path: string): ODataFunctionResource<P, R> {\n const schema = this.findCallableForType<R>(path);\n return ODataFunctionResource.factory<P, R>(this, { path, schema });\n }\n\n //request(req: ODataRequest<any>): Observable<any> {\n 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 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 forType: {\n enum: Map<string, ODataEnumType<any> | undefined>;\n structured: Map<string, ODataStructuredType<any> | undefined>;\n callable: Map<string, ODataCallable<any> | undefined>;\n entitySet: Map<string, ODataEntitySet | undefined>;\n parser: Map<string, Parser<any>>;\n options: Map<string, ODataModelOptions<any> | undefined>;\n };\n byName: {\n enum: Map<string, ODataEnumType<any> | undefined>;\n structured: Map<string, ODataStructuredType<any> | undefined>;\n callable: Map<string, ODataCallable<any> | undefined>;\n entitySet: Map<string, ODataEntitySet | undefined>;\n };\n } = {\n forType: {\n enum: new Map<string, ODataEnumType<any> | undefined>(),\n structured: new Map<string, ODataStructuredType<any> | undefined>(),\n callable: new Map<string, ODataCallable<any> | undefined>(),\n entitySet: new Map<string, ODataEntitySet | undefined>(),\n parser: new Map<string, Parser<any>>(),\n options: new Map<string, ODataModelOptions<any> | undefined>(),\n },\n byName: {\n enum: new Map<string, ODataEnumType<any> | undefined>(),\n structured: new Map<string, ODataStructuredType<any> | undefined>(),\n callable: new Map<string, ODataCallable<any> | undefined>(),\n entitySet: new Map<string, ODataEntitySet | undefined>(),\n },\n };\n\n private findSchemaForType(type: string) {\n const schemas = this.schemas.filter((s) => s.isNamespaceOf(type));\n if (schemas.length === 0) return undefined;\n if (schemas.length === 1) return schemas[0];\n return schemas\n .sort((s1, s2) => s1.namespace.length - s2.namespace.length)\n .pop();\n }\n\n public findEnumTypeForType<T>(type: string) {\n if (this.memo.forType.enum.has(type)) {\n return this.memo.forType.enum.get(type) as ODataEnumType<T> | undefined;\n }\n const enumType = this.findSchemaForType(type)?.findEnumTypeForType<T>(type);\n this.memo.forType.enum.set(type, enumType);\n return enumType;\n }\n\n public findStructuredTypeForType<T>(type: string) {\n if (this.memo.forType.structured.has(type)) {\n return this.memo.forType.structured.get(type) as\n | ODataStructuredType<T>\n | undefined;\n }\n const structuredType =\n this.findSchemaForType(type)?.findStructuredTypeForType<T>(type);\n this.memo.forType.structured.set(type, structuredType);\n return structuredType;\n }\n\n public findCallableForType<T>(type: string, bindingType?: string) {\n const key = bindingType !== undefined ? `${bindingType}/${type}` : type;\n if (this.memo.forType.callable.has(key)) {\n return this.memo.forType.callable.get(key) as\n | ODataCallable<T>\n | undefined;\n }\n const callable = this.findSchemaForType(type)?.findCallableForType<T>(\n type,\n bindingType\n );\n this.memo.forType.callable.set(key, callable);\n return callable;\n }\n\n public findEntitySetForType(type: string) {\n if (this.memo.forType.entitySet.has(type)) {\n return this.memo.forType.entitySet.get(type) as\n | ODataEntitySet\n | undefined;\n }\n const entitySet = this.findSchemaForType(type)?.findEntitySetForType(type);\n this.memo.forType.entitySet.set(type, entitySet);\n return entitySet;\n }\n\n public findModelForType(type: string) {\n return this.findStructuredTypeForType<any>(type)?.model;\n }\n\n public modelForType(type: string) {\n let Model = this.findModelForType(type);\n if (Model === undefined) {\n // Build Ad-hoc model\n let schema = this.findStructuredTypeForType<any>(type);\n if (schema === undefined) throw Error(`No schema for ${type}`);\n Model = class extends ODataModel<any> {} as typeof ODataModel;\n // Build Meta\n Model.buildMeta({ schema });\n // Configure\n Model.meta.configure({\n options: this.options.parserOptions,\n parserForType: (type: string | EdmType) => this.parserForType(type),\n findOptionsForType: (type: string) => this.findOptionsForType(type),\n });\n // Store New Model for next time\n schema.model = Model;\n }\n return Model;\n }\n\n public findCollectionForType(type: string) {\n return this.findStructuredTypeForType<any>(type)?.collection;\n }\n\n public collectionForType(type: string) {\n let Collection = this.findCollectionForType(type);\n if (Collection === undefined) {\n let schema = this.findStructuredTypeForType<any>(type);\n if (schema === undefined) throw Error('');\n Collection = class extends ODataCollection<\n any,\n ODataModel<any>\n > {} as typeof ODataCollection;\n Collection.model = this.modelForType(type);\n // Store New Collection for next time\n schema.collection = Collection;\n }\n return Collection;\n }\n\n public findServiceForType(type: string) {\n return this.findEntitySetForType(type)?.service as\n | typeof ODataEntityService\n | undefined;\n }\n\n public findEntitySetForEntityType(entityType: string) {\n if (this.memo.forType.entitySet.has(entityType)) {\n return this.memo.forType.entitySet.get(entityType) as\n | ODataEntitySet\n | 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.forType.entitySet.set(entityType, entitySet);\n return entitySet;\n }\n\n public findServiceForEntityType(entityType: string) {\n return this.findEntitySetForEntityType(entityType)?.service as\n | typeof ODataEntityService\n | undefined;\n }\n\n public findEnumTypeByName<T>(name: string) {\n if (this.memo.byName.enum.has(name)) {\n return this.memo.byName.enum.get(name) as ODataEnumType<T> | undefined;\n }\n const enumType = this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.enums],\n <ODataEnumType<T>[]>[]\n )\n .find((e) => e.name === name);\n this.memo.byName.enum.set(name, enumType);\n return enumType;\n }\n\n public findStructuredTypeByName<T>(name: string) {\n if (this.memo.byName.structured.has(name)) {\n return this.memo.byName.structured.get(name) as\n | ODataStructuredType<T>\n | undefined;\n }\n const structuredType = this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.entities],\n <ODataStructuredType<T>[]>[]\n )\n .find((e) => e.name === name);\n this.memo.byName.structured.set(name, structuredType);\n return structuredType;\n }\n\n public findCallableByName<T>(name: string, bindingType?: string) {\n const key = bindingType !== undefined ? `${bindingType}/${name}` : name;\n if (this.memo.byName.callable.has(key)) {\n return this.memo.byName.callable.get(key) as ODataCallable<T> | undefined;\n }\n const callable = this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.callables],\n <ODataCallable<T>[]>[]\n )\n .find(\n (c) =>\n c.name === name &&\n (bindingType === undefined || c.binding()?.type === bindingType)\n );\n this.memo.byName.callable.set(key, callable);\n return callable;\n }\n\n public findEntitySetByName(name: string) {\n if (this.memo.byName.entitySet.has(name)) {\n return this.memo.byName.entitySet.get(name) as ODataEntitySet | undefined;\n }\n const schema = this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.entitySets],\n <ODataEntitySet[]>[]\n )\n .find((e) => e.name === name);\n this.memo.byName.entitySet.set(name, schema);\n return schema;\n }\n\n public findModelByName(name: string) {\n return this.findStructuredTypeByName<any>(name)?.model as\n | typeof ODataModel\n | undefined;\n }\n\n public findCollectionByName(name: string) {\n return this.findStructuredTypeByName<any>(name)?.collection as\n | typeof ODataCollection\n | undefined;\n }\n\n public findServiceByName(name: string) {\n return this.findEntitySetByName(name)?.service as\n | typeof ODataEntityService\n | undefined;\n }\n\n public parserForType<T>(type: string | EdmType, bindingType?: string) {\n const key = bindingType !== undefined ? `${bindingType}/${type}` : type;\n if (this.memo.forType.parser.has(key)) {\n return this.memo.forType.parser.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 // EnumType, ComplexType and EntityType Parsers\n let value =\n this.findCallableForType<T>(type, bindingType) ||\n this.findEnumTypeForType<T>(type) ||\n this.findStructuredTypeForType<T>(type);\n parser = value?.parser as Parser<T>;\n }\n // Set Parser for next time\n this.memo.forType.parser.set(key, parser);\n return parser;\n }\n\n public findOptionsForType<T>(type: string) {\n // Strucutred Options\n if (this.memo.forType.options.has(type)) {\n return this.memo.forType.options.get(type) as\n | ODataModelOptions<T>\n | undefined;\n }\n const st = this.findStructuredTypeForType<T>(type);\n const options = st?.model?.meta;\n // Set Options for next time\n this.memo.forType.options.set(type, options);\n return options;\n }\n}\n","import { Observable } from 'rxjs';\nimport { ODataApi } from './api';\nimport { ODataCollection, ODataModel } from './models';\nimport { ODataRequest } from './resources';\nimport {\n ODataCallable,\n ODataEntitySet,\n ODataEnumType,\n ODataStructuredType,\n} from './schema';\nimport { ODataEntityService } from './services/entity';\nimport { ApiConfig, 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 public findApiByName(name: string) {\n return this.apis.find((c) => c.name === name);\n }\n public apiByName(name: string) {\n const api = this.findApiByName(name);\n if (api === undefined) throw new Error(`No API for name: ${name}`);\n return api;\n }\n public findApiForTypes(types: string[]) {\n return this.apis.find((c) =>\n c.schemas.some((s) => types.some((type) => s.isNamespaceOf(type)))\n );\n }\n public findApiForType(type: string) {\n return this.findApiForTypes([type]);\n }\n public apiForType(type: string) {\n const api = this.findApiForType(type);\n if (api === undefined) throw new Error(`No API for type: ${type}`);\n return api;\n }\n\n //#region Configs shortcuts\n public enumTypeForType<T>(type: string) {\n let values = this.apis\n .map((api) => api.findEnumTypeForType<T>(type))\n .filter((e) => e);\n if (values.length === 0) throw Error(`No Enum for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataEnumType<T>;\n }\n\n public structuredTypeForType<T>(type: string) {\n let values = this.apis\n .map((api) => api.findStructuredTypeForType<T>(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Structured for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataStructuredType<T>;\n }\n\n public callableForType<T>(type: string, bindingType?: string) {\n let values = this.apis\n .map((api) => api.findCallableForType<T>(type, bindingType))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Callable for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataCallable<T>;\n }\n\n public entitySetForType(type: string) {\n let values = this.apis\n .map((api) => api.findEntitySetForType(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No EntitySet for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataEntitySet;\n }\n\n public parserForType<T>(type: string | 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\n .map((api) => api.findModelForType(type))\n .filter((e) => e);\n if (values.length === 0) throw Error(`No Model for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataModel;\n }\n\n public collectionForType(type: string) {\n let values = this.apis\n .map((api) => api.findCollectionForType(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Collection for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataCollection;\n }\n\n public serviceForType(type: string) {\n let values = this.apis\n .map((api) => api.findServiceForType(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Service for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataEntityService;\n }\n public serviceForEntityType(type: string) {\n let values = this.apis\n .map((api) => api.findServiceForEntityType(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Service for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataEntityService;\n }\n\n public enumTypeByName<T>(name: string) {\n let values = this.apis\n .map((api) => api.findEnumTypeByName<T>(name))\n .filter((e) => e);\n if (values.length === 0) throw Error(`No Enum for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataEnumType<T>;\n }\n\n public structuredTypeByName<T>(name: string) {\n let values = this.apis\n .map((api) => api.findStructuredTypeByName<T>(name))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Structured for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple Structured: More than one value was found');\n return values[0] as ODataStructuredType<T>;\n }\n\n public callableByName<T>(name: string, bindingType?: string) {\n let values = this.apis\n .map((api) => api.findCallableByName<T>(name, bindingType))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Callable for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple Callable: More than one value was found');\n return values[0] as ODataCallable<T>;\n }\n\n public entitySetByName(name: string) {\n let values = this.apis\n .map((api) => api.findEntitySetByName(name))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No EntitySet for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple EntitySet: More than one value was found');\n return values[0] as ODataEntitySet;\n }\n\n public modelByName(name: string) {\n let values = this.apis\n .map((api) => api.findModelByName(name))\n .filter((e) => e);\n if (values.length === 0) throw Error(`No Model for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataModel;\n }\n\n public collectionByName(name: string) {\n let values = this.apis\n .map((api) => api.findCollectionByName(name))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Collection for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataCollection;\n }\n public serviceByName(name: string) {\n let values = this.apis\n .map((api) => api.findServiceByName(name))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Service for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataEntityService;\n }\n //#endregion\n}\n","import { forkJoin, Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { ApiConfig } from './types';\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 if (Array.isArray(this.passedConfigs)) {\n return of(this.passedConfigs);\n }\n\n return of([this.passedConfigs]);\n }\n}\n\nexport class ODataConfigAsyncLoader implements ODataConfigLoader {\n constructor(\n private readonly configs$:\n | Observable<ApiConfig>\n | Observable<ApiConfig>[]\n | Observable<ApiConfig[]>\n ) {}\n\n loadConfigs(): Observable<ApiConfig[]> {\n if (Array.isArray(this.configs$)) {\n return forkJoin(this.configs$);\n }\n\n const singleConfigOrArray = this.configs$ as Observable<unknown>;\n\n return singleConfigOrArray.pipe(\n map((value: unknown) => {\n if (Array.isArray(value)) {\n return value as ApiConfig[];\n }\n\n return [value] as ApiConfig[];\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 { ODataEntityService } from './services/entity';\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(private http: HttpClient, private loader: ODataConfigLoader) {\n this.loader.loadConfigs().subscribe((config) => {\n this.settings = new ODataSettings(config);\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\n /**\n * Resolve the service for the given string type.\n * @param type The string type of the service.\n * @returns The service for the given type.\n */\n serviceForType(type: string): ODataEntityService<any> | undefined {\n //return this.injector.get(this.settings!.serviceForType(type));\n return undefined;\n }\n\n /**\n * Resolve the service for the given string entity type.\n * @param type The string entity type binding to the service.\n * @returns The service for the given entity type.\n */\n serviceForEntityType(type: string): ODataEntityService<any> | undefined {\n //return this.injector.get(this.settings!.serviceForEntityType(type));\n return undefined;\n }\n\n enumTypeByName<T>(name: string) {\n return this.settings!.enumTypeByName<T>(name);\n }\n structuredTypeByName<T>(name: string) {\n return this.settings!.structuredTypeByName<T>(name);\n }\n callableByName<T>(name: string) {\n return this.settings!.callableByName<T>(name);\n }\n entitySetByName(name: string) {\n return this.settings!.entitySetByName(name);\n }\n modelByName(name: string): typeof ODataModel {\n return this.settings!.modelByName(name);\n }\n collectionByName(name: string): typeof ODataCollection {\n return this.settings!.collectionByName(name);\n }\n serviceByName(name: string): ODataEntityService<any> | undefined {\n //return this.injector.get(this.settings!.serviceByName(name));\n return undefined;\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.apply(options));\n return resource.call(params, {\n responseType: responseType as any,\n ...options,\n });\n }\n\n protected callAction<P, R>(\n params: P | null,\n resource: ODataActionResource<P, R>,\n responseType: 'entity',\n options?: 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.apply(options));\n return resource.call(params, {\n responseType: responseType as any,\n ...options,\n });\n }\n\n protected fetchNavigationProperty<S>(\n resource: ODataNavigationPropertyResource<S>,\n responseType: 'entity',\n options?: ODataQueryArgumentsOptions<S>\n ): Observable<ODataEntity<S>>;\n protected fetchNavigationProperty<S>(\n resource: ODataNavigationPropertyResource<S>,\n responseType: 'entities',\n options?: ODataQueryArgumentsOptions<S>\n ): Observable<ODataEntities<S>>;\n protected fetchNavigationProperty<S>(\n resource: ODataNavigationPropertyResource<S>,\n responseType: 'entity' | 'entities',\n options: ODataQueryArgumentsOptions<S> = {}\n ): Observable<any> {\n resource.query((q) => q.apply(options));\n return resource.fetch({ responseType: responseType as any, ...options });\n }\n}\n","import { ODataModel } from '../models/model';\nimport { EntityKey, ODataResource } from '../resources';\nimport { ODataBaseService } from './base';\n\nexport abstract class ODataEntityService<T> extends ODataBaseService {\n public abstract entity(key?: EntityKey<T>): ODataResource<T>;\n public abstract attach<M extends ODataModel<T>>(value: M): void;\n\n /**\n * The schema for the structured type.\n */\n get structuredTypeSchema() {\n return this.apiNameOrEntityType !== undefined\n ? this.api.findStructuredTypeForType<T>(this.apiNameOrEntityType)\n : undefined;\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { ODataCollection } from '../models/collection';\nimport { ODataModel } from '../models/model';\nimport {\n EntityKey,\n ODataEntity,\n ODataEntityResource,\n ODataEntitySetResource,\n ODataOptions,\n} from '../resources';\nimport { ODataEntityService } from './entity';\n\nexport class ODataEntitySetService<T> extends ODataEntityService<T> {\n /**\n * Get the entity set resource for this service.\n */\n public entities(): ODataEntitySetResource<T> {\n return this.client.entitySet<T>(this.name, this.apiNameOrEntityType);\n }\n\n /**\n * Get the entity resource for this service.\n * @param key The entity key.\n */\n public entity(key?: EntityKey<T>): ODataEntityResource<T> {\n return this.entities().entity(key);\n }\n\n /**\n * Attach an existing model to this service.\n * @param model The model to attach.\n */\n public attach<M extends ODataModel<T>>(model: M): void;\n public attach<C extends ODataCollection<T, ODataModel<T>>>(model: C): void;\n public attach(model: any): void {\n if (model instanceof ODataModel) {\n model.attach(this.entities().entity());\n } else if (model instanceof ODataCollection) {\n model.attach(this.entities());\n }\n }\n\n /**\n * The schema for the entity set.\n */\n get entitySetSchema() {\n return this.api.findEntitySetByName(this.name);\n }\n\n /**\n * Get all entities from the entity set.\n * @param options The options for the request.\n */\n public fetchAll(options?: ODataOptions) {\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 type { ODataModel } from '../models/model';\nimport type {\n ODataEntity,\n ODataOptions,\n ODataSingletonResource,\n} from '../resources';\nimport { ODataEntityService } from './entity';\n\n/**\n * OData Singleton Service\n * www.odata.org/getting-started/advanced-tutorial/#singleton\n */\nexport class ODataSingletonService<T> extends ODataEntityService<T> {\n /**\n * Get the entity resource for this service.\n * @param key The entity key.\n */\n public entity(): ODataSingletonResource<T> {\n return this.client.singleton(this.name, this.apiNameOrEntityType);\n }\n\n /**\n * Attach an existing model to this service.\n * @param model The model to attach.\n */\n public attach<M extends ODataModel<T>>(model: M) {\n model.attach(this.entity());\n }\n\n /**\n * The schema for the singleton.\n */\n get singletonSchema() {\n return this.api.findEntitySetByName(this.name);\n }\n\n /**\n * Update the singleton entity\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public update(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n const res = this.entity();\n return res.update(attrs, options);\n }\n\n /**\n * Patch the singleton entity\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public patch(\n attrs: Partial<T>,\n options?: ODataOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n const res = this.entity();\n return res.modify(attrs, options);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ODataClient } from '../client';\nimport { ODataEntitySetService } from './entity-set';\nimport { ODataSingletonService } from './singleton';\n\n@Injectable()\nexport class ODataServiceFactory {\n constructor(protected client: ODataClient) {}\n\n /**\n * Factory method to create an entity set service.\n * @param entitySetName Name of the entity set.\n * @param apiNameOrEntityType Name of the API or the type of the entity.\n */\n entitySet<T>(\n entitySetName: string,\n apiNameOrEntityType?: string\n ): ODataEntitySetService<T> {\n return new (class extends ODataEntitySetService<T> {})(\n this.client,\n entitySetName,\n apiNameOrEntityType\n );\n }\n\n /** Factory method to create a singleton service.\n * @param singletonName Name of the singleton.\n * @param apiNameOrEntityType Name of the API or the type of the entity.\n */\n singleton<T>(\n singletonName: string,\n apiNameOrEntityType?: string\n ): ODataSingletonService<T> {\n return new (class extends ODataSingletonService<T> {})(\n this.client,\n singletonName,\n apiNameOrEntityType\n );\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport {\n InjectionToken,\n ModuleWithProviders,\n NgModule,\n Provider,\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\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function createSyncLoader(passedConfig: PassedInitialConfig) {\n return new ODataConfigSyncLoader(passedConfig.config!);\n}\n\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":["Field","map","i2.ODataConfigLoader","i1.ODataClient"],"mappings":"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"}
|