@davidsouther/jiffies 1.1.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (379) hide show
  1. package/{build → lib/cjs}/assert.d.ts +23 -23
  2. package/lib/cjs/assert.js +40 -0
  3. package/{build → lib/cjs}/case.d.ts +1 -1
  4. package/lib/cjs/case.js +9 -0
  5. package/{build → lib/cjs}/components/button_bar.d.ts +8 -8
  6. package/lib/cjs/components/button_bar.js +29 -0
  7. package/{build → lib/cjs}/components/inline_edit.d.ts +12 -12
  8. package/lib/cjs/components/inline_edit.js +51 -0
  9. package/{build → lib/cjs}/components/logger.d.ts +6 -6
  10. package/lib/cjs/components/logger.js +27 -0
  11. package/lib/cjs/components/select.d.ts +10 -0
  12. package/lib/cjs/components/select.js +6 -0
  13. package/lib/cjs/components/test.d.ts +1 -0
  14. package/lib/cjs/components/test.js +7 -0
  15. package/{build → lib/cjs}/components/virtual_scroll.d.ts +40 -40
  16. package/lib/cjs/components/virtual_scroll.js +102 -0
  17. package/{build → lib/cjs}/components/virtual_scroll.test.d.ts +1 -1
  18. package/lib/cjs/components/virtual_scroll.test.js +22 -0
  19. package/{build → lib/cjs}/context.d.ts +15 -15
  20. package/lib/cjs/context.js +48 -0
  21. package/{build → lib/cjs}/context.test.d.ts +1 -1
  22. package/lib/cjs/context.test.js +48 -0
  23. package/{build → lib/cjs}/debounce.d.ts +1 -1
  24. package/lib/cjs/debounce.js +11 -0
  25. package/lib/cjs/diff.d.ts +15 -0
  26. package/lib/cjs/diff.js +58 -0
  27. package/{build/components/test.d.ts → lib/cjs/diff.test.d.ts} +1 -1
  28. package/lib/cjs/diff.test.js +41 -0
  29. package/{build → lib/cjs}/display.d.ts +5 -5
  30. package/lib/cjs/display.js +16 -0
  31. package/{build → lib/cjs}/dom/css/border.d.ts +11 -11
  32. package/lib/cjs/dom/css/border.js +33 -0
  33. package/{build → lib/cjs}/dom/css/constants.d.ts +31 -31
  34. package/lib/cjs/dom/css/constants.js +31 -0
  35. package/{build → lib/cjs}/dom/css/core.d.ts +5 -5
  36. package/lib/cjs/dom/css/core.js +31 -0
  37. package/{build → lib/cjs}/dom/css/fstyle.d.ts +5 -5
  38. package/lib/cjs/dom/css/fstyle.js +36 -0
  39. package/{build → lib/cjs}/dom/css/sizing.d.ts +5 -5
  40. package/lib/cjs/dom/css/sizing.js +14 -0
  41. package/{build → lib/cjs}/dom/dom.d.ts +27 -26
  42. package/lib/cjs/dom/dom.js +110 -0
  43. package/{build → lib/cjs}/dom/fc.d.ts +14 -14
  44. package/lib/cjs/dom/fc.js +39 -0
  45. package/{build → lib/cjs}/dom/fc.test.d.ts +1 -1
  46. package/lib/cjs/dom/fc.test.js +23 -0
  47. package/{build → lib/cjs}/dom/form/form.app.d.ts +1 -1
  48. package/lib/cjs/dom/form/form.app.js +27 -0
  49. package/{build → lib/cjs}/dom/form/form.d.ts +26 -26
  50. package/lib/cjs/dom/form/form.js +49 -0
  51. package/{build → lib/cjs}/dom/form/form.test.d.ts +0 -0
  52. package/{build → lib/cjs}/dom/form/form.test.js +1 -1
  53. package/{build → lib/cjs}/dom/html.d.ts +113 -113
  54. package/lib/cjs/dom/html.js +119 -0
  55. package/{build → lib/cjs}/dom/html.test.d.ts +1 -1
  56. package/lib/cjs/dom/html.test.js +60 -0
  57. package/lib/cjs/dom/observable.d.ts +2 -0
  58. package/lib/cjs/dom/observable.js +10 -0
  59. package/{build/observable → lib/cjs/dom}/observable.test.d.ts +1 -1
  60. package/lib/cjs/dom/observable.test.js +35 -0
  61. package/{build → lib/cjs}/dom/provide.d.ts +3 -3
  62. package/lib/cjs/dom/provide.js +12 -0
  63. package/{build → lib/cjs}/dom/router/link.d.ts +6 -6
  64. package/lib/cjs/dom/router/link.js +7 -0
  65. package/{build → lib/cjs}/dom/router/router.d.ts +12 -12
  66. package/lib/cjs/dom/router/router.js +52 -0
  67. package/{build → lib/cjs}/dom/svg.d.ts +64 -64
  68. package/lib/cjs/dom/svg.js +69 -0
  69. package/lib/cjs/dom/test.d.ts +1 -0
  70. package/lib/cjs/dom/test.js +13 -0
  71. package/{build → lib/cjs}/dom/types/css.d.ts +6612 -6612
  72. package/lib/cjs/dom/types/css.js +24 -0
  73. package/{build → lib/cjs}/dom/types/dom.d.ts +0 -0
  74. package/{build → lib/cjs}/dom/types/dom.js +1 -1
  75. package/{build → lib/cjs}/dom/types/html.d.ts +616 -616
  76. package/lib/cjs/dom/types/html.js +2 -0
  77. package/{build → lib/cjs}/dom/xml.d.ts +1 -1
  78. package/lib/cjs/dom/xml.js +8 -0
  79. package/{build → lib/cjs}/equal.d.ts +5 -5
  80. package/lib/cjs/equal.js +43 -0
  81. package/{build → lib/cjs}/equal.test.d.ts +1 -1
  82. package/lib/cjs/equal.test.js +22 -0
  83. package/{build → lib/cjs}/flags.d.ts +7 -7
  84. package/lib/cjs/flags.js +52 -0
  85. package/{build → lib/cjs}/flags.test.d.ts +1 -1
  86. package/lib/cjs/flags.test.js +37 -0
  87. package/{build → lib/cjs}/fs.d.ts +48 -48
  88. package/lib/cjs/fs.js +151 -0
  89. package/{build → lib/cjs}/fs.test.d.ts +1 -1
  90. package/lib/cjs/fs.test.js +45 -0
  91. package/{build → lib/cjs}/generator.d.ts +1 -1
  92. package/lib/cjs/generator.js +14 -0
  93. package/{build → lib/cjs}/generator.test.d.ts +1 -1
  94. package/lib/cjs/generator.test.js +26 -0
  95. package/{build → lib/cjs}/is_browser.d.ts +1 -1
  96. package/lib/cjs/is_browser.js +4 -0
  97. package/{build → lib/cjs}/loader.d.mts +22 -22
  98. package/lib/cjs/loader.mjs +40 -0
  99. package/{build → lib/cjs}/lock.d.ts +1 -1
  100. package/lib/cjs/lock.js +27 -0
  101. package/{build → lib/cjs}/lock.test.d.ts +1 -1
  102. package/lib/cjs/lock.test.js +18 -0
  103. package/{build → lib/cjs}/log.d.ts +26 -26
  104. package/lib/cjs/log.js +54 -0
  105. package/lib/cjs/observable/event.d.ts +35 -0
  106. package/lib/cjs/observable/event.js +61 -0
  107. package/lib/cjs/observable/observable.d.ts +132 -0
  108. package/lib/cjs/observable/observable.js +363 -0
  109. package/lib/cjs/observable/observable.test.d.ts +1 -0
  110. package/lib/cjs/observable/observable.test.js +65 -0
  111. package/{build → lib/cjs}/range.d.ts +1 -1
  112. package/lib/cjs/range.js +11 -0
  113. package/{build → lib/cjs}/result.d.ts +31 -31
  114. package/lib/cjs/result.js +80 -0
  115. package/{build → lib/cjs}/result.test.d.ts +1 -1
  116. package/lib/cjs/result.test.js +73 -0
  117. package/{build → lib/cjs}/safe.d.ts +1 -1
  118. package/lib/cjs/safe.js +14 -0
  119. package/{build → lib/cjs}/scope/describe.d.ts +18 -18
  120. package/lib/cjs/scope/describe.js +73 -0
  121. package/{build → lib/cjs}/scope/display/console.d.ts +2 -2
  122. package/lib/cjs/scope/display/console.js +25 -0
  123. package/{build → lib/cjs}/scope/display/dom.d.ts +3 -3
  124. package/lib/cjs/scope/display/dom.js +30 -0
  125. package/{build → lib/cjs}/scope/display/junit.d.ts +2 -2
  126. package/lib/cjs/scope/display/junit.js +21 -0
  127. package/{build → lib/cjs}/scope/execute.d.ts +12 -12
  128. package/lib/cjs/scope/execute.js +91 -0
  129. package/{build → lib/cjs}/scope/expect.d.ts +23 -23
  130. package/lib/cjs/scope/expect.js +114 -0
  131. package/{build → lib/cjs}/scope/fix.d.ts +4 -4
  132. package/lib/cjs/scope/fix.js +26 -0
  133. package/{build → lib/cjs}/scope/index.d.ts +3 -3
  134. package/lib/cjs/scope/index.js +15 -0
  135. package/{build → lib/cjs}/scope/scope.d.ts +17 -17
  136. package/lib/cjs/scope/scope.js +2 -0
  137. package/lib/cjs/scope/state.d.ts +1 -0
  138. package/lib/cjs/scope/state.js +11 -0
  139. package/{build → lib/cjs}/server/http/apps.d.ts +5 -5
  140. package/lib/cjs/server/http/apps.js +27 -0
  141. package/{build → lib/cjs}/server/http/css.d.ts +5 -5
  142. package/lib/cjs/server/http/css.js +54 -0
  143. package/{build → lib/cjs}/server/http/index.d.ts +21 -21
  144. package/lib/cjs/server/http/index.js +77 -0
  145. package/{build → lib/cjs}/server/http/response.d.ts +4 -4
  146. package/lib/cjs/server/http/response.js +45 -0
  147. package/{build → lib/cjs}/server/http/sitemap.d.ts +2 -2
  148. package/lib/cjs/server/http/sitemap.js +46 -0
  149. package/{build → lib/cjs}/server/http/static.d.ts +2 -2
  150. package/lib/cjs/server/http/static.js +25 -0
  151. package/{build → lib/cjs}/server/http/typescript.d.ts +5 -5
  152. package/lib/cjs/server/http/typescript.js +44 -0
  153. package/{build → lib/cjs}/server/main.d.ts +2 -2
  154. package/lib/cjs/server/main.js +14 -0
  155. package/{build → lib/cjs}/test.d.mts +2 -2
  156. package/lib/cjs/test.mjs +28 -0
  157. package/{build → lib/cjs}/test_all.d.ts +9 -7
  158. package/lib/cjs/test_all.js +30 -0
  159. package/{build → lib/cjs}/transpile.d.mts +3 -3
  160. package/lib/cjs/transpile.mjs +22 -0
  161. package/lib/cjs/tsconfig.tsbuildinfo +1 -0
  162. package/lib/esm/assert.d.ts +23 -0
  163. package/{build → lib/esm}/assert.js +33 -33
  164. package/lib/esm/case.d.ts +1 -0
  165. package/{build → lib/esm}/case.js +5 -5
  166. package/lib/esm/components/button_bar.d.ts +8 -0
  167. package/{build → lib/esm}/components/button_bar.js +27 -27
  168. package/lib/esm/components/inline_edit.d.ts +12 -0
  169. package/{build → lib/esm}/components/inline_edit.js +48 -48
  170. package/lib/esm/components/logger.d.ts +6 -0
  171. package/{build → lib/esm}/components/logger.js +22 -22
  172. package/lib/esm/components/select.d.ts +10 -0
  173. package/{build → lib/esm}/components/select.js +3 -3
  174. package/lib/esm/components/test.d.ts +1 -0
  175. package/lib/esm/components/test.js +3 -0
  176. package/lib/esm/components/virtual_scroll.d.ts +40 -0
  177. package/{build → lib/esm}/components/virtual_scroll.js +94 -94
  178. package/lib/esm/components/virtual_scroll.test.d.ts +1 -0
  179. package/{build → lib/esm}/components/virtual_scroll.test.js +20 -21
  180. package/lib/esm/context.d.ts +15 -0
  181. package/{build → lib/esm}/context.js +43 -43
  182. package/lib/esm/context.test.d.ts +1 -0
  183. package/{build → lib/esm}/context.test.js +46 -46
  184. package/lib/esm/debounce.d.ts +1 -0
  185. package/{build → lib/esm}/debounce.js +7 -7
  186. package/lib/esm/diff.d.ts +15 -0
  187. package/lib/esm/diff.js +54 -0
  188. package/lib/esm/diff.test.d.ts +1 -0
  189. package/lib/esm/diff.test.js +39 -0
  190. package/lib/esm/display.d.ts +5 -0
  191. package/{build → lib/esm}/display.js +11 -11
  192. package/lib/esm/dom/css/border.d.ts +11 -0
  193. package/{build → lib/esm}/dom/css/border.js +27 -27
  194. package/lib/esm/dom/css/constants.d.ts +31 -0
  195. package/{build → lib/esm}/dom/css/constants.js +28 -28
  196. package/lib/esm/dom/css/core.d.ts +5 -0
  197. package/{build → lib/esm}/dom/css/core.js +24 -24
  198. package/lib/esm/dom/css/fstyle.d.ts +5 -0
  199. package/{build → lib/esm}/dom/css/fstyle.js +32 -32
  200. package/lib/esm/dom/css/sizing.d.ts +5 -0
  201. package/{build → lib/esm}/dom/css/sizing.js +10 -10
  202. package/lib/esm/dom/dom.d.ts +27 -0
  203. package/{build → lib/esm}/dom/dom.js +104 -95
  204. package/lib/esm/dom/fc.d.ts +14 -0
  205. package/{build → lib/esm}/dom/fc.js +35 -36
  206. package/lib/esm/dom/fc.test.d.ts +1 -0
  207. package/{build → lib/esm}/dom/fc.test.js +21 -21
  208. package/lib/esm/dom/form/form.app.d.ts +1 -0
  209. package/{build → lib/esm}/dom/form/form.app.js +23 -23
  210. package/lib/esm/dom/form/form.d.ts +26 -0
  211. package/{build → lib/esm}/dom/form/form.js +34 -34
  212. package/lib/esm/dom/form/form.test.d.ts +0 -0
  213. package/lib/esm/dom/form/form.test.js +1 -0
  214. package/lib/esm/dom/html.d.ts +113 -0
  215. package/{build → lib/esm}/dom/html.js +114 -114
  216. package/lib/esm/dom/html.test.d.ts +1 -0
  217. package/{build → lib/esm}/dom/html.test.js +58 -58
  218. package/lib/esm/dom/observable.d.ts +2 -0
  219. package/lib/esm/dom/observable.js +6 -0
  220. package/lib/esm/dom/observable.test.d.ts +1 -0
  221. package/lib/esm/dom/observable.test.js +33 -0
  222. package/lib/esm/dom/provide.d.ts +3 -0
  223. package/{build → lib/esm}/dom/provide.js +7 -7
  224. package/lib/esm/dom/router/link.d.ts +6 -0
  225. package/{build → lib/esm}/dom/router/link.js +3 -3
  226. package/lib/esm/dom/router/router.d.ts +12 -0
  227. package/{build → lib/esm}/dom/router/router.js +49 -49
  228. package/lib/esm/dom/svg.d.ts +64 -0
  229. package/{build → lib/esm}/dom/svg.js +65 -65
  230. package/lib/esm/dom/test.d.ts +1 -0
  231. package/lib/esm/dom/test.js +9 -0
  232. package/lib/esm/dom/types/css.d.ts +6612 -0
  233. package/{build → lib/esm}/dom/types/css.js +23 -23
  234. package/lib/esm/dom/types/dom.d.ts +0 -0
  235. package/lib/esm/dom/types/dom.js +1 -0
  236. package/lib/esm/dom/types/html.d.ts +616 -0
  237. package/{build → lib/esm}/dom/types/html.js +1 -1
  238. package/lib/esm/dom/xml.d.ts +1 -0
  239. package/{build → lib/esm}/dom/xml.js +4 -4
  240. package/lib/esm/equal.d.ts +5 -0
  241. package/{build → lib/esm}/equal.js +37 -37
  242. package/lib/esm/equal.test.d.ts +1 -0
  243. package/{build → lib/esm}/equal.test.js +20 -20
  244. package/lib/esm/flags.d.ts +7 -0
  245. package/{build → lib/esm}/flags.js +48 -48
  246. package/lib/esm/flags.test.d.ts +1 -0
  247. package/{build → lib/esm}/flags.test.js +35 -35
  248. package/lib/esm/fs.d.ts +48 -0
  249. package/{build → lib/esm}/fs.js +144 -144
  250. package/lib/esm/fs.test.d.ts +1 -0
  251. package/{build → lib/esm}/fs.test.js +43 -43
  252. package/lib/esm/generator.d.ts +1 -0
  253. package/{build → lib/esm}/generator.js +10 -10
  254. package/lib/esm/generator.test.d.ts +1 -0
  255. package/{build → lib/esm}/generator.test.js +24 -24
  256. package/lib/esm/is_browser.d.ts +1 -0
  257. package/{build → lib/esm}/is_browser.js +1 -1
  258. package/lib/esm/loader.d.mts +22 -0
  259. package/{build → lib/esm}/loader.mjs +35 -35
  260. package/lib/esm/lock.d.ts +1 -0
  261. package/{build → lib/esm}/lock.js +23 -23
  262. package/lib/esm/lock.test.d.ts +1 -0
  263. package/{build → lib/esm}/lock.test.js +16 -16
  264. package/lib/esm/log.d.ts +26 -0
  265. package/{build → lib/esm}/log.js +46 -46
  266. package/lib/esm/observable/event.d.ts +35 -0
  267. package/lib/esm/observable/event.js +46 -0
  268. package/lib/esm/observable/observable.d.ts +132 -0
  269. package/lib/esm/observable/observable.js +343 -0
  270. package/lib/esm/observable/observable.test.d.ts +1 -0
  271. package/lib/esm/observable/observable.test.js +63 -0
  272. package/lib/esm/range.d.ts +1 -0
  273. package/{build → lib/esm}/range.js +7 -7
  274. package/lib/esm/result.d.ts +31 -0
  275. package/{build → lib/esm}/result.js +65 -65
  276. package/lib/esm/result.test.d.ts +1 -0
  277. package/{build → lib/esm}/result.test.js +71 -71
  278. package/lib/esm/safe.d.ts +1 -0
  279. package/{build → lib/esm}/safe.js +10 -10
  280. package/lib/esm/scope/describe.d.ts +18 -0
  281. package/{build → lib/esm}/scope/describe.js +60 -61
  282. package/lib/esm/scope/display/console.d.ts +2 -0
  283. package/{build → lib/esm}/scope/display/console.js +21 -21
  284. package/lib/esm/scope/display/dom.d.ts +3 -0
  285. package/{build → lib/esm}/scope/display/dom.js +26 -26
  286. package/lib/esm/scope/display/junit.d.ts +2 -0
  287. package/{build → lib/esm}/scope/display/junit.js +17 -17
  288. package/lib/esm/scope/execute.d.ts +12 -0
  289. package/{build → lib/esm}/scope/execute.js +85 -85
  290. package/lib/esm/scope/expect.d.ts +23 -0
  291. package/{build → lib/esm}/scope/expect.js +108 -108
  292. package/lib/esm/scope/fix.d.ts +4 -0
  293. package/{build → lib/esm}/scope/fix.js +22 -22
  294. package/lib/esm/scope/index.d.ts +3 -0
  295. package/{build → lib/esm}/scope/index.js +3 -3
  296. package/lib/esm/scope/scope.d.ts +17 -0
  297. package/{build → lib/esm}/scope/scope.js +1 -1
  298. package/lib/esm/scope/state.d.ts +1 -0
  299. package/lib/esm/scope/state.js +7 -0
  300. package/lib/esm/server/http/apps.d.ts +5 -0
  301. package/{build → lib/esm}/server/http/apps.js +23 -23
  302. package/lib/esm/server/http/css.d.ts +5 -0
  303. package/{build → lib/esm}/server/http/css.js +50 -50
  304. package/lib/esm/server/http/index.d.ts +21 -0
  305. package/{build → lib/esm}/server/http/index.js +73 -73
  306. package/lib/esm/server/http/response.d.ts +4 -0
  307. package/{build → lib/esm}/server/http/response.js +40 -40
  308. package/lib/esm/server/http/sitemap.d.ts +2 -0
  309. package/{build → lib/esm}/server/http/sitemap.js +42 -42
  310. package/lib/esm/server/http/static.d.ts +2 -0
  311. package/{build → lib/esm}/server/http/static.js +21 -21
  312. package/lib/esm/server/http/typescript.d.ts +5 -0
  313. package/{build → lib/esm}/server/http/typescript.js +40 -40
  314. package/lib/esm/server/main.d.ts +2 -0
  315. package/{build → lib/esm}/server/main.js +12 -9
  316. package/lib/esm/test.d.mts +2 -0
  317. package/lib/esm/test.mjs +26 -0
  318. package/lib/esm/test_all.d.ts +9 -0
  319. package/{build → lib/esm}/test_all.js +28 -18
  320. package/lib/esm/transpile.d.mts +3 -0
  321. package/{build → lib/esm}/transpile.mjs +18 -18
  322. package/lib/esm/tsconfig.tsbuildinfo +1 -0
  323. package/package.json +13 -14
  324. package/src/assert.ts +1 -1
  325. package/src/components/button_bar.ts +3 -3
  326. package/src/components/inline_edit.ts +3 -3
  327. package/src/components/logger.ts +3 -3
  328. package/src/components/select.ts +3 -3
  329. package/src/components/test.js +3 -2
  330. package/src/context.ts +3 -3
  331. package/src/diff.ts +2 -2
  332. package/src/dom/css/border.ts +3 -3
  333. package/src/dom/css/core.ts +1 -1
  334. package/src/dom/css/fstyle.ts +2 -2
  335. package/src/dom/css/sizing.ts +1 -1
  336. package/src/dom/dom.ts +1 -1
  337. package/src/dom/fc.test.ts +3 -3
  338. package/src/dom/fc.ts +1 -1
  339. package/src/dom/form/form.app.ts +2 -2
  340. package/src/dom/form/form.ts +3 -3
  341. package/src/dom/html.test.ts +3 -3
  342. package/src/dom/html.ts +1 -1
  343. package/src/dom/observable.test.ts +6 -6
  344. package/src/dom/observable.ts +1 -1
  345. package/src/dom/provide.ts +1 -1
  346. package/src/dom/router/link.ts +2 -2
  347. package/src/dom/router/router.ts +2 -2
  348. package/src/dom/svg.ts +1 -1
  349. package/src/dom/test.ts +8 -6
  350. package/src/dom/types/html.ts +1 -1
  351. package/src/equal.ts +1 -1
  352. package/src/flags.ts +1 -1
  353. package/src/fs.ts +4 -4
  354. package/src/index.html +6 -6
  355. package/src/observable/event.ts +2 -2
  356. package/src/observable/observable.test.ts +2 -2
  357. package/src/observable/observable.ts +72 -12
  358. package/src/pico/_variables.scss +1 -1
  359. package/src/pico/layout/_sectioning.scss +2 -0
  360. package/src/result.ts +1 -1
  361. package/src/scope/describe.ts +2 -5
  362. package/src/scope/display/console.ts +4 -4
  363. package/src/scope/display/dom.ts +6 -6
  364. package/src/scope/display/junit.ts +3 -3
  365. package/src/scope/execute.ts +2 -2
  366. package/src/scope/expect.ts +3 -3
  367. package/src/scope/state.ts +10 -0
  368. package/src/server/http/sitemap.ts +1 -1
  369. package/src/server/main.ts +9 -2
  370. package/src/test.mjs +22 -18
  371. package/src/test_all.ts +10 -0
  372. package/build/components/select.d.ts +0 -13
  373. package/build/components/test.js +0 -2
  374. package/build/dom/test.d.ts +0 -1
  375. package/build/dom/test.js +0 -2
  376. package/build/observable/observable.d.ts +0 -83
  377. package/build/observable/observable.js +0 -148
  378. package/build/observable/observable.test.js +0 -21
  379. package/build/test.mjs +0 -23
