forked from abdulhaq-e/ngrx-json-api
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinterfaces.ts
More file actions
343 lines (288 loc) · 7.71 KB
/
interfaces.ts
File metadata and controls
343 lines (288 loc) · 7.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
export const NGRX_JSON_API_DEFAULT_ZONE = 'default';
export enum Direction {
ASC,
DESC,
}
export interface Document {
data?: any;
included?: any;
meta?: any;
links?: any;
errors?: Array<ResourceError>;
}
export interface FilteringParam {
path?: string;
operator?: string;
value?: any;
}
export interface FilteringOperator {
name: string;
apiName?: string;
comparison: (value: any, resourceFieldValue: any) => boolean;
}
export interface ManyResourceRelationship {
data?: Array<ResourceIdentifier>;
reference?: Array<StoreResource>;
}
/**
* Used by code generators to navigate relationships in a type-safe manner.
* See crnk.io for a first such generator.
*/
export interface TypedManyResourceRelationship<T extends StoreResource>
extends ManyResourceRelationship {
reference?: Array<T>;
}
/**
* Used by code generators to navigate relationships in a type-safe manner.
* See crnk.io for a first such generator.
*/
export interface TypedOneResourceRelationship<T extends StoreResource>
extends OneResourceRelationship {
reference?: T;
}
export interface NgrxJsonApiConfig {
apiUrl: string;
initialState?: any;
resourceDefinitions?: Array<ResourceDefinition>;
urlBuilder?: NgrxJsonApiUrlBuilder;
filteringConfig?: NgrxJsonApiFilteringConfig;
/**
* Custom request headers.
*/
requestHeaders?: { [name: string]: any };
/**
* Allows to disable the apply action and replace it with a custom one. For example
* have a look at www.crnk.io that makes use of JSON PATCH to perform bulk updates.
*/
applyEnabled?: boolean;
/**
* Allows to send/receive cookies, authorization headers with cross-site request.
* https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials
*
* default is false
*/
requestWithCredentials?: boolean;
/**
* If enabled, PATCH requests will only contains attributes and relationships
* that differs from the previously known persisted resource.
*/
diffUpdates?: boolean;
}
export interface NgrxJsonApiState {
zones: NgrxJsonApiZones;
}
export interface NgrxJsonApiZones {
[id: string]: NgrxJsonApiZone;
}
/**
* deprecated, mae use of NgrxJsonApiZone instead
*/
export interface NgrxJsonApiStore {
data: NgrxJsonApiStoreData;
queries: NgrxJsonApiStoreQueries;
isCreating: number;
isReading: number;
isUpdating: number;
isDeleting: number;
isApplying: number;
}
export interface NgrxJsonApiZone extends NgrxJsonApiStore {}
export interface NgrxJsonApiStoreData {
[id: string]: NgrxJsonApiStoreResources;
}
export interface NgrxJsonApiStoreQueries {
[id: string]: StoreQuery;
}
export interface NgrxJsonApiStoreResources {
[id: string]: StoreResource;
}
export interface NgrxJsonApiFilteringConfig {
pathSeparator?: string;
filteringOperators?: Array<FilteringOperator>;
}
export interface NgrxJsonApiUrlBuilder {
generateFilteringQueryParams?: (params: Array<FilteringParam>) => string;
generateFieldsQueryParams?: (params: Array<string>) => string;
generateIncludedQueryParams?: (params: Array<string>) => string;
generateSortingQueryParams?: (params: Array<SortingParam>) => string;
generateQueryParams?: (...params: Array<string>) => string;
}
export type OperationType = 'GET' | 'DELETE' | 'PATCH' | 'POST' | false;
export interface OneResourceRelationship {
data?: ResourceIdentifier;
reference?: StoreResource;
}
export type ErrorModificationType = 'ADD' | 'REMOVE' | 'SET';
export interface ModifyStoreResourceErrorsPayload {
resourceId: ResourceIdentifier;
errors: Array<ResourceError>;
modificationType: ErrorModificationType;
}
export interface Payload {
jsonApiData?: Document;
query?: Query;
}
/**
* Specifies a GET query with parameters.
*/
export interface Query {
/**
* Uniquely identifies the query in the store
*/
queryId?: string;
/**
* resource type to query.
*/
type?: string;
/**
* resource id to query.
*/
id?: string;
/**
* sorting, filtering, etc. parameters.
*/
params?: QueryParams;
}
export interface QueryParams {
filtering?: Array<FilteringParam>;
sorting?: Array<SortingParam>;
include?: Array<string>;
fields?: Array<string>;
offset?: number;
limit?: number;
page?: QueryPageParams;
}
export interface QueryPageParams {
[id: string]: string | number;
offset?: number;
limit?: number;
number?: number;
size?: number;
}
/**
* Represents a resource obtained from the server.
*/
export interface Resource extends ResourceIdentifier {
attributes?: { [key: string]: any };
relationships?: { [key: string]: ResourceRelationship };
meta?: any;
links?: any;
}
export interface ResourceAttributeDefinition {
apiName?: string;
}
export interface ResourceDefinition {
type: string;
collectionPath: string;
attributes?: { [key: string]: ResourceAttributeDefinition };
relationships?: { [key: string]: ResourceRelationDefinition };
}
export interface ResourceError {
id?: string;
links?: any;
status?: string;
code?: string;
title?: string;
detail?: string;
source?: ResourceErrorSource;
meta?: any;
}
export interface ResourceErrorSource {
pointer?: string;
parameter?: string;
}
export interface ResourceIdentifier {
type: string;
id: string;
}
export interface ResourceRelationship {
data?: any;
links?: any;
reference?: any;
}
export interface ResourceRelationDefinition {
type: string;
relationType: ResourceRelationType;
}
export type ResourceRelationType = 'hasOne' | 'hasMany';
export type ResourceState =
| 'NEW'
| 'IN_SYNC'
| 'CREATED'
| 'UPDATED'
| 'DELETED'
| 'NOT_LOADED';
export interface SortingParam {
api: string;
direction: Direction;
}
export interface QueryResult extends StoreQuery {
/**
* Holds the resources from the query results. The field is dynamically populated by denormalizing
* StoreQuery.queryResults with the corresponding resources from the store.
*/
data?: StoreResource | Array<StoreResource>;
}
export interface ManyQueryResult extends QueryResult {
data?: Array<StoreResource>;
}
export interface OneQueryResult extends QueryResult {
data?: StoreResource;
}
export interface StoreQuery {
/**
* query parameter
*/
query: Query;
/**
* Whether data is fetched from the server.
*/
loading: boolean;
/**
* Ordered list of result identifiers that can be used to fetch the actual resources from the store.
*/
resultIds?: Array<ResourceIdentifier>;
/**
* Meta information obtained along with the results
*/
meta?: any;
/**
* Links information obtained along with the results.
*/
links?: any;
/**
* Errors received from the server after attempting to perform a GET request. Errors related to POST, PATCH and
* DELETE are added to StoreResource.
*/
errors: Array<ResourceError>;
}
/**
* Container to hold a Resource in the store with state information.
*/
export interface StoreResource extends Resource {
/**
* State of the resource to track local changes not yet
* published to the json api endpoint.
*/
state?: ResourceState;
/**
* The original resource obtained from the server.
*/
persistedResource?: Resource;
/**
* One of the operation types: reading, creating, updating or deleting.
*/
loading?: OperationType;
/**
* Errors received from the server after attempting to store the resource.
*/
errors?: Array<ResourceError>;
/**
* new resources may only obtain an id when posted to the server. Till that point
* a StoreResource can assign make use of a temporary id and signal this by setting
* this flag to true. The id will not be transmitted to the server and the resource
* is removed from its temporary location (given by its id) as soon as it is posted
* to the server.
*/
hasTemporaryId?: boolean;
}