Skip to content

Commit 594f5e1

Browse files
committed
Refactor
1 parent 479be7b commit 594f5e1

File tree

9 files changed

+63
-51
lines changed

9 files changed

+63
-51
lines changed

dist/Client.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import { ServiceAccountsService } from "./services/ServiceAccountService";
1010
import { ServiceAccountKeysService } from "./services/ServiceAccountKeysService";
1111
import { InternalResponse } from "./types/Response";
1212
import { GroupsService } from "./services/GroupService";
13-
import { VehiclesService } from "@services/VehiclesService";
14-
import { EquipmentService } from "@services/EquipmentService";
13+
import { VehiclesService } from "./services/VehiclesService";
14+
import { EquipmentService } from "./services/EquipmentService";
1515
export declare class Client {
1616
readonly config: ClientConfigInterface;
1717
organisation: string;

dist/Client.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import { FormsService } from "./services/FormsService";
88
import { ServiceAccountsService } from "./services/ServiceAccountService";
99
import { ServiceAccountKeysService } from "./services/ServiceAccountKeysService";
1010
import { GroupsService } from "./services/GroupService";
11-
import { VehiclesService } from "@services/VehiclesService";
12-
import { EquipmentService } from "@services/EquipmentService";
11+
import { VehiclesService } from "./services/VehiclesService";
12+
import { EquipmentService } from "./services/EquipmentService";
1313
export class Client {
1414
config;
1515
organisation;

dist/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ export { ServiceAccountKey } from './models/ServiceAccountKey';
66
export { Log } from './models/Log';
77
export { Group } from './models/Group';
88
export { Permission } from './models/Permission';
9+
export { Vehicle } from './models/Vehicle';
910
export type { InternalResponse } from './types/Response';

dist/index.js

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -403,21 +403,21 @@ class BaseService {
403403
requestParam = new RequestOptions(param);
404404
}
405405
let resp = await this.client.makeGetRequest(endpoint, requestParam);
406-
const dataIsArray = Array.isArray(resp.data);
407-
if (dataIsArray) {
408-
resp.data = resp.data.map((item) => this.hydrateFunction(item, null));
409-
} else {
410-
resp.data = this.hydrateFunction(resp.data, null);
411-
}
412-
if (dataIsArray) {
413-
resp.data = resp.data.map((single) => this.hydrateRelationships(single, resp.included));
414-
} else {
415-
resp.data = this.hydrateRelationships(resp.data, resp.included);
416-
}
406+
resp.data = Array.isArray(resp.data) ? this.hydrateDataArray(resp.data, resp.included) : this.hydrateSingleItem(resp.data, resp.included);
417407
return resp;
418408
}
409+
hydrateModel(item) {
410+
return this.hydrateFunction(item, null);
411+
}
412+
hydrateDataArray(items, included) {
413+
return items.map((item) => this.hydrateModel(item)).map((item) => this.hydrateRelationships(item, included));
414+
}
415+
hydrateSingleItem(item, included) {
416+
const hydrated = this.hydrateModel(item);
417+
return this.hydrateRelationships(hydrated, included);
418+
}
419419
hydrateRelationships(single, included) {
420-
if (!single.relationships)
420+
if (!single.relationships || !included)
421421
return single;
422422
Object.entries(single.relationships).forEach(([key, relationship]) => {
423423
const { data } = relationship;
@@ -895,6 +895,7 @@ class ClientConfig {
895895
}
896896
}
897897
export {
898+
Vehicle,
898899
ServiceAccountKey,
899900
ServiceAccount,
900901
RequestOptions,

dist/services/BaseService.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ export declare class BaseService<T> {
2121
get(): Promise<InternalResponse<T[]>>;
2222
get(param: string): Promise<InternalResponse<T>>;
2323
get(param: RequestOptionsType): Promise<InternalResponse<T[]>>;
24+
private hydrateModel;
25+
private hydrateDataArray;
26+
private hydrateSingleItem;
2427
hydrateRelationships(single: JsonData, included: any[]): JsonData;
2528
findMatchingIncluded(relation: any, included: any[]): any;
2629
}

dist/services/BaseService.js

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -36,29 +36,31 @@ export class BaseService {
3636
requestParam = new RequestOptions(param);
3737
}
3838
let resp = await this.client.makeGetRequest(endpoint, requestParam);
39-
const dataIsArray = Array.isArray(resp.data);
40-
// Hydrate response based on whether it's a single item or an array
41-
if (dataIsArray) {
42-
resp.data = resp.data.map((item) => this.hydrateFunction(item, null));
43-
}
44-
else {
45-
resp.data = this.hydrateFunction(resp.data, null);
46-
}
47-
// Hydrate relationships
48-
if (dataIsArray) {
49-
resp.data = resp.data.map((single) => this.hydrateRelationships(single, resp.included));
50-
}
51-
else {
52-
resp.data = this.hydrateRelationships(resp.data, resp.included);
53-
}
39+
// hydrate the model(s) in resp.data
40+
// hydrate model relationships from the data in resp.includes
41+
resp.data = Array.isArray(resp.data)
42+
? this.hydrateDataArray(resp.data, resp.included)
43+
: this.hydrateSingleItem(resp.data, resp.included);
5444
return resp;
5545
}
46+
hydrateModel(item) {
47+
return this.hydrateFunction(item, null);
48+
}
49+
hydrateDataArray(items, included) {
50+
return items
51+
.map(item => this.hydrateModel(item))
52+
.map(item => this.hydrateRelationships(item, included));
53+
}
54+
hydrateSingleItem(item, included) {
55+
const hydrated = this.hydrateModel(item);
56+
return this.hydrateRelationships(hydrated, included);
57+
}
5658
hydrateRelationships(single, included) {
57-
if (!single.relationships)
59+
if (!single.relationships || !included)
5860
return single;
5961
Object.entries(single.relationships).forEach(([key, relationship]) => {
6062
const { data } = relationship;
61-
// relationship[key] could be array or single object
63+
// Hydrate arrays or single items from included data
6264
relationship.data = Array.isArray(data)
6365
? data.map(relation => this.findMatchingIncluded(relation, included) || relation)
6466
: this.findMatchingIncluded(data, included) || data;

dist/services/SubmissionsService.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Client } from "Client";
22
import { BaseService } from "../services/BaseService";
33
import { Submission } from "../models/Submission";
44
import { InternalResponse } from "types/Response";
5-
import { SubmissionVersion } from "@models/SubmissionVersion";
5+
import { SubmissionVersion } from "../models/SubmissionVersion";
66
export declare class SubmissionsService extends BaseService<Submission> {
77
constructor(client: Client);
88
getVersions(submissionId: string): Promise<InternalResponse<SubmissionVersion[]>>;

dist/services/SubmissionsService.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { BaseService } from "../services/BaseService";
22
import { Submission } from "../models/Submission";
3-
import { SubmissionVersion } from "@models/SubmissionVersion";
3+
import { SubmissionVersion } from "../models/SubmissionVersion";
44
export class SubmissionsService extends BaseService {
55
constructor(client) {
66
super(client, "/v3/orgs/:orgId/data-capture/submissions", Submission.hydrate);

src/services/BaseService.ts

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -59,32 +59,37 @@ export class BaseService<T> {
5959

6060
let resp = await this.client.makeGetRequest(endpoint, requestParam);
6161

62-
const dataIsArray = Array.isArray(resp.data);
62+
// hydrate the model(s) in resp.data
63+
// hydrate model relationships from the data in resp.includes
64+
resp.data = Array.isArray(resp.data)
65+
? this.hydrateDataArray(resp.data, resp.included)
66+
: this.hydrateSingleItem(resp.data, resp.included);
6367

64-
// Hydrate response based on whether it's a single item or an array
65-
if (dataIsArray) {
66-
resp.data = resp.data.map((item: any) => this.hydrateFunction(item, null));
67-
} else {
68-
resp.data = this.hydrateFunction(resp.data, null);
69-
}
68+
return resp;
69+
}
7070

71-
// Hydrate relationships
72-
if (dataIsArray) {
73-
resp.data = resp.data.map((single: any) => this.hydrateRelationships(single, resp.included));
74-
} else {
75-
resp.data = this.hydrateRelationships(resp.data, resp.included);
76-
}
71+
private hydrateModel(item: JsonData): JsonData & T {
72+
return this.hydrateFunction(item, null) as JsonData & T;
73+
}
7774

78-
return resp;
75+
private hydrateDataArray(items: JsonData[], included: any[]): (JsonData & T)[] {
76+
return items
77+
.map(item => this.hydrateModel(item))
78+
.map(item => this.hydrateRelationships(item, included) as JsonData & T);
79+
}
80+
81+
private hydrateSingleItem(item: JsonData, included: any[]): JsonData & T {
82+
const hydrated = this.hydrateModel(item);
83+
return this.hydrateRelationships(hydrated, included) as JsonData & T;
7984
}
8085

8186
hydrateRelationships(single: JsonData, included: any[]): JsonData {
82-
if (!single.relationships) return single;
87+
if (!single.relationships || !included) return single;
8388

8489
Object.entries(single.relationships).forEach(([key, relationship]) => {
8590
const { data } = relationship;
8691

87-
// relationship[key] could be array or single object
92+
// Hydrate arrays or single items from included data
8893
relationship.data = Array.isArray(data)
8994
? data.map(relation => this.findMatchingIncluded(relation, included) || relation)
9095
: this.findMatchingIncluded(data, included) || data;

0 commit comments

Comments
 (0)