@davidsouther/jiffies 2.2.4 → 2.3.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 (367) hide show
  1. package/LICENSE +1 -1
  2. package/lib/cjs/assert.d.ts +2 -2
  3. package/lib/cjs/awaitable.d.ts +1 -1
  4. package/lib/cjs/components/button_bar.d.ts +2 -2
  5. package/lib/cjs/components/inline_edit.d.ts +2 -2
  6. package/lib/cjs/components/logger.d.ts +1 -1
  7. package/lib/cjs/components/select.d.ts +4 -7
  8. package/lib/cjs/components/test.d.ts +1 -1
  9. package/lib/cjs/components/virtual_scroll.d.ts +6 -4
  10. package/lib/cjs/context.d.ts +5 -9
  11. package/lib/cjs/debounce.d.ts +1 -1
  12. package/lib/cjs/diff.d.ts +2 -2
  13. package/lib/cjs/display.d.ts +1 -1
  14. package/lib/cjs/dom/css/border.d.ts +2 -2
  15. package/lib/cjs/dom/css/constants.d.ts +3 -3
  16. package/lib/cjs/dom/css/core.d.ts +1 -1
  17. package/lib/cjs/dom/css/fstyle.d.ts +2 -2
  18. package/lib/cjs/dom/css/sizing.d.ts +2 -2
  19. package/lib/cjs/dom/dom.d.ts +8 -8
  20. package/lib/cjs/dom/fc.d.ts +8 -12
  21. package/lib/cjs/dom/form/form.d.ts +5 -6
  22. package/lib/cjs/dom/html.d.ts +112 -113
  23. package/lib/cjs/dom/observable.d.ts +1 -1
  24. package/lib/cjs/dom/provide.d.ts +1 -1
  25. package/lib/cjs/dom/router/router.d.ts +2 -2
  26. package/lib/cjs/dom/svg.d.ts +64 -64
  27. package/lib/cjs/dom/types/css.d.ts +10 -32
  28. package/lib/cjs/dom/types/html.d.ts +4 -6
  29. package/lib/cjs/equal.d.ts +8 -5
  30. package/lib/cjs/flags.d.ts +1 -1
  31. package/lib/cjs/fs.d.ts +3 -3
  32. package/lib/cjs/fs_node.d.ts +1 -1
  33. package/lib/cjs/lock.d.ts +1 -1
  34. package/lib/cjs/log.d.ts +9 -9
  35. package/lib/cjs/observable/event.d.ts +2 -2
  36. package/lib/cjs/observable/observable.d.ts +37 -35
  37. package/lib/cjs/result.d.ts +21 -21
  38. package/lib/cjs/safe.d.ts +1 -1
  39. package/lib/cjs/scope/describe.d.ts +4 -4
  40. package/lib/cjs/scope/display/console.d.ts +1 -1
  41. package/lib/cjs/scope/display/dom.d.ts +2 -2
  42. package/lib/cjs/scope/display/junit.d.ts +1 -1
  43. package/lib/cjs/scope/execute.d.ts +2 -2
  44. package/lib/cjs/scope/index.d.ts +3 -3
  45. package/lib/cjs/scope/scope.d.ts +3 -3
  46. package/lib/cjs/scope/state.d.ts +1 -1
  47. package/lib/cjs/server/http/apps.d.ts +1 -1
  48. package/lib/cjs/server/http/css.d.ts +1 -1
  49. package/lib/cjs/server/http/index.d.ts +4 -9
  50. package/lib/cjs/server/http/response.d.ts +3 -3
  51. package/lib/cjs/server/http/sitemap.d.ts +1 -1
  52. package/lib/cjs/server/http/static.d.ts +1 -1
  53. package/lib/cjs/server/http/typescript.d.ts +1 -1
  54. package/lib/cjs/test_all.d.ts +9 -9
  55. package/lib/cjs/tsconfig.tsbuildinfo +1 -1
  56. package/lib/esm/assert.d.ts +2 -2
  57. package/lib/esm/awaitable.d.ts +1 -1
  58. package/lib/esm/components/button_bar.d.ts +2 -2
  59. package/lib/esm/components/inline_edit.d.ts +2 -2
  60. package/lib/esm/components/logger.d.ts +1 -1
  61. package/lib/esm/components/select.d.ts +3 -3
  62. package/lib/esm/components/test.d.ts +1 -1
  63. package/lib/esm/components/virtual_scroll.d.ts +6 -4
  64. package/lib/esm/context.d.ts +5 -9
  65. package/lib/esm/debounce.d.ts +1 -2
  66. package/lib/esm/diff.d.ts +2 -2
  67. package/lib/esm/display.d.ts +1 -1
  68. package/lib/esm/dom/css/border.d.ts +2 -2
  69. package/lib/esm/dom/css/constants.d.ts +3 -3
  70. package/lib/esm/dom/css/core.d.ts +1 -1
  71. package/lib/esm/dom/css/fstyle.d.ts +2 -2
  72. package/lib/esm/dom/css/sizing.d.ts +2 -2
  73. package/lib/esm/dom/dom.d.ts +8 -8
  74. package/lib/esm/dom/fc.d.ts +8 -12
  75. package/lib/esm/dom/form/form.d.ts +5 -6
  76. package/lib/esm/dom/html.d.ts +112 -113
  77. package/lib/esm/dom/observable.d.ts +1 -1
  78. package/lib/esm/dom/provide.d.ts +1 -1
  79. package/lib/esm/dom/router/router.d.ts +2 -2
  80. package/lib/esm/dom/svg.d.ts +64 -64
  81. package/lib/esm/dom/types/css.d.ts +10 -32
  82. package/lib/esm/dom/types/html.d.ts +4 -6
  83. package/lib/esm/equal.d.ts +8 -5
  84. package/lib/esm/flags.d.ts +1 -1
  85. package/lib/esm/fs.d.ts +3 -3
  86. package/lib/esm/fs_node.d.ts +1 -1
  87. package/lib/esm/lock.d.ts +1 -1
  88. package/lib/esm/log.d.ts +9 -9
  89. package/lib/esm/observable/event.d.ts +2 -2
  90. package/lib/esm/observable/observable.d.ts +37 -35
  91. package/lib/esm/result.d.ts +21 -21
  92. package/lib/esm/safe.d.ts +1 -1
  93. package/lib/esm/scope/describe.d.ts +4 -4
  94. package/lib/esm/scope/display/console.d.ts +1 -1
  95. package/lib/esm/scope/display/dom.d.ts +2 -2
  96. package/lib/esm/scope/display/junit.d.ts +1 -1
  97. package/lib/esm/scope/execute.d.ts +2 -2
  98. package/lib/esm/scope/index.d.ts +3 -3
  99. package/lib/esm/scope/scope.d.ts +3 -3
  100. package/lib/esm/scope/state.d.ts +1 -1
  101. package/lib/esm/server/http/apps.d.ts +1 -1
  102. package/lib/esm/server/http/css.d.ts +1 -1
  103. package/lib/esm/server/http/index.d.ts +4 -9
  104. package/lib/esm/server/http/response.d.ts +3 -3
  105. package/lib/esm/server/http/sitemap.d.ts +1 -1
  106. package/lib/esm/server/http/static.d.ts +1 -1
  107. package/lib/esm/server/http/typescript.d.ts +1 -1
  108. package/lib/esm/test_all.d.ts +9 -9
  109. package/lib/esm/tsconfig.tsbuildinfo +1 -1
  110. package/package.json +11 -9
  111. package/src/assert.ts +5 -5
  112. package/src/components/button_bar.ts +28 -30
  113. package/src/components/inline_edit.ts +8 -7
  114. package/src/components/logger.ts +6 -6
  115. package/src/components/select.ts +7 -7
  116. package/src/components/test.ts +5 -0
  117. package/src/components/virtual_scroll.test.ts +9 -6
  118. package/src/components/virtual_scroll.ts +29 -24
  119. package/src/context.test.ts +4 -4
  120. package/src/context.ts +16 -11
  121. package/src/debounce.ts +9 -3
  122. package/src/diff.test.ts +4 -4
  123. package/src/diff.ts +14 -16
  124. package/src/dom/css/border.ts +11 -11
  125. package/src/dom/css/core.ts +1 -1
  126. package/src/dom/css/fstyle.ts +4 -4
  127. package/src/dom/css/sizing.ts +1 -1
  128. package/src/dom/dom.ts +57 -47
  129. package/src/dom/fc.test.ts +8 -8
  130. package/src/dom/fc.ts +32 -35
  131. package/src/dom/form/form.app.ts +9 -9
  132. package/src/dom/form/form.ts +25 -16
  133. package/src/dom/form/index.html +3 -2
  134. package/src/dom/html.test.ts +12 -10
  135. package/src/dom/html.ts +2 -3
  136. package/src/dom/observable.test.ts +6 -6
  137. package/src/dom/observable.ts +2 -2
  138. package/src/dom/provide.ts +1 -1
  139. package/src/dom/router/link.ts +3 -3
  140. package/src/dom/router/router.ts +5 -5
  141. package/src/dom/svg.ts +7 -6
  142. package/src/dom/test.ts +3 -0
  143. package/src/dom/types/css.ts +43 -61
  144. package/src/dom/types/html.ts +2 -4
  145. package/src/dom/xml.ts +2 -2
  146. package/src/equal.test.ts +3 -3
  147. package/src/equal.ts +27 -14
  148. package/src/flags.test.ts +2 -2
  149. package/src/flags.ts +2 -2
  150. package/src/fs.test.ts +5 -5
  151. package/src/fs.ts +26 -20
  152. package/src/fs_node.ts +4 -4
  153. package/src/fs_win.test.ts +1 -1
  154. package/src/generator.test.ts +4 -3
  155. package/src/generator.ts +1 -1
  156. package/src/hooks/_notes +4 -1
  157. package/src/index.html +7 -7
  158. package/src/lock.test.ts +4 -4
  159. package/src/lock.ts +8 -7
  160. package/src/log.ts +28 -18
  161. package/src/observable/event.ts +7 -7
  162. package/src/observable/observable.test.ts +3 -3
  163. package/src/observable/observable.ts +71 -52
  164. package/src/result.test.ts +7 -10
  165. package/src/result.ts +51 -47
  166. package/src/safe.ts +1 -1
  167. package/src/scope/describe.ts +12 -11
  168. package/src/scope/display/console.ts +4 -4
  169. package/src/scope/display/dom.ts +9 -9
  170. package/src/scope/display/junit.ts +21 -24
  171. package/src/scope/execute.ts +17 -12
  172. package/src/scope/expect.ts +22 -22
  173. package/src/scope/fix.ts +10 -7
  174. package/src/scope/index.ts +3 -3
  175. package/src/scope/scope.ts +2 -2
  176. package/src/scope/state.ts +2 -2
  177. package/src/server/http/apps.ts +5 -5
  178. package/src/server/http/css.ts +10 -26
  179. package/src/server/http/index.ts +30 -24
  180. package/src/server/http/response.ts +12 -5
  181. package/src/server/http/sitemap.ts +8 -8
  182. package/src/server/http/static.ts +9 -6
  183. package/src/server/http/typescript.ts +25 -25
  184. package/src/server/main.ts +7 -4
  185. package/src/test.mjs +8 -8
  186. package/src/test_all.ts +16 -13
  187. package/src/transpile.mjs +6 -18
  188. package/build/pico.css +0 -2466
  189. package/build/pico.css.map +0 -1
  190. package/lib/cjs/assert.js +0 -46
  191. package/lib/cjs/awaitable.js +0 -2
  192. package/lib/cjs/case.js +0 -9
  193. package/lib/cjs/components/button_bar.js +0 -29
  194. package/lib/cjs/components/inline_edit.js +0 -51
  195. package/lib/cjs/components/logger.js +0 -27
  196. package/lib/cjs/components/select.js +0 -6
  197. package/lib/cjs/components/test.js +0 -7
  198. package/lib/cjs/components/virtual_scroll.js +0 -102
  199. package/lib/cjs/components/virtual_scroll.test.js +0 -22
  200. package/lib/cjs/context.js +0 -48
  201. package/lib/cjs/context.test.js +0 -48
  202. package/lib/cjs/debounce.js +0 -12
  203. package/lib/cjs/diff.js +0 -58
  204. package/lib/cjs/diff.test.js +0 -41
  205. package/lib/cjs/display.js +0 -16
  206. package/lib/cjs/dom/css/border.js +0 -33
  207. package/lib/cjs/dom/css/constants.js +0 -31
  208. package/lib/cjs/dom/css/core.js +0 -31
  209. package/lib/cjs/dom/css/fstyle.js +0 -36
  210. package/lib/cjs/dom/css/sizing.js +0 -14
  211. package/lib/cjs/dom/dom.js +0 -110
  212. package/lib/cjs/dom/fc.js +0 -39
  213. package/lib/cjs/dom/fc.test.js +0 -23
  214. package/lib/cjs/dom/form/form.app.js +0 -27
  215. package/lib/cjs/dom/form/form.js +0 -49
  216. package/lib/cjs/dom/form/form.test.js +0 -1
  217. package/lib/cjs/dom/html.js +0 -119
  218. package/lib/cjs/dom/html.test.js +0 -60
  219. package/lib/cjs/dom/observable.js +0 -10
  220. package/lib/cjs/dom/observable.test.js +0 -35
  221. package/lib/cjs/dom/provide.js +0 -12
  222. package/lib/cjs/dom/router/link.js +0 -7
  223. package/lib/cjs/dom/router/router.js +0 -55
  224. package/lib/cjs/dom/svg.js +0 -69
  225. package/lib/cjs/dom/test.js +0 -13
  226. package/lib/cjs/dom/types/css.js +0 -24
  227. package/lib/cjs/dom/types/dom.js +0 -1
  228. package/lib/cjs/dom/types/html.js +0 -2
  229. package/lib/cjs/dom/xml.js +0 -8
  230. package/lib/cjs/equal.js +0 -48
  231. package/lib/cjs/equal.test.js +0 -22
  232. package/lib/cjs/flags.js +0 -52
  233. package/lib/cjs/flags.test.js +0 -37
  234. package/lib/cjs/fs.js +0 -235
  235. package/lib/cjs/fs.test.js +0 -86
  236. package/lib/cjs/fs_node.js +0 -50
  237. package/lib/cjs/fs_win.test.js +0 -10
  238. package/lib/cjs/generator.js +0 -14
  239. package/lib/cjs/generator.test.js +0 -26
  240. package/lib/cjs/is_browser.js +0 -4
  241. package/lib/cjs/loader-register.d.mts +0 -1
  242. package/lib/cjs/loader-register.d.ts +0 -1
  243. package/lib/cjs/loader-register.js +0 -4
  244. package/lib/cjs/loader-register.mjs +0 -4
  245. package/lib/cjs/loader.d.mts +0 -23
  246. package/lib/cjs/loader.mjs +0 -41
  247. package/lib/cjs/lock.js +0 -27
  248. package/lib/cjs/lock.test.js +0 -18
  249. package/lib/cjs/log.js +0 -98
  250. package/lib/cjs/observable/event.js +0 -61
  251. package/lib/cjs/observable/observable.js +0 -363
  252. package/lib/cjs/observable/observable.test.js +0 -65
  253. package/lib/cjs/package.json +0 -1
  254. package/lib/cjs/range.js +0 -11
  255. package/lib/cjs/result.js +0 -80
  256. package/lib/cjs/result.test.js +0 -78
  257. package/lib/cjs/safe.js +0 -14
  258. package/lib/cjs/scope/describe.js +0 -73
  259. package/lib/cjs/scope/display/console.js +0 -25
  260. package/lib/cjs/scope/display/dom.js +0 -30
  261. package/lib/cjs/scope/display/junit.js +0 -21
  262. package/lib/cjs/scope/execute.js +0 -91
  263. package/lib/cjs/scope/expect.js +0 -110
  264. package/lib/cjs/scope/fix.js +0 -26
  265. package/lib/cjs/scope/index.js +0 -15
  266. package/lib/cjs/scope/scope.js +0 -2
  267. package/lib/cjs/scope/state.js +0 -12
  268. package/lib/cjs/server/http/apps.js +0 -27
  269. package/lib/cjs/server/http/css.js +0 -54
  270. package/lib/cjs/server/http/index.js +0 -77
  271. package/lib/cjs/server/http/response.js +0 -45
  272. package/lib/cjs/server/http/sitemap.js +0 -46
  273. package/lib/cjs/server/http/static.js +0 -25
  274. package/lib/cjs/server/http/typescript.js +0 -44
  275. package/lib/cjs/server/main.js +0 -14
  276. package/lib/cjs/test.mjs +0 -28
  277. package/lib/cjs/test_all.js +0 -30
  278. package/lib/cjs/transpile.mjs +0 -22
  279. package/lib/esm/assert.js +0 -38
  280. package/lib/esm/awaitable.js +0 -1
  281. package/lib/esm/case.js +0 -5
  282. package/lib/esm/components/button_bar.js +0 -27
  283. package/lib/esm/components/inline_edit.js +0 -48
  284. package/lib/esm/components/logger.js +0 -22
  285. package/lib/esm/components/select.js +0 -3
  286. package/lib/esm/components/test.js +0 -3
  287. package/lib/esm/components/virtual_scroll.js +0 -94
  288. package/lib/esm/components/virtual_scroll.test.js +0 -20
  289. package/lib/esm/context.js +0 -43
  290. package/lib/esm/context.test.js +0 -46
  291. package/lib/esm/debounce.js +0 -8
  292. package/lib/esm/diff.js +0 -54
  293. package/lib/esm/diff.test.js +0 -39
  294. package/lib/esm/display.js +0 -11
  295. package/lib/esm/dom/css/border.js +0 -27
  296. package/lib/esm/dom/css/constants.js +0 -28
  297. package/lib/esm/dom/css/core.js +0 -24
  298. package/lib/esm/dom/css/fstyle.js +0 -32
  299. package/lib/esm/dom/css/sizing.js +0 -10
  300. package/lib/esm/dom/dom.js +0 -104
  301. package/lib/esm/dom/fc.js +0 -35
  302. package/lib/esm/dom/fc.test.js +0 -21
  303. package/lib/esm/dom/form/form.app.js +0 -23
  304. package/lib/esm/dom/form/form.js +0 -34
  305. package/lib/esm/dom/form/form.test.js +0 -1
  306. package/lib/esm/dom/html.js +0 -114
  307. package/lib/esm/dom/html.test.js +0 -58
  308. package/lib/esm/dom/observable.js +0 -6
  309. package/lib/esm/dom/observable.test.js +0 -33
  310. package/lib/esm/dom/provide.js +0 -7
  311. package/lib/esm/dom/router/link.js +0 -3
  312. package/lib/esm/dom/router/router.js +0 -52
  313. package/lib/esm/dom/svg.js +0 -65
  314. package/lib/esm/dom/test.js +0 -9
  315. package/lib/esm/dom/types/css.js +0 -23
  316. package/lib/esm/dom/types/dom.js +0 -1
  317. package/lib/esm/dom/types/html.js +0 -1
  318. package/lib/esm/dom/xml.js +0 -4
  319. package/lib/esm/equal.js +0 -41
  320. package/lib/esm/equal.test.js +0 -20
  321. package/lib/esm/flags.js +0 -48
  322. package/lib/esm/flags.test.js +0 -35
  323. package/lib/esm/fs.js +0 -226
  324. package/lib/esm/fs.test.js +0 -84
  325. package/lib/esm/fs_node.js +0 -45
  326. package/lib/esm/fs_win.test.js +0 -8
  327. package/lib/esm/generator.js +0 -10
  328. package/lib/esm/generator.test.js +0 -24
  329. package/lib/esm/is_browser.js +0 -1
  330. package/lib/esm/loader-register.d.mts +0 -1
  331. package/lib/esm/loader-register.mjs +0 -2
  332. package/lib/esm/loader.d.mts +0 -23
  333. package/lib/esm/loader.mjs +0 -36
  334. package/lib/esm/lock.js +0 -23
  335. package/lib/esm/lock.test.js +0 -16
  336. package/lib/esm/log.js +0 -88
  337. package/lib/esm/observable/event.js +0 -46
  338. package/lib/esm/observable/observable.js +0 -343
  339. package/lib/esm/observable/observable.test.js +0 -63
  340. package/lib/esm/range.js +0 -7
  341. package/lib/esm/result.js +0 -65
  342. package/lib/esm/result.test.js +0 -76
  343. package/lib/esm/safe.js +0 -10
  344. package/lib/esm/scope/describe.js +0 -60
  345. package/lib/esm/scope/display/console.js +0 -21
  346. package/lib/esm/scope/display/dom.js +0 -26
  347. package/lib/esm/scope/display/junit.js +0 -17
  348. package/lib/esm/scope/execute.js +0 -85
  349. package/lib/esm/scope/expect.js +0 -104
  350. package/lib/esm/scope/fix.js +0 -22
  351. package/lib/esm/scope/index.js +0 -3
  352. package/lib/esm/scope/scope.js +0 -1
  353. package/lib/esm/scope/state.js +0 -8
  354. package/lib/esm/server/http/apps.js +0 -23
  355. package/lib/esm/server/http/css.js +0 -50
  356. package/lib/esm/server/http/index.js +0 -73
  357. package/lib/esm/server/http/response.js +0 -40
  358. package/lib/esm/server/http/sitemap.js +0 -42
  359. package/lib/esm/server/http/static.js +0 -21
  360. package/lib/esm/server/http/typescript.js +0 -40
  361. package/lib/esm/server/main.js +0 -12
  362. package/lib/esm/test.mjs +0 -26
  363. package/lib/esm/test_all.js +0 -28
  364. package/lib/esm/transpile.mjs +0 -18
  365. package/src/components/test.js +0 -3
  366. package/src/loader-register.mjs +0 -3
  367. package/src/loader.mjs +0 -46
