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,46 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Associates each string element of an array with a value returned by a selector
6
+ * function.
7
+ *
8
+ * If any of two pairs would have the same value, the latest one will be used
9
+ * (overriding the ones before it).
10
+ *
11
+ * @typeParam T The type of the values returned by the selector function.
12
+ *
13
+ * @param array The array of elements to associate with values.
14
+ * @param selector The selector function that returns a value for each element.
15
+ *
16
+ * @returns An object where each element of the array is associated with a value
17
+ * returned by the selector function.
18
+ *
19
+ * @example Basic usage
20
+ * ```ts
21
+ * import { associateWith } from "@std/collections/associate-with";
22
+ * import { assertEquals } from "@std/assert";
23
+ *
24
+ * const names = ["Kim", "Lara", "Jonathan"];
25
+ *
26
+ * const namesToLength = associateWith(names, (person) => person.length);
27
+ *
28
+ * assertEquals(namesToLength, {
29
+ * "Kim": 3,
30
+ * "Lara": 4,
31
+ * "Jonathan": 8,
32
+ * });
33
+ * ```
34
+ */
35
+ export function associateWith<T>(
36
+ array: Iterable<string>,
37
+ selector: (key: string) => T,
38
+ ): Record<string, T> {
39
+ const result: Record<string, T> = {};
40
+
41
+ for (const element of array) {
42
+ result[element] = selector(element);
43
+ }
44
+
45
+ return result;
46
+ }
@@ -0,0 +1,56 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ /**
5
+ * Splits the given array into chunks of the given size and returns them.
6
+ *
7
+ * @typeParam T Type of the elements in the input array.
8
+ *
9
+ * @param array The array to split into chunks.
10
+ * @param size The size of the chunks. This must be a positive integer.
11
+ *
12
+ * @returns An array of chunks of the given size.
13
+ *
14
+ * @example Basic usage
15
+ * ```ts
16
+ * import { chunk } from "@std/collections/chunk";
17
+ * import { assertEquals } from "@std/assert";
18
+ *
19
+ * const words = [
20
+ * "lorem",
21
+ * "ipsum",
22
+ * "dolor",
23
+ * "sit",
24
+ * "amet",
25
+ * "consetetur",
26
+ * "sadipscing",
27
+ * ];
28
+ * const chunks = chunk(words, 3);
29
+ *
30
+ * assertEquals(
31
+ * chunks,
32
+ * [
33
+ * ["lorem", "ipsum", "dolor"],
34
+ * ["sit", "amet", "consetetur"],
35
+ * ["sadipscing"],
36
+ * ],
37
+ * );
38
+ * ```
39
+ */
40
+ export function chunk<T>(array: readonly T[], size: number): T[][] {
41
+ if (size <= 0 || !Number.isInteger(size)) {
42
+ throw new RangeError(
43
+ `Expected size to be an integer greater than 0 but found ${size}`,
44
+ );
45
+ }
46
+
47
+ const result: T[][] = [];
48
+ let index = 0;
49
+
50
+ while (index < array.length) {
51
+ result.push(array.slice(index, index + size));
52
+ index += size;
53
+ }
54
+
55
+ return result;
56
+ }
@@ -0,0 +1,578 @@
1
+ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
+ // This module is browser compatible.
3
+
4
+ import { filterInPlace } from "./_utils.js";
5
+
6
+ /**
7
+ * Merges the two given records, recursively merging any nested records with the
8
+ * second collection overriding the first in case of conflict.
9
+ *
10
+ * For arrays, maps and sets, a merging strategy can be specified to either
11
+ * `replace` values, or `merge` them instead.
12
+ *
13
+ * @typeParam T Type of the first record
14
+ *
15
+ * @param record First record to merge.
16
+ * @param other Second record to merge.
17
+ * @param options Merging options.
18
+ *
19
+ * @returns A new record with the merged values.
20
+ *
21
+ * @example Merge objects
22
+ * ```ts
23
+ * import { deepMerge } from "@std/collections/deep-merge";
24
+ * import { assertEquals } from "@std/assert";
25
+ *
26
+ * const a = { foo: true };
27
+ * const b = { foo: { bar: true } };
28
+ *
29
+ * const result = deepMerge(a, b);
30
+ *
31
+ * const expected = { foo: { bar: true } };
32
+ *
33
+ * assertEquals(result, expected);
34
+ * ```
35
+ *
36
+ * @example Merge arrays
37
+ * ```ts
38
+ * import { deepMerge } from "@std/collections/deep-merge";
39
+ * import { assertEquals } from "@std/assert";
40
+ *
41
+ * const a = { foo: [1, 2] };
42
+ * const b = { foo: [3, 4] };
43
+ *
44
+ * const result = deepMerge(a, b);
45
+ *
46
+ * const expected = { foo: [1, 2, 3, 4] };
47
+ *
48
+ * assertEquals(result, expected);
49
+ * ```
50
+ *
51
+ * @example Merge maps
52
+ * ```ts
53
+ * import { deepMerge } from "@std/collections/deep-merge";
54
+ * import { assertEquals } from "@std/assert";
55
+ *
56
+ * const a = { foo: new Map([["a", 1]]) };
57
+ * const b = { foo: new Map([["b", 2]]) };
58
+ *
59
+ * const result = deepMerge(a, b);
60
+ *
61
+ * const expected = { foo: new Map([["a", 1], ["b", 2]]) };
62
+ *
63
+ * assertEquals(result, expected);
64
+ * ```
65
+ *
66
+ * @example Merge sets
67
+ * ```ts
68
+ * import { deepMerge } from "@std/collections/deep-merge";
69
+ * import { assertEquals } from "@std/assert";
70
+ *
71
+ * const a = { foo: new Set([1]) };
72
+ * const b = { foo: new Set([2]) };
73
+ *
74
+ * const result = deepMerge(a, b);
75
+ *
76
+ * const expected = { foo: new Set([1, 2]) };
77
+ *
78
+ * assertEquals(result, expected);
79
+ * ```
80
+ *
81
+ * @example Merge with custom options
82
+ * ```ts
83
+ * import { deepMerge } from "@std/collections/deep-merge";
84
+ * import { assertEquals } from "@std/assert";
85
+ *
86
+ * const a = { foo: [1, 2] };
87
+ * const b = { foo: [3, 4] };
88
+ *
89
+ * const result = deepMerge(a, b, { arrays: "replace" });
90
+ *
91
+ * const expected = { foo: [3, 4] };
92
+ *
93
+ * assertEquals(result, expected);
94
+ * ```
95
+ */
96
+ export function deepMerge<
97
+ T extends Record<PropertyKey, unknown>,
98
+ >(
99
+ record: Partial<Readonly<T>>,
100
+ other: Partial<Readonly<T>>,
101
+ options?: Readonly<DeepMergeOptions>,
102
+ ): T;
103
+ /**
104
+ * Merges the two given records, recursively merging any nested records with the
105
+ * second collection overriding the first in case of conflict.
106
+ *
107
+ * For arrays, maps and sets, a merging strategy can be specified to either
108
+ * `replace` values, or `merge` them instead.
109
+ *
110
+ * @typeParam T Type of the first record
111
+ * @typeParam U Type of the second record
112
+ * @typeParam Options Merging options
113
+ *
114
+ * @param record First record to merge.
115
+ * @param other Second record to merge.
116
+ * @param options Merging options.
117
+ *
118
+ * @returns A new record with the merged values.
119
+ *
120
+ * @example Merge objects
121
+ * ```ts
122
+ * import { deepMerge } from "@std/collections/deep-merge";
123
+ * import { assertEquals } from "@std/assert";
124
+ *
125
+ * const a = { foo: true };
126
+ * const b = { foo: { bar: true } };
127
+ *
128
+ * const result = deepMerge(a, b);
129
+ *
130
+ * const expected = { foo: { bar: true } };
131
+ *
132
+ * assertEquals(result, expected);
133
+ * ```
134
+ *
135
+ * @example Merge arrays
136
+ * ```ts
137
+ * import { deepMerge } from "@std/collections/deep-merge";
138
+ * import { assertEquals } from "@std/assert";
139
+ *
140
+ * const a = { foo: [1, 2] };
141
+ * const b = { foo: [3, 4] };
142
+ *
143
+ * const result = deepMerge(a, b);
144
+ *
145
+ * const expected = { foo: [1, 2, 3, 4] };
146
+ *
147
+ * assertEquals(result, expected);
148
+ * ```
149
+ *
150
+ * @example Merge maps
151
+ * ```ts
152
+ * import { deepMerge } from "@std/collections/deep-merge";
153
+ * import { assertEquals } from "@std/assert";
154
+ *
155
+ * const a = { foo: new Map([["a", 1]]) };
156
+ * const b = { foo: new Map([["b", 2]]) };
157
+ *
158
+ * const result = deepMerge(a, b);
159
+ *
160
+ * const expected = { foo: new Map([["a", 1], ["b", 2]]) };
161
+ *
162
+ * assertEquals(result, expected);
163
+ * ```
164
+ *
165
+ * @example Merge sets
166
+ * ```ts
167
+ * import { deepMerge } from "@std/collections/deep-merge";
168
+ * import { assertEquals } from "@std/assert";
169
+ *
170
+ * const a = { foo: new Set([1]) };
171
+ * const b = { foo: new Set([2]) };
172
+ *
173
+ * const result = deepMerge(a, b);
174
+ *
175
+ * const expected = { foo: new Set([1, 2]) };
176
+ *
177
+ * assertEquals(result, expected);
178
+ * ```
179
+ *
180
+ * @example Merge with custom options
181
+ * ```ts
182
+ * import { deepMerge } from "@std/collections/deep-merge";
183
+ * import { assertEquals } from "@std/assert";
184
+ *
185
+ * const a = { foo: [1, 2] };
186
+ * const b = { foo: [3, 4] };
187
+ *
188
+ * const result = deepMerge(a, b, { arrays: "replace" });
189
+ *
190
+ * const expected = { foo: [3, 4] };
191
+ *
192
+ * assertEquals(result, expected);
193
+ * ```
194
+ */
195
+ export function deepMerge<
196
+ T extends Record<PropertyKey, unknown>,
197
+ U extends Record<PropertyKey, unknown>,
198
+ Options extends DeepMergeOptions,
199
+ >(
200
+ record: Readonly<T>,
201
+ other: Readonly<U>,
202
+ options?: Readonly<Options>,
203
+ ): DeepMerge<T, U, Options>;
204
+ export function deepMerge<
205
+ T extends Record<PropertyKey, unknown>,
206
+ U extends Record<PropertyKey, unknown>,
207
+ Options extends DeepMergeOptions = {
208
+ arrays: "merge";
209
+ sets: "merge";
210
+ maps: "merge";
211
+ },
212
+ >(
213
+ record: Readonly<T>,
214
+ other: Readonly<U>,
215
+ options?: Readonly<Options>,
216
+ ): DeepMerge<T, U, Options> {
217
+ return deepMergeInternal(record, other, new Set(), options);
218
+ }
219
+
220
+ function deepMergeInternal<
221
+ T extends Record<PropertyKey, unknown>,
222
+ U extends Record<PropertyKey, unknown>,
223
+ Options extends DeepMergeOptions = {
224
+ arrays: "merge";
225
+ sets: "merge";
226
+ maps: "merge";
227
+ },
228
+ >(
229
+ record: Readonly<T>,
230
+ other: Readonly<U>,
231
+ seen: Set<NonNullable<unknown>>,
232
+ options?: Readonly<Options>,
233
+ ) {
234
+ // Extract options
235
+ // Clone left operand to avoid performing mutations in-place
236
+ type Result = DeepMerge<T, U, Options>;
237
+ const result: Partial<Result> = {};
238
+
239
+ const keys = new Set([
240
+ ...getKeys(record),
241
+ ...getKeys(other),
242
+ ]) as Set<keyof Result>;
243
+
244
+ // Iterate through each key of other object and use correct merging strategy
245
+ for (const key of keys) {
246
+ // Skip to prevent Object.prototype.__proto__ accessor property calls on non-Deno platforms
247
+ if (key === "__proto__") {
248
+ continue;
249
+ }
250
+
251
+ type ResultMember = Result[typeof key];
252
+
253
+ const a = record[key] as ResultMember;
254
+
255
+ if (!Object.hasOwn(other, key)) {
256
+ result[key] = a;
257
+
258
+ continue;
259
+ }
260
+
261
+ const b = other[key] as ResultMember;
262
+
263
+ if (
264
+ isNonNullObject(a) && isNonNullObject(b) && !seen.has(a) && !seen.has(b)
265
+ ) {
266
+ seen.add(a);
267
+ seen.add(b);
268
+ result[key] = mergeObjects(a, b, seen, options) as ResultMember;
269
+
270
+ continue;
271
+ }
272
+
273
+ // Override value
274
+ result[key] = b;
275
+ }
276
+
277
+ return result as Result;
278
+ }
279
+
280
+ function mergeObjects(
281
+ left: Readonly<NonNullable<Record<string, unknown>>>,
282
+ right: Readonly<NonNullable<Record<string, unknown>>>,
283
+ seen: Set<NonNullable<unknown>>,
284
+ options: Readonly<DeepMergeOptions> = {
285
+ arrays: "merge",
286
+ sets: "merge",
287
+ maps: "merge",
288
+ },
289
+ ): Readonly<NonNullable<Record<string, unknown> | Iterable<unknown>>> {
290
+ // Recursively merge mergeable objects
291
+ if (isMergeable(left) && isMergeable(right)) {
292
+ return deepMergeInternal(left, right, seen, options);
293
+ }
294
+
295
+ if (isIterable(left) && isIterable(right)) {
296
+ // Handle arrays
297
+ if ((Array.isArray(left)) && (Array.isArray(right))) {
298
+ if (options.arrays === "merge") {
299
+ return left.concat(right);
300
+ }
301
+
302
+ return right;
303
+ }
304
+
305
+ // Handle maps
306
+ if ((left instanceof Map) && (right instanceof Map)) {
307
+ if (options.maps === "merge") {
308
+ return new Map([
309
+ ...left,
310
+ ...right,
311
+ ]);
312
+ }
313
+
314
+ return right;
315
+ }
316
+
317
+ // Handle sets
318
+ if ((left instanceof Set) && (right instanceof Set)) {
319
+ if (options.sets === "merge") {
320
+ return new Set([
321
+ ...left,
322
+ ...right,
323
+ ]);
324
+ }
325
+
326
+ return right;
327
+ }
328
+ }
329
+
330
+ return right;
331
+ }
332
+
333
+ /**
334
+ * Test whether a value is mergeable or not
335
+ * Builtins that look like objects, null and user defined classes
336
+ * are not considered mergeable (it means that reference will be copied)
337
+ */
338
+ function isMergeable(
339
+ value: NonNullable<unknown>,
340
+ ): value is Record<PropertyKey, unknown> {
341
+ return Object.getPrototypeOf(value) === Object.prototype;
342
+ }
343
+
344
+ function isIterable(
345
+ value: NonNullable<unknown>,
346
+ ): value is Iterable<unknown> {
347
+ return typeof (value as Iterable<unknown>)[Symbol.iterator] === "function";
348
+ }
349
+
350
+ function isNonNullObject(
351
+ value: unknown,
352
+ ): value is NonNullable<Record<string, unknown>> {
353
+ return value !== null && typeof value === "object";
354
+ }
355
+
356
+ function getKeys<T extends Record<string, unknown>>(record: T): Array<keyof T> {
357
+ const result = Object.getOwnPropertySymbols(record) as Array<keyof T>;
358
+ filterInPlace(
359
+ result,
360
+ (key) => Object.prototype.propertyIsEnumerable.call(record, key),
361
+ );
362
+ result.push(...(Object.keys(record) as Array<keyof T>));
363
+
364
+ return result;
365
+ }
366
+
367
+ /** Merging strategy */
368
+ export type MergingStrategy = "replace" | "merge";
369
+
370
+ /** Options for {@linkcode deepMerge}. */
371
+ export type DeepMergeOptions = {
372
+ /**
373
+ * Merging strategy for arrays
374
+ *
375
+ * @default {"merge"}
376
+ */
377
+ arrays?: MergingStrategy;
378
+ /**
379
+ * Merging strategy for maps.
380
+ *
381
+ * @default {"merge"}
382
+ */
383
+ maps?: MergingStrategy;
384
+ /**
385
+ * Merging strategy for sets.
386
+ *
387
+ * @default {"merge"}
388
+ */
389
+ sets?: MergingStrategy;
390
+ };
391
+
392
+ /**
393
+ * How does recursive typing works ?
394
+ *
395
+ * Deep merging process is handled through `DeepMerge<T, U, Options>` type.
396
+ * If both T and U are Records, we recursively merge them,
397
+ * else we treat them as primitives.
398
+ *
399
+ * Merging process is handled through `Merge<T, U>` type, in which
400
+ * we remove all maps, sets, arrays and records so we can handle them
401
+ * separately depending on merging strategy:
402
+ *
403
+ * Merge<
404
+ * {foo: string},
405
+ * {bar: string, baz: Set<unknown>},
406
+ * > // "foo" and "bar" will be handled with `MergeRightOmitComplexes`
407
+ * // "baz" will be handled with `MergeAll*` type
408
+ *
409
+ * `MergeRightOmitComplexes<T, U>` will do the above: all T's
410
+ * exclusive keys will be kept, though common ones with U will have their
411
+ * typing overridden instead:
412
+ *
413
+ * MergeRightOmitComplexes<
414
+ * {foo: string, baz: number},
415
+ * {foo: boolean, bar: string}
416
+ * > // {baz: number, foo: boolean, bar: string}
417
+ * // "baz" was kept from T
418
+ * // "foo" was overridden by U's typing
419
+ * // "bar" was added from U
420
+ *
421
+ * For Maps, Arrays, Sets and Records, we use `MergeAll*<T, U>` utility
422
+ * types. They will extract relevant data structure from both T and U
423
+ * (providing that both have same data data structure, except for typing).
424
+ *
425
+ * From these, `*ValueType<T>` will extract values (and keys) types to be
426
+ * able to create a new data structure with an union typing from both
427
+ * data structure of T and U:
428
+ *
429
+ * MergeAllSets<
430
+ * {foo: Set<number>},
431
+ * {foo: Set<string>}
432
+ * > // `SetValueType` will extract "number" for T
433
+ * // `SetValueType` will extract "string" for U
434
+ * // `MergeAllSets` will infer type as Set<number|string>
435
+ * // Process is similar for Maps, Arrays, and Sets
436
+ *
437
+ * `DeepMerge<T, U, Options>` is taking a third argument to be handle to
438
+ * infer final typing depending on merging strategy:
439
+ *
440
+ * & (Options extends { sets: "replace" } ? PartialByType<U, Set<unknown>>
441
+ * : MergeAllSets<T, U>)
442
+ *
443
+ * In the above line, if "Options" have its merging strategy for Sets set to
444
+ * "replace", instead of performing merging of Sets type, it will take the
445
+ * typing from right operand (U) instead, effectively replacing the typing.
446
+ *
447
+ * An additional note, we use `ExpandRecursively<T>` utility type to expand
448
+ * the resulting typing and hide all the typing logic of deep merging so it is
449
+ * more user friendly.
450
+ */
451
+
452
+ /** Force intellisense to expand the typing to hide merging typings */
453
+ export type ExpandRecursively<T> = T extends Record<PropertyKey, unknown>
454
+ ? T extends infer O ? { [K in keyof O]: ExpandRecursively<O[K]> } : never
455
+ : T;
456
+
457
+ /** Filter of keys matching a given type */
458
+ export type PartialByType<T, U> = {
459
+ [K in keyof T as T[K] extends U ? K : never]: T[K];
460
+ };
461
+
462
+ /** Get set values type */
463
+ export type SetValueType<T> = T extends Set<infer V> ? V : never;
464
+
465
+ /** Merge all sets types definitions from keys present in both objects */
466
+ export type MergeAllSets<
467
+ T,
468
+ U,
469
+ X = PartialByType<T, Set<unknown>>,
470
+ Y = PartialByType<U, Set<unknown>>,
471
+ Z = {
472
+ [K in keyof X & keyof Y]: Set<SetValueType<X[K]> | SetValueType<Y[K]>>;
473
+ },
474
+ > = Z;
475
+
476
+ /** Get array values type */
477
+ export type ArrayValueType<T> = T extends Array<infer V> ? V : never;
478
+
479
+ /** Merge all sets types definitions from keys present in both objects */
480
+ export type MergeAllArrays<
481
+ T,
482
+ U,
483
+ X = PartialByType<T, Array<unknown>>,
484
+ Y = PartialByType<U, Array<unknown>>,
485
+ Z = {
486
+ [K in keyof X & keyof Y]: Array<
487
+ ArrayValueType<X[K]> | ArrayValueType<Y[K]>
488
+ >;
489
+ },
490
+ > = Z;
491
+
492
+ /** Get map values types */
493
+ export type MapKeyType<T> = T extends Map<infer K, unknown> ? K : never;
494
+
495
+ /** Get map values types */
496
+ export type MapValueType<T> = T extends Map<unknown, infer V> ? V : never;
497
+
498
+ /** Merge all sets types definitions from keys present in both objects */
499
+ export type MergeAllMaps<
500
+ T,
501
+ U,
502
+ X = PartialByType<T, Map<unknown, unknown>>,
503
+ Y = PartialByType<U, Map<unknown, unknown>>,
504
+ Z = {
505
+ [K in keyof X & keyof Y]: Map<
506
+ MapKeyType<X[K]> | MapKeyType<Y[K]>,
507
+ MapValueType<X[K]> | MapValueType<Y[K]>
508
+ >;
509
+ },
510
+ > = Z;
511
+
512
+ /** Merge all records types definitions from keys present in both objects */
513
+ export type MergeAllRecords<
514
+ T,
515
+ U,
516
+ Options,
517
+ X = PartialByType<T, Record<PropertyKey, unknown>>,
518
+ Y = PartialByType<U, Record<PropertyKey, unknown>>,
519
+ Z = {
520
+ [K in keyof X & keyof Y]: DeepMerge<X[K], Y[K], Options>;
521
+ },
522
+ > = Z;
523
+
524
+ /** Exclude map, sets and array from type */
525
+ export type OmitComplexes<T> = Omit<
526
+ T,
527
+ keyof PartialByType<
528
+ T,
529
+ | Map<unknown, unknown>
530
+ | Set<unknown>
531
+ | Array<unknown>
532
+ | Record<PropertyKey, unknown>
533
+ >
534
+ >;
535
+
536
+ /** Object with keys in either T or U but not in both */
537
+ export type ObjectXorKeys<
538
+ T,
539
+ U,
540
+ X = Omit<T, keyof U> & Omit<U, keyof T>,
541
+ Y = { [K in keyof X]: X[K] },
542
+ > = Y;
543
+
544
+ /** Merge two objects, with left precedence */
545
+ export type MergeRightOmitComplexes<
546
+ T,
547
+ U,
548
+ X = ObjectXorKeys<T, U> & OmitComplexes<{ [K in keyof U]: U[K] }>,
549
+ > = X;
550
+
551
+ /** Merge two objects */
552
+ export type Merge<
553
+ T,
554
+ U,
555
+ Options,
556
+ X =
557
+ & MergeRightOmitComplexes<T, U>
558
+ & MergeAllRecords<T, U, Options>
559
+ & (Options extends { sets: "replace" } ? PartialByType<U, Set<unknown>>
560
+ : MergeAllSets<T, U>)
561
+ & (Options extends { arrays: "replace" } ? PartialByType<U, Array<unknown>>
562
+ : MergeAllArrays<T, U>)
563
+ & (Options extends { maps: "replace" }
564
+ ? PartialByType<U, Map<unknown, unknown>>
565
+ : MergeAllMaps<T, U>),
566
+ > = ExpandRecursively<X>;
567
+
568
+ /** Merge deeply two objects */
569
+ export type DeepMerge<
570
+ T,
571
+ U,
572
+ Options = Record<string, MergingStrategy>,
573
+ > =
574
+ // Handle objects
575
+ [T, U] extends [Record<PropertyKey, unknown>, Record<PropertyKey, unknown>]
576
+ ? Merge<T, U, Options>
577
+ // Handle primitives
578
+ : T | U;
@@ -0,0 +1,29 @@
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 in the given array, preserving order by first
6
+ * occurrence.
7
+ *
8
+ * @typeParam T The type of the elements in the input array.
9
+ *
10
+ * @param array The array to filter for distinct elements.
11
+ *
12
+ * @returns An array of distinct elements in the input array.
13
+ *
14
+ * @example Basic usage
15
+ * ```ts
16
+ * import { distinct } from "@std/collections/distinct";
17
+ * import { assertEquals } from "@std/assert";
18
+ *
19
+ * const numbers = [3, 2, 5, 2, 5];
20
+ * const distinctNumbers = distinct(numbers);
21
+ *
22
+ * assertEquals(distinctNumbers, [3, 2, 5]);
23
+ * ```
24
+ */
25
+ export function distinct<T>(array: Iterable<T>): T[] {
26
+ const set = new Set(array);
27
+
28
+ return Array.from(set);
29
+ }