@rickosborne/guard 2024.12.32 → 2024.12.33

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 (85) hide show
  1. package/README.md +64 -0
  2. package/cjs/index.js +2 -1
  3. package/cjs/index.js.map +1 -1
  4. package/cjs/ts/error-from-message.js +2 -1
  5. package/cjs/ts/error-from-message.js.map +1 -1
  6. package/cjs/ts/has-number.js +4 -0
  7. package/cjs/ts/has-number.js.map +1 -1
  8. package/cjs/ts/has-own.js +4 -0
  9. package/cjs/ts/has-own.js.map +1 -1
  10. package/cjs/ts/is-defined.js +30 -0
  11. package/cjs/ts/is-defined.js.map +1 -0
  12. package/cjs/ts/is-int.js +10 -0
  13. package/cjs/ts/is-int.js.map +1 -1
  14. package/cjs/ts/is-list-of.js +4 -0
  15. package/cjs/ts/is-list-of.js.map +1 -1
  16. package/cjs/ts/is-object.js +8 -0
  17. package/cjs/ts/is-object.js.map +1 -1
  18. package/cjs/ts/scrub-stack-trace.js +48 -0
  19. package/cjs/ts/scrub-stack-trace.js.map +1 -0
  20. package/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  21. package/esm/index.js +2 -1
  22. package/esm/index.js.map +1 -1
  23. package/esm/ts/error-from-message.js +2 -1
  24. package/esm/ts/error-from-message.js.map +1 -1
  25. package/esm/ts/has-number.js +4 -0
  26. package/esm/ts/has-number.js.map +1 -1
  27. package/esm/ts/has-own.js +4 -0
  28. package/esm/ts/has-own.js.map +1 -1
  29. package/esm/ts/is-defined.js +24 -0
  30. package/esm/ts/is-defined.js.map +1 -0
  31. package/esm/ts/is-int.js +10 -0
  32. package/esm/ts/is-int.js.map +1 -1
  33. package/esm/ts/is-list-of.js +4 -0
  34. package/esm/ts/is-list-of.js.map +1 -1
  35. package/esm/ts/is-object.js +8 -0
  36. package/esm/ts/is-object.js.map +1 -1
  37. package/esm/ts/scrub-stack-trace.js +46 -0
  38. package/esm/ts/scrub-stack-trace.js.map +1 -0
  39. package/esm/tsconfig.module.tsbuildinfo +1 -1
  40. package/package.json +2 -2
  41. package/types/index.d.ts +2 -1
  42. package/types/index.d.ts.map +1 -1
  43. package/types/index.js +2 -1
  44. package/types/index.js.map +1 -1
  45. package/types/ts/error-from-message.d.ts.map +1 -1
  46. package/types/ts/error-from-message.js +2 -1
  47. package/types/ts/error-from-message.js.map +1 -1
  48. package/types/ts/has-number.d.ts +4 -0
  49. package/types/ts/has-number.d.ts.map +1 -1
  50. package/types/ts/has-number.js +4 -0
  51. package/types/ts/has-number.js.map +1 -1
  52. package/types/ts/has-own.d.ts +10 -0
  53. package/types/ts/has-own.d.ts.map +1 -1
  54. package/types/ts/has-own.js +4 -0
  55. package/types/ts/has-own.js.map +1 -1
  56. package/types/ts/is-defined.d.ts +16 -0
  57. package/types/ts/is-defined.d.ts.map +1 -0
  58. package/types/ts/is-defined.js +30 -0
  59. package/types/ts/is-defined.js.map +1 -0
  60. package/types/ts/is-int.d.ts +10 -0
  61. package/types/ts/is-int.d.ts.map +1 -1
  62. package/types/ts/is-int.js +10 -0
  63. package/types/ts/is-int.js.map +1 -1
  64. package/types/ts/is-list-of.d.ts +4 -0
  65. package/types/ts/is-list-of.d.ts.map +1 -1
  66. package/types/ts/is-list-of.js +4 -0
  67. package/types/ts/is-list-of.js.map +1 -1
  68. package/types/ts/is-object.d.ts +8 -0
  69. package/types/ts/is-object.d.ts.map +1 -1
  70. package/types/ts/is-object.js +8 -0
  71. package/types/ts/is-object.js.map +1 -1
  72. package/types/ts/scrub-stack-trace.d.ts +14 -0
  73. package/types/ts/scrub-stack-trace.d.ts.map +1 -0
  74. package/types/ts/scrub-stack-trace.js +50 -0
  75. package/types/ts/scrub-stack-trace.js.map +1 -0
  76. package/types/tsconfig.types.tsbuildinfo +1 -1
  77. package/cjs/ts/assert-defined.js +0 -11
  78. package/cjs/ts/assert-defined.js.map +0 -1
  79. package/esm/ts/assert-defined.js +0 -8
  80. package/esm/ts/assert-defined.js.map +0 -1
  81. package/types/ts/assert-defined.d.ts +0 -3
  82. package/types/ts/assert-defined.d.ts.map +0 -1
  83. package/types/ts/assert-defined.js +0 -11
  84. package/types/ts/assert-defined.js.map +0 -1
  85. /package/{types/tsdoc-metadata.json → tsdoc-metadata.json} +0 -0
