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,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 given collection and
6
+ * returns the min 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 minimum element in.
12
+ * @param selector The function to get the value to compare from each element.
13
+ *
14
+ * @returns The smallest value of the given function or undefined if there are
15
+ * no elements.
16
+ *
17
+ * @example Basic usage
18
+ * ```ts
19
+ * import { minOf } from "@std/collections/min-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 minCount = minOf(inventory, (item) => item.count);
29
+ *
30
+ * assertEquals(minCount, 2);
31
+ * ```
32
+ */
33
+ export function minOf<T>(
34
+ array: Iterable<T>,
35
+ selector: (el: T) => number,
36
+ ): number | undefined;
37
+ /**
38
+ * Applies the given selector to all elements of the given collection and
39
+ * returns the min 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 minimum 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 smallest value of the given function
48
+ * or undefined if there are no elements.
49
+ *
50
+ * @example Basic usage
51
+ * ```ts
52
+ * import { minOf } from "@std/collections/min-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 minCount = minOf(inventory, (item) => item.count);
62
+ *
63
+ * assertEquals(minCount, 2n);
64
+ * ```
65
+ */
66
+ export function minOf<T>(
67
+ array: Iterable<T>,
68
+ selector: (el: T) => bigint,
69
+ ): bigint | undefined;
70
+ export function minOf<T, S extends ((el: T) => number) | ((el: T) => bigint)>(
71
+ array: Iterable<T>,
72
+ selector: S,
73
+ ): ReturnType<S> | undefined {
74
+ let minimumValue: ReturnType<S> | undefined;
75
+
76
+ for (const element of array) {
77
+ const currentValue = selector(element) as ReturnType<S>;
78
+
79
+ if (minimumValue === undefined || currentValue < minimumValue) {
80
+ minimumValue = currentValue;
81
+ continue;
82
+ }
83
+
84
+ if (Number.isNaN(currentValue)) {
85
+ return currentValue;
86
+ }
87
+ }
88
+
89
+ return minimumValue;
90
+ }
@@ -0,0 +1,42 @@
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 smallest value according to the provided
6
+ * comparator or 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 comparator The function to compare elements.
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 { minWith } from "@std/collections/min-with";
19
+ * import { assertEquals } from "@std/assert";
20
+ *
21
+ * const people = ["Kim", "Anna", "John"];
22
+ * const smallestName = minWith(people, (a, b) => a.length - b.length);
23
+ *
24
+ * assertEquals(smallestName, "Kim");
25
+ * ```
26
+ */
27
+ export function minWith<T>(
28
+ array: Iterable<T>,
29
+ comparator: (a: T, b: T) => number,
30
+ ): T | undefined {
31
+ let min: T | undefined;
32
+ let isFirst = true;
33
+
34
+ for (const current of array) {
35
+ if (isFirst || comparator(current, <T> min) < 0) {
36
+ min = current;
37
+ isFirst = false;
38
+ }
39
+ }
40
+
41
+ return min;
42
+ }
@@ -0,0 +1,76 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Pure functions for common tasks around collection types like arrays and
6
+ * objects.
7
+ *
8
+ * Inspired by
9
+ * {@link https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/ | Kotlin's Collections}
10
+ * package and {@link https://lodash.com/ | Lodash}.
11
+ *
12
+ * ```ts
13
+ * import { intersect, sample, pick } from "@std/collections";
14
+ * import { assertEquals, assertArrayIncludes } from "@std/assert";
15
+ *
16
+ * const lisaInterests = ["Cooking", "Music", "Hiking"];
17
+ * const kimInterests = ["Music", "Tennis", "Cooking"];
18
+ *
19
+ * assertEquals(intersect(lisaInterests, kimInterests), ["Cooking", "Music"]);
20
+ *
21
+ * assertArrayIncludes(lisaInterests, [sample(lisaInterests)]);
22
+ *
23
+ * const cat = { name: "Lulu", age: 3, breed: "Ragdoll" };
24
+ *
25
+ * assertEquals(pick(cat, ["name", "breed"]), { name: "Lulu", breed: "Ragdoll"});
26
+ * ```
27
+ *
28
+ * @module
29
+ */
30
+
31
+ export * from "./aggregate_groups.js";
32
+ export * from "./associate_by.js";
33
+ export * from "./associate_with.js";
34
+ export * from "./chunk.js";
35
+ export * from "./deep_merge.js";
36
+ export * from "./distinct.js";
37
+ export * from "./distinct_by.js";
38
+ export * from "./drop_last_while.js";
39
+ export * from "./drop_while.js";
40
+ export * from "./filter_entries.js";
41
+ export * from "./filter_keys.js";
42
+ export * from "./filter_values.js";
43
+ export * from "./find_single.js";
44
+ export * from "./first_not_nullish_of.js";
45
+ export * from "./includes_value.js";
46
+ export * from "./intersect.js";
47
+ export * from "./invert_by.js";
48
+ export * from "./invert.js";
49
+ export * from "./join_to_string.js";
50
+ export * from "./map_entries.js";
51
+ export * from "./map_keys.js";
52
+ export * from "./map_not_nullish.js";
53
+ export * from "./map_values.js";
54
+ export * from "./max_by.js";
55
+ export * from "./max_of.js";
56
+ export * from "./max_with.js";
57
+ export * from "./min_by.js";
58
+ export * from "./min_of.js";
59
+ export * from "./min_with.js";
60
+ export * from "./omit.js";
61
+ export * from "./partition.js";
62
+ export * from "./partition_entries.js";
63
+ export * from "./permutations.js";
64
+ export * from "./pick.js";
65
+ export * from "./reduce_groups.js";
66
+ export * from "./running_reduce.js";
67
+ export * from "./sample.js";
68
+ export * from "./sliding_windows.js";
69
+ export * from "./sort_by.js";
70
+ export * from "./sum_of.js";
71
+ export * from "./take_last_while.js";
72
+ export * from "./take_while.js";
73
+ export * from "./union.js";
74
+ export * from "./unzip.js";
75
+ export * from "./without_all.js";
76
+ export * from "./zip.js";
@@ -0,0 +1,34 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Creates a new object by excluding the specified keys from the provided object.
6
+ *
7
+ * @typeParam T The type of the object.
8
+ * @typeParam K The type of the keys to omit.
9
+ *
10
+ * @param obj The object to omit keys from.
11
+ * @param keys The keys to omit from the object.
12
+ *
13
+ * @returns A new object with the specified keys omitted.
14
+ *
15
+ * @example Basic usage
16
+ * ```ts
17
+ * import { omit } from "@std/collections/omit";
18
+ * import { assertEquals } from "@std/assert";
19
+ *
20
+ * const obj = { a: 5, b: 6, c: 7, d: 8 };
21
+ * const omitted = omit(obj, ["a", "c"]);
22
+ *
23
+ * assertEquals(omitted, { b: 6, d: 8 });
24
+ * ```
25
+ */
26
+ export function omit<T extends object, K extends keyof T>(
27
+ obj: Readonly<T>,
28
+ keys: readonly K[],
29
+ ): Omit<T, K> {
30
+ const excludes = new Set(keys);
31
+ return Object.fromEntries(
32
+ Object.entries(obj).filter(([k, _]) => !excludes.has(k as K)),
33
+ ) as Omit<T, K>;
34
+ }
@@ -0,0 +1,85 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Returns a tuple of two arrays with the first one containing all elements in
6
+ * the given array that match the given predicate and the second one containing
7
+ * all that do not.
8
+ *
9
+ * @typeParam T The type of the elements in the array.
10
+ *
11
+ * @param array The array to partition.
12
+ * @param predicate The predicate function to determine which array an element
13
+ * belongs to.
14
+ *
15
+ * @returns A tuple of two arrays. The first array contains all elements that
16
+ * match the predicate, the second contains all elements that do not.
17
+ *
18
+ * @example Basic usage
19
+ * ```ts
20
+ * import { partition } from "@std/collections/partition";
21
+ * import { assertEquals } from "@std/assert";
22
+ *
23
+ * const numbers = [5, 6, 7, 8, 9];
24
+ * const [even, odd] = partition(numbers, (it) => it % 2 === 0);
25
+ *
26
+ * assertEquals(even, [6, 8]);
27
+ * assertEquals(odd, [5, 7, 9]);
28
+ * ```
29
+ */
30
+ export function partition<T>(
31
+ array: Iterable<T>,
32
+ predicate: (el: T) => boolean,
33
+ ): [T[], T[]];
34
+ /**
35
+ * Returns a tuple of two arrays with the first one containing all elements in
36
+ * the given array that match the given predicate and the second one containing
37
+ * all that do not.
38
+ *
39
+ * This version of the function is a type-guard version of the function. It
40
+ * allows you to specify a type-guard predicate function that narrows the type
41
+ * of the elements in the array.
42
+ *
43
+ * @typeParam T The type of the elements in the array.
44
+ * @typeParam U The type of the elements that match the predicate.
45
+ *
46
+ * @param array The array to partition.
47
+ * @param predicate The type-guard predicate function to determine which array
48
+ * an element belongs to.
49
+ *
50
+ * @returns A tuple of two arrays. The first array contains all elements that
51
+ * match the predicate, the second contains all elements that do not.
52
+ *
53
+ * @example Basic usage
54
+ * ```ts
55
+ * import { partition } from "@std/collections/partition";
56
+ * import { assertEquals } from "@std/assert";
57
+ *
58
+ * const numbers = [5, 6, 7, 8, 9];
59
+ * const [even, odd] = partition(numbers, (it) => it % 2 === 0);
60
+ *
61
+ * assertEquals(even, [6, 8]);
62
+ * assertEquals(odd, [5, 7, 9]);
63
+ * ```
64
+ */
65
+ export function partition<T, U extends T>(
66
+ array: Iterable<T>,
67
+ predicate: (el: T) => el is U,
68
+ ): [U[], Exclude<T, U>[]];
69
+ export function partition(
70
+ array: Iterable<unknown>,
71
+ predicate: (el: unknown) => boolean,
72
+ ): [unknown[], unknown[]] {
73
+ const matches: Array<unknown> = [];
74
+ const rest: Array<unknown> = [];
75
+
76
+ for (const element of array) {
77
+ if (predicate(element)) {
78
+ matches.push(element);
79
+ } else {
80
+ rest.push(element);
81
+ }
82
+ }
83
+
84
+ return [matches, rest];
85
+ }
@@ -0,0 +1,58 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Returns a tuple of two records with the first one containing all entries of
6
+ * the given record that match the given predicate and the second one containing
7
+ * all that do not.
8
+ *
9
+ * @typeParam T The type of the values in the record.
10
+ *
11
+ * @param record The record to partition.
12
+ * @param predicate The predicate function to determine which entries go where.
13
+ *
14
+ * @returns A tuple containing two records, the first one containing all entries
15
+ * that match the predicate and the second one containing all that do not.
16
+ *
17
+ * @example Basic usage
18
+ * ```ts
19
+ * import { partitionEntries } from "@std/collections/partition-entries";
20
+ * import { assertEquals } from "@std/assert";
21
+ *
22
+ * const menu = {
23
+ * Salad: 11,
24
+ * Soup: 8,
25
+ * Pasta: 13,
26
+ * };
27
+ * const myOptions = partitionEntries(
28
+ * menu,
29
+ * ([item, price]) => item !== "Pasta" && price < 10,
30
+ * );
31
+ *
32
+ * assertEquals(
33
+ * myOptions,
34
+ * [
35
+ * { Soup: 8 },
36
+ * { Salad: 11, Pasta: 13 },
37
+ * ],
38
+ * );
39
+ * ```
40
+ */
41
+ export function partitionEntries<T>(
42
+ record: Readonly<Record<string, T>>,
43
+ predicate: (entry: [string, T]) => boolean,
44
+ ): [match: Record<string, T>, rest: Record<string, T>] {
45
+ const match: Record<string, T> = {};
46
+ const rest: Record<string, T> = {};
47
+ const entries = Object.entries(record);
48
+
49
+ for (const [key, value] of entries) {
50
+ if (predicate([key, value])) {
51
+ match[key] = value;
52
+ } else {
53
+ rest[key] = value;
54
+ }
55
+ }
56
+
57
+ return [match, rest];
58
+ }
@@ -0,0 +1,66 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Builds all possible orders of all elements in the given array
6
+ * Ignores equality of elements, meaning this will always return the same
7
+ * number of permutations for a given length of input.
8
+ *
9
+ * @typeParam T The type of the elements in the array.
10
+ *
11
+ * @param inputArray The array to build permutations from.
12
+ *
13
+ * @returns An array of all possible permutations of the given array.
14
+ *
15
+ * @example Basic usage
16
+ * ```ts
17
+ * import { permutations } from "@std/collections/permutations";
18
+ * import { assertEquals } from "@std/assert";
19
+ *
20
+ * const numbers = [ 1, 2 ];
21
+ * const windows = permutations(numbers);
22
+ *
23
+ * assertEquals(windows, [
24
+ * [ 1, 2 ],
25
+ * [ 2, 1 ],
26
+ * ]);
27
+ * ```
28
+ */
29
+ export function permutations<T>(inputArray: Iterable<T>): T[][] {
30
+ const result: T[][] = [];
31
+
32
+ const array = [...inputArray];
33
+
34
+ const k = array.length;
35
+
36
+ if (k === 0) {
37
+ return result;
38
+ }
39
+
40
+ // Heap's Algorithm
41
+ const c = new Array<number>(k).fill(0);
42
+
43
+ result.push([...array]);
44
+
45
+ let i = 1;
46
+
47
+ while (i < k) {
48
+ if (c[i]! < i) {
49
+ if (i % 2 === 0) {
50
+ [array[0], array[i]] = [array[i], array[0]] as [T, T];
51
+ } else {
52
+ [array[c[i]!], array[i]] = [array[i], array[c[i]!]] as [T, T];
53
+ }
54
+
55
+ result.push([...array]);
56
+
57
+ c[i]! += 1;
58
+ i = 1;
59
+ } else {
60
+ c[i] = 0;
61
+ i += 1;
62
+ }
63
+ }
64
+
65
+ return result;
66
+ }
@@ -0,0 +1,34 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Creates a new object by including the specified keys from the provided
6
+ * object.
7
+ *
8
+ * @typeParam T The type of the object.
9
+ * @typeParam K The type of the keys.
10
+ *
11
+ * @param obj The object to pick keys from.
12
+ * @param keys The keys to include in the new object.
13
+ *
14
+ * @returns A new object with the specified keys from the provided object.
15
+ *
16
+ * @example Basic usage
17
+ * ```ts
18
+ * import { pick } from "@std/collections/pick";
19
+ * import { assertEquals } from "@std/assert";
20
+ *
21
+ * const obj = { a: 5, b: 6, c: 7, d: 8 };
22
+ * const picked = pick(obj, ["a", "c"]);
23
+ *
24
+ * assertEquals(picked, { a: 5, c: 7 });
25
+ * ```
26
+ */
27
+ export function pick<T extends object, K extends keyof T>(
28
+ obj: Readonly<T>,
29
+ keys: readonly K[],
30
+ ): Pick<T, K> {
31
+ const result = {} as Pick<T, K>;
32
+ for (const key of keys) if (key in obj) result[key] = obj[key];
33
+ return result;
34
+ }
@@ -0,0 +1,45 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ import { mapValues } from "./map_values.js";
5
+
6
+ /**
7
+ * Applies the given reducer to each group in the given grouping, returning the
8
+ * results together with the respective group keys.
9
+ *
10
+ * @typeParam T input type of an item in a group in the given grouping.
11
+ * @typeParam A type of the accumulator value, which will match the returned
12
+ * record's values.
13
+ *
14
+ * @param record The grouping to reduce.
15
+ * @param reducer The reducer function to apply to each group.
16
+ * @param initialValue The initial value of the accumulator.
17
+ *
18
+ * @returns A record with the same keys as the input grouping, where each value
19
+ * is the result of applying the reducer to the respective group.
20
+ *
21
+ * @example Basic usage
22
+ * ```ts
23
+ * import { reduceGroups } from "@std/collections/reduce-groups";
24
+ * import { assertEquals } from "@std/assert";
25
+ *
26
+ * const votes = {
27
+ * Woody: [2, 3, 1, 4],
28
+ * Buzz: [5, 9],
29
+ * };
30
+ *
31
+ * const totalVotes = reduceGroups(votes, (sum, vote) => sum + vote, 0);
32
+ *
33
+ * assertEquals(totalVotes, {
34
+ * Woody: 10,
35
+ * Buzz: 14,
36
+ * });
37
+ * ```
38
+ */
39
+ export function reduceGroups<T, A>(
40
+ record: Readonly<Record<string, ReadonlyArray<T>>>,
41
+ reducer: (accumulator: A, current: T) => A,
42
+ initialValue: A,
43
+ ): Record<string, A> {
44
+ return mapValues(record, (value) => value.reduce(reducer, initialValue));
45
+ }
@@ -0,0 +1,38 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Calls the given reducer on each element of the given collection, passing its
6
+ * result as the accumulator to the next respective call, starting with the
7
+ * given initialValue. Returns all intermediate accumulator results.
8
+ *
9
+ * @typeParam T The type of the elements in the array.
10
+ * @typeParam O The type of the accumulator.
11
+ *
12
+ * @param array The array to reduce.
13
+ * @param reducer The reducer function to apply to each element.
14
+ * @param initialValue The initial value of the accumulator.
15
+ *
16
+ * @returns An array of all intermediate accumulator results.
17
+ *
18
+ * @example Basic usage
19
+ * ```ts
20
+ * import { runningReduce } from "@std/collections/running-reduce";
21
+ * import { assertEquals } from "@std/assert";
22
+ *
23
+ * const numbers = [1, 2, 3, 4, 5];
24
+ * const sumSteps = runningReduce(numbers, (sum, current) => sum + current, 0);
25
+ *
26
+ * assertEquals(sumSteps, [1, 3, 6, 10, 15]);
27
+ * ```
28
+ */
29
+ export function runningReduce<T, O>(
30
+ array: readonly T[],
31
+ reducer: (accumulator: O, current: T, currentIndex: number) => O,
32
+ initialValue: O,
33
+ ): O[] {
34
+ let currentResult = initialValue;
35
+ return array.map((el, currentIndex) =>
36
+ currentResult = reducer(currentResult, el, currentIndex)
37
+ );
38
+ }
@@ -0,0 +1,36 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Produces a random number between the inclusive `lower` and `upper` bounds.
6
+ */
7
+ function randomInteger(lower: number, upper: number): number {
8
+ return lower + Math.floor(Math.random() * (upper - lower + 1));
9
+ }
10
+
11
+ /**
12
+ * Returns a random element from the given array.
13
+ *
14
+ * @typeParam T The type of the elements in the array.
15
+ * @typeParam O The type of the accumulator.
16
+ *
17
+ * @param array The array to sample from.
18
+ *
19
+ * @returns A random element from the given array, or `undefined` if the array
20
+ * is empty.
21
+ *
22
+ * @example Basic usage
23
+ * ```ts
24
+ * import { sample } from "@std/collections/sample";
25
+ * import { assertArrayIncludes } from "@std/assert";
26
+ *
27
+ * const numbers = [1, 2, 3, 4];
28
+ * const random = sample(numbers);
29
+ *
30
+ * assertArrayIncludes(numbers, [random]);
31
+ * ```
32
+ */
33
+ export function sample<T>(array: readonly T[]): T | undefined {
34
+ const length = array.length;
35
+ return length ? array[randomInteger(0, length - 1)] : undefined;
36
+ }
@@ -0,0 +1,86 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /** Options for {@linkcode slidingWindows}. */
5
+ export interface SlidingWindowsOptions {
6
+ /**
7
+ * If step is set, each window will start that many elements after the last
8
+ * window's start.
9
+ *
10
+ * @default {1}
11
+ */
12
+ step?: number;
13
+ /**
14
+ * If partial is set, windows will be generated for the last elements of the
15
+ * collection, resulting in some undefined values if size is greater than 1.
16
+ *
17
+ * @default {false}
18
+ */
19
+ partial?: boolean;
20
+ }
21
+
22
+ /**
23
+ * Generates sliding views of the given array of the given size and returns a
24
+ * new array containing all of them.
25
+ *
26
+ * If step is set, each window will start that many elements after the last
27
+ * window's start. (Default: 1)
28
+ *
29
+ * If partial is set, windows will be generated for the last elements of the
30
+ * collection, resulting in some undefined values if size is greater than 1.
31
+ *
32
+ * @typeParam T The type of the array elements.
33
+ *
34
+ * @param array The array to generate sliding windows from.
35
+ * @param size The size of the sliding windows.
36
+ * @param options The options for generating sliding windows.
37
+ *
38
+ * @returns A new array containing all sliding windows of the given size.
39
+ *
40
+ * @example Usage
41
+ * ```ts
42
+ * import { slidingWindows } from "@std/collections/sliding-windows";
43
+ * import { assertEquals } from "@std/assert";
44
+ * const numbers = [1, 2, 3, 4, 5];
45
+ *
46
+ * const windows = slidingWindows(numbers, 3);
47
+ * assertEquals(windows, [
48
+ * [1, 2, 3],
49
+ * [2, 3, 4],
50
+ * [3, 4, 5],
51
+ * ]);
52
+ *
53
+ * const windowsWithStep = slidingWindows(numbers, 3, { step: 2 });
54
+ * assertEquals(windowsWithStep, [
55
+ * [1, 2, 3],
56
+ * [3, 4, 5],
57
+ * ]);
58
+ *
59
+ * const windowsWithPartial = slidingWindows(numbers, 3, { partial: true });
60
+ * assertEquals(windowsWithPartial, [
61
+ * [1, 2, 3],
62
+ * [2, 3, 4],
63
+ * [3, 4, 5],
64
+ * [4, 5],
65
+ * [5],
66
+ * ]);
67
+ * ```
68
+ */
69
+ export function slidingWindows<T>(
70
+ array: readonly T[],
71
+ size: number,
72
+ options: SlidingWindowsOptions = {},
73
+ ): T[][] {
74
+ const { step = 1, partial = false } = options;
75
+
76
+ if (
77
+ !Number.isInteger(size) || !Number.isInteger(step) || size <= 0 || step <= 0
78
+ ) {
79
+ throw new RangeError("Both size and step must be positive integer.");
80
+ }
81
+
82
+ return Array.from(
83
+ { length: Math.floor((array.length - (partial ? 1 : size)) / step + 1) },
84
+ (_, i) => array.slice(i * step, i * step + size),
85
+ );
86
+ }