@augment-vir/assert 30.0.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.
Files changed (99) hide show
  1. package/LICENSE-CC0 +121 -0
  2. package/LICENSE-MIT +21 -0
  3. package/dist/assertions/boolean.d.ts +97 -0
  4. package/dist/assertions/boolean.js +47 -0
  5. package/dist/assertions/boundary.d.ts +83 -0
  6. package/dist/assertions/boundary.js +104 -0
  7. package/dist/assertions/enum.d.ts +38 -0
  8. package/dist/assertions/enum.js +42 -0
  9. package/dist/assertions/equality/entry-equality.d.ts +40 -0
  10. package/dist/assertions/equality/entry-equality.js +56 -0
  11. package/dist/assertions/equality/json-equality.d.ts +42 -0
  12. package/dist/assertions/equality/json-equality.js +75 -0
  13. package/dist/assertions/equality/simple-equality.d.ts +85 -0
  14. package/dist/assertions/equality/simple-equality.js +61 -0
  15. package/dist/assertions/equality/ts-type-equality.d.ts +42 -0
  16. package/dist/assertions/equality/ts-type-equality.js +18 -0
  17. package/dist/assertions/extendable-assertions.d.ts +762 -0
  18. package/dist/assertions/extendable-assertions.js +108 -0
  19. package/dist/assertions/http.d.ts +36 -0
  20. package/dist/assertions/http.js +41 -0
  21. package/dist/assertions/instance.d.ts +43 -0
  22. package/dist/assertions/instance.js +41 -0
  23. package/dist/assertions/keys.d.ts +90 -0
  24. package/dist/assertions/keys.js +111 -0
  25. package/dist/assertions/length.d.ts +56 -0
  26. package/dist/assertions/length.js +68 -0
  27. package/dist/assertions/nullish.d.ts +43 -0
  28. package/dist/assertions/nullish.js +42 -0
  29. package/dist/assertions/numeric.d.ts +69 -0
  30. package/dist/assertions/numeric.js +60 -0
  31. package/dist/assertions/output.d.ts +83 -0
  32. package/dist/assertions/output.example.d.ts +1 -0
  33. package/dist/assertions/output.example.js +13 -0
  34. package/dist/assertions/output.js +173 -0
  35. package/dist/assertions/primitive.d.ts +58 -0
  36. package/dist/assertions/primitive.js +62 -0
  37. package/dist/assertions/promise.d.ts +65 -0
  38. package/dist/assertions/promise.js +69 -0
  39. package/dist/assertions/regexp.d.ts +19 -0
  40. package/dist/assertions/regexp.js +18 -0
  41. package/dist/assertions/runtime-type.d.ts +274 -0
  42. package/dist/assertions/runtime-type.example.d.ts +1 -0
  43. package/dist/assertions/runtime-type.example.js +3 -0
  44. package/dist/assertions/runtime-type.js +242 -0
  45. package/dist/assertions/throws.d.ts +109 -0
  46. package/dist/assertions/throws.example.d.ts +1 -0
  47. package/dist/assertions/throws.example.js +11 -0
  48. package/dist/assertions/throws.js +166 -0
  49. package/dist/assertions/uuid.d.ts +35 -0
  50. package/dist/assertions/uuid.js +33 -0
  51. package/dist/assertions/values.d.ts +106 -0
  52. package/dist/assertions/values.js +113 -0
  53. package/dist/augments/assertion-exports.d.ts +5 -0
  54. package/dist/augments/assertion-exports.js +1 -0
  55. package/dist/augments/assertion.error.d.ts +23 -0
  56. package/dist/augments/assertion.error.example.d.ts +1 -0
  57. package/dist/augments/assertion.error.example.js +3 -0
  58. package/dist/augments/assertion.error.js +26 -0
  59. package/dist/augments/guards/assert-wrap.d.ts +244 -0
  60. package/dist/augments/guards/assert-wrap.example.d.ts +1 -0
  61. package/dist/augments/guards/assert-wrap.example.js +9 -0
  62. package/dist/augments/guards/assert-wrap.js +32 -0
  63. package/dist/augments/guards/assert.d.ts +177 -0
  64. package/dist/augments/guards/assert.example.d.ts +1 -0
  65. package/dist/augments/guards/assert.example.js +4 -0
  66. package/dist/augments/guards/assert.js +32 -0
  67. package/dist/augments/guards/check-wrap.d.ts +247 -0
  68. package/dist/augments/guards/check-wrap.example.d.ts +1 -0
  69. package/dist/augments/guards/check-wrap.example.js +9 -0
  70. package/dist/augments/guards/check-wrap.js +34 -0
  71. package/dist/augments/guards/check.d.ts +229 -0
  72. package/dist/augments/guards/check.example.d.ts +1 -0
  73. package/dist/augments/guards/check.example.js +5 -0
  74. package/dist/augments/guards/check.js +21 -0
  75. package/dist/augments/guards/wait-until.d.ts +262 -0
  76. package/dist/augments/guards/wait-until.example.d.ts +1 -0
  77. package/dist/augments/guards/wait-until.example.js +13 -0
  78. package/dist/augments/guards/wait-until.js +34 -0
  79. package/dist/augments/if-equals.d.ts +17 -0
  80. package/dist/augments/if-equals.js +1 -0
  81. package/dist/guard-types/assert-function.d.ts +2 -0
  82. package/dist/guard-types/assert-function.js +3 -0
  83. package/dist/guard-types/assert-wrap-function.d.ts +9 -0
  84. package/dist/guard-types/assert-wrap-function.js +14 -0
  85. package/dist/guard-types/check-function.d.ts +11 -0
  86. package/dist/guard-types/check-function.js +22 -0
  87. package/dist/guard-types/check-wrap-wrapper-function.d.ts +9 -0
  88. package/dist/guard-types/check-wrap-wrapper-function.js +19 -0
  89. package/dist/guard-types/guard-group.d.ts +13 -0
  90. package/dist/guard-types/guard-group.js +3 -0
  91. package/dist/guard-types/guard-override.d.ts +4 -0
  92. package/dist/guard-types/guard-override.js +10 -0
  93. package/dist/guard-types/wait-until-function.d.ts +63 -0
  94. package/dist/guard-types/wait-until-function.js +95 -0
  95. package/dist/index.d.ts +9 -0
  96. package/dist/index.js +8 -0
  97. package/dist/test-timeout.mock.d.ts +3 -0
  98. package/dist/test-timeout.mock.js +8 -0
  99. package/package.json +54 -0
