@apigames/sdk-core 22.1.16 → 22.1.17

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.
@@ -1,5 +1,5 @@
1
1
  import { IRestClient, RestClientResponse } from '@apigames/rest-client';
2
- import { IResourceContainer, IResourceObject, ResourceFilterName, ResourceFilterValue, ResourceIncludeOption, ResourcePathParams, ResourceSortOption } from '..';
2
+ import { IResourceContainer, IResourceObject, ResourceContainerIncludedResourceTypes, ResourcePathParams, ResourceQueryFilterName, ResourceQueryFilterValue, ResourceQueryIncludeOption, ResourceQuerySortOption } from '..';
3
3
  export declare enum ResourceFilterType {
4
4
  Equal = "equal",
5
5
  NotEqual = "!equal",
@@ -14,11 +14,13 @@ export default class ResourceContainer implements IResourceContainer {
14
14
  private _count;
15
15
  private _countQueryHash;
16
16
  protected _data: IResourceObject | IResourceObject[];
17
+ protected _includes: ResourceContainerIncludedResourceTypes;
17
18
  private _queryParams;
18
19
  private readonly _restClient;
19
20
  protected pathParams: ResourcePathParams;
20
21
  constructor(restClient?: IRestClient);
21
22
  get data(): IResourceObject | IResourceObject[];
23
+ get includes(): ResourceContainerIncludedResourceTypes;
22
24
  get restClient(): IRestClient;
23
25
  get uri(): string;
24
26
  isResourceObject(value: any): value is IResourceObject;
@@ -39,9 +41,9 @@ export default class ResourceContainer implements IResourceContainer {
39
41
  private GetHeaders;
40
42
  private GetQueryParams;
41
43
  IncludedObject(type: string, id: string): IResourceObject;
42
- Filter(filter: ResourceFilterName, selector: ResourceFilterType, value: ResourceFilterValue): IResourceContainer;
43
- Sort(option: ResourceSortOption): IResourceContainer;
44
- Include(include: ResourceIncludeOption): IResourceContainer;
44
+ Filter(filter: ResourceQueryFilterName, selector: ResourceFilterType, value: ResourceQueryFilterValue): IResourceContainer;
45
+ Sort(option: ResourceQuerySortOption): IResourceContainer;
46
+ Include(include: ResourceQueryIncludeOption): IResourceContainer;
45
47
  PageOffset(pageOffset: number, pageSize: number): IResourceContainer;
46
48
  PageNumber(pageNumber: number, pageSize: number): IResourceContainer;
47
49
  }
@@ -29,6 +29,7 @@ var ResourceFilterType;
29
29
  class ResourceContainer {
30
30
  constructor(restClient) {
31
31
  this._data = undefined;
32
+ this._includes = {};
32
33
  this._restClient = (0, json_1.isDefined)(restClient) ? restClient : new rest_client_1.RestClient();
33
34
  this.pathParams = {};
34
35
  this._queryParams = {
@@ -41,6 +42,9 @@ class ResourceContainer {
41
42
  get data() {
42
43
  throw new Error('Method or Property not implemented.');
43
44
  }
45
+ get includes() {
46
+ return this._includes;
47
+ }
44
48
  get restClient() {
45
49
  return this._restClient;
46
50
  }
@@ -67,6 +71,7 @@ class ResourceContainer {
67
71
  }
68
72
  ClearData() {
69
73
  this._data = undefined;
74
+ this._includes = {};
70
75
  }
71
76
  AddResourceToMemoryStructure(obj) {
72
77
  if ((0, json_1.isDefined)(this.data)) {
@@ -110,14 +115,22 @@ class ResourceContainer {
110
115
  if ((0, json_1.hasProperty)(response.data, 'data')) {
111
116
  if ((0, json_1.isArray)(response.data.data)) {
112
117
  this._data = [];
113
- for (const resource of response.data.data) {
114
- this.AddResourceToMemoryStructure(this.LoadResourceData(resource));
118
+ for (const resourceData of response.data.data) {
119
+ this.AddResourceToMemoryStructure(this.LoadResourceData(resourceData));
115
120
  }
116
121
  }
117
122
  else if ((0, json_1.isObject)(response.data.data)) {
118
123
  this.AddResourceToMemoryStructure(this.LoadResourceData(response.data.data));
119
124
  }
120
125
  }
126
+ if ((0, json_1.hasProperty)(response.data, 'included')) {
127
+ if ((0, json_1.isArray)(response.data.included)) {
128
+ for (const resourceData of response.data.included) {
129
+ const resourceObject = this.LoadResourceData(resourceData);
130
+ this._includes[resourceObject.type][resourceObject.id] = resourceObject;
131
+ }
132
+ }
133
+ }
121
134
  }
122
135
  Add() {
123
136
  throw new Error('Method or Property not implemented.');
@@ -107,23 +107,23 @@ class ResourceObject {
107
107
  for (const fieldName in data) {
108
108
  if ((0, json_1.hasProperty)(data, fieldName)) {
109
109
  if ((0, json_1.isDefinedAndNotNull)(data[fieldName])) {
110
- if ((0, json_1.isArrayOfStrings)(data[fieldName])) {
110
+ if ((0, __1.isResourceObjectRelationships)(data[fieldName])) {
111
111
  payload[fieldName] = {
112
112
  data: [],
113
113
  };
114
- for (const key of data[fieldName]) {
114
+ for (const relationship of data[fieldName]) {
115
115
  payload[fieldName].data.push({
116
- type: this.RelationshipType(fieldName),
117
- id: key,
116
+ type: relationship.type,
117
+ id: relationship.id,
118
118
  });
119
119
  }
120
120
  }
121
- else if ((0, json_1.isString)(data[fieldName])) {
121
+ else if ((0, __1.isResourceObjectRelationship)(data[fieldName])) {
122
122
  if ((0, json_1.isUndefined)(shadow) || !(0, json_1.areEqual)(shadow[fieldName], data[fieldName])) {
123
123
  payload[fieldName] = {
124
124
  data: {
125
- type: this.RelationshipType(fieldName),
126
- id: data[fieldName],
125
+ type: data[fieldName].type,
126
+ id: data[fieldName].id,
127
127
  },
128
128
  };
129
129
  }
@@ -1,3 +1,2 @@
1
1
  export { ISDKError, ISDKRequestError, ISDKException, ISDKRequestException, } from './sdk.errors';
2
- export { IResourceContainer, ResourceFilterName, ResourceFilterValue, ResourceSortOption, ResourceIncludeOption, } from './resource.container';
3
- export { IResourceObject, IResourceObjectAttributes, IResourceObjectRelationships, GeospatialPoint, ResourceObjectAttributeBase, ResourceObjectAttributesLoadType, ResourceObjectRelationshipLinkObject, ResourceObjectRelationship, ResourceObjectRelationships, ResourceObjectRelationshipsLoadType, ResourceObjectRelationshipKey, ResourceObjectRelationshipKeys, ResourceObjectUri, ResourceObjectRelationshipBase, } from './resource.object';
2
+ export { IResourceContainer, ResourceContainerIncludedResourceTypes, ResourceQueryFilterName, ResourceQueryFilterValue, ResourceQuerySortOption, ResourceQueryIncludeOption, IResourceObject, IResourceObjectAttributes, IResourceObjectRelationships, GeospatialPoint, ResourceObjectAttributeBase, ResourceObjectAttributesLoadType, ResourceObjectRelationshipLinkObject, ResourceObjectRelationshipLink, ResourceObjectRelationshipsLinks, ResourceObjectRelationshipsLoadType, ResourceObjectRelationship, ResourceObjectRelationships, ResourceObjectUri, ResourceObjectRelationshipBase, } from './resource.interfaces';
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ResourceObjectRelationshipBase = exports.ResourceObjectRelationshipsLoadType = exports.ResourceObjectAttributesLoadType = exports.ResourceObjectAttributeBase = exports.GeospatialPoint = void 0;
4
- var resource_object_1 = require("./resource.object");
5
- Object.defineProperty(exports, "GeospatialPoint", { enumerable: true, get: function () { return resource_object_1.GeospatialPoint; } });
6
- Object.defineProperty(exports, "ResourceObjectAttributeBase", { enumerable: true, get: function () { return resource_object_1.ResourceObjectAttributeBase; } });
7
- Object.defineProperty(exports, "ResourceObjectAttributesLoadType", { enumerable: true, get: function () { return resource_object_1.ResourceObjectAttributesLoadType; } });
8
- Object.defineProperty(exports, "ResourceObjectRelationshipsLoadType", { enumerable: true, get: function () { return resource_object_1.ResourceObjectRelationshipsLoadType; } });
9
- Object.defineProperty(exports, "ResourceObjectRelationshipBase", { enumerable: true, get: function () { return resource_object_1.ResourceObjectRelationshipBase; } });
3
+ exports.ResourceObjectRelationshipBase = exports.ResourceObjectRelationship = exports.ResourceObjectRelationshipsLoadType = exports.ResourceObjectAttributesLoadType = exports.ResourceObjectAttributeBase = exports.GeospatialPoint = void 0;
4
+ var resource_interfaces_1 = require("./resource.interfaces");
5
+ Object.defineProperty(exports, "GeospatialPoint", { enumerable: true, get: function () { return resource_interfaces_1.GeospatialPoint; } });
6
+ Object.defineProperty(exports, "ResourceObjectAttributeBase", { enumerable: true, get: function () { return resource_interfaces_1.ResourceObjectAttributeBase; } });
7
+ Object.defineProperty(exports, "ResourceObjectAttributesLoadType", { enumerable: true, get: function () { return resource_interfaces_1.ResourceObjectAttributesLoadType; } });
8
+ Object.defineProperty(exports, "ResourceObjectRelationshipsLoadType", { enumerable: true, get: function () { return resource_interfaces_1.ResourceObjectRelationshipsLoadType; } });
9
+ Object.defineProperty(exports, "ResourceObjectRelationship", { enumerable: true, get: function () { return resource_interfaces_1.ResourceObjectRelationship; } });
10
+ Object.defineProperty(exports, "ResourceObjectRelationshipBase", { enumerable: true, get: function () { return resource_interfaces_1.ResourceObjectRelationshipBase; } });
@@ -0,0 +1,91 @@
1
+ import { IRestClient } from '@apigames/rest-client';
2
+ import { ResourceFilterType } from '../classes';
3
+ export declare type ResourceObjectType = string;
4
+ export declare type ResourceObjectIdentifier = string;
5
+ export declare enum ResourceObjectAttributesLoadType {
6
+ Replace = 0,
7
+ Update = 1
8
+ }
9
+ export interface IResourceObjectAttributes {
10
+ LoadData(data: any, action: ResourceObjectAttributesLoadType): void;
11
+ }
12
+ export declare type ResourceObjectRelationshipLinkObject = {
13
+ type: ResourceObjectType;
14
+ id: ResourceObjectIdentifier;
15
+ };
16
+ export declare type ResourceObjectRelationshipLink = {
17
+ data: ResourceObjectRelationshipLinkObject;
18
+ };
19
+ export declare type ResourceObjectRelationshipsLinks = {
20
+ data: ResourceObjectRelationshipLinkObject[];
21
+ };
22
+ export declare type ResourceContainerIncludedResources = {
23
+ [id: string]: IResourceObject;
24
+ };
25
+ export declare type ResourceContainerIncludedResourceTypes = {
26
+ [type: string]: ResourceContainerIncludedResources;
27
+ };
28
+ export declare class ResourceObjectRelationship {
29
+ private _includes;
30
+ type: ResourceObjectType;
31
+ id: ResourceObjectIdentifier;
32
+ constructor(includes: ResourceContainerIncludedResourceTypes, type: ResourceObjectType, id?: ResourceObjectIdentifier);
33
+ get target(): IResourceObject;
34
+ }
35
+ export declare type ResourceObjectRelationships = ResourceObjectRelationship[];
36
+ export declare enum ResourceObjectRelationshipsLoadType {
37
+ Replace = 0,
38
+ Update = 1
39
+ }
40
+ export interface IResourceObjectRelationships {
41
+ LoadData(data: any, action: ResourceObjectRelationshipsLoadType): void;
42
+ }
43
+ export declare type ResourceObjectUri = string;
44
+ export declare class ResourceObjectAttributeBase {
45
+ protected static LoadDateTime(value: string): Date;
46
+ protected static LoadGeospatialPoint(value: any): GeospatialPoint;
47
+ }
48
+ export declare class GeospatialPoint extends ResourceObjectAttributeBase implements IResourceObjectAttributes {
49
+ longitude: number;
50
+ latitude: number;
51
+ LoadData(data: any): void;
52
+ }
53
+ export declare class ResourceObjectRelationshipBase {
54
+ private _includes;
55
+ constructor(includes: ResourceContainerIncludedResourceTypes);
56
+ protected LoadRelationshipData(expectedType: string, value: any): ResourceObjectRelationship;
57
+ static RelationshipType(relationshipName: string): string;
58
+ }
59
+ export interface IResourceObject {
60
+ type: ResourceObjectType;
61
+ id?: ResourceObjectIdentifier;
62
+ attributes: IResourceObjectAttributes;
63
+ relationships: IResourceObjectRelationships;
64
+ uri: ResourceObjectUri;
65
+ LoadData(value: any): IResourceObject;
66
+ Delete(): Promise<void>;
67
+ Save(): Promise<void>;
68
+ UpdateAttributes(value: any): void;
69
+ UpdateRelationships(value: any): void;
70
+ }
71
+ export declare type ResourceQueryFilterName = string;
72
+ export declare type ResourceQueryFilterValue = string;
73
+ export declare type ResourceQuerySortOption = string;
74
+ export declare type ResourceQueryIncludeOption = string;
75
+ export interface IResourceContainer {
76
+ data: IResourceObject | IResourceObject[];
77
+ includes: ResourceContainerIncludedResourceTypes;
78
+ restClient: IRestClient;
79
+ uri: string;
80
+ Filter(filter: ResourceQueryFilterName, selector: ResourceFilterType, value: ResourceQueryFilterValue): IResourceContainer;
81
+ Sort(option: ResourceQuerySortOption): IResourceContainer;
82
+ Include(include: ResourceQueryIncludeOption): IResourceContainer;
83
+ PageOffset(pageOffset: number, pageSize: number): IResourceContainer;
84
+ PageNumber(pageNumber: number, pageSize: number): IResourceContainer;
85
+ Add(): IResourceObject;
86
+ Count(): Promise<number>;
87
+ Delete(resource: IResourceObject): Promise<void>;
88
+ Find(): Promise<void>;
89
+ Get(id: string): Promise<void>;
90
+ IncludedObject(type: ResourceObjectType, id: ResourceObjectIdentifier): IResourceObject;
91
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ResourceObjectRelationshipBase = exports.GeospatialPoint = exports.ResourceObjectAttributeBase = exports.ResourceObjectRelationshipsLoadType = exports.ResourceObjectAttributesLoadType = void 0;
3
+ exports.ResourceObjectRelationshipBase = exports.GeospatialPoint = exports.ResourceObjectAttributeBase = exports.ResourceObjectRelationshipsLoadType = exports.ResourceObjectRelationship = exports.ResourceObjectAttributesLoadType = void 0;
4
4
  const json_1 = require("@apigames/json");
5
5
  const helpers_1 = require("../helpers");
6
6
  var ResourceObjectAttributesLoadType;
@@ -8,6 +8,21 @@ var ResourceObjectAttributesLoadType;
8
8
  ResourceObjectAttributesLoadType[ResourceObjectAttributesLoadType["Replace"] = 0] = "Replace";
9
9
  ResourceObjectAttributesLoadType[ResourceObjectAttributesLoadType["Update"] = 1] = "Update";
10
10
  })(ResourceObjectAttributesLoadType = exports.ResourceObjectAttributesLoadType || (exports.ResourceObjectAttributesLoadType = {}));
11
+ class ResourceObjectRelationship {
12
+ constructor(includes, type, id) {
13
+ this._includes = includes;
14
+ this.type = type;
15
+ if (id)
16
+ this.id = id;
17
+ }
18
+ get target() {
19
+ if ((0, json_1.isDefined)(this.type) && (0, json_1.isDefined)(this.id) && (0, json_1.isDefined)(this._includes[this.type][this.id])) {
20
+ return this._includes[this.type][this.id];
21
+ }
22
+ return undefined;
23
+ }
24
+ }
25
+ exports.ResourceObjectRelationship = ResourceObjectRelationship;
11
26
  var ResourceObjectRelationshipsLoadType;
12
27
  (function (ResourceObjectRelationshipsLoadType) {
13
28
  ResourceObjectRelationshipsLoadType[ResourceObjectRelationshipsLoadType["Replace"] = 0] = "Replace";
@@ -30,12 +45,15 @@ class GeospatialPoint extends ResourceObjectAttributeBase {
30
45
  }
31
46
  exports.GeospatialPoint = GeospatialPoint;
32
47
  class ResourceObjectRelationshipBase {
33
- static LoadRelationshipKey(expectedType, value) {
48
+ constructor(includes) {
49
+ this._includes = includes;
50
+ }
51
+ LoadRelationshipData(expectedType, value) {
34
52
  if ((0, json_1.isDefined)(value) && ((0, json_1.hasProperty)(value, 'data') && (0, json_1.isObject)(value.data)
35
53
  && (0, json_1.hasProperty)(value.data, 'type') && (0, json_1.isString)(value.data.type)
36
54
  && (value.data.type === expectedType)
37
55
  && (0, json_1.hasProperty)(value.data, 'id') && (0, json_1.isString)(value.data.id)))
38
- return value.data.id;
56
+ return new ResourceObjectRelationship(this._includes, value.data.type, value.data.id);
39
57
  return undefined;
40
58
  }
41
59
  static RelationshipType(relationshipName) {
@@ -1,3 +1,6 @@
1
1
  import { ResourceContainer, ResourceObject } from '../classes';
2
+ import { ResourceObjectRelationship, ResourceObjectRelationships } from '../interfaces';
2
3
  export declare function isResourceContainer(value: any): value is ResourceContainer;
3
4
  export declare function isResourceObject(value: any): value is ResourceObject;
5
+ export declare function isResourceObjectRelationship(value: any): value is ResourceObjectRelationship;
6
+ export declare function isResourceObjectRelationships(value: any): value is ResourceObjectRelationships;
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isResourceObject = exports.isResourceContainer = void 0;
3
+ exports.isResourceObjectRelationships = exports.isResourceObjectRelationship = exports.isResourceObject = exports.isResourceContainer = void 0;
4
4
  const json_1 = require("@apigames/json");
5
5
  const classes_1 = require("../classes");
6
+ const interfaces_1 = require("../interfaces");
6
7
  function isResourceContainer(value) {
7
8
  return (0, json_1.isDefinedAndNotNull)(value) && (value instanceof classes_1.ResourceContainer);
8
9
  }
@@ -13,3 +14,17 @@ function isResourceObject(value) {
13
14
  && (typeof value.type === 'string');
14
15
  }
15
16
  exports.isResourceObject = isResourceObject;
17
+ function isResourceObjectRelationship(value) {
18
+ return (0, json_1.isDefinedAndNotNull)(value) && (value instanceof interfaces_1.ResourceObjectRelationship);
19
+ }
20
+ exports.isResourceObjectRelationship = isResourceObjectRelationship;
21
+ function isResourceObjectRelationships(value) {
22
+ if ((0, json_1.isArray)(value)) {
23
+ let allValid = true;
24
+ for (const relationship of value)
25
+ allValid = allValid && isResourceObjectRelationship(relationship);
26
+ return allValid;
27
+ }
28
+ return false;
29
+ }
30
+ exports.isResourceObjectRelationships = isResourceObjectRelationships;
package/package.json CHANGED
@@ -13,7 +13,7 @@
13
13
  ],
14
14
  "description": "API Games SDK Core",
15
15
  "license": "MIT",
16
- "version": "22.1.16",
16
+ "version": "22.1.17",
17
17
  "main": "lib/index.js",
18
18
  "types": "lib/index.d.ts",
19
19
  "scripts": {
@@ -1,23 +0,0 @@
1
- import { IRestClient } from '@apigames/rest-client';
2
- import { IResourceObject, ResourceObjectIdentifier, ResourceObjectType } from './resource.object';
3
- import { ResourceFilterType } from '../classes/resource.container';
4
- export declare type ResourceFilterName = string;
5
- export declare type ResourceFilterValue = string;
6
- export declare type ResourceSortOption = string;
7
- export declare type ResourceIncludeOption = string;
8
- export interface IResourceContainer {
9
- data: IResourceObject | IResourceObject[];
10
- restClient: IRestClient;
11
- uri: string;
12
- Filter(filter: ResourceFilterName, selector: ResourceFilterType, value: ResourceFilterValue): IResourceContainer;
13
- Sort(option: ResourceSortOption): IResourceContainer;
14
- Include(include: ResourceIncludeOption): IResourceContainer;
15
- PageOffset(pageOffset: number, pageSize: number): IResourceContainer;
16
- PageNumber(pageNumber: number, pageSize: number): IResourceContainer;
17
- Add(): IResourceObject;
18
- Count(): Promise<number>;
19
- Delete(resource: IResourceObject): Promise<void>;
20
- Find(): Promise<void>;
21
- Get(id: string): Promise<void>;
22
- IncludedObject(type: ResourceObjectType, id: ResourceObjectIdentifier): IResourceObject;
23
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,54 +0,0 @@
1
- export declare type ResourceObjectType = string;
2
- export declare type ResourceObjectIdentifier = string;
3
- export declare enum ResourceObjectAttributesLoadType {
4
- Replace = 0,
5
- Update = 1
6
- }
7
- export interface IResourceObjectAttributes {
8
- LoadData(data: any, action: ResourceObjectAttributesLoadType): void;
9
- }
10
- export declare type ResourceObjectRelationshipLinkObject = {
11
- type: ResourceObjectType;
12
- id: ResourceObjectIdentifier;
13
- };
14
- export declare type ResourceObjectRelationship = {
15
- data: ResourceObjectRelationshipLinkObject;
16
- };
17
- export declare type ResourceObjectRelationships = {
18
- data: ResourceObjectRelationshipLinkObject[];
19
- };
20
- export declare type ResourceObjectRelationshipKey = string;
21
- export declare type ResourceObjectRelationshipKeys = ResourceObjectRelationshipKey[];
22
- export declare enum ResourceObjectRelationshipsLoadType {
23
- Replace = 0,
24
- Update = 1
25
- }
26
- export interface IResourceObjectRelationships {
27
- LoadData(data: any, action: ResourceObjectRelationshipsLoadType): void;
28
- }
29
- export declare type ResourceObjectUri = string;
30
- export declare class ResourceObjectAttributeBase {
31
- protected static LoadDateTime(value: string): Date;
32
- protected static LoadGeospatialPoint(value: any): GeospatialPoint;
33
- }
34
- export declare class GeospatialPoint extends ResourceObjectAttributeBase implements IResourceObjectAttributes {
35
- longitude: number;
36
- latitude: number;
37
- LoadData(data: any): void;
38
- }
39
- export declare class ResourceObjectRelationshipBase {
40
- protected static LoadRelationshipKey(expectedType: string, value: any): ResourceObjectRelationshipKey;
41
- static RelationshipType(relationshipName: string): string;
42
- }
43
- export interface IResourceObject {
44
- type: ResourceObjectType;
45
- id?: ResourceObjectIdentifier;
46
- attributes: IResourceObjectAttributes;
47
- relationships: IResourceObjectRelationships;
48
- uri: ResourceObjectUri;
49
- LoadData(value: any): IResourceObject;
50
- Delete(): Promise<void>;
51
- Save(): Promise<void>;
52
- UpdateAttributes(value: any): void;
53
- UpdateRelationships(value: any): void;
54
- }