bupkis 0.2.0 → 0.4.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 (187) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +35 -11
  3. package/dist/commonjs/assertion/assertion-async.d.ts +2 -1
  4. package/dist/commonjs/assertion/assertion-async.d.ts.map +1 -1
  5. package/dist/commonjs/assertion/assertion-async.js +84 -2
  6. package/dist/commonjs/assertion/assertion-async.js.map +1 -1
  7. package/dist/commonjs/assertion/assertion-sync.d.ts +1 -1
  8. package/dist/commonjs/assertion/assertion-sync.d.ts.map +1 -1
  9. package/dist/commonjs/assertion/assertion-sync.js +5 -1
  10. package/dist/commonjs/assertion/assertion-sync.js.map +1 -1
  11. package/dist/commonjs/assertion/assertion-types.d.ts +6 -2
  12. package/dist/commonjs/assertion/assertion-types.d.ts.map +1 -1
  13. package/dist/commonjs/assertion/assertion.d.ts +1 -1
  14. package/dist/commonjs/assertion/assertion.d.ts.map +1 -1
  15. package/dist/commonjs/assertion/assertion.js +1 -14
  16. package/dist/commonjs/assertion/assertion.js.map +1 -1
  17. package/dist/commonjs/assertion/impl/async.d.ts +122 -21
  18. package/dist/commonjs/assertion/impl/async.d.ts.map +1 -1
  19. package/dist/commonjs/assertion/impl/async.js +118 -90
  20. package/dist/commonjs/assertion/impl/async.js.map +1 -1
  21. package/dist/commonjs/assertion/impl/callback.d.ts +104 -0
  22. package/dist/commonjs/assertion/impl/callback.d.ts.map +1 -0
  23. package/dist/commonjs/assertion/impl/callback.js +694 -0
  24. package/dist/commonjs/assertion/impl/callback.js.map +1 -0
  25. package/dist/commonjs/assertion/impl/index.d.ts +1 -1
  26. package/dist/commonjs/assertion/impl/index.d.ts.map +1 -1
  27. package/dist/commonjs/assertion/impl/index.js.map +1 -1
  28. package/dist/commonjs/assertion/impl/sync-basic.d.ts.map +1 -1
  29. package/dist/commonjs/assertion/impl/sync-basic.js +1 -1
  30. package/dist/commonjs/assertion/impl/sync-basic.js.map +1 -1
  31. package/dist/commonjs/assertion/impl/sync-collection.d.ts +1 -1
  32. package/dist/commonjs/assertion/impl/sync-collection.js +3 -3
  33. package/dist/commonjs/assertion/impl/sync-collection.js.map +1 -1
  34. package/dist/commonjs/assertion/impl/sync-esoteric.js +1 -1
  35. package/dist/commonjs/assertion/impl/sync-esoteric.js.map +1 -1
  36. package/dist/commonjs/assertion/impl/sync-parametric.d.ts +22 -28
  37. package/dist/commonjs/assertion/impl/sync-parametric.d.ts.map +1 -1
  38. package/dist/commonjs/assertion/impl/sync-parametric.js +35 -50
  39. package/dist/commonjs/assertion/impl/sync-parametric.js.map +1 -1
  40. package/dist/commonjs/assertion/impl/sync.d.ts +68 -30
  41. package/dist/commonjs/assertion/impl/sync.d.ts.map +1 -1
  42. package/dist/commonjs/assertion/impl/sync.js +4 -1
  43. package/dist/commonjs/assertion/impl/sync.js.map +1 -1
  44. package/dist/commonjs/bootstrap.d.ts +147 -52
  45. package/dist/commonjs/bootstrap.d.ts.map +1 -1
  46. package/dist/commonjs/bootstrap.js +2 -3
  47. package/dist/commonjs/bootstrap.js.map +1 -1
  48. package/dist/commonjs/constant.d.ts +1 -1
  49. package/dist/commonjs/constant.d.ts.map +1 -1
  50. package/dist/commonjs/constant.js +8 -1
  51. package/dist/commonjs/constant.js.map +1 -1
  52. package/dist/commonjs/error.d.ts +22 -2
  53. package/dist/commonjs/error.d.ts.map +1 -1
  54. package/dist/commonjs/error.js +44 -4
  55. package/dist/commonjs/error.js.map +1 -1
  56. package/dist/commonjs/expect.d.ts.map +1 -1
  57. package/dist/commonjs/expect.js +1 -1
  58. package/dist/commonjs/expect.js.map +1 -1
  59. package/dist/commonjs/guards.d.ts +96 -5
  60. package/dist/commonjs/guards.d.ts.map +1 -1
  61. package/dist/commonjs/guards.js +104 -25
  62. package/dist/commonjs/guards.js.map +1 -1
  63. package/dist/commonjs/index.d.ts +146 -51
  64. package/dist/commonjs/index.d.ts.map +1 -1
  65. package/dist/commonjs/index.js.map +1 -1
  66. package/dist/commonjs/schema.d.ts +84 -18
  67. package/dist/commonjs/schema.d.ts.map +1 -1
  68. package/dist/commonjs/schema.js +107 -22
  69. package/dist/commonjs/schema.js.map +1 -1
  70. package/dist/commonjs/types.d.ts +171 -9
  71. package/dist/commonjs/types.d.ts.map +1 -1
  72. package/dist/commonjs/use.d.ts.map +1 -1
  73. package/dist/commonjs/use.js +15 -1
  74. package/dist/commonjs/use.js.map +1 -1
  75. package/dist/commonjs/util.d.ts +66 -50
  76. package/dist/commonjs/util.d.ts.map +1 -1
  77. package/dist/commonjs/util.js +169 -156
  78. package/dist/commonjs/util.js.map +1 -1
  79. package/dist/commonjs/value-to-schema.d.ts +122 -0
  80. package/dist/commonjs/value-to-schema.d.ts.map +1 -0
  81. package/dist/commonjs/value-to-schema.js +329 -0
  82. package/dist/commonjs/value-to-schema.js.map +1 -0
  83. package/dist/esm/assertion/assertion-async.d.ts +2 -1
  84. package/dist/esm/assertion/assertion-async.d.ts.map +1 -1
  85. package/dist/esm/assertion/assertion-async.js +85 -3
  86. package/dist/esm/assertion/assertion-async.js.map +1 -1
  87. package/dist/esm/assertion/assertion-sync.d.ts +1 -1
  88. package/dist/esm/assertion/assertion-sync.d.ts.map +1 -1
  89. package/dist/esm/assertion/assertion-sync.js +6 -2
  90. package/dist/esm/assertion/assertion-sync.js.map +1 -1
  91. package/dist/esm/assertion/assertion-types.d.ts +6 -2
  92. package/dist/esm/assertion/assertion-types.d.ts.map +1 -1
  93. package/dist/esm/assertion/assertion.d.ts +1 -1
  94. package/dist/esm/assertion/assertion.d.ts.map +1 -1
  95. package/dist/esm/assertion/assertion.js +1 -14
  96. package/dist/esm/assertion/assertion.js.map +1 -1
  97. package/dist/esm/assertion/impl/async.d.ts +122 -21
  98. package/dist/esm/assertion/impl/async.d.ts.map +1 -1
  99. package/dist/esm/assertion/impl/async.js +118 -90
  100. package/dist/esm/assertion/impl/async.js.map +1 -1
  101. package/dist/esm/assertion/impl/callback.d.ts +104 -0
  102. package/dist/esm/assertion/impl/callback.d.ts.map +1 -0
  103. package/dist/esm/assertion/impl/callback.js +691 -0
  104. package/dist/esm/assertion/impl/callback.js.map +1 -0
  105. package/dist/esm/assertion/impl/index.d.ts +1 -1
  106. package/dist/esm/assertion/impl/index.d.ts.map +1 -1
  107. package/dist/esm/assertion/impl/index.js +1 -1
  108. package/dist/esm/assertion/impl/index.js.map +1 -1
  109. package/dist/esm/assertion/impl/sync-basic.d.ts.map +1 -1
  110. package/dist/esm/assertion/impl/sync-basic.js +2 -2
  111. package/dist/esm/assertion/impl/sync-basic.js.map +1 -1
  112. package/dist/esm/assertion/impl/sync-collection.d.ts +1 -1
  113. package/dist/esm/assertion/impl/sync-collection.js +3 -3
  114. package/dist/esm/assertion/impl/sync-collection.js.map +1 -1
  115. package/dist/esm/assertion/impl/sync-esoteric.js +2 -2
  116. package/dist/esm/assertion/impl/sync-esoteric.js.map +1 -1
  117. package/dist/esm/assertion/impl/sync-parametric.d.ts +22 -28
  118. package/dist/esm/assertion/impl/sync-parametric.d.ts.map +1 -1
  119. package/dist/esm/assertion/impl/sync-parametric.js +36 -51
  120. package/dist/esm/assertion/impl/sync-parametric.js.map +1 -1
  121. package/dist/esm/assertion/impl/sync.d.ts +68 -30
  122. package/dist/esm/assertion/impl/sync.d.ts.map +1 -1
  123. package/dist/esm/assertion/impl/sync.js +3 -1
  124. package/dist/esm/assertion/impl/sync.js.map +1 -1
  125. package/dist/esm/bootstrap.d.ts +147 -52
  126. package/dist/esm/bootstrap.d.ts.map +1 -1
  127. package/dist/esm/bootstrap.js +1 -2
  128. package/dist/esm/bootstrap.js.map +1 -1
  129. package/dist/esm/constant.d.ts +1 -1
  130. package/dist/esm/constant.d.ts.map +1 -1
  131. package/dist/esm/constant.js +7 -0
  132. package/dist/esm/constant.js.map +1 -1
  133. package/dist/esm/error.d.ts +22 -2
  134. package/dist/esm/error.d.ts.map +1 -1
  135. package/dist/esm/error.js +43 -4
  136. package/dist/esm/error.js.map +1 -1
  137. package/dist/esm/expect.d.ts.map +1 -1
  138. package/dist/esm/expect.js +2 -2
  139. package/dist/esm/expect.js.map +1 -1
  140. package/dist/esm/guards.d.ts +96 -5
  141. package/dist/esm/guards.d.ts.map +1 -1
  142. package/dist/esm/guards.js +98 -21
  143. package/dist/esm/guards.js.map +1 -1
  144. package/dist/esm/index.d.ts +146 -51
  145. package/dist/esm/index.d.ts.map +1 -1
  146. package/dist/esm/index.js.map +1 -1
  147. package/dist/esm/schema.d.ts +84 -18
  148. package/dist/esm/schema.d.ts.map +1 -1
  149. package/dist/esm/schema.js +107 -22
  150. package/dist/esm/schema.js.map +1 -1
  151. package/dist/esm/types.d.ts +171 -9
  152. package/dist/esm/types.d.ts.map +1 -1
  153. package/dist/esm/use.d.ts.map +1 -1
  154. package/dist/esm/use.js +15 -1
  155. package/dist/esm/use.js.map +1 -1
  156. package/dist/esm/util.d.ts +66 -50
  157. package/dist/esm/util.d.ts.map +1 -1
  158. package/dist/esm/util.js +153 -154
  159. package/dist/esm/util.js.map +1 -1
  160. package/dist/esm/value-to-schema.d.ts +122 -0
  161. package/dist/esm/value-to-schema.d.ts.map +1 -0
  162. package/dist/esm/value-to-schema.js +325 -0
  163. package/dist/esm/value-to-schema.js.map +1 -0
  164. package/package.json +16 -13
  165. package/src/assertion/assertion-async.ts +113 -3
  166. package/src/assertion/assertion-sync.ts +5 -2
  167. package/src/assertion/assertion-types.ts +14 -4
  168. package/src/assertion/assertion.ts +2 -17
  169. package/src/assertion/impl/async.ts +137 -93
  170. package/src/assertion/impl/callback.ts +882 -0
  171. package/src/assertion/impl/index.ts +1 -1
  172. package/src/assertion/impl/sync-basic.ts +5 -2
  173. package/src/assertion/impl/sync-collection.ts +3 -3
  174. package/src/assertion/impl/sync-esoteric.ts +2 -2
  175. package/src/assertion/impl/sync-parametric.ts +47 -54
  176. package/src/assertion/impl/sync.ts +3 -0
  177. package/src/bootstrap.ts +1 -2
  178. package/src/constant.ts +10 -0
  179. package/src/error.ts +57 -3
  180. package/src/expect.ts +6 -2
  181. package/src/guards.ts +125 -18
  182. package/src/index.ts +3 -0
  183. package/src/schema.ts +121 -23
  184. package/src/types.ts +205 -10
  185. package/src/use.ts +22 -0
  186. package/src/util.ts +168 -223
  187. package/src/value-to-schema.ts +489 -0
