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,42 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Returns all elements in the given array that produce a distinct value using
6
+ * the given selector, preserving order by first occurrence.
7
+ *
8
+ * @typeParam T The type of the elements in the input array.
9
+ * @typeParam D The type of the values produced by the selector function.
10
+ *
11
+ * @param array The array to filter for distinct elements.
12
+ * @param selector The function to extract the value to compare for
13
+ * distinctness.
14
+ *
15
+ * @returns An array of distinct elements in the input array.
16
+ *
17
+ * @example Basic usage
18
+ * ```ts
19
+ * import { distinctBy } from "@std/collections/distinct-by";
20
+ * import { assertEquals } from "@std/assert";
21
+ *
22
+ * const names = ["Anna", "Kim", "Arnold", "Kate"];
23
+ * const exampleNamesByFirstLetter = distinctBy(names, (name) => name.charAt(0));
24
+ *
25
+ * assertEquals(exampleNamesByFirstLetter, ["Anna", "Kim"]);
26
+ * ```
27
+ */
28
+ export function distinctBy<T, D>(
29
+ array: Iterable<T>,
30
+ selector: (el: T) => D,
31
+ ): T[] {
32
+ const selectedValues = new Set<D>();
33
+ const result: T[] = [];
34
+ for (const element of array) {
35
+ const selected = selector(element);
36
+ if (!selectedValues.has(selected)) {
37
+ selectedValues.add(selected);
38
+ result.push(element);
39
+ }
40
+ }
41
+ return result;
42
+ }
@@ -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
+ * Returns a new array that drops all elements in the given collection until the
6
+ * last element that does not match the given predicate.
7
+ *
8
+ * @typeParam T The type of the elements in the input array.
9
+ *
10
+ * @param array The array to drop elements from.
11
+ * @param predicate The function to test each element for a condition.
12
+ *
13
+ * @returns A new array that drops all elements until the last element that does
14
+ * not match the given predicate.
15
+ *
16
+ * @example Basic usage
17
+ * ```ts
18
+ * import { dropLastWhile } from "@std/collections/drop-last-while";
19
+ * import { assertEquals } from "@std/assert";
20
+ *
21
+ * const numbers = [11, 42, 55, 20, 33, 44];
22
+ *
23
+ * const notFortyFour = dropLastWhile(numbers, (number) => number > 30);
24
+ *
25
+ * assertEquals(notFortyFour, [11, 42, 55, 20]);
26
+ * ```
27
+ */
28
+ export function dropLastWhile<T>(
29
+ array: readonly T[],
30
+ predicate: (el: T) => boolean,
31
+ ): T[] {
32
+ let offset = array.length;
33
+ while (0 < offset && predicate(array[offset - 1] as T)) offset--;
34
+
35
+ return array.slice(0, offset);
36
+ }
@@ -0,0 +1,39 @@
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 that drops all elements in the given collection until the
6
+ * first element that does not match the given predicate.
7
+ *
8
+ * @typeParam T The type of the elements in the input array.
9
+ *
10
+ * @param array The array to drop elements from.
11
+ * @param predicate The function to test each element for a condition.
12
+ *
13
+ * @returns A new array that drops all elements until the first element that
14
+ * does not match the given predicate.
15
+ *
16
+ * @example Basic usage
17
+ * ```ts
18
+ * import { dropWhile } from "@std/collections/drop-while";
19
+ * import { assertEquals } from "@std/assert";
20
+ *
21
+ * const numbers = [3, 2, 5, 2, 5];
22
+ * const dropWhileNumbers = dropWhile(numbers, (number) => number !== 2);
23
+ *
24
+ * assertEquals(dropWhileNumbers, [2, 5, 2, 5]);
25
+ * ```
26
+ */
27
+ export function dropWhile<T>(
28
+ array: readonly T[],
29
+ predicate: (el: T) => boolean,
30
+ ): T[] {
31
+ let offset = 0;
32
+ const length = array.length;
33
+
34
+ while (length > offset && predicate(array[offset] as T)) {
35
+ offset++;
36
+ }
37
+
38
+ return array.slice(offset, length);
39
+ }
@@ -0,0 +1,48 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Returns a new record with all entries of the given record except the ones
6
+ * that do not match the given predicate.
7
+ *
8
+ * @typeParam T The type of the values in the input record.
9
+ *
10
+ * @param record The record to filter entries from.
11
+ * @param predicate The function to test each entry for a condition.
12
+ *
13
+ * @returns A new record with all entries that match the given predicate.
14
+ *
15
+ * @example Basic usage
16
+ * ```ts
17
+ * import { filterEntries } from "@std/collections/filter-entries";
18
+ * import { assertEquals } from "@std/assert";
19
+ *
20
+ * const menu = {
21
+ * Salad: 11,
22
+ * Soup: 8,
23
+ * Pasta: 13,
24
+ * };
25
+ *
26
+ * const myOptions = filterEntries(
27
+ * menu,
28
+ * ([item, price]) => item !== "Pasta" && price < 10,
29
+ * );
30
+ *
31
+ * assertEquals(myOptions, { Soup: 8 });
32
+ * ```
33
+ */
34
+ export function filterEntries<T>(
35
+ record: Readonly<Record<string, T>>,
36
+ predicate: (entry: [string, T]) => boolean,
37
+ ): Record<string, T> {
38
+ const result: Record<string, T> = {};
39
+ const entries = Object.entries(record);
40
+
41
+ for (const [key, value] of entries) {
42
+ if (predicate([key, value])) {
43
+ result[key] = value;
44
+ }
45
+ }
46
+
47
+ return result;
48
+ }
@@ -0,0 +1,51 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Returns a new record with all entries of the given record except the ones that
6
+ * have a key that does not match the given predicate.
7
+ *
8
+ * @typeParam T The type of the values in the input record.
9
+ *
10
+ * @param record The record to filter keys from.
11
+ * @param predicate The function to test each key for a condition.
12
+ *
13
+ * @returns A new record with all entries that have a key that matches the given
14
+ * predicate.
15
+ *
16
+ * @example Basic usage
17
+ * ```ts
18
+ * import { filterKeys } from "@std/collections/filter-keys";
19
+ * import { assertEquals } from "@std/assert";
20
+ *
21
+ * const menu = {
22
+ * Salad: 11,
23
+ * Soup: 8,
24
+ * Pasta: 13,
25
+ * };
26
+ *
27
+ * const menuWithoutSalad = filterKeys(menu, (item) => item !== "Salad");
28
+ *
29
+ * assertEquals(
30
+ * menuWithoutSalad,
31
+ * {
32
+ * Soup: 8,
33
+ * Pasta: 13,
34
+ * },
35
+ * );
36
+ * ```
37
+ */
38
+ export function filterKeys<T>(
39
+ record: Readonly<Record<string, T>>,
40
+ predicate: (key: string) => boolean,
41
+ ): Record<string, T> {
42
+ const result: Record<string, T> = {};
43
+
44
+ for (const [key, value] of Object.entries(record)) {
45
+ if (predicate(key)) {
46
+ result[key] = value;
47
+ }
48
+ }
49
+
50
+ return result;
51
+ }
@@ -0,0 +1,51 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Returns a new record with all entries of the given record except the ones
6
+ * that have a value that does not match the given predicate.
7
+ *
8
+ * @typeParam T The type of the values in the input record.
9
+ *
10
+ * @param record The record to filter values from.
11
+ * @param predicate The function to test each value for a condition.
12
+ *
13
+ * @returns A new record with all entries that have a value that matches the
14
+ * given predicate.
15
+ *
16
+ * @example Basic usage
17
+ * ```ts
18
+ * import { filterValues } from "@std/collections/filter-values";
19
+ * import { assertEquals } from "@std/assert";
20
+ *
21
+ * const people = {
22
+ * Arnold: 37,
23
+ * Sarah: 7,
24
+ * Kim: 23,
25
+ * };
26
+ * const adults = filterValues(people, (person) => person >= 18);
27
+ *
28
+ * assertEquals(
29
+ * adults,
30
+ * {
31
+ * Arnold: 37,
32
+ * Kim: 23,
33
+ * },
34
+ * );
35
+ * ```
36
+ */
37
+ export function filterValues<T>(
38
+ record: Readonly<Record<string, T>>,
39
+ predicate: (value: T) => boolean,
40
+ ): Record<string, T> {
41
+ const result: Record<string, T> = {};
42
+ const entries = Object.entries(record);
43
+
44
+ for (const [key, value] of entries) {
45
+ if (predicate(value)) {
46
+ result[key] = value;
47
+ }
48
+ }
49
+
50
+ return result;
51
+ }
@@ -0,0 +1,48 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Returns an element if and only if that element is the only one matching the
6
+ * given condition. Returns `undefined` otherwise.
7
+ *
8
+ * @typeParam T The type of the elements in the input array.
9
+ *
10
+ * @param array The array to find a single element in.
11
+ * @param predicate The function to test each element for a condition.
12
+ *
13
+ * @returns The single element that matches the given condition or `undefined`
14
+ * if there are zero or more than one matching elements.
15
+ *
16
+ * @example Basic usage
17
+ * ```ts
18
+ * import { findSingle } from "@std/collections/find-single";
19
+ * import { assertEquals } from "@std/assert";
20
+ *
21
+ * const bookings = [
22
+ * { month: "January", active: false },
23
+ * { month: "March", active: false },
24
+ * { month: "June", active: true },
25
+ * ];
26
+ * const activeBooking = findSingle(bookings, (booking) => booking.active);
27
+ * const inactiveBooking = findSingle(bookings, (booking) => !booking.active);
28
+ *
29
+ * assertEquals(activeBooking, { month: "June", active: true });
30
+ * assertEquals(inactiveBooking, undefined); // There are two applicable items
31
+ * ```
32
+ */
33
+ export function findSingle<T>(
34
+ array: Iterable<T>,
35
+ predicate: (el: T) => boolean,
36
+ ): T | undefined {
37
+ let match: T | undefined;
38
+ let found = false;
39
+ for (const element of array) {
40
+ if (predicate(element)) {
41
+ if (found) return undefined;
42
+ found = true;
43
+ match = element;
44
+ }
45
+ }
46
+
47
+ return match;
48
+ }
@@ -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 selector to elements in the given array until a value is
6
+ * produced that is neither `null` nor `undefined` and returns that value.
7
+ * Returns `undefined` if no such value is produced.
8
+ *
9
+ * @typeParam T The type of the elements in the input array.
10
+ * @typeParam O The type of the value produced by the selector function.
11
+ *
12
+ * @param array The array to select a value from.
13
+ * @param selector The function to extract a value from an element.
14
+ *
15
+ * @returns The first non-`null` and non-`undefined` value produced by the
16
+ * selector function, or `undefined` if no such value is produced.
17
+ *
18
+ * @example Basic usage
19
+ * ```ts
20
+ * import { firstNotNullishOf } from "@std/collections/first-not-nullish-of";
21
+ * import { assertEquals } from "@std/assert";
22
+ *
23
+ * const tables = [
24
+ * { number: 11, order: null },
25
+ * { number: 12, order: "Soup" },
26
+ * { number: 13, order: "Salad" },
27
+ * ];
28
+ *
29
+ * const nextOrder = firstNotNullishOf(tables, (table) => table.order);
30
+ *
31
+ * assertEquals(nextOrder, "Soup");
32
+ * ```
33
+ */
34
+ export function firstNotNullishOf<T, O>(
35
+ array: Iterable<T>,
36
+ selector: (item: T) => O | undefined | null,
37
+ ): NonNullable<O> | undefined {
38
+ for (const current of array) {
39
+ const selected = selector(current);
40
+
41
+ if (selected !== null && selected !== undefined) {
42
+ return selected as NonNullable<O>;
43
+ }
44
+ }
45
+
46
+ return undefined;
47
+ }
@@ -0,0 +1,45 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Returns true if the given value is part of the given object, otherwise it
6
+ * returns false.
7
+ *
8
+ * Note: this doesn't work with non-primitive values. For example,
9
+ * `includesValue({x: {}}, {})` returns false.
10
+ *
11
+ * @typeParam T The type of the values in the input record.
12
+ *
13
+ * @param record The record to check for the given value.
14
+ * @param value The value to check for in the record.
15
+ *
16
+ * @returns `true` if the value is part of the record, otherwise `false`.
17
+ *
18
+ * @example Basic usage
19
+ * ```ts
20
+ * import { includesValue } from "@std/collections/includes-value";
21
+ * import { assertEquals } from "@std/assert";
22
+ *
23
+ * const input = {
24
+ * first: 33,
25
+ * second: 34,
26
+ * };
27
+ *
28
+ * assertEquals(includesValue(input, 34), true);
29
+ * ```
30
+ */
31
+ export function includesValue<T>(
32
+ record: Readonly<Record<string, T>>,
33
+ value: T,
34
+ ): boolean {
35
+ for (const i in record) {
36
+ if (
37
+ Object.hasOwn(record, i) &&
38
+ (record[i] === value || Number.isNaN(value) && Number.isNaN(record[i]))
39
+ ) {
40
+ return true;
41
+ }
42
+ }
43
+
44
+ return false;
45
+ }
@@ -0,0 +1,35 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Returns all distinct elements that appear at least once in each of the given
6
+ * arrays.
7
+ *
8
+ * @typeParam T The type of the elements in the input arrays.
9
+ *
10
+ * @param arrays The arrays to intersect.
11
+ *
12
+ * @returns An array of distinct elements that appear at least once in each of
13
+ * the given arrays.
14
+ *
15
+ * @example Basic usage
16
+ * ```ts
17
+ * import { intersect } from "@std/collections/intersect";
18
+ * import { assertEquals } from "@std/assert";
19
+ *
20
+ * const lisaInterests = ["Cooking", "Music", "Hiking"];
21
+ * const kimInterests = ["Music", "Tennis", "Cooking"];
22
+ * const commonInterests = intersect(lisaInterests, kimInterests);
23
+ *
24
+ * assertEquals(commonInterests, ["Cooking", "Music"]);
25
+ * ```
26
+ */
27
+ export function intersect<T>(...arrays: (readonly T[])[]): T[] {
28
+ const [array, ...otherArrays] = arrays;
29
+ let set = new Set(array);
30
+ for (const array of otherArrays) {
31
+ set = set.intersection(new Set(array));
32
+ if (set.size === 0) break;
33
+ }
34
+ return [...set];
35
+ }
@@ -0,0 +1,38 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /** Return type for {@linkcode invert}. */
5
+ export type InvertResult<T extends Record<PropertyKey, PropertyKey>> = {
6
+ [P in keyof T as T[P]]: P;
7
+ };
8
+
9
+ /**
10
+ * Composes a new record with all keys and values inverted.
11
+ *
12
+ * If the record contains duplicate values, subsequent values overwrite property
13
+ * assignments of previous values. If the record contains values which aren't
14
+ * {@linkcode PropertyKey}s their string representation is used as the key.
15
+ *
16
+ * @typeParam T The type of the input record.
17
+ *
18
+ * @param record The record to invert.
19
+ *
20
+ * @returns A new record with all keys and values inverted.
21
+ *
22
+ * @example Basic usage
23
+ * ```ts
24
+ * import { invert } from "@std/collections/invert";
25
+ * import { assertEquals } from "@std/assert";
26
+ *
27
+ * const record = { a: "x", b: "y", c: "z" };
28
+ *
29
+ * assertEquals(invert(record), { x: "a", y: "b", z: "c" });
30
+ * ```
31
+ */
32
+ export function invert<T extends Record<PropertyKey, PropertyKey>>(
33
+ record: Readonly<T>,
34
+ ): InvertResult<T> {
35
+ return Object.fromEntries(
36
+ Object.entries(record).map(([key, value]) => [value, key]),
37
+ );
38
+ }
@@ -0,0 +1,56 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /** Return type for {@linkcode invertBy}. */
5
+ export type InvertByResult<
6
+ T extends Record<PropertyKey, PropertyKey>,
7
+ K extends keyof T,
8
+ > = Record<PropertyKey, K[]>;
9
+
10
+ /**
11
+ * Composes a new record with all keys and values inverted.
12
+ *
13
+ * The new record is generated from the result of running each element of the
14
+ * input record through the given transformer function.
15
+ *
16
+ * The corresponding inverted value of each inverted key is an array of keys
17
+ * responsible for generating the inverted value.
18
+ *
19
+ * @typeParam R The type of the input record.
20
+ * @typeParam T The type of the iterator function.
21
+ *
22
+ * @param record The record to invert.
23
+ * @param transformer The function to transform keys.
24
+ *
25
+ * @returns A new record with all keys and values inverted.
26
+ *
27
+ * @example Basic usage
28
+ * ```ts
29
+ * import { invertBy } from "@std/collections/invert-by";
30
+ * import { assertEquals } from "@std/assert";
31
+ *
32
+ * const record = { a: "x", b: "y", c: "z" };
33
+ *
34
+ * assertEquals(
35
+ * invertBy(record, (key) => String(key).toUpperCase()),
36
+ * { X: ["a"], Y: ["b"], Z: ["c"] }
37
+ * );
38
+ * ```
39
+ */
40
+ export function invertBy<
41
+ R extends Record<PropertyKey, PropertyKey>,
42
+ T extends (key: PropertyKey) => PropertyKey,
43
+ >(record: Readonly<R>, transformer: T): InvertByResult<R, keyof R> {
44
+ const result = {} as InvertByResult<R, keyof R>;
45
+
46
+ for (const [key, value] of Object.entries(record)) {
47
+ const mappedKey = transformer(value);
48
+ if (!Object.hasOwn(result, mappedKey)) {
49
+ result[mappedKey] = [key];
50
+ } else {
51
+ result[mappedKey]!.push(key);
52
+ }
53
+ }
54
+
55
+ return result;
56
+ }
@@ -0,0 +1,109 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /** Options for {@linkcode joinToString}. */
5
+ export type JoinToStringOptions = {
6
+ /**
7
+ * The string to use as a separator between the elements.
8
+ *
9
+ * @default {","}
10
+ */
11
+ separator?: string;
12
+ /**
13
+ * The string to use as a prefix for the resulting string.
14
+ *
15
+ * @default {""}
16
+ */
17
+ prefix?: string;
18
+ /**
19
+ * The string to use as a suffix for the resulting string.
20
+ *
21
+ * @default {""}
22
+ */
23
+ suffix?: string;
24
+ /**
25
+ * The maximum number of elements to append. If the value is negative, all
26
+ * elements will be appended, which is the default.
27
+ *
28
+ * @default {-1}
29
+ */
30
+ limit?: number;
31
+ /**
32
+ * The string to use as a placeholder for the truncated elements.
33
+ *
34
+ * @default {"..."}
35
+ */
36
+ truncated?: string;
37
+ };
38
+
39
+ /**
40
+ * Transforms the elements in the given array to strings using the given
41
+ * selector. Joins the produced strings into one using the given `separator`
42
+ * and applying the given `prefix` and `suffix` to the whole string afterwards.
43
+ *
44
+ * If the array could be huge, you can specify a non-negative value of `limit`,
45
+ * in which case only the first `limit` elements will be appended, followed by
46
+ * the `truncated` string.
47
+ *
48
+ * @typeParam T The type of the elements in the input array.
49
+ *
50
+ * @param array The array to join elements from.
51
+ * @param selector The function to transform elements to strings.
52
+ * @param options The options to configure the joining.
53
+ *
54
+ * @returns The resulting string.
55
+ *
56
+ * @example Usage with options
57
+ * ```ts
58
+ * import { joinToString } from "@std/collections/join-to-string";
59
+ * import { assertEquals } from "@std/assert";
60
+ *
61
+ * const users = [
62
+ * { name: "Kim" },
63
+ * { name: "Anna" },
64
+ * { name: "Tim" },
65
+ * ];
66
+ *
67
+ * const message = joinToString(users, (user) => user.name, {
68
+ * suffix: " are winners",
69
+ * prefix: "result: ",
70
+ * separator: " and ",
71
+ * limit: 1,
72
+ * truncated: "others",
73
+ * });
74
+ *
75
+ * assertEquals(message, "result: Kim and others are winners");
76
+ * ```
77
+ */
78
+ export function joinToString<T>(
79
+ array: Iterable<T>,
80
+ selector: (el: T) => string,
81
+ options: Readonly<JoinToStringOptions> = {},
82
+ ): string {
83
+ const {
84
+ separator = ",",
85
+ prefix = "",
86
+ suffix = "",
87
+ limit = -1,
88
+ truncated = "...",
89
+ } = options;
90
+
91
+ let result = "";
92
+
93
+ let index = 0;
94
+ for (const el of array) {
95
+ if (index > 0) {
96
+ result += separator;
97
+ }
98
+
99
+ if (limit >= 0 && index >= limit) {
100
+ result += truncated;
101
+ break;
102
+ }
103
+
104
+ result += selector(el);
105
+ index++;
106
+ }
107
+
108
+ return prefix + result + suffix;
109
+ }