@superbia/untrue 2.1.2 → 2.1.3

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/Api.js CHANGED
@@ -34,31 +34,28 @@ class Api extends untrue_1.Context {
34
34
  if (requester === undefined) {
35
35
  throw new Error("Requester not defined in useRequest.");
36
36
  }
37
- this.requests.data[key] = {
37
+ const request = {
38
38
  loading: true,
39
39
  done: false,
40
40
  result: null,
41
41
  error: null,
42
42
  };
43
+ this.requests.data[key] = request;
43
44
  this.requests.update();
44
45
  try {
45
46
  const result = await requester(...args);
46
47
  const parsedResult = this.requests.parseResult(result);
47
- this.requests.data[key] = {
48
- loading: false,
49
- done: true,
50
- result: parsedResult,
51
- error: null,
52
- };
48
+ request.loading = false;
49
+ request.done = true;
50
+ request.result = parsedResult;
51
+ request.error = null;
53
52
  this.requests.update();
54
53
  }
55
54
  catch (error) {
56
- this.requests.data[key] = {
57
- loading: false,
58
- done: false,
59
- result: null,
60
- error,
61
- };
55
+ request.loading = false;
56
+ request.done = false;
57
+ request.result = null;
58
+ request.error = error;
62
59
  this.requests.update();
63
60
  }
64
61
  };
@@ -66,17 +63,50 @@ class Api extends untrue_1.Context {
66
63
  }
67
64
  useLoad(key, selector, loader) {
68
65
  const value = untrue_1.Hook.useContext(this.requests, () => {
69
- const request = this.requests.data[key];
66
+ let request = (this.requests.data[key] ?? null);
67
+ request ?? (request = {
68
+ loading: false,
69
+ done: false,
70
+ result: null,
71
+ error: null,
72
+ });
70
73
  return selector(request);
71
74
  });
72
75
  const load = async (...args) => {
73
- const request = this.requests.data[key];
76
+ const request = (this.requests.data[key] ??
77
+ null);
78
+ if (request === null) {
79
+ throw new Error("Request not initialized yet.");
80
+ }
81
+ if (request.loading) {
82
+ throw new Error('Request is in "loading" state.');
83
+ }
84
+ if (request.error !== null) {
85
+ throw new Error('Request is in "error" state.');
86
+ }
74
87
  const tmpResult = request.result;
75
88
  let tmpPagination;
76
89
  let endpointName;
90
+ let rethrow = false;
77
91
  this.client.once("request", (endpoints) => {
78
- endpointName = Object.keys(endpoints)[0];
79
- tmpPagination = tmpResult[endpointName];
92
+ const keys = Object.keys(endpoints);
93
+ try {
94
+ if (keys.length === 0) {
95
+ throw new Error(`Argument "endpoints" can't be empty.`);
96
+ }
97
+ endpointName = keys[0];
98
+ tmpPagination = tmpResult[endpointName];
99
+ if (tmpPagination === undefined) {
100
+ throw new Error(`Endpoint "${endpointName}" not in request result.`);
101
+ }
102
+ if (!(tmpPagination instanceof RequestContext_1.PaginationResult)) {
103
+ throw new Error(`Endpoint "${endpointName}" is not of Pagination type.`);
104
+ }
105
+ }
106
+ catch (error) {
107
+ rethrow = true;
108
+ throw error;
109
+ }
80
110
  tmpPagination.loading = true;
81
111
  tmpPagination.error = null;
82
112
  this.requests.update();
@@ -92,10 +122,16 @@ class Api extends untrue_1.Context {
92
122
  tmpPagination.result.hasNextPage = endpointResult.result.hasNextPage;
93
123
  tmpPagination.result.nextPageCursor =
94
124
  endpointResult.result.nextPageCursor;
95
- tmpPagination.result.nodes.push(...endpointResult.result.nodes);
125
+ tmpPagination.result.nodes = [
126
+ ...tmpPagination.result.nodes,
127
+ ...endpointResult.result.nodes,
128
+ ];
96
129
  this.requests.update();
97
130
  }
98
131
  catch (error) {
132
+ if (rethrow) {
133
+ throw error;
134
+ }
99
135
  tmpPagination.loading = false;
100
136
  tmpPagination.error = error;
101
137
  this.requests.update();
@@ -1,9 +1,14 @@
1
1
  import { Result, Pagination, EndpointRecord, ResponseResult } from "@superbia/client";
2
2
  import { ParsedResult, SuperbiaContext } from "./SuperbiaContext";
3
- export interface PaginationResult<T, O extends string = "id"> {
3
+ export declare class PaginationResult<T extends Pagination<any>, O extends string = "id"> {
4
4
  loading: boolean;
5
5
  result: ParsedResult<T, O>;
6
6
  error: Error | null;
7
+ constructor({ loading, result, error, }: {
8
+ loading: boolean;
9
+ result: ParsedResult<T, O>;
10
+ error: Error | null;
11
+ });
7
12
  }
8
13
  export type RequestResult<T extends ResponseResult, O extends string = "id"> = {
9
14
  [K in keyof T]: T[K] extends Pagination<any> ? PaginationResult<T[K], O> : ParsedResult<T[K], O>;
@@ -1,7 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RequestContext = void 0;
3
+ exports.RequestContext = exports.PaginationResult = void 0;
4
4
  const SuperbiaContext_1 = require("./SuperbiaContext");
5
+ class PaginationResult {
6
+ constructor({ loading, result, error, }) {
7
+ this.loading = loading;
8
+ this.result = result;
9
+ this.error = error;
10
+ }
11
+ }
12
+ exports.PaginationResult = PaginationResult;
5
13
  class RequestContext extends SuperbiaContext_1.SuperbiaContext {
6
14
  constructor() {
7
15
  super(...arguments);
@@ -16,11 +24,11 @@ class RequestContext extends SuperbiaContext_1.SuperbiaContext {
16
24
  typeof endpointResult === "object" &&
17
25
  this.typenameKey in endpointResult &&
18
26
  endpointResult[this.typenameKey].endsWith("Pagination")) {
19
- tmpEndpointResult = {
27
+ tmpEndpointResult = new PaginationResult({
20
28
  loading: false,
21
29
  result: this.parseResultValue(endpointResult),
22
30
  error: null,
23
- };
31
+ });
24
32
  }
25
33
  else {
26
34
  tmpEndpointResult = this.parseResultValue(endpointResult);
package/dist/index.js CHANGED
@@ -3,6 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.default = void 0;
6
+ exports.PaginationResult = exports.default = void 0;
7
7
  var Api_1 = require("./Api");
8
8
  Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(Api_1).default; } });
9
+ var RequestContext_1 = require("./RequestContext");
10
+ Object.defineProperty(exports, "PaginationResult", { enumerable: true, get: function () { return RequestContext_1.PaginationResult; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superbia/untrue",
3
- "version": "2.1.2",
3
+ "version": "2.1.3",
4
4
  "description": "Integrate Superbia and Untrue.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -19,7 +19,7 @@
19
19
  "license": "MIT",
20
20
  "peerDependencies": {
21
21
  "@superbia/client": "^2.1.0",
22
- "untrue": "^5.9.1"
22
+ "untrue": "^5.12.4"
23
23
  },
24
24
  "dependencies": {
25
25
  "uuid": "^10.0.0"