@@ -1,11 +1,5 @@
1
1
  /**
2
- * Utility functions for object satisfaction and shape validation.
3
- *
4
- * This module provides core utility functions for checking if objects satisfy
5
- * expected shapes, including `satisfies` for partial matching,
6
- * `exhaustivelySatisfies` for exact matching, and `shallowSatisfiesShape` for
7
- * converting shapes to Zod schemas. All functions handle circular references
8
- * safely.
2
+ * Utility functions.
9
3
  *
10
4
  * @category API
11
5
  * @example
@@ -17,58 +11,80 @@
17
11
  * @packageDocumentation
18
12
  */
19
13
  import { type StringKeyOf } from 'type-fest';
20
- import { z } from 'zod/v4';
21
- export declare function keyBy<const T extends readonly Record<PropertyKey, any>[], K extends StringKeyOf<T[number]>>(collection: T, key: K): Record<string, T[number]>;
14
+ export * from './value-to-schema.js';
22
15
  /**
23
- * Recursively converts an arbitrary value to a Zod v4 schema that would
24
- * validate values with the same structure.
16
+ * _Recursively_ searches within an object, array, or any nested structure to
17
+ * find whether a specific key exists.
25
18
  *
26
- * This function analyzes the runtime value and generates a corresponding Zod
27
- * schema that captures the value's structure and type information. It handles
28
- * primitives, objects, arrays, functions, and various built-in types, with
29
- * support for circular reference detection.
19
+ * Handles circular references by tracking visited objects to prevent infinite
20
+ * recursion.
30
21
  *
31
22
  * @example
32
23
  *
33
- * ```typescript
34
- * // Primitive types
35
- * valueToSchema('hello'); // z.string()
36
- * valueToSchema(42); // z.number()
37
- * valueToSchema(true); // z.boolean()
24
+ * ```ts
25
+ * const obj = { a: 1, b: { c: 2, d: [{ e: 3 }] } };
38
26
  *
39
- * // Objects
40
- * valueToSchema({ name: 'John', age: 30 });
41
- * // z.object({ name: z.string(), age: z.number() })
27
+ * hasKey(obj, 'c'); // true
28
+ * hasKey(obj, 'e'); // true
29
+ * hasKey(obj, 'x'); // false (key not found)
30
+ * ```
42
31
  *
43
- * // Arrays
44
- * valueToSchema(['a', 'b', 'c']); // z.array(z.string())
45
- * valueToSchema([1, 'mixed']); // z.array(z.union([z.number(), z.string()]))
32
+ * @param obj The object, array, or value to search within
33
+ * @param key The key to search for
34
+ * @param visited Internal set for circular reference detection
35
+ * @returns True if the key is found anywhere in the structure, false otherwise
36
+ */
37
+ export declare function hasKey(obj: unknown, key: PropertyKey, visited?: WeakSet<object>): boolean;
38
+ /**
39
+ * _Recursively_ searches within an object, array, or any nested structure to
40
+ * find whether a specific value exists.
41
+ *
42
+ * Uses strict equality (===) to compare values, with special handling for empty
43
+ * objects. Handles circular references by tracking visited objects to prevent
44
+ * infinite recursion.
45
+ *
46
+ * @example
47
+ *
48
+ * ```ts
49
+ * const obj = { a: 1, b: { c: 2, d: [{ e: 3 }] }, empty: {} };
46
50
  *
47
- * // Nested structures
48
- * valueToSchema({ users: [{ name: 'John' }] });
49
- * // z.object({ users: z.array(z.object({ name: z.string() })) })
51
+ * hasValue(obj, 2); // true (found in obj.b.c)
52
+ * hasValue(obj, 3); // true (found in obj.b.d[0].e)
53
+ * hasValue(obj, {}); // true (found in obj.empty, matches empty objects)
54
+ * hasValue(obj, '1'); // false (strict equality, 1 !== '1')
55
+ * hasValue(obj, 999); // false (value not found)
50
56
  * ```
51
57
  *
52
- * @param value - The value to convert to a schema
53
- * @param options - Configuration options for schema generation
54
- * @param visited - Internal WeakSet for circular reference detection
55
- * @returns A Zod schema that validates values matching the input's structure
58
+ * @param obj The object, array, or value to search within
59
+ * @param value The value to search for (using strict equality, with special
60
+ * empty object handling)
61
+ * @param visited Internal set for circular reference detection
62
+ * @returns True if the value is found anywhere in the structure, false
63
+ * otherwise
56
64
  */
