structured-outputs 0.1.0-beta.20 → 0.1.0-beta.22

Sign up to get free protection for your applications and to get access to all the features.
Files changed (371) hide show
  1. package/README.md +46 -40
  2. package/esm/ResponseFormat.d.ts +21 -0
  3. package/esm/ResponseFormat.d.ts.map +1 -0
  4. package/esm/ResponseFormat.js +43 -19
  5. package/esm/ResponseFormat.js.map +1 -1
  6. package/{types → esm}/Tool.d.ts +1 -0
  7. package/esm/Tool.d.ts.map +1 -0
  8. package/esm/Tool.js +1 -0
  9. package/esm/Tool.js.map +1 -1
  10. package/esm/oai.d.ts +5 -0
  11. package/esm/oai.d.ts.map +1 -0
  12. package/esm/oai.js +2 -0
  13. package/esm/oai.js.map +1 -0
  14. package/esm/types/Ref.d.ts.map +1 -0
  15. package/esm/types/Ref.js +6 -3
  16. package/esm/types/Ref.js.map +1 -1
  17. package/esm/types/RootTy.d.ts +8 -0
  18. package/esm/types/RootTy.d.ts.map +1 -0
  19. package/esm/types/RootTy.js +5 -7
  20. package/esm/types/RootTy.js.map +1 -1
  21. package/esm/types/Ty.d.ts +23 -0
  22. package/esm/types/Ty.d.ts.map +1 -0
  23. package/esm/types/Ty.js +5 -9
  24. package/esm/types/Ty.js.map +1 -1
  25. package/{types → esm}/types/array.d.ts +1 -1
  26. package/{types → esm}/types/array.d.ts.map +1 -1
  27. package/esm/types/array.js +1 -2
  28. package/esm/types/array.js.map +1 -1
  29. package/{types → esm}/types/constant.d.ts.map +1 -1
  30. package/esm/types/constant.js +1 -2
  31. package/esm/types/constant.js.map +1 -1
  32. package/{types → esm}/types/constantUnion.d.ts.map +1 -1
  33. package/esm/types/constantUnion.js +16 -19
  34. package/esm/types/constantUnion.js.map +1 -1
  35. package/{types → esm}/types/mod.d.ts +3 -3
  36. package/esm/types/mod.d.ts.map +1 -0
  37. package/esm/types/mod.js +3 -3
  38. package/esm/types/mod.js.map +1 -1
  39. package/{types → esm}/types/object.d.ts +2 -2
  40. package/{types → esm}/types/object.d.ts.map +1 -1
  41. package/esm/types/object.js +1 -2
  42. package/esm/types/object.js.map +1 -1
  43. package/{types/types/leaves.d.ts → esm/types/primitives.d.ts} +1 -1
  44. package/esm/types/primitives.d.ts.map +1 -0
  45. package/esm/types/primitives.js +14 -0
  46. package/esm/types/primitives.js.map +1 -0
  47. package/esm/types/std/Option.js +1 -1
  48. package/esm/types/std/Option.js.map +1 -1
  49. package/{types → esm}/types/std/Wrapper.d.ts +0 -1
  50. package/esm/types/std/Wrapper.d.ts.map +1 -0
  51. package/esm/types/std/Wrapper.js.map +1 -1
  52. package/{types → esm}/types/taggedUnion.d.ts +2 -2
  53. package/{types → esm}/types/taggedUnion.d.ts.map +1 -1
  54. package/esm/types/taggedUnion.js +1 -2
  55. package/esm/types/taggedUnion.js.map +1 -1
  56. package/package.json +6 -11
  57. package/src/ResponseFormat.ts +48 -41
  58. package/src/Tool.ts +1 -0
  59. package/src/oai.ts +5 -0
  60. package/src/types/Ref.ts +7 -4
  61. package/src/types/RootTy.ts +11 -13
  62. package/src/types/Ty.ts +23 -30
  63. package/src/types/array.ts +2 -3
  64. package/src/types/constant.ts +1 -2
  65. package/src/types/constantUnion.ts +16 -19
  66. package/src/types/mod.ts +3 -3
  67. package/src/types/object.ts +4 -6
  68. package/src/types/primitives.ts +17 -0
  69. package/src/types/std/Option.ts +1 -1
  70. package/src/types/std/Wrapper.ts +0 -2
  71. package/src/types/taggedUnion.ts +3 -4
  72. package/esm/_dnt.shims.js +0 -58
  73. package/esm/_dnt.shims.js.map +0 -1
  74. package/esm/deps/jsr.io/@std/assert/1.0.8/almost_equals.js +0 -47
  75. package/esm/deps/jsr.io/@std/assert/1.0.8/almost_equals.js.map +0 -1
  76. package/esm/deps/jsr.io/@std/assert/1.0.8/array_includes.js +0 -47
  77. package/esm/deps/jsr.io/@std/assert/1.0.8/array_includes.js.map +0 -1
  78. package/esm/deps/jsr.io/@std/assert/1.0.8/assert.js +0 -23
  79. package/esm/deps/jsr.io/@std/assert/1.0.8/assert.js.map +0 -1
  80. package/esm/deps/jsr.io/@std/assert/1.0.8/assertion_error.js +0 -31
  81. package/esm/deps/jsr.io/@std/assert/1.0.8/assertion_error.js.map +0 -1
  82. package/esm/deps/jsr.io/@std/assert/1.0.8/equal.js +0 -184
  83. package/esm/deps/jsr.io/@std/assert/1.0.8/equal.js.map +0 -1
  84. package/esm/deps/jsr.io/@std/assert/1.0.8/equals.js +0 -46
  85. package/esm/deps/jsr.io/@std/assert/1.0.8/equals.js.map +0 -1
  86. package/esm/deps/jsr.io/@std/assert/1.0.8/exists.js +0 -28
  87. package/esm/deps/jsr.io/@std/assert/1.0.8/exists.js.map +0 -1
  88. package/esm/deps/jsr.io/@std/assert/1.0.8/fail.js +0 -21
  89. package/esm/deps/jsr.io/@std/assert/1.0.8/fail.js.map +0 -1
  90. package/esm/deps/jsr.io/@std/assert/1.0.8/false.js +0 -23
  91. package/esm/deps/jsr.io/@std/assert/1.0.8/false.js.map +0 -1
  92. package/esm/deps/jsr.io/@std/assert/1.0.8/greater.js +0 -30
  93. package/esm/deps/jsr.io/@std/assert/1.0.8/greater.js.map +0 -1
  94. package/esm/deps/jsr.io/@std/assert/1.0.8/greater_or_equal.js +0 -30
  95. package/esm/deps/jsr.io/@std/assert/1.0.8/greater_or_equal.js.map +0 -1
  96. package/esm/deps/jsr.io/@std/assert/1.0.8/instance_of.js +0 -53
  97. package/esm/deps/jsr.io/@std/assert/1.0.8/instance_of.js.map +0 -1
  98. package/esm/deps/jsr.io/@std/assert/1.0.8/is_error.js +0 -54
  99. package/esm/deps/jsr.io/@std/assert/1.0.8/is_error.js.map +0 -1
  100. package/esm/deps/jsr.io/@std/assert/1.0.8/less.js +0 -29
  101. package/esm/deps/jsr.io/@std/assert/1.0.8/less.js.map +0 -1
  102. package/esm/deps/jsr.io/@std/assert/1.0.8/less_or_equal.js +0 -30
  103. package/esm/deps/jsr.io/@std/assert/1.0.8/less_or_equal.js.map +0 -1
  104. package/esm/deps/jsr.io/@std/assert/1.0.8/match.js +0 -27
  105. package/esm/deps/jsr.io/@std/assert/1.0.8/match.js.map +0 -1
  106. package/esm/deps/jsr.io/@std/assert/1.0.8/mod.js +0 -46
  107. package/esm/deps/jsr.io/@std/assert/1.0.8/mod.js.map +0 -1
  108. package/esm/deps/jsr.io/@std/assert/1.0.8/not_equals.js +0 -33
  109. package/esm/deps/jsr.io/@std/assert/1.0.8/not_equals.js.map +0 -1
  110. package/esm/deps/jsr.io/@std/assert/1.0.8/not_instance_of.js +0 -30
  111. package/esm/deps/jsr.io/@std/assert/1.0.8/not_instance_of.js.map +0 -1
  112. package/esm/deps/jsr.io/@std/assert/1.0.8/not_match.js +0 -27
  113. package/esm/deps/jsr.io/@std/assert/1.0.8/not_match.js.map +0 -1
  114. package/esm/deps/jsr.io/@std/assert/1.0.8/not_strict_equals.js +0 -33
  115. package/esm/deps/jsr.io/@std/assert/1.0.8/not_strict_equals.js.map +0 -1
  116. package/esm/deps/jsr.io/@std/assert/1.0.8/object_match.js +0 -160
  117. package/esm/deps/jsr.io/@std/assert/1.0.8/object_match.js.map +0 -1
  118. package/esm/deps/jsr.io/@std/assert/1.0.8/rejects.js +0 -54
  119. package/esm/deps/jsr.io/@std/assert/1.0.8/rejects.js.map +0 -1
  120. package/esm/deps/jsr.io/@std/assert/1.0.8/strict_equals.js +0 -58
  121. package/esm/deps/jsr.io/@std/assert/1.0.8/strict_equals.js.map +0 -1
  122. package/esm/deps/jsr.io/@std/assert/1.0.8/string_includes.js +0 -27
  123. package/esm/deps/jsr.io/@std/assert/1.0.8/string_includes.js.map +0 -1
  124. package/esm/deps/jsr.io/@std/assert/1.0.8/throws.js +0 -45
  125. package/esm/deps/jsr.io/@std/assert/1.0.8/throws.js.map +0 -1
  126. package/esm/deps/jsr.io/@std/assert/1.0.8/unimplemented.js +0 -21
  127. package/esm/deps/jsr.io/@std/assert/1.0.8/unimplemented.js.map +0 -1
  128. package/esm/deps/jsr.io/@std/assert/1.0.8/unreachable.js +0 -21
  129. package/esm/deps/jsr.io/@std/assert/1.0.8/unreachable.js.map +0 -1
  130. package/esm/deps/jsr.io/@std/internal/1.0.5/build_message.js +0 -111
  131. package/esm/deps/jsr.io/@std/internal/1.0.5/build_message.js.map +0 -1
  132. package/esm/deps/jsr.io/@std/internal/1.0.5/diff.js +0 -277
  133. package/esm/deps/jsr.io/@std/internal/1.0.5/diff.js.map +0 -1
  134. package/esm/deps/jsr.io/@std/internal/1.0.5/diff_str.js +0 -180
  135. package/esm/deps/jsr.io/@std/internal/1.0.5/diff_str.js.map +0 -1
  136. package/esm/deps/jsr.io/@std/internal/1.0.5/format.js +0 -38
  137. package/esm/deps/jsr.io/@std/internal/1.0.5/format.js.map +0 -1
  138. package/esm/deps/jsr.io/@std/internal/1.0.5/styles.js +0 -208
  139. package/esm/deps/jsr.io/@std/internal/1.0.5/styles.js.map +0 -1
  140. package/esm/deps/jsr.io/@std/internal/1.0.5/types.js +0 -3
  141. package/esm/deps/jsr.io/@std/internal/1.0.5/types.js.map +0 -1
  142. package/esm/types/leaves.js +0 -18
  143. package/esm/types/leaves.js.map +0 -1
  144. package/src/_dnt.shims.ts +0 -60
  145. package/src/deps/jsr.io/@std/assert/1.0.8/almost_equals.ts +0 -55
  146. package/src/deps/jsr.io/@std/assert/1.0.8/array_includes.ts +0 -57
  147. package/src/deps/jsr.io/@std/assert/1.0.8/assert.ts +0 -23
  148. package/src/deps/jsr.io/@std/assert/1.0.8/assertion_error.ts +0 -31
  149. package/src/deps/jsr.io/@std/assert/1.0.8/equal.ts +0 -210
  150. package/src/deps/jsr.io/@std/assert/1.0.8/equals.ts +0 -52
  151. package/src/deps/jsr.io/@std/assert/1.0.8/exists.ts +0 -31
  152. package/src/deps/jsr.io/@std/assert/1.0.8/fail.ts +0 -21
  153. package/src/deps/jsr.io/@std/assert/1.0.8/false.ts +0 -26
  154. package/src/deps/jsr.io/@std/assert/1.0.8/greater.ts +0 -30
  155. package/src/deps/jsr.io/@std/assert/1.0.8/greater_or_equal.ts +0 -36
  156. package/src/deps/jsr.io/@std/assert/1.0.8/instance_of.ts +0 -64
  157. package/src/deps/jsr.io/@std/assert/1.0.8/is_error.ts +0 -65
  158. package/src/deps/jsr.io/@std/assert/1.0.8/less.ts +0 -29
  159. package/src/deps/jsr.io/@std/assert/1.0.8/less_or_equal.ts +0 -36
  160. package/src/deps/jsr.io/@std/assert/1.0.8/match.ts +0 -30
  161. package/src/deps/jsr.io/@std/assert/1.0.8/mod.ts +0 -47
  162. package/src/deps/jsr.io/@std/assert/1.0.8/not_equals.ts +0 -36
  163. package/src/deps/jsr.io/@std/assert/1.0.8/not_instance_of.ts +0 -33
  164. package/src/deps/jsr.io/@std/assert/1.0.8/not_match.ts +0 -30
  165. package/src/deps/jsr.io/@std/assert/1.0.8/not_strict_equals.ts +0 -42
  166. package/src/deps/jsr.io/@std/assert/1.0.8/object_match.ts +0 -202
  167. package/src/deps/jsr.io/@std/assert/1.0.8/rejects.ts +0 -123
  168. package/src/deps/jsr.io/@std/assert/1.0.8/strict_equals.ts +0 -67
  169. package/src/deps/jsr.io/@std/assert/1.0.8/string_includes.ts +0 -30
  170. package/src/deps/jsr.io/@std/assert/1.0.8/throws.ts +0 -111
  171. package/src/deps/jsr.io/@std/assert/1.0.8/unimplemented.ts +0 -21
  172. package/src/deps/jsr.io/@std/assert/1.0.8/unreachable.ts +0 -21
  173. package/src/deps/jsr.io/@std/internal/1.0.5/build_message.ts +0 -134
  174. package/src/deps/jsr.io/@std/internal/1.0.5/diff.ts +0 -317
  175. package/src/deps/jsr.io/@std/internal/1.0.5/diff_str.ts +0 -204
  176. package/src/deps/jsr.io/@std/internal/1.0.5/format.ts +0 -39
  177. package/src/deps/jsr.io/@std/internal/1.0.5/styles.ts +0 -233
  178. package/src/deps/jsr.io/@std/internal/1.0.5/types.ts +0 -18
  179. package/src/types/leaves.ts +0 -21
  180. package/types/ResponseFormat.d.ts +0 -26
  181. package/types/ResponseFormat.d.ts.map +0 -1
  182. package/types/Tool.d.ts.map +0 -1
  183. package/types/_dnt.shims.d.ts +0 -2
  184. package/types/_dnt.shims.d.ts.map +0 -1
  185. package/types/deps/jsr.io/@std/assert/1.0.8/almost_equals.d.ts +0 -29
  186. package/types/deps/jsr.io/@std/assert/1.0.8/almost_equals.d.ts.map +0 -1
  187. package/types/deps/jsr.io/@std/assert/1.0.8/array_includes.d.ts +0 -24
  188. package/types/deps/jsr.io/@std/assert/1.0.8/array_includes.d.ts.map +0 -1
  189. package/types/deps/jsr.io/@std/assert/1.0.8/assert.d.ts +0 -16
  190. package/types/deps/jsr.io/@std/assert/1.0.8/assert.d.ts.map +0 -1
  191. package/types/deps/jsr.io/@std/assert/1.0.8/assertion_error.d.ts +0 -26
  192. package/types/deps/jsr.io/@std/assert/1.0.8/assertion_error.d.ts.map +0 -1
  193. package/types/deps/jsr.io/@std/assert/1.0.8/equal.d.ts +0 -17
  194. package/types/deps/jsr.io/@std/assert/1.0.8/equal.d.ts.map +0 -1
  195. package/types/deps/jsr.io/@std/assert/1.0.8/equals.d.ts +0 -22
  196. package/types/deps/jsr.io/@std/assert/1.0.8/equals.d.ts.map +0 -1
  197. package/types/deps/jsr.io/@std/assert/1.0.8/exists.d.ts +0 -18
  198. package/types/deps/jsr.io/@std/assert/1.0.8/exists.d.ts.map +0 -1
  199. package/types/deps/jsr.io/@std/assert/1.0.8/fail.d.ts +0 -15
  200. package/types/deps/jsr.io/@std/assert/1.0.8/fail.d.ts.map +0 -1
  201. package/types/deps/jsr.io/@std/assert/1.0.8/false.d.ts +0 -18
  202. package/types/deps/jsr.io/@std/assert/1.0.8/false.d.ts.map +0 -1
  203. package/types/deps/jsr.io/@std/assert/1.0.8/greater.d.ts +0 -20
  204. package/types/deps/jsr.io/@std/assert/1.0.8/greater.d.ts.map +0 -1
  205. package/types/deps/jsr.io/@std/assert/1.0.8/greater_or_equal.d.ts +0 -20
  206. package/types/deps/jsr.io/@std/assert/1.0.8/greater_or_equal.d.ts.map +0 -1
  207. package/types/deps/jsr.io/@std/assert/1.0.8/instance_of.d.ts +0 -23
  208. package/types/deps/jsr.io/@std/assert/1.0.8/instance_of.d.ts.map +0 -1
  209. package/types/deps/jsr.io/@std/assert/1.0.8/is_error.d.ts +0 -25
  210. package/types/deps/jsr.io/@std/assert/1.0.8/is_error.d.ts.map +0 -1
  211. package/types/deps/jsr.io/@std/assert/1.0.8/less.d.ts +0 -19
  212. package/types/deps/jsr.io/@std/assert/1.0.8/less.d.ts.map +0 -1
  213. package/types/deps/jsr.io/@std/assert/1.0.8/less_or_equal.d.ts +0 -20
  214. package/types/deps/jsr.io/@std/assert/1.0.8/less_or_equal.d.ts.map +0 -1
  215. package/types/deps/jsr.io/@std/assert/1.0.8/match.d.ts +0 -18
  216. package/types/deps/jsr.io/@std/assert/1.0.8/match.d.ts.map +0 -1
  217. package/types/deps/jsr.io/@std/assert/1.0.8/mod.d.ts +0 -44
  218. package/types/deps/jsr.io/@std/assert/1.0.8/mod.d.ts.map +0 -1
  219. package/types/deps/jsr.io/@std/assert/1.0.8/not_equals.d.ts +0 -21
  220. package/types/deps/jsr.io/@std/assert/1.0.8/not_equals.d.ts.map +0 -1
  221. package/types/deps/jsr.io/@std/assert/1.0.8/not_instance_of.d.ts +0 -20
  222. package/types/deps/jsr.io/@std/assert/1.0.8/not_instance_of.d.ts.map +0 -1
  223. package/types/deps/jsr.io/@std/assert/1.0.8/not_match.d.ts +0 -18
  224. package/types/deps/jsr.io/@std/assert/1.0.8/not_match.d.ts.map +0 -1
  225. package/types/deps/jsr.io/@std/assert/1.0.8/not_strict_equals.d.ts +0 -23
  226. package/types/deps/jsr.io/@std/assert/1.0.8/not_strict_equals.d.ts.map +0 -1
  227. package/types/deps/jsr.io/@std/assert/1.0.8/object_match.d.ts +0 -28
  228. package/types/deps/jsr.io/@std/assert/1.0.8/object_match.d.ts.map +0 -1
  229. package/types/deps/jsr.io/@std/assert/1.0.8/rejects.d.ts +0 -42
  230. package/types/deps/jsr.io/@std/assert/1.0.8/rejects.d.ts.map +0 -1
  231. package/types/deps/jsr.io/@std/assert/1.0.8/strict_equals.d.ts +0 -24
  232. package/types/deps/jsr.io/@std/assert/1.0.8/strict_equals.d.ts.map +0 -1
  233. package/types/deps/jsr.io/@std/assert/1.0.8/string_includes.d.ts +0 -18
  234. package/types/deps/jsr.io/@std/assert/1.0.8/string_includes.d.ts.map +0 -1
  235. package/types/deps/jsr.io/@std/assert/1.0.8/throws.d.ts +0 -45
  236. package/types/deps/jsr.io/@std/assert/1.0.8/throws.d.ts.map +0 -1
  237. package/types/deps/jsr.io/@std/assert/1.0.8/unimplemented.d.ts +0 -15
  238. package/types/deps/jsr.io/@std/assert/1.0.8/unimplemented.d.ts.map +0 -1
  239. package/types/deps/jsr.io/@std/assert/1.0.8/unreachable.d.ts +0 -15
  240. package/types/deps/jsr.io/@std/assert/1.0.8/unreachable.d.ts.map +0 -1
  241. package/types/deps/jsr.io/@std/internal/1.0.5/build_message.d.ts +0 -82
  242. package/types/deps/jsr.io/@std/internal/1.0.5/build_message.d.ts.map +0 -1
  243. package/types/deps/jsr.io/@std/internal/1.0.5/diff.d.ts +0 -140
  244. package/types/deps/jsr.io/@std/internal/1.0.5/diff.d.ts.map +0 -1
  245. package/types/deps/jsr.io/@std/internal/1.0.5/diff_str.d.ts +0 -99
  246. package/types/deps/jsr.io/@std/internal/1.0.5/diff_str.d.ts.map +0 -1
  247. package/types/deps/jsr.io/@std/internal/1.0.5/format.d.ts +0 -2
  248. package/types/deps/jsr.io/@std/internal/1.0.5/format.d.ts.map +0 -1
  249. package/types/deps/jsr.io/@std/internal/1.0.5/styles.d.ts +0 -159
  250. package/types/deps/jsr.io/@std/internal/1.0.5/styles.d.ts.map +0 -1
  251. package/types/deps/jsr.io/@std/internal/1.0.5/types.d.ts +0 -16
  252. package/types/deps/jsr.io/@std/internal/1.0.5/types.d.ts.map +0 -1
  253. package/types/types/Ref.d.ts.map +0 -1
  254. package/types/types/RootTy.d.ts +0 -8
  255. package/types/types/RootTy.d.ts.map +0 -1
  256. package/types/types/Ty.d.ts +0 -27
  257. package/types/types/Ty.d.ts.map +0 -1
  258. package/types/types/leaves.d.ts.map +0 -1
  259. package/types/types/mod.d.ts.map +0 -1
  260. package/types/types/std/Wrapper.d.ts.map +0 -1
  261. /package/{types → esm}/_dnt.polyfills.d.ts +0 -0
  262. /package/{types → esm}/_dnt.polyfills.d.ts.map +0 -0
  263. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/_utils.d.ts +0 -0
  264. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/_utils.d.ts.map +0 -0
  265. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/aggregate_groups.d.ts +0 -0
  266. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/aggregate_groups.d.ts.map +0 -0
  267. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/associate_by.d.ts +0 -0
  268. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/associate_by.d.ts.map +0 -0
  269. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/associate_with.d.ts +0 -0
  270. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/associate_with.d.ts.map +0 -0
  271. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/chunk.d.ts +0 -0
  272. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/chunk.d.ts.map +0 -0
  273. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/deep_merge.d.ts +0 -0
  274. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/deep_merge.d.ts.map +0 -0
  275. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/distinct.d.ts +0 -0
  276. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/distinct.d.ts.map +0 -0
  277. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/distinct_by.d.ts +0 -0
  278. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/distinct_by.d.ts.map +0 -0
  279. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/drop_last_while.d.ts +0 -0
  280. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/drop_last_while.d.ts.map +0 -0
  281. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/drop_while.d.ts +0 -0
  282. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/drop_while.d.ts.map +0 -0
  283. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/filter_entries.d.ts +0 -0
  284. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/filter_entries.d.ts.map +0 -0
  285. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/filter_keys.d.ts +0 -0
  286. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/filter_keys.d.ts.map +0 -0
  287. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/filter_values.d.ts +0 -0
  288. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/filter_values.d.ts.map +0 -0
  289. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/find_single.d.ts +0 -0
  290. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/find_single.d.ts.map +0 -0
  291. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/first_not_nullish_of.d.ts +0 -0
  292. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/first_not_nullish_of.d.ts.map +0 -0
  293. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/includes_value.d.ts +0 -0
  294. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/includes_value.d.ts.map +0 -0
  295. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/intersect.d.ts +0 -0
  296. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/intersect.d.ts.map +0 -0
  297. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/invert.d.ts +0 -0
  298. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/invert.d.ts.map +0 -0
  299. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/invert_by.d.ts +0 -0
  300. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/invert_by.d.ts.map +0 -0
  301. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/join_to_string.d.ts +0 -0
  302. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/join_to_string.d.ts.map +0 -0
  303. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/map_entries.d.ts +0 -0
  304. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/map_entries.d.ts.map +0 -0
  305. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/map_keys.d.ts +0 -0
  306. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/map_keys.d.ts.map +0 -0
  307. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/map_not_nullish.d.ts +0 -0
  308. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/map_not_nullish.d.ts.map +0 -0
  309. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/map_values.d.ts +0 -0
  310. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/map_values.d.ts.map +0 -0
  311. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/max_by.d.ts +0 -0
  312. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/max_by.d.ts.map +0 -0
  313. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/max_of.d.ts +0 -0
  314. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/max_of.d.ts.map +0 -0
  315. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/max_with.d.ts +0 -0
  316. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/max_with.d.ts.map +0 -0
  317. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/min_by.d.ts +0 -0
  318. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/min_by.d.ts.map +0 -0
  319. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/min_of.d.ts +0 -0
  320. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/min_of.d.ts.map +0 -0
  321. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/min_with.d.ts +0 -0
  322. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/min_with.d.ts.map +0 -0
  323. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/mod.d.ts +0 -0
  324. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/mod.d.ts.map +0 -0
  325. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/omit.d.ts +0 -0
  326. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/omit.d.ts.map +0 -0
  327. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/partition.d.ts +0 -0
  328. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/partition.d.ts.map +0 -0
  329. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/partition_entries.d.ts +0 -0
  330. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/partition_entries.d.ts.map +0 -0
  331. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/permutations.d.ts +0 -0
  332. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/permutations.d.ts.map +0 -0
  333. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/pick.d.ts +0 -0
  334. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/pick.d.ts.map +0 -0
  335. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/reduce_groups.d.ts +0 -0
  336. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/reduce_groups.d.ts.map +0 -0
  337. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/running_reduce.d.ts +0 -0
  338. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/running_reduce.d.ts.map +0 -0
  339. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/sample.d.ts +0 -0
  340. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/sample.d.ts.map +0 -0
  341. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/sliding_windows.d.ts +0 -0
  342. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/sliding_windows.d.ts.map +0 -0
  343. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/sort_by.d.ts +0 -0
  344. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/sort_by.d.ts.map +0 -0
  345. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/sum_of.d.ts +0 -0
  346. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/sum_of.d.ts.map +0 -0
  347. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/take_last_while.d.ts +0 -0
  348. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/take_last_while.d.ts.map +0 -0
  349. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/take_while.d.ts +0 -0
  350. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/take_while.d.ts.map +0 -0
  351. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/union.d.ts +0 -0
  352. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/union.d.ts.map +0 -0
  353. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/unzip.d.ts +0 -0
  354. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/unzip.d.ts.map +0 -0
  355. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/without_all.d.ts +0 -0
  356. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/without_all.d.ts.map +0 -0
  357. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/zip.d.ts +0 -0
  358. /package/{types → esm}/deps/jsr.io/@std/collections/1.0.9/zip.d.ts.map +0 -0
  359. /package/{types → esm}/mod.d.ts +0 -0
  360. /package/{types → esm}/mod.d.ts.map +0 -0
  361. /package/{types → esm}/types/Ref.d.ts +0 -0
  362. /package/{types → esm}/types/constant.d.ts +0 -0
  363. /package/{types → esm}/types/constantUnion.d.ts +0 -0
  364. /package/{types → esm}/types/std/Option.d.ts +0 -0
  365. /package/{types → esm}/types/std/Option.d.ts.map +0 -0
  366. /package/{types → esm}/types/std/mod.d.ts +0 -0
  367. /package/{types → esm}/types/std/mod.d.ts.map +0 -0
  368. /package/{types → esm}/util/phantoms.d.ts +0 -0
  369. /package/{types → esm}/util/phantoms.d.ts.map +0 -0
  370. /package/{types → esm}/util/recombineTaggedTemplateArgs.d.ts +0 -0
  371. /package/{types → esm}/util/recombineTaggedTemplateArgs.d.ts.map +0 -0
