ketting 9.0.0 → 9.1.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/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { default as Client, default as Ketting, default } from './client.js';
2
2
  export { default as Resource } from './resource.js';
3
+ export { Resources } from './state/resources.js';
3
4
  export { type Link, LinkNotFound, Links, type LinkVariables } from './link.js';
4
5
  export { resolve } from './util/uri.js';
5
6
  export { expand } from './util/uri-template.js';
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { default as Client, default as Ketting, default } from './client.js';
2
2
  export { default as Resource } from './resource.js';
3
+ export { Resources } from './state/resources.js';
3
4
  export { LinkNotFound, Links } from './link.js';
4
5
  export { resolve } from './util/uri.js';
5
6
  export { expand } from './util/uri-template.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,OAAO,IAAI,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAa,YAAY,EAAE,KAAK,EAAsB,MAAM,WAAW,CAAC;AAE/E,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,OAAO,EACL,SAAS,EACT,aAAa,EAEb,QAAQ,EACR,UAAU,EACV,OAAO,EACP,OAAO,GACR,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAkB1C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,OAAO,IAAI,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAa,YAAY,EAAE,KAAK,EAAsB,MAAM,WAAW,CAAC;AAE/E,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,OAAO,EACL,SAAS,EACT,aAAa,EAEb,QAAQ,EACR,UAAU,EACV,OAAO,EACP,OAAO,GACR,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAkB1C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { State, HeadState } from './interface.js';
2
+ import { Resources } from './resources.js';
2
3
  import { Links, LinkVariables } from '../link.js';
3
4
  import Client from '../client.js';
4
5
  import { Action, ActionInfo } from '../action.js';
