structured-outputs 0.1.0-beta.2 → 0.1.0-beta.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (391) hide show
  1. package/README.md +77 -6
  2. package/esm/ResponseFormat.d.ts +18 -11
  3. package/esm/ResponseFormat.d.ts.map +1 -1
  4. package/esm/ResponseFormat.js +57 -5
  5. package/esm/ResponseFormat.js.map +1 -1
  6. package/esm/Tool.d.ts +13 -0
  7. package/esm/Tool.d.ts.map +1 -0
  8. package/esm/Tool.js +17 -0
  9. package/esm/Tool.js.map +1 -0
  10. package/esm/_dnt.polyfills.d.ts +12 -0
  11. package/esm/_dnt.polyfills.d.ts.map +1 -0
  12. package/esm/_dnt.polyfills.js +16 -0
  13. package/esm/_dnt.polyfills.js.map +1 -0
  14. package/esm/deps/jsr.io/@std/collections/1.0.9/_utils.d.ts +6 -0
  15. package/esm/deps/jsr.io/@std/collections/1.0.9/_utils.d.ts.map +1 -0
  16. package/esm/deps/jsr.io/@std/collections/1.0.9/_utils.js +19 -0
  17. package/esm/deps/jsr.io/@std/collections/1.0.9/_utils.js.map +1 -0
  18. package/esm/deps/jsr.io/@std/collections/1.0.9/aggregate_groups.d.ts +41 -0
  19. package/esm/deps/jsr.io/@std/collections/1.0.9/aggregate_groups.d.ts.map +1 -0
  20. package/esm/deps/jsr.io/@std/collections/1.0.9/aggregate_groups.js +51 -0
  21. package/esm/deps/jsr.io/@std/collections/1.0.9/aggregate_groups.js.map +1 -0
  22. package/esm/deps/jsr.io/@std/collections/1.0.9/associate_by.d.ts +37 -0
  23. package/esm/deps/jsr.io/@std/collections/1.0.9/associate_by.d.ts.map +1 -0
  24. package/esm/deps/jsr.io/@std/collections/1.0.9/associate_by.js +45 -0
  25. package/esm/deps/jsr.io/@std/collections/1.0.9/associate_by.js.map +1 -0
  26. package/esm/deps/jsr.io/@std/collections/1.0.9/associate_with.d.ts +33 -0
  27. package/esm/deps/jsr.io/@std/collections/1.0.9/associate_with.d.ts.map +1 -0
  28. package/esm/deps/jsr.io/@std/collections/1.0.9/associate_with.js +41 -0
  29. package/esm/deps/jsr.io/@std/collections/1.0.9/associate_with.js.map +1 -0
  30. package/esm/deps/jsr.io/@std/collections/1.0.9/chunk.d.ts +38 -0
  31. package/esm/deps/jsr.io/@std/collections/1.0.9/chunk.d.ts.map +1 -0
  32. package/esm/deps/jsr.io/@std/collections/1.0.9/chunk.js +51 -0
  33. package/esm/deps/jsr.io/@std/collections/1.0.9/chunk.js.map +1 -0
  34. package/esm/deps/jsr.io/@std/collections/1.0.9/deep_merge.d.ts +322 -0
  35. package/esm/deps/jsr.io/@std/collections/1.0.9/deep_merge.d.ts.map +1 -0
  36. package/esm/deps/jsr.io/@std/collections/1.0.9/deep_merge.js +96 -0
  37. package/esm/deps/jsr.io/@std/collections/1.0.9/deep_merge.js.map +1 -0
  38. package/esm/deps/jsr.io/@std/collections/1.0.9/distinct.d.ts +23 -0
  39. package/esm/deps/jsr.io/@std/collections/1.0.9/distinct.d.ts.map +1 -0
  40. package/esm/deps/jsr.io/@std/collections/1.0.9/distinct.js +28 -0
  41. package/esm/deps/jsr.io/@std/collections/1.0.9/distinct.js.map +1 -0
  42. package/esm/deps/jsr.io/@std/collections/1.0.9/distinct_by.d.ts +26 -0
  43. package/esm/deps/jsr.io/@std/collections/1.0.9/distinct_by.d.ts.map +1 -0
  44. package/esm/deps/jsr.io/@std/collections/1.0.9/distinct_by.js +39 -0
  45. package/esm/deps/jsr.io/@std/collections/1.0.9/distinct_by.js.map +1 -0
  46. package/esm/deps/jsr.io/@std/collections/1.0.9/drop_last_while.d.ts +26 -0
  47. package/esm/deps/jsr.io/@std/collections/1.0.9/drop_last_while.d.ts.map +1 -0
  48. package/esm/deps/jsr.io/@std/collections/1.0.9/drop_last_while.js +33 -0
  49. package/esm/deps/jsr.io/@std/collections/1.0.9/drop_last_while.js.map +1 -0
  50. package/esm/deps/jsr.io/@std/collections/1.0.9/drop_while.d.ts +25 -0
  51. package/esm/deps/jsr.io/@std/collections/1.0.9/drop_while.d.ts.map +1 -0
  52. package/esm/deps/jsr.io/@std/collections/1.0.9/drop_while.js +34 -0
  53. package/esm/deps/jsr.io/@std/collections/1.0.9/drop_while.js.map +1 -0
  54. package/esm/deps/jsr.io/@std/collections/1.0.9/filter_entries.d.ts +32 -0
  55. package/esm/deps/jsr.io/@std/collections/1.0.9/filter_entries.d.ts.map +1 -0
  56. package/esm/deps/jsr.io/@std/collections/1.0.9/filter_entries.js +43 -0
  57. package/esm/deps/jsr.io/@std/collections/1.0.9/filter_entries.js.map +1 -0
  58. package/esm/deps/jsr.io/@std/collections/1.0.9/filter_keys.d.ts +36 -0
  59. package/esm/deps/jsr.io/@std/collections/1.0.9/filter_keys.d.ts.map +1 -0
  60. package/esm/deps/jsr.io/@std/collections/1.0.9/filter_keys.js +46 -0
  61. package/esm/deps/jsr.io/@std/collections/1.0.9/filter_keys.js.map +1 -0
  62. package/esm/deps/jsr.io/@std/collections/1.0.9/filter_values.d.ts +35 -0
  63. package/esm/deps/jsr.io/@std/collections/1.0.9/filter_values.d.ts.map +1 -0
  64. package/esm/deps/jsr.io/@std/collections/1.0.9/filter_values.js +46 -0
  65. package/esm/deps/jsr.io/@std/collections/1.0.9/filter_values.js.map +1 -0
  66. package/esm/deps/jsr.io/@std/collections/1.0.9/find_single.d.ts +31 -0
  67. package/esm/deps/jsr.io/@std/collections/1.0.9/find_single.d.ts.map +1 -0
  68. package/esm/deps/jsr.io/@std/collections/1.0.9/find_single.js +45 -0
  69. package/esm/deps/jsr.io/@std/collections/1.0.9/find_single.js.map +1 -0
  70. package/esm/deps/jsr.io/@std/collections/1.0.9/first_not_nullish_of.d.ts +32 -0
  71. package/esm/deps/jsr.io/@std/collections/1.0.9/first_not_nullish_of.d.ts.map +1 -0
  72. package/esm/deps/jsr.io/@std/collections/1.0.9/first_not_nullish_of.js +42 -0
  73. package/esm/deps/jsr.io/@std/collections/1.0.9/first_not_nullish_of.js.map +1 -0
  74. package/esm/deps/jsr.io/@std/collections/1.0.9/includes_value.d.ts +29 -0
  75. package/esm/deps/jsr.io/@std/collections/1.0.9/includes_value.d.ts.map +1 -0
  76. package/esm/deps/jsr.io/@std/collections/1.0.9/includes_value.js +39 -0
  77. package/esm/deps/jsr.io/@std/collections/1.0.9/includes_value.js.map +1 -0
  78. package/esm/deps/jsr.io/@std/collections/1.0.9/intersect.d.ts +25 -0
  79. package/esm/deps/jsr.io/@std/collections/1.0.9/intersect.d.ts.map +1 -0
  80. package/esm/deps/jsr.io/@std/collections/1.0.9/intersect.js +36 -0
  81. package/esm/deps/jsr.io/@std/collections/1.0.9/intersect.js.map +1 -0
  82. package/esm/deps/jsr.io/@std/collections/1.0.9/invert.d.ts +29 -0
  83. package/esm/deps/jsr.io/@std/collections/1.0.9/invert.d.ts.map +1 -0
  84. package/esm/deps/jsr.io/@std/collections/1.0.9/invert.js +29 -0
  85. package/esm/deps/jsr.io/@std/collections/1.0.9/invert.js.map +1 -0
  86. package/esm/deps/jsr.io/@std/collections/1.0.9/invert_by.d.ts +34 -0
  87. package/esm/deps/jsr.io/@std/collections/1.0.9/invert_by.d.ts.map +1 -0
  88. package/esm/deps/jsr.io/@std/collections/1.0.9/invert_by.js +46 -0
  89. package/esm/deps/jsr.io/@std/collections/1.0.9/invert_by.js.map +1 -0
  90. package/esm/deps/jsr.io/@std/collections/1.0.9/join_to_string.d.ts +75 -0
  91. package/esm/deps/jsr.io/@std/collections/1.0.9/join_to_string.d.ts.map +1 -0
  92. package/esm/deps/jsr.io/@std/collections/1.0.9/join_to_string.js +59 -0
  93. package/esm/deps/jsr.io/@std/collections/1.0.9/join_to_string.js.map +1 -0
  94. package/esm/deps/jsr.io/@std/collections/1.0.9/map_entries.d.ts +37 -0
  95. package/esm/deps/jsr.io/@std/collections/1.0.9/map_entries.d.ts.map +1 -0
  96. package/esm/deps/jsr.io/@std/collections/1.0.9/map_entries.js +47 -0
  97. package/esm/deps/jsr.io/@std/collections/1.0.9/map_entries.js.map +1 -0
  98. package/esm/deps/jsr.io/@std/collections/1.0.9/map_keys.d.ts +33 -0
  99. package/esm/deps/jsr.io/@std/collections/1.0.9/map_keys.d.ts.map +1 -0
  100. package/esm/deps/jsr.io/@std/collections/1.0.9/map_keys.js +42 -0
  101. package/esm/deps/jsr.io/@std/collections/1.0.9/map_keys.js.map +1 -0
  102. package/esm/deps/jsr.io/@std/collections/1.0.9/map_not_nullish.d.ts +32 -0
  103. package/esm/deps/jsr.io/@std/collections/1.0.9/map_not_nullish.d.ts.map +1 -0
  104. package/esm/deps/jsr.io/@std/collections/1.0.9/map_not_nullish.js +43 -0
  105. package/esm/deps/jsr.io/@std/collections/1.0.9/map_not_nullish.js.map +1 -0
  106. package/esm/deps/jsr.io/@std/collections/1.0.9/map_values.d.ts +71 -0
  107. package/esm/deps/jsr.io/@std/collections/1.0.9/map_values.d.ts.map +1 -0
  108. package/esm/deps/jsr.io/@std/collections/1.0.9/map_values.js +13 -0
  109. package/esm/deps/jsr.io/@std/collections/1.0.9/map_values.js.map +1 -0
  110. package/esm/deps/jsr.io/@std/collections/1.0.9/max_by.d.ts +117 -0
  111. package/esm/deps/jsr.io/@std/collections/1.0.9/max_by.d.ts.map +1 -0
  112. package/esm/deps/jsr.io/@std/collections/1.0.9/max_by.js +15 -0
  113. package/esm/deps/jsr.io/@std/collections/1.0.9/max_by.js.map +1 -0
  114. package/esm/deps/jsr.io/@std/collections/1.0.9/max_of.d.ts +61 -0
  115. package/esm/deps/jsr.io/@std/collections/1.0.9/max_of.d.ts.map +1 -0
  116. package/esm/deps/jsr.io/@std/collections/1.0.9/max_of.js +17 -0
  117. package/esm/deps/jsr.io/@std/collections/1.0.9/max_of.js.map +1 -0
  118. package/esm/deps/jsr.io/@std/collections/1.0.9/max_with.d.ts +29 -0
  119. package/esm/deps/jsr.io/@std/collections/1.0.9/max_with.d.ts.map +1 -0
  120. package/esm/deps/jsr.io/@std/collections/1.0.9/max_with.js +41 -0
  121. package/esm/deps/jsr.io/@std/collections/1.0.9/max_with.js.map +1 -0
  122. package/esm/deps/jsr.io/@std/collections/1.0.9/min_by.d.ts +115 -0
  123. package/esm/deps/jsr.io/@std/collections/1.0.9/min_by.d.ts.map +1 -0
  124. package/esm/deps/jsr.io/@std/collections/1.0.9/min_by.js +15 -0
  125. package/esm/deps/jsr.io/@std/collections/1.0.9/min_by.js.map +1 -0
  126. package/esm/deps/jsr.io/@std/collections/1.0.9/min_of.d.ts +61 -0
  127. package/esm/deps/jsr.io/@std/collections/1.0.9/min_of.d.ts.map +1 -0
  128. package/esm/deps/jsr.io/@std/collections/1.0.9/min_of.js +17 -0
  129. package/esm/deps/jsr.io/@std/collections/1.0.9/min_of.js.map +1 -0
  130. package/esm/deps/jsr.io/@std/collections/1.0.9/min_with.d.ts +25 -0
  131. package/esm/deps/jsr.io/@std/collections/1.0.9/min_with.d.ts.map +1 -0
  132. package/esm/deps/jsr.io/@std/collections/1.0.9/min_with.js +37 -0
  133. package/esm/deps/jsr.io/@std/collections/1.0.9/min_with.js.map +1 -0
  134. package/esm/deps/jsr.io/@std/collections/1.0.9/mod.d.ts +73 -0
  135. package/esm/deps/jsr.io/@std/collections/1.0.9/mod.d.ts.map +1 -0
  136. package/esm/deps/jsr.io/@std/collections/1.0.9/mod.js +75 -0
  137. package/esm/deps/jsr.io/@std/collections/1.0.9/mod.js.map +1 -0
  138. package/esm/deps/jsr.io/@std/collections/1.0.9/omit.d.ts +24 -0
  139. package/esm/deps/jsr.io/@std/collections/1.0.9/omit.d.ts.map +1 -0
  140. package/esm/deps/jsr.io/@std/collections/1.0.9/omit.js +29 -0
  141. package/esm/deps/jsr.io/@std/collections/1.0.9/omit.js.map +1 -0
  142. package/esm/deps/jsr.io/@std/collections/1.0.9/partition.d.ts +60 -0
  143. package/esm/deps/jsr.io/@std/collections/1.0.9/partition.d.ts.map +1 -0
  144. package/esm/deps/jsr.io/@std/collections/1.0.9/partition.js +16 -0
  145. package/esm/deps/jsr.io/@std/collections/1.0.9/partition.js.map +1 -0
  146. package/esm/deps/jsr.io/@std/collections/1.0.9/partition_entries.d.ts +39 -0
  147. package/esm/deps/jsr.io/@std/collections/1.0.9/partition_entries.d.ts.map +1 -0
  148. package/esm/deps/jsr.io/@std/collections/1.0.9/partition_entries.js +54 -0
  149. package/esm/deps/jsr.io/@std/collections/1.0.9/partition_entries.js.map +1 -0
  150. package/esm/deps/jsr.io/@std/collections/1.0.9/permutations.d.ts +27 -0
  151. package/esm/deps/jsr.io/@std/collections/1.0.9/permutations.d.ts.map +1 -0
  152. package/esm/deps/jsr.io/@std/collections/1.0.9/permutations.js +58 -0
  153. package/esm/deps/jsr.io/@std/collections/1.0.9/permutations.js.map +1 -0
  154. package/esm/deps/jsr.io/@std/collections/1.0.9/pick.d.ts +25 -0
  155. package/esm/deps/jsr.io/@std/collections/1.0.9/pick.d.ts.map +1 -0
  156. package/esm/deps/jsr.io/@std/collections/1.0.9/pick.js +33 -0
  157. package/esm/deps/jsr.io/@std/collections/1.0.9/pick.js.map +1 -0
  158. package/esm/deps/jsr.io/@std/collections/1.0.9/reduce_groups.d.ts +35 -0
  159. package/esm/deps/jsr.io/@std/collections/1.0.9/reduce_groups.d.ts.map +1 -0
  160. package/esm/deps/jsr.io/@std/collections/1.0.9/reduce_groups.js +40 -0
  161. package/esm/deps/jsr.io/@std/collections/1.0.9/reduce_groups.js.map +1 -0
  162. package/esm/deps/jsr.io/@std/collections/1.0.9/running_reduce.d.ts +27 -0
  163. package/esm/deps/jsr.io/@std/collections/1.0.9/running_reduce.d.ts.map +1 -0
  164. package/esm/deps/jsr.io/@std/collections/1.0.9/running_reduce.js +32 -0
  165. package/esm/deps/jsr.io/@std/collections/1.0.9/running_reduce.js.map +1 -0
  166. package/esm/deps/jsr.io/@std/collections/1.0.9/sample.d.ts +24 -0
  167. package/esm/deps/jsr.io/@std/collections/1.0.9/sample.d.ts.map +1 -0
  168. package/esm/deps/jsr.io/@std/collections/1.0.9/sample.js +35 -0
  169. package/esm/deps/jsr.io/@std/collections/1.0.9/sample.js.map +1 -0
  170. package/esm/deps/jsr.io/@std/collections/1.0.9/sliding_windows.d.ts +66 -0
  171. package/esm/deps/jsr.io/@std/collections/1.0.9/sliding_windows.d.ts.map +1 -0
  172. package/esm/deps/jsr.io/@std/collections/1.0.9/sliding_windows.js +57 -0
  173. package/esm/deps/jsr.io/@std/collections/1.0.9/sliding_windows.js.map +1 -0
  174. package/esm/deps/jsr.io/@std/collections/1.0.9/sort_by.d.ts +161 -0
  175. package/esm/deps/jsr.io/@std/collections/1.0.9/sort_by.d.ts.map +1 -0
  176. package/esm/deps/jsr.io/@std/collections/1.0.9/sort_by.js +30 -0
  177. package/esm/deps/jsr.io/@std/collections/1.0.9/sort_by.js.map +1 -0
  178. package/esm/deps/jsr.io/@std/collections/1.0.9/sum_of.d.ts +29 -0
  179. package/esm/deps/jsr.io/@std/collections/1.0.9/sum_of.d.ts.map +1 -0
  180. package/esm/deps/jsr.io/@std/collections/1.0.9/sum_of.js +37 -0
  181. package/esm/deps/jsr.io/@std/collections/1.0.9/sum_of.js.map +1 -0
  182. package/esm/deps/jsr.io/@std/collections/1.0.9/take_last_while.d.ts +27 -0
  183. package/esm/deps/jsr.io/@std/collections/1.0.9/take_last_while.d.ts.map +1 -0
  184. package/esm/deps/jsr.io/@std/collections/1.0.9/take_last_while.js +34 -0
  185. package/esm/deps/jsr.io/@std/collections/1.0.9/take_last_while.js.map +1 -0
  186. package/esm/deps/jsr.io/@std/collections/1.0.9/take_while.d.ts +30 -0
  187. package/esm/deps/jsr.io/@std/collections/1.0.9/take_while.d.ts.map +1 -0
  188. package/esm/deps/jsr.io/@std/collections/1.0.9/take_while.js +39 -0
  189. package/esm/deps/jsr.io/@std/collections/1.0.9/take_while.js.map +1 -0
  190. package/esm/deps/jsr.io/@std/collections/1.0.9/union.d.ts +24 -0
  191. package/esm/deps/jsr.io/@std/collections/1.0.9/union.d.ts.map +1 -0
  192. package/esm/deps/jsr.io/@std/collections/1.0.9/union.js +34 -0
  193. package/esm/deps/jsr.io/@std/collections/1.0.9/union.js.map +1 -0
  194. package/esm/deps/jsr.io/@std/collections/1.0.9/unzip.d.ts +32 -0
  195. package/esm/deps/jsr.io/@std/collections/1.0.9/unzip.d.ts.map +1 -0
  196. package/esm/deps/jsr.io/@std/collections/1.0.9/unzip.js +46 -0
  197. package/esm/deps/jsr.io/@std/collections/1.0.9/unzip.js.map +1 -0
  198. package/esm/deps/jsr.io/@std/collections/1.0.9/without_all.d.ts +23 -0
  199. package/esm/deps/jsr.io/@std/collections/1.0.9/without_all.d.ts.map +1 -0
  200. package/esm/deps/jsr.io/@std/collections/1.0.9/without_all.js +28 -0
  201. package/esm/deps/jsr.io/@std/collections/1.0.9/without_all.js.map +1 -0
  202. package/esm/deps/jsr.io/@std/collections/1.0.9/zip.d.ts +34 -0
  203. package/esm/deps/jsr.io/@std/collections/1.0.9/zip.d.ts.map +1 -0
  204. package/esm/deps/jsr.io/@std/collections/1.0.9/zip.js +43 -0
  205. package/esm/deps/jsr.io/@std/collections/1.0.9/zip.js.map +1 -0
  206. package/esm/mod.d.ts +3 -14
  207. package/esm/mod.d.ts.map +1 -1
  208. package/esm/mod.js +3 -10
  209. package/esm/mod.js.map +1 -1
  210. package/esm/oai.d.ts +5 -0
  211. package/esm/oai.d.ts.map +1 -0
  212. package/esm/oai.js +2 -0
  213. package/esm/oai.js.map +1 -0
  214. package/esm/types/Ref.d.ts +4 -0
  215. package/esm/types/Ref.d.ts.map +1 -0
  216. package/esm/types/Ref.js +11 -0
  217. package/esm/types/Ref.js.map +1 -0
  218. package/esm/types/RootTy.d.ts +8 -0
  219. package/esm/types/RootTy.d.ts.map +1 -0
  220. package/esm/types/RootTy.js +19 -0
  221. package/esm/types/RootTy.js.map +1 -0
  222. package/esm/types/Ty.d.ts +27 -0
  223. package/esm/types/Ty.d.ts.map +1 -0
  224. package/esm/types/Ty.js +17 -0
  225. package/esm/types/Ty.js.map +1 -0
  226. package/esm/types/array.d.ts +3 -0
  227. package/esm/types/array.d.ts.map +1 -0
  228. package/esm/types/array.js +9 -0
  229. package/esm/types/array.js.map +1 -0
  230. package/esm/types/constant.d.ts +3 -0
  231. package/esm/types/constant.d.ts.map +1 -0
  232. package/esm/types/constant.js +8 -0
  233. package/esm/types/constant.js.map +1 -0
  234. package/esm/types/constantUnion.d.ts +3 -0
  235. package/esm/types/constantUnion.d.ts.map +1 -0
  236. package/esm/types/constantUnion.js +25 -0
  237. package/esm/types/constantUnion.js.map +1 -0
  238. package/esm/types/leaves.d.ts +6 -0
  239. package/esm/types/leaves.d.ts.map +1 -0
  240. package/esm/types/leaves.js +18 -0
  241. package/esm/types/leaves.js.map +1 -0
  242. package/esm/types/mod.d.ts +11 -0
  243. package/esm/types/mod.d.ts.map +1 -0
  244. package/esm/types/mod.js +11 -0
  245. package/esm/types/mod.js.map +1 -0
  246. package/esm/types/object.d.ts +6 -0
  247. package/esm/types/object.d.ts.map +1 -0
  248. package/esm/{object.js → types/object.js} +4 -4
  249. package/esm/types/object.js.map +1 -0
  250. package/esm/types/std/Option.d.ts +7 -0
  251. package/esm/types/std/Option.d.ts.map +1 -0
  252. package/esm/types/std/Option.js +9 -0
  253. package/esm/types/std/Option.js.map +1 -0
  254. package/esm/types/std/Wrapper.d.ts +7 -0
  255. package/esm/types/std/Wrapper.d.ts.map +1 -0
  256. package/esm/types/std/Wrapper.js +5 -0
  257. package/esm/types/std/Wrapper.js.map +1 -0
  258. package/esm/types/std/mod.d.ts +3 -0
  259. package/esm/types/std/mod.d.ts.map +1 -0
  260. package/esm/types/std/mod.js +3 -0
  261. package/esm/types/std/mod.js.map +1 -0
  262. package/esm/types/taggedUnion.d.ts +8 -0
  263. package/esm/types/taggedUnion.d.ts.map +1 -0
  264. package/esm/types/taggedUnion.js +20 -0
  265. package/esm/types/taggedUnion.js.map +1 -0
  266. package/esm/util/phantoms.d.ts +2 -0
  267. package/esm/util/phantoms.d.ts.map +1 -0
  268. package/esm/util/phantoms.js +4 -0
  269. package/esm/util/phantoms.js.map +1 -0
  270. package/esm/util/recombineTaggedTemplateArgs.d.ts +2 -0
  271. package/esm/util/recombineTaggedTemplateArgs.d.ts.map +1 -0
  272. package/esm/util/recombineTaggedTemplateArgs.js +4 -0
  273. package/esm/util/recombineTaggedTemplateArgs.js.map +1 -0
  274. package/package.json +7 -9
  275. package/src/ResponseFormat.ts +80 -22
  276. package/src/Tool.ts +38 -0
  277. package/src/_dnt.polyfills.ts +27 -0
  278. package/src/deps/jsr.io/@std/collections/1.0.9/_utils.ts +26 -0
  279. package/src/deps/jsr.io/@std/collections/1.0.9/aggregate_groups.ts +62 -0
  280. package/src/deps/jsr.io/@std/collections/1.0.9/associate_by.ts +50 -0
  281. package/src/deps/jsr.io/@std/collections/1.0.9/associate_with.ts +46 -0
  282. package/src/deps/jsr.io/@std/collections/1.0.9/chunk.ts +56 -0
  283. package/src/deps/jsr.io/@std/collections/1.0.9/deep_merge.ts +578 -0
  284. package/src/deps/jsr.io/@std/collections/1.0.9/distinct.ts +29 -0
  285. package/src/deps/jsr.io/@std/collections/1.0.9/distinct_by.ts +42 -0
  286. package/src/deps/jsr.io/@std/collections/1.0.9/drop_last_while.ts +36 -0
  287. package/src/deps/jsr.io/@std/collections/1.0.9/drop_while.ts +39 -0
  288. package/src/deps/jsr.io/@std/collections/1.0.9/filter_entries.ts +48 -0
  289. package/src/deps/jsr.io/@std/collections/1.0.9/filter_keys.ts +51 -0
  290. package/src/deps/jsr.io/@std/collections/1.0.9/filter_values.ts +51 -0
  291. package/src/deps/jsr.io/@std/collections/1.0.9/find_single.ts +48 -0
  292. package/src/deps/jsr.io/@std/collections/1.0.9/first_not_nullish_of.ts +47 -0
  293. package/src/deps/jsr.io/@std/collections/1.0.9/includes_value.ts +45 -0
  294. package/src/deps/jsr.io/@std/collections/1.0.9/intersect.ts +35 -0
  295. package/src/deps/jsr.io/@std/collections/1.0.9/invert.ts +38 -0
  296. package/src/deps/jsr.io/@std/collections/1.0.9/invert_by.ts +56 -0
  297. package/src/deps/jsr.io/@std/collections/1.0.9/join_to_string.ts +109 -0
  298. package/src/deps/jsr.io/@std/collections/1.0.9/map_entries.ts +53 -0
  299. package/src/deps/jsr.io/@std/collections/1.0.9/map_keys.ts +47 -0
  300. package/src/deps/jsr.io/@std/collections/1.0.9/map_not_nullish.ts +49 -0
  301. package/src/deps/jsr.io/@std/collections/1.0.9/map_values.ts +96 -0
  302. package/src/deps/jsr.io/@std/collections/1.0.9/max_by.ts +153 -0
  303. package/src/deps/jsr.io/@std/collections/1.0.9/max_of.ts +90 -0
  304. package/src/deps/jsr.io/@std/collections/1.0.9/max_with.ts +46 -0
  305. package/src/deps/jsr.io/@std/collections/1.0.9/min_by.ts +151 -0
  306. package/src/deps/jsr.io/@std/collections/1.0.9/min_of.ts +90 -0
  307. package/src/deps/jsr.io/@std/collections/1.0.9/min_with.ts +42 -0
  308. package/src/deps/jsr.io/@std/collections/1.0.9/mod.ts +76 -0
  309. package/src/deps/jsr.io/@std/collections/1.0.9/omit.ts +34 -0
  310. package/src/deps/jsr.io/@std/collections/1.0.9/partition.ts +85 -0
  311. package/src/deps/jsr.io/@std/collections/1.0.9/partition_entries.ts +58 -0
  312. package/src/deps/jsr.io/@std/collections/1.0.9/permutations.ts +66 -0
  313. package/src/deps/jsr.io/@std/collections/1.0.9/pick.ts +34 -0
  314. package/src/deps/jsr.io/@std/collections/1.0.9/reduce_groups.ts +45 -0
  315. package/src/deps/jsr.io/@std/collections/1.0.9/running_reduce.ts +38 -0
  316. package/src/deps/jsr.io/@std/collections/1.0.9/sample.ts +36 -0
  317. package/src/deps/jsr.io/@std/collections/1.0.9/sliding_windows.ts +86 -0
  318. package/src/deps/jsr.io/@std/collections/1.0.9/sort_by.ts +219 -0
  319. package/src/deps/jsr.io/@std/collections/1.0.9/sum_of.ts +42 -0
  320. package/src/deps/jsr.io/@std/collections/1.0.9/take_last_while.ts +37 -0
  321. package/src/deps/jsr.io/@std/collections/1.0.9/take_while.ts +44 -0
  322. package/src/deps/jsr.io/@std/collections/1.0.9/union.ts +36 -0
  323. package/src/deps/jsr.io/@std/collections/1.0.9/unzip.ts +50 -0
  324. package/src/deps/jsr.io/@std/collections/1.0.9/without_all.ts +28 -0
  325. package/src/deps/jsr.io/@std/collections/1.0.9/zip.ts +49 -0
  326. package/src/mod.ts +3 -18
  327. package/src/oai.ts +5 -0
  328. package/src/types/Ref.ts +16 -0
  329. package/src/types/RootTy.ts +40 -0
  330. package/src/types/Ty.ts +57 -0
  331. package/src/types/array.ts +9 -0
  332. package/src/types/constant.ts +8 -0
  333. package/src/types/constantUnion.ts +27 -0
  334. package/src/types/leaves.ts +21 -0
  335. package/src/types/mod.ts +10 -0
  336. package/src/types/object.ts +15 -0
  337. package/src/types/std/Option.ts +15 -0
  338. package/src/types/std/Wrapper.ts +8 -0
  339. package/src/types/std/mod.ts +2 -0
  340. package/src/types/taggedUnion.ts +28 -0
  341. package/src/util/phantoms.ts +3 -0
  342. package/src/util/recombineTaggedTemplateArgs.ts +6 -0
  343. package/esm/F.d.ts +0 -13
  344. package/esm/F.d.ts.map +0 -1
  345. package/esm/F.js +0 -10
  346. package/esm/F.js.map +0 -1
  347. package/esm/_base.d.ts +0 -13
  348. package/esm/_base.d.ts.map +0 -1
  349. package/esm/_base.js +0 -40
  350. package/esm/_base.js.map +0 -1
  351. package/esm/array.d.ts +0 -4
  352. package/esm/array.d.ts.map +0 -1
  353. package/esm/array.js +0 -9
  354. package/esm/array.js.map +0 -1
  355. package/esm/common.d.ts +0 -6
  356. package/esm/common.d.ts.map +0 -1
  357. package/esm/common.js +0 -2
  358. package/esm/common.js.map +0 -1
  359. package/esm/literal.d.ts +0 -4
  360. package/esm/literal.d.ts.map +0 -1
  361. package/esm/literal.js +0 -8
  362. package/esm/literal.js.map +0 -1
  363. package/esm/number.d.ts +0 -4
  364. package/esm/number.d.ts.map +0 -1
  365. package/esm/number.js +0 -8
  366. package/esm/number.js.map +0 -1
  367. package/esm/object.d.ts +0 -7
  368. package/esm/object.d.ts.map +0 -1
  369. package/esm/object.js.map +0 -1
  370. package/esm/schema.d.ts +0 -4
  371. package/esm/schema.d.ts.map +0 -1
  372. package/esm/schema.js +0 -9
  373. package/esm/schema.js.map +0 -1
  374. package/esm/string.d.ts +0 -4
  375. package/esm/string.d.ts.map +0 -1
  376. package/esm/string.js +0 -8
  377. package/esm/string.js.map +0 -1
  378. package/esm/union.d.ts +0 -6
  379. package/esm/union.d.ts.map +0 -1
  380. package/esm/union.js +0 -8
  381. package/esm/union.js.map +0 -1
  382. package/src/F.ts +0 -27
  383. package/src/_base.ts +0 -25
  384. package/src/array.ts +0 -11
  385. package/src/common.ts +0 -6
  386. package/src/literal.ts +0 -10
  387. package/src/number.ts +0 -10
  388. package/src/object.ts +0 -17
  389. package/src/schema.ts +0 -10
  390. package/src/string.ts +0 -10
  391. package/src/union.ts +0 -12
