shelving 1.35.0 → 1.36.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/db/Pagination.js CHANGED
@@ -1,4 +1,4 @@
1
- import { getLastItem, assertLength, assertNumber, yieldMerged, toMap, LOADING } from "../util/index.js";
1
+ import { getLastItem, assertNumber, yieldMerged, toMap, LOADING, assertMaximum } from "../util/index.js";
2
2
  import { State } from "../stream/index.js";
3
3
  import { ConditionError } from "../index.js";
4
4
  /**
@@ -40,7 +40,7 @@ export class Pagination extends State {
40
40
  };
41
41
  this.ref = ref;
42
42
  assertNumber(ref.limit); // Collection must have a numeric limit to paginate (otherwise you'd be retrieving the entire set of documents).
43
- assertLength(ref.sorts, 1, Infinity); // Collection must have at least one sort order to paginate.
43
+ assertMaximum(ref.sorts.size, 1); // Collection must have at least one sort order to paginate.
44
44
  this.limit = ref.limit;
45
45
  }
46
46
  /**
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "state-management",
12
12
  "query-builder"
13
13
  ],
14
- "version": "1.35.0",
14
+ "version": "1.36.0",
15
15
  "repository": "https://github.com/dhoulb/shelving",
16
16
  "author": "Dave Houlbrooke <dave@shax.com>",
17
17
  "license": "0BSD",
package/query/Rules.d.ts CHANGED
@@ -8,7 +8,7 @@ export declare abstract class Rules<T extends Data, R extends Rule<T>> extends R
8
8
  /** Get the last rule. */
9
9
  get last(): R | undefined;
10
10
  /** Get the number of rules. */
11
- get length(): number;
11
+ get size(): number;
12
12
  constructor(...rules: R[]);
13
13
  toString(): string;
14
14
  /** Iterate over the rules. */
package/query/Rules.js CHANGED
@@ -15,7 +15,7 @@ export class Rules extends Rule {
15
15
  return this._rules[this._rules.length - 1];
16
16
  }
17
17
  /** Get the number of rules. */