@@ -1,111 +0,0 @@
1
- // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
- // This module is browser compatible.
3
- import { assertIsError } from "./is_error.js";
4
- import { AssertionError } from "./assertion_error.js";
5
-
6
- /**
7
- * Executes a function, expecting it to throw. If it does not, then it
8
- * throws.
9
- *
10
- * To assert that an asynchronous function rejects, use
11
- * {@linkcode assertRejects}.
12
- *
13
- * @example Usage
14
- * ```ts ignore
15
- * import { assertThrows } from "@std/assert";
16
- *
17
- * assertThrows(() => { throw new TypeError("hello world!"); }); // Doesn't throw
18
- * assertThrows(() => console.log("hello world!")); // Throws
19
- * ```
20
- *
21
- * @param fn The function to execute.
22
- * @param msg The optional message to display if the assertion fails.
23
- * @returns The error that was thrown.
24
- */
25
- export function assertThrows(
26
- fn: () => unknown,
27
- msg?: string,
28
- ): unknown;
29
- /**
30
- * Executes a function, expecting it to throw. If it does not, then it
31
- * throws. An error class and a string that should be included in the
32
- * error message can also be asserted.
33
- *
34
- * To assert that an asynchronous function rejects, use
35
- * {@linkcode assertRejects}.
36
- *
37
- * @example Usage
38
- * ```ts ignore
39
- * import { assertThrows } from "@std/assert";
40
- *
41
- * assertThrows(() => { throw new TypeError("hello world!"); }, TypeError); // Doesn't throw
42
- * assertThrows(() => { throw new TypeError("hello world!"); }, RangeError); // Throws
43
- * ```
44
- *
45
- * @typeParam E The error class to assert.
46
- * @param fn The function to execute.
47
- * @param ErrorClass The error class to assert.
48
- * @param msgIncludes The string that should be included in the error message.
49
- * @param msg The optional message to display if the assertion fails.
50
- * @returns The error that was thrown.
51
- */
52
- export function assertThrows<E extends Error = Error>(
53
- fn: () => unknown,
54
- // deno-lint-ignore no-explicit-any
55
- ErrorClass: abstract new (...args: any[]) => E,
56
- msgIncludes?: string,
57
- msg?: string,
58
- ): E;
59
- export function assertThrows<E extends Error = Error>(
60
- fn: () => unknown,
61
- errorClassOrMsg?:
62
- // deno-lint-ignore no-explicit-any
63
- | (abstract new (...args: any[]) => E)
64
- | string,
65
- msgIncludesOrMsg?: string,
66
- msg?: string,
67
- ): E | Error | unknown {
68
- // deno-lint-ignore no-explicit-any
69
- let ErrorClass: (abstract new (...args: any[]) => E) | undefined;
70
- let msgIncludes: string | undefined;
71
- let err;
72
-
73
- if (typeof errorClassOrMsg !== "string") {
74
- if (
75
- errorClassOrMsg === undefined ||
76
- errorClassOrMsg?.prototype instanceof Error ||
77
- errorClassOrMsg?.prototype === Error.prototype
78
- ) {
79
- ErrorClass = errorClassOrMsg;
80
- msgIncludes = msgIncludesOrMsg;
81
- } else {
82
- msg = msgIncludesOrMsg;
83
- }
84
- } else {
85
- msg = errorClassOrMsg;
86
- }
87
- let doesThrow = false;
88
- const msgSuffix = msg ? `: ${msg}` : ".";
89
- try {
90
- fn();
91
- } catch (error) {
92
- if (ErrorClass) {
93
- if (error instanceof Error === false) {
94
- throw new AssertionError(`A non-Error object was thrown${msgSuffix}`);
95
- }
96
- assertIsError(
97
- error,
98
- ErrorClass,
99
- msgIncludes,
100
- msg,
101
- );
102
- }
103
- err = error;
104
- doesThrow = true;
105
- }
106
- if (!doesThrow) {
107
- msg = `Expected function to throw${msgSuffix}`;
108
- throw new AssertionError(msg);
109
- }
110
- return err;
111
- }
@@ -1,21 +0,0 @@
1
- // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
- // This module is browser compatible.
3
- import { AssertionError } from "./assertion_error.js";
4
-
5
- /**
6
- * Use this to stub out methods that will throw when invoked.
7
- *
8
- * @example Usage
9
- * ```ts ignore
10
- * import { unimplemented } from "@std/assert";
11
- *
12
- * unimplemented(); // Throws
13
- * ```
14
- *
15
- * @param msg Optional message to include in the error.
16
- * @returns Never returns, always throws.
17
- */
18
- export function unimplemented(msg?: string): never {
19
- const msgSuffix = msg ? `: ${msg}` : ".";
20
- throw new AssertionError(`Unimplemented${msgSuffix}`);
21
- }
@@ -1,21 +0,0 @@
1
- // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
- // This module is browser compatible.
3
- import { AssertionError } from "./assertion_error.js";
4
-
5
- /**
6
- * Use this to assert unreachable code.
7
- *
8
- * @example Usage
9
- * ```ts ignore
10
- * import { unreachable } from "@std/assert";
11
- *
12
- * unreachable(); // Throws
13
- * ```
14
- *
15
- * @param msg Optional message to include in the error.
16
- * @returns Never returns, always throws.
17
- */
18
- export function unreachable(msg?: string): never {
19
- const msgSuffix = msg ? `: ${msg}` : ".";
20
- throw new AssertionError(`Unreachable${msgSuffix}`);
21
- }
@@ -1,134 +0,0 @@
1
- // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
- // This module is browser compatible.
3
-
4
- import { bgGreen, bgRed, bold, gray, green, red, white } from "./styles.js";
5
- import type { DiffResult, DiffType } from "./types.js";
6
-
7
- /**
8
- * Colors the output of assertion diffs.
9
- *
10
- * @param diffType Difference type, either added or removed.
11
- * @param background If true, colors the background instead of the text.
12
- *
13
- * @returns A function that colors the input string.
14
- *
15
- * @example Usage
16
- * ```ts
17
- * import { createColor } from "@std/internal";
18
- * import { assertEquals } from "@std/assert";
19
- * import { bold, green, red, white } from "@std/fmt/colors";
20
- *
21
- * assertEquals(createColor("added")("foo"), green(bold("foo")));
22
- * assertEquals(createColor("removed")("foo"), red(bold("foo")));
23
- * assertEquals(createColor("common")("foo"), white("foo"));
24
- * ```
25
- */
26
- export function createColor(
27
- diffType: DiffType,
28
- /**
29
- * TODO(@littledivy): Remove this when we can detect true color terminals. See
30
- * https://github.com/denoland/deno_std/issues/2575.
31
- */
32
- background = false,
33
- ): (s: string) => string {
34
- switch (diffType) {
35
- case "added":
36
- return (s) => background ? bgGreen(white(s)) : green(bold(s));
37
- case "removed":
38
- return (s) => background ? bgRed(white(s)) : red(bold(s));
39
- default:
40
- return white;
41
- }
42
- }
43
-
44
- /**
45
- * Prefixes `+` or `-` in diff output.
46
- *
47
- * @param diffType Difference type, either added or removed
48
- *
49
- * @returns A string representing the sign.
50
- *
51
- * @example Usage
52
- * ```ts
53
- * import { createSign } from "@std/internal";
54
- * import { assertEquals } from "@std/assert";
55
- *
56
- * assertEquals(createSign("added"), "+ ");
57
- * assertEquals(createSign("removed"), "- ");
58
- * assertEquals(createSign("common"), " ");
59
- * ```
60
- */
61
- export function createSign(diffType: DiffType): string {
62
- switch (diffType) {
63
- case "added":
64
- return "+ ";
65
- case "removed":
66
- return "- ";
67
- default:
68
- return " ";
69
- }
70
- }
71
-
72
- /** Options for {@linkcode buildMessage}. */
73
- export interface BuildMessageOptions {
74
- /**
75
- * Whether to output the diff as a single string.
76
- *
77
- * @default {false}
78
- */
79
- stringDiff?: boolean;
80
- }
81
-
82
- /**
83
- * Builds a message based on the provided diff result.
84
- *
85
- * @param diffResult The diff result array.
86
- * @param options Optional parameters for customizing the message.
87
- *
88
- * @returns An array of strings representing the built message.
89
- *
90
- * @example Usage
91
- * ```ts no-assert
92
- * import { diffStr, buildMessage } from "@std/internal";
93
- *
94
- * const diffResult = diffStr("Hello, world!", "Hello, world");
95
- *
96
- * console.log(buildMessage(diffResult));
97
- * // [
98
- * // "",
99
- * // "",
100
- * // " [Diff] Actual / Expected",
101
- * // "",
102
- * // "",
103
- * // "- Hello, world!",
104
- * // "+ Hello, world",
105
- * // "",
106
- * // ]
107
- * ```
108
- */
109
- export function buildMessage(
110
- diffResult: ReadonlyArray<DiffResult<string>>,
111
- options: BuildMessageOptions = {},
112
- ): string[] {
113
- const { stringDiff = false } = options;
114
- const messages = [
115
- "",
116
- "",
117
- ` ${gray(bold("[Diff]"))} ${red(bold("Actual"))} / ${
118
- green(bold("Expected"))
119
- }`,
120
- "",
121
- "",
122
- ];
123
- const diffMessages = diffResult.map((result) => {
124
- const color = createColor(result.type);
125
- const line = result.details?.map((detail) =>
126
- detail.type !== "common"
127
- ? createColor(detail.type, true)(detail.value)
128
- : detail.value
129
- ).join("") ?? result.value;
130
- return color(`${createSign(result.type)}${line}`);
131
- });
132
- messages.push(...(stringDiff ? [diffMessages.join("")] : diffMessages), "");
133
- return messages;
134
- }
@@ -1,317 +0,0 @@
1
- // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
2
- // This module is browser compatible.
3
-
4
- import type { DiffResult, DiffType } from "./types.js";
5
-
6
- /** Represents the farthest point in the diff algorithm. */
7
- export interface FarthestPoint {
8
- /** The y-coordinate of the point. */
9
- y: number;
10
- /** The id of the point. */
11
- id: number;
12
- }
13
-
14
- const REMOVED = 1;
15
- const COMMON = 2;
16
- const ADDED = 3;
17
-
18
- /**
19
- * Creates an array of common elements between two arrays.
20
- *
21
- * @typeParam T The type of elements in the arrays.
22
- *
23
- * @param A The first array.
24
- * @param B The second array.
25
- *
26
- * @returns An array containing the common elements between the two arrays.
27
- *
28
- * @example Usage
29
- * ```ts
30
- * import { createCommon } from "@std/internal/diff";
31
- * import { assertEquals } from "@std/assert";
32
- *
33
- * const a = [1, 2, 3];
34
- * const b = [1, 2, 4];
35
- *
36
- * assertEquals(createCommon(a, b), [1, 2]);
37
- * ```
38
- */
39
- export function createCommon<T>(A: T[], B: T[]): T[] {
40
- const common: T[] = [];
41
- if (A.length === 0 || B.length === 0) return [];
42
- for (let i = 0; i < Math.min(A.length, B.length); i += 1) {
43
- const a = A[i];
44
- const b = B[i];
45
- if (a !== undefined && a === b) {
46
- common.push(a);
47
- } else {
48
- return common;
49
- }
50
- }
51
- return common;
52
- }
53
-
54
- /**
55
- * Asserts that the value is a {@linkcode FarthestPoint}.
56
- * If not, an error is thrown.
57
- *
58
- * @param value The value to check.
59
- *
60
- * @returns A void value that returns once the assertion completes.
61
- *
62
- * @example Usage
63
- * ```ts
64
- * import { assertFp } from "@std/internal/diff";
65
- * import { assertThrows } from "@std/assert";
66
- *
67
- * assertFp({ y: 0, id: 0 });
68
- * assertThrows(() => assertFp({ id: 0 }));
69
- * assertThrows(() => assertFp({ y: 0 }));
70
- * assertThrows(() => assertFp(undefined));
71
- * ```
72
- */
73
- export function assertFp(value: unknown): asserts value is FarthestPoint {
74
- if (
75
- value == null ||
76
- typeof value !== "object" ||
77
- typeof (value as FarthestPoint)?.y !== "number" ||
78
- typeof (value as FarthestPoint)?.id !== "number"
79
- ) {
80
- throw new Error(
81
- `Unexpected value, expected 'FarthestPoint': received ${typeof value}`,
82
- );
83
- }
84
- }
85
-
86
- /**
87
- * Creates an array of backtraced differences.
88
- *
89
- * @typeParam T The type of elements in the arrays.
90
- *
91
- * @param A The first array.
92
- * @param B The second array.
93
- * @param current The current {@linkcode FarthestPoint}.
94
- * @param swapped Boolean indicating if the arrays are swapped.
95
- * @param routes The routes array.
96
- * @param diffTypesPtrOffset The offset of the diff types in the routes array.
97
- *
98
- * @returns An array of backtraced differences.
99
- *
100
- * @example Usage
101
- * ```ts
102
- * import { backTrace } from "@std/internal/diff";
103
- * import { assertEquals } from "@std/assert";
104
- *
105
- * assertEquals(
106
- * backTrace([], [], { y: 0, id: 0 }, false, new Uint32Array(0), 0),
107
- * [],
108
- * );
109
- * ```
110
- */
111
- export function backTrace<T>(
112
- A: T[],
113
- B: T[],
114
- current: FarthestPoint,
115
- swapped: boolean,
116
- routes: Uint32Array,
117
- diffTypesPtrOffset: number,
118
- ): Array<{
119
- type: DiffType;
120
- value: T;
121
- }> {
122
- const M = A.length;
123
- const N = B.length;
124
- const result: { type: DiffType; value: T }[] = [];
125
- let a = M - 1;
126
- let b = N - 1;
127
- let j = routes[current.id];
128
- let type = routes[current.id + diffTypesPtrOffset];
129
- while (true) {
130
- if (!j && !type) break;
131
- const prev = j!;
132
- if (type === REMOVED) {
133
- result.unshift({
134
- type: swapped ? "removed" : "added",
135
- value: B[b]!,
136
- });
137
- b -= 1;
138
- } else if (type === ADDED) {
139
- result.unshift({
140
- type: swapped ? "added" : "removed",
141
- value: A[a]!,
142
- });
143
- a -= 1;
144
- } else {
145
- result.unshift({ type: "common", value: A[a]! });
146
- a -= 1;
147
- b -= 1;
148
- }
149
- j = routes[prev];
150
- type = routes[prev + diffTypesPtrOffset];
151
- }
152
- return result;
153
- }
154
-
155
- /**
156
- * Creates a {@linkcode FarthestPoint}.
157
- *
158
- * @param k The current index.
159
- * @param M The length of the first array.
160
- * @param routes The routes array.
161
- * @param diffTypesPtrOffset The offset of the diff types in the routes array.
162
- * @param ptr The current pointer.
163
- * @param slide The slide {@linkcode FarthestPoint}.
164
- * @param down The down {@linkcode FarthestPoint}.
165
- *
166
- * @returns A {@linkcode FarthestPoint}.
167
- *
168
- * @example Usage
169
- * ```ts
170
- * import { createFp } from "@std/internal/diff";
171
- * import { assertEquals } from "@std/assert";
172
- *
173
- * assertEquals(
174
- * createFp(
175
- * 0,
176
- * 0,
177
- * new Uint32Array(0),
178
- * 0,
179
- * 0,
180
- * { y: -1, id: 0 },
181
- * { y: 0, id: 0 },
182
- * ),
183
- * { y: -1, id: 1 },
184
- * );
185
- * ```
186
- */
187
- export function createFp(
188
- k: number,
189
- M: number,
190
- routes: Uint32Array,
191
- diffTypesPtrOffset: number,
192
- ptr: number,
193
- slide?: FarthestPoint,
194
- down?: FarthestPoint,
195
- ): FarthestPoint {
196
- if (slide && slide.y === -1 && down && down.y === -1) {
197
- return { y: 0, id: 0 };
198
- }
199
- const isAdding = (down?.y === -1) ||
200
- k === M ||
201
- (slide?.y ?? 0) > (down?.y ?? 0) + 1;
202
- if (slide && isAdding) {
203
- const prev = slide.id;
204
- ptr++;
205
- routes[ptr] = prev;
206
- routes[ptr + diffTypesPtrOffset] = ADDED;
207
- return { y: slide.y, id: ptr };
208
- }
209
- if (down && !isAdding) {
210
- const prev = down.id;
211
- ptr++;
212
- routes[ptr] = prev;
213
- routes[ptr + diffTypesPtrOffset] = REMOVED;
214
- return { y: down.y + 1, id: ptr };
215
- }
216
- throw new Error("Unexpected missing FarthestPoint");
217
- }
218
-
219
- /**
220
- * Renders the differences between the actual and expected values.
221
- *
222
- * @typeParam T The type of elements in the arrays.
223
- *
224
- * @param A Actual value
225
- * @param B Expected value
226
- *
227
- * @returns An array of differences between the actual and expected values.
228
- *
229
- * @example Usage
230
- * ```ts
231
- * import { diff } from "@std/internal/diff";
232
- * import { assertEquals } from "@std/assert";
233
- *
234
- * const a = [1, 2, 3];
235
- * const b = [1, 2, 4];
236
- *
237
- * assertEquals(diff(a, b), [
238
- * { type: "common", value: 1 },
239
- * { type: "common", value: 2 },
240
- * { type: "removed", value: 3 },
241
- * { type: "added", value: 4 },
242
- * ]);
243
- * ```
244
- */
245
- export function diff<T>(A: T[], B: T[]): DiffResult<T>[] {
246
- const prefixCommon = createCommon(A, B);
247
- A = A.slice(prefixCommon.length);
248
- B = B.slice(prefixCommon.length);
249
- const swapped = B.length > A.length;
250
- [A, B] = swapped ? [B, A] : [A, B];
251
- const M = A.length;
252
- const N = B.length;
253
- if (!M && !N && !prefixCommon.length) return [];
254
- if (!N) {
255
- return [
256
- ...prefixCommon.map((value) => ({ type: "common", value })),
257
- ...A.map((value) => ({ type: swapped ? "added" : "removed", value })),
258
- ] as DiffResult<T>[];
259
- }
260
- const offset = N;
261
- const delta = M - N;
262
- const length = M + N + 1;
263
- const fp: FarthestPoint[] = Array.from({ length }, () => ({ y: -1, id: -1 }));
264
-
265
- /**
266
- * Note: this buffer is used to save memory and improve performance. The first
267
- * half is used to save route and the last half is used to save diff type.
268
- */
269
- const routes = new Uint32Array((M * N + length + 1) * 2);
270
- const diffTypesPtrOffset = routes.length / 2;
271
- let ptr = 0;
272
-
273
- function snake<T>(
274
- k: number,
275
- A: T[],
276
- B: T[],
277
- slide?: FarthestPoint,
278
- down?: FarthestPoint,
279
- ): FarthestPoint {
280
- const M = A.length;
281
- const N = B.length;
282
- const fp = createFp(k, M, routes, diffTypesPtrOffset, ptr, slide, down);
283
- ptr = fp.id;
284
- while (fp.y + k < M && fp.y < N && A[fp.y + k] === B[fp.y]) {
285
- const prev = fp.id;
286
- ptr++;
287
- fp.id = ptr;
288
- fp.y += 1;
289
- routes[ptr] = prev;
290
- routes[ptr + diffTypesPtrOffset] = COMMON;
291
- }
292
- return fp;
293
- }
294
-
295
- let currentFp = fp[delta + offset];
296
- assertFp(currentFp);
297
- let p = -1;
298
- while (currentFp.y < N) {
299
- p = p + 1;
300
- for (let k = -p; k < delta; ++k) {
301
- const index = k + offset;
302
- fp[index] = snake(k, A, B, fp[index - 1], fp[index + 1]);
303
- }
304
- for (let k = delta + p; k > delta; --k) {
305
- const index = k + offset;
306
- fp[index] = snake(k, A, B, fp[index - 1], fp[index + 1]);
307
- }
308
- const index = delta + offset;
309
- fp[delta + offset] = snake(delta, A, B, fp[index - 1], fp[index + 1]);
310
- currentFp = fp[delta + offset];
311
- assertFp(currentFp);
312
- }
313
- return [
314
- ...prefixCommon.map((value) => ({ type: "common", value })),
315
- ...backTrace(A, B, currentFp, swapped, routes, diffTypesPtrOffset),
316
- ] as DiffResult<T>[];
317
- }