@@ -58,7 +59,7 @@ export declare class BaseHeadState implements HeadState {
58
59
  *
59
60
  * If no resources were found, the array will be empty.
60
61
  */
61
- followAll<TFollowedResource = any>(rel: string): Resource<TFollowedResource>[];
62
+ followAll<TFollowedResource = any>(rel: string): Resources<TFollowedResource>;
62
63
  /**
63
64
  * Content-headers are a subset of HTTP headers that related directly
64
65
  * to the content. The obvious ones are Content-Type.
@@ -1,3 +1,4 @@
1
+ import { Resources } from './resources.js';
1
2
  import { Links, LinkNotFound } from '../link.js';
2
3
  import { ActionNotFound, SimpleAction } from '../action.js';
3
4
  import { resolve } from '../util/uri.js';
@@ -63,7 +64,7 @@ export class BaseHeadState {
63
64
  * If no resources were found, the array will be empty.
64
65
  */
65
66
  followAll(rel) {
66
- return this.links.getMany(rel).map(link => {
67
+ const resources = this.links.getMany(rel).map(link => {
67
68
  if (link.hints?.status === 'deprecated') {
68
69
  /* eslint-disable-next-line no-console */
69
70
  console.warn(`[ketting] The ${link.rel} link on ${this.uri} is marked deprecated.`, link);
@@ -71,6 +72,7 @@ export class BaseHeadState {
71
72
  const href = resolve(link);
72
73
  return this.client.go(href);
73
74
  });
75
+ return new Resources(resources);
74
76
  }
75
77
  /**
76
78
  * Content-headers are a subset of HTTP headers that related directly
@@ -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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"}
@@ -3,6 +3,7 @@ import { Links, LinkVariables } from '../link.js';
3
3
  import Client from '../client.js';
4
4
  import { Resource } from '../resource.js';
5
5
  import { StateSerializedBody } from '#state-serialized-body';
6
+ import { Resources } from './resources.js';
6
7
  export type State<T = any> = {
7
8
  /**
8
9
  * The URI associated with this state
@@ -40,7 +41,7 @@ export type State<T = any> = {
40
41
  *
41
42
  * If no resources were found, the array will be empty.
42
43
  */
43
- followAll<TFollowedResource = any>(rel: string): Resource<TFollowedResource>[];
44
+ followAll<TFollowedResource = any>(rel: string): Resources<TFollowedResource>;
44
45
  /**
45
46
  * Return an action by name.
46
47
  *
@@ -1 +1 @@
1
- {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/state/interface.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAiB,MAAM,YAAY,CAAC;AAqIlD,MAAM,UAAU,OAAO,CAAC,KAA0B;IAEhD,OAAO,CACL,OAAQ,KAAa,CAAC,GAAG,KAAK,QAAQ;QACrC,KAAa,CAAC,KAAK,YAAY,KAAK;QACpC,KAAa,CAAC,OAAO,YAAY,OAAO,CAC1C,CAAC;AAEJ,CAAC"}
1
+ {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/state/interface.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAiB,MAAM,YAAY,CAAC;AAsIlD,MAAM,UAAU,OAAO,CAAC,KAA0B;IAEhD,OAAO,CACL,OAAQ,KAAa,CAAC,GAAG,KAAK,QAAQ;QACrC,KAAa,CAAC,KAAK,YAAY,KAAK;QACpC,KAAa,CAAC,OAAO,YAAY,OAAO,CAC1C,CAAC;AAEJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { State } from './interface.js';
2
+ import { Resource } from '../resource.js';
3
+ import { GetRequestOptions } from '../types.js';
4
+ export declare class Resources<T = any> extends Array<Resource<T>> {
5
+ static get [Symbol.species](): ArrayConstructor;
6
+ constructor(resources: Resource<T>[]);
7
+ get(getOptions?: GetRequestOptions): Promise<State<T>[]>;
8
+ }
@@ -0,0 +1,11 @@
1
+ export class Resources extends Array {
2
+ static get [Symbol.species]() { return Array; }
3
+ constructor(resources) {
4
+ super();
5
+ this.push(...resources);
6
+ }
7
+ async get(getOptions) {
8
+ return Promise.all(this.map(resource => resource.get(getOptions)));
9
+ }
10
+ }
11
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/state/resources.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,SAAmB,SAAQ,KAAkB;IAExD,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;IAE/C,YAAY,SAAwB;QAClC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,UAA8B;QAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ketting",
3
- "version": "9.0.0",
3
+ "version": "9.1.0",
4
4
  "description": "Opinionated HATEOAS / Rest client.",
5
5
  "type": "module",
6
6
  "exports": {
package/src/index.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  export { default as Client, default as Ketting, default } from './client.js';
2
2
  export { default as Resource } from './resource.js';
3
3
 
4
+ export { Resources } from './state/resources.js';
5
+
4
6
  export { type Link, LinkNotFound, Links, type LinkVariables } from './link.js';
5
7
 
6
8
  export { resolve } from './util/uri.js';
@@ -1,4 +1,5 @@
1
1
  import { State, HeadState } from './interface.js';
2
+ import { Resources } from './resources.js';
2
3
  import { Links, LinkVariables, LinkNotFound } from '../link.js';
3
4
  import Client from '../client.js';
4
5
  import { Action, ActionNotFound, ActionInfo, SimpleAction } from '../action.js';
@@ -99,19 +100,16 @@ export class BaseHeadState implements HeadState {
99
100
  *
100
101
  * If no resources were found, the array will be empty.
101
102
  */
102
- followAll<TFollowedResource = any>(rel: string): Resource<TFollowedResource>[] {
103
-
104
- return this.links.getMany(rel).map( link => {
105
-
103
+ followAll<TFollowedResource = any>(rel: string): Resources<TFollowedResource> {
104
+ const resources = this.links.getMany(rel).map( link => {
106
105
  if (link.hints?.status === 'deprecated') {
107
106
  /* eslint-disable-next-line no-console */
108
107
  console.warn(`[ketting] The ${link.rel} link on ${this.uri} is marked deprecated.`, link);
109
108
  }
110
109
  const href = resolve(link);
111
- return this.client.go(href);
112
-
110
+ return this.client.go<TFollowedResource>(href);
113
111
  });
114
-
112
+ return new Resources(resources);
115
113
  }
116
114
 
117
115
 
@@ -3,6 +3,7 @@ import { Links, LinkVariables } from '../link.js';
3
3
  import Client from '../client.js';
4
4
  import { Resource } from '../resource.js';
5
5
  import { StateSerializedBody } from '#state-serialized-body';
6
+ import { Resources } from './resources.js';
6
7
 
7
8
  export type State<T = any> = {
8
9
 
@@ -48,7 +49,7 @@ export type State<T = any> = {
48
49
  *
49
50
  * If no resources were found, the array will be empty.
50
51
  */
51
- followAll<TFollowedResource = any>(rel: string): Resource<TFollowedResource>[];
52
+ followAll<TFollowedResource = any>(rel: string): Resources<TFollowedResource>;
52
53
 
53
54
  /**
54
55
  * Return an action by name.
@@ -0,0 +1,17 @@
1
+ import { State } from './interface.js';
2
+ import { Resource } from '../resource.js';
3
+ import { GetRequestOptions } from '../types.js';
4
+
5
+ export class Resources<T = any> extends Array<Resource<T>> {
6
+
7
+ static get [Symbol.species]() { return Array; }
8
+
9
+ constructor(resources: Resource<T>[]) {
10
+ super();
11
+ this.push(...resources);
12
+ }
13
+
14
+ public async get(getOptions?: GetRequestOptions): Promise<State<T>[]> {
15
+ return Promise.all(this.map(resource => resource.get(getOptions)));
16
+ }
17
+ }