quetch 0.16.0 → 0.16.1

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.
@@ -2,32 +2,16 @@
2
2
  * Error to be thrown in case there is an issue with the query call. Only instances of this error will be caught by the `retry()` middleware.
3
3
  */
4
4
  export class RequestError extends Error {
5
+ status;
6
+ query;
7
+ request;
8
+ response;
5
9
  constructor(message, status, query, request, response) {
6
10
  super(message);
7
- Object.defineProperty(this, "status", {
8
- enumerable: true,
9
- configurable: true,
10
- writable: true,
11
- value: status
12
- });
13
- Object.defineProperty(this, "query", {
14
- enumerable: true,
15
- configurable: true,
16
- writable: true,
17
- value: query
18
- });
19
- Object.defineProperty(this, "request", {
20
- enumerable: true,
21
- configurable: true,
22
- writable: true,
23
- value: request
24
- });
25
- Object.defineProperty(this, "response", {
26
- enumerable: true,
27
- configurable: true,
28
- writable: true,
29
- value: response
30
- });
11
+ this.status = status;
12
+ this.query = query;
13
+ this.request = request;
14
+ this.response = response;
31
15
  }
32
16
  }
33
17
  //# sourceMappingURL=RequestError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RequestError.js","sourceRoot":"","sources":["../../lib/errors/RequestError.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YACE,OAAe,EACR,MAAc,EACd,KAAkB,EAClB,OAAiB,EACjB,QAAmB;QAE1B,KAAK,CAAC,OAAO,CAAC,CAAC;QALf;;;;mBAAO,MAAM;WAAQ;QACrB;;;;mBAAO,KAAK;WAAa;QACzB;;;;mBAAO,OAAO;WAAU;QACxB;;;;mBAAO,QAAQ;WAAW;IAG5B,CAAC;CACF"}
1
+ {"version":3,"file":"RequestError.js","sourceRoot":"","sources":["../../lib/errors/RequestError.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAG5B;IACA;IACA;IACA;IALT,YACE,OAAe,EACR,MAAc,EACd,KAAkB,EAClB,OAAiB,EACjB,QAAmB;QAE1B,KAAK,CAAC,OAAO,CAAC,CAAC;QALR,WAAM,GAAN,MAAM,CAAQ;QACd,UAAK,GAAL,KAAK,CAAa;QAClB,YAAO,GAAP,OAAO,CAAU;QACjB,aAAQ,GAAR,QAAQ,CAAW;IAG5B,CAAC;CACF"}
@@ -18,13 +18,10 @@ function mergeContextAndFilter(context, filter) {
18
18
  };
19
19
  }
20
20
  function normalizeAggregator(aggregator) {
21
- switch (aggregator) {
22
- case "length":
23
- case "index":
24
- return { operator: aggregator };
25
- default:
26
- return aggregator;
21
+ if (typeof aggregator === "string") {
22
+ return { operator: aggregator };
27
23
  }
24
+ return aggregator;
28
25
  }
29
26
  /**
30
27
  * Performs a provided `query` on local data, provided through the `query.type` property.
@@ -87,7 +84,7 @@ export function queryItemList(query) {
87
84
  }
88
85
  case "index": {
89
86
  const { offset = 0, order, limit = Infinity } = query;
90
- const filterItem = normalizedAggregator.filter;
87
+ const { filter: filterItem, last } = normalizedAggregator;
91
88
  let result = data;
92
89
  // Filter
93
90
  const normalizedFilter = mergeContextAndFilter(context, filter);
@@ -100,11 +97,13 @@ export function queryItemList(query) {
100
97
  if (offset !== 0 || limit !== Infinity) {
101
98
  result = result.slice(offset, offset + limit);
102
99
  }
103
- return (result.length === 0
104
- ? -1
105
- : filterItem === undefined
106
- ? 0
107
- : result.findIndex((item) => testFilter(filterItem, item, settings)));
100
+ if (result.length === 0) {
101
+ return -1;
102
+ }
103
+ if (filterItem === undefined) {
104
+ return (last ? result.length - 1 : 0);
105
+ }
106
+ return result[last ? "findLastIndex" : "findIndex"]((item) => testFilter(filterItem, item, settings));
108
107
  }
109
108
  default: {
110
109
  throw new Error(`Aggregator operator "${normalizedAggregator.operator}" is not implemented`);
@@ -1 +1 @@
1
- {"version":3,"file":"queryItemList.js","sourceRoot":"","sources":["../../lib/tools/queryItemList.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queryItemList.js","sourceRoot":"","sources":["../../lib/tools/queryItemList.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,10 @@ import type { Filter } from "./Filter";
4
4
  */
5
5
  export type AggregateFunction<T extends object> = "length" | {
6
6
  operator: "length";
7
- } | "index" | {
7
+ } | {
8
8
  operator: "index";
9
9
  filter?: Filter<T>;
10
+ last?: boolean;
10
11
  } | {
11
12
  operator: "median" | "standardDeviation" | "mean" | "minimum" | "maximum" | "variance" | "mode";
12
13
  field: keyof T;
@@ -33,13 +33,10 @@ function mergeContextAndFilter<T extends object>(
33
33
  function normalizeAggregator<T extends object>(
34
34
  aggregator: AggregateFunction<T>,
35
35
  ): Exclude<AggregateFunction<T>, string> {
36
- switch (aggregator) {
37
- case "length":
38
- case "index":
39
- return { operator: aggregator };
40
- default:
41
- return aggregator;
36
+ if (typeof aggregator === "string") {
37
+ return { operator: aggregator };
42
38
  }
39
+ return aggregator;
43
40
  }
44
41
 
45
42
  /**
@@ -118,7 +115,7 @@ export function queryItemList<T extends object, const Q extends Query<T>>(
118
115
  }
119
116
  case "index": {
120
117
  const { offset = 0, order, limit = Infinity } = query;
121
- const filterItem = normalizedAggregator.filter;
118
+ const { filter: filterItem, last } = normalizedAggregator;
122
119
  let result = data;
123
120
  // Filter
124
121
  const normalizedFilter = mergeContextAndFilter(context, filter);
@@ -133,14 +130,14 @@ export function queryItemList<T extends object, const Q extends Query<T>>(
133
130
  if (offset !== 0 || limit !== Infinity) {
134
131
  result = result.slice(offset, offset + limit);
135
132
  }
136
- return (
137
- result.length === 0
138
- ? -1
139
- : filterItem === undefined
140
- ? 0
141
- : result.findIndex((item) =>
142
- testFilter(filterItem, item, settings),
143
- )
133
+ if (result.length === 0) {
134
+ return -1 as Result<T, Q>;
135
+ }
136
+ if (filterItem === undefined) {
137
+ return (last ? result.length - 1 : 0) as Result<T, Q>;
138
+ }
139
+ return result[last ? "findLastIndex" : "findIndex"]((item) =>
140
+ testFilter(filterItem, item, settings),
144
141
  ) as Result<T, Q>;
145
142
  }
146
143
  default: {
@@ -6,8 +6,7 @@ import type { Filter } from "./Filter";
6
6
  export type AggregateFunction<T extends object> =
7
7
  | "length"
8
8
  | { operator: "length" }
9
- | "index"
10
- | { operator: "index"; filter?: Filter<T> }
9
+ | { operator: "index"; filter?: Filter<T>; last?: boolean }
11
10
  | {
12
11
  operator:
13
12
  | "median"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quetch",
3
- "version": "0.16.0",
3
+ "version": "0.16.1",
4
4
  "type": "module",
5
5
  "main": "./dist/main.js",
6
6
  "exports": {