57
- export declare const valueToSchema: (value: unknown, options?: {
58
- /** Current depth (internal) */
59
- _currentDepth?: number;
60
- /** Whether to allow mixed types in arrays (default: true) */
61
- allowMixedArrays?: boolean;
62
- /** If `true`, use `z.literal()` for primitive values instead of type schemas */
63
- literalPrimitives?: boolean;
64
- /**
65
- * If `true`, treat `RegExp` literals as `RegExp` literals; otherwise treat
66
- * as strings and attempt match
67
- */
68
- literalRegExp?: boolean;
69
- /** Maximum nesting depth to prevent stack overflow (default: 10) */
70
- maxDepth?: number;
71
- /** If `true`, will disallow unknown properties in objects */
72
- strict?: boolean;
73
- }, visited?: WeakSet<object>) => z.ZodType;
65
+ export declare function hasValue(obj: unknown, value: unknown, visited?: WeakSet<object>): boolean;
66
+ /**
67
+ * _Recursively_ searches for a key-value pair within an object or array.
68
+ *
69
+ * Uses strict equality (===) to compare values. Handles circular references by
70
+ * tracking visited objects to prevent infinite recursion.
71
+ *
72
+ * @example
73
+ *
74
+ * ```ts
75
+ * const obj = { a: 1, b: { c: 2, d: [{ e: 3 }] } };
76
+ *
77
+ * hasKeyValue(obj, 'c', 2); // true
78
+ * hasKeyValue(obj, 'e', 3); // true
79
+ * hasKeyValue(obj, 'a', '1'); // false (strict equality)
80
+ * hasKeyValue(obj, 'x', 1); // false (key not found)
81
+ * /**
82
+ * Maps an array of objects to an object keyed by the specified key.
83
+ *
84
+ * @param collection Array of objects
85
+ * @param key Name of key
86
+ * @returns Object mapping key values to objects
87
+ * ```
88
+ */
89
+ export declare function keyBy<const T extends readonly Record<PropertyKey, any>[], K extends StringKeyOf<T[number]>>(collection: T, key: K): Record<string, T[number]>;
74
90
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAW3B,wBAAgB,KAAK,CACnB,KAAK,CAAC,CAAC,SAAS,SAAS,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,EACnD,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAChC,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAelD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,aAAa,GACxB,OAAO,OAAO,EACd,UAAS;IACP,+BAA+B;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;CACb,EACN,yBAA+B,KAC9B,CAAC,CAAC,OAoKJ,CAAC"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,cAAc,sBAAsB,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,MAAM,CACpB,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,WAAW,EAChB,OAAO,kBAAwB,GAC9B,OAAO,CAuCT;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,OAAO,EACd,OAAO,kBAAwB,GAC9B,OAAO,CAyDT;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,KAAK,CACnB,KAAK,CAAC,CAAC,SAAS,SAAS,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,EACnD,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAChC,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAelD"}
@@ -1,12 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * Utility functions for object satisfaction and shape validation.
4
- *
5
- * This module provides core utility functions for checking if objects satisfy
6
- * expected shapes, including `satisfies` for partial matching,
7
- * `exhaustivelySatisfies` for exact matching, and `shallowSatisfiesShape` for
8
- * converting shapes to Zod schemas. All functions handle circular references
9
- * safely.
3
+ * Utility functions.
10
4
  *