@@ -1,23 +1,23 @@
1
- declare type AssertMessage = string | (() => string);
2
- /**
3
- * Throw an error when a condition is not met.
4
- */
5
- export declare function assert(condition: boolean, message?: AssertMessage): void | never;
6
- /**
7
- * Given a value, return it if it is not null nor undefined. Otherwise throw an
8
- * error.
9
- *
10
- * @template T
11
- * @returns {NonNullable<T>}
12
- */
13
- export declare function assertExists<T>(t: T, message?: AssertMessage): NonNullable<T>;
14
- /**
15
- * @param {*} n
16
- * @returns string
17
- */
18
- export declare function assertString(n: unknown, message?: AssertMessage): string;
19
- /**
20
- * Compile time assertion that no value will used at this point in control flow.
21
- */
22
- export declare function checkExhaustive(value: never, message?: AssertMessage): never;
23
- export {};
1
+ declare type AssertMessage = string | (() => string);
2
+ /**
3
+ * Throw an error when a condition is not met.
4
+ */
5
+ export declare function assert(condition: boolean, message?: AssertMessage): void | never;
6
+ /**
7
+ * Given a value, return it if it is not null nor undefined. Otherwise throw an
8
+ * error.
9
+ *
10
+ * @template T
11
+ * @returns {NonNullable<T>}
12
+ */
13
+ export declare function assertExists<T>(t: T, message?: AssertMessage): NonNullable<T>;
14
+ /**
15
+ * @param {*} n
16
+ * @returns string
17
+ */
18
+ export declare function assertString(n: unknown, message?: AssertMessage): string;
19
+ /**
20
+ * Compile time assertion that no value will used at this point in control flow.
21
+ */
22
+ export declare function checkExhaustive(value: never, message?: AssertMessage): never;
23
+ export {};
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkExhaustive = exports.assertString = exports.assertExists = exports.assert = void 0;
4
+ /**
5
+ * Throw an error when a condition is not met.
6
+ */
7
+ function assert(condition, message = "Assertion failed") {
8
+ if (!condition) {
9
+ throw new Error(message instanceof Function ? message() : message);
10
+ }
11
+ }
12
+ exports.assert = assert;
13
+ /**
14
+ * Given a value, return it if it is not null nor undefined. Otherwise throw an
15
+ * error.
16
+ *
17
+ * @template T
18
+ * @returns {NonNullable<T>}
19
+ */
20
+ function assertExists(t, message = "Assertion failed: value does not exist") {
21
+ assert(t != null, message);
22
+ return t;
23
+ }
24
+ exports.assertExists = assertExists;
25
+ /**
26
+ * @param {*} n
27
+ * @returns string
28
+ */
29
+ function assertString(n, message = () => `Assertion failed: ${n} is not a string`) {
30
+ assert(typeof n === "string", message);
31
+ return n;
32
+ }
33
+ exports.assertString = assertString;
34
+ /**
35
+ * Compile time assertion that no value will used at this point in control flow.
36
+ */
37
+ function checkExhaustive(value, message = `Unexpected value ${value}`) {
38
+ throw new Error(message instanceof Function ? message() : message);
39
+ }
40
+ exports.checkExhaustive = checkExhaustive;
@@ -1 +1 @@
1
- export declare function dashCase(identifier: string): string;
1
+ export declare function dashCase(identifier: string): string;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.dashCase = void 0;
4
+ function dashCase(identifier) {
5
+ return identifier
6
+ .replace(/([a-z])([A-Z])/g, (_, a, b) => `${a}-${b.toLowerCase()}`)
7
+ .replace(/ ([A-Z])/g, (_, b) => `-${b.toLowerCase()}`);
8
+ }
9
+ exports.dashCase = dashCase;
@@ -1,8 +1,8 @@
1
- declare const ButtonBar: import("../dom/fc.js").FCComponentCtor<{
2
- value: T;
3
- values: T[];
4
- events: {
5
- onSelect: (current: T) => void;
6
- };
7
- }, {}>;
8
- export default ButtonBar;
1
+ declare const ButtonBar: import("../dom/fc").FCComponentCtor<{
2
+ value: T;
3
+ values: T[];
4
+ events: {
5
+ onSelect: (current: T) => void;
6
+ };
7
+ }, {}>;
8
+ export default ButtonBar;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const display_1 = require("../display");
4
+ const fc_1 = require("../dom/fc");
5
+ const html_1 = require("../dom/html");
6
+ let buttonBarId = 1;
7
+ let nextId = () => buttonBarId++;
8
+ const ButtonBar = (0, fc_1.FC)("button-bar", (el, { value, values, events }) => {
9
+ const name = `button-bar-${nextId()}`;
10
+ return (0, html_1.fieldset)({ class: "input-group" }, ...values
11
+ .map((option) => {
12
+ const opt = `${option}`.replace(/\s+/g, "_").toLowerCase();
13
+ const id = `${name}-${opt}`;
14
+ return [
15
+ (0, html_1.label)({ role: "button", htmlFor: id }, (0, html_1.input)({
16
+ type: "radio",
17
+ id,
18
+ name,
19
+ value: option,
20
+ checked: option === value,
21
+ events: {
22
+ change: () => events.onSelect(option),
23
+ },
24
+ }), (0, display_1.display)(option)),
25
+ ];
26
+ })
27
+ .flat());
28
+ });
29
+ exports.default = ButtonBar;
@@ -1,12 +1,12 @@
1
- export interface InlineEditState {
2
- mode: number;
3
- value: string;
4
- }
5
- export declare const InlineEdit: import("../dom/fc.js").FCComponentCtor<{
6
- mode?: number | undefined;
7
- value: string;
8
- events: {
9
- change: (value: string) => void;
10
- };
11
- }, InlineEditState>;
12
- export default InlineEdit;
1
+ export interface InlineEditState {
2
+ mode: number;
3
+ value: string;
4
+ }
5
+ export declare const InlineEdit: import("../dom/fc").FCComponentCtor<{
6
+ mode?: number | undefined;
7
+ value: string;
8
+ events: {
9
+ change: (value: string) => void;
10
+ };
11
+ }, InlineEditState>;
12
+ export default InlineEdit;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InlineEdit = void 0;
4
+ const sizing_1 = require("../dom/css/sizing");
5
+ const fc_1 = require("../dom/fc");
6
+ const html_1 = require("../dom/html");
7
+ const Mode = { VIEW: 0, EDIT: 1 };
8
+ exports.InlineEdit = (0, fc_1.FC)("inline-edit", (el, { mode = Mode.VIEW, value, events }) => {
9
+ const state = (el[fc_1.State] ??= { mode, value });
10
+ const render = () => {
11
+ switch (state.mode) {
12
+ case Mode.EDIT:
13
+ return edit();
14
+ case Mode.VIEW:
15
+ return view();
16
+ default:
17
+ return (0, html_1.span)();
18
+ }
19
+ };
20
+ const view = () => (0, html_1.span)({
21
+ style: { cursor: "text", ...(0, sizing_1.width)("full", "inline") },
22
+ events: {
23
+ click: () => {
24
+ state.mode = Mode.EDIT;
25
+ el.update(render());
26
+ },
27
+ },
28
+ }, state.value ?? "");
29
+ const edit = () => {
30
+ const edit = (0, html_1.span)({ style: { display: "block", position: "relative" } }, (0, html_1.input)({
31
+ style: {
32
+ zIndex: "10",
33
+ position: "absolute",
34
+ left: "0",
35
+ marginTop: "-0.375rem",
36
+ },
37
+ events: {
38
+ blur: ({ target }) => events.change(target?.value ?? ""),
39
+ },
40
+ type: "text",
41
+ value: state.value,
42
+ }), "\u00a0" // Hack to get the span to take up space
43
+ );
44
+ setTimeout(() => {
45
+ edit.dispatchEvent(new Event("focus"));
46
+ });
47
+ return edit;
48
+ };
49
+ return render();
50
+ });
51
+ exports.default = exports.InlineEdit;
@@ -1,6 +1,6 @@
1
- import { Logger } from "../log.js";
2
- export interface HTMLLogger extends Logger {
3
- root: Element;
4
- }
5
- export declare function isHTMLLogger(logger: Logger): logger is HTMLLogger;
6
- export declare function makeHTMLLogger(name: string): HTMLLogger;
1
+ import { Logger } from "../log";
2
+ export interface HTMLLogger extends Logger {
3
+ root: Element;
4
+ }
5
+ export declare function isHTMLLogger(logger: Logger): logger is HTMLLogger;
6
+ export declare function makeHTMLLogger(name: string): HTMLLogger;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeHTMLLogger = exports.isHTMLLogger = void 0;
4
+ const display_1 = require("../display");
5
+ const html_1 = require("../dom/html");
6
+ const log_1 = require("../log");
7
+ function isHTMLLogger(logger) {
8
+ return logger.root != undefined;
9
+ }
10
+ exports.isHTMLLogger = isHTMLLogger;
11
+ function makeHTMLLogger(name) {
12
+ let log;
13
+ const root = (0, html_1.div)((0, html_1.div)((0, html_1.span)(name)), (log = (0, html_1.ul)()));
14
+ const logger = { level: log_1.LEVEL.INFO, root };
15
+ function append(message) {
16
+ log.appendChild((0, html_1.li)((0, html_1.pre)((0, html_1.code)(message))));
17
+ }
18
+ const logAt = (level) => (message) => level >= (logger.level ?? log_1.LEVEL.ERROR)
19
+ ? append((0, display_1.display)(message))
20
+ : undefined;
21
+ logger.debug = logAt(log_1.LEVEL.VERBOSE);
22
+ logger.info = logAt(log_1.LEVEL.INFO);
23
+ logger.warn = logAt(log_1.LEVEL.WARN);
24
+ logger.error = logAt(log_1.LEVEL.ERROR);
25
+ return logger;
26
+ }
27
+ exports.makeHTMLLogger = makeHTMLLogger;
@@ -0,0 +1,10 @@
1
+ import { EventHandler } from "../dom/dom";
2
+ export declare const Select: import("../dom/fc").FCComponentCtor<{
3
+ name: string;
4
+ value: string;
5
+ events: {
6
+ change: EventHandler;
7
+ };
8
+ disabled: boolean;
9
+ options: [string, string][];
10
+ }, {}>;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Select = void 0;
4
+ const fc_1 = require("../dom/fc");
5
+ const html_1 = require("../dom/html");
6
+ exports.Select = (0, fc_1.FC)("jiffies-select", (el, { name, events: { change }, disabled, value, options }) => (0, html_1.select)({ name, events: { change }, disabled }, ...options.map(([v, name]) => (0, html_1.option)({ value: v, selected: value === v }, `${name}`))));
@@ -0,0 +1 @@
1
+ export function loadTests(): Promise<void>;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadTests = void 0;
4
+ async function loadTests() {
5
+ await Promise.resolve().then(() => require("./virtual_scroll.test.js"));
6
+ }
7
+ exports.loadTests = loadTests;
@@ -1,40 +1,40 @@
1
- export interface VirtualScrollSettings {
2
- minIndex: number;
3
- maxIndex: number;
4
- startIndex: number;
5
- itemHeight: number;
6
- count: number;
7
- tolerance: number;
8
- }
9
- export interface VirtualScrollDataAdapter<T> {
10
- (offset: number, limit: number): Iterable<T>;
11
- }
12
- export declare function arrayAdapter<T>(data: T[]): VirtualScrollDataAdapter<T>;
13
- export interface VirtualScrollProps<T, U extends HTMLElement> {
14
- settings: Partial<VirtualScrollSettings>;
15
- get: VirtualScrollDataAdapter<T>;
16
- row: (t: T) => U;
17
- }
18
- export declare function fillVirtualScrollSettings(settings: Partial<VirtualScrollSettings>): VirtualScrollSettings;
19
- export declare function initialState<T>(settings: VirtualScrollSettings): VirtualScrollState<T>;
20
- export declare function getData<T>(minIndex: number, maxIndex: number, offset: number, limit: number, get: VirtualScrollDataAdapter<T>): T[];
21
- export declare function doScroll<T>(scrollTop: number, state: VirtualScrollState<T>, get: VirtualScrollDataAdapter<T>): {
22
- scrollTop: number;
23
- topPaddingHeight: number;
24
- bottomPaddingHeight: number;
25
- data: T[];
26
- };
27
- interface VirtualScrollState<T, U extends HTMLElement = HTMLElement> {
28
- settings: VirtualScrollSettings;
29
- scrollTop: number;
30
- bufferedItems: number;
31
- totalHeight: number;
32
- viewportHeight: number;
33
- topPaddingHeight: number;
34
- bottomPaddingHeight: number;
35
- toleranceHeight: number;
36
- data: T[];
37
- rows: U[];
38
- }
39
- export declare const VirtualScroll: import("../dom/fc.js").FCComponentCtor<VirtualScrollProps<unknown, HTMLElement>, VirtualScrollState<unknown, HTMLElement>>;
40
- export default VirtualScroll;
1
+ export interface VirtualScrollSettings {
2
+ minIndex: number;
3
+ maxIndex: number;
4
+ startIndex: number;
5
+ itemHeight: number;
6
+ count: number;
7
+ tolerance: number;
8
+ }
9
+ export interface VirtualScrollDataAdapter<T> {
10
+ (offset: number, limit: number): Iterable<T>;
11
+ }
12
+ export declare function arrayAdapter<T>(data: T[]): VirtualScrollDataAdapter<T>;
13
+ export interface VirtualScrollProps<T, U extends HTMLElement> {
14
+ settings: Partial<VirtualScrollSettings>;
15
+ get: VirtualScrollDataAdapter<T>;
16
+ row: (t: T) => U;
17
+ }
18
+ export declare function fillVirtualScrollSettings(settings: Partial<VirtualScrollSettings>): VirtualScrollSettings;
19
+ export declare function initialState<T>(settings: VirtualScrollSettings): VirtualScrollState<T>;
20
+ export declare function getData<T>(minIndex: number, maxIndex: number, offset: number, limit: number, get: VirtualScrollDataAdapter<T>): T[];
21
+ export declare function doScroll<T>(scrollTop: number, state: VirtualScrollState<T>, get: VirtualScrollDataAdapter<T>): {
22
+ scrollTop: number;
23
+ topPaddingHeight: number;
24
+ bottomPaddingHeight: number;
25
+ data: T[];
26
+ };
27
+ interface VirtualScrollState<T, U extends HTMLElement = HTMLElement> {
28
+ settings: VirtualScrollSettings;
29
+ scrollTop: number;
30
+ bufferedItems: number;
31
+ totalHeight: number;
32
+ viewportHeight: number;
33
+ topPaddingHeight: number;
34
+ bottomPaddingHeight: number;
35
+ toleranceHeight: number;
36
+ data: T[];
37
+ rows: U[];
38
+ }
39
+ export declare const VirtualScroll: import("../dom/fc.js").FCComponentCtor<VirtualScrollProps<any, HTMLElement>, VirtualScrollState<any, HTMLElement>>;
40
+ export default VirtualScroll;
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VirtualScroll = exports.doScroll = exports.getData = exports.initialState = exports.fillVirtualScrollSettings = exports.arrayAdapter = void 0;
4
+ const debounce_js_1 = require("../debounce.js");
5
+ const fc_js_1 = require("../dom/fc.js");
6
+ const html_js_1 = require("../dom/html.js");
7
+ function arrayAdapter(data) {
8
+ return (offset, limit) => data.slice(offset, offset + limit);
9
+ }
10
+ exports.arrayAdapter = arrayAdapter;
11
+ function fillVirtualScrollSettings(settings) {
12
+ const { minIndex = 0, maxIndex = Number.MAX_SAFE_INTEGER, startIndex = 0, itemHeight = 20, count = maxIndex - minIndex + 1, tolerance = count, } = settings;
13
+ return { minIndex, maxIndex, startIndex, itemHeight, count, tolerance };
14
+ }
15
+ exports.fillVirtualScrollSettings = fillVirtualScrollSettings;
16
+ function initialState(settings) {
17
+ // From Denis Hilt, https://blog.logrocket.com/virtual-scrolling-core-principles-and-basic-implementation-in-react/
18
+ const { minIndex, maxIndex, startIndex, itemHeight, count, tolerance } = settings;
19
+ const bufferedItems = count + 2 * tolerance;
20
+ const itemsAbove = Math.max(0, startIndex - tolerance - minIndex);
21
+ const viewportHeight = count * itemHeight;
22
+ const totalHeight = (maxIndex - minIndex + 1) * itemHeight;
23
+ const toleranceHeight = tolerance * itemHeight;
24
+ const bufferHeight = viewportHeight + 2 * toleranceHeight;
25
+ const topPaddingHeight = itemsAbove * itemHeight;
26
+ const bottomPaddingHeight = totalHeight - (topPaddingHeight + bufferHeight);
27
+ return {
28
+ scrollTop: 0,
29
+ settings,
30
+ viewportHeight,
31
+ totalHeight,
32
+ toleranceHeight,
33
+ bufferedItems,
34
+ topPaddingHeight,
35
+ bottomPaddingHeight,
36
+ data: [],
37
+ rows: [],
38
+ };
39
+ }
40
+ exports.initialState = initialState;
41
+ function getData(minIndex, maxIndex, offset, limit, get) {
42
+ const start = Math.max(0, minIndex, offset);
43
+ const end = Math.min(maxIndex, offset + limit - 1);
44
+ const data = get(start, end - start);
45
+ return [...data];
46
+ }
47
+ exports.getData = getData;
48
+ function doScroll(scrollTop, state, get) {
49
+ const { totalHeight, toleranceHeight, bufferedItems, settings: { itemHeight, minIndex, maxIndex }, } = state;
50
+ const index = minIndex + Math.floor((scrollTop - toleranceHeight) / itemHeight);
51
+ const data = getData(minIndex, maxIndex, index, bufferedItems, get);
52
+ const topPaddingHeight = Math.max((index - minIndex) * itemHeight, 0);
53
+ const bottomPaddingHeight = Math.max(totalHeight - (topPaddingHeight + data.length * itemHeight), 0);
54
+ return { scrollTop, topPaddingHeight, bottomPaddingHeight, data };
55
+ }
56
+ exports.doScroll = doScroll;
57
+ // export interface VirtualScroll<T, U extends HTMLElement> {
58
+ // state: VirtualScrollState<T>;
59
+ // rows: UHTMLElement<U>[];
60
+ // }
61
+ exports.VirtualScroll = (0, fc_js_1.FC)("virtual-scroll", (element, props) => {
62
+ const settings = fillVirtualScrollSettings(props.settings);
63
+ const state = (element[fc_js_1.State] = {
64
+ ...initialState(settings),
65
+ ...element[fc_js_1.State],
66
+ });
67
+ const scrollTo = ({ target } = { target: state }) => {
68
+ const scrollTop = target?.scrollTop ?? state.topPaddingHeight;
69
+ const updatedSate = {
70
+ ...state,
71
+ ...doScroll(scrollTop, state, props.get),
72
+ };
73
+ setState(updatedSate);
74
+ };
75
+ const viewportElement = (0, html_js_1.div)({
76
+ style: { height: `${state.viewportHeight}px`, overflowY: "scroll" },
77
+ events: { scroll: (0, debounce_js_1.debounce)(scrollTo, 0) },
78
+ });
79
+ setTimeout(() => {
80
+ viewportElement.scroll({ top: state.scrollTop });
81
+ });
82
+ const setState = (newState) => {
83
+ state.scrollTop = newState.scrollTop;
84
+ state.topPaddingHeight = newState.topPaddingHeight;
85
+ state.bottomPaddingHeight = newState.bottomPaddingHeight;
86
+ state.data = newState.data;
87
+ state.rows = state.data.map(props.row);
88
+ viewportElement.update((0, html_js_1.div)({
89
+ class: "VirtualScroll__topPadding",
90
+ style: { height: `${state.topPaddingHeight}px` },
91
+ }), ...(state.rows ?? []).map((row, i) => (0, html_js_1.div)({
92
+ class: `VirtualScroll__item_${i}`,
93
+ style: { height: `${settings.itemHeight}px` },
94
+ }, row)), (0, html_js_1.div)({
95
+ class: "VirtualScroll__bottomPadding",
96
+ style: { height: `${state.bottomPaddingHeight}px` },
97
+ }));
98
+ };
99
+ scrollTo();
100
+ return viewportElement;
101
+ });
102
+ exports.default = exports.VirtualScroll;
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const fc_js_1 = require("../dom/fc.js");
4
+ const html_js_1 = require("../dom/html.js");
5
+ const index_js_1 = require("../scope/index.js");
6
+ const virtual_scroll_js_1 = require("./virtual_scroll.js");
7
+ (0, index_js_1.describe)("VirtualScroll", () => {
8
+ (0, index_js_1.it)("tracks scroll position", () => {
9
+ const data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
10
+ const props = {
11
+ settings: { count: 3, startIndex: 2 },
12
+ get: (0, virtual_scroll_js_1.arrayAdapter)(data),
13
+ row: (i) => (0, html_js_1.div)(`${i}`),
14
+ };
15
+ const scroll = (0, virtual_scroll_js_1.default)(props);
16
+ (0, index_js_1.expect)(scroll[fc_js_1.State]?.bufferedItems).toBe(9);
17
+ (0, index_js_1.expect)(scroll[fc_js_1.State]?.data).toEqual([0, 1, 2, 3, 4]);
18
+ //expect(scroll.state.topPaddingHeight).toBe(0);
19
+ (0, index_js_1.expect)(scroll[fc_js_1.State]?.viewportHeight).toBe(60);
20
+ //expect(scroll.state.totalHeight).toBe(200);
21
+ });
22
+ });
@@ -1,15 +1,15 @@
1
- import { Err, Result } from "./result.js";
2
- export declare const Enter: unique symbol;
3
- export declare const Exit: unique symbol;
4
- export interface Context {
5
- [Enter]: () => void;
6
- [Exit]: () => void;
7
- }
8
- export interface Operation<T, E extends Error, C extends Context> {
9
- (c: C): T | Result<T, E>;
10
- }
11
- export interface AsyncOperation<T, E extends Error, C extends Context> {
12
- (c: C): Promise<T | Result<T, E>>;
13
- }
14
- export declare function using<T, E extends Error, C extends Context>(context: C | (() => C) | Operation<T, E, C>, operation?: Operation<T, E, C>, normalizeError?: (e: Error | unknown | any) => Err<E>): Result<T, E>;
15
- export declare function asyncUsing<T, E extends Error, C extends Context>(context: C | (() => Promise<C>), operation: AsyncOperation<T, E, C>, normalizeError?: (e: Error | unknown | any) => Err<E>): Promise<Result<T, E>>;
1
+ import { Err, Result } from "./result.js";
2
+ export declare const Enter: unique symbol;
3
+ export declare const Exit: unique symbol;
4
+ export interface Context {
5
+ [Enter]: () => void;
6
+ [Exit]: () => void;
7
+ }
8
+ export interface Operation<T, E extends Error, C extends Context> {
9
+ (c: C): T | Result<T, E>;
10
+ }
11
+ export interface AsyncOperation<T, E extends Error, C extends Context> {
12
+ (c: C): Promise<T | Result<T, E>>;
13
+ }
14
+ export declare function using<T, E extends Error, C extends Context>(context: C | (() => C) | Operation<T, E, C>, operation?: Operation<T, E, C>, normalizeError?: (e: Error | unknown | any) => Err<E>): Result<T, E>;
15
+ export declare function asyncUsing<T, E extends Error, C extends Context>(context: C | (() => Promise<C>), operation: AsyncOperation<T, E, C>, normalizeError?: (e: Error | unknown | any) => Err<E>): Promise<Result<T, E>>;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.asyncUsing = exports.using = exports.Exit = exports.Enter = void 0;
4
+ const result_js_1 = require("./result.js");
5
+ exports.Enter = Symbol("Context Enter");
6
+ exports.Exit = Symbol("Context Exit");
7
+ function using(context, operation, normalizeError = (e) => (0, result_js_1.Err)(e)) {
8
+ if (typeof context === "function") {
9
+ if (context.length === 1) {
10
+ operation = context;
11
+ context = {};
12
+ }
13
+ else {
14
+ context = context();
15
+ }
16
+ }
17
+ let result;
18
+ try {
19
+ context[exports.Enter]();
20
+ const op = operation(context);
21
+ result = (0, result_js_1.isResult)(op) ? op : (0, result_js_1.Ok)(op);
22
+ }
23
+ catch (e) {
24
+ result = normalizeError(e);
25
+ }
26
+ finally {
27
+ context[exports.Exit]();
28
+ }
29
+ return result;
30
+ }
31
+ exports.using = using;
32
+ async function asyncUsing(context, operation, normalizeError = (e) => (0, result_js_1.Err)(e)) {
33
+ context = typeof context === "function" ? await context() : context;
34
+ let result;
35
+ try {
36
+ context[exports.Enter]();
37
+ const op = await operation(context);
38
+ result = (0, result_js_1.isResult)(op) ? op : (0, result_js_1.Ok)(op);
39
+ }
40
+ catch (e) {
41
+ result = normalizeError(e);
42
+ }
43
+ finally {
44
+ context[exports.Exit]();
45
+ }
46
+ return result;
47
+ }
48
+ exports.asyncUsing = asyncUsing;
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const context_js_1 = require("./context.js");
4
+ const result_js_1 = require("./result.js");
5
+ const describe_js_1 = require("./scope/describe.js");
6
+ const expect_js_1 = require("./scope/expect.js");
7
+ (0, describe_js_1.describe)("Context", () => {
8
+ (0, describe_js_1.it)("performs an operation using a context", () => {
9
+ const context = TestContext();
10
+ const result = (0, context_js_1.using)(context, () => (0, result_js_1.Ok)(5));
11
+ (0, expect_js_1.expect)((0, result_js_1.unwrap)(result)).toBe(5);
12
+ (0, expect_js_1.expect)(context.initialized).toBe(true);
13
+ (0, expect_js_1.expect)(context.completed).toBe(true);
14
+ });
15
+ (0, describe_js_1.it)("reports the result of a thrown error", () => {
16
+ const context = TestContext();
17
+ const result = (0, context_js_1.using)(context, () => {
18
+ throw new Error("Failed");
19
+ });
20
+ (0, expect_js_1.expect)((0, result_js_1.isErr)(result)).toBe(true);
21
+ (0, expect_js_1.expect)((0, result_js_1.Err)(result)).toMatchObject({
22
+ message: "Failed",
23
+ });
24
+ });
25
+ (0, describe_js_1.it)("passes the context to the operation", () => {
26
+ const op = (0, context_js_1.using)(TestContext, ({ initialized, completed }) => ({
27
+ initialized,
28
+ completed,
29
+ }));
30
+ (0, expect_js_1.expect)((0, result_js_1.isOk)(op)).toBe(true);
31
+ const { completed, initialized } = (0, result_js_1.unwrap)(op);
32
+ (0, expect_js_1.expect)(initialized).toBe(true);
33
+ (0, expect_js_1.expect)(completed).toBe(false);
34
+ });
35
+ });
36
+ function TestContext() {
37
+ const context = {
38
+ [context_js_1.Enter]: () => {
39
+ context.initialized = true;
40
+ },
41
+ [context_js_1.Exit]: () => {
42
+ context.completed = true;
43
+ },
44
+ initialized: false,
45
+ completed: false,
46
+ };
47
+ return context;
48
+ }
@@ -1 +1 @@
1
- export declare function debounce(fn: (...args: any[]) => any, ms?: number): (...args: Parameters<typeof fn>) => ReturnType<typeof fn>;
1
+ export declare function debounce(fn: (...args: any[]) => any, ms?: number): (...args: Parameters<typeof fn>) => ReturnType<typeof fn>;