ketting 8.0.3 → 8.2.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/dist/action.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { State } from './state';
2
2
  import Client from './client';
3
3
  import { Field } from './field';
4
+ import Resource from './resource';
4
5
  export interface ActionInfo {
5
6
  /**
6
7
  * What url to post the form to.
@@ -43,6 +44,16 @@ export interface Action<T extends Record<string, any> = Record<string, any>> ext
43
44
  * Return a field by name.
44
45
  */
45
46
  field(name: string): Field | undefined;
47
+ /**
48
+ * Execute the action or submit the form, then return the next resource.
49
+ *
50
+ * If a server responds with a 201 Status code and a Location header,
51
+ * it will automatically return the newly created resource.
52
+ *
53
+ * If the server responded with a 204 or 205, this function will return
54
+ * `this`.
55
+ */
56
+ submitFollow(formData: T): Promise<Resource>;
46
57
  }
47
58
  export declare class SimpleAction<TFormData extends Record<string, any>> implements Action {
48
59
  /**
@@ -82,6 +93,9 @@ export declare class SimpleAction<TFormData extends Record<string, any>> impleme
82
93
  * Execute the action or submit the form.
83
94
  */
84
95
  submit(formData: TFormData): Promise<State<any>>;
96
+ submitFollow(formData: TFormData): Promise<Resource>;
97
+ private validateForm;
98
+ private fetchOrThrowWithBody;
85
99
  field(name: string): Field | undefined;
86
100
  }
