@skipruntime/helpers 0.0.9 → 0.0.11

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.
Files changed (43) hide show
  1. package/README.md +18 -0
  2. package/dist/skiplang-std/index.d.ts +21 -0
  3. package/dist/skiplang-std/index.d.ts.map +1 -0
  4. package/dist/skiplang-std/index.js +14 -0
  5. package/dist/skiplang-std/index.js.map +1 -0
  6. package/dist/skiplang-std/internal.d.ts +52 -0
  7. package/dist/skiplang-std/internal.d.ts.map +1 -0
  8. package/dist/skiplang-std/internal.js +3 -0
  9. package/dist/skiplang-std/internal.js.map +1 -0
  10. package/dist/{external.d.ts → src/external.d.ts} +26 -2
  11. package/dist/src/external.d.ts.map +1 -0
  12. package/dist/{external.js → src/external.js} +27 -8
  13. package/dist/src/external.js.map +1 -0
  14. package/dist/{index.d.ts → src/index.d.ts} +2 -2
  15. package/dist/src/index.d.ts.map +1 -0
  16. package/dist/{index.js → src/index.js} +2 -2
  17. package/dist/src/index.js.map +1 -0
  18. package/dist/{remote.d.ts → src/remote.d.ts} +1 -1
  19. package/dist/src/remote.d.ts.map +1 -0
  20. package/dist/{remote.js → src/remote.js} +3 -5
  21. package/dist/src/remote.js.map +1 -0
  22. package/dist/{rest.d.ts → src/rest.d.ts} +4 -2
  23. package/dist/src/rest.d.ts.map +1 -0
  24. package/dist/{rest.js → src/rest.js} +15 -9
  25. package/dist/src/rest.js.map +1 -0
  26. package/dist/src/utils.d.ts +51 -0
  27. package/dist/src/utils.d.ts.map +1 -0
  28. package/dist/src/utils.js +51 -0
  29. package/dist/src/utils.js.map +1 -0
  30. package/package.json +4 -6
  31. package/src/external.ts +32 -8
  32. package/src/index.ts +3 -1
  33. package/src/remote.ts +4 -6
  34. package/src/rest.ts +14 -8
  35. package/src/utils.ts +68 -0
  36. package/dist/external.d.ts.map +0 -1
  37. package/dist/external.js.map +0 -1
  38. package/dist/index.d.ts.map +0 -1
  39. package/dist/index.js.map +0 -1
  40. package/dist/remote.d.ts.map +0 -1
  41. package/dist/remote.js.map +0 -1
  42. package/dist/rest.d.ts.map +0 -1
  43. package/dist/rest.js.map +0 -1
package/README.md ADDED
@@ -0,0 +1,18 @@
1
+ # @skipruntime/helpers
2
+
3
+ This package contains items that may be useful for working with the Skip framework, but are not strictly necessary.
4
+
5
+ See the [docs](https://skiplabs.io/docs/api/helpers) for more details.
6
+
7
+ ## Installation
8
+
9
+ Install directly using npm (`npm i @skipruntime/helpers`), or along with other
10
+ components of the runtime by installing the
11
+ [`@skiplabs/skip`](https://www.npmjs.com/package/@skiplabs/skip) meta-package
12
+ (`npm i @skiplabs/skip`)
13
+
14
+
15
+ ## Support
16
+
17
+ Join the [Discord](https://discord.gg/ss4zxfgUBH) to talk to other community
18
+ members and developers or ask any questions.
@@ -0,0 +1,21 @@
1
+ import type { T } from "./internal.js";
2
+ export type { Opaque } from "./internal.js";
3
+ export declare const skpointer: unique symbol;
4
+ export interface Pointer<InternalType extends T<any>> {
5
+ [skpointer]: InternalType;
6
+ }
7
+ export declare const sknative: unique symbol;
8
+ export interface NativeStub {
9
+ [sknative]: string;
10
+ }
11
+ export type float = number;
12
+ export type int = number;
13
+ /**
14
+ * Potentially `null` values.
15
+ *
16
+ * The type `Nullable<T>` of potentially `null` values of type `T`.
17
+ */
18
+ export type Nullable<T> = T | null;
19
+ export declare const sk_isObjectProxy: unique symbol;
20
+ export declare function cloneIfProxy<T>(v: T): T;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../skiplang-std/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AACvC,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,eAAO,MAAM,SAAS,EAAE,OAAO,MAAmC,CAAC;AAEnE,MAAM,WAAW,OAAO,CAAC,YAAY,SAAS,CAAC,CAAC,GAAG,CAAC;IAClD,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC;CAC3B;AAED,eAAO,MAAM,QAAQ,EAAE,OAAO,MAAuC,CAAC;AAEtE,MAAM,WAAW,UAAU;IACzB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC;AAC3B,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC;AAEzB;;;;GAIG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEnC,eAAO,MAAM,gBAAgB,EAAE,OAAO,MAAiB,CAAC;AAExD,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAWvC"}
@@ -0,0 +1,14 @@
1
+ export const skpointer = Symbol.for("Skip.pointer");
2
+ export const sknative = Symbol.for("Skip.native_stub");
3
+ export const sk_isObjectProxy = Symbol();
4
+ export function cloneIfProxy(v) {
5
+ if (v !== null &&
6
+ typeof v === "object" &&
7
+ sk_isObjectProxy in v &&
8
+ v[sk_isObjectProxy] &&
9
+ "clone" in v) {
10
+ return v.clone();
11
+ }
12
+ return v;
13
+ }
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../skiplang-std/index.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,SAAS,GAAkB,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAMnE,MAAM,CAAC,MAAM,QAAQ,GAAkB,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAgBtE,MAAM,CAAC,MAAM,gBAAgB,GAAkB,MAAM,EAAE,CAAC;AAExD,MAAM,UAAU,YAAY,CAAI,CAAI;IAClC,IACE,CAAC,KAAK,IAAI;QACV,OAAO,CAAC,KAAK,QAAQ;QACrB,gBAAgB,IAAI,CAAC;QACrB,CAAC,CAAC,gBAAgB,CAAC;QACnB,OAAO,IAAI,CAAC,EACZ,CAAC;QACD,OAAQ,CAAC,CAAC,KAAiB,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,52 @@
1
+ declare const opaque: unique symbol;
2
+ /**
3
+ * Type that is tagged to distinguish it from the underlying untagged type.
4
+ *
5
+ * The type `Opaque<Value, Tag>` is equivalent to `Value` but is "tagged" with type `Tag` so that it is structurally distinct from `Value`.
6
+ */
7
+ export type Opaque<Value, Tag> = Value & {
8
+ /**
9
+ * @ignore
10
+ * @hidden
11
+ */
12
+ [opaque]: Tag;
13
+ };
14
+ declare const t: unique symbol;
15
+ export type T<V> = {
16
+ [t]: V;
17
+ };
18
+ declare const _Raw: unique symbol;
19
+ export type Raw = T<typeof _Raw>;
20
+ declare const _Void: unique symbol;
21
+ export type Void = T<typeof _Void>;
22
+ declare const _Byte: unique symbol;
23
+ export type Byte = T<typeof _Byte>;
24
+ declare const _Uint32: unique symbol;
25
+ export type UInt32 = T<typeof _Uint32>;
26
+ declare const _Float: unique symbol;
27
+ export type Float = T<typeof _Float>;
28
+ declare const _String: unique symbol;
29
+ export type String = T<typeof _String>;
30
+ declare const _Exception: unique symbol;
31
+ export type Exception = T<typeof _Exception>;
32
+ declare const _Obstack: unique symbol;
33
+ export type Obstack = T<typeof _Obstack>;
34
+ declare const p: unique symbol;
35
+ declare const _Array: unique symbol;
36
+ export type Array<Ty extends T<any>> = T<typeof _Array> & {
37
+ [p]: (_: Ty) => Ty;
38
+ };
39
+ declare const _Vector: unique symbol;
40
+ export type Vector<Ty extends T<any>> = T<typeof _Vector> & {
41
+ [p]: (_: Ty) => Ty;
42
+ };
43
+ declare const _Pair: unique symbol;
44
+ export type Pair<Ty1 extends T<any>, Ty2 extends T<any>> = T<typeof _Pair> & {
45
+ [p]: [Ty1, Ty2];
46
+ };
47
+ declare const _Function: unique symbol;
48
+ export type Function<Ty1 extends T<any>, Ty2 extends T<any>> = T<typeof _Function> & {
49
+ [p]: (_: Ty1) => Ty2;
50
+ };
51
+ export {};
52
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../skiplang-std/internal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ const opaque = Symbol.for("Skip.opaque");
2
+ export {};
3
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../skiplang-std/internal.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAkB,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC"}
@@ -30,7 +30,7 @@ export declare class GenericExternalService implements ExternalService {
30
30
  loading: () => void;
31
31
  }): void;
32
32
  unsubscribe(instance: string): void;
33
- shutdown(): void;
33
+ shutdown(): Promise<void>;
34
34
  }
35
35
  export declare class TimerResource implements ExternalResource {
36
36
  private readonly intervals;
@@ -41,6 +41,15 @@ export declare class TimerResource implements ExternalResource {
41
41
  }): void;
42
42
  close(instance: string): void;
43
43
  }