@@ -0,0 +1,262 @@
1
+ import { WaitUntilOptions } from '../../guard-types/wait-until-function.js';
2
+ /**
3
+ * A group of guard methods that run the given callback multiple times until its return value
4
+ * matches expectations. Callback interval and timeout can be customized with
5
+ * {@link WaitUntilOptions}.
6
+ *
7
+ * @category Assert
8
+ * @example
9
+ *
10
+ * ```ts
11
+ * import {waitUntil} from '@augment-vir/assert';
12
+ *
13
+ * // `result` will eventually be `'123'`
14
+ * const result = await waitUntil.isString(
15
+ * () => {
16
+ * if (Math.random() < 0.5) {
17
+ * return 123;
18
+ * } else {
19
+ * return '123';
20
+ * }
21
+ * },
22
+ * {
23
+ * interval: {milliseconds: 100},
24
+ * timeout: {seconds: 10},
25
+ * },
26
+ * );
27
+ * ```
28
+ *
29
+ * @returns The successful callback return value.
30
+ * @throws {@link AssertionError} When the assertion fails.
31
+ * @package @augment-vir/assert
32
+ */
33
+ export declare const waitUntil: {
34
+ isTruthy: <Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<import("../assertion-exports.js").Truthy<Actual>>;
35
+ isFalsy: <Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<import("../assertion-exports.js").Falsy<Actual>>;
36
+ isTrue: <Input extends unknown>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
37
+ interval: import("@date-vir/duration").AnyDuration;
38
+ timeout: import("@date-vir/duration").AnyDuration;
39
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, true>>;
40
+ isFalse: <Input extends unknown>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
41
+ interval: import("@date-vir/duration").AnyDuration;
42
+ timeout: import("@date-vir/duration").AnyDuration;
43
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, false>>;
44
+ strictEquals: <Actual, Expected extends Actual>(expected: Expected, callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Actual, Expected>>;
45
+ deepEquals: <Actual, Expected extends Actual>(expected: Expected, callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Actual, Expected>>;
46
+ notStrictEquals: <Input extends unknown>(expected: unknown, params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
47
+ interval: import("@date-vir/duration").AnyDuration;
48
+ timeout: import("@date-vir/duration").AnyDuration;
49
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
50
+ looseEquals: <Input extends unknown>(expected: unknown, params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
51
+ interval: import("@date-vir/duration").AnyDuration;
52
+ timeout: import("@date-vir/duration").AnyDuration;
53
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
54
+ notLooseEquals: <Input extends unknown>(expected: unknown, params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
55
+ interval: import("@date-vir/duration").AnyDuration;
56
+ timeout: import("@date-vir/duration").AnyDuration;
57
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
58
+ notDeepEquals: <Input extends unknown>(expected: unknown, params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
59
+ interval: import("@date-vir/duration").AnyDuration;
60
+ timeout: import("@date-vir/duration").AnyDuration;
61
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
62
+ output: typeof import("../../assertions/output.js").waitUntilOutput;
63
+ isFunction: <const Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToActual<Actual, import("@augment-vir/core").AnyFunction>>;
64
+ isNotArray: <const Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, ReadonlyArray<unknown>>>;
65
+ isNotBigInt: <const Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, bigint>>;
66
+ isNotBoolean: <const Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, boolean>>;
67
+ isNotFunction: <const Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, import("@augment-vir/core").AnyFunction>>;
68
+ isNotNull: <const Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, null>>;
69
+ isNotNumber: <const Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, number>>;
70
+ isNotObject: <const Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, import("@augment-vir/core").UnknownObject>>;
71
+ isNotString: <const Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, string>>;
72
+ isNotUndefined: <const Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, undefined>>;
73
+ isNotSymbol: <const Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, symbol>>;
74
+ isSymbol: <Input extends unknown>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
75
+ interval: import("@date-vir/duration").AnyDuration;
76
+ timeout: import("@date-vir/duration").AnyDuration;
77
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, symbol>>;
78
+ isUndefined: <Input extends unknown>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
79
+ interval: import("@date-vir/duration").AnyDuration;
80
+ timeout: import("@date-vir/duration").AnyDuration;
81
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, undefined>>;
82
+ isArray: <Input extends unknown>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
83
+ interval: import("@date-vir/duration").AnyDuration;
84
+ timeout: import("@date-vir/duration").AnyDuration;
85
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown[]>>;
86
+ isBigInt: <Input extends unknown>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
87
+ interval: import("@date-vir/duration").AnyDuration;
88
+ timeout: import("@date-vir/duration").AnyDuration;
89
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, bigint>>;
90
+ isBoolean: <Input extends unknown>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
91
+ interval: import("@date-vir/duration").AnyDuration;
92
+ timeout: import("@date-vir/duration").AnyDuration;
93
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, boolean>>;
94
+ isNull: <Input extends unknown>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
95
+ interval: import("@date-vir/duration").AnyDuration;
96
+ timeout: import("@date-vir/duration").AnyDuration;
97
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, null>>;
98
+ isNumber: <Input extends unknown>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
99
+ interval: import("@date-vir/duration").AnyDuration;
100
+ timeout: import("@date-vir/duration").AnyDuration;
101
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, number>>;
102
+ isObject: <Input extends unknown>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
103
+ interval: import("@date-vir/duration").AnyDuration;
104
+ timeout: import("@date-vir/duration").AnyDuration;
105
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, import("@augment-vir/core").UnknownObject>>;
106
+ isString: <Input extends unknown>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
107
+ interval: import("@date-vir/duration").AnyDuration;
108
+ timeout: import("@date-vir/duration").AnyDuration;
109
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, string>>;
110
+ throws: {
111
+ (callbackOrPromise: import("@augment-vir/core").TypedFunction<void, any> | Promise<any>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<Error>;
112
+ (matchOptions: import("../assertion-exports.js").ErrorMatchOptions, callbackOrPromise: import("@augment-vir/core").TypedFunction<void, any> | Promise<any>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<Error>;
113
+ };
114
+ isError: <Input extends unknown>(matchOptions: import("@augment-vir/core").PartialWithNullable<{
115
+ matchMessage: string | RegExp;
116
+ matchConstructor: ErrorConstructor | (new (...args: any[]) => Error);
117
+ }> | undefined, params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
118
+ interval: import("@date-vir/duration").AnyDuration;
119
+ timeout: import("@date-vir/duration").AnyDuration;
120
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, Error>>;
121
+ endsWith: {
122
+ <const ArrayElement>(child: ArrayElement, callback: () => import("@augment-vir/core").MaybePromise<ReadonlyArray<ArrayElement>>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<ReadonlyArray<ArrayElement>>;
123
+ (child: string, callback: () => import("@augment-vir/core").MaybePromise<string>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<string>;
124
+ (child: string, callback: () => import("@augment-vir/core").MaybePromise<string | ReadonlyArray<string>>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<string | ReadonlyArray<string>>;
125
+ };
126
+ startsWith: {
127
+ <const ArrayElement>(child: ArrayElement, callback: () => import("@augment-vir/core").MaybePromise<ReadonlyArray<ArrayElement>>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<ReadonlyArray<ArrayElement>>;
128
+ (child: string, callback: () => import("@augment-vir/core").MaybePromise<string>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<string>;
129
+ (child: string, callback: () => import("@augment-vir/core").MaybePromise<string | ReadonlyArray<string>>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<string | ReadonlyArray<string>>;
130
+ };
131
+ isEnumValue: <const Actual, const Expected extends import("@augment-vir/core").EnumBaseType>(checkEnum: Expected, callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Actual, Expected[keyof Expected]>>;
132
+ isNotEnumValue: <const Actual, const Expected extends import("@augment-vir/core").EnumBaseType>(checkEnum: Expected, callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, Expected[keyof Expected] | `${Expected[keyof Expected]}`>>;
133
+ entriesEqual: <Actual, Expected extends Actual>(expected: Expected, callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Actual, Expected>>;
134
+ notEntriesEqual: <Input extends object>(expected: object, params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
135
+ interval: import("@date-vir/duration").AnyDuration;
136
+ timeout: import("@date-vir/duration").AnyDuration;
137
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
138
+ jsonEquals: <Actual, Expected extends Actual>(expected: Expected, callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Actual, Expected>>;
139
+ notJsonEquals: <Input extends unknown>(expected: unknown, params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
140
+ interval: import("@date-vir/duration").AnyDuration;
141
+ timeout: import("@date-vir/duration").AnyDuration;
142
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
143
+ isHttpStatusCategory: <const Actual, const Category extends import("@augment-vir/core").HttpStatusCategory>(category: Category, callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Actual, import("@augment-vir/core").HttpStatusByCategory<Category>>>;
144
+ isHttpStatus: <Input extends unknown>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
145
+ interval: import("@date-vir/duration").AnyDuration;
146
+ timeout: import("@date-vir/duration").AnyDuration;
147
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, import("@augment-vir/core").HttpStatus>>;
148
+ instanceOf: <const Instance>(constructor: import("type-fest").Constructor<Instance>, callback: () => import("@augment-vir/core").MaybePromise<unknown>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Instance>;
149
+ notInstanceOf: <const Actual, const Instance>(constructor: import("type-fest").Constructor<Instance>, callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, Instance>>;
150
+ isKeyOf: <const Key extends PropertyKey, const Parent>(parent: Parent, callback: () => import("@augment-vir/core").MaybePromise<Key>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Key, keyof Parent>>;
151
+ isNotKeyOf: <const Key extends PropertyKey, const Parent>(parent: Parent, callback: () => import("@augment-vir/core").MaybePromise<Key>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Key, import("@augment-vir/core").RequiredKeysOf<Parent>>>;
152
+ hasKey: <const Parent, const Key extends PropertyKey>(key: Key, callback: () => import("@augment-vir/core").MaybePromise<Parent>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Parent & Record<Key, (Key extends keyof Parent ? import("type-fest").SetRequired<Parent, Key>[Key] : Key extends keyof Extract<Parent, Record<Key, any>> ? import("type-fest").SetRequired<Extract<Parent, Record<Key, any>>, Key>[Key] : never) extends never ? unknown : Key extends keyof Parent ? import("type-fest").SetRequired<Parent, Key>[Key] : Key extends keyof Extract<Parent, Record<Key, any>> ? import("type-fest").SetRequired<Extract<Parent, Record<Key, any>>, Key>[Key] : never>>;
153
+ lacksKey: <const Parent, const Key extends PropertyKey>(key: Key, callback: () => import("@augment-vir/core").MaybePromise<Parent>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Parent, Record<Key, any>>>;
154
+ hasKeys: <const Keys extends PropertyKey, const Parent>(keys: ReadonlyArray<Keys>, callback: () => import("@augment-vir/core").MaybePromise<Parent>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Parent & Record<Keys, (Keys extends keyof Parent ? import("type-fest").SetRequired<Parent, Keys>[Keys] : Keys extends keyof Extract<Parent, Record<Keys, any>> ? import("type-fest").SetRequired<Extract<Parent, Record<Keys, any>>, Keys>[Keys] : never) extends never ? unknown : Keys extends keyof Parent ? import("type-fest").SetRequired<Parent, Keys>[Keys] : Keys extends keyof Extract<Parent, Record<Keys, any>> ? import("type-fest").SetRequired<Extract<Parent, Record<Keys, any>>, Keys>[Keys] : never>>;
155
+ lacksKeys: <const Parent, const Keys extends PropertyKey>(keys: ReadonlyArray<Keys>, callback: () => import("@augment-vir/core").MaybePromise<Parent>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Parent, Partial<Record<Keys, any>>>>;
156
+ isLengthAtLeast: {
157
+ <Element, Length extends number>(length: Length, callback: () => import("@augment-vir/core").MaybePromise<ReadonlyArray<Element | undefined>>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<import("@augment-vir/core").AtLeastTuple<Element, Length>>;
158
+ <Actual extends string | import("@augment-vir/core").AnyObject>(length: number, callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<Actual>;
159
+ };
160
+ isLengthExactly: {
161
+ <Element, Length extends number>(length: Length, callback: () => import("@augment-vir/core").MaybePromise<ReadonlyArray<Element | undefined>>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<import("@augment-vir/core").Tuple<Element, Length>>;
162
+ <Actual extends string | import("@augment-vir/core").AnyObject>(length: number, callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<Actual>;
163
+ };
164
+ isDefined: <Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, undefined | null>>;
165
+ isNullish: <Input extends unknown>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
166
+ interval: import("@date-vir/duration").AnyDuration;
167
+ timeout: import("@date-vir/duration").AnyDuration;
168
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, null | undefined>>;
169
+ isAbove: <Input extends number>(expected: number, params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
170
+ interval: import("@date-vir/duration").AnyDuration;
171
+ timeout: import("@date-vir/duration").AnyDuration;
172
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
173
+ isAtLeast: <Input extends number>(expected: number, params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
174
+ interval: import("@date-vir/duration").AnyDuration;
175
+ timeout: import("@date-vir/duration").AnyDuration;
176
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
177
+ isBelow: <Input extends number>(expected: number, params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
178
+ interval: import("@date-vir/duration").AnyDuration;
179
+ timeout: import("@date-vir/duration").AnyDuration;
180
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
181
+ isAtMost: <Input extends number>(expected: number, params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
182
+ interval: import("@date-vir/duration").AnyDuration;
183
+ timeout: import("@date-vir/duration").AnyDuration;
184
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
185
+ isNaN: <Input extends number>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
186
+ interval: import("@date-vir/duration").AnyDuration;
187
+ timeout: import("@date-vir/duration").AnyDuration;
188
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
189
+ isFinite: <Input extends number>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
190
+ interval: import("@date-vir/duration").AnyDuration;
191
+ timeout: import("@date-vir/duration").AnyDuration;
192
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
193
+ isInfinite: <Input extends number>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
194
+ interval: import("@date-vir/duration").AnyDuration;
195
+ timeout: import("@date-vir/duration").AnyDuration;
196
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
197
+ isApproximately: <Input extends number>(expected: number, delta: number, params_2: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
198
+ interval: import("@date-vir/duration").AnyDuration;
199
+ timeout: import("@date-vir/duration").AnyDuration;
200
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
201
+ isNotApproximately: <Input extends number>(expected: number, delta: number, params_2: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
202
+ interval: import("@date-vir/duration").AnyDuration;
203
+ timeout: import("@date-vir/duration").AnyDuration;
204
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
205
+ isNotPrimitive: <const Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, import("type-fest").Primitive>>;
206
+ isNotPropertyKey: <const Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, PropertyKey>>;
207
+ isPropertyKey: <Input extends unknown>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
208
+ interval: import("@date-vir/duration").AnyDuration;
209
+ timeout: import("@date-vir/duration").AnyDuration;
210
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, PropertyKey>>;
211
+ isPrimitive: <Input extends unknown>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
212
+ interval: import("@date-vir/duration").AnyDuration;
213
+ timeout: import("@date-vir/duration").AnyDuration;
214
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, import("type-fest").Primitive>>;
215
+ isNotPromise: <const Actual>(callback: () => Actual, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, Promise<any>>>;
216
+ isNotPromiseLike: <const Actual>(callback: () => Actual, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, PromiseLike<any>>>;
217
+ isPromise: <const Actual>(callback: () => Actual, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Extract<Actual, Promise<any>>>;
218
+ isPromiseLike: <const Actual>(callback: () => Actual, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Extract<Actual, PromiseLike<any>>>;
219
+ isNotUuid: <const Actual>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, import("@augment-vir/core").Uuid>>;
220
+ isUuid: <Input extends unknown>(params_0: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
221
+ interval: import("@date-vir/duration").AnyDuration;
222
+ timeout: import("@date-vir/duration").AnyDuration;
223
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, `${string}-${string}-${string}-${string}-${string}`>>;
224
+ hasValue: <Input extends object>(value: unknown, params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
225
+ interval: import("@date-vir/duration").AnyDuration;
226
+ timeout: import("@date-vir/duration").AnyDuration;
227
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
228
+ lacksValue: <Input extends object>(value: unknown, params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
229
+ interval: import("@date-vir/duration").AnyDuration;
230
+ timeout: import("@date-vir/duration").AnyDuration;
231
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
232
+ hasValues: <Input extends object>(values: readonly unknown[], params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
233
+ interval: import("@date-vir/duration").AnyDuration;
234
+ timeout: import("@date-vir/duration").AnyDuration;
235
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
236
+ lacksValues: <Input extends object>(values: readonly unknown[], params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
237
+ interval: import("@date-vir/duration").AnyDuration;
238
+ timeout: import("@date-vir/duration").AnyDuration;
239
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
240
+ isIn: <const Child, const Parent>(parent: Parent, callback: () => import("@augment-vir/core").MaybePromise<Child>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Child, import("@augment-vir/core").Values<Parent>>>;
241
+ isNotIn: <const Child, const Parent>(parent: Parent, callback: () => import("@augment-vir/core").MaybePromise<Child>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Child, import("@augment-vir/core").Values<Parent>>>;
242
+ isEmpty: <const Actual extends import("../assertion-exports.js").CanBeEmpty>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToActual<Actual, import("../assertion-exports.js").Empty>>;
243
+ isNotEmpty: <const Actual extends import("../assertion-exports.js").CanBeEmpty>(callback: () => import("@augment-vir/core").MaybePromise<Actual>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined) => Promise<Exclude<Actual, import("../assertion-exports.js").Empty>>;
244
+ matches: <Input extends string>(expected: RegExp, params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
245
+ interval: import("@date-vir/duration").AnyDuration;
246
+ timeout: import("@date-vir/duration").AnyDuration;
247
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
248
+ mismatches: <Input extends string>(expected: RegExp, params_1: () => import("@augment-vir/core").MaybePromise<Input>, options?: import("@augment-vir/core").PartialWithUndefined<{
249
+ interval: import("@date-vir/duration").AnyDuration;
250
+ timeout: import("@date-vir/duration").AnyDuration;
251
+ }> | undefined, failureMessage?: string | undefined) => Promise<import("@augment-vir/core").NarrowToExpected<Input, unknown>>;
252
+ endsWithout: {
253
+ <const ArrayElement>(child: ArrayElement, callback: () => import("@augment-vir/core").MaybePromise<ReadonlyArray<ArrayElement>>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<ReadonlyArray<ArrayElement>>;
254
+ (child: string, callback: () => import("@augment-vir/core").MaybePromise<string>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<string>;
255
+ (child: string, callback: () => import("@augment-vir/core").MaybePromise<string | ReadonlyArray<string>>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<string | ReadonlyArray<string>>;
256
+ };
257
+ startsWithout: {
258
+ <const ArrayElement>(child: ArrayElement, callback: () => import("@augment-vir/core").MaybePromise<ReadonlyArray<ArrayElement>>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<ReadonlyArray<ArrayElement>>;
259
+ (child: string, callback: () => import("@augment-vir/core").MaybePromise<string>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<string>;
260
+ (child: string, callback: () => import("@augment-vir/core").MaybePromise<string | ReadonlyArray<string>>, options?: WaitUntilOptions | undefined, failureMessage?: string | undefined): Promise<string | ReadonlyArray<string>>;
261
+ };
262
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ import { waitUntil } from '@augment-vir/assert';
2
+ // `result` will eventually be `'123'`
3
+ const result = await waitUntil.isString(() => {
4
+ if (Math.random() < 0.5) {
5
+ return 123;
6
+ }
7
+ else {
8
+ return '123';
9
+ }
10
+ }, {
11
+ interval: { milliseconds: 100 },
12
+ timeout: { seconds: 10 },
13
+ });
@@ -0,0 +1,34 @@
1
+ import { extendableAssertions, waitUntilOverrides } from '../../assertions/extendable-assertions.js';
2
+ import { createWaitUntilGroup } from '../../guard-types/wait-until-function.js';
3
+ /**
4
+ * A group of guard methods that run the given callback multiple times until its return value
5
+ * matches expectations. Callback interval and timeout can be customized with
6
+ * {@link WaitUntilOptions}.
7
+ *
8
+ * @category Assert
9
+ * @example
10
+ *
11
+ * ```ts
12
+ * import {waitUntil} from '@augment-vir/assert';
13
+ *
14
+ * // `result` will eventually be `'123'`
15
+ * const result = await waitUntil.isString(
16
+ * () => {
17
+ * if (Math.random() < 0.5) {
18
+ * return 123;
19
+ * } else {
20
+ * return '123';
21
+ * }
22
+ * },
23
+ * {
24
+ * interval: {milliseconds: 100},
25
+ * timeout: {seconds: 10},
26
+ * },
27
+ * );
28
+ * ```
29
+ *
30
+ * @returns The successful callback return value.
31
+ * @throws {@link AssertionError} When the assertion fails.
32
+ * @package @augment-vir/assert
33
+ */
34
+ export const waitUntil = createWaitUntilGroup(extendableAssertions, waitUntilOverrides);
@@ -0,0 +1,17 @@
1
+ import type { IsEqual } from 'type-fest';
2
+ /**
3
+ * A helper type that resolves to the given `Yes` type parameter if `Actual` === `Expected`.
4
+ * Otherwise it resolves to the given `No` type parameter.
5
+ *
6
+ * @category Assert : Util
7
+ * @package @augment-vir/assert
8
+ */
9
+ export type IfEquals<Actual, Expected, Yes = unknown, No = never> = IsEqual<Actual, Expected> extends true ? Yes : No;
10
+ /**
11
+ * A helper type that resolves to the given `Yes` type parameter if `Actual` extends `Expected`.
12
+ * Otherwise it resolves to the given `No` type parameter.
13
+ *
14
+ * @category Assert : Util
15
+ * @package @augment-vir/assert
16
+ */
17
+ export type IfExtends<Actual, Expected, Yes = unknown, No = never> = Actual extends Expected ? Yes : No;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ /** C8 fails in type-only files. */
2
+ export type AssertFunction<Output> = (input: any, ...extraInputs: any[]) => asserts input is Output;
@@ -0,0 +1,3 @@
1
+ /* node:coverage disable */
2
+ /** C8 fails in type-only files. */
3
+ export {};
@@ -0,0 +1,9 @@
1
+ import { AnyFunction, ExtractKeysWithMatchingValues, NarrowToExpected, Overwrite } from '@augment-vir/core';
2
+ import { AssertFunction } from './assert-function.js';
3
+ export type AssertWrapFunction<Output> = <Input>(input: Input, ...extraInputs: any[]) => NarrowToExpected<Input, Output>;
4
+ export type AssertWrapOverridesBase = Readonly<Record<string, AnyFunction | undefined>>;
5
+ export type AssertWrapGroup<Asserts extends Readonly<Record<string, AssertFunction<any>>>, AssertWrapOverrides extends AssertWrapOverridesBase> = Omit<Overwrite<{
6
+ [Name in keyof Asserts as Asserts[Name] extends AssertFunction<any> ? Name : never]: Asserts[Name] extends AssertFunction<infer Output> ? AssertWrapFunction<Output> : never;
7
+ }, AssertWrapOverrides>, ExtractKeysWithMatchingValues<AssertWrapOverrides, undefined>>;
8
+ export declare function createAssertWrapGroup<const Asserts extends Readonly<Record<string, AssertFunction<any>>>, const AssertWrapOverrides extends AssertWrapOverridesBase>(asserts: Asserts, assertWrapOverrides: AssertWrapOverrides): AssertWrapGroup<Asserts, AssertWrapOverrides>;
9
+ export declare function createAssertWrap<const Output>(assert: AssertFunction<Output>): AssertWrapFunction<Output>;
@@ -0,0 +1,14 @@
1
+ import { pickOverride } from './guard-override.js';
2
+ export function createAssertWrapGroup(asserts, assertWrapOverrides) {
3
+ const checks = Object.entries(asserts).reduce((accum, [name, assert,]) => {
4
+ accum[name] = pickOverride(assertWrapOverrides, name, () => createAssertWrap(assert));
5
+ return accum;
6
+ }, {});
7
+ return checks;
8
+ }
9
+ export function createAssertWrap(assert) {
10
+ return ((...inputs) => {
11
+ assert(...inputs);
12
+ return inputs[0];
13
+ });
14
+ }
@@ -0,0 +1,11 @@
1
+ import { ExtractKeysWithMatchingValues, MaybePromise, Overwrite, RemoveFirstTupleEntry, RemoveLastTupleEntry } from '@augment-vir/core';
2
+ import { AssertFunction } from './assert-function.js';
3
+ export type CheckFunction<Output> = (input: any, ...extraInputs: any[]) => input is Output;
4
+ export type GenericCheckFunction = (input: any, ...extraInputs: any[]) => MaybePromise<boolean> | never;
5
+ export type CheckOverridesBase = Readonly<Record<string, CheckFunction<any> | GenericCheckFunction | undefined>>;
6
+ export type CheckGroup<Asserts extends Readonly<Record<string, AssertFunction<any>>>, CheckOverrides extends CheckOverridesBase> = Omit<Overwrite<{
7
+ [Name in keyof Asserts as Asserts[Name] extends AssertFunction<any> ? Name : never]: Asserts[Name] extends AssertFunction<infer Output> ? (input: Parameters<Asserts[Name]>[0], ...params: RemoveLastTupleEntry<RemoveFirstTupleEntry<Parameters<Asserts[Name]>>>) => input is Output : never;
8
+ }, CheckOverrides>, ExtractKeysWithMatchingValues<CheckOverrides, undefined>>;
9
+ export declare function createCheckGroup<const Asserts extends Readonly<Record<string, AssertFunction<any>>>, const CheckOverrides extends CheckOverridesBase>(asserts: Asserts, checkOverrides: CheckOverrides): CheckGroup<Asserts, CheckOverrides>;
10
+ export declare function createCheck<const Output>(assert: AssertFunction<Output>): CheckFunction<Output>;
11
+ export declare function runAssertCheck<const Output, const Assert extends AssertFunction<Output>>(assert: Assert, input: Parameters<Assert>[0], ...inputs: RemoveFirstTupleEntry<RemoveLastTupleEntry<Parameters<Assert>>>): input is Output;
@@ -0,0 +1,22 @@
1
+ import { pickOverride } from './guard-override.js';
2
+ export function createCheckGroup(asserts, checkOverrides) {
3
+ const checks = Object.entries(asserts).reduce((accum, [name, assert,]) => {
4
+ accum[name] = pickOverride(checkOverrides, name, () => createCheck(assert));
5
+ return accum;
6
+ }, {});
7
+ return checks;
8
+ }
9
+ export function createCheck(assert) {
10
+ return ((...inputs) => {
11
+ return runAssertCheck(assert, ...inputs);
12
+ });
13
+ }
14
+ export function runAssertCheck(assert, input, ...inputs) {
15
+ try {
16
+ assert(input, ...inputs);
17
+ return true;
18
+ }
19
+ catch {
20
+ return false;
21
+ }
22
+ }
@@ -0,0 +1,9 @@
1
+ import { ExtractKeysWithMatchingValues, Overwrite, type NarrowToActual } from '@augment-vir/core';
2
+ import { AssertFunction } from './assert-function.js';
3
+ import { AssertWrapOverridesBase } from './assert-wrap-function.js';
4
+ export type CheckWrapFunction<Output> = <Input>(input: Input, ...extraInputs: any[]) => NarrowToActual<Input, Output> | undefined;
5
+ export type CheckWrapGroup<Asserts extends Readonly<Record<string, AssertFunction<any>>>, CheckWrapOverrides extends AssertWrapOverridesBase> = Omit<Overwrite<{
6
+ [Name in keyof Asserts as Asserts[Name] extends AssertFunction<any> ? Name : never]: Asserts[Name] extends AssertFunction<infer Output> ? CheckWrapFunction<Output> : never;
7
+ }, CheckWrapOverrides>, ExtractKeysWithMatchingValues<CheckWrapOverrides, undefined>>;
8
+ export declare function createCheckWrapGroup<const Asserts extends Readonly<Record<string, AssertFunction<any>>>, const CheckWrapOverrides extends AssertWrapOverridesBase>(asserts: Asserts, checkWrapOverrides: CheckWrapOverrides): CheckWrapGroup<Asserts, CheckWrapOverrides>;
9
+ export declare function createCheckWrap<const Output>(assert: AssertFunction<Output>): CheckWrapFunction<Output>;
@@ -0,0 +1,19 @@
1
+ import { pickOverride } from './guard-override.js';
2
+ export function createCheckWrapGroup(asserts, checkWrapOverrides) {
3
+ const checks = Object.entries(asserts).reduce((accum, [name, assert,]) => {
4
+ accum[name] = pickOverride(checkWrapOverrides, name, () => createCheckWrap(assert));
5
+ return accum;
6
+ }, {});
7
+ return checks;
8
+ }
9
+ export function createCheckWrap(assert) {
10
+ return ((...inputs) => {
11
+ try {
12
+ assert(...inputs);
13
+ return inputs[0];
14
+ }
15
+ catch {
16
+ return undefined;
17
+ }
18
+ });
19
+ }
@@ -0,0 +1,13 @@
1
+ /** C8 fails in type-only files. */
2
+ import type { AssertFunction } from './assert-function.js';
3
+ import type { AssertWrapOverridesBase } from './assert-wrap-function.js';
4
+ import type { CheckOverridesBase } from './check-function.js';
5
+ import type { WaitUntilOverridesBase } from './wait-until-function.js';
6
+ export type GuardGroup = {
7
+ assertions: Record<string, AssertFunction<any>>;
8
+ } & Partial<{
9
+ checkOverrides: CheckOverridesBase;
10
+ assertWrapOverrides: AssertWrapOverridesBase;
11
+ checkWrapOverrides: AssertWrapOverridesBase;
12
+ waitUntilOverrides: WaitUntilOverridesBase;
13
+ }>;
@@ -0,0 +1,3 @@
1
+ /* node:coverage disable */
2
+ /** C8 fails in type-only files. */
3
+ export {};
@@ -0,0 +1,4 @@
1
+ import { AnyObject, Values } from '@augment-vir/core';
2
+ export declare const autoGuardSymbol: unique symbol;
3
+ export declare function autoGuard<T>(): T;
4
+ export declare function pickOverride<Overrides extends AnyObject, Created>(overrides: Overrides, name: string, create: () => Created): Values<Overrides> | Created;
@@ -0,0 +1,10 @@
1
+ export const autoGuardSymbol = Symbol('auto guard');
2
+ export function autoGuard() {
3
+ return autoGuardSymbol;
4
+ }
5
+ export function pickOverride(overrides, name, create) {
6
+ if (name in overrides && overrides[name] !== autoGuardSymbol) {
7
+ return overrides[name];
8
+ }
9
+ return create();
10
+ }
@@ -0,0 +1,63 @@
1
+ import type { AnyFunction, MaybePromise, NarrowToExpected, PartialWithUndefined, RemoveFirstTupleEntry, RemoveLastTupleEntry, RequiredAndNotNull } from '@augment-vir/core';
2
+ import { ExtractKeysWithMatchingValues, Overwrite } from '@augment-vir/core';
3
+ import { AnyDuration } from '@date-vir/duration';
4
+ import type { AssertFunction } from './assert-function.js';
5
+ /**
6
+ * Options for configuring the timing of `waitUntil`.
7
+ *
8
+ * @category Assert : Util
9
+ * @package @augment-vir/assert
10
+ */
11
+ export type WaitUntilOptions = PartialWithUndefined<{
12
+ /**
13
+ * The duration between attempts.
14
+ *
15
+ * @default {milliseconds: 100}
16
+ */
17
+ interval: AnyDuration;
18
+ /**
19
+ * The maximum duration to keep trying. If the `waitUntil` expectations are still not met by
20
+ * this time, an {@link AssertionError} will be thrown.
21
+ *
22
+ * @default {seconds: 10}
23
+ */
24
+ timeout: AnyDuration;
25
+ }>;
26
+ export declare const defaultWaitUntilOptions: RequiredAndNotNull<WaitUntilOptions>;
27
+ export type WaitUntilOverridesBase = Readonly<Record<string, AnyFunction>>;
28
+ export type WaitUntilFunctionParameters<Assert extends AssertFunction<any>, Input> = [
29
+ ...RemoveFirstTupleEntry<RemoveLastTupleEntry<Parameters<Assert>>>,
30
+ () => MaybePromise<Input>
31
+ ];
32
+ export type WaitUntilFunction<Assert extends AssertFunction<any>> = Assert extends AssertFunction<infer Guard> ? <Input extends Parameters<Assert>[0]>(...params: [
33
+ ...WaitUntilFunctionParameters<Assert, Input>,
34
+ options?: WaitUntilOptions | undefined,
35
+ failureMessage?: string | undefined
36
+ ]) => Promise<NarrowToExpected<Input, Guard>> : never;
37
+ type WaitUntilGroup<Asserts extends Readonly<Record<string, AssertFunction<any>>>, WaitUntilOverrides extends WaitUntilOverridesBase> = Omit<Overwrite<{
38
+ [Name in keyof Asserts as Asserts[Name] extends AssertFunction<any> ? Name : never]: WaitUntilFunction<Asserts[Name]>;
39
+ }, WaitUntilOverrides>, ExtractKeysWithMatchingValues<WaitUntilOverrides, undefined>>;
40
+ export declare function createWaitUntilGroup<const Asserts extends Readonly<Record<string, AssertFunction<any>>>, const WaitUntilOverrides extends WaitUntilOverridesBase>(asserts: Asserts, waitUntilOverrides: WaitUntilOverrides): WaitUntilGroup<Asserts, WaitUntilOverrides>;
41
+ export declare function createWaitUntil<const Assert extends AssertFunction<any>>(assert: Assert, requireSynchronousResult?: boolean): WaitUntilFunction<Assert>;
42
+ export declare function parseWaitUntilArgs(rawArgs: unknown[]): {
43
+ callback: AnyFunction;
44
+ options: RequiredAndNotNull<PartialWithUndefined<{
45
+ /**
46
+ * The duration between attempts.
47
+ *
48
+ * @default {milliseconds: 100}
49
+ */
50
+ interval: AnyDuration;
51
+ /**
52
+ * The maximum duration to keep trying. If the `waitUntil` expectations are still not met by
53
+ * this time, an {@link AssertionError} will be thrown.
54
+ *
55
+ * @default {seconds: 10}
56
+ */
57
+ timeout: AnyDuration;
58
+ }>>;
59
+ extraAssertionArgs: unknown[];
60
+ failureMessage: string | undefined;
61
+ };
62
+ export declare function parseWaitUntilOptions(rawOptions: WaitUntilOptions | undefined): RequiredAndNotNull<WaitUntilOptions>;
63
+ export {};