package/lib/esm/fs.js DELETED
@@ -1,226 +0,0 @@
1
- export const PLATFORM_PARTS_WIN = {
2
- SEP: "\\",
3
- WD: "C:\\\\",
4
- isAbsolute: (path) => Boolean(path.match(new RegExp("^[a-zA-Z]:\\\\"))),
5
- };
6
- export const PLATFORM_PARTS_UNIX = {
7
- SEP: "/",
8
- WD: "/",
9
- isAbsolute: (path) => path[0] == "/",
10
- };
11
- export const PLATFORM_PARTS = typeof process !== "undefined" && process.platform == "win32"
12
- ? PLATFORM_PARTS_WIN
13
- : PLATFORM_PARTS_UNIX;
14
- export const SEP = PLATFORM_PARTS.SEP;
15
- export const WD = PLATFORM_PARTS.WD;
16
- export const isAbsolute = PLATFORM_PARTS.isAbsolute;
17
- export function basename(filename) {
18
- if (filename.endsWith(SEP)) {
19
- filename = filename.substring(0, filename.length - 1);
20
- }
21
- const basename = filename.split(SEP).at(-1) ?? "";
22
- return basename;
23
- }
24
- function join(...paths) {
25
- const pathParts = [];
26
- for (const path of paths) {
27
- for (const part of path.split(SEP)) {
28
- switch (part) {
29
- case "":
30
- case ".":
31
- break;
32
- case "..":
33
- pathParts.pop();
34
- break;
35
- default:
36
- pathParts.push(part);
37
- }
38
- }
39
- }
40
- return ((PLATFORM_PARTS == PLATFORM_PARTS_UNIX ? SEP : "") + pathParts.join(SEP));
41
- }
42
- export class FileSystem {
43
- adapter;
44
- wd = WD;
45
- stack = [];
46
- constructor(adapter = new RecordFileSystemAdapter()) {
47
- this.adapter = adapter;
48
- }
49
- cwd() {
50
- return this.wd;
51
- }
52
- cd(dir) {
53
- this.wd = this.p(dir);
54
- }
55
- pushd(dir) {
56
- this.stack.push(this.wd);
57
- this.cd(dir);
58
- }
59
- popd() {
60
- if (this.stack.length > 0) {
61
- this.wd = this.stack.pop();
62
- }
63
- }
64
- stat(path) {
65
- return this.adapter.stat(this.p(path));
66
- }
67
- scandir(path) {
68
- return this.adapter.scandir(this.p(path));
69
- }
70
- readdir(path) {
71
- return this.adapter.readdir(this.p(path));
72
- }
73
- mkdir(path) {
74
- return this.adapter.mkdir(this.p(path));
75
- }
76
- copyFile(from, to) {
77
- return this.adapter.copyFile(this.p(from), this.p(to));
78
- }
79
- readFile(path) {
80
- return this.adapter.readFile(this.p(path));
81
- }
82
- writeFile(path, contents) {
83
- return this.adapter.writeFile(this.p(path), contents);
84
- }
85
- rm(path) {
86
- return this.adapter.rm(this.p(path));
87
- }
88
- p(path) {
89
- return isAbsolute(path) ? path : join(this.cwd(), path);
90
- }
91
- }
92
- export class RecordFileSystemAdapter {
93
- fs;
94
- constructor(fs = {}) {
95
- this.fs = fs;
96
- }
97
- stat(path) {
98
- return new Promise((resolve, reject) => {
99
- if (this.fs[path]) {
100
- return resolve({
101
- name: basename(path),
102
- isDirectory() {
103
- return false;
104
- },
105
- isFile() {
106
- return true;
107
- },
108
- });
109
- }
110
- if (!path.endsWith(SEP))
111
- path += SEP;
112
- for (let filename of Object.keys(this.fs)) {
113
- if (filename.startsWith(path)) {
114
- return resolve({
115
- name: basename(path),
116
- isDirectory() {
117
- return true;
118
- },
119
- isFile() {
120
- return false;
121
- },
122
- });
123
- }
124
- }
125
- reject();
126
- });
127
- }
128
- async scandir(path) {
129
- return (await this.readdir(path)).map((name) => {
130
- let isFile = this.fs[join(path, name)] !== undefined;
131
- return {
132
- name,
133
- isDirectory() {
134
- return !isFile;
135
- },
136
- isFile() {
137
- return isFile;
138
- },
139
- };
140
- });
141
- }
142
- readdir(path) {
143
- if (!path.endsWith(SEP))
144
- path += SEP;
145
- return new Promise((resolve) => {
146
- let dir = new Set();
147
- for (const filename of Object.keys(this.fs)) {
148
- if (filename.startsWith(path)) {
149
- const end = filename.indexOf(SEP, path.length + 1);
150
- const basename = filename.substring(path.length, end === -1 ? undefined : end);
151
- dir.add(basename);
152
- }
153
- }
154
- return resolve([...dir].sort());
155
- });
156
- }
157
- mkdir(path) {
158
- return Promise.resolve();
159
- }
160
- copyFile(from, to) {
161
- return new Promise((resolve) => {
162
- this.fs[to] = this.fs[from];
163
- resolve();
164
- });
165
- }
166
- readFile(path) {
167
- return new Promise((resolve, reject) => {
168
- let file = this.fs[path];
169
- if (file === undefined) {
170
- const error = new Error(`File Not Found ${path}`);
171
- reject(error);
172
- }
173
- else {
174
- resolve(file);
175
- }
176
- });
177
- }
178
- writeFile(path, contents) {
179
- return new Promise((resolve) => {
180
- this.fs[path] = contents;
181
- resolve();
182
- });
183
- }
184
- rm(path) {
185
- return new Promise((resolve) => {
186
- delete this.fs[path];
187
- resolve();
188
- });
189
- }
190
- }
191
- export class LocalStorageFileSystemAdapter extends RecordFileSystemAdapter {
192
- constructor() {
193
- super(window.localStorage);
194
- }
195
- }
196
- export class ObjectFileSystemAdapter extends RecordFileSystemAdapter {
197
- constructor(object) {
198
- super(reduceObjectFileSystem(object));
199
- }
200
- }
201
- function reduceObjectFileSystem(object) {
202
- let level = {};
203
- for (let [k, v] of Object.entries(object)) {
204
- if (typeof v == "string") {
205
- level[`/${k}`] = v;
206
- }
207
- else {
208
- for (let [k2, v2] of Object.entries(reduceObjectFileSystem(v))) {
209
- level[`/${k}${k2}`] = v2;
210
- }
211
- }
212
- }
213
- return level;
214
- }
215
- export async function reset(fs, tree) {
216
- for (const [path, file] of Object.entries(tree)) {
217
- if (typeof file === "string") {
218
- await fs.writeFile(path, file);
219
- }
220
- else {
221
- fs.cd(path);
222
- await reset(fs, file);
223
- fs.cd("..");
224
- }
225
- }
226
- }
@@ -1,84 +0,0 @@
1
- import { FileSystem, ObjectFileSystemAdapter, RecordFileSystemAdapter, } from "./fs.js";
2
- import { describe, it, expect, beforeEach } from "./scope/index.js";
3
- import { cleanState } from "./scope/state.js";
4
- describe("FileSystem", () => {
5
- describe("Writing", () => {
6
- it("Writes files", async () => {
7
- const fsObj = {};
8
- const fs = new FileSystem(new RecordFileSystemAdapter(fsObj));
9
- await fs.writeFile("hello", "world");
10
- expect(fsObj).toEqual({ "/hello": "world" });
11
- });
12
- it("Writes deep files", async () => {
13
- const fsObj = {};
14
- const fs = new FileSystem(new RecordFileSystemAdapter(fsObj));
15
- await fs.writeFile("deep/hello", "world");
16
- expect(fsObj).toEqual({ "/deep/hello": "world" });
17
- });
18
- it("Writes deep files from root", async () => {
19
- const fsObj = {};
20
- const fs = new FileSystem(new RecordFileSystemAdapter(fsObj));
21
- await fs.writeFile("/root/deep/hello", "world");
22
- expect(fsObj).toEqual({ "/root/deep/hello": "world" });
23
- });
24
- it("Writes files after cd", async () => {
25
- const fsObj = {};
26
- const fs = new FileSystem(new RecordFileSystemAdapter(fsObj));
27
- await fs.cd("deep");
28
- await fs.writeFile("hello", "world");
29
- expect(fsObj).toEqual({ "/deep/hello": "world" });
30
- });
31
- });
32
- describe("directory", () => {
33
- it("returns directory listing", async () => {
34
- const fsObj = {
35
- "/deep/hello": "world",
36
- "/deep/bonjour": "monde",
37
- "/other/file": "text",
38
- };
39
- const fs = new FileSystem(new RecordFileSystemAdapter(fsObj));
40
- const dir = await fs.readdir("deep");
41
- expect(dir.sort()).toEqual(["bonjour", "hello"]);
42
- });
43
- });
44
- describe("stat", () => {
45
- const state = cleanState(() => {
46
- const fsObj = {
47
- "/deep/hello": "world",
48
- "/deep/bonjour": "monde",
49
- "/other/file": "text",
50
- };
51
- return { fs: new FileSystem(new RecordFileSystemAdapter(fsObj)) };
52
- }, beforeEach);
53
- it("stats a directory", async () => {
54
- const deep = await state.fs.stat("/deep");
55
- expect(deep.isDirectory()).toBe(true);
56
- expect(deep.isFile()).toBe(false);
57
- });
58
- it("stats a file", async () => {
59
- const deep = await state.fs.stat("/deep/hello");
60
- expect(deep.isDirectory()).toBe(false);
61
- expect(deep.isFile()).toBe(true);
62
- });
63
- });
64
- describe("ObjectFileSystem", () => {
65
- it("treats object keys as directories and final values as strings", async () => {
66
- const fsAdapter = new ObjectFileSystemAdapter({
67
- deep: {
68
- hello: "world",
69
- bonjour: "monde",
70
- },
71
- other_file: "text",
72
- });
73
- expect([
74
- ...Object.keys(fsAdapter.fs),
75
- ]).toEqual(["/deep/hello", "/deep/bonjour", "/other_file"]);
76
- let fs = new FileSystem(fsAdapter);
77
- const deep = await fs.stat("/deep");
78
- expect(deep.isDirectory()).toBe(true);
79
- expect(deep.isFile()).toBe(false);
80
- const deep_bonjour = await fs.readFile("/deep/bonjour");
81
- expect(deep_bonjour).toBe("monde");
82
- });
83
- });
84
- });
@@ -1,45 +0,0 @@
1
- import { FileSystem } from "./fs.js";
2
- import { copyFile, mkdir, readdir, readFile, rm, stat, writeFile, } from "fs/promises";
3
- import { basename, join } from "path";
4
- export class NodeFileSystem extends FileSystem {
5
- constructor(cd = process.cwd()) {
6
- super(new NodeFileSystemAdapter());
7
- this.cd(cd);
8
- }
9
- }
10
- /** Jiffies FileSystemAdapter using NodeJS' fs/promises. */
11
- export class NodeFileSystemAdapter {
12
- async stat(path) {
13
- const fsStat = await stat(path);
14
- return {
15
- name: basename(path),
16
- isDirectory() {
17
- return fsStat.isDirectory();
18
- },
19
- isFile() {
20
- return !fsStat.isDirectory();
21
- },
22
- };
23
- }
24
- readdir(path) {
25
- return readdir(path);
26
- }
27
- mkdir(path) {
28
- return mkdir(path);
29
- }
30
- async scandir(path) {
31
- return Promise.all((await this.readdir(path)).map((name) => this.stat(join(path, name))));
32
- }
33
- copyFile(from, to) {
34
- return copyFile(from, to);
35
- }
36
- readFile(path) {
37
- return readFile(path, "utf-8");
38
- }
39
- writeFile(path, contents) {
40
- return writeFile(path, contents, "utf-8");
41
- }
42
- rm(path) {
43
- return rm(path, { force: true, recursive: true });
44
- }
45
- }
@@ -1,8 +0,0 @@
1
- import { NodeFileSystem } from "./fs_node.js";
2
- const fs = new NodeFileSystem();
3
- async function main() {
4
- for (const stats of await fs.scandir(".")) {
5
- console.log(stats);
6
- }
7
- }
8
- main();
@@ -1,10 +0,0 @@
1
- export function* takeWhile(predicate, iterator) {
2
- for (const x of iterator) {
3
- if (predicate(x)) {
4
- yield x;
5
- }
6
- else {
7
- return;
8
- }
9
- }
10
- }
@@ -1,24 +0,0 @@
1
- import { takeWhile } from "./generator.js";
2
- import { describe, it, expect } from "./scope/index.js";
3
- describe("Generator", () => {
4
- it("takes from a generator until a predicate", () => {
5
- const generator = function* () {
6
- let i = 1;
7
- while (true) {
8
- yield (i = i * 2);
9
- }
10
- };
11
- const filter = () => {
12
- let previousValue = 0;
13
- return (n) => {
14
- if (previousValue < 100) {
15
- previousValue = n;
16
- return true;
17
- }
18
- return false;
19
- };
20
- };
21
- const values = [...takeWhile(filter(), generator())];
22
- expect(values).toEqual([2, 4, 8, 16, 32, 64, 128]);
23
- });
24
- });
@@ -1 +0,0 @@
1
- export const IsBrowser = typeof window !== "undefined";
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- import { register } from 'node:module';
2
- register('./loader.mjs', import.meta.url);
@@ -1,23 +0,0 @@
1
- /** @returns {Promise<{url: string, shortCircuit?: boolean}>} */
2
- export function resolve(specifier: string, context: {
3
- parentURL?: string;
4
- }, defaultResolve: (specifier: string, context: {
5
- parentURL?: string;
6
- }, defaultResolve: Function) => Promise<{
7
- url: string;
8
- }>): Promise<{
9
- url: string;
10
- shortCircuit?: boolean;
11
- }>;
12
- /** @returns {Promise<{format: string, source: string}>} */
13
- export function load(url: string, context: {
14
- format?: string;
15
- }, defaultLoad: (url: string, context: {
16
- format?: string;
17
- }, defaultLoad?: Function) => Promise<{
18
- format: string;
19
- source: string;
20
- }>): Promise<{
21
- format: string;
22
- source: string;
23
- }>;
@@ -1,36 +0,0 @@
1
- import { stat } from "node:fs/promises";
2
- import { cwd } from "node:process";
3
- import { fileURLToPath, pathToFileURL } from "node:url";
4
- import { transpile } from "./transpile.mjs";
5
- const baseURL = pathToFileURL(`${cwd()}/`).href;
6
- /** @returns {Promise<{url: string, shortCircuit?: boolean}>} */
7
- export async function resolve(
8
- /** @type string */ specifier,
9
- /** @type {{parentURL?: string}} */ context,
10
- /** @type {(specifier: string, context: {parentURL?: string}, defaultResolve: Function) => Promise<{url: string}>} */ defaultResolve) {
11
- const tsURL = new URL(specifier.replace(/js$/, "ts"), context.parentURL ?? baseURL);
12
- const tsSpecifier = tsURL.href;
13
- try {
14
- const stats = await stat(fileURLToPath(tsURL));
15
- if (stats.isFile()) {
16
- // return { url: tsSpecifier, shortCircuit: true };
17
- return defaultResolve(tsSpecifier, context, defaultResolve);
18
- }
19
- }
20
- catch (e) {
21
- // Do nothing
22
- }
23
- return defaultResolve(specifier, context, defaultResolve);
24
- }
25
- /** @returns {Promise<{format: string, source: string}>} */
26
- export async function load(
27
- /** @type string */ url,
28
- /** @type {{format?: string}} */ context,
29
- /** @type {(url: string, context: {format?: string}, defaultLoad?: Function) => Promise<{format: string, source: string}>} */ defaultLoad) {
30
- return url.endsWith("ts")
31
- ? {
32
- format: "module",
33
- source: await transpile(url, async () => (await defaultLoad(url, { format: "module" })).source),
34
- }
35
- : defaultLoad(url, context, defaultLoad);
36
- }
package/lib/esm/lock.js DELETED
@@ -1,23 +0,0 @@
1
- const locks = new WeakSet();
2
- export function lock(fn) {
3
- return function (...args) {
4
- let ret = null;
5
- let ex = null;
6
- if (!locks.has(fn)) {
7
- locks.add(fn);
8
- try {
9
- ret = fn(...args);
10
- }
11
- catch (e) {
12
- ex = e;
13
- }
14
- }
15
- locks.delete(fn);
16
- if (ex !== null) {
17
- throw ex;
18
- }
19
- else {
20
- return ret;
21
- }
22
- };
23
- }
@@ -1,16 +0,0 @@
1
- import { describe, it, expect } from "./scope/index.js";
2
- import { lock } from "./lock.js";
3
- describe("Lock", () => {
4
- it("prevents reentry", function () {
5
- let count = 0;
6
- const inc = lock(function () {
7
- if (count > 4) {
8
- return;
9
- }
10
- inc();
11
- count++;
12
- });
13
- inc();
14
- expect(count).toBe(1);
15
- });
16
- });
package/lib/esm/log.js DELETED
@@ -1,88 +0,0 @@
1
- import { display } from "./display.js";
2
- export const LEVEL = {
3
- UNKNOWN: 2,
4
- DEBUG: 1,
5
- VERBOSE: 1,
6
- INFO: 2,
7
- WARN: 3,
8
- ERROR: 4,
9
- SILENT: 5,
10
- };
11
- export const LEVELS = {
12
- unknown: LEVEL.UNKNOWN,
13
- debug: LEVEL.DEBUG,
14
- verbose: LEVEL.VERBOSE,
15
- info: LEVEL.INFO,
16
- warn: LEVEL.WARN,
17
- error: LEVEL.ERROR,
18
- silent: LEVEL.SILENT,
19
- };
20
- export function getLogLevel(level = "") {
21
- return (LEVELS[level.toLowerCase()] ?? (!isNaN(+level) ? Number(level) : LEVEL.INFO));
22
- }
23
- export function basicLogFormatter(data) {
24
- return `${data.prefix}: ${data.message}`;
25
- }
26
- function findSource() {
27
- const err = new Error();
28
- // Stack will be:
29
- // findSource
30
- // logAt
31
- // {source}
32
- const lines = err.stack?.split("\n") ?? [];
33
- const atLines = lines.filter((line) => line.match(/^\s*at/));
34
- return atLines[2]?.trim().slice("at ".length) ?? "(unknown)";
35
- }
36
- export function getLogger(name, args = {
37
- format: JSON.stringify,
38
- console,
39
- }) {
40
- if (args instanceof Function) {
41
- args = { format: args };
42
- }
43
- const logAt = (level, prefix, fn) => (message, data) => level >= (logger.level ?? LEVEL.SILENT)
44
- ? fn(logger.format({
45
- name,
46
- prefix,
47
- level,
48
- message: display(message),
49
- ...data,
50
- source: findSource(),
51
- }))
52
- : undefined;
53
- const logger = {
54
- level: LEVEL.INFO,
55
- format: args.format ?? JSON.stringify,
56
- console: args.console ?? global.console,
57
- debug: logAt(LEVEL.DEBUG, "DEBUG", (l) => logger.console.debug(l)),
58
- info: logAt(LEVEL.INFO, "INFO", (l) => logger.console.info(l)),
59
- warn: logAt(LEVEL.WARN, "WARN", (l) => logger.console.warn(l)),
60
- error: logAt(LEVEL.ERROR, "ERR", (l) => logger.console.error(l)),
61
- };
62
- return logger;
63
- }
64
- export const DEFAULT_LOGGER = getLogger("default");
65
- export function debug(message, data) {
66
- if (data)
67
- DEFAULT_LOGGER.debug(message, data);
68
- else
69
- DEFAULT_LOGGER.debug(message);
70
- }
71
- export function info(message, data) {
72
- if (data)
73
- DEFAULT_LOGGER.info(message, data);
74
- else
75
- DEFAULT_LOGGER.info(message);
76
- }
77
- export function warn(message, data) {
78
- if (data)
79
- DEFAULT_LOGGER.warn(message, data);
80
- else
81
- DEFAULT_LOGGER.warn(message);
82
- }
83
- export function error(message, data) {
84
- if (data)
85
- DEFAULT_LOGGER.error(message, data);
86
- else
87
- DEFAULT_LOGGER.error(message);
88
- }
@@ -1,46 +0,0 @@
1
- import { display } from "../display.js";
2
- export const next = (value) => ({
3
- value,
4
- completed: false,
5
- failed: false,
6
- });
7
- export const error = (e) => ({
8
- error: e,
9
- completed: false,
10
- failed: true,
11
- });
12
- export const completed = () => ({ completed: true, failed: false });
13
- export const failed = () => ({ completed: true, failed: true });
14
- export const isNext = (event) => !event.completed && !event.failed && event.value !== undefined;
15
- export const isError = (event) => event.failed && !event.completed;
16
- export const isCompleted = (event) => event.completed && !event.failed;
17
- export const isFailed = (event) => event.completed && event.failed;
18
- export const isEvent = (t) => {
19
- const b = t;
20
- return isNext(b) || isError(b) || isCompleted(b);
21
- };
22
- export const asEvents = (a) => a.map((e) => (isEvent(e) ? e : next(e)));
23
- const marble = (event) => isError(event)
24
- ? "X"
25
- : isFailed(event)
26
- ? "!"
27
- : isCompleted(event)
28
- ? "|"
29
- : `(${display(event.value)})`;
30
- export const marbles = (events) => `:${events.map(marble).join("-")}`;
31
- export const collect = (input$) => {
32
- const collected = [];
33
- const subscription = input$.subscribe({
34
- next: (x) => {
35
- collected.push(next(x));
36
- },
37
- error: (e) => {
38
- collected.push(error(e));
39
- },
40
- complete: () => {
41
- collected.push(completed());
42
- },
43
- });
44
- subscription.unsubscribe();
45
- return collected;
46
- };