44
+ /**
45
+ * Encode params for external resource request.
46
+ *
47
+ * Produces a query string consisting of a leading `?` followed by the encoding of the `params` given by [URLSearchParams.toString](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/toString) when `params` is an object and otherwise a single key-value pair `params=JSON.stringify(params)`.
48
+ *
49
+ * @param params - Resource parameters.
50
+ * @returns Query string.
51
+ */
52
+ export declare function defaultParamEncoder(params: Json): string;
44
53
  /**
45
54
  * An external resource that is refreshed at some polling interval.
46
55
  *
@@ -53,14 +62,29 @@ export declare class Polled<S extends Json, K extends Json, V extends Json> impl
53
62
  private readonly duration;
54
63
  private readonly conv;
55
64
  private readonly encodeParams;
65
+ private readonly options?;
56
66
  private readonly intervals;
57
67
  /**
68
+ * Construct a `Polled` external resource.
69
+ *
70
+ * The URL of the external resource is formed by appending the given base `url` and the result of `encodeParams(params)` where `params` are the parameters provided when instantiating the resource.
71
+ *
72
+ * Note that the result of `encodeParams` contains the `?` separator, but it need not be at the beginning of the returned string, so some parameters can be used in part of the URL preceding the `?`.
73
+ *
58
74
  * @param url - HTTP endpoint of external resource to poll.
59
75
  * @param duration - Refresh interval, in milliseconds.
60
76
  * @param conv - Function to convert data of type `S` received from external resource to `key`-`value` entries.
61
77
  * @param encodeParams - Function to use to encode params of type `Json` for external resource request.
78
+ * @param options - Optional parameters.
79
+ * @param options.headers - Additional headers to add to request.
80
+ * @param options.timeout - Timeout for request, in milliseconds. Defaults to 1000ms.
62
81
  */