@@ -0,0 +1,53 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Applies the given transformer to all entries in the given record and returns
6
+ * a new record containing the results.
7
+ *
8
+ * @typeParam T The type of the values in the input record.
9
+ * @typeParam O The type of the values in the output record.
10
+ *
11
+ * @param record The record to map entries from.
12
+ * @param transformer The function to transform each entry.
13
+ *
14
+ * @returns A new record with all entries transformed by the given transformer.
15
+ *
16
+ * @example Basic usage
17
+ * ```ts
18
+ * import { mapEntries } from "@std/collections/map-entries";
19
+ * import { assertEquals } from "@std/assert";
20
+ *
21
+ * const usersById = {
22
+ * "a2e": { name: "Kim", age: 22 },
23
+ * "dfe": { name: "Anna", age: 31 },
24
+ * "34b": { name: "Tim", age: 58 },
25
+ * };
26
+ *
27
+ * const agesByNames = mapEntries(usersById, ([id, { name, age }]) => [name, age]);
28
+ *
29
+ * assertEquals(
30
+ * agesByNames,
31
+ * {
32
+ * Kim: 22,
33
+ * Anna: 31,
34
+ * Tim: 58,
35
+ * },
36
+ * );
37
+ * ```
38
+ */
39
+ export function mapEntries<T, O>(
40
+ record: Readonly<Record<string, T>>,
41
+ transformer: (entry: [string, T]) => [string, O],
42
+ ): Record<string, O> {
43
+ const result: Record<string, O> = {};
44
+ const entries = Object.entries(record);
45
+
46
+ for (const entry of entries) {
47
+ const [mappedKey, mappedValue] = transformer(entry);
48
+
49
+ result[mappedKey] = mappedValue;
50
+ }
51
+
52
+ return result;
53
+ }
@@ -0,0 +1,47 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Applies the given transformer to all keys in the given record's entries and
6
+ * returns a new record containing the transformed entries.
7
+ *
8
+ * If the transformed entries contain the same key multiple times, only the last
9
+ * one will appear in the returned record.
10
+ *
11
+ * @typeParam T The type of the values in the input record.
12
+ *
13
+ * @param record The record to map keys from.
14
+ * @param transformer The function to transform each key.
15
+ *
16
+ * @returns A new record with all keys transformed by the given transformer.
17
+ *
18
+ * @example Basic usage
19
+ * ```ts
20
+ * import { mapKeys } from "@std/collections/map-keys";
21
+ * import { assertEquals } from "@std/assert";
22
+ *
23
+ * const counts = { a: 5, b: 3, c: 8 };
24
+ *
25
+ * assertEquals(
26
+ * mapKeys(counts, (key) => key.toUpperCase()),
27
+ * {
28
+ * A: 5,
29
+ * B: 3,
30
+ * C: 8,
31
+ * },
32
+ * );
33
+ * ```
34
+ */
35
+ export function mapKeys<T>(
36
+ record: Readonly<Record<string, T>>,
37
+ transformer: (key: string) => string,
38
+ ): Record<string, T> {
39
+ const result: Record<string, T> = {};
40
+
41
+ for (const [key, value] of Object.entries(record)) {
42
+ const mappedKey = transformer(key);
43
+ result[mappedKey] = value;
44
+ }
45
+
46
+ return result;
47
+ }
@@ -0,0 +1,49 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Returns a new array, containing all elements in the given array transformed
6
+ * using the given transformer, except the ones that were transformed to `null`
7
+ * or `undefined`.
8
+ *
9
+ * @typeParam T The type of the elements in the input array.
10
+ * @typeParam O The type of the elements in the output array.
11
+ *
12
+ * @param array The array to map elements from.
13
+ * @param transformer The function to transform each element.
14
+ *
15
+ * @returns A new array with all elements transformed by the given transformer,
16
+ * except the ones that were transformed to `null` or `undefined`.
17
+ *
18
+ * @example Basic usage
19
+ * ```ts
20
+ * import { mapNotNullish } from "@std/collections/map-not-nullish";
21
+ * import { assertEquals } from "@std/assert";
22
+ *
23
+ * const people = [
24
+ * { middleName: null },
25
+ * { middleName: "William" },
26
+ * { middleName: undefined },
27
+ * { middleName: "Martha" },
28
+ * ];
29
+ * const foundMiddleNames = mapNotNullish(people, (people) => people.middleName);
30
+ *
31
+ * assertEquals(foundMiddleNames, ["William", "Martha"]);
32
+ * ```
33
+ */
34
+ export function mapNotNullish<T, O>(
35
+ array: Iterable<T>,
36
+ transformer: (el: T) => O,
37
+ ): NonNullable<O>[] {
38
+ const result: NonNullable<O>[] = [];
39
+
40
+ for (const element of array) {
41
+ const transformedElement = transformer(element);
42
+
43
+ if (transformedElement !== undefined && transformedElement !== null) {
44
+ result.push(transformedElement as NonNullable<O>);
45
+ }
46
+ }
47
+
48
+ return result;
49
+ }
@@ -0,0 +1,96 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Applies the given transformer to all values in the given record and returns a
6
+ * new record containing the resulting keys associated to the last value that
7
+ * produced them.
8
+ *
9
+ * @typeParam T The type of the values in the input record.
10
+ * @typeParam O The type of the values in the output record.
11
+ * @typeParam K The type of the keys in the input and output records.
12
+ *
13
+ * @param record The record to map values from.
14
+ * @param transformer The function to transform each value.
15
+ *
16
+ * @returns A new record with all values transformed by the given transformer.
17
+ *
18
+ * @example Basic usage
19
+ * ```ts
20
+ * import { mapValues } from "@std/collections/map-values";
21
+ * import { assertEquals } from "@std/assert";
22
+ *
23
+ * const usersById = {
24
+ * a5ec: { name: "Mischa" },
25
+ * de4f: { name: "Kim" },
26
+ * };
27
+ * const namesById = mapValues(usersById, (user) => user.name);
28
+ *
29
+ * assertEquals(
30
+ * namesById,
31
+ * {
32
+ * a5ec: "Mischa",
33
+ * de4f: "Kim",
34
+ * },
35
+ * );
36
+ * ```
37
+ */
38
+ export function mapValues<T, O, K extends string>(
39
+ record: Readonly<Record<K, T>>,
40
+ transformer: (value: T, key: K) => O,
41
+ ): Record<K, O>;
42
+ /**
43
+ * Applies the given transformer to all values in the given record and returns a
44
+ * new record containing the resulting keys associated to the last value that
45
+ * produced them.
46
+ *
47
+ * @typeParam T The type of the values in the input record.
48
+ * @typeParam O The type of the values in the output record.
49
+ * @typeParam K The type of the keys in the input and output records.
50
+ *
51
+ * @param record The record to map values from.
52
+ * @param transformer The function to transform each value.
53
+ *
54
+ * @returns A new record with all values transformed by the given transformer.
55
+ *
56
+ * @example Basic usage
57
+ * ```ts
58
+ * import { mapValues } from "@std/collections/map-values";
59
+ * import { assertEquals } from "@std/assert";
60
+ *
61
+ * const usersById = {
62
+ * "a5ec": { name: "Mischa" },
63
+ * "de4f": { name: "Kim" },
64
+ * };
65
+ * const namesById = mapValues(usersById, (user) => user.name);
66
+ *
67
+ * assertEquals(
68
+ * namesById,
69
+ * {
70
+ * "a5ec": "Mischa",
71
+ * "de4f": "Kim",
72
+ * },
73
+ * );
74
+ * ```
75
+ */
76
+ export function mapValues<T, O, K extends string>(
77
+ record: Readonly<Partial<Record<K, T>>>,
78
+ transformer: (value: T, key: K) => O,
79
+ ): Partial<Record<K, O>>;
80
+ export function mapValues<T, O, K extends string>(
81
+ record: Record<K, T>,
82
+ transformer: (value: T, key: K) => O,
83
+ // deno-lint-ignore no-explicit-any
84
+ ): any {
85
+ // deno-lint-ignore no-explicit-any
86
+ const result: any = {};
87
+ const entries = Object.entries<T>(record);
88
+
89
+ for (const [key, value] of entries) {
90
+ const mappedValue = transformer(value, key as K);
91
+
92
+ result[key] = mappedValue;
93
+ }
94
+
95
+ return result;
96
+ }
@@ -0,0 +1,153 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Returns the first element that is the largest value of the given function or
6
+ * undefined if there are no elements.
7
+ *
8
+ * @typeParam T The type of the elements in the array.
9
+ *
10
+ * @param array The array to find the maximum element in.
11
+ * @param selector The function to get the value to compare from each element.
12
+ *
13
+ * @returns The first element that is the largest value of the given function or
14
+ * undefined if there are no elements.
15
+ *
16
+ * @example Basic usage
17
+ * ```ts
18
+ * import { maxBy } from "@std/collections/max-by";
19
+ * import { assertEquals } from "@std/assert";
20
+ *
21
+ * const people = [
22
+ * { name: "Anna", age: 34 },
23
+ * { name: "Kim", age: 42 },
24
+ * { name: "John", age: 23 },
25
+ * ];
26
+ *
27
+ * const personWithMaxAge = maxBy(people, (person) => person.age);
28
+ *
29
+ * assertEquals(personWithMaxAge, { name: "Kim", age: 42 });
30
+ * ```
31
+ */
32
+ export function maxBy<T>(
33
+ array: Iterable<T>,
34
+ selector: (el: T) => number,
35
+ ): T | undefined;
36
+ /**
37
+ * Returns the first element that is the largest value of the given function or
38
+ * undefined if there are no elements.
39
+ *
40
+ * @typeParam T The type of the elements in the array.
41
+ *
42
+ * @param array The array to find the maximum element in.
43
+ * @param selector The function to get the value to compare from each element.
44
+ *
45
+ * @returns The first element that is the largest value of the given function or
46
+ * undefined if there are no elements.
47
+ *
48
+ * @example Basic usage
49
+ * ```ts
50
+ * import { maxBy } from "@std/collections/max-by";
51
+ * import { assertEquals } from "@std/assert";
52
+ *
53
+ * const people = [
54
+ * { name: "Anna" },
55
+ * { name: "Kim" },
56
+ * { name: "John" },
57
+ * ];
58
+ *
59
+ * const personWithMaxName = maxBy(people, (person) => person.name);
60
+ *
61
+ * assertEquals(personWithMaxName, { name: "Kim" });
62
+ * ```
63
+ */
64
+ export function maxBy<T>(
65
+ array: Iterable<T>,
66
+ selector: (el: T) => string,
67
+ ): T | undefined;
68
+ /**
69
+ * Returns the first element that is the largest value of the given function or
70
+ * undefined if there are no elements.
71
+ *
72
+ * @typeParam T The type of the elements in the array.
73
+ *
74
+ * @param array The array to find the maximum element in.
75
+ * @param selector The function to get the value to compare from each element.
76
+ *
77
+ * @returns The first element that is the largest value of the given function or
78
+ * undefined if there are no elements.
79
+ *
80
+ * @example Basic usage
81
+ * ```ts
82
+ * import { maxBy } from "@std/collections/max-by";
83
+ * import { assertEquals } from "@std/assert";
84
+ *
85
+ * const people = [
86
+ * { name: "Anna", age: 34n },
87
+ * { name: "Kim", age: 42n },
88
+ * { name: "John", age: 23n },
89
+ * ];
90
+ *
91
+ * const personWithMaxAge = maxBy(people, (person) => person.age);
92
+ *
93
+ * assertEquals(personWithMaxAge, { name: "Kim", age: 42n });
94
+ * ```
95
+ */
96
+ export function maxBy<T>(
97
+ array: Iterable<T>,
98
+ selector: (el: T) => bigint,
99
+ ): T | undefined;
100
+ /**
101
+ * Returns the first element that is the largest value of the given function or
102
+ * undefined if there are no elements.
103
+ *
104
+ * @typeParam T The type of the elements in the array.
105
+ *
106
+ * @param array The array to find the maximum element in.
107
+ * @param selector The function to get the value to compare from each element.
108
+ *
109
+ * @returns The first element that is the largest value of the given function or
110
+ * undefined if there are no elements.
111
+ *
112
+ * @example Basic usage
113
+ * ```ts
114
+ * import { maxBy } from "@std/collections/max-by";
115
+ * import { assertEquals } from "@std/assert";
116
+ *
117
+ * const people = [
118
+ * { name: "Anna", startedAt: new Date("2020-01-01") },
119
+ * { name: "Kim", startedAt: new Date("2021-03-01") },
120
+ * { name: "John", startedAt: new Date("2020-03-01") },
121
+ * ];
122
+ *
123
+ * const personWithLastStartedAt = maxBy(people, (person) => person.startedAt);
124
+ *
125
+ * assertEquals(personWithLastStartedAt, { name: "Kim", startedAt: new Date("2021-03-01") });
126
+ * ```
127
+ */
128
+ export function maxBy<T>(
129
+ array: Iterable<T>,
130
+ selector: (el: T) => Date,
131
+ ): T | undefined;
132
+ export function maxBy<T>(
133
+ array: Iterable<T>,
134
+ selector:
135
+ | ((el: T) => number)
136
+ | ((el: T) => string)
137
+ | ((el: T) => bigint)
138
+ | ((el: T) => Date),
139
+ ): T | undefined {
140
+ let max: T | undefined;
141
+ let maxValue: ReturnType<typeof selector> | undefined;
142
+
143
+ for (const current of array) {
144
+ const currentValue = selector(current);
145
+
146
+ if (maxValue === undefined || currentValue > maxValue) {
147
+ max = current;
148
+ maxValue = currentValue;
149
+ }
150
+ }
151
+
152
+ return max;
153
+ }
@@ -0,0 +1,90 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Applies the given selector to all elements of the provided collection and
6
+ * returns the max value of all elements. If an empty array is provided the
7
+ * function will return undefined.
8
+ *
9
+ * @typeParam T The type of the elements in the array.
10
+ *
11
+ * @param array The array to find the maximum element in.
12
+ * @param selector The function to get the value to compare from each element.
13
+ *
14
+ * @returns The largest value of the given function or undefined if there are no
15
+ * elements.
16
+ *
17
+ * @example Basic usage
18
+ * ```ts
19
+ * import { maxOf } from "@std/collections/max-of";
20
+ * import { assertEquals } from "@std/assert";
21
+ *
22
+ * const inventory = [
23
+ * { name: "mustard", count: 2 },
24
+ * { name: "soy", count: 4 },
25
+ * { name: "tomato", count: 32 },
26
+ * ];
27
+ *
28
+ * const maxCount = maxOf(inventory, (item) => item.count);
29
+ *
30
+ * assertEquals(maxCount, 32);
31
+ * ```
32
+ */
33
+ export function maxOf<T>(
34
+ array: Iterable<T>,
35
+ selector: (el: T) => number,
36
+ ): number | undefined;
37
+ /**
38
+ * Applies the given selector to all elements of the provided collection and
39
+ * returns the max value of all elements. If an empty array is provided the
40
+ * function will return undefined.
41
+ *
42
+ * @typeParam T The type of the elements in the array.
43
+ *
44
+ * @param array The array to find the maximum element in.
45
+ * @param selector The function to get the value to compare from each element.
46
+ *
47
+ * @returns The first element that is the largest value of the given function or
48
+ * undefined if there are no elements.
49
+ *
50
+ * @example Basic usage
51
+ * ```ts
52
+ * import { maxOf } from "@std/collections/max-of";
53
+ * import { assertEquals } from "@std/assert";
54
+ *
55
+ * const inventory = [
56
+ * { name: "mustard", count: 2n },
57
+ * { name: "soy", count: 4n },
58
+ * { name: "tomato", count: 32n },
59
+ * ];
60
+ *
61
+ * const maxCount = maxOf(inventory, (i) => i.count);
62
+ *
63
+ * assertEquals(maxCount, 32n);
64
+ * ```
65
+ */
66
+ export function maxOf<T>(
67
+ array: Iterable<T>,
68
+ selector: (el: T) => bigint,
69
+ ): bigint | undefined;
70
+ export function maxOf<T, S extends ((el: T) => number) | ((el: T) => bigint)>(
71
+ array: Iterable<T>,
72
+ selector: S,
73
+ ): ReturnType<S> | undefined {
74
+ let maximumValue: ReturnType<S> | undefined;
75
+
76
+ for (const element of array) {
77
+ const currentValue = selector(element) as ReturnType<S>;
78
+
79
+ if (maximumValue === undefined || currentValue > maximumValue) {
80
+ maximumValue = currentValue;
81
+ continue;
82
+ }
83
+
84
+ if (Number.isNaN(currentValue)) {
85
+ return currentValue;
86
+ }
87
+ }
88
+
89
+ return maximumValue;
90
+ }
@@ -0,0 +1,46 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Returns the first element having the largest value according to the provided
6
+ * comparator or undefined if there are no elements.
7
+ *
8
+ * The comparator is expected to work exactly like one passed to `Array.sort`,
9
+ * which means that `comparator(a, b)` should return a negative number if
10
+ * `a < b`, a positive number if `a > b` and `0` if `a === b`.
11
+ *
12
+ * @typeParam T The type of the elements in the array.
13
+ *
14
+ * @param array The array to find the maximum element in.
15
+ * @param comparator The function to compare elements.
16
+ *
17
+ * @returns The first element that is the largest value of the given function or
18
+ * undefined if there are no elements.
19
+ *
20
+ * @example Basic usage
21
+ * ```ts
22
+ * import { maxWith } from "@std/collections/max-with";
23
+ * import { assertEquals } from "@std/assert";
24
+ *
25
+ * const people = ["Kim", "Anna", "John", "Arthur"];
26
+ * const largestName = maxWith(people, (a, b) => a.length - b.length);
27
+ *
28
+ * assertEquals(largestName, "Arthur");
29
+ * ```
30
+ */
31
+ export function maxWith<T>(
32
+ array: Iterable<T>,
33
+ comparator: (a: T, b: T) => number,
34
+ ): T | undefined {
35
+ let max: T | undefined;
36
+ let isFirst = true;
37
+
38
+ for (const current of array) {
39
+ if (isFirst || comparator(current, <T> max) > 0) {
40
+ max = current;
41
+ isFirst = false;
42
+ }
43
+ }
44
+
45
+ return max;
46
+ }
@@ -0,0 +1,151 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Returns the first element that is the smallest value of the given function or
6
+ * undefined if there are no elements.
7
+ *
8
+ * @typeParam T The type of the elements in the array.
9
+ *
10
+ * @param array The array to find the minimum element in.
11
+ * @param selector The function to get the value to compare from each element.
12
+ *
13
+ * @returns The first element that is the smallest value of the given function
14
+ * or undefined if there are no elements.
15
+ *
16
+ * @example Basic usage
17
+ * ```ts
18
+ * import { minBy } from "@std/collections/min-by";
19
+ * import { assertEquals } from "@std/assert";
20
+ *
21
+ * const people = [
22
+ * { name: "Anna", age: 34 },
23
+ * { name: "Kim", age: 42 },
24
+ * { name: "John", age: 23 },
25
+ * ];
26
+ *
27
+ * const personWithMinAge = minBy(people, (i) => i.age);
28
+ *
29
+ * assertEquals(personWithMinAge, { name: "John", age: 23 });
30
+ * ```
31
+ */
32
+ export function minBy<T>(
33
+ array: Iterable<T>,
34
+ selector: (el: T) => number,
35
+ ): T | undefined;
36
+ /**
37
+ * Returns the first element that is the smallest value of the given function or
38
+ * undefined if there are no elements.
39
+ *
40
+ * @typeParam T The type of the elements in the array.
41
+ *
42
+ * @param array The array to find the minimum element in.
43
+ * @param selector The function to get the value to compare from each element.
44
+ *
45
+ * @returns The first element that is the smallest value of the given function
46
+ * or undefined if there are no elements.
47
+ *
48
+ * @example Basic usage
49
+ * ```ts
50
+ * import { minBy } from "@std/collections/min-by";
51
+ * import { assertEquals } from "@std/assert";
52
+ *
53
+ * const people = [
54
+ * { name: "Anna" },
55
+ * { name: "Kim" },
56
+ * { name: "John" },
57
+ * ];
58
+ *
59
+ * const personWithMinName = minBy(people, (person) => person.name);
60
+ *
61
+ * assertEquals(personWithMinName, { name: "Anna" });
62
+ * ```
63
+ */
64
+ export function minBy<T>(
65
+ array: Iterable<T>,
66
+ selector: (el: T) => string,
67
+ ): T | undefined;
68
+ /**
69
+ * Returns the first element that is the smallest value of the given function or
70
+ * undefined if there are no elements.
71
+ *
72
+ * @typeParam T The type of the elements in the array.
73
+ *
74
+ * @param array The array to find the minimum element in.
75
+ * @param selector The function to get the value to compare from each element.
76
+ *
77
+ * @returns The first element that is the smallest value of the given function
78
+ * or undefined if there are no elements.
79
+ *
80
+ * @example Basic usage
81
+ * ```ts
82
+ * import { minBy } from "@std/collections/min-by";
83
+ * import { assertEquals } from "@std/assert";
84
+ *
85
+ * const people = [
86
+ * { name: "Anna", age: 34n },
87
+ * { name: "Kim", age: 42n },
88
+ * { name: "John", age: 23n },
89
+ * ];
90
+ *
91
+ * const personWithMinAge = minBy(people, (i) => i.age);
92
+ *
93
+ * assertEquals(personWithMinAge, { name: "John", age: 23n });
94
+ * ```
95
+ */
96
+ export function minBy<T>(
97
+ array: Iterable<T>,
98
+ selector: (el: T) => bigint,
99
+ ): T | undefined;
100
+ /**
101
+ * Returns the first element that is the smallest value of the given function or
102
+ * undefined if there are no elements.
103
+ *
104
+ * @typeParam T The type of the elements in the array.
105
+ *
106
+ * @param array The array to find the minimum element in.
107
+ * @param selector The function to get the value to compare from each element.
108
+ *
109
+ * @returns The first element that is the smallest value of the given function
110
+ * or undefined if there are no elements.
111
+ *
112
+ * @example Basic usage
113
+ * ```ts
114
+ * import { minBy } from "@std/collections/min-by";
115
+ * import { assertEquals } from "@std/assert";
116
+ *
117
+ * const people = [
118
+ * { name: "Anna", startedAt: new Date("2020-01-01") },
119
+ * { name: "Kim", startedAt: new Date("2020-03-01") },
120
+ * { name: "John", startedAt: new Date("2019-01-01") },
121
+ * ];
122
+ *
123
+ * const personWithMinStartedAt = minBy(people, (person) => person.startedAt);
124
+ * ```
125
+ */
126
+ export function minBy<T>(
127
+ array: Iterable<T>,
128
+ selector: (el: T) => Date,
129
+ ): T | undefined;
130
+ export function minBy<T>(
131
+ array: Iterable<T>,
132
+ selector:
133
+ | ((el: T) => number)
134
+ | ((el: T) => string)
135
+ | ((el: T) => bigint)
136
+ | ((el: T) => Date),
137
+ ): T | undefined {
138
+ let min: T | undefined;
139
+ let minValue: ReturnType<typeof selector> | undefined;
140
+
141
+ for (const current of array) {
142
+ const currentValue = selector(current);
143
+
144
+ if (minValue === undefined || currentValue < minValue) {
145
+ min = current;
146
+ minValue = currentValue;
147
+ }
148
+ }
149
+
150
+ return min;
151
+ }