package/README.md CHANGED
@@ -15,6 +15,9 @@ Basic type guards building on [@rickosborne/typical](https://www.npmjs.com/packa
15
15
  declare function assertDefined<T>(value: T, messageOrError: MessageOrError): asserts value is NonNullable<T>;
16
16
  ```
17
17
 
18
+ Assert the given value is not null or undefined. Throws with the given message or error, otherwise.
19
+
20
+
18
21
  #### assertInt
19
22
 
20
23
  <a id="api-assertint"></a>
@@ -23,6 +26,9 @@ declare function assertDefined<T>(value: T, messageOrError: MessageOrError): ass
23
26
  declare function assertInt(value: unknown, messageOrError: MessageOrError): asserts value is number;
24
27
  ```
25
28
 
29
+ Throw if the given value is not an integer.
30
+
31
+
26
32
  #### errorFromMessageOrError
27
33
 
28
34
  <a id="api-errorfrommessageorerror"></a>
@@ -34,6 +40,17 @@ errorFromMessageOrError: (messageOrError: MessageOrError, defaultConstructor?: (
34
40
  Helper for guards which expect text or an error, or can generate one when needed.
35
41
 
36
42
 
43
+ #### expectDefined
44
+
45
+ <a id="api-expectdefined"></a>
46
+
47
+ ```typescript
48
+ expectDefined: <T>(obj: T, messageOrError: MessageOrError) => NonNullable<T>
49
+ ```
50
+
51
+ Coerce a value's type to exclude null or undefined, or throw if it actually is null or undefined.
52
+
53
+
37
54
  #### expectInt
38
55
 
39
56
  <a id="api-expectint"></a>
@@ -42,6 +59,9 @@ Helper for guards which expect text or an error, or can generate one when needed
42
59
  expectInt: (obj: unknown, messageOrError: MessageOrError) => number
43
60
  ```
44
61
 
62
+ Coerce a value's type to a number, throwing if it's not an integer.
63
+
64
+
45
65
  #### hasArray
46
66
 
47
67
  <a id="api-hasarray"></a>
@@ -76,6 +96,9 @@ Guard for whether the given value is an object which has a property with its own
76
96
  hasNumber: <Name extends string>(obj: unknown, name: Name) => obj is { [k in Name]: string; }
77
97
  ```
78
98
 
99
+ Guard for whether an object has a property with the given name and a numeric value.
100
+
101
+
79
102
  #### hasOwn
80
103
 
81
104
  <a id="api-hasown"></a>
@@ -86,6 +109,9 @@ declare function hasOwn<Name extends string>(obj: unknown, name: Name): obj is {
86
109
  };
87
110
  ```
88
111
 
112
+ Guard for whether the given value is an object with a property with the given name. This variant does not check the value, only that the property exists.
113
+
114
+
89
115
  #### hasOwn
90
116
 
91
117
  <a id="api-hasown"></a>
@@ -96,6 +122,20 @@ declare function hasOwn<Name extends string, T>(obj: unknown, name: Name, predic
96
122
  };
97
123
  ```
98
124
 
125
+ Guard for whether the given value is an object with a property with the given name. This variant checks the value against the given predicate.
126
+
127
+
128
+ #### isDefined
129
+
130
+ <a id="api-isdefined"></a>
131
+
132
+ ```typescript
133
+ isDefined: <T>(obj: T) => obj is NonNullable<T>
134
+ ```
135
+
136
+ Guard to filter out null or undefined values.
137
+
138
+
99
139
  #### isInt
100
140
 
101
141
  <a id="api-isint"></a>
@@ -104,6 +144,9 @@ declare function hasOwn<Name extends string, T>(obj: unknown, name: Name, predic
104
144
  isInt: (obj: unknown) => obj is number
105
145
  ```
106
146
 
147
+ Check whether the given value is not just numeric, but is also an integer.
148
+
149
+
107
150
  #### isListOf
108
151
 
109
152
  <a id="api-islistof"></a>
@@ -112,6 +155,9 @@ isInt: (obj: unknown) => obj is number
112
155
  isListOf: <T>(list: unknown, predicate: (item: unknown, index: number, items: unknown[]) => item is T) => list is T[]
113
156
  ```
114
157
 
158
+ Guard to check if the given value is an array where all the items match the given predicate.
159
+
160
+
115
161
  #### isObject
116
162
 
117
163
  <a id="api-isobject"></a>
@@ -120,6 +166,9 @@ isListOf: <T>(list: unknown, predicate: (item: unknown, index: number, items: un
120
166
  isObject: (obj: unknown) => obj is NonNullable<object>
121
167
  ```
122
168
 
169
+ Guard to check that the given value is defined and object-like.
170
+
171
+
123
172
  #### isPlainObject
124
173
 
125
174
  <a id="api-isplainobject"></a>
@@ -128,6 +177,9 @@ isObject: (obj: unknown) => obj is NonNullable<object>
128
177
  isPlainObject: (obj: unknown) => obj is Record<never, never>
129
178
  ```
130
179
 
180
+ Guard to check that the given value is defined, is an object, and seems to be a "plain" object, descending directly from Object. This won't prevent all shenanigans, but is a low-effort check.
181
+
182
+
131
183
  #### isUnaryPredicate
132
184
 
133
185
  <a id="api-isunarypredicate"></a>
@@ -139,6 +191,18 @@ isUnaryPredicate: (obj: unknown) => obj is UnaryPredicate<unknown>
139
191
  Tests whether the given object is a function and takes at least one parameter, and could maybe act as a unary predicate. Warning! Since no type information is available at runtime, it may not actually act as a predicate!
140
192
 
141
193
 
194
+ #### scrubStackTrace
195
+
196
+ <a id="api-scrubstacktrace"></a>
197
+
198
+ ```typescript
199
+ scrubStackTrace: <E extends Error>(err: E, removeIf?: Predicate<string> | RegExp | string | undefined) => E
200
+ ```
201
+
202
+ Wrap an Error in a proxy which cleans up the stack trace to be more human-readable. It filters out lines from third-party code, so you can quickly see your own code in the call stack. May optionally include some way of indicating additional lines which should be removed, so a guard function could make itself transparent, making it seem like the caller threw the error.
203
+
204
+
205
+
142
206
  ### TypeAliases
143
207
 
144
208
  #### MessageOrError
package/cjs/index.js CHANGED
@@ -14,13 +14,14 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./ts/assert-defined.js"), exports);
18
17
  __exportStar(require("./ts/error-from-message.js"), exports);
19
18
  __exportStar(require("./ts/has-array.js"), exports);
20
19
  __exportStar(require("./ts/has-number.js"), exports);
21
20
  __exportStar(require("./ts/has-own.js"), exports);
21
+ __exportStar(require("./ts/is-defined.js"), exports);
22
22
  __exportStar(require("./ts/is-int.js"), exports);
23
23
  __exportStar(require("./ts/is-list-of.js"), exports);
24
24
  __exportStar(require("./ts/is-object.js"), exports);
25
25
  __exportStar(require("./ts/is-predicate.js"), exports);
26
+ __exportStar(require("./ts/scrub-stack-trace.js"), exports);
26
27
  //# sourceMappingURL=index.js.map
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC;AACvC,6DAA2C;AAC3C,oDAAkC;AAClC,qDAAmC;AACnC,kDAAgC;AAChC,iDAA+B;AAC/B,qDAAmC;AACnC,oDAAkC;AAClC,uDAAqC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C;AAC3C,oDAAkC;AAClC,qDAAmC;AACnC,kDAAgC;AAChC,qDAAmC;AACnC,iDAA+B;AAC/B,qDAAmC;AACnC,oDAAkC;AAClC,uDAAqC;AACrC,4DAA0C"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.errorFromMessageOrError = void 0;
4
+ const scrub_stack_trace_js_1 = require("./scrub-stack-trace.js");
4
5
  /**
5
6
  * Helper for guards which expect text or an error, or
6
7
  * can generate one when needed.
@@ -20,7 +21,7 @@ const errorFromMessageOrError = (messageOrError, defaultConstructor = Error) =>
20
21
  else {
21
22
  error = stringOrError;
22
23
  }
23
- return error;
24
+ return (0, scrub_stack_trace_js_1.scrubStackTrace)(error, " at errorFromMessageOrError ");
24
25
  };
25
26
  exports.errorFromMessageOrError = errorFromMessageOrError;
26
27
  //# sourceMappingURL=error-from-message.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-from-message.js","sourceRoot":"","sources":["../../../ts/error-from-message.ts"],"names":[],"mappings":";;;AAKA;;;GAGG;AACI,MAAM,uBAAuB,GAAG,CACtC,cAA8B,EAC9B,qBAAuD,KAAK,EACpD,EAAE;IACV,IAAI,aAA6B,CAAC;IAClC,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;QAC1C,aAAa,GAAG,cAAc,EAAE,CAAC;IAClC,CAAC;SAAM,CAAC;QACP,aAAa,GAAG,cAAc,CAAC;IAChC,CAAC;IACD,IAAI,KAAY,CAAC;IACjB,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACvC,KAAK,GAAG,IAAI,kBAAkB,CAAC,YAAa,aAAc,EAAE,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACP,KAAK,GAAG,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAjBW,QAAA,uBAAuB,2BAiBlC"}
1
+ {"version":3,"file":"error-from-message.js","sourceRoot":"","sources":["../../../ts/error-from-message.ts"],"names":[],"mappings":";;;AAAA,iEAAyD;AAOzD;;;GAGG;AACI,MAAM,uBAAuB,GAAG,CACtC,cAA8B,EAC9B,qBAAuD,KAAK,EACpD,EAAE;IACV,IAAI,aAA6B,CAAC;IAClC,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;QAC1C,aAAa,GAAG,cAAc,EAAE,CAAC;IAClC,CAAC;SAAM,CAAC;QACP,aAAa,GAAG,cAAc,CAAC;IAChC,CAAC;IACD,IAAI,KAAY,CAAC;IACjB,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACvC,KAAK,GAAG,IAAI,kBAAkB,CAAC,YAAa,aAAc,EAAE,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACP,KAAK,GAAG,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,IAAA,sCAAe,EAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;AAC/D,CAAC,CAAC;AAjBW,QAAA,uBAAuB,2BAiBlC"}
@@ -2,6 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasNumber = void 0;
4
4
  const has_own_js_1 = require("./has-own.js");
5
+ /**
6
+ * Guard for whether an object has a property with the given name
7
+ * and a numeric value.
8
+ */
5
9
  const hasNumber = (obj, name) => {
6
10
  return (0, has_own_js_1.hasOwn)(obj, name) && typeof obj[name] === "number";
7
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"has-number.js","sourceRoot":"","sources":["../../../ts/has-number.ts"],"names":[],"mappings":";;;AAAA,6CAAsC;AAE/B,MAAM,SAAS,GAAG,CAAsB,GAAY,EAAE,IAAU,EAAgC,EAAE;IACxG,OAAO,IAAA,mBAAM,EAAC,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC;AAC3D,CAAC,CAAC;AAFW,QAAA,SAAS,aAEpB"}
1
+ {"version":3,"file":"has-number.js","sourceRoot":"","sources":["../../../ts/has-number.ts"],"names":[],"mappings":";;;AAAA,6CAAsC;AAEtC;;;GAGG;AACI,MAAM,SAAS,GAAG,CAAsB,GAAY,EAAE,IAAU,EAAkC,EAAE;IAC1G,OAAO,IAAA,mBAAM,EAAC,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,GAAG,CAAE,IAAI,CAAE,KAAK,QAAQ,CAAC;AAC7D,CAAC,CAAC;AAFW,QAAA,SAAS,aAEpB"}
package/cjs/ts/has-own.js CHANGED
@@ -2,6 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasOwn = hasOwn;
4
4
  const is_object_js_1 = require("./is-object.js");
5
+ /**
6
+ * Guard for whether the given value is an object with a property
7
+ * with the given name.
8
+ */
5
9
  function hasOwn(obj, name, predicate) {
6
10
  if (!(0, is_object_js_1.isObject)(obj) || !Object.hasOwn(obj, name)) {
7
11
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"has-own.js","sourceRoot":"","sources":["../../../ts/has-own.ts"],"names":[],"mappings":";;AAIA,wBAKC;AATD,iDAA0C;AAI1C,SAAgB,MAAM,CAAyB,GAAY,EAAE,IAAU,EAAE,SAA0C;IAClH,IAAI,CAAC,IAAA,uBAAQ,EAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,IAAwB,CAAC,CAAC,CAAC;AACtE,CAAC"}
1
+ {"version":3,"file":"has-own.js","sourceRoot":"","sources":["../../../ts/has-own.ts"],"names":[],"mappings":";;AAkBA,wBAKC;AAvBD,iDAA0C;AAc1C;;;GAGG;AACH,SAAgB,MAAM,CAAyB,GAAY,EAAE,IAAU,EAAE,SAA0C;IAClH,IAAI,CAAC,IAAA,uBAAQ,EAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,GAAG,CAAE,IAAwB,CAAE,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.expectDefined = exports.isDefined = void 0;
4
+ exports.assertDefined = assertDefined;
5
+ const error_from_message_js_1 = require("./error-from-message.js");
6
+ /**
7
+ * Assert the given value is not null or undefined.
8
+ * Throws with the given message or error, otherwise.
9
+ */
10
+ function assertDefined(value, messageOrError) {
11
+ if (value != null) {
12
+ return;
13
+ }
14
+ throw (0, error_from_message_js_1.errorFromMessageOrError)(messageOrError, RangeError);
15
+ }
16
+ /**
17
+ * Guard to filter out null or undefined values.
18
+ */
19
+ const isDefined = (obj) => obj != null;
20
+ exports.isDefined = isDefined;
21
+ /**
22
+ * Coerce a value's type to exclude null or undefined, or throw
23
+ * if it actually is null or undefined.
24
+ */
25
+ const expectDefined = (obj, messageOrError) => {
26
+ assertDefined(obj, messageOrError);
27
+ return obj;
28
+ };
29
+ exports.expectDefined = expectDefined;
30
+ //# sourceMappingURL=is-defined.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-defined.js","sourceRoot":"","sources":["../../../ts/is-defined.ts"],"names":[],"mappings":";;;AAMA,sCAQC;AAdD,mEAAuF;AAEvF;;;GAGG;AACH,SAAgB,aAAa,CAC5B,KAAQ,EACR,cAA8B;IAE9B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO;IACR,CAAC;IACD,MAAM,IAAA,+CAAuB,EAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACI,MAAM,SAAS,GAAG,CAAI,GAAM,EAAyB,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC;AAA9D,QAAA,SAAS,aAAqD;AAE3E;;;GAGG;AACI,MAAM,aAAa,GAAG,CAC5B,GAAM,EACN,cAA8B,EACb,EAAE;IACnB,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACnC,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AANW,QAAA,aAAa,iBAMxB"}
package/cjs/ts/is-int.js CHANGED
@@ -3,13 +3,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.expectInt = exports.isInt = void 0;
4
4
  exports.assertInt = assertInt;
5
5
  const error_from_message_js_1 = require("./error-from-message.js");
6
+ /**
7
+ * Check whether the given value is not just numeric, but is
8
+ * also an integer.
9
+ */
6
10
  const isInt = (obj) => typeof obj === "number" && !isNaN(obj) && Math.trunc(obj) === obj && obj !== Infinity && obj !== -Infinity;
7
11
  exports.isInt = isInt;
12
+ /**
13
+ * Throw if the given value is not an integer.
14
+ */
8
15
  function assertInt(value, messageOrError) {
9
16
  if (!(0, exports.isInt)(value)) {
10
17
  throw (0, error_from_message_js_1.errorFromMessageOrError)(messageOrError, TypeError);
11
18
  }
12
19
  }
20
+ /**
21
+ * Coerce a value's type to a number, throwing if it's not an integer.
22
+ */
13
23
  const expectInt = (obj, messageOrError) => {
14
24
  assertInt(obj, messageOrError);
15
25
  return obj;
@@ -1 +1 @@
1
- {"version":3,"file":"is-int.js","sourceRoot":"","sources":["../../../ts/is-int.ts"],"names":[],"mappings":";;;AAIA,8BAIC;AARD,mEAAuF;AAEhF,MAAM,KAAK,GAAG,CAAC,GAAY,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;AAApJ,QAAA,KAAK,SAA+I;AAEjK,SAAgB,SAAS,CAAC,KAAc,EAAE,cAA8B;IACvE,IAAI,CAAC,IAAA,aAAK,EAAC,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAA,+CAAuB,EAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAEM,MAAM,SAAS,GAAG,CACxB,GAAY,EACZ,cAA8B,EACrB,EAAE;IACX,SAAS,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AANW,QAAA,SAAS,aAMpB"}
1
+ {"version":3,"file":"is-int.js","sourceRoot":"","sources":["../../../ts/is-int.ts"],"names":[],"mappings":";;;AAWA,8BAIC;AAfD,mEAAuF;AAEvF;;;GAGG;AACI,MAAM,KAAK,GAAG,CAAC,GAAY,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;AAApJ,QAAA,KAAK,SAA+I;AAEjK;;GAEG;AACH,SAAgB,SAAS,CAAC,KAAc,EAAE,cAA8B;IACvE,IAAI,CAAC,IAAA,aAAK,EAAC,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAA,+CAAuB,EAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAED;;GAEG;AACI,MAAM,SAAS,GAAG,CACxB,GAAY,EACZ,cAA8B,EACrB,EAAE;IACX,SAAS,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AANW,QAAA,SAAS,aAMpB"}
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isListOf = void 0;
4
+ /**
5
+ * Guard to check if the given value is an array where all the
6
+ * items match the given predicate.
7
+ */
4
8
  const isListOf = (list, predicate) => {
5
9
  return Array.isArray(list) && list.every(predicate);
6
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"is-list-of.js","sourceRoot":"","sources":["../../../ts/is-list-of.ts"],"names":[],"mappings":";;;AAAO,MAAM,QAAQ,GAAG,CACvB,IAAa,EACb,SAAwE,EAC1D,EAAE;IAChB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACrD,CAAC,CAAC;AALW,QAAA,QAAQ,YAKnB"}
1
+ {"version":3,"file":"is-list-of.js","sourceRoot":"","sources":["../../../ts/is-list-of.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACI,MAAM,QAAQ,GAAG,CACvB,IAAa,EACb,SAAwE,EAC1D,EAAE;IAChB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACrD,CAAC,CAAC;AALW,QAAA,QAAQ,YAKnB"}
@@ -1,10 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isPlainObject = exports.isObject = void 0;
4
+ /**
5
+ * Guard to check that the given value is defined and object-like.
6
+ */
4
7
  const isObject = (obj) => {
5
8
  return obj != null && typeof obj === "object";
6
9
  };
7
10
  exports.isObject = isObject;
11
+ /**
12
+ * Guard to check that the given value is defined, is an object,
13
+ * and seems to be a "plain" object, descending directly from Object.
14
+ * This won't prevent all shenanigans, but is a low-effort check.
15
+ */
8
16
  const isPlainObject = (obj) => {
9
17
  if (!(0, exports.isObject)(obj)) {
10
18
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"is-object.js","sourceRoot":"","sources":["../../../ts/is-object.ts"],"names":[],"mappings":";;;AAAO,MAAM,QAAQ,GAAG,CAAC,GAAY,EAA8B,EAAE;IACpE,OAAO,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;AAC/C,CAAC,CAAC;AAFW,QAAA,QAAQ,YAEnB;AAEK,MAAM,aAAa,GAAG,CAAC,GAAY,EAA8B,EAAE;IACzE,IAAI,CAAC,IAAA,gBAAQ,EAAC,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,CAAC;AACpD,CAAC,CAAC;AANW,QAAA,aAAa,iBAMxB"}
1
+ {"version":3,"file":"is-object.js","sourceRoot":"","sources":["../../../ts/is-object.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACI,MAAM,QAAQ,GAAG,CAAC,GAAY,EAA8B,EAAE;IACpE,OAAO,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;AAC/C,CAAC,CAAC;AAFW,QAAA,QAAQ,YAEnB;AAEF;;;;GAIG;AACI,MAAM,aAAa,GAAG,CAAC,GAAY,EAA8B,EAAE;IACzE,IAAI,CAAC,IAAA,gBAAQ,EAAC,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,CAAC;AACpD,CAAC,CAAC;AANW,QAAA,aAAa,iBAMxB"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scrubStackTrace = void 0;
4
+ const defaultKeepIf = (line) => {
5
+ return !line.includes("node:internal")
6
+ && (!line.includes("/node_modules/") || line.includes("@rickosborne/"));
7
+ };
8
+ /**
9
+ * Wrap an Error in a proxy which cleans up the stack trace to be
10
+ * more human-readable. It filters out lines from third-party code,
11
+ * so you can quickly see your own code in the call stack.
12
+ * May optionally include some way of indicating additional lines
13
+ * which should be removed, so a guard function could make itself
14
+ * transparent, making it seem like the caller threw the error.
15
+ * @param err - Some kind of Error.
16
+ * @param removeIf - A matcher to indicate whether a line should be removed (not kept!).
17
+ * Generally, you'll pass in the name of the calling function, calling file, or similar.
18
+ */
19
+ const scrubStackTrace = (err, removeIf) => {
20
+ let keepIf;
21
+ if (typeof removeIf === "string") {
22
+ keepIf = (line) => !line.includes(removeIf);
23
+ }
24
+ else if (removeIf instanceof RegExp) {
25
+ keepIf = (line) => !removeIf.test(line);
26
+ }
27
+ else if (typeof removeIf === "function") {
28
+ keepIf = (line) => !removeIf(line);
29
+ }
30
+ else {
31
+ keepIf = () => true;
32
+ }
33
+ let scrubbedStack;
34
+ return new Proxy(err, {
35
+ get(target, p) {
36
+ var _a;
37
+ if (p !== "stack") {
38
+ return target[p];
39
+ }
40
+ if (scrubbedStack == null) {
41
+ scrubbedStack = (_a = target.stack) === null || _a === void 0 ? void 0 : _a.split("\n").filter(defaultKeepIf).filter(keepIf).join("\n");
42
+ }
43
+ return scrubbedStack;
44
+ },
45
+ });
46
+ };
47
+ exports.scrubStackTrace = scrubStackTrace;
48
+ //# sourceMappingURL=scrub-stack-trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrub-stack-trace.js","sourceRoot":"","sources":["../../../ts/scrub-stack-trace.ts"],"names":[],"mappings":";;;AAEA,MAAM,aAAa,GAAG,CAAC,IAAY,EAAW,EAAE;IAC/C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;WAClC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACI,MAAM,eAAe,GAAG,CAC9B,GAAM,EACN,QAA0D,EACtD,EAAE;IACN,IAAI,MAAyB,CAAC;IAC9B,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,QAAQ,YAAY,MAAM,EAAE,CAAC;QACvC,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;SAAM,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC3C,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACP,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;IACrB,CAAC;IACD,IAAI,aAAiC,CAAC;IACtC,OAAO,IAAI,KAAK,CAAI,GAAG,EAAE;QACxB,GAAG,CAAC,MAAS,EAAE,CAAkB;;YAChC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;gBACnB,OAAO,MAAM,CAAE,CAAY,CAAE,CAAC;YAC/B,CAAC;YACD,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;gBAC3B,aAAa,GAAG,MAAA,MAAM,CAAC,KAAK,0CAAE,KAAK,CAAC,IAAI,EACtC,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,MAAM,EACb,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,CAAC;YACD,OAAO,aAAa,CAAC;QACtB,CAAC;KACD,CAAC,CAAC;AACJ,CAAC,CAAC;AA7BW,QAAA,eAAe,mBA6B1B"}
@@ -1 +1 @@
1
- {"root":["../../index.ts","../../ts/assert-defined.ts","../../ts/error-from-message.ts","../../ts/has-array.ts","../../ts/has-number.ts","../../ts/has-own.ts","../../ts/is-int.ts","../../ts/is-list-of.ts","../../ts/is-object.ts","../../ts/is-predicate.ts"],"version":"5.7.2"}
1
+ {"root":["../../index.ts","../../ts/error-from-message.ts","../../ts/has-array.ts","../../ts/has-number.ts","../../ts/has-own.ts","../../ts/is-defined.ts","../../ts/is-int.ts","../../ts/is-list-of.ts","../../ts/is-object.ts","../../ts/is-predicate.ts","../../ts/scrub-stack-trace.ts"],"version":"5.7.2"}
package/esm/index.js CHANGED
@@ -1,10 +1,11 @@
1
- export * from "./ts/assert-defined.js";
2
1
  export * from "./ts/error-from-message.js";
3
2
  export * from "./ts/has-array.js";
4
3
  export * from "./ts/has-number.js";
5
4
  export * from "./ts/has-own.js";
5
+ export * from "./ts/is-defined.js";
6
6
  export * from "./ts/is-int.js";
7
7
  export * from "./ts/is-list-of.js";
8
8
  export * from "./ts/is-object.js";
9
9
  export * from "./ts/is-predicate.js";
10
+ export * from "./ts/scrub-stack-trace.js";
10
11
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { scrubStackTrace } from "./scrub-stack-trace.js";
1
2
  /**
2
3
  * Helper for guards which expect text or an error, or
3
4
  * can generate one when needed.
@@ -17,6 +18,6 @@ export const errorFromMessageOrError = (messageOrError, defaultConstructor = Err
17
18
  else {
18
19
  error = stringOrError;
19
20
  }
20
- return error;
21
+ return scrubStackTrace(error, " at errorFromMessageOrError ");
21
22
  };
22
23
  //# sourceMappingURL=error-from-message.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-from-message.js","sourceRoot":"","sources":["../../../ts/error-from-message.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACtC,cAA8B,EAC9B,qBAAuD,KAAK,EACpD,EAAE;IACV,IAAI,aAA6B,CAAC;IAClC,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;QAC1C,aAAa,GAAG,cAAc,EAAE,CAAC;IAClC,CAAC;SAAM,CAAC;QACP,aAAa,GAAG,cAAc,CAAC;IAChC,CAAC;IACD,IAAI,KAAY,CAAC;IACjB,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACvC,KAAK,GAAG,IAAI,kBAAkB,CAAC,YAAa,aAAc,EAAE,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACP,KAAK,GAAG,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC"}
1
+ {"version":3,"file":"error-from-message.js","sourceRoot":"","sources":["../../../ts/error-from-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAOzD;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACtC,cAA8B,EAC9B,qBAAuD,KAAK,EACpD,EAAE;IACV,IAAI,aAA6B,CAAC;IAClC,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;QAC1C,aAAa,GAAG,cAAc,EAAE,CAAC;IAClC,CAAC;SAAM,CAAC;QACP,aAAa,GAAG,cAAc,CAAC;IAChC,CAAC;IACD,IAAI,KAAY,CAAC;IACjB,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACvC,KAAK,GAAG,IAAI,kBAAkB,CAAC,YAAa,aAAc,EAAE,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACP,KAAK,GAAG,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,eAAe,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;AAC/D,CAAC,CAAC"}
@@ -1,4 +1,8 @@
1
1
  import { hasOwn } from "./has-own.js";
2
+ /**
3
+ * Guard for whether an object has a property with the given name
4
+ * and a numeric value.
5
+ */
2
6
  export const hasNumber = (obj, name) => {
3
7
  return hasOwn(obj, name) && typeof obj[name] === "number";
4
8
  };
@@ -1 +1 @@
1
- {"version":3,"file":"has-number.js","sourceRoot":"","sources":["../../../ts/has-number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAsB,GAAY,EAAE,IAAU,EAAgC,EAAE;IACxG,OAAO,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC;AAC3D,CAAC,CAAC"}
1
+ {"version":3,"file":"has-number.js","sourceRoot":"","sources":["../../../ts/has-number.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAsB,GAAY,EAAE,IAAU,EAAkC,EAAE;IAC1G,OAAO,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,GAAG,CAAE,IAAI,CAAE,KAAK,QAAQ,CAAC;AAC7D,CAAC,CAAC"}
package/esm/ts/has-own.js CHANGED
@@ -1,4 +1,8 @@
1
1
  import { isObject } from "./is-object.js";
2
+ /**
3
+ * Guard for whether the given value is an object with a property
4
+ * with the given name.
5
+ */
2
6
  export function hasOwn(obj, name, predicate) {
3
7
  if (!isObject(obj) || !Object.hasOwn(obj, name)) {
4
8
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"has-own.js","sourceRoot":"","sources":["../../../ts/has-own.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,MAAM,UAAU,MAAM,CAAyB,GAAY,EAAE,IAAU,EAAE,SAA0C;IAClH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,IAAwB,CAAC,CAAC,CAAC;AACtE,CAAC"}
1
+ {"version":3,"file":"has-own.js","sourceRoot":"","sources":["../../../ts/has-own.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAc1C;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAyB,GAAY,EAAE,IAAU,EAAE,SAA0C;IAClH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,GAAG,CAAE,IAAwB,CAAE,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { errorFromMessageOrError } from "./error-from-message.js";
2
+ /**
3
+ * Assert the given value is not null or undefined.
4
+ * Throws with the given message or error, otherwise.
5
+ */
6
+ export function assertDefined(value, messageOrError) {
7
+ if (value != null) {
8
+ return;
9
+ }
10
+ throw errorFromMessageOrError(messageOrError, RangeError);
11
+ }
12
+ /**
13
+ * Guard to filter out null or undefined values.
14
+ */
15
+ export const isDefined = (obj) => obj != null;
16
+ /**
17
+ * Coerce a value's type to exclude null or undefined, or throw
18
+ * if it actually is null or undefined.
19
+ */
20
+ export const expectDefined = (obj, messageOrError) => {
21
+ assertDefined(obj, messageOrError);
22
+ return obj;
23
+ };
24
+ //# sourceMappingURL=is-defined.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-defined.js","sourceRoot":"","sources":["../../../ts/is-defined.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvF;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC5B,KAAQ,EACR,cAA8B;IAE9B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO;IACR,CAAC;IACD,MAAM,uBAAuB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,GAAM,EAAyB,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC;AAE3E;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC5B,GAAM,EACN,cAA8B,EACb,EAAE;IACnB,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACnC,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC"}
package/esm/ts/is-int.js CHANGED
@@ -1,10 +1,20 @@
1
1
  import { errorFromMessageOrError } from "./error-from-message.js";
2
+ /**
3
+ * Check whether the given value is not just numeric, but is
4
+ * also an integer.
5
+ */
2
6
  export const isInt = (obj) => typeof obj === "number" && !isNaN(obj) && Math.trunc(obj) === obj && obj !== Infinity && obj !== -Infinity;
7
+ /**
8
+ * Throw if the given value is not an integer.
9
+ */
3
10
  export function assertInt(value, messageOrError) {
4
11
  if (!isInt(value)) {
5
12
  throw errorFromMessageOrError(messageOrError, TypeError);
6
13
  }
7
14
  }
15
+ /**
16
+ * Coerce a value's type to a number, throwing if it's not an integer.
17
+ */
8
18
  export const expectInt = (obj, messageOrError) => {
9
19
  assertInt(obj, messageOrError);
10
20
  return obj;
@@ -1 +1 @@
1
- {"version":3,"file":"is-int.js","sourceRoot":"","sources":["../../../ts/is-int.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAY,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;AAEjK,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,cAA8B;IACvE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,uBAAuB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CACxB,GAAY,EACZ,cAA8B,EACrB,EAAE;IACX,SAAS,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC"}
1
+ {"version":3,"file":"is-int.js","sourceRoot":"","sources":["../../../ts/is-int.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvF;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAY,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;AAEjK;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,cAA8B;IACvE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,uBAAuB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACxB,GAAY,EACZ,cAA8B,EACrB,EAAE;IACX,SAAS,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC"}
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Guard to check if the given value is an array where all the
3
+ * items match the given predicate.
4
+ */
1
5
  export const isListOf = (list, predicate) => {
2
6
  return Array.isArray(list) && list.every(predicate);
3
7
  };
@@ -1 +1 @@
1
- {"version":3,"file":"is-list-of.js","sourceRoot":"","sources":["../../../ts/is-list-of.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,CACvB,IAAa,EACb,SAAwE,EAC1D,EAAE;IAChB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACrD,CAAC,CAAC"}
1
+ {"version":3,"file":"is-list-of.js","sourceRoot":"","sources":["../../../ts/is-list-of.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACvB,IAAa,EACb,SAAwE,EAC1D,EAAE;IAChB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACrD,CAAC,CAAC"}
@@ -1,6 +1,14 @@
1
+ /**
2
+ * Guard to check that the given value is defined and object-like.
3
+ */
1
4
  export const isObject = (obj) => {
2
5
  return obj != null && typeof obj === "object";
3
6
  };
7
+ /**
8
+ * Guard to check that the given value is defined, is an object,
9
+ * and seems to be a "plain" object, descending directly from Object.
10
+ * This won't prevent all shenanigans, but is a low-effort check.
11
+ */
4
12
  export const isPlainObject = (obj) => {
5
13
  if (!isObject(obj)) {
6
14
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"is-object.js","sourceRoot":"","sources":["../../../ts/is-object.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAY,EAA8B,EAAE;IACpE,OAAO,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAY,EAA8B,EAAE;IACzE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,CAAC;AACpD,CAAC,CAAC"}
1
+ {"version":3,"file":"is-object.js","sourceRoot":"","sources":["../../../ts/is-object.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAY,EAA8B,EAAE;IACpE,OAAO,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;AAC/C,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAY,EAA8B,EAAE;IACzE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,CAAC;AACpD,CAAC,CAAC"}
@@ -0,0 +1,46 @@
1
+ const defaultKeepIf = (line) => {
2
+ return !line.includes("node:internal")
3
+ && (!line.includes("/node_modules/") || line.includes("@rickosborne/"));
4
+ };
5
+ /**
6
+ * Wrap an Error in a proxy which cleans up the stack trace to be
7
+ * more human-readable. It filters out lines from third-party code,
8
+ * so you can quickly see your own code in the call stack.
9
+ * May optionally include some way of indicating additional lines
10
+ * which should be removed, so a guard function could make itself
11
+ * transparent, making it seem like the caller threw the error.
12
+ * @param err - Some kind of Error.
13
+ * @param removeIf - A matcher to indicate whether a line should be removed (not kept!).
14
+ * Generally, you'll pass in the name of the calling function, calling file, or similar.
15
+ */
16
+ export const scrubStackTrace = (err, removeIf) => {
17
+ let keepIf;
18
+ if (typeof removeIf === "string") {
19
+ keepIf = (line) => !line.includes(removeIf);
20
+ }
21
+ else if (removeIf instanceof RegExp) {
22
+ keepIf = (line) => !removeIf.test(line);
23
+ }
24
+ else if (typeof removeIf === "function") {
25
+ keepIf = (line) => !removeIf(line);
26
+ }
27
+ else {
28
+ keepIf = () => true;
29
+ }
30
+ let scrubbedStack;
31
+ return new Proxy(err, {
32
+ get(target, p) {
33
+ if (p !== "stack") {
34
+ return target[p];
35
+ }
36
+ if (scrubbedStack == null) {
37
+ scrubbedStack = target.stack?.split("\n")
38
+ .filter(defaultKeepIf)
39
+ .filter(keepIf)
40
+ .join("\n");
41
+ }
42
+ return scrubbedStack;
43
+ },
44
+ });
45
+ };
46
+ //# sourceMappingURL=scrub-stack-trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrub-stack-trace.js","sourceRoot":"","sources":["../../../ts/scrub-stack-trace.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,CAAC,IAAY,EAAW,EAAE;IAC/C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;WAClC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC9B,GAAM,EACN,QAA0D,EACtD,EAAE;IACN,IAAI,MAAyB,CAAC;IAC9B,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,QAAQ,YAAY,MAAM,EAAE,CAAC;QACvC,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;SAAM,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC3C,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACP,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;IACrB,CAAC;IACD,IAAI,aAAiC,CAAC;IACtC,OAAO,IAAI,KAAK,CAAI,GAAG,EAAE;QACxB,GAAG,CAAC,MAAS,EAAE,CAAkB;YAChC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;gBACnB,OAAO,MAAM,CAAE,CAAY,CAAE,CAAC;YAC/B,CAAC;YACD,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;gBAC3B,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;qBACvC,MAAM,CAAC,aAAa,CAAC;qBACrB,MAAM,CAAC,MAAM,CAAC;qBACd,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,CAAC;YACD,OAAO,aAAa,CAAC;QACtB,CAAC;KACD,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"root":["../../index.ts","../../ts/assert-defined.ts","../../ts/error-from-message.ts","../../ts/has-array.ts","../../ts/has-number.ts","../../ts/has-own.ts","../../ts/is-int.ts","../../ts/is-list-of.ts","../../ts/is-object.ts","../../ts/is-predicate.ts"],"version":"5.7.2"}
1
+ {"root":["../../index.ts","../../ts/error-from-message.ts","../../ts/has-array.ts","../../ts/has-number.ts","../../ts/has-own.ts","../../ts/is-defined.ts","../../ts/is-int.ts","../../ts/is-list-of.ts","../../ts/is-object.ts","../../ts/is-predicate.ts","../../ts/scrub-stack-trace.ts"],"version":"5.7.2"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "url": "https://rickosborne.org"
5
5
  },
6
6
  "dependencies": {
7
- "@rickosborne/typical": "2024.12.32"
7
+ "@rickosborne/typical": "2024.12.33"
8
8
  },
9
9
  "description": "Rick Osborne's collection of type guards.",
10
10
  "engines": {
@@ -40,5 +40,5 @@
40
40
  },
41
41
  "types": "types/index.d.ts",
42
42
  "typings": "types/index.d.ts",
43
- "version": "2024.12.32"
43
+ "version": "2024.12.33"
44
44
  }
package/types/index.d.ts CHANGED
@@ -1,10 +1,11 @@
1
- export * from "./ts/assert-defined.js";
2
1
  export * from "./ts/error-from-message.js";
3
2
  export * from "./ts/has-array.js";
4
3
  export * from "./ts/has-number.js";
5
4
  export * from "./ts/has-own.js";
5
+ export * from "./ts/is-defined.js";
6
6
  export * from "./ts/is-int.js";
7
7
  export * from "./ts/is-list-of.js";
8
8
  export * from "./ts/is-object.js";
9
9
  export * from "./ts/is-predicate.js";
10
+ export * from "./ts/scrub-stack-trace.js";
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC"}
package/types/index.js CHANGED
@@ -14,13 +14,14 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./ts/assert-defined.js"), exports);
18
17
  __exportStar(require("./ts/error-from-message.js"), exports);
19
18
  __exportStar(require("./ts/has-array.js"), exports);
20
19
  __exportStar(require("./ts/has-number.js"), exports);
21
20
  __exportStar(require("./ts/has-own.js"), exports);
21
+ __exportStar(require("./ts/is-defined.js"), exports);
22
22
  __exportStar(require("./ts/is-int.js"), exports);
23
23
  __exportStar(require("./ts/is-list-of.js"), exports);
24
24
  __exportStar(require("./ts/is-object.js"), exports);
25
25
  __exportStar(require("./ts/is-predicate.js"), exports);
26
+ __exportStar(require("./ts/scrub-stack-trace.js"), exports);
26
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC;AACvC,6DAA2C;AAC3C,oDAAkC;AAClC,qDAAmC;AACnC,kDAAgC;AAChC,iDAA+B;AAC/B,qDAAmC;AACnC,oDAAkC;AAClC,uDAAqC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C;AAC3C,oDAAkC;AAClC,qDAAmC;AACnC,kDAAgC;AAChC,qDAAmC;AACnC,iDAA+B;AAC/B,qDAAmC;AACnC,oDAAkC;AAClC,uDAAqC;AACrC,4DAA0C"}
@@ -1 +1 @@
1
- {"version":3,"file":"error-from-message.d.ts","sourceRoot":"","sources":["../../../ts/error-from-message.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;AAEvE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,mBACnB,cAAc,uBACV,CAAC,KAAK,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,KAClD,KAcF,CAAC"}
1
+ {"version":3,"file":"error-from-message.d.ts","sourceRoot":"","sources":["../../../ts/error-from-message.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;AAEvE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,mBACnB,cAAc,uBACV,CAAC,KAAK,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,KAClD,KAcF,CAAC"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.errorFromMessageOrError = void 0;
4
+ const scrub_stack_trace_js_1 = require("./scrub-stack-trace.js");
4
5
  /**
5
6
  * Helper for guards which expect text or an error, or
6
7
  * can generate one when needed.
@@ -20,7 +21,7 @@ const errorFromMessageOrError = (messageOrError, defaultConstructor = Error) =>
20
21
  else {
21
22
  error = stringOrError;
22
23
  }
23
- return error;
24
+ return (0, scrub_stack_trace_js_1.scrubStackTrace)(error, " at errorFromMessageOrError ");
24
25
  };
25
26
  exports.errorFromMessageOrError = errorFromMessageOrError;
26
27
  //# sourceMappingURL=error-from-message.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-from-message.js","sourceRoot":"","sources":["../../../ts/error-from-message.ts"],"names":[],"mappings":";;;AAKA;;;GAGG;AACI,MAAM,uBAAuB,GAAG,CACtC,cAA8B,EAC9B,qBAAuD,KAAK,EACpD,EAAE;IACV,IAAI,aAA6B,CAAC;IAClC,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;QAC1C,aAAa,GAAG,cAAc,EAAE,CAAC;IAClC,CAAC;SAAM,CAAC;QACP,aAAa,GAAG,cAAc,CAAC;IAChC,CAAC;IACD,IAAI,KAAY,CAAC;IACjB,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACvC,KAAK,GAAG,IAAI,kBAAkB,CAAC,YAAa,aAAc,EAAE,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACP,KAAK,GAAG,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAjBW,QAAA,uBAAuB,2BAiBlC"}
1
+ {"version":3,"file":"error-from-message.js","sourceRoot":"","sources":["../../../ts/error-from-message.ts"],"names":[],"mappings":";;;AAAA,iEAAyD;AAOzD;;;GAGG;AACI,MAAM,uBAAuB,GAAG,CACtC,cAA8B,EAC9B,qBAAuD,KAAK,EACpD,EAAE;IACV,IAAI,aAA6B,CAAC;IAClC,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;QAC1C,aAAa,GAAG,cAAc,EAAE,CAAC;IAClC,CAAC;SAAM,CAAC;QACP,aAAa,GAAG,cAAc,CAAC;IAChC,CAAC;IACD,IAAI,KAAY,CAAC;IACjB,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACvC,KAAK,GAAG,IAAI,kBAAkB,CAAC,YAAa,aAAc,EAAE,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACP,KAAK,GAAG,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,IAAA,sCAAe,EAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;AAC/D,CAAC,CAAC;AAjBW,QAAA,uBAAuB,2BAiBlC"}
@@ -1,2 +1,6 @@
1
+ /**
2
+ * Guard for whether an object has a property with the given name
3
+ * and a numeric value.
4
+ */
1
5
  export declare const hasNumber: <Name extends string>(obj: unknown, name: Name) => obj is { [k in Name]: string; };
2
6
  //# sourceMappingURL=has-number.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"has-number.d.ts","sourceRoot":"","sources":["../../../ts/has-number.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,GAAI,IAAI,SAAS,MAAM,OAAO,OAAO,QAAQ,IAAI,KAAG,GAAG,IAAI,GAAE,CAAC,IAAI,IAAI,GAAG,MAAM,GAEpG,CAAC"}
1
+ {"version":3,"file":"has-number.d.ts","sourceRoot":"","sources":["../../../ts/has-number.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,IAAI,SAAS,MAAM,OAAO,OAAO,QAAQ,IAAI,KAAG,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,MAAM,GAErG,CAAC"}
@@ -2,6 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasNumber = void 0;
4
4
  const has_own_js_1 = require("./has-own.js");
5
+ /**
6
+ * Guard for whether an object has a property with the given name
7
+ * and a numeric value.
8
+ */
5
9
  const hasNumber = (obj, name) => {
6
10
  return (0, has_own_js_1.hasOwn)(obj, name) && typeof obj[name] === "number";
7
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"has-number.js","sourceRoot":"","sources":["../../../ts/has-number.ts"],"names":[],"mappings":";;;AAAA,6CAAsC;AAE/B,MAAM,SAAS,GAAG,CAAsB,GAAY,EAAE,IAAU,EAAgC,EAAE;IACxG,OAAO,IAAA,mBAAM,EAAC,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC;AAC3D,CAAC,CAAC;AAFW,QAAA,SAAS,aAEpB"}
1
+ {"version":3,"file":"has-number.js","sourceRoot":"","sources":["../../../ts/has-number.ts"],"names":[],"mappings":";;;AAAA,6CAAsC;AAEtC;;;GAGG;AACI,MAAM,SAAS,GAAG,CAAsB,GAAY,EAAE,IAAU,EAAkC,EAAE;IAC1G,OAAO,IAAA,mBAAM,EAAC,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,GAAG,CAAE,IAAI,CAAE,KAAK,QAAQ,CAAC;AAC7D,CAAC,CAAC;AAFW,QAAA,SAAS,aAEpB"}
@@ -1,6 +1,16 @@
1
+ /**
2
+ * Guard for whether the given value is an object with a property
3
+ * with the given name.
4
+ * This variant does not check the value, only that the property exists.
5
+ */
1
6
  export declare function hasOwn<Name extends string>(obj: unknown, name: Name): obj is {
2
7
  [K in Name]: unknown;
3
8
  };
9
+ /**
10
+ * Guard for whether the given value is an object with a property
11
+ * with the given name.
12
+ * This variant checks the value against the given predicate.
13
+ */
4
14
  export declare function hasOwn<Name extends string, T>(obj: unknown, name: Name, predicate: (value: unknown) => value is T): obj is {
5
15
  [K in Name]: T;
6
16
  };
@@ -1 +1 @@
1
- {"version":3,"file":"has-own.d.ts","sourceRoot":"","sources":["../../../ts/has-own.ts"],"names":[],"mappings":"AAEA,wBAAgB,MAAM,CAAC,IAAI,SAAS,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,GAAG,IAAI;KAAE,CAAC,IAAI,IAAI,GAAG,OAAO;CAAC,CAAC;AACrG,wBAAgB,MAAM,CAAC,IAAI,SAAS,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI;KAAE,CAAC,IAAI,IAAI,GAAG,CAAC;CAAC,CAAC"}
1
+ {"version":3,"file":"has-own.d.ts","sourceRoot":"","sources":["../../../ts/has-own.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,IAAI,SAAS,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,GAAG,IAAI;KAAG,CAAC,IAAI,IAAI,GAAG,OAAO;CAAE,CAAC;AACvG;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,IAAI,SAAS,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI;KAAG,CAAC,IAAI,IAAI,GAAG,CAAC;CAAE,CAAC"}
@@ -2,6 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.hasOwn = hasOwn;
4
4
  const is_object_js_1 = require("./is-object.js");
5
+ /**
6
+ * Guard for whether the given value is an object with a property
7
+ * with the given name.
8
+ */
5
9
  function hasOwn(obj, name, predicate) {
6
10
  if (!(0, is_object_js_1.isObject)(obj) || !Object.hasOwn(obj, name)) {
7
11
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"has-own.js","sourceRoot":"","sources":["../../../ts/has-own.ts"],"names":[],"mappings":";;AAIA,wBAKC;AATD,iDAA0C;AAI1C,SAAgB,MAAM,CAAyB,GAAY,EAAE,IAAU,EAAE,SAA0C;IAClH,IAAI,CAAC,IAAA,uBAAQ,EAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,IAAwB,CAAC,CAAC,CAAC;AACtE,CAAC"}
1
+ {"version":3,"file":"has-own.js","sourceRoot":"","sources":["../../../ts/has-own.ts"],"names":[],"mappings":";;AAkBA,wBAKC;AAvBD,iDAA0C;AAc1C;;;GAGG;AACH,SAAgB,MAAM,CAAyB,GAAY,EAAE,IAAU,EAAE,SAA0C;IAClH,IAAI,CAAC,IAAA,uBAAQ,EAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,SAAS,IAAI,IAAI,IAAI,SAAS,CAAC,GAAG,CAAE,IAAwB,CAAE,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { type MessageOrError } from "./error-from-message.js";
2
+ /**
3
+ * Assert the given value is not null or undefined.
4
+ * Throws with the given message or error, otherwise.
5
+ */
6
+ export declare function assertDefined<T>(value: T, messageOrError: MessageOrError): asserts value is NonNullable<T>;
7
+ /**
8
+ * Guard to filter out null or undefined values.
9
+ */
10
+ export declare const isDefined: <T>(obj: T) => obj is NonNullable<T>;
11
+ /**
12
+ * Coerce a value's type to exclude null or undefined, or throw
13
+ * if it actually is null or undefined.
14
+ */
15
+ export declare const expectDefined: <T>(obj: T, messageOrError: MessageOrError) => NonNullable<T>;
16
+ //# sourceMappingURL=is-defined.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-defined.d.ts","sourceRoot":"","sources":["../../../ts/is-defined.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA2B,MAAM,yBAAyB,CAAC;AAEvF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC9B,KAAK,EAAE,CAAC,EACR,cAAc,EAAE,cAAc,GAC5B,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAKjC;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,OAAO,CAAC,KAAG,GAAG,IAAI,WAAW,CAAC,CAAC,CAAgB,CAAC;AAE3E;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,OACzB,CAAC,kBACU,cAAc,KAC5B,WAAW,CAAC,CAAC,CAGf,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.expectDefined = exports.isDefined = void 0;
4
+ exports.assertDefined = assertDefined;
5
+ const error_from_message_js_1 = require("./error-from-message.js");
6
+ /**
7
+ * Assert the given value is not null or undefined.
8
+ * Throws with the given message or error, otherwise.
9
+ */
10
+ function assertDefined(value, messageOrError) {
11
+ if (value != null) {
12
+ return;
13
+ }
14
+ throw (0, error_from_message_js_1.errorFromMessageOrError)(messageOrError, RangeError);
15
+ }
16
+ /**
17
+ * Guard to filter out null or undefined values.
18
+ */
19
+ const isDefined = (obj) => obj != null;
20
+ exports.isDefined = isDefined;
21
+ /**
22
+ * Coerce a value's type to exclude null or undefined, or throw
23
+ * if it actually is null or undefined.
24
+ */
25
+ const expectDefined = (obj, messageOrError) => {
26
+ assertDefined(obj, messageOrError);
27
+ return obj;
28
+ };
29
+ exports.expectDefined = expectDefined;
30
+ //# sourceMappingURL=is-defined.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-defined.js","sourceRoot":"","sources":["../../../ts/is-defined.ts"],"names":[],"mappings":";;;AAMA,sCAQC;AAdD,mEAAuF;AAEvF;;;GAGG;AACH,SAAgB,aAAa,CAC5B,KAAQ,EACR,cAA8B;IAE9B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO;IACR,CAAC;IACD,MAAM,IAAA,+CAAuB,EAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACI,MAAM,SAAS,GAAG,CAAI,GAAM,EAAyB,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC;AAA9D,QAAA,SAAS,aAAqD;AAE3E;;;GAGG;AACI,MAAM,aAAa,GAAG,CAC5B,GAAM,EACN,cAA8B,EACb,EAAE;IACnB,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACnC,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AANW,QAAA,aAAa,iBAMxB"}
@@ -1,5 +1,15 @@
1
1
  import { type MessageOrError } from "./error-from-message.js";
2
+ /**
3
+ * Check whether the given value is not just numeric, but is
4
+ * also an integer.
5
+ */
2
6
  export declare const isInt: (obj: unknown) => obj is number;
7
+ /**
8
+ * Throw if the given value is not an integer.
9
+ */
3
10
  export declare function assertInt(value: unknown, messageOrError: MessageOrError): asserts value is number;
11
+ /**
12
+ * Coerce a value's type to a number, throwing if it's not an integer.
13
+ */
4
14
  export declare const expectInt: (obj: unknown, messageOrError: MessageOrError) => number;
5
15
  //# sourceMappingURL=is-int.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"is-int.d.ts","sourceRoot":"","sources":["../../../ts/is-int.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA2B,MAAM,yBAAyB,CAAC;AAEvF,eAAO,MAAM,KAAK,QAAS,OAAO,KAAG,GAAG,IAAI,MAAoH,CAAC;AAEjK,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAIjG;AAED,eAAO,MAAM,SAAS,QAChB,OAAO,kBACI,cAAc,KAC5B,MAGF,CAAC"}
1
+ {"version":3,"file":"is-int.d.ts","sourceRoot":"","sources":["../../../ts/is-int.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA2B,MAAM,yBAAyB,CAAC;AAEvF;;;GAGG;AACH,eAAO,MAAM,KAAK,QAAS,OAAO,KAAG,GAAG,IAAI,MAAoH,CAAC;AAEjK;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAIjG;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,QAChB,OAAO,kBACI,cAAc,KAC5B,MAGF,CAAC"}
@@ -3,13 +3,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.expectInt = exports.isInt = void 0;
4
4
  exports.assertInt = assertInt;
5
5
  const error_from_message_js_1 = require("./error-from-message.js");
6
+ /**
7
+ * Check whether the given value is not just numeric, but is
8
+ * also an integer.
9
+ */
6
10
  const isInt = (obj) => typeof obj === "number" && !isNaN(obj) && Math.trunc(obj) === obj && obj !== Infinity && obj !== -Infinity;
7
11
  exports.isInt = isInt;
12
+ /**
13
+ * Throw if the given value is not an integer.
14
+ */
8
15
  function assertInt(value, messageOrError) {
9
16
  if (!(0, exports.isInt)(value)) {
10
17
  throw (0, error_from_message_js_1.errorFromMessageOrError)(messageOrError, TypeError);
11
18
  }
12
19
  }
20
+ /**
21
+ * Coerce a value's type to a number, throwing if it's not an integer.
22
+ */
13
23
  const expectInt = (obj, messageOrError) => {
14
24
  assertInt(obj, messageOrError);
15
25
  return obj;
@@ -1 +1 @@
1
- {"version":3,"file":"is-int.js","sourceRoot":"","sources":["../../../ts/is-int.ts"],"names":[],"mappings":";;;AAIA,8BAIC;AARD,mEAAuF;AAEhF,MAAM,KAAK,GAAG,CAAC,GAAY,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;AAApJ,QAAA,KAAK,SAA+I;AAEjK,SAAgB,SAAS,CAAC,KAAc,EAAE,cAA8B;IACvE,IAAI,CAAC,IAAA,aAAK,EAAC,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAA,+CAAuB,EAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAEM,MAAM,SAAS,GAAG,CACxB,GAAY,EACZ,cAA8B,EACrB,EAAE;IACX,SAAS,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AANW,QAAA,SAAS,aAMpB"}
1
+ {"version":3,"file":"is-int.js","sourceRoot":"","sources":["../../../ts/is-int.ts"],"names":[],"mappings":";;;AAWA,8BAIC;AAfD,mEAAuF;AAEvF;;;GAGG;AACI,MAAM,KAAK,GAAG,CAAC,GAAY,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;AAApJ,QAAA,KAAK,SAA+I;AAEjK;;GAEG;AACH,SAAgB,SAAS,CAAC,KAAc,EAAE,cAA8B;IACvE,IAAI,CAAC,IAAA,aAAK,EAAC,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAA,+CAAuB,EAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC1D,CAAC;AACF,CAAC;AAED;;GAEG;AACI,MAAM,SAAS,GAAG,CACxB,GAAY,EACZ,cAA8B,EACrB,EAAE;IACX,SAAS,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AANW,QAAA,SAAS,aAMpB"}
@@ -1,2 +1,6 @@
1
+ /**
2
+ * Guard to check if the given value is an array where all the
3
+ * items match the given predicate.
4
+ */
1
5
  export declare const isListOf: <T>(list: unknown, predicate: (item: unknown, index: number, items: unknown[]) => item is T) => list is T[];
2
6
  //# sourceMappingURL=is-list-of.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"is-list-of.d.ts","sourceRoot":"","sources":["../../../ts/is-list-of.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,GAAI,CAAC,QACnB,OAAO,aACF,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,KACtE,IAAI,IAAI,CAAC,EAEX,CAAC"}
1
+ {"version":3,"file":"is-list-of.d.ts","sourceRoot":"","sources":["../../../ts/is-list-of.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,QACnB,OAAO,aACF,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,KACtE,IAAI,IAAI,CAAC,EAEX,CAAC"}
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isListOf = void 0;
4
+ /**
5
+ * Guard to check if the given value is an array where all the
6
+ * items match the given predicate.
7
+ */
4
8
  const isListOf = (list, predicate) => {
5
9
  return Array.isArray(list) && list.every(predicate);
6
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"is-list-of.js","sourceRoot":"","sources":["../../../ts/is-list-of.ts"],"names":[],"mappings":";;;AAAO,MAAM,QAAQ,GAAG,CACvB,IAAa,EACb,SAAwE,EAC1D,EAAE;IAChB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACrD,CAAC,CAAC;AALW,QAAA,QAAQ,YAKnB"}
1
+ {"version":3,"file":"is-list-of.js","sourceRoot":"","sources":["../../../ts/is-list-of.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACI,MAAM,QAAQ,GAAG,CACvB,IAAa,EACb,SAAwE,EAC1D,EAAE;IAChB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACrD,CAAC,CAAC;AALW,QAAA,QAAQ,YAKnB"}
@@ -1,3 +1,11 @@
1
+ /**
2
+ * Guard to check that the given value is defined and object-like.
3
+ */
1
4
  export declare const isObject: (obj: unknown) => obj is NonNullable<object>;
5
+ /**
6
+ * Guard to check that the given value is defined, is an object,
7
+ * and seems to be a "plain" object, descending directly from Object.
8
+ * This won't prevent all shenanigans, but is a low-effort check.
9
+ */
2
10
  export declare const isPlainObject: (obj: unknown) => obj is Record<never, never>;
3
11
  //# sourceMappingURL=is-object.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"is-object.d.ts","sourceRoot":"","sources":["../../../ts/is-object.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,QAAS,OAAO,KAAG,GAAG,IAAI,WAAW,CAAC,MAAM,CAEhE,CAAC;AAEF,eAAO,MAAM,aAAa,QAAS,OAAO,KAAG,GAAG,IAAI,MAAM,CAAC,KAAK,EAAC,KAAK,CAMrE,CAAC"}
1
+ {"version":3,"file":"is-object.d.ts","sourceRoot":"","sources":["../../../ts/is-object.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,QAAQ,QAAS,OAAO,KAAG,GAAG,IAAI,WAAW,CAAC,MAAM,CAEhE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAS,OAAO,KAAG,GAAG,IAAI,MAAM,CAAC,KAAK,EAAC,KAAK,CAMrE,CAAC"}
@@ -1,10 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isPlainObject = exports.isObject = void 0;
4
+ /**
5
+ * Guard to check that the given value is defined and object-like.
6
+ */
4
7
  const isObject = (obj) => {
5
8
  return obj != null && typeof obj === "object";
6
9
  };
7
10
  exports.isObject = isObject;
11
+ /**
12
+ * Guard to check that the given value is defined, is an object,
13
+ * and seems to be a "plain" object, descending directly from Object.
14
+ * This won't prevent all shenanigans, but is a low-effort check.
15
+ */
8
16
  const isPlainObject = (obj) => {
9
17
  if (!(0, exports.isObject)(obj)) {
10
18
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"is-object.js","sourceRoot":"","sources":["../../../ts/is-object.ts"],"names":[],"mappings":";;;AAAO,MAAM,QAAQ,GAAG,CAAC,GAAY,EAA8B,EAAE;IACpE,OAAO,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;AAC/C,CAAC,CAAC;AAFW,QAAA,QAAQ,YAEnB;AAEK,MAAM,aAAa,GAAG,CAAC,GAAY,EAA8B,EAAE;IACzE,IAAI,CAAC,IAAA,gBAAQ,EAAC,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,CAAC;AACpD,CAAC,CAAC;AANW,QAAA,aAAa,iBAMxB"}
1
+ {"version":3,"file":"is-object.js","sourceRoot":"","sources":["../../../ts/is-object.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACI,MAAM,QAAQ,GAAG,CAAC,GAAY,EAA8B,EAAE;IACpE,OAAO,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;AAC/C,CAAC,CAAC;AAFW,QAAA,QAAQ,YAEnB;AAEF;;;;GAIG;AACI,MAAM,aAAa,GAAG,CAAC,GAAY,EAA8B,EAAE;IACzE,IAAI,CAAC,IAAA,gBAAQ,EAAC,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,CAAC;AACpD,CAAC,CAAC;AANW,QAAA,aAAa,iBAMxB"}
@@ -0,0 +1,14 @@
1
+ import type { Predicate } from "@rickosborne/typical";
2
+ /**
3
+ * Wrap an Error in a proxy which cleans up the stack trace to be
4
+ * more human-readable. It filters out lines from third-party code,
5
+ * so you can quickly see your own code in the call stack.
6
+ * May optionally include some way of indicating additional lines
7
+ * which should be removed, so a guard function could make itself
8
+ * transparent, making it seem like the caller threw the error.
9
+ * @param err - Some kind of Error.
10
+ * @param removeIf - A matcher to indicate whether a line should be removed (not kept!).
11
+ * Generally, you'll pass in the name of the calling function, calling file, or similar.
12
+ */
13
+ export declare const scrubStackTrace: <E extends Error>(err: E, removeIf?: Predicate<string> | RegExp | string | undefined) => E;
14
+ //# sourceMappingURL=scrub-stack-trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrub-stack-trace.d.ts","sourceRoot":"","sources":["../../../ts/scrub-stack-trace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAOtD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,KAAK,OACzC,CAAC,aACK,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,KACxD,CA0BF,CAAC"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scrubStackTrace = void 0;
4
+ const defaultKeepIf = (line) => {
5
+ return !line.includes("node:internal")
6
+ && (!line.includes("/node_modules/") || line.includes("@rickosborne/"));
7
+ };
8
+ /**
9
+ * Wrap an Error in a proxy which cleans up the stack trace to be
10
+ * more human-readable. It filters out lines from third-party code,
11
+ * so you can quickly see your own code in the call stack.
12
+ * May optionally include some way of indicating additional lines
13
+ * which should be removed, so a guard function could make itself
14
+ * transparent, making it seem like the caller threw the error.
15
+ * @param err - Some kind of Error.
16
+ * @param removeIf - A matcher to indicate whether a line should be removed (not kept!).
17
+ * Generally, you'll pass in the name of the calling function, calling file, or similar.
18
+ */
19
+ const scrubStackTrace = (err, removeIf) => {
20
+ let keepIf;
21
+ if (typeof removeIf === "string") {
22
+ keepIf = (line) => !line.includes(removeIf);
23
+ }
24
+ else if (removeIf instanceof RegExp) {
25
+ keepIf = (line) => !removeIf.test(line);
26
+ }
27
+ else if (typeof removeIf === "function") {
28
+ keepIf = (line) => !removeIf(line);
29
+ }
30
+ else {
31
+ keepIf = () => true;
32
+ }
33
+ let scrubbedStack;
34
+ return new Proxy(err, {
35
+ get(target, p) {
36
+ if (p !== "stack") {
37
+ return target[p];
38
+ }
39
+ if (scrubbedStack == null) {
40
+ scrubbedStack = target.stack?.split("\n")
41
+ .filter(defaultKeepIf)
42
+ .filter(keepIf)
43
+ .join("\n");
44
+ }
45
+ return scrubbedStack;
46
+ },
47
+ });
48
+ };
49
+ exports.scrubStackTrace = scrubStackTrace;
50
+ //# sourceMappingURL=scrub-stack-trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrub-stack-trace.js","sourceRoot":"","sources":["../../../ts/scrub-stack-trace.ts"],"names":[],"mappings":";;;AAEA,MAAM,aAAa,GAAG,CAAC,IAAY,EAAW,EAAE;IAC/C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;WAClC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACI,MAAM,eAAe,GAAG,CAC9B,GAAM,EACN,QAA0D,EACtD,EAAE;IACN,IAAI,MAAyB,CAAC;IAC9B,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,QAAQ,YAAY,MAAM,EAAE,CAAC;QACvC,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;SAAM,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC3C,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACP,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;IACrB,CAAC;IACD,IAAI,aAAiC,CAAC;IACtC,OAAO,IAAI,KAAK,CAAI,GAAG,EAAE;QACxB,GAAG,CAAC,MAAS,EAAE,CAAkB;YAChC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;gBACnB,OAAO,MAAM,CAAE,CAAY,CAAE,CAAC;YAC/B,CAAC;YACD,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;gBAC3B,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;qBACvC,MAAM,CAAC,aAAa,CAAC;qBACrB,MAAM,CAAC,MAAM,CAAC;qBACd,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,CAAC;YACD,OAAO,aAAa,CAAC;QACtB,CAAC;KACD,CAAC,CAAC;AACJ,CAAC,CAAC;AA7BW,QAAA,eAAe,mBA6B1B"}
@@ -1 +1 @@
1
- {"root":["../../index.ts","../../ts/assert-defined.ts","../../ts/error-from-message.ts","../../ts/has-array.ts","../../ts/has-number.ts","../../ts/has-own.ts","../../ts/is-int.ts","../../ts/is-list-of.ts","../../ts/is-object.ts","../../ts/is-predicate.ts"],"version":"5.7.2"}
1
+ {"root":["../../index.ts","../../ts/error-from-message.ts","../../ts/has-array.ts","../../ts/has-number.ts","../../ts/has-own.ts","../../ts/is-defined.ts","../../ts/is-int.ts","../../ts/is-list-of.ts","../../ts/is-object.ts","../../ts/is-predicate.ts","../../ts/scrub-stack-trace.ts"],"version":"5.7.2"}
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.assertDefined = assertDefined;
4
- const error_from_message_js_1 = require("./error-from-message.js");
5
- function assertDefined(value, messageOrError) {
6
- if (value != null) {
7
- return;
8
- }
9
- throw (0, error_from_message_js_1.errorFromMessageOrError)(messageOrError, RangeError);
10
- }
11
- //# sourceMappingURL=assert-defined.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assert-defined.js","sourceRoot":"","sources":["../../../ts/assert-defined.ts"],"names":[],"mappings":";;AAEA,sCAQC;AAVD,mEAAuF;AAEvF,SAAgB,aAAa,CAC5B,KAAQ,EACR,cAA8B;IAE9B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO;IACR,CAAC;IACD,MAAM,IAAA,+CAAuB,EAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AAC3D,CAAC"}
@@ -1,8 +0,0 @@
1
- import { errorFromMessageOrError } from "./error-from-message.js";
2
- export function assertDefined(value, messageOrError) {
3
- if (value != null) {
4
- return;
5
- }
6
- throw errorFromMessageOrError(messageOrError, RangeError);
7
- }
8
- //# sourceMappingURL=assert-defined.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assert-defined.js","sourceRoot":"","sources":["../../../ts/assert-defined.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvF,MAAM,UAAU,aAAa,CAC5B,KAAQ,EACR,cAA8B;IAE9B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO;IACR,CAAC;IACD,MAAM,uBAAuB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AAC3D,CAAC"}
@@ -1,3 +0,0 @@
1
- import { type MessageOrError } from "./error-from-message.js";
2
- export declare function assertDefined<T>(value: T, messageOrError: MessageOrError): asserts value is NonNullable<T>;
3
- //# sourceMappingURL=assert-defined.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assert-defined.d.ts","sourceRoot":"","sources":["../../../ts/assert-defined.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA2B,MAAM,yBAAyB,CAAC;AAEvF,wBAAgB,aAAa,CAAC,CAAC,EAC9B,KAAK,EAAE,CAAC,EACR,cAAc,EAAE,cAAc,GAC5B,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAKjC"}
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.assertDefined = assertDefined;
4
- const error_from_message_js_1 = require("./error-from-message.js");
5
- function assertDefined(value, messageOrError) {
6
- if (value != null) {
7
- return;
8
- }
9
- throw (0, error_from_message_js_1.errorFromMessageOrError)(messageOrError, RangeError);
10
- }
11
- //# sourceMappingURL=assert-defined.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assert-defined.js","sourceRoot":"","sources":["../../../ts/assert-defined.ts"],"names":[],"mappings":";;AAEA,sCAQC;AAVD,mEAAuF;AAEvF,SAAgB,aAAa,CAC5B,KAAQ,EACR,cAA8B;IAE9B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO;IACR,CAAC;IACD,MAAM,IAAA,+CAAuB,EAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AAC3D,CAAC"}