63
- constructor(url: string, duration: number, conv: (data: S) => Entry<K, V>[], encodeParams?: (params: Json) => string);
82
+ constructor(url: string, duration: number, conv: (data: S) => Entry<K, V>[], encodeParams?: (params: Json) => string, options?: {
83
+ headers?: {
84
+ [header: string]: string;
85
+ };
86
+ timeout?: number;
87
+ } | undefined);
64
88
  open(instance: string, params: Json, callbacks: {
65
89
  update: (updates: Entry<Json, Json>[], isInit: boolean) => void;
66
90
  error: (error: Json) => void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external.d.ts","sourceRoot":"","sources":["../../src/external.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { SkipUnknownResourceError } from "@skipruntime/core";
1
2
  import { fetchJSON } from "./rest.js";
2
3
  /**
3
4
  * A generic external service providing external resources.
@@ -15,7 +16,7 @@ export class GenericExternalService {
15
16
  subscribe(instance, resourceName, params, callbacks) {
16
17
  const resource = this.resources[resourceName];
17
18
  if (!resource) {
18
- throw new Error(`Unkonwn resource named '${resourceName}'`);
19
+ throw new SkipUnknownResourceError(`Unknown resource named '${resourceName}'`);
19
20
  }
20
21
  this.instances.set(instance, resource);
21
22
  resource.open(instance, params, callbacks);
@@ -28,7 +29,7 @@ export class GenericExternalService {
28
29
  }
29
30
  }
30
31
  shutdown() {
31
- return;
32
+ return Promise.resolve();
32
33
  }
33
34
  }
34
35
  export class TimerResource {
@@ -64,7 +65,15 @@ export class TimerResource {
64
65
  }
65
66
  }
66
67
  }
67
- function defaultParamEncoder(params) {
68
+ /**
69
+ * Encode params for external resource request.
70
+ *
71
+ * Produces a query string consisting of a leading `?` followed by the encoding of the `params` given by [URLSearchParams.toString](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/toString) when `params` is an object and otherwise a single key-value pair `params=JSON.stringify(params)`.
72
+ *
73
+ * @param params - Resource parameters.
74
+ * @returns Query string.
75
+ */
76
+ export function defaultParamEncoder(params) {
68
77
  if (typeof params == "object") {
69
78
  const queryParams = {};
70
79
  for (const [key, value] of Object.entries(params)) {
@@ -73,10 +82,10 @@ function defaultParamEncoder(params) {
73
82
  else
74
83
  queryParams[key] = value.toString();
75
84
  }
76
- return new URLSearchParams(queryParams).toString();
85
+ return `?${new URLSearchParams(queryParams).toString()}`;
77
86
  }
78
87
  else
79
- return `params=${JSON.stringify(params)}`;
88
+ return `?params=${JSON.stringify(params)}`;
80
89
  }
81
90
  /**
82
91
  * An external resource that is refreshed at some polling interval.
@@ -87,23 +96,33 @@ function defaultParamEncoder(params) {
87
96
  */
88
97
  export class Polled {
89
98
  /**
99
+ * Construct a `Polled` external resource.
100
+ *
101
+ * The URL of the external resource is formed by appending the given base `url` and the result of `encodeParams(params)` where `params` are the parameters provided when instantiating the resource.
102
+ *
103
+ * Note that the result of `encodeParams` contains the `?` separator, but it need not be at the beginning of the returned string, so some parameters can be used in part of the URL preceding the `?`.
104
+ *
90
105
  * @param url - HTTP endpoint of external resource to poll.
91
106
  * @param duration - Refresh interval, in milliseconds.
92
107
  * @param conv - Function to convert data of type `S` received from external resource to `key`-`value` entries.
93
108
  * @param encodeParams - Function to use to encode params of type `Json` for external resource request.
109
+ * @param options - Optional parameters.
110
+ * @param options.headers - Additional headers to add to request.
111
+ * @param options.timeout - Timeout for request, in milliseconds. Defaults to 1000ms.
94
112
  */
95
- constructor(url, duration, conv, encodeParams = defaultParamEncoder) {
113
+ constructor(url, duration, conv, encodeParams = defaultParamEncoder, options) {
96
114
  this.url = url;
97
115
  this.duration = duration;
98
116
  this.conv = conv;
99
117
  this.encodeParams = encodeParams;
118
+ this.options = options;
100
119
  this.intervals = new Map();
101
120
  }
102
121
  open(instance, params, callbacks) {
103
- const url = `${this.url}?${this.encodeParams(params)}`;
122
+ const url = `${this.url}${this.encodeParams(params)}`;
104
123
  const call = () => {
105
124
  callbacks.loading();
106
- fetchJSON(url, "GET", {})
125
+ fetchJSON(url, "GET", this.options)
107
126
  .then((r) => {
108
127
  callbacks.update(this.conv(r[0]), true);
109
128
  })
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external.js","sourceRoot":"","sources":["../../src/external.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * @packageDocumentation
5
5
  */
6
- export { type ExternalResource, GenericExternalService, Polled, } from "./external.js";
6
+ export { defaultParamEncoder, type ExternalResource, GenericExternalService, Polled, TimerResource, } from "./external.js";
7
7
  export { SkipExternalService } from "./remote.js";
8
8
  export { SkipServiceBroker, fetchJSON, type Entrypoint } from "./rest.js";
9
- export { Count, Max, Min, Sum } from "@skipruntime/core";
9
+ export { Count, Max, Min, Sum } from "./utils.js";
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,MAAM,EACN,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC"}
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * @packageDocumentation
5
5
  */
6
- export { GenericExternalService, Polled, } from "./external.js";
6
+ export { defaultParamEncoder, GenericExternalService, Polled, TimerResource, } from "./external.js";
7
7
  export { SkipExternalService } from "./remote.js";
8
8
  export { SkipServiceBroker, fetchJSON } from "./rest.js";
9
- export { Count, Max, Min, Sum } from "@skipruntime/core";
9
+ export { Count, Max, Min, Sum } from "./utils.js";
10
10
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,mBAAmB,EAEnB,sBAAsB,EACtB,MAAM,EACN,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAmB,MAAM,WAAW,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC"}
@@ -27,6 +27,6 @@ export declare class SkipExternalService implements ExternalService {
27
27
  loading: () => void;
28
28
  }): void;
29
29
  unsubscribe(instance: string): void;
30
- shutdown(): void;
30
+ shutdown(): Promise<void>;
31
31
  }
32
32
  //# sourceMappingURL=remote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/remote.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAM5C;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IAQvD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAR9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IAEzD;;;OAGG;gBAEgB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM;IAGtC;;;;;OAKG;IAEH,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,mBAAmB;IAU1D,SAAS,CACP,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,EACZ,SAAS,EAAE;QACT,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;QAEnE,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;QAE7B,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,GACA,IAAI;IA8BP,WAAW,CAAC,QAAQ,EAAE,MAAM;IAQ5B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAM1B"}
@@ -34,15 +34,12 @@ export class SkipExternalService {
34
34
  }
35
35
  subscribe(instance, resource, params, callbacks) {
36
36
  // TODO Manage Status
37
- fetch(`${this.control_url}/v1/streams`, {
37
+ fetch(`${this.control_url}/v1/streams/${resource}`, {
38
38
  method: "POST",
39
39
  headers: {
40
40
  "Content-Type": "application/json",
41
41
  },
42
- body: JSON.stringify({
43
- resource,
44
- params,
45
- }),
42
+ body: JSON.stringify(params),
46
43
  })
47
44
  .then((resp) => resp.text())
48
45
  .then((uuid) => {
@@ -75,6 +72,7 @@ export class SkipExternalService {
75
72
  for (const res of this.resources.values()) {
76
73
  res.close();
77
74
  }
75
+ return Promise.resolve();
78
76
  }
79
77
  }
80
78
  //# sourceMappingURL=remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/remote.ts"],"names":[],"mappings":"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"}
@@ -48,14 +48,16 @@ export declare function fetchJSON<V extends Json>(url: string, method?: "POST" |
48
48
  * `SkipServiceBroker` provides a method-call interface to the backing HTTP interface.
49
49
  */
50
50
  export declare class SkipServiceBroker {
51
+ private timeout?;
51
52
  private readonly entrypoint;
52
53
  /**
53
54
  * Construct a broker for a Skip service at the given entry point.
54
55
  *
55
56
  * @param entrypoint - Entry point of backing service.
57
+ * @param timeout - Timeout for request, in milliseconds. Defaults to 1000ms.
56
58
  * @returns Method-call broker to service.
57
59
  */
58
- constructor(entrypoint?: Entrypoint);
60
+ constructor(entrypoint?: Entrypoint, timeout?: number | undefined);
59
61
  /**
60
62
  * Read the entire contents of a resource.
61
63
  *
@@ -86,7 +88,7 @@ export declare class SkipServiceBroker {
86
88
  * @param params - Resource instance parameters.
87
89
  * @param key - Key to read.
88
90
  * @returns The value associated to the key.
89
- * @throws `NonUniqueValueException` when the key is associated to either zero or multiple values.
91
+ * @throws `SkipNonUniqueValueError` when the key is associated to either zero or multiple values.
90
92
  */
91
93
  getUnique<K extends Json, V extends Json>(resource: string, params: Json, key: K): Promise<V>;
92
94
  /**
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest.d.ts","sourceRoot":"","sources":["../../src/rest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAGrD;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAQF;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAAC,CAAC,SAAS,IAAI,EAC5C,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAgB,EACpE,OAAO,GAAE;IACP,OAAO,CAAC,EAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACvC,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAIlB,GACA,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAqB9B;AAED;;;;;GAKG;AACH,qBAAa,iBAAiB;IAgB1B,OAAO,CAAC,OAAO,CAAC;IAflB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC;;;;;;OAMG;gBAED,UAAU,GAAE,UAIX,EACO,OAAO,CAAC,EAAE,MAAM,YAAA;IAK1B;;;;;;;;OAQG;IACG,MAAM,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,IAAI,EACzC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,GACX,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IASzB;;;;;;;;;OASG;IACG,QAAQ,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,IAAI,EAC3C,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,EACZ,GAAG,EAAE,CAAC,GACL,OAAO,CAAC,CAAC,EAAE,CAAC;IASf;;;;;;;;;;OAUG;IACG,SAAS,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,IAAI,EAC5C,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,EACZ,GAAG,EAAE,CAAC,GACL,OAAO,CAAC,CAAC,CAAC;IAQb;;;;;;;;OAQG;IACG,MAAM,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,IAAI,EACzC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC;IAOhB;;;;;;;OAOG;IACG,SAAS,CAAC,CAAC,SAAS,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1E;;;;;;;;OAQG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,IAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IASzE;;;;;;;OAOG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK9C"}
@@ -1,4 +1,4 @@
1
- import { NonUniqueValueException } from "@skipruntime/core";
1
+ import { SkipNonUniqueValueError, SkipFetchError } from "@skipruntime/core";
2
2
  function toHttp(entrypoint) {
3
3
  if (entrypoint.secured)
4
4
  return `https://${entrypoint.host}:${entrypoint.control_port}`;
@@ -29,10 +29,10 @@ export async function fetchJSON(url, method = "GET", options = {
29
29
  Accept: "application/json",
30
30
  ...options.headers,
31
31
  },
32
- signal: AbortSignal.timeout(1000),
32
+ signal: AbortSignal.timeout(options.timeout ?? 1000),
33
33
  });
34
34
  if (!response.ok) {
35
- throw new Error(`${response.status}: ${response.statusText}`);
35
+ throw new SkipFetchError(`${response.status}: ${response.statusText}`);
36
36
  }
37
37
  const responseText = await response.text();
38
38
  const responseJSON = responseText.length > 0 && responseText != response.statusText
@@ -51,13 +51,15 @@ export class SkipServiceBroker {
51
51
  * Construct a broker for a Skip service at the given entry point.
52
52
  *
53
53
  * @param entrypoint - Entry point of backing service.
54
+ * @param timeout - Timeout for request, in milliseconds. Defaults to 1000ms.
54
55
  * @returns Method-call broker to service.
55
56
  */
56
57
  constructor(entrypoint = {
57
58
  host: "localhost",
58
59
  streaming_port: 8080,
59
60
  control_port: 8081,
60
- }) {
61
+ }, timeout) {
62
+ this.timeout = timeout;
61
63
  this.entrypoint = toHttp(entrypoint);
62
64
  }
63
65
  /**
@@ -70,7 +72,7 @@ export class SkipServiceBroker {
70
72
  * @returns All entries in resource.
71
73
  */
72
74
  async getAll(resource, params) {
73
- const [data, _headers] = await fetchJSON(`${this.entrypoint}/v1/snapshot/${resource}`, "POST", { body: params });
75
+ const [data, _headers] = await fetchJSON(`${this.entrypoint}/v1/snapshot/${resource}`, "POST", { body: params, timeout: this.timeout });
74
76
  return data ?? [];
75
77
  }
76
78
  /**
@@ -84,7 +86,7 @@ export class SkipServiceBroker {
84
86
  * @returns The values associated to the key.
85
87
  */
86
88
  async getArray(resource, params, key) {
87
- const [data, _headers] = await fetchJSON(`${this.entrypoint}/v1/snapshot/${resource}/lookup`, "POST", { body: { key, params } });
89
+ const [data, _headers] = await fetchJSON(`${this.entrypoint}/v1/snapshot/${resource}/lookup`, "POST", { body: { key, params }, timeout: this.timeout });
88
90
  return data ?? [];
89
91
  }
90
92
  /**
@@ -96,12 +98,12 @@ export class SkipServiceBroker {
96
98
  * @param params - Resource instance parameters.
97
99
  * @param key - Key to read.
98
100
  * @returns The value associated to the key.
99
- * @throws `NonUniqueValueException` when the key is associated to either zero or multiple values.
101
+ * @throws `SkipNonUniqueValueError` when the key is associated to either zero or multiple values.
100
102
  */
101
103
  async getUnique(resource, params, key) {
102
104
  return this.getArray(resource, params, key).then((values) => {
103
105
  if (values.length !== 1 || values[0] === undefined)
104
- throw new NonUniqueValueException();
106
+ throw new SkipNonUniqueValueError();
105
107
  return values[0];
106
108
  });
107
109
  }
@@ -117,6 +119,7 @@ export class SkipServiceBroker {
117
119
  async update(collection, entries) {
118
120
  await fetchJSON(`${this.entrypoint}/v1/inputs/${collection}`, "PATCH", {
119
121
  body: entries,
122
+ timeout: this.timeout,
120
123
  });
121
124
  }
122
125
  /**
@@ -144,6 +147,7 @@ export class SkipServiceBroker {
144
147
  method: "POST",
145
148
  headers: { "Content-Type": "application/json" },
146
149
  body: JSON.stringify(params),
150
+ signal: AbortSignal.timeout(this.timeout ?? 1000),
147
151
  }).then((res) => res.text());
148
152
  }
149
153
  /**
@@ -155,7 +159,9 @@ export class SkipServiceBroker {
155
159
  * @returns {void}
156
160
  */
157
161
  async deleteUUID(uuid) {
158
- await fetchJSON(`${this.entrypoint}/v1/streams/${uuid}`, "DELETE");
162
+ await fetchJSON(`${this.entrypoint}/v1/streams/${uuid}`, "DELETE", {
163
+ timeout: this.timeout,
164
+ });
159
165
  }
160
166
  }
161
167
  //# sourceMappingURL=rest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest.js","sourceRoot":"","sources":["../../src/rest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { /* type NativeStub, */ sknative } from "../skiplang-std/index.js";
2
+ import type { Nullable, Reducer, Json } from "@skipruntime/core";
3
+ /**
4
+ * `Reducer` to maintain the sum of input values.
5
+ *
6
+ * A `Reducer` that maintains the sum of values as they are added and removed from a collection.
7
+ */
8
+ export declare class Sum implements /* NativeStub, */ Reducer<number, number> {
9
+ /** @hidden */
10
+ [sknative]: string;
11
+ initial: number;
12
+ add: (accum: number) => number;
13
+ remove: (accum: number) => Nullable<number>;
14
+ }
15
+ /**
16
+ * `Reducer` to maintain the minimum of input values.
17
+ *
18
+ * A `Reducer` that maintains the minimum of values as they are added and removed from a collection.
19
+ */
20
+ export declare class Min implements /* NativeStub, */ Reducer<number, number> {
21
+ /** @hidden */
22
+ [sknative]: string;
23
+ initial: number;
24
+ add: (accum: number) => number;
25
+ remove: (accum: number) => Nullable<number>;
26
+ }
27
+ /**
28
+ * `Reducer` to maintain the maximum of input values.
29
+ *
30
+ * A `Reducer` that maintains the maximum of values as they are added and removed from a collection.
31
+ */
32
+ export declare class Max implements /* NativeStub, */ Reducer<number, number> {
33
+ /** @hidden */
34
+ [sknative]: string;
35
+ initial: number;
36
+ add: (accum: number) => number;
37
+ remove: (accum: number) => Nullable<number>;
38
+ }
39
+ /**
40
+ * `Reducer` to maintain the count of input values.
41
+ *
42
+ * A `Reducer` that maintains the number of values as they are added and removed from a collection.
43
+ */
44
+ export declare class Count<T extends Json> implements /* NativeStub, */ Reducer<T, number> {
45
+ /** @hidden */
46
+ [sknative]: string;
47
+ initial: number;
48
+ add: (accum: number) => number;
49
+ remove: (accum: number) => Nullable<number>;
50
+ }
51
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,CAAC,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEjE;;;;GAIG;AACH,qBAAa,GAAI,YAAW,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACnE,cAAc;IACd,CAAC,QAAQ,CAAC,SAAS;IAInB,OAAO,EAAG,MAAM,CAAC;IACjB,GAAG,EAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,MAAM,EAAG,CAAC,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC9C;AAED;;;;GAIG;AACH,qBAAa,GAAI,YAAW,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACnE,cAAc;IACd,CAAC,QAAQ,CAAC,SAAS;IAInB,OAAO,EAAG,MAAM,CAAC;IACjB,GAAG,EAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,MAAM,EAAG,CAAC,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC9C;AAED;;;;GAIG;AACH,qBAAa,GAAI,YAAW,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACnE,cAAc;IACd,CAAC,QAAQ,CAAC,SAAS;IAInB,OAAO,EAAG,MAAM,CAAC;IACjB,GAAG,EAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,MAAM,EAAG,CAAC,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC9C;AAED;;;;GAIG;AACH,qBAAa,KAAK,CAAC,CAAC,SAAS,IAAI,CAC/B,YAAW,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC;IAE/C,cAAc;IACd,CAAC,QAAQ,CAAC,SAAW;IAIrB,OAAO,EAAG,MAAM,CAAC;IACjB,GAAG,EAAG,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,MAAM,EAAG,CAAC,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC9C"}
@@ -0,0 +1,51 @@
1
+ var _a, _b, _c, _d;
2
+ import { /* type NativeStub, */ sknative } from "../skiplang-std/index.js";
3
+ /**
4
+ * `Reducer` to maintain the sum of input values.
5
+ *
6
+ * A `Reducer` that maintains the sum of values as they are added and removed from a collection.
7
+ */
8
+ export class Sum {
9
+ constructor() {
10
+ /** @hidden */
11
+ this[_a] = "sum";
12
+ }
13
+ }
14
+ _a = sknative;
15
+ /**
16
+ * `Reducer` to maintain the minimum of input values.
17
+ *
18
+ * A `Reducer` that maintains the minimum of values as they are added and removed from a collection.
19
+ */
20
+ export class Min {
21
+ constructor() {
22
+ /** @hidden */
23
+ this[_b] = "min";
24
+ }
25
+ }
26
+ _b = sknative;
27
+ /**
28
+ * `Reducer` to maintain the maximum of input values.
29
+ *
30
+ * A `Reducer` that maintains the maximum of values as they are added and removed from a collection.
31
+ */
32
+ export class Max {
33
+ constructor() {
34
+ /** @hidden */
35
+ this[_c] = "max";
36
+ }
37
+ }
38
+ _c = sknative;
39
+ /**
40
+ * `Reducer` to maintain the count of input values.
41
+ *
42
+ * A `Reducer` that maintains the number of values as they are added and removed from a collection.
43
+ */
44
+ export class Count {
45
+ constructor() {
46
+ /** @hidden */
47
+ this[_d] = "count";
48
+ }
49
+ }
50
+ _d = sknative;
51
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,sBAAsB,CAAC,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAG3E;;;;GAIG;AACH,MAAM,OAAO,GAAG;IAAhB;QACE,cAAc;QACd,QAAU,GAAG,KAAK,CAAC;IAOrB,CAAC;CAAA;KAPE,QAAQ;AASX;;;;GAIG;AACH,MAAM,OAAO,GAAG;IAAhB;QACE,cAAc;QACd,QAAU,GAAG,KAAK,CAAC;IAOrB,CAAC;CAAA;KAPE,QAAQ;AASX;;;;GAIG;AACH,MAAM,OAAO,GAAG;IAAhB;QACE,cAAc;QACd,QAAU,GAAG,KAAK,CAAC;IAOrB,CAAC;CAAA;KAPE,QAAQ;AASX;;;;GAIG;AACH,MAAM,OAAO,KAAK;IAAlB;QAGE,cAAc;QACd,QAAU,GAAG,OAAO,CAAC;IAOvB,CAAC;CAAA;KAPE,QAAQ"}
package/package.json CHANGED
@@ -1,14 +1,12 @@
1
1
  {
2
2
  "name": "@skipruntime/helpers",
3
- "version": "0.0.9",
3
+ "version": "0.0.11",
4
4
  "type": "module",
5
5
  "exports": {
6
- ".": "./dist/index.js",
7
- "./rest.js": "./dist/rest.js",
8
- "./external.js": "./dist/external.js"
6
+ ".": "./dist/src/index.js"
9
7
  },
10
8
  "scripts": {
11
- "build": "tsc",
9
+ "build": "node ../../prebuild.mjs skiplang-std && tsc",
12
10
  "clean": "rm -rf dist",
13
11
  "lint": "eslint"
14
12
  },
@@ -21,7 +19,7 @@
21
19
  "dependencies": {
22
20
  "eventsource": "^2.0.2",
23
21
  "express": "^4.21.1",
24
- "@skipruntime/core": "0.0.6"
22
+ "@skipruntime/core": "0.0.11"
25
23
  },
26
24
  "devDependencies": {
27
25
  "@types/eventsource": "^1.1.15"
package/src/external.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { Entry, ExternalService, Json } from "@skipruntime/core";
2
+ import { SkipUnknownResourceError } from "@skipruntime/core";
2
3
  import { fetchJSON } from "./rest.js";
3
4
 
4
5
  /**
@@ -47,7 +48,9 @@ export class GenericExternalService implements ExternalService {
47
48
  | ExternalResource
48
49
  | undefined;
49
50
  if (!resource) {
50
- throw new Error(`Unkonwn resource named '${resourceName}'`);
51
+ throw new SkipUnknownResourceError(
52
+ `Unknown resource named '${resourceName}'`,
53
+ );
51
54
  }
52
55
  this.instances.set(instance, resource);
53
56
  resource.open(instance, params, callbacks);
@@ -61,8 +64,8 @@ export class GenericExternalService implements ExternalService {
61
64
  }
62
65
  }
63
66
 
64
- shutdown(): void {
65
- return;
67
+ shutdown(): Promise<void> {
68
+ return Promise.resolve();
66
69
  }
67
70
  }
68
71
 
@@ -111,15 +114,23 @@ export class TimerResource implements ExternalResource {
111
114
  }
112
115
  }
113
116
 
114
- function defaultParamEncoder(params: Json): string {
117
+ /**
118
+ * Encode params for external resource request.
119
+ *
120
+ * Produces a query string consisting of a leading `?` followed by the encoding of the `params` given by [URLSearchParams.toString](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/toString) when `params` is an object and otherwise a single key-value pair `params=JSON.stringify(params)`.
121
+ *
122
+ * @param params - Resource parameters.
123
+ * @returns Query string.
124
+ */
125
+ export function defaultParamEncoder(params: Json): string {
115
126
  if (typeof params == "object") {
116
127
  const queryParams: { [param: string]: string } = {};
117
128
  for (const [key, value] of Object.entries(params)) {
118
129
  if (typeof value == "object") queryParams[key] = JSON.stringify(value);
119
130
  else queryParams[key] = value.toString();
120
131
  }
121
- return new URLSearchParams(queryParams).toString();
122
- } else return `params=${JSON.stringify(params)}`;
132
+ return `?${new URLSearchParams(queryParams).toString()}`;
133
+ } else return `?params=${JSON.stringify(params)}`;
123
134
  }
124
135
 
125
136
  /**
@@ -135,10 +146,19 @@ export class Polled<S extends Json, K extends Json, V extends Json>
135
146
  private readonly intervals = new Map<string, Timeout>();
136
147
 
137
148
  /**
149
+ * Construct a `Polled` external resource.
150
+ *
151
+ * The URL of the external resource is formed by appending the given base `url` and the result of `encodeParams(params)` where `params` are the parameters provided when instantiating the resource.
152
+ *
153
+ * Note that the result of `encodeParams` contains the `?` separator, but it need not be at the beginning of the returned string, so some parameters can be used in part of the URL preceding the `?`.
154
+ *
138
155
  * @param url - HTTP endpoint of external resource to poll.
139
156
  * @param duration - Refresh interval, in milliseconds.
140
157
  * @param conv - Function to convert data of type `S` received from external resource to `key`-`value` entries.
141
158
  * @param encodeParams - Function to use to encode params of type `Json` for external resource request.
159
+ * @param options - Optional parameters.
160
+ * @param options.headers - Additional headers to add to request.
161
+ * @param options.timeout - Timeout for request, in milliseconds. Defaults to 1000ms.
142
162
  */
143
163
  constructor(
144
164
  private readonly url: string,
@@ -147,6 +167,10 @@ export class Polled<S extends Json, K extends Json, V extends Json>
147
167
  private readonly encodeParams: (
148
168
  params: Json,
149
169
  ) => string = defaultParamEncoder,
170
+ private readonly options?: {
171
+ headers?: { [header: string]: string };
172
+ timeout?: number;
173
+ },
150
174
  ) {}
151
175
 
152
176
  open(
@@ -158,10 +182,10 @@ export class Polled<S extends Json, K extends Json, V extends Json>
158
182
  loading: () => void;
159
183
  },
160
184
  ) {
161
- const url = `${this.url}?${this.encodeParams(params)}`;
185
+ const url = `${this.url}${this.encodeParams(params)}`;
162
186
  const call = () => {
163
187
  callbacks.loading();
164
- fetchJSON(url, "GET", {})
188
+ fetchJSON(url, "GET", this.options)
165
189
  .then((r) => {
166
190
  callbacks.update(this.conv(r[0] as S), true);
167
191
  })
package/src/index.ts CHANGED
@@ -5,10 +5,12 @@
5
5
  */
6
6
 
7
7
  export {
8
+ defaultParamEncoder,
8
9
  type ExternalResource,
9
10
  GenericExternalService,
10
11
  Polled,
12
+ TimerResource,
11
13
  } from "./external.js";
12
14
  export { SkipExternalService } from "./remote.js";
13
15
  export { SkipServiceBroker, fetchJSON, type Entrypoint } from "./rest.js";
14
- export { Count, Max, Min, Sum } from "@skipruntime/core";
16
+ export { Count, Max, Min, Sum } from "./utils.js";
package/src/remote.ts CHANGED
@@ -57,15 +57,12 @@ export class SkipExternalService implements ExternalService {
57
57
  },
58
58
  ): void {
59
59
  // TODO Manage Status
60
- fetch(`${this.control_url}/v1/streams`, {
60
+ fetch(`${this.control_url}/v1/streams/${resource}`, {
61
61
  method: "POST",
62
62
  headers: {
63
63
  "Content-Type": "application/json",
64
64
  },
65
- body: JSON.stringify({
66
- resource,
67
- params,
68
- }),
65
+ body: JSON.stringify(params),
69
66
  })
70
67
  .then((resp) => resp.text())
71
68
  .then((uuid) => {
@@ -96,9 +93,10 @@ export class SkipExternalService implements ExternalService {
96
93
  }
97
94
  }
98
95
 
99
- shutdown(): void {
96
+ shutdown(): Promise<void> {
100
97
  for (const res of this.resources.values()) {
101
98
  res.close();
102
99
  }
100
+ return Promise.resolve();
103
101
  }
104
102
  }
package/src/rest.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Json, Entry } from "@skipruntime/core";
2
- import { NonUniqueValueException } from "@skipruntime/core";
2
+ import { SkipNonUniqueValueError, SkipFetchError } from "@skipruntime/core";
3
3
 
4
4
  /**
5
5
  * An entry point of a Skip reactive service.
@@ -67,10 +67,10 @@ export async function fetchJSON<V extends Json>(
67
67
  Accept: "application/json",
68
68
  ...options.headers,
69
69
  },
70
- signal: AbortSignal.timeout(1000),
70
+ signal: AbortSignal.timeout(options.timeout ?? 1000),
71
71
  });
72
72
  if (!response.ok) {
73
- throw new Error(`${response.status}: ${response.statusText}`);
73
+ throw new SkipFetchError(`${response.status}: ${response.statusText}`);
74
74
  }
75
75
  const responseText = await response.text();
76
76
  const responseJSON =
@@ -93,6 +93,7 @@ export class SkipServiceBroker {
93
93
  * Construct a broker for a Skip service at the given entry point.
94
94
  *
95
95
  * @param entrypoint - Entry point of backing service.
96
+ * @param timeout - Timeout for request, in milliseconds. Defaults to 1000ms.
96
97
  * @returns Method-call broker to service.
97
98
  */
98
99
  constructor(
@@ -101,6 +102,7 @@ export class SkipServiceBroker {
101
102
  streaming_port: 8080,
102
103
  control_port: 8081,
103
104
  },
105
+ private timeout?: number,
104
106
  ) {
105
107
  this.entrypoint = toHttp(entrypoint);
106
108
  }
@@ -121,7 +123,7 @@ export class SkipServiceBroker {
121
123
  const [data, _headers] = await fetchJSON<Entry<K, V>[]>(
122
124
  `${this.entrypoint}/v1/snapshot/${resource}`,
123
125
  "POST",
124
- { body: params },
126
+ { body: params, timeout: this.timeout },
125
127
  );
126
128
  return data ?? [];
127
129
  }
@@ -144,7 +146,7 @@ export class SkipServiceBroker {
144
146
  const [data, _headers] = await fetchJSON<V[]>(
145
147
  `${this.entrypoint}/v1/snapshot/${resource}/lookup`,
146
148
  "POST",
147
- { body: { key, params } },
149
+ { body: { key, params }, timeout: this.timeout },
148
150
  );
149
151
  return data ?? [];
150
152
  }
@@ -158,7 +160,7 @@ export class SkipServiceBroker {
158
160
  * @param params - Resource instance parameters.
159
161
  * @param key - Key to read.
160
162
  * @returns The value associated to the key.
161
- * @throws `NonUniqueValueException` when the key is associated to either zero or multiple values.
163
+ * @throws `SkipNonUniqueValueError` when the key is associated to either zero or multiple values.
162
164
  */
163
165
  async getUnique<K extends Json, V extends Json>(
164
166
  resource: string,
@@ -167,7 +169,7 @@ export class SkipServiceBroker {
167
169
  ): Promise<V> {
168
170
  return this.getArray<K, V>(resource, params, key).then((values) => {
169
171
  if (values.length !== 1 || values[0] === undefined)
170
- throw new NonUniqueValueException();
172
+ throw new SkipNonUniqueValueError();
171
173
  return values[0];
172
174
  });
173
175
  }
@@ -187,6 +189,7 @@ export class SkipServiceBroker {
187
189
  ): Promise<void> {
188
190
  await fetchJSON(`${this.entrypoint}/v1/inputs/${collection}`, "PATCH", {
189
191
  body: entries,
192
+ timeout: this.timeout,
190
193
  });
191
194
  }
192
195
 
@@ -216,6 +219,7 @@ export class SkipServiceBroker {
216
219
  method: "POST",
217
220
  headers: { "Content-Type": "application/json" },
218
221
  body: JSON.stringify(params),
222
+ signal: AbortSignal.timeout(this.timeout ?? 1000),
219
223
  }).then((res) => res.text());
220
224
  }
221
225
 
@@ -228,6 +232,8 @@ export class SkipServiceBroker {
228
232
  * @returns {void}
229
233
  */
230
234
  async deleteUUID(uuid: string): Promise<void> {
231
- await fetchJSON(`${this.entrypoint}/v1/streams/${uuid}`, "DELETE");
235
+ await fetchJSON(`${this.entrypoint}/v1/streams/${uuid}`, "DELETE", {
236
+ timeout: this.timeout,
237
+ });
232
238
  }
233
239
  }
package/src/utils.ts ADDED
@@ -0,0 +1,68 @@
1
+ import { /* type NativeStub, */ sknative } from "../skiplang-std/index.js";
2
+ import type { Nullable, Reducer, Json } from "@skipruntime/core";
3
+
4
+ /**
5
+ * `Reducer` to maintain the sum of input values.
6
+ *
7
+ * A `Reducer` that maintains the sum of values as they are added and removed from a collection.
8
+ */
9
+ export class Sum implements /* NativeStub, */ Reducer<number, number> {
10
+ /** @hidden */
11
+ [sknative] = "sum";
12
+
13
+ // Lie to TypeScript that this implements Reducer, but leave out any implementations
14
+ // since we provide a native implementation.
15
+ initial!: number;
16
+ add!: (accum: number) => number;
17
+ remove!: (accum: number) => Nullable<number>;
18
+ }
19
+
20
+ /**
21
+ * `Reducer` to maintain the minimum of input values.
22
+ *
23
+ * A `Reducer` that maintains the minimum of values as they are added and removed from a collection.
24
+ */
25
+ export class Min implements /* NativeStub, */ Reducer<number, number> {
26
+ /** @hidden */
27
+ [sknative] = "min";
28
+
29
+ // Lie to TypeScript that this implements Reducer, but leave out any implementations
30
+ // since we provide a native implementation.
31
+ initial!: number;
32
+ add!: (accum: number) => number;
33
+ remove!: (accum: number) => Nullable<number>;
34
+ }
35
+
36
+ /**
37
+ * `Reducer` to maintain the maximum of input values.
38
+ *
39
+ * A `Reducer` that maintains the maximum of values as they are added and removed from a collection.
40
+ */
41
+ export class Max implements /* NativeStub, */ Reducer<number, number> {
42
+ /** @hidden */
43
+ [sknative] = "max";
44
+
45
+ // Lie to TypeScript that this implements Reducer, but leave out any implementations
46
+ // since we provide a native implementation.
47
+ initial!: number;
48
+ add!: (accum: number) => number;
49
+ remove!: (accum: number) => Nullable<number>;
50
+ }
51
+
52
+ /**
53
+ * `Reducer` to maintain the count of input values.
54
+ *
55
+ * A `Reducer` that maintains the number of values as they are added and removed from a collection.
56
+ */
57
+ export class Count<T extends Json>
58
+ implements /* NativeStub, */ Reducer<T, number>
59
+ {
60
+ /** @hidden */
61
+ [sknative] = "count";
62
+
63
+ // Lie to TypeScript that this implements Reducer, but leave out any implementations
64
+ // since we provide a native implementation.
65
+ initial!: number;
66
+ add!: (accum: number) => number;
67
+ remove!: (accum: number) => Nullable<number>;
68
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"external.d.ts","sourceRoot":"","sources":["../src/external.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"external.js","sourceRoot":"","sources":["../src/external.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEL,sBAAsB,EACtB,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAmB,MAAM,WAAW,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAM5C;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IAQvD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAR9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IAEzD;;;OAGG;gBAEgB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM;IAGtC;;;;;OAKG;IAEH,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,mBAAmB;IAU1D,SAAS,CACP,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,EACZ,SAAS,EAAE;QACT,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;QAEnE,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;QAE7B,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,GACA,IAAI;IAiCP,WAAW,CAAC,QAAQ,EAAE,MAAM;IAQ5B,QAAQ,IAAI,IAAI;CAKjB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"remote.js","sourceRoot":"","sources":["../src/remote.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rest.d.ts","sourceRoot":"","sources":["../src/rest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAGrD;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAQF;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAAC,CAAC,SAAS,IAAI,EAC5C,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAgB,EACpE,OAAO,GAAE;IACP,OAAO,CAAC,EAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACvC,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAIlB,GACA,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAqB9B;AAED;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC;;;;;OAKG;gBAED,UAAU,GAAE,UAIX;IAKH;;;;;;;;OAQG;IACG,MAAM,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,IAAI,EACzC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,GACX,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IASzB;;;;;;;;;OASG;IACG,QAAQ,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,IAAI,EAC3C,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,EACZ,GAAG,EAAE,CAAC,GACL,OAAO,CAAC,CAAC,EAAE,CAAC;IASf;;;;;;;;;;OAUG;IACG,SAAS,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,IAAI,EAC5C,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,EACZ,GAAG,EAAE,CAAC,GACL,OAAO,CAAC,CAAC,CAAC;IAQb;;;;;;;;OAQG;IACG,MAAM,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,IAAI,EACzC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC;IAMhB;;;;;;;OAOG;IACG,SAAS,CAAC,CAAC,SAAS,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1E;;;;;;;;OAQG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,IAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAQzE;;;;;;;OAOG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG9C"}
package/dist/rest.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"rest.js","sourceRoot":"","sources":["../src/rest.ts"],"names":[],"mappings":"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"}