11
5
  * @category API
12
6
  * @example
@@ -17,178 +11,197 @@
17
11
  *
18
12
  * @packageDocumentation
19
13
  */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
26
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
27
+ };
20
28
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.valueToSchema = void 0;
29
+ exports.hasKey = hasKey;
30
+ exports.hasValue = hasValue;
22
31
  exports.keyBy = keyBy;
23
- const v4_1 = require("zod/v4");
24
- const guards_js_1 = require("./guards.js");
25
- const schema_js_1 = require("./schema.js");
26
- function keyBy(collection, key) {
27
- const result = {};
28
- for (const item of collection) {
29
- const keyValue = item[key];
30
- if (typeof keyValue === 'string' ||
31
- typeof keyValue === 'number' ||
32
- typeof keyValue === 'symbol') {
33
- result[String(keyValue)] = item;
32
+ __exportStar(require("./value-to-schema.js"), exports);
33
+ /**
34
+ * _Recursively_ searches within an object, array, or any nested structure to
35
+ * find whether a specific key exists.
36
+ *
37
+ * Handles circular references by tracking visited objects to prevent infinite
38
+ * recursion.
39
+ *
40
+ * @example
41
+ *
42
+ * ```ts
43
+ * const obj = { a: 1, b: { c: 2, d: [{ e: 3 }] } };
44
+ *
45
+ * hasKey(obj, 'c'); // true
46
+ * hasKey(obj, 'e'); // true
47
+ * hasKey(obj, 'x'); // false (key not found)
48
+ * ```
49
+ *
50
+ * @param obj The object, array, or value to search within
51
+ * @param key The key to search for
52
+ * @param visited Internal set for circular reference detection
53
+ * @returns True if the key is found anywhere in the structure, false otherwise
54
+ */
55
+ function hasKey(obj, key, visited = new WeakSet()) {
56
+ // Handle primitives that can't contain keys
57
+ if (typeof obj !== 'object' || obj === null) {
58
+ return false;
59
+ }
60
+ // Prevent infinite recursion with circular references
61
+ if (visited.has(obj)) {
62
+ return false;
63
+ }
64
+ visited.add(obj);
65
+ try {
66
+ // Check if this object has the key
67
+ if (Object.hasOwn(obj, key)) {
68
+ return true;
69
+ }
70
+ // Recursively search in object/array values
71
+ if (Array.isArray(obj)) {
72
+ // For arrays, search in each element
73
+ for (const item of obj) {
74
+ if (hasKey(item, key, visited)) {
75
+ return true;
76
+ }
77
+ }
78
+ }
79
+ else {
80
+ // For objects, search in each property value
81
+ for (const propValue of Object.values(obj)) {
82
+ if (hasKey(propValue, key, visited)) {
83
+ return true;
84
+ }
85
+ }
34
86
  }
87
+ return false;
88
+ }
89
+ finally {
90
+ visited.delete(obj);
35
91
  }
36
- return result;
37
92
  }
38
93
  /**
39
- * Recursively converts an arbitrary value to a Zod v4 schema that would
40
- * validate values with the same structure.
94
+ * _Recursively_ searches within an object, array, or any nested structure to
95
+ * find whether a specific value exists.
41
96
  *
42
- * This function analyzes the runtime value and generates a corresponding Zod
43
- * schema that captures the value's structure and type information. It handles
44
- * primitives, objects, arrays, functions, and various built-in types, with
45
- * support for circular reference detection.
97
+ * Uses strict equality (===) to compare values, with special handling for empty
98
+ * objects. Handles circular references by tracking visited objects to prevent
99
+ * infinite recursion.
46
100
  *
47
101
  * @example
48
102
  *
49
- * ```typescript
50
- * // Primitive types
51
- * valueToSchema('hello'); // z.string()
52
- * valueToSchema(42); // z.number()
53
- * valueToSchema(true); // z.boolean()
54
- *
55
- * // Objects
56
- * valueToSchema({ name: 'John', age: 30 });
57
- * // z.object({ name: z.string(), age: z.number() })
58
- *
59
- * // Arrays
60
- * valueToSchema(['a', 'b', 'c']); // z.array(z.string())
61
- * valueToSchema([1, 'mixed']); // z.array(z.union([z.number(), z.string()]))
103
+ * ```ts
104
+ * const obj = { a: 1, b: { c: 2, d: [{ e: 3 }] }, empty: {} };
62
105
  *
63
- * // Nested structures
64
- * valueToSchema({ users: [{ name: 'John' }] });
65
- * // z.object({ users: z.array(z.object({ name: z.string() })) })
106
+ * hasValue(obj, 2); // true (found in obj.b.c)
107
+ * hasValue(obj, 3); // true (found in obj.b.d[0].e)
108
+ * hasValue(obj, {}); // true (found in obj.empty, matches empty objects)
109
+ * hasValue(obj, '1'); // false (strict equality, 1 !== '1')
110
+ * hasValue(obj, 999); // false (value not found)
66
111
  * ```
67
112
  *
68
- * @param value - The value to convert to a schema
69
- * @param options - Configuration options for schema generation
70
- * @param visited - Internal WeakSet for circular reference detection
71
- * @returns A Zod schema that validates values matching the input's structure
113
+ * @param obj The object, array, or value to search within
114
+ * @param value The value to search for (using strict equality, with special
115
+ * empty object handling)
116
+ * @param visited Internal set for circular reference detection
117
+ * @returns True if the value is found anywhere in the structure, false
118
+ * otherwise
72
119
  */
73
- const valueToSchema = (value, options = {}, visited = new WeakSet()) => {
74
- const { _currentDepth = 0, allowMixedArrays = true, literalPrimitives = false, literalRegExp = false, maxDepth = 10, strict = false, } = options;
75
- // Prevent infinite recursion
76
- if (_currentDepth >= maxDepth) {
77
- return v4_1.z.unknown();
78
- }
79
- // Handle primitives
80
- if (value === null) {
81
- return v4_1.z.null();
120
+ function hasValue(obj, value, visited = new WeakSet()) {
121
+ // Direct value comparison
122
+ if (obj === value) {
123
+ return true;
82
124
  }
83
- if (value === undefined) {
84
- return v4_1.z.undefined();
85
- }
86
- if (Number.isNaN(value)) {
87
- return v4_1.z.nan();
125
+ // Special case: Check for empty objects
126
+ if (typeof obj === 'object' &&
127
+ obj !== null &&
128
+ !Array.isArray(obj) &&
129
+ typeof value === 'object' &&
130
+ value !== null &&
131
+ !Array.isArray(value)) {
132
+ const objKeys = Object.keys(obj);
133
+ const valueKeys = Object.keys(value);
134
+ // Both are empty objects
135
+ if (objKeys.length === 0 && valueKeys.length === 0) {
136
+ return true;
137
+ }
88
138
  }
89
- if (value === Infinity || value === -Infinity) {
90
- return v4_1.z.literal(value);
139
+ // Handle primitives that can't contain nested values
140
+ if (typeof obj !== 'object' || obj === null) {
141
+ return false;
91
142
  }
92
- const valueType = typeof value;
93
- switch (valueType) {
94
- case 'bigint':
95
- return literalPrimitives ? v4_1.z.literal(value) : v4_1.z.bigint();
96
- case 'boolean':
97
- return literalPrimitives ? v4_1.z.literal(value) : v4_1.z.boolean();
98
- case 'function':
99
- return schema_js_1.FunctionSchema;
100
- case 'number':
101
- return literalPrimitives ? v4_1.z.literal(value) : v4_1.z.number();
102
- case 'string':
103
- return literalPrimitives ? v4_1.z.literal(value) : v4_1.z.string();
104
- case 'symbol':
105
- return v4_1.z.symbol();
143
+ // Prevent infinite recursion with circular references
144
+ if (visited.has(obj)) {
145
+ return false;
106
146
  }
107
- // Handle objects
108
- if (typeof value === 'object' && value !== null) {
109
- // Check for circular references
110
- if (visited.has(value)) {
111
- // Return a recursive schema reference or unknown for circular refs
112
- return v4_1.z.unknown();
113
- }
114
- visited.add(value);
115
- try {
116
- // Handle built-in object types
117
- if (value instanceof Date) {
118
- return v4_1.z.date();
119
- }
120
- if (value instanceof RegExp) {
121
- if (literalRegExp) {
122
- return schema_js_1.RegExpSchema;
147
+ visited.add(obj);
148
+ try {
149
+ // Recursively search in object/array values
150
+ if (Array.isArray(obj)) {
151
+ // For arrays, search in each element
152
+ for (const item of obj) {
153
+ if (hasValue(item, value, visited)) {
154
+ return true;
123
155
  }
124
- return v4_1.z.coerce.string().regex(value);
125
- }
126
- if (value instanceof Map) {
127
- return schema_js_1.StrongMapSchema;
128
- }
129
- if (value instanceof Set) {
130
- return schema_js_1.StrongSetSchema;
131
- }
132
- if (value instanceof WeakMap) {
133
- return v4_1.z.instanceof(WeakMap);
134
156
  }
135
- if (value instanceof WeakSet) {
136
- return v4_1.z.instanceof(WeakSet);
137
- }
138
- if (value instanceof Error) {
139
- return v4_1.z.instanceof(Error);
140
- }
141
- if ((0, guards_js_1.isPromiseLike)(value)) {
142
- return schema_js_1.WrappedPromiseLikeSchema;
143
- }
144
- // Handle arrays
145
- if (Array.isArray(value)) {
146
- if (value.length === 0) {
147
- return v4_1.z.array(v4_1.z.unknown());
148
- }
149
- const elementSchemas = value.map((item) => (0, exports.valueToSchema)(item, {
150
- ...options,
151
- _currentDepth: _currentDepth + 1,
152
- }, visited));
153
- if (allowMixedArrays) {
154
- // Create a union of all unique element types
155
- const uniqueSchemas = Array.from(new Set(elementSchemas.map((schema) => schema.constructor.name))).map((_, index) => elementSchemas[index]);
156
- if (uniqueSchemas.length === 1) {
157
- return v4_1.z.array(uniqueSchemas[0]);
158
- }
159
- else {
160
- return v4_1.z.array(v4_1.z.union(uniqueSchemas));
161
- }
162
- }
163
- else {
164
- // Use the first element's schema for all elements
165
- return v4_1.z.array(elementSchemas[0]);
166
- }
167
- }
168
- // Handle plain objects
169
- if ((0, guards_js_1.isNonNullObject)(value)) {
170
- const schemaShape = {};
171
- for (const [key, val] of Object.entries(value)) {
172
- if ((0, guards_js_1.isString)(key)) {
173
- schemaShape[key] = (0, exports.valueToSchema)(val, {
174
- ...options,
175
- _currentDepth: _currentDepth + 1,
176
- }, visited);
177
- }
157
+ }
158
+ else {
159
+ // For objects, search in each property value
160
+ for (const propValue of Object.values(obj)) {
161
+ if (hasValue(propValue, value, visited)) {
162
+ return true;
178
163
  }
179
- return strict
180
- ? v4_1.z.strictObject(schemaShape)
181
- : v4_1.z.looseObject(schemaShape);
182
164
  }
183
- // Handle other object types (ArrayBuffer, etc.)
184
- return v4_1.z.custom((val) => typeof val === 'object' && val !== null, { message: 'Expected an object' });
185
165
  }
186
- finally {
187
- visited.delete(value);
166
+ return false;
167
+ }
168
+ finally {
169
+ visited.delete(obj);
170
+ }
171
+ }
172
+ /**
173
+ * _Recursively_ searches for a key-value pair within an object or array.
174
+ *
175
+ * Uses strict equality (===) to compare values. Handles circular references by
176
+ * tracking visited objects to prevent infinite recursion.
177
+ *
178
+ * @example
179
+ *
180
+ * ```ts
181
+ * const obj = { a: 1, b: { c: 2, d: [{ e: 3 }] } };
182
+ *
183
+ * hasKeyValue(obj, 'c', 2); // true
184
+ * hasKeyValue(obj, 'e', 3); // true
185
+ * hasKeyValue(obj, 'a', '1'); // false (strict equality)
186
+ * hasKeyValue(obj, 'x', 1); // false (key not found)
187
+ * /**
188
+ * Maps an array of objects to an object keyed by the specified key.
189
+ *
190
+ * @param collection Array of objects
191
+ * @param key Name of key
192
+ * @returns Object mapping key values to objects
193
+ * ```
194
+ */
195
+ function keyBy(collection, key) {
196
+ const result = {};
197
+ for (const item of collection) {
198
+ const keyValue = item[key];
199
+ if (typeof keyValue === 'string' ||
200
+ typeof keyValue === 'number' ||
201
+ typeof keyValue === 'symbol') {
202
+ result[String(keyValue)] = item;
188
203
  }
189
204
  }
190
- // Fallback for unknown types
191
- return v4_1.z.unknown();
192
- };
193
- exports.valueToSchema = valueToSchema;
205
+ return result;
206
+ }
194
207
  //# sourceMappingURL=util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;AAcH,sBAkBC;AA7BD,+BAA2B;AAE3B,2CAAuE;AACvE,2CAMqB;AAErB,SAAgB,KAAK,CAGnB,UAAa,EAAE,GAAM;IACrB,MAAM,MAAM,GAAG,EAA+B,CAAC;IAE/C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,IACE,OAAO,QAAQ,KAAK,QAAQ;YAC5B,OAAO,QAAQ,KAAK,QAAQ;YAC5B,OAAO,QAAQ,KAAK,QAAQ,EAC5B,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACI,MAAM,aAAa,GAAG,CAC3B,KAAc,EACd,UAgBI,EAAE,EACN,UAAU,IAAI,OAAO,EAAU,EACpB,EAAE;IACb,MAAM,EACJ,aAAa,GAAG,CAAC,EACjB,gBAAgB,GAAG,IAAI,EACvB,iBAAiB,GAAG,KAAK,EACzB,aAAa,GAAG,KAAK,EACrB,QAAQ,GAAG,EAAE,EACb,MAAM,GAAG,KAAK,GACf,GAAG,OAAO,CAAC;IAEZ,6BAA6B;IAC7B,IAAI,aAAa,IAAI,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAC,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;IAED,oBAAoB;IACpB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,MAAC,CAAC,IAAI,EAAE,CAAC;IAClB,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,MAAC,CAAC,SAAS,EAAE,CAAC;IACvB,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,CAAC,KAAe,CAAC,EAAE,CAAC;QAClC,OAAO,MAAC,CAAC,GAAG,EAAE,CAAC;IACjB,CAAC;IACD,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC9C,OAAO,MAAC,CAAC,OAAO,CAAC,KAAY,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;IAE/B,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,iBAAiB,CAAC,CAAC,CAAC,MAAC,CAAC,OAAO,CAAC,KAAe,CAAC,CAAC,CAAC,CAAC,MAAC,CAAC,MAAM,EAAE,CAAC;QACrE,KAAK,SAAS;YACZ,OAAO,iBAAiB,CAAC,CAAC,CAAC,MAAC,CAAC,OAAO,CAAC,KAAgB,CAAC,CAAC,CAAC,CAAC,MAAC,CAAC,OAAO,EAAE,CAAC;QACvE,KAAK,UAAU;YACb,OAAO,0BAAc,CAAC;QACxB,KAAK,QAAQ;YACX,OAAO,iBAAiB,CAAC,CAAC,CAAC,MAAC,CAAC,OAAO,CAAC,KAAe,CAAC,CAAC,CAAC,CAAC,MAAC,CAAC,MAAM,EAAE,CAAC;QACrE,KAAK,QAAQ;YACX,OAAO,iBAAiB,CAAC,CAAC,CAAC,MAAC,CAAC,OAAO,CAAC,KAAe,CAAC,CAAC,CAAC,CAAC,MAAC,CAAC,MAAM,EAAE,CAAC;QACrE,KAAK,QAAQ;YACX,OAAO,MAAC,CAAC,MAAM,EAAE,CAAC;IACtB,CAAC;IAED,iBAAiB;IACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,gCAAgC;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,mEAAmE;YACnE,OAAO,MAAC,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEnB,IAAI,CAAC;YACH,+BAA+B;YAC/B,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;gBAC1B,OAAO,MAAC,CAAC,IAAI,EAAE,CAAC;YAClB,CAAC;YAED,IAAI,KAAK,YAAY,MAAM,EAAE,CAAC;gBAC5B,IAAI,aAAa,EAAE,CAAC;oBAClB,OAAO,wBAAY,CAAC;gBACtB,CAAC;gBACD,OAAO,MAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;YAED,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;gBACzB,OAAO,2BAAe,CAAC;YACzB,CAAC;YAED,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;gBACzB,OAAO,2BAAe,CAAC;YACzB,CAAC;YAED,IAAI,KAAK,YAAY,OAAO,EAAE,CAAC;gBAC7B,OAAO,MAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;YAED,IAAI,KAAK,YAAY,OAAO,EAAE,CAAC;gBAC7B,OAAO,MAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;YAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,OAAO,MAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;YAED,IAAI,IAAA,yBAAa,EAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,oCAAwB,CAAC;YAClC,CAAC;YAED,gBAAgB;YAChB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,OAAO,MAAC,CAAC,KAAK,CAAC,MAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC9B,CAAC;gBAED,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxC,IAAA,qBAAa,EACX,IAAI,EACJ;oBACE,GAAG,OAAO;oBACV,aAAa,EAAE,aAAa,GAAG,CAAC;iBACjC,EACD,OAAO,CACR,CACF,CAAC;gBAEF,IAAI,gBAAgB,EAAE,CAAC;oBACrB,6CAA6C;oBAC7C,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAC9B,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CACjE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;oBAE3C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC/B,OAAO,MAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAE,CAAC,CAAC;oBACpC,CAAC;yBAAM,CAAC;wBACN,OAAO,MAAC,CAAC,KAAK,CACZ,MAAC,CAAC,KAAK,CAAC,aAAuD,CAAC,CACjE,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,kDAAkD;oBAClD,OAAO,MAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAE,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YAED,uBAAuB;YACvB,IAAI,IAAA,2BAAe,EAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,WAAW,GAAmC,EAAE,CAAC;gBAEvD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/C,IAAI,IAAA,oBAAQ,EAAC,GAAG,CAAC,EAAE,CAAC;wBAClB,WAAW,CAAC,GAAG,CAAC,GAAG,IAAA,qBAAa,EAC9B,GAAG,EACH;4BACE,GAAG,OAAO;4BACV,aAAa,EAAE,aAAa,GAAG,CAAC;yBACjC,EACD,OAAO,CACR,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,OAAO,MAAM;oBACX,CAAC,CAAC,MAAC,CAAC,YAAY,CAAC,WAAW,CAAC;oBAC7B,CAAC,CAAC,MAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YACjC,CAAC;YAED,gDAAgD;YAChD,OAAO,MAAC,CAAC,MAAM,CACb,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAChD,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAClC,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,OAAO,MAAC,CAAC,OAAO,EAAE,CAAC;AACrB,CAAC,CAAC;AAxLW,QAAA,aAAa,iBAwLxB"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}