18
- get length() {
18
+ get size() {
19
19
  return this._rules.length;
20
20
  }
21
21
  toString() {
package/util/array.d.ts CHANGED
@@ -163,3 +163,15 @@ export declare function removeItems<T>(arr: MutableArray<T>, items: Iterable<T>)
163
163
  export declare function uniqueArray<T>(input: Iterable<T>): ImmutableArray<T>;
164
164
  /** Apply a limit to an array. */
165
165
  export declare function limitArray<T>(arr: ImmutableArray<T>, limit: number): ImmutableArray<T>;
166
+ /** Does an array have the specified minimum length. */
167
+ export declare function isMinimumLength<T>(arr: ImmutableArray<T>, min?: 1): arr is [T, ...T[]];
168
+ export declare function isMinimumLength<T>(arr: ImmutableArray<T>, min: 2): arr is [T, T, ...T[]];
169
+ export declare function isMinimumLength<T>(arr: ImmutableArray<T>, min: 3): arr is [T, T, T, ...T[]];
170
+ export declare function isMinimumLength<T>(arr: ImmutableArray<T>, min: 4): arr is [T, T, T, T, ...T[]];
171
+ export declare function isMinimumLength<T>(arr: ImmutableArray<T>, min: number): arr is [T, T, T, T, T, ...T[]];
172
+ /** Get an array if it has the specified minimum length. */
173
+ export declare function getMinimumLength<T>(arr: ImmutableArray<T>, min?: 1): [T, ...T[]];
174
+ export declare function getMinimumLength<T>(arr: ImmutableArray<T>, min: 2): [T, T, ...T[]];
175
+ export declare function getMinimumLength<T>(arr: ImmutableArray<T>, min: 3): [T, T, T, ...T[]];
176
+ export declare function getMinimumLength<T>(arr: ImmutableArray<T>, min: 4): [T, T, T, T, ...T[]];
177
+ export declare function getMinimumLength<T>(arr: ImmutableArray<T>, min: number): [T, T, T, T, T, ...T[]];
package/util/array.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { AssertionError } from "../error/index.js";
1
2
  /** Is an unknown value an array? */
2
3
  export const isArray = (v) => v instanceof Array;
3
4
  /** Is an unknown value an item in a specified array? */
@@ -244,3 +245,11 @@ export function uniqueArray(input) {
244
245
  export function limitArray(arr, limit) {
245
246
  return limit > arr.length ? arr : arr.slice(0, limit);
246
247
  }
248
+ export function isMinimumLength(arr, min = 1) {
249
+ return arr.length >= min;
250
+ }
251
+ export function getMinimumLength(arr, min = 1) {
252
+ if (arr.length >= min)
253
+ return arr;
254
+ throw new AssertionError(`Must have minimum length ${min}`, arr);
255
+ }
package/util/assert.d.ts CHANGED
@@ -24,15 +24,21 @@ export declare function assertProp<K extends string | number | symbol, T extends
24
24
  [L in K]: unknown;
25
25
  }>(value: T | unknown, key: K): asserts value is T;
26
26
  /** Assert that a value is an array. */
27
- export declare function assertArray<T extends ImmutableArray>(value: T | unknown): asserts value is T;
27
+ export declare function assertArray<T>(value: ImmutableArray<T> | unknown): asserts value is ImmutableArray<T>;
28
28
  /** Assert that a value has a specific length (or length is in a specific range). */
29
- export declare function assertLength<T extends {
30
- length: number;
31
- }>(value: T | unknown, min: number, max?: number): asserts value is T;
29
+ export declare function assertMinimumLength<T>(value: ImmutableArray<T> | unknown, min?: 1): asserts value is [T, ...T[]];
30
+ export declare function assertMinimumLength<T>(value: ImmutableArray<T> | unknown, min: 2): asserts value is [T, T, ...T[]];
31
+ export declare function assertMinimumLength<T>(value: ImmutableArray<T> | unknown, min: 3): asserts value is [T, T, T, ...T[]];
32
+ export declare function assertMinimumLength<T>(value: ImmutableArray<T> | unknown, min: 4): asserts value is [T, T, T, T, ...T[]];
33
+ export declare function assertMinimumLength<T>(value: ImmutableArray<T> | unknown, min: number): asserts value is [T, T, T, T, T, ...T[]];
34
+ /** Assert that a value has a specific length (or length is in a specific range). */
35
+ export declare function assertLength<T>(value: ImmutableArray<T> | unknown, min: number, max?: number): asserts value is ImmutableArray<T>;
36
+ /** Assert that a value is a number greater than. */
37
+ export declare function assertBetween(value: number | unknown, min: number, max: number): asserts value is number;
32
38
  /** Assert that a value is a number greater than. */
33
- export declare function assertGreater(value: number | unknown, target: number): asserts value is number;
39
+ export declare function assertMaximum(value: number | unknown, max: number): asserts value is number;
34
40
  /** Assert that a value is a number less than. */
35
- export declare function assertLess(value: number | unknown, target: number): asserts value is number;
41
+ export declare function assertMinimum(value: number | unknown, min: number): asserts value is number;
36
42
  /** Assert that a value is an instance of something. */
37
43
  export declare function assertInstance<T>(value: T | unknown, type: Class<T>): asserts value is T;
38
44
  /** Assert that a value is a function. */
@@ -42,8 +48,8 @@ export declare function assertValue<T>(value: T | typeof NOVALUE): asserts value
42
48
  /** Assert that a value is not the `NOVALUE` constant. */
43
49
  export declare function assertDefined<T>(value: T | undefined): asserts value is T;
44
50
  /** Expect a synchronous value. */
45
- export declare function assertSync<T>(value: Promise<T> | T): asserts value is T;
51
+ export declare function assertSynchronous<T>(value: Promise<T> | T): asserts value is T;
46
52
  /** Expect an asynchronous value. */
47
- export declare function assertAsync<T>(value: PromiseLike<T> | T): asserts value is PromiseLike<T>;
53
+ export declare function assertAsynchronous<T>(value: PromiseLike<T> | T): asserts value is PromiseLike<T>;
48
54
  /** Expect a promise. */
49
55
  export declare function assertPromise<T>(value: Promise<T> | T): asserts value is Promise<T>;
package/util/assert.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { AssertionError } from "../error/index.js";
2
2
  import { debug } from "./debug.js";
3
3
  import { isObject } from "./object.js";
4
+ import { isArray } from "./array.js";
4
5
  import { NOVALUE } from "./constants.js";
5
6
  import { isAsync } from "./async.js";
6
7
  /** Assert a boolean condition is true. */
@@ -53,20 +54,29 @@ export function assertArray(value) {
53
54
  if (!(value instanceof Array))
54
55
  throw new AssertionError(`Must be array`, value);
55
56
  }
57
+ export function assertMinimumLength(value, min = 1) {
58
+ if (!isArray(value) || value.length < min)
59
+ throw new AssertionError(`Must be array with minimum length ${min}`, value);
60
+ }
56
61
  /** Assert that a value has a specific length (or length is in a specific range). */
57
62
  export function assertLength(value, min, max = min) {
58
- if (!isObject(value) || typeof value.length !== "number" || value.length < min || value.length > max)
59
- throw new AssertionError(`Must have length ${min}–${max}`, value);
63
+ if (!isArray(value) || value.length < min || value.length > max)
64
+ throw new AssertionError(`Must be array with length ${min}-${max}`, value);
65
+ }
66
+ /** Assert that a value is a number greater than. */
67
+ export function assertBetween(value, min, max) {
68
+ if (typeof value !== "number" || value < min || value > max)
69
+ throw new AssertionError(`Must be number between ${min}-${max}`, value);
60
70
  }
61
71
  /** Assert that a value is a number greater than. */
62
- export function assertGreater(value, target) {
63
- if (typeof value !== "number" || value <= target)
64
- throw new AssertionError(`Must be greater than ${target}`, value);
72
+ export function assertMaximum(value, max) {
73
+ if (typeof value !== "number" || value > max)
74
+ throw new AssertionError(`Must be number with maximum ${max}`, value);
65
75
  }
66
76
  /** Assert that a value is a number less than. */
67
- export function assertLess(value, target) {
68
- if (typeof value !== "number" || value >= target)
69
- throw new AssertionError(`Must be less than ${target}`, value);
77
+ export function assertMinimum(value, min) {
78
+ if (typeof value !== "number" || value < min)
79
+ throw new AssertionError(`Must be number with minimum ${min}`, value);
70
80
  }
71
81
  /** Assert that a value is an instance of something. */
72
82
  export function assertInstance(value, type) {
@@ -89,12 +99,12 @@ export function assertDefined(value) {
89
99
  throw new AssertionError("Must be defined", value);
90
100
  }
91
101
  /** Expect a synchronous value. */
92
- export function assertSync(value) {
102
+ export function assertSynchronous(value) {
93
103
  if (isAsync(value))
94
104
  throw new AssertionError("Must be synchronous", value);
95
105
  }
96
106
  /** Expect an asynchronous value. */
97
- export function assertAsync(value) {
107
+ export function assertAsynchronous(value) {
98
108
  if (!isAsync(value))
99
109
  throw new AssertionError("Must be asynchronous", value);
100
110
  }