87
101
  export declare class ActionNotFound extends Error {
package/dist/action.js CHANGED
@@ -14,6 +14,38 @@ class SimpleAction {
14
14
  */
15
15
  async submit(formData) {
16
16
  const uri = new URL(this.uri);
17
+ const newFormData = this.validateForm(formData);
18
+ if (this.method === 'GET') {
19
+ uri.search = qs.stringify(newFormData);
20
+ const resource = this.client.go(uri.toString());
21
+ return resource.get();
22
+ }
23
+ const response = await this.fetchOrThrowWithBody(uri, newFormData);
24
+ const state = this.client.getStateForResponse(uri.toString(), response);
25
+ return state;
26
+ }
27
+ async submitFollow(formData) {
28
+ const uri = new URL(this.uri);
29
+ const newFormData = this.validateForm(formData);
30
+ if (this.method === 'GET') {
31
+ uri.search = qs.stringify(newFormData);
32
+ return this.client.go(uri.toString());
33
+ }
34
+ const response = await this.fetchOrThrowWithBody(uri, newFormData);
35
+ switch (response.status) {
36
+ case 201:
37
+ if (response.headers.has('location')) {
38
+ return this.client.go(response.headers.get('location'));
39
+ }
40
+ throw new Error('Could not follow after a 201 request, because the server did not reply with a Location header. If you sent a Location header, check if your service is returning "Access-Control-Expose-Headers: Location".');
41
+ case 204:
42
+ case 205:
43
+ return this.client.go(uri.toString());
44
+ default:
45
+ throw new Error('Did not receive a 201, 204 or 205 status code so we could not follow to the next resource');
46
+ }
47
+ }
48
+ validateForm(formData) {
17
49
  const newFormData = {
18
50
  ...formData
19
51
  };
@@ -29,31 +61,27 @@ class SimpleAction {
29
61
  }
30
62
  }
31
63
  }
32
- if (this.method === 'GET') {
33
- uri.search = qs.stringify(newFormData);
34
- const resource = this.client.go(uri.toString());
35
- return resource.get();
36
- }
64
+ return newFormData;
65
+ }
66
+ fetchOrThrowWithBody(uri, formData) {
37
67
  let body;
38
68
  switch (this.contentType) {
39
69
  case 'application/x-www-form-urlencoded':
40
- body = qs.stringify(newFormData);
70
+ body = qs.stringify(formData);
41
71
  break;
42
72
  case 'application/json':
43
- body = JSON.stringify(newFormData);
73
+ body = JSON.stringify(formData);
44
74
  break;
45
75
  default:
46
76
  throw new Error(`Serializing mimetype ${this.contentType} is not yet supported in actions`);
47
77
  }
48
- const response = await this.client.fetcher.fetchOrThrow(uri.toString(), {
78
+ return this.client.fetcher.fetchOrThrow(uri.toString(), {
49
79
  method: this.method,
50
80
  body,
51
81
  headers: {
52
82
  'Content-Type': this.contentType
53
83
  }
54
84
  });
55
- const state = this.client.getStateForResponse(uri.toString(), response);
56
- return state;
57
85
  }
58
86
  field(name) {
59
87
  return this.fields.find(field => field.name === name);
@@ -1 +1 @@
1
- {"version":3,"file":"action.js","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":";;;AACA,kCAAkC;AAyDlC,MAAa,YAAY;IAyCvB,YAAY,MAAc,EAAE,QAAoB;QAC9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,KAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,CAAqB,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;IAEH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,QAAmB;QAE9B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE9B,MAAM,WAAW,GAAc;YAC7B,GAAG,QAAQ;SACZ,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAEhC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC,EAAE,CAAC;gBAE9B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAChB,mEAAmE;oBACnE,oCAAoC;oBACnC,WAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;gBACjD,CAAC;qBAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAC1B,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,iCAAiC,CAAC,CAAC;gBACtE,CAAC;YAEH,CAAC;QAEH,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC1B,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChD,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,IAAI,CAAC;QACT,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;YACzB,KAAK,mCAAmC;gBACtC,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBACjC,MAAM;YACR,KAAK,kBAAkB;gBACrB,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBACnC,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,WAAW,kCAAkC,CAAC,CAAC;QAChG,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YACtE,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI;YACJ,OAAO,EAAE;gBACP,cAAc,EAAE,IAAI,CAAC,WAAW;aACjC;SACF,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;QACxE,OAAO,KAAK,CAAC;IAEf,CAAC;IAED,KAAK,CAAC,IAAY;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACxD,CAAC;CACF;AA5GD,oCA4GC;AAED,MAAa,cAAe,SAAQ,KAAK;CAAG;AAA5C,wCAA4C"}
1
+ {"version":3,"file":"action.js","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":"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"}
package/dist/field.d.ts CHANGED
@@ -18,10 +18,6 @@ interface BaseField<T> {
18
18
  * This is similar to the HTML5 "type" attribute on forms.
19
19
  */
20
20
  type: string;
21
- /**
22
- * The current (pre-filed) value on the form.
23
- */
24
- value?: T;
25
21
  /**
26
22
  * This could be used to describe a sample value.
27
23
  */
@@ -39,12 +35,18 @@ interface BaseField<T> {
39
35
  */
40
36
  label?: string;
41
37
  }
38
+ interface SingleValueField<T> extends BaseField<T> {
39
+ /**
40
+ * The current (pre-filed) value on the form.
41
+ */
42
+ value?: T;
43
+ }
42
44
  /**
43
45
  * The base type for things that are range-like.
44
46
  *
45
47
  * This includes numbers, dates and time fields.
46
48
  */
47
- export interface RangeField<T> extends BaseField<T> {
49
+ export interface RangeField<T> extends SingleValueField<T> {
48
50
  max?: number;
49
51
  min?: number;
50
52
  step?: number;
@@ -52,14 +54,14 @@ export interface RangeField<T> extends BaseField<T> {
52
54
  /**
53
55
  * Toggles/checkboxes
54
56
  */
55
- export interface BooleanField extends BaseField<boolean> {
57
+ export interface BooleanField extends SingleValueField<boolean> {
56
58
  type: 'checkbox' | 'radio';
57
59
  }
58
60
  /**
59
61
  * Any field that encodes itself as a string but with no
60
62
  * special features.
61
63
  */
62
- export interface BasicStringField extends BaseField<string> {
64
+ export interface BasicStringField extends SingleValueField<string> {
63
65
  type: 'color' | 'email' | 'password' | 'search' | 'tel' | 'url';
64
66
  minLength?: number;
65
67
  maxLength?: number;
@@ -70,10 +72,10 @@ export interface RangeStringField extends RangeField<string> {
70
72
  export interface DateTimeField extends RangeField<Date> {
71
73
  type: 'datetime' | 'datetime-local';
72
74
  }
73
- export interface HiddenField extends BaseField<string | number | null | boolean> {
75
+ export interface HiddenField extends SingleValueField<string | number | null | boolean> {
74
76
  type: 'hidden';
75
77
  }
76
- export interface FileField extends BaseField<never> {
78
+ export interface FileField extends SingleValueField<never> {
77
79
  type: 'file';
78
80
  }
79
81
  export interface NumberField extends RangeField<number> {
@@ -138,6 +140,15 @@ export type SelectFieldSingle = BaseField<string> & {
138
140
  type: 'select';
139
141
  renderAs?: 'radio' | 'dropdown';
140
142
  multiple?: false;
143
+ /**
144
+ * The current (pre-filed) value on the form.
145
+ */
146
+ selectedValue?: string;
147
+ /**
148
+ * The current (pre-filed) value on the form.
149
+ * @deprecated Use selectedValue instead
150
+ */
151
+ value?: string;
141
152
  } & OptionsDataSource;
142
153
  /**
143
154
  * An options field where users can select more than 1 item
@@ -146,14 +157,23 @@ export type SelectFieldMulti = BaseField<string> & {
146
157
  type: 'select';
147
158
  renderAs?: 'checkbox' | 'dropdown';
148
159
  multiple: true;
160
+ /**
161
+ * The current (pre-filed) values on the form.
162
+ */
163
+ selectedValues?: string[];
164
+ /**
165
+ * The current (pre-filed) value on the form.
166
+ * @deprecated Use selectedValues instead
167
+ */
168
+ value?: string;
149
169
  } & OptionsDataSource;
150
- export interface TextField extends BaseField<string> {
170
+ export interface TextField extends SingleValueField<string> {
151
171
  type: 'text';
152
172
  minLength?: number;
153
173
  maxLength?: number;
154
174
  pattern?: RegExp;
155
175
  }
156
- export interface TextAreaField extends BaseField<string> {
176
+ export interface TextAreaField extends SingleValueField<string> {
157
177
  type: 'textarea';
158
178
  minLength?: number;
159
179
  maxLength?: number;
@@ -1,5 +1,7 @@
1
1
  import Resource from './resource';
2
2
  import { LinkVariables } from './link';
3
+ import { State } from './state';
4
+ import { GetRequestOptions } from './types';
3
5
  /**
4
6
  * Base interface for both FollowOne and FollowAll
5
7
  */
@@ -63,6 +65,12 @@ export declare class FollowPromiseOne<T = any> extends FollowPromise<Resource<T>
63
65
  * For example: resource.follow('foo').follow('bar');
64
66
  */
65
67
  follow<TNested = any>(rel: string, variables?: LinkVariables): FollowPromiseOne<TNested>;
68
+ /**
69
+ * Gets the current state of the resource.
70
+ *
71
+ * This function will return a State object.
72
+ */
73
+ get(getOptions?: GetRequestOptions): Promise<State<T>>;
66
74
  /**
67
75
  * Follows a set of links immediately after following this link.
68
76
  *
@@ -93,6 +101,12 @@ export declare class FollowPromiseMany<T = any> extends FollowPromise<Resource<T
93
101
  * Implementation of a Promise.finally function
94
102
  */
95
103
  finally<TResult1 = any>(onfinally: () => TResult1 | PromiseLike<TResult1>): Promise<TResult1>;
104
+ /**
105
+ * Gets the current states of the resources.
106
+ *
107
+ * This function will return an array of State object.
108
+ */
109
+ get(getOptions?: GetRequestOptions): Promise<State<T>[]>;
96
110
  /**
97
111
  * This function does the actual fetching, to obtained the url
98
112
  * of the linked resource. It returns the Resource object.
@@ -82,6 +82,14 @@ class FollowPromiseOne extends FollowPromise {
82
82
  follow(rel, variables) {
83
83
  return new FollowPromiseOne(this.fetchLinkedResource(), rel, variables);
84
84
  }
85
+ /**
86
+ * Gets the current state of the resource.
87
+ *
88
+ * This function will return a State object.
89
+ */
90
+ async get(getOptions) {
91
+ return (await this).get(getOptions);
92
+ }
85
93
  /**
86
94
  * Follows a set of links immediately after following this link.
87
95
  *
@@ -146,6 +154,14 @@ class FollowPromiseMany extends FollowPromise {
146
154
  finally(onfinally) {
147
155
  return this.then(() => onfinally(), () => onfinally());
148
156
  }
157
+ /**
158
+ * Gets the current states of the resources.
159
+ *
160
+ * This function will return an array of State object.
161
+ */
162
+ async get(getOptions) {
163
+ return Promise.all((await this).map(resource => resource.get(getOptions)));
164
+ }
149
165
  /**
150
166
  * This function does the actual fetching, to obtained the url
151
167
  * of the linked resource. It returns the Resource object.
@@ -1 +1 @@
1
- {"version":3,"file":"follow-promise.js","sourceRoot":"","sources":["../src/follow-promise.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"follow-promise.js","sourceRoot":"","sources":["../src/follow-promise.ts"],"names":[],"mappings":"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"}
@@ -83,6 +83,8 @@ export declare class BaseState<T> extends BaseHeadState implements State<T> {
83
83
  * formats that only supply 1 action, and no name.
84
84
  */
85
85
  action<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData>;
86
+ findAction<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData> | undefined;
87
+ private doFindAction;
86
88
  /**
87
89
  * Returns all actions
88
90
  */
@@ -93,9 +93,26 @@ class BaseState extends BaseHeadState {
93
93
  * formats that only supply 1 action, and no name.
94
94
  */
95
95
  action(name) {
96
- if (!this.actionInfo.length) {
96
+ const actionSearchResult = this.doFindAction(name);
97
+ if (actionSearchResult === 'NO_ACTION_DEFINED') {
97
98
  throw new action_1.ActionNotFound('This State does not define any actions');
98
99
  }
100
+ if (actionSearchResult === 'NO_ACTION_FOR_THE_PROVIDED_NAME') {
101
+ throw new action_1.ActionNotFound('This State defines no action');
102
+ }
103
+ return actionSearchResult;
104
+ }
105
+ findAction(name) {
106
+ const actionSearchResult = this.doFindAction(name);
107
+ if (typeof actionSearchResult !== 'object') {
108
+ return undefined;
109
+ }
110
+ return actionSearchResult;
111
+ }
112
+ doFindAction(name) {
113
+ if (!this.actionInfo.length) {
114
+ return 'NO_ACTION_DEFINED';
115
+ }
99
116
  if (name === undefined) {
100
117
  return new action_1.SimpleAction(this.client, this.actionInfo[0]);
101
118
  }
@@ -104,7 +121,7 @@ class BaseState extends BaseHeadState {
104
121
  return new action_1.SimpleAction(this.client, action);
105
122
  }
106
123
  }
107
- throw new action_1.ActionNotFound('This State defines no action');
124
+ return 'NO_ACTION_FOR_THE_PROVIDED_NAME';
108
125
  }
109
126
  /**
110
127
  * Returns all actions
@@ -135,8 +152,8 @@ class BaseState extends BaseHeadState {
135
152
  * JSON.serialize().
136
153
  */
137
154
  serializeBody() {
138
- if ((global.Buffer && this.data instanceof Buffer) ||
139
- (global.Blob && this.data instanceof Blob) ||
155
+ if ((globalThis.Buffer && this.data instanceof Buffer) ||
156
+ (globalThis.Blob && this.data instanceof Blob) ||
140
157
  typeof this.data === 'string') {
141
158
  return this.data;
142
159
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base-state.js","sourceRoot":"","sources":["../../src/state/base-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-state.js","sourceRoot":"","sources":["../../src/state/base-state.ts"],"names":[],"mappings":"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"}
package/dist/state/hal.js CHANGED
@@ -160,7 +160,6 @@ function parseHalEmbedded(client, context, body, headers) {
160
160
  }
161
161
  for (const embeddedItem of embeddedList) {
162
162
  if (embeddedItem._links?.self?.href === undefined) {
163
- // eslint-disable-next-line no-console
164
163
  console.warn('An item in _embedded was ignored. Each item must have a single "self" link');
165
164
  continue;
166
165
  }
@@ -207,41 +206,40 @@ function parseHalField(halField) {
207
206
  case 'url':
208
207
  case 'email':
209
208
  if (halField.options) {
209
+ const multiple = !('maxItems' in halField.options) || !halField.options.maxItems || halField.options.maxItems > 1;
210
210
  const baseField = {
211
211
  name: halField.name,
212
212
  type: 'select',
213
213
  label: halField.prompt,
214
214
  required: halField.required || false,
215
215
  readOnly: halField.readOnly || false,
216
- multiple: !('maxItems' in halField.options) || !halField.options.maxItems || halField.options.maxItems > 1,
217
- value: (halField.options.selectedValues || halField.value)
216
+ value: (halField.options.selectedValues || halField.value),
218
217
  };
219
- const labelField = halField.options.promptField || 'prompt';
220
- const valueField = halField.options.valueField || 'value';
221
- if (isInlineOptions(halField.options)) {
222
- const options = {};
223
- for (const entry of halField.options.inline) {
224
- if (typeof entry === 'string') {
225
- options[entry] = entry;
226
- }
227
- else {
228
- options[entry[valueField]] = entry[labelField];
229
- }
230
- }
218
+ const optionsDataSource = toOptionsDataSource(halField.options);
219
+ if (multiple) {
231
220
  return {
221
+ multiple: true,
222
+ selectedValues: halField.options.selectedValues,
232
223
  ...baseField,
233
- options
224
+ ...optionsDataSource
234
225
  };
235
226
  }
236
227
  else {
228
+ const selectedValues = halField.options.selectedValues;
229
+ let selectedValue;
230
+ if (selectedValues) {
231
+ if (selectedValues.length === 1) {
232
+ selectedValue = selectedValues[0];
233
+ }
234
+ else if (selectedValues.length > 1) {
235
+ console.warn(`More than 1 selected value received for single select field ${baseField.name}. Ignoring all selected values for this field.`);
236
+ }
237
+ }
237
238
  return {
239
+ multiple,
240
+ selectedValue,
238
241
  ...baseField,
239
- dataSource: {
240
- href: halField.options.link.href,
241
- type: halField.options.link.type,
242
- labelField,
243
- valueField,
244
- }
242
+ ...optionsDataSource
245
243
  };
246
244
  }
247
245
  }
@@ -357,6 +355,32 @@ function parseHalField(halField) {
357
355
  return undefined;
358
356
  }
359
357
  }
358
+ function toOptionsDataSource(halFieldOptions) {
359
+ const labelField = halFieldOptions.promptField || 'prompt';
360
+ const valueField = halFieldOptions.valueField || 'value';
361
+ if (isInlineOptions(halFieldOptions)) {
362
+ const options = {};
363
+ for (const entry of halFieldOptions.inline) {
364
+ if (typeof entry === 'string') {
365
+ options[entry] = entry;
366
+ }
367
+ else {
368
+ options[entry[valueField]] = entry[labelField];
369
+ }
370
+ }
371
+ return { options };
372
+ }
373
+ else {
374
+ return {
375
+ dataSource: {
376
+ href: halFieldOptions.link.href,
377
+ type: halFieldOptions.link.type,
378
+ labelField,
379
+ valueField,
380
+ }
381
+ };
382
+ }
383
+ }
360
384
  function isInlineOptions(options) {
361
385
  return options.inline !== undefined;
362
386
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hal.js","sourceRoot":"","sources":["../../src/state/hal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hal.js","sourceRoot":"","sources":["../../src/state/hal.ts"],"names":[],"mappings":"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"}
@@ -46,6 +46,12 @@ export type State<T = any> = {
46
46
  * If the format provides a default action, the name may be omitted.
47
47
  */
48
48
  action<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData>;
49
+ /**
50
+ * Find an action by name.
51
+ *
52
+ * If the format provides a default action, the name may be omitted.
53
+ */
54
+ findAction<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData> | undefined;
49
55
  /**
50
56
  * Returns all actions
51
57
  */
@@ -98,7 +104,7 @@ export type State<T = any> = {
98
104
  * Some information in HEAD responses might be available, but many aren't.
99
105
  * Notably, the body.
100
106
  */
101
- export type HeadState = Omit<State, 'data' | 'action' | 'actions' | 'hasAction' | 'serializeBody' | 'getEmbedded' | 'client' | 'clone'>;
107
+ export type HeadState = Omit<State, 'data' | 'action' | 'findAction' | 'actions' | 'hasAction' | 'serializeBody' | 'getEmbedded' | 'client' | 'clone'>;
102
108
  /**
103
109
  * A 'StateFactory' is responsible for taking a Fetch Response, and returning
104
110
  * an object that impements the State interface
@@ -1 +1 @@
1
- {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/state/interface.ts"],"names":[],"mappings":";;AA8HA,0BAQC;AArID,kCAA+C;AA6H/C,SAAgB,OAAO,CAAC,KAA0B;IAEhD,OAAO,CACL,OAAQ,KAAa,CAAC,GAAG,KAAK,QAAQ;QACrC,KAAa,CAAC,KAAK,YAAY,YAAK;QACpC,KAAa,CAAC,OAAO,YAAY,OAAO,CAC1C,CAAC;AAEJ,CAAC"}
1
+ {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/state/interface.ts"],"names":[],"mappings":";;AAqIA,0BAQC;AA5ID,kCAA+C;AAoI/C,SAAgB,OAAO,CAAC,KAA0B;IAEhD,OAAO,CACL,OAAQ,KAAa,CAAC,GAAG,KAAK,QAAQ;QACrC,KAAa,CAAC,KAAK,YAAY,YAAK;QACpC,KAAa,CAAC,OAAO,YAAY,OAAO,CAC1C,CAAC;AAEJ,CAAC"}
@@ -5,7 +5,7 @@ function needsJsonStringify(input) {
5
5
  if (typeof input === 'string') {
6
6
  return false;
7
7
  }
8
- if (global.Buffer && input instanceof Buffer) {
8
+ if (globalThis.Buffer && input instanceof Buffer) {
9
9
  return false;
10
10
  }
11
11
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-body-helper.js","sourceRoot":"","sources":["../../src/util/fetch-body-helper.ts"],"names":[],"mappings":";;AAAA,gDAYC;AAZD,SAAgB,kBAAkB,CAAC,KAAU;IAE3C,IAAI,OAAO,KAAK,KAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAK,MAAc,CAAC,MAAM,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AAEd,CAAC"}
1
+ {"version":3,"file":"fetch-body-helper.js","sourceRoot":"","sources":["../../src/util/fetch-body-helper.ts"],"names":[],"mappings":";;AAAA,gDAYC;AAZD,SAAgB,kBAAkB,CAAC,KAAU;IAE3C,IAAI,OAAO,KAAK,KAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AAEd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ketting",
3
- "version": "8.0.3",
3
+ "version": "8.2.0",
4
4
  "description": "Opiniated HATEAOS / Rest client.",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -39,7 +39,7 @@
39
39
  "types": "dist/index.d.ts",
40
40
  "dependencies": {
41
41
  "@badgateway/oauth2-client": "^2.0.17",
42
- "hal-types": "^2.0.0",
42
+ "hal-types": "^3.0.0",
43
43
  "http-link-header": "^1.0.3",
44
44
  "querystring-browser": "^1.0.4",
45
45
  "sax": "^1.2.4",
package/src/action.ts CHANGED
@@ -2,6 +2,7 @@ import { State } from './state';
2
2
  import * as qs from 'querystring';
3
3
  import Client from './client';
4
4
  import { Field } from './field';
5
+ import Resource from './resource';
5
6
 
6
7
  export interface ActionInfo {
7
8
 
@@ -54,6 +55,17 @@ export interface Action<T extends Record<string, any> = Record<string, any>> ext
54
55
  * Return a field by name.
55
56
  */
56
57
  field(name: string): Field | undefined;
58
+
59
+ /**
60
+ * Execute the action or submit the form, then return the next resource.
61
+ *
62
+ * If a server responds with a 201 Status code and a Location header,
63
+ * it will automatically return the newly created resource.
64
+ *
65
+ * If the server responded with a 204 or 205, this function will return
66
+ * `this`.
67
+ */
68
+ submitFollow(formData: T): Promise<Resource>;
57
69
  }
58
70
 
59
71
  export class SimpleAction<TFormData extends Record<string, any>> implements Action {
@@ -113,6 +125,44 @@ export class SimpleAction<TFormData extends Record<string, any>> implements Acti
113
125
 
114
126
  const uri = new URL(this.uri);
115
127
 
128
+ const newFormData = this.validateForm(formData);
129
+
130
+ if (this.method === 'GET') {
131
+ uri.search = qs.stringify(newFormData);
132
+ const resource = this.client.go(uri.toString());
133
+ return resource.get();
134
+ }
135
+ const response = await this.fetchOrThrowWithBody(uri, newFormData);
136
+ const state = this.client.getStateForResponse(uri.toString(), response);
137
+ return state;
138
+ }
139
+
140
+ async submitFollow(formData: TFormData): Promise<Resource> {
141
+ const uri = new URL(this.uri);
142
+
143
+ const newFormData = this.validateForm(formData);
144
+
145
+ if (this.method === 'GET') {
146
+ uri.search = qs.stringify(newFormData);
147
+ return this.client.go(uri.toString());
148
+ }
149
+
150
+ const response = await this.fetchOrThrowWithBody(uri, newFormData);
151
+ switch (response.status) {
152
+ case 201:
153
+ if (response.headers.has('location')) {
154
+ return this.client.go(response.headers.get('location')!);
155
+ }
156
+ throw new Error('Could not follow after a 201 request, because the server did not reply with a Location header. If you sent a Location header, check if your service is returning "Access-Control-Expose-Headers: Location".');
157
+ case 204 :
158
+ case 205 :
159
+ return this.client.go(uri.toString());
160
+ default:
161
+ throw new Error('Did not receive a 201, 204 or 205 status code so we could not follow to the next resource');
162
+ }
163
+ }
164
+
165
+ private validateForm(formData: TFormData): TFormData {
116
166
  const newFormData: TFormData = {
117
167
  ...formData
118
168
  };
@@ -132,33 +182,28 @@ export class SimpleAction<TFormData extends Record<string, any>> implements Acti
132
182
  }
133
183
 
134
184
  }
185
+ return newFormData;
186
+ }
135
187
 
136
- if (this.method === 'GET') {
137
- uri.search = qs.stringify(newFormData);
138
- const resource = this.client.go(uri.toString());
139
- return resource.get();
140
- }
188
+ private fetchOrThrowWithBody(uri: URL, formData: TFormData): Promise<Response> {
141
189
  let body;
142
190
  switch (this.contentType) {
143
191
  case 'application/x-www-form-urlencoded' :
144
- body = qs.stringify(newFormData);
192
+ body = qs.stringify(formData);
145
193
  break;
146
194
  case 'application/json':
147
- body = JSON.stringify(newFormData);
195
+ body = JSON.stringify(formData);
148
196
  break;
149
197
  default :
150
198
  throw new Error(`Serializing mimetype ${this.contentType} is not yet supported in actions`);
151
199
  }
152
- const response = await this.client.fetcher.fetchOrThrow(uri.toString(), {
200
+ return this.client.fetcher.fetchOrThrow(uri.toString(), {
153
201
  method: this.method,
154
202
  body,
155
203
  headers: {
156
204
  'Content-Type': this.contentType
157
205
  }
158
206
  });
159
- const state = this.client.getStateForResponse(uri.toString(), response);
160
- return state;
161
-
162
207
  }
163
208
 
164
209
  field(name: string): Field | undefined {
package/src/field.ts CHANGED
@@ -32,11 +32,6 @@ interface BaseField<T> {
32
32
  */
33
33
  type: string;
34
34
 
35
- /**
36
- * The current (pre-filed) value on the form.
37
- */
38
- value?: T;
39
-
40
35
  /**
41
36
  * This could be used to describe a sample value.
42
37
  */
@@ -58,12 +53,19 @@ interface BaseField<T> {
58
53
  label?: string;
59
54
  }
60
55
 
56
+ interface SingleValueField<T> extends BaseField<T> {
57
+ /**
58
+ * The current (pre-filed) value on the form.
59
+ */
60
+ value?: T;
61
+ }
62
+
61
63
  /**
62
64
  * The base type for things that are range-like.
63
65
  *
64
66
  * This includes numbers, dates and time fields.
65
67
  */
66
- export interface RangeField<T> extends BaseField<T> {
68
+ export interface RangeField<T> extends SingleValueField<T> {
67
69
  max?: number;
68
70
  min?: number;
69
71
  step?: number;
@@ -72,7 +74,7 @@ export interface RangeField<T> extends BaseField<T> {
72
74
  /**
73
75
  * Toggles/checkboxes
74
76
  */
75
- export interface BooleanField extends BaseField<boolean> {
77
+ export interface BooleanField extends SingleValueField<boolean> {
76
78
  type: 'checkbox' | 'radio';
77
79
  }
78
80
 
@@ -80,7 +82,7 @@ export interface BooleanField extends BaseField<boolean> {
80
82
  * Any field that encodes itself as a string but with no
81
83
  * special features.
82
84
  */
83
- export interface BasicStringField extends BaseField<string> {
85
+ export interface BasicStringField extends SingleValueField<string> {
84
86
  type: 'color' | 'email' | 'password' | 'search' | 'tel' | 'url';
85
87
  minLength?: number;
86
88
  maxLength?: number;
@@ -94,11 +96,11 @@ export interface DateTimeField extends RangeField<Date> {
94
96
  type: 'datetime' | 'datetime-local';
95
97
  }
96
98
 
97
- export interface HiddenField extends BaseField<string | number | null | boolean> {
99
+ export interface HiddenField extends SingleValueField<string | number | null | boolean> {
98
100
  type: 'hidden';
99
101
  }
100
102
 
101
- export interface FileField extends BaseField<never> {
103
+ export interface FileField extends SingleValueField<never> {
102
104
  type: 'file';
103
105
  }
104
106
 
@@ -170,6 +172,15 @@ export type SelectFieldSingle = BaseField<string> & {
170
172
  type: 'select';
171
173
  renderAs?: 'radio' | 'dropdown';
172
174
  multiple?: false;
175
+ /**
176
+ * The current (pre-filed) value on the form.
177
+ */
178
+ selectedValue?: string;
179
+ /**
180
+ * The current (pre-filed) value on the form.
181
+ * @deprecated Use selectedValue instead
182
+ */
183
+ value?: string;
173
184
  } & OptionsDataSource;
174
185
 
175
186
  /**
@@ -179,17 +190,26 @@ export type SelectFieldMulti = BaseField<string> & {
179
190
  type: 'select';
180
191
  renderAs?: 'checkbox' | 'dropdown';
181
192
  multiple: true;
193
+ /**
194
+ * The current (pre-filed) values on the form.
195
+ */
196
+ selectedValues?: string[];
197
+ /**
198
+ * The current (pre-filed) value on the form.
199
+ * @deprecated Use selectedValues instead
200
+ */
201
+ value?: string;
182
202
  } & OptionsDataSource;
183
203
 
184
204
 
185
- export interface TextField extends BaseField<string> {
205
+ export interface TextField extends SingleValueField<string> {
186
206
  type: 'text';
187
207
  minLength?: number;
188
208
  maxLength?: number;
189
209
  pattern?: RegExp;
190
210
  }
191
211
 
192
- export interface TextAreaField extends BaseField<string> {
212
+ export interface TextAreaField extends SingleValueField<string> {
193
213
  type: 'textarea';
194
214
  minLength?: number;
195
215
  maxLength?: number;
@@ -1,5 +1,7 @@
1
1
  import Resource from './resource';
2
2
  import { LinkVariables } from './link';
3
+ import {State} from './state';
4
+ import {GetRequestOptions} from './types';
3
5
 
4
6
  /**
5
7
  * Base interface for both FollowOne and FollowAll
@@ -123,6 +125,15 @@ export class FollowPromiseOne<T = any> extends FollowPromise<Resource<T>> {
123
125
 
124
126
  }
125
127
 
128
+ /**
129
+ * Gets the current state of the resource.
130
+ *
131
+ * This function will return a State object.
132
+ */
133
+ async get(getOptions?: GetRequestOptions): Promise<State<T>> {
134
+ return (await this).get(getOptions);
135
+ }
136
+
126
137
  /**
127
138
  * Follows a set of links immediately after following this link.
128
139
  *
@@ -219,6 +230,15 @@ export class FollowPromiseMany<T = any> extends FollowPromise<Resource<T>[]> {
219
230
 
220
231
  }
221
232
 
233
+ /**
234
+ * Gets the current states of the resources.
235
+ *
236
+ * This function will return an array of State object.
237
+ */
238
+ async get(getOptions?: GetRequestOptions): Promise<State<T>[]> {
239
+ return Promise.all((await this).map(resource => resource.get(getOptions)));
240
+ }
241
+
222
242
  /**
223
243
  * This function does the actual fetching, to obtained the url
224
244
  * of the linked resource. It returns the Resource object.
@@ -165,9 +165,31 @@ export class BaseState<T> extends BaseHeadState implements State<T> {
165
165
  */
166
166
  action<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData> {
167
167
 
168
- if (!this.actionInfo.length) {
168
+ const actionSearchResult = this.doFindAction(name);
169
+ if (actionSearchResult === 'NO_ACTION_DEFINED') {
169
170
  throw new ActionNotFound('This State does not define any actions');
170
171
  }
172
+ if (actionSearchResult === 'NO_ACTION_FOR_THE_PROVIDED_NAME') {
173
+ throw new ActionNotFound('This State defines no action');
174
+ }
175
+ return actionSearchResult;
176
+
177
+ }
178
+
179
+ findAction<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData> | undefined {
180
+
181
+ const actionSearchResult = this.doFindAction(name);
182
+ if (typeof actionSearchResult !== 'object') {
183
+ return undefined;
184
+ }
185
+ return actionSearchResult;
186
+ }
187
+
188
+ private doFindAction<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData> | ActionNotFoundReason {
189
+
190
+ if (!this.actionInfo.length) {
191
+ return 'NO_ACTION_DEFINED';
192
+ }
171
193
  if (name === undefined) {
172
194
  return new SimpleAction(this.client, this.actionInfo[0]);
173
195
  }
@@ -176,8 +198,7 @@ export class BaseState<T> extends BaseHeadState implements State<T> {
176
198
  return new SimpleAction(this.client, action);
177
199
  }
178
200
  }
179
- throw new ActionNotFound('This State defines no action');
180
-
201
+ return 'NO_ACTION_FOR_THE_PROVIDED_NAME';
181
202
  }
182
203
 
183
204
  /**
@@ -216,8 +237,8 @@ export class BaseState<T> extends BaseHeadState implements State<T> {
216
237
  serializeBody(): Buffer|Blob|string {
217
238
 
218
239
  if (
219
- ((global as any).Buffer && this.data instanceof Buffer) ||
220
- ((global as any).Blob && this.data instanceof Blob) ||
240
+ (globalThis.Buffer && this.data instanceof Buffer) ||
241
+ (globalThis.Blob && this.data instanceof Blob) ||
221
242
  typeof this.data === 'string')
222
243
  {
223
244
  return this.data;
@@ -255,3 +276,5 @@ export class BaseState<T> extends BaseHeadState implements State<T> {
255
276
  }
256
277
 
257
278
  }
279
+
280
+ type ActionNotFoundReason = 'NO_ACTION_DEFINED' | 'NO_ACTION_FOR_THE_PROVIDED_NAME';
package/src/state/hal.ts CHANGED
@@ -3,7 +3,7 @@ import { parseLink } from '../http/util';
3
3
  import { Link, Links } from '../link';
4
4
  import { resolve } from '../util/uri';
5
5
  import { ActionInfo } from '../action';
6
- import { Field } from '../field';
6
+ import {Field, OptionsDataSource} from '../field';
7
7
  import { StateFactory } from './interface';
8
8
  import Client from '../client';
9
9
  import * as hal from 'hal-types';
@@ -219,7 +219,7 @@ function parseHalEmbedded(client: Client, context: string, body: hal.HalResource
219
219
  for (const embeddedItem of embeddedList) {
220
220
 
221
221
  if ((embeddedItem._links?.self as hal.HalLink)?.href === undefined) {
222
- // eslint-disable-next-line no-console
222
+
223
223
  console.warn('An item in _embedded was ignored. Each item must have a single "self" link');
224
224
  continue;
225
225
  }
@@ -281,44 +281,41 @@ function parseHalField(halField: hal.HalFormsProperty): Field | undefined {
281
281
  case 'email' :
282
282
 
283
283
  if (halField.options) {
284
+ const multiple: boolean | undefined = !('maxItems' in halField.options) || !halField.options.maxItems || halField.options.maxItems > 1;
285
+
284
286
  const baseField = {
285
287
  name: halField.name,
286
288
  type: 'select' as const,
287
289
  label: halField.prompt,
288
290
  required: halField.required || false,
289
291
  readOnly: halField.readOnly || false,
290
- multiple: !('maxItems' in halField.options) || !halField.options.maxItems || halField.options.maxItems > 1 as any,
291
- value: (halField.options.selectedValues || halField.value) as any
292
+ value: (halField.options.selectedValues || halField.value) as any,
292
293
  };
293
294
 
294
- const labelField = halField.options.promptField || 'prompt';
295
- const valueField = halField.options.valueField || 'value';
296
- if (isInlineOptions(halField.options)) {
297
-
298
- const options: Record<string, string> = {};
299
-
300
- for(const entry of halField.options.inline) {
301
-
302
- if (typeof entry === 'string') {
303
- options[entry] = entry;
304
- } else {
305
- options[entry[valueField]] = entry[labelField];
306
- }
307
- }
295
+ const optionsDataSource = toOptionsDataSource(halField.options);
308
296
 
297
+ if (multiple) {
309
298
  return {
299
+ multiple: true,
300
+ selectedValues: halField.options.selectedValues,
310
301
  ...baseField,
311
- options
302
+ ...optionsDataSource
312
303
  };
313
304
  } else {
305
+ const selectedValues = halField.options.selectedValues;
306
+ let selectedValue: string | undefined;
307
+ if (selectedValues) {
308
+ if (selectedValues.length === 1) {
309
+ selectedValue = selectedValues[0];
310
+ } else if (selectedValues.length > 1) {
311
+ console.warn(`More than 1 selected value received for single select field ${baseField.name}. Ignoring all selected values for this field.`);
312
+ }
313
+ }
314
314
  return {
315
+ multiple,
316
+ selectedValue,
315
317
  ...baseField,
316
- dataSource: {
317
- href: halField.options.link.href,
318
- type: halField.options.link.type,
319
- labelField,
320
- valueField,
321
- }
318
+ ...optionsDataSource
322
319
  };
323
320
  }
324
321
  } else {
@@ -435,6 +432,35 @@ function parseHalField(halField: hal.HalFormsProperty): Field | undefined {
435
432
 
436
433
  }
437
434
 
435
+ function toOptionsDataSource(halFieldOptions: NonNullable<hal.HalFormsSimpleProperty['options']>): OptionsDataSource {
436
+ const labelField = halFieldOptions.promptField || 'prompt';
437
+ const valueField = halFieldOptions.valueField || 'value';
438
+ if (isInlineOptions(halFieldOptions)) {
439
+
440
+ const options: Record<string, string> = {};
441
+
442
+ for (const entry of halFieldOptions.inline) {
443
+
444
+ if (typeof entry === 'string') {
445
+ options[entry] = entry;
446
+ } else {
447
+ options[entry[valueField]] = entry[labelField];
448
+ }
449
+ }
450
+
451
+ return {options};
452
+ } else {
453
+ return {
454
+ dataSource: {
455
+ href: halFieldOptions.link.href,
456
+ type: halFieldOptions.link.type,
457
+ labelField,
458
+ valueField,
459
+ }
460
+ };
461
+ }
462
+ }
463
+
438
464
  function isInlineOptions(options: hal.HalFormsSimpleProperty['options']): options is hal.HalFormsOptionsInline {
439
465
 
440
466
  return (options as any).inline !== undefined;
@@ -56,6 +56,13 @@ export type State<T = any> = {
56
56
  */
57
57
  action<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData>;
58
58
 
59
+ /**
60
+ * Find an action by name.
61
+ *
62
+ * If the format provides a default action, the name may be omitted.
63
+ */
64
+ findAction<TFormData extends Record<string, any> = any>(name?: string): Action<TFormData> | undefined;
65
+
59
66
  /**
60
67
  * Returns all actions
61
68
  */
@@ -116,7 +123,7 @@ export type State<T = any> = {
116
123
  * Some information in HEAD responses might be available, but many aren't.
117
124
  * Notably, the body.
118
125
  */
119
- export type HeadState = Omit<State, 'data' | 'action' | 'actions' | 'hasAction' | 'serializeBody' | 'getEmbedded' | 'client' | 'clone'>;
126
+ export type HeadState = Omit<State, 'data' | 'action' | 'findAction' | 'actions' | 'hasAction' | 'serializeBody' | 'getEmbedded' | 'client' | 'clone'>;
120
127
 
121
128
  /**
122
129
  * A 'StateFactory' is responsible for taking a Fetch Response, and returning
@@ -4,7 +4,7 @@ export function needsJsonStringify(input: any): boolean {
4
4
  return false;
5
5
  }
6
6
 
7
- if ((global as any).Buffer && input instanceof Buffer) {
7
+ if (globalThis.Buffer && input instanceof Buffer) {
8
8
  return false;
